diff --git a/.upgradenotes/MDL-78890-2024101008511050.yml b/.upgradenotes/MDL-78890-2024101008511050.yml new file mode 100644 index 00000000000..31b2aba5a97 --- /dev/null +++ b/.upgradenotes/MDL-78890-2024101008511050.yml @@ -0,0 +1,7 @@ +issueNumber: MDL-78890 +notes: + gradereport_grader: + - message: >- + The method gradereport_grader::get_right_avg_row() has been finally + deprecated and will now throw an exception if called. + type: deprecated diff --git a/grade/report/grader/lib.php b/grade/report/grader/lib.php index c0b1a5b7bd5..87be16c4684 100644 --- a/grade/report/grader/lib.php +++ b/grade/report/grader/lib.php @@ -1490,180 +1490,10 @@ class grade_report_grader extends grade_report { /** * @deprecated since Moodle 4.4 - Call calculate_average instead. - * Builds and return the row of averages for the right part of the grader report. - * @param array $rows Whether to return only group averages or all averages. - * @param bool $grouponly Whether to return only group averages or all averages. - * @return array Array of rows for the right part of the report */ - public function get_right_avg_row($rows=array(), $grouponly=false) { - global $USER, $DB, $OUTPUT, $CFG; - - debugging('grader_report_grader::get_right_avg_row() is deprecated. - Call grade_report::calculate_average() instead.', DEBUG_DEVELOPER); - - if (!$this->canviewhidden) { - // Totals might be affected by hiding, if user can not see hidden grades the aggregations might be altered - // better not show them at all if user can not see all hidden grades. - return $rows; - } - - $averagesdisplaytype = $this->get_pref('averagesdisplaytype'); - $averagesdecimalpoints = $this->get_pref('averagesdecimalpoints'); - $meanselection = $this->get_pref('meanselection'); - $shownumberofgrades = $this->get_pref('shownumberofgrades'); - - if ($grouponly) { - $showaverages = $this->currentgroup && $this->get_pref('showaverages'); - $groupsql = $this->groupsql; - $groupwheresql = $this->groupwheresql; - $groupwheresqlparams = $this->groupwheresql_params; - } else { - $showaverages = $this->get_pref('showaverages'); - $groupsql = ""; - $groupwheresql = ""; - $groupwheresqlparams = array(); - } - - if ($showaverages) { - $totalcount = $this->get_numusers($grouponly); - - // Limit to users with a gradeable role. - list($gradebookrolessql, $gradebookrolesparams) = $DB->get_in_or_equal(explode(',', $this->gradebookroles), SQL_PARAMS_NAMED, 'grbr0'); - - // Limit to users with an active enrollment. - $coursecontext = $this->context->get_course_context(true); - $defaultgradeshowactiveenrol = !empty($CFG->grade_report_showonlyactiveenrol); - $showonlyactiveenrol = get_user_preferences('grade_report_showonlyactiveenrol', $defaultgradeshowactiveenrol); - $showonlyactiveenrol = $showonlyactiveenrol || !has_capability('moodle/course:viewsuspendedusers', $coursecontext); - list($enrolledsql, $enrolledparams) = get_enrolled_sql($this->context, '', 0, $showonlyactiveenrol); - - // We want to query both the current context and parent contexts. - list($relatedctxsql, $relatedctxparams) = $DB->get_in_or_equal($this->context->get_parent_context_ids(true), SQL_PARAMS_NAMED, 'relatedctx'); - - $params = array_merge(array('courseid' => $this->courseid), $gradebookrolesparams, $enrolledparams, $groupwheresqlparams, $relatedctxparams); - - // Find sums of all grade items in course. - $sql = "SELECT g.itemid, SUM(g.finalgrade) AS sum - FROM {grade_items} gi - JOIN {grade_grades} g ON g.itemid = gi.id - JOIN {user} u ON u.id = g.userid - JOIN ($enrolledsql) je ON je.id = u.id - JOIN ( - SELECT DISTINCT ra.userid - FROM {role_assignments} ra - WHERE ra.roleid $gradebookrolessql - AND ra.contextid $relatedctxsql - ) rainner ON rainner.userid = u.id - $groupsql - WHERE gi.courseid = :courseid - AND u.deleted = 0 - AND g.finalgrade IS NOT NULL - $groupwheresql - GROUP BY g.itemid"; - $sumarray = array(); - if ($sums = $DB->get_records_sql($sql, $params)) { - foreach ($sums as $itemid => $csum) { - $sumarray[$itemid] = $csum->sum; - } - } - - // MDL-10875 Empty grades must be evaluated as grademin, NOT always 0 - // This query returns a count of ungraded grades (NULL finalgrade OR no matching record in grade_grades table) - $sql = "SELECT gi.id, COUNT(DISTINCT u.id) AS count - FROM {grade_items} gi - CROSS JOIN ($enrolledsql) u - JOIN {role_assignments} ra - ON ra.userid = u.id - LEFT OUTER JOIN {grade_grades} g - ON (g.itemid = gi.id AND g.userid = u.id AND g.finalgrade IS NOT NULL) - $groupsql - WHERE gi.courseid = :courseid - AND ra.roleid $gradebookrolessql - AND ra.contextid $relatedctxsql - AND g.id IS NULL - $groupwheresql - GROUP BY gi.id"; - - $ungradedcounts = $DB->get_records_sql($sql, $params); - - $avgrow = new html_table_row(); - $avgrow->attributes['class'] = 'avg'; - - foreach ($this->gtree->items as $itemid => $unused) { - $item =& $this->gtree->items[$itemid]; - - if ($item->needsupdate) { - $avgcell = new html_table_cell(); - $avgcell->attributes['class'] = 'i'. $itemid; - $avgcell->text = $OUTPUT->container(get_string('error'), 'gradingerror'); - $avgrow->cells[] = $avgcell; - continue; - } - - if (!isset($sumarray[$item->id])) { - $sumarray[$item->id] = 0; - } - - if (empty($ungradedcounts[$itemid])) { - $ungradedcount = 0; - } else { - $ungradedcount = $ungradedcounts[$itemid]->count; - } - - if ($meanselection == GRADE_REPORT_MEAN_GRADED) { - $meancount = $totalcount - $ungradedcount; - } else { // Bump up the sum by the number of ungraded items * grademin - $sumarray[$item->id] += $ungradedcount * $item->grademin; - $meancount = $totalcount; - } - - // Determine which display type to use for this average - if (!empty($USER->editing)) { - $displaytype = GRADE_DISPLAY_TYPE_REAL; - - } else if ($averagesdisplaytype == GRADE_REPORT_PREFERENCE_INHERIT) { // no ==0 here, please resave the report and user preferences - $displaytype = $item->get_displaytype(); - - } else { - $displaytype = $averagesdisplaytype; - } - - // Override grade_item setting if a display preference (not inherit) was set for the averages - if ($averagesdecimalpoints == GRADE_REPORT_PREFERENCE_INHERIT) { - $decimalpoints = $item->get_decimals(); - - } else { - $decimalpoints = $averagesdecimalpoints; - } - - $gradetypeclass = $this->get_cell_display_class($item); - - if (!isset($sumarray[$item->id]) || $meancount == 0) { - $avgcell = new html_table_cell(); - $avgcell->attributes['class'] = $gradetypeclass . ' i'. $itemid; - $avgcell->attributes['data-itemid'] = $itemid; - $avgcell->text = html_writer::div('-', '', ['data-collapse' => 'avgrowcell']); - $avgrow->cells[] = $avgcell; - } else { - $sum = $sumarray[$item->id]; - $avgradeval = $sum/$meancount; - $gradehtml = grade_format_gradevalue($avgradeval, $item, true, $displaytype, $decimalpoints); - - $numberofgrades = ''; - if ($shownumberofgrades) { - $numberofgrades = " ($meancount)"; - } - - $avgcell = new html_table_cell(); - $avgcell->attributes['class'] = $gradetypeclass . ' i'. $itemid; - $avgcell->attributes['data-itemid'] = $itemid; - $avgcell->text = html_writer::div($gradehtml.$numberofgrades, '', ['data-collapse' => 'avgrowcell']); - $avgrow->cells[] = $avgcell; - } - } - $rows[] = $avgrow; - } - return $rows; + #[\core\attribute\deprecated('grade_report::calculate_average()', since: '4.4', final: true)] + public function get_right_avg_row() { + \core\deprecation::emit_deprecation_if_present([self::class, __FUNCTION__]); } /**