From da7e5daf1edbe6b1954a7b240665527e451776a7 Mon Sep 17 00:00:00 2001 From: Tim Lock Date: Fri, 22 Nov 2013 07:17:24 +1030 Subject: [PATCH 1/3] MDL-43020: Fix calculation of lesson scale value using gradeitem grademax --- mod/lesson/lib.php | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/mod/lesson/lib.php b/mod/lesson/lib.php index a94c4a9dfe2..9e1908033ae 100644 --- a/mod/lesson/lib.php +++ b/mod/lesson/lib.php @@ -468,6 +468,10 @@ function lesson_grade_item_update($lesson, $grades=null) { } else if ($lesson->grade < 0) { $params['gradetype'] = GRADE_TYPE_SCALE; $params['scaleid'] = -$lesson->grade; + + // When converting a score to a scale, use scale's grade maximum to calculate it. + $grade = grade_get_grades($lesson->course, 'mod', 'lesson', $lesson->id, reset($grades)->userid); + $params['grademax'] = reset($grade->items)->grademax; } else { $params['gradetype'] = GRADE_TYPE_NONE; } @@ -488,7 +492,7 @@ function lesson_grade_item_update($lesson, $grades=null) { } //check raw grade isnt null otherwise we erroneously insert a grade of 0 if ($grade['rawgrade'] !== null) { - $grades[$key]['rawgrade'] = ($grade['rawgrade'] * $lesson->grade / 100); + $grades[$key]['rawgrade'] = ($grade['rawgrade'] * $params['grademax'] / 100); } else { //setting rawgrade to null just in case user is deleting a grade $grades[$key]['rawgrade'] = null; From 74dd3bd6c7e5ebee8aa82b28d84004a7c3ad6c94 Mon Sep 17 00:00:00 2001 From: Tim Lock Date: Mon, 25 Nov 2013 09:31:56 +1030 Subject: [PATCH 2/3] MDL-43020: Fix calculation of lesson scale value warning --- mod/lesson/lib.php | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/mod/lesson/lib.php b/mod/lesson/lib.php index 9e1908033ae..fd6bdb08e4d 100644 --- a/mod/lesson/lib.php +++ b/mod/lesson/lib.php @@ -470,8 +470,10 @@ function lesson_grade_item_update($lesson, $grades=null) { $params['scaleid'] = -$lesson->grade; // When converting a score to a scale, use scale's grade maximum to calculate it. - $grade = grade_get_grades($lesson->course, 'mod', 'lesson', $lesson->id, reset($grades)->userid); - $params['grademax'] = reset($grade->items)->grademax; + if (!empty($grades)) { + $grade = grade_get_grades($lesson->course, 'mod', 'lesson', $lesson->id, reset($grades)->userid); + $params['grademax'] = reset($grade->items)->grademax; + } } else { $params['gradetype'] = GRADE_TYPE_NONE; } From 16c25753a81f707dc424d7c0a920b99c12a59f14 Mon Sep 17 00:00:00 2001 From: Tim Lock Date: Mon, 25 Nov 2013 15:08:19 +1030 Subject: [PATCH 3/3] MDL-43020: Fix lesson scale warnings when deleting user attempts --- mod/lesson/lib.php | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/mod/lesson/lib.php b/mod/lesson/lib.php index fd6bdb08e4d..ec400821235 100644 --- a/mod/lesson/lib.php +++ b/mod/lesson/lib.php @@ -469,9 +469,19 @@ function lesson_grade_item_update($lesson, $grades=null) { $params['gradetype'] = GRADE_TYPE_SCALE; $params['scaleid'] = -$lesson->grade; - // When converting a score to a scale, use scale's grade maximum to calculate it. + // Make sure current grade fetched correctly from $grades + $currentgrade = null; if (!empty($grades)) { - $grade = grade_get_grades($lesson->course, 'mod', 'lesson', $lesson->id, reset($grades)->userid); + if (is_array($grades)) { + $currentgrade = reset($grades); + } else { + $currentgrade = $grades; + } + } + + // When converting a score to a scale, use scale's grade maximum to calculate it. + if (!empty($currentgrade) && $currentgrade->rawgrade !== null) { + $grade = grade_get_grades($lesson->course, 'mod', 'lesson', $lesson->id, $currentgrade->userid); $params['grademax'] = reset($grade->items)->grademax; } } else {