From 46ab702292ce708f9bf9e322a76d4055ee210ea0 Mon Sep 17 00:00:00 2001 From: PMKuipers Date: Tue, 8 Aug 2023 23:29:01 +0200 Subject: [PATCH] Bistate aggregator shows failed if course is finished - progress otherwise. (If failed result is supported --- .../local/aggregators/bistate_aggregator.php | 20 ++++++++++++------- 1 file changed, 13 insertions(+), 7 deletions(-) diff --git a/classes/local/aggregators/bistate_aggregator.php b/classes/local/aggregators/bistate_aggregator.php index e7741c3..62403b9 100644 --- a/classes/local/aggregators/bistate_aggregator.php +++ b/classes/local/aggregators/bistate_aggregator.php @@ -133,15 +133,14 @@ class bistate_aggregator extends \local_treestudyplan\aggregator { else if($started == 0){ return completion::INCOMPLETE; } - else if($this->use_failed && ($fraction_failed >= $this->thresh_progress)){ - return completion::FAILED; - } else { return completion::PROGRESS; } } public function aggregate_course(courseinfo $courseinfo, studyitem $studyitem, $userid){ + $course = $courseinfo->course(); + $coursefinished = ($course->enddate)?($course->enddate < time()):false; // Note: studyitem condition config is not used in this aggregator. // loop through all associated gradables and count the totals, completed, etc.. $completions = []; @@ -156,7 +155,12 @@ class bistate_aggregator extends \local_treestudyplan\aggregator { } // Combine the aquired completions into one - return self::aggregate_binary_goals($completions,$required); + $result = self::aggregate_binary_goals($completions,$required); + if($this->use_failed && $result == completion::PROGRESS && $coursefinished){ + return completion::FAILED; + } else { + return $result; + } } @@ -199,6 +203,8 @@ class bistate_aggregator extends \local_treestudyplan\aggregator { $table = "local_treestudyplan_gradecfg"; $gradeitem = $gradeinfo->getGradeitem(); $grade = $gradeitem->get_final($userid); + $course = \get_course($gradeitem->courseid); // Fetch course from cache + $coursefinished = ($course->enddate)?($course->enddate < time()):false; if(empty($grade)){ return completion::INCOMPLETE; @@ -244,7 +250,7 @@ class bistate_aggregator extends \local_treestudyplan\aggregator { // return completed if completed return completion::COMPLETED; } - else if($this->use_failed && $finalgrade < $gradecfg->min_progress) + else if($this->use_failed && $coursefinished) { // return failed if failed is enabled and the grade is less than the minimum grade for progress return completion::FAILED; @@ -260,7 +266,7 @@ class bistate_aggregator extends \local_treestudyplan\aggregator { if($finalgrade >= $gradeitem->gradepass){ return completion::COMPLETED; } - else if($this->use_failed && $gradeitem->gradepass >= 3 && $range >= 3 && $finalgrade == 1) + else if($this->use_failed && $coursefinished) { // return failed if failed is enabled and the grade is 1, while there are at leas 3 states. return completion::FAILED; @@ -280,7 +286,7 @@ class bistate_aggregator extends \local_treestudyplan\aggregator { if($score > 0.55){ return completion::COMPLETED; } - else if($this->use_failed && $range >= 3 && $finalgrade == 1) + else if($this->use_failed && $coursefinished) { // return failed if failed is enabled and the grade is 1, while there are at leas 3 states. return completion::FAILED;