Bistate aggregator shows failed if course is finished - progress otherwise. (If failed result is supported

This commit is contained in:
PMKuipers 2023-08-08 23:29:01 +02:00
parent 4d4a461e21
commit 46ab702292

View File

@ -133,15 +133,14 @@ class bistate_aggregator extends \local_treestudyplan\aggregator {
else if($started == 0){ else if($started == 0){
return completion::INCOMPLETE; return completion::INCOMPLETE;
} }
else if($this->use_failed && ($fraction_failed >= $this->thresh_progress)){
return completion::FAILED;
}
else { else {
return completion::PROGRESS; return completion::PROGRESS;
} }
} }
public function aggregate_course(courseinfo $courseinfo, studyitem $studyitem, $userid){ 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. // Note: studyitem condition config is not used in this aggregator.
// loop through all associated gradables and count the totals, completed, etc.. // loop through all associated gradables and count the totals, completed, etc..
$completions = []; $completions = [];
@ -156,7 +155,12 @@ class bistate_aggregator extends \local_treestudyplan\aggregator {
} }
// Combine the aquired completions into one // 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"; $table = "local_treestudyplan_gradecfg";
$gradeitem = $gradeinfo->getGradeitem(); $gradeitem = $gradeinfo->getGradeitem();
$grade = $gradeitem->get_final($userid); $grade = $gradeitem->get_final($userid);
$course = \get_course($gradeitem->courseid); // Fetch course from cache
$coursefinished = ($course->enddate)?($course->enddate < time()):false;
if(empty($grade)){ if(empty($grade)){
return completion::INCOMPLETE; return completion::INCOMPLETE;
@ -244,7 +250,7 @@ class bistate_aggregator extends \local_treestudyplan\aggregator {
// return completed if completed // return completed if completed
return completion::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 failed if failed is enabled and the grade is less than the minimum grade for progress
return completion::FAILED; return completion::FAILED;
@ -260,7 +266,7 @@ class bistate_aggregator extends \local_treestudyplan\aggregator {
if($finalgrade >= $gradeitem->gradepass){ if($finalgrade >= $gradeitem->gradepass){
return completion::COMPLETED; 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 failed if failed is enabled and the grade is 1, while there are at leas 3 states.
return completion::FAILED; return completion::FAILED;
@ -280,7 +286,7 @@ class bistate_aggregator extends \local_treestudyplan\aggregator {
if($score > 0.55){ if($score > 0.55){
return completion::COMPLETED; 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 failed if failed is enabled and the grade is 1, while there are at leas 3 states.
return completion::FAILED; return completion::FAILED;