From 0de64aa81b45bcd0b01ea91af5445f0a44cd4d22 Mon Sep 17 00:00:00 2001 From: Ilya Tregubov Date: Tue, 12 Sep 2023 16:25:01 +0800 Subject: [PATCH] MDL-78833 gradereport_grader: Propery align averages and ranges row. Depending on editing mode or grade display type it can be right or left aligned --- grade/report/grader/lib.php | 119 +++++++++++++++++++----------------- 1 file changed, 62 insertions(+), 57 deletions(-) diff --git a/grade/report/grader/lib.php b/grade/report/grader/lib.php index f44f606b2ff..3902dd4e8c2 100644 --- a/grade/report/grader/lib.php +++ b/grade/report/grader/lib.php @@ -798,10 +798,13 @@ class grade_report_grader extends grade_report { $tabindices[$item->id]['grade'] = $gradetabindex; $gradetabindex += $numusers * 2; } - $scalesarray = []; - if (!empty($scaleslist)) { + $cache = \cache::make_from_params(\cache_store::MODE_REQUEST, 'gradereport_grader', 'scales'); + $scalesarray = $cache->get(get_class($this)); + if (!$scalesarray) { $scalesarray = $DB->get_records_list('scale', 'id', $scaleslist); + // Save to cache. + $cache->set(get_class($this), $scalesarray); } foreach ($this->gtree->get_levels() as $row) { @@ -896,44 +899,7 @@ class grade_report_grader extends grade_report { $itemcell->attributes['class'] .= ' statusicons'; } - if (!empty($USER->editing)) { - switch ($element['object']->gradetype) { - case GRADE_TYPE_SCALE: - $itemcell->attributes['class'] .= ' grade_type_scale'; - break; - case GRADE_TYPE_VALUE: - $itemcell->attributes['class'] .= ' grade_type_value'; - break; - case GRADE_TYPE_TEXT: - $itemcell->attributes['class'] .= ' grade_type_text'; - break; - } - } else { - $gradedisplaytype = $element['object']->get_displaytype(); - - // Letter grades, scales and text grades are left aligned. - $textgrade = false; - $textgrades = [GRADE_DISPLAY_TYPE_LETTER, - GRADE_DISPLAY_TYPE_REAL_LETTER, - GRADE_DISPLAY_TYPE_LETTER_REAL, - GRADE_DISPLAY_TYPE_LETTER_PERCENTAGE, - GRADE_DISPLAY_TYPE_PERCENTAGE_LETTER]; - if (in_array($gradedisplaytype, $textgrades)) { - $textgrade = true; - } - - if ($textgrade || ($element['object']->gradetype == GRADE_TYPE_TEXT)) { - $itemcell->attributes['class'] .= ' grade_type_text'; - } else if ($element['object']->scaleid && !empty($scalesarray[$element['object']->scaleid])) { - if ($gradedisplaytype == GRADE_DISPLAY_TYPE_PERCENTAGE) { - $itemcell->attributes['class'] .= ' grade_type_value'; - } else { - $itemcell->attributes['class'] .= ' grade_type_scale'; - } - } else { - $itemcell->attributes['class'] .= ' grade_type_value'; - } - } + $itemcell->attributes['class'] .= $this->get_cell_display_class($element['object']); $itemcell->colspan = $colspan; $itemcell->header = true; @@ -1398,7 +1364,6 @@ class grade_report_grader extends grade_report { * @return array Array of rows for the right part of the report */ public function get_right_range_row($rows=array()) { - global $OUTPUT; if ($this->get_pref('showranges')) { $rangesdisplaytype = $this->get_pref('rangesdisplaytype'); @@ -1410,14 +1375,7 @@ class grade_report_grader extends grade_report { $item =& $this->gtree->items[$itemid]; $itemcell = new html_table_cell(); $itemcell->attributes['class'] .= ' range i'. $itemid; - - if ($item->gradetype == GRADE_TYPE_SCALE) { - $itemcell->attributes['class'] .= ' grade_type_scale'; - } else if ($item->gradetype == GRADE_TYPE_VALUE) { - $itemcell->attributes['class'] .= ' grade_type_value'; - } else if ($item->gradetype == GRADE_TYPE_TEXT) { - $itemcell->attributes['class'] .= ' grade_type_text'; - } + $itemcell->attributes['class'] .= $this->get_cell_display_class($item); $hidden = ''; if ($item->is_hidden()) { @@ -1579,14 +1537,7 @@ class grade_report_grader extends grade_report { $decimalpoints = $averagesdecimalpoints; } - $gradetypeclass = ''; - if ($item->gradetype == GRADE_TYPE_SCALE) { - $gradetypeclass = ' grade_type_scale'; - } else if ($item->gradetype == GRADE_TYPE_VALUE) { - $gradetypeclass = ' grade_type_value'; - } else if ($item->gradetype == GRADE_TYPE_TEXT) { - $gradetypeclass = ' grade_type_text'; - } + $gradetypeclass = $this->get_cell_display_class($item); if (!isset($sumarray[$item->id]) || $meancount == 0) { $avgcell = new html_table_cell(); @@ -2038,6 +1989,60 @@ class grade_report_grader extends grade_report { $this->gpr->add_url_params($sortlink); return $sortlink->out(false); } + + /** + * Return class used for text alignment. + * + * @param grade_item $item Can be grade item or grade + * @return string class name used for text alignment + */ + public function get_cell_display_class(grade_item $item): string { + global $USER; + + $gradetypeclass = ''; + if (!empty($USER->editing)) { + switch ($item->gradetype) { + case GRADE_TYPE_SCALE: + $gradetypeclass = ' grade_type_scale'; + break; + case GRADE_TYPE_VALUE: + $gradetypeclass = ' grade_type_value'; + break; + case GRADE_TYPE_TEXT: + $gradetypeclass = ' grade_type_text'; + break; + } + } else { + $gradedisplaytype = $item->get_displaytype(); + + // Letter grades, scales and text grades are left aligned. + $textgrade = false; + $textgrades = [GRADE_DISPLAY_TYPE_LETTER, + GRADE_DISPLAY_TYPE_REAL_LETTER, + GRADE_DISPLAY_TYPE_LETTER_REAL, + GRADE_DISPLAY_TYPE_LETTER_PERCENTAGE, + GRADE_DISPLAY_TYPE_PERCENTAGE_LETTER]; + if (in_array($gradedisplaytype, $textgrades)) { + $textgrade = true; + } + + $cache = \cache::make_from_params(\cache_store::MODE_REQUEST, 'gradereport_grader', 'scales'); + $scalesarray = $cache->get(get_class($this)); + + if ($textgrade || ($item->gradetype == GRADE_TYPE_TEXT)) { + $gradetypeclass = ' grade_type_text'; + } else if ($item->scaleid && !empty($scalesarray[$item->scaleid])) { + if ($gradedisplaytype == GRADE_DISPLAY_TYPE_PERCENTAGE) { + $gradetypeclass = ' grade_type_value'; + } else { + $gradetypeclass = ' grade_type_scale'; + } + } else { + $gradetypeclass = ' grade_type_value'; + } + } + return $gradetypeclass; + } } /**