From aff1f3a400fb3893fe807dbe8110097cac8ba7b6 Mon Sep 17 00:00:00 2001 From: Jun Pataleta Date: Fri, 18 Aug 2023 23:24:35 +0800 Subject: [PATCH 1/2] MDL-79056 gradereport_user: Set grade category and item names as th * The table cells mentioned in the `headers` attribute of other table cells need to be using the table header tag. Otherwise, HTML validation fails. --- grade/report/user/classes/report/user.php | 6 ++++ grade/report/user/styles.css | 37 ++++++++++++++--------- 2 files changed, 29 insertions(+), 14 deletions(-) diff --git a/grade/report/user/classes/report/user.php b/grade/report/user/classes/report/user.php index 6f099ca912b..b0bf955437d 100644 --- a/grade/report/user/classes/report/user.php +++ b/grade/report/user/classes/report/user.php @@ -1050,6 +1050,12 @@ class user extends grade_report { if (!is_null($content)) { $rowcell = new \html_table_cell($content); + // Grade item names and cateogry names are referenced in the `headers` attribute of table cells. + // These table cells should be set to tags. + if ($tablecolumn === 'itemname') { + $rowcell->header = true; + } + if (isset($rowdata[$tablecolumn]['class'])) { $rowcell->attributes['class'] = $rowdata[$tablecolumn]['class']; } diff --git a/grade/report/user/styles.css b/grade/report/user/styles.css index 05335c51e98..580ba9bcad9 100644 --- a/grade/report/user/styles.css +++ b/grade/report/user/styles.css @@ -67,6 +67,8 @@ .grade-report-user .user-grade .baggt, .grade-report-user .user-grade .baggb { font-weight: bold; + background-color: #f8f9fa; + border: none; } .path-grade-report-user .user-report-container, @@ -99,23 +101,30 @@ border-bottom: 1px solid #dee2e6; } -.path-grade-report-user .user-grade td.category, -.grade-report-user .user-grade td.category { +.path-grade-report-user .user-grade th.column-itemname:not(.header,.category,.baggt,.baggb), +.grade-report-user .user-grade th.column-itemname:not(.header,.category,.baggt,.baggb) { + background-color: white; + font-weight: normal; + border-bottom: 1px solid #dee2e6; +} + +.path-grade-report-user .user-grade th.category, +.grade-report-user .user-grade th.category { background-color: white; border: 1px solid #dee2e6; padding-left: 10px; font-weight: bold; } -.path-grade-report-user .user-grade td.category a[aria-expanded="true"] .expanded, -.path-grade-report-user .user-grade td.category a[aria-expanded="false"] .collapsed, -.grade-report-user .user-grade td.category a[aria-expanded="true"] .expanded, -.grade-report-user .user-grade td.category a[aria-expanded="false"] .collapsed { +.path-grade-report-user .user-grade th.category a[aria-expanded="true"] .expanded, +.path-grade-report-user .user-grade th.category a[aria-expanded="false"] .collapsed, +.grade-report-user .user-grade th.category a[aria-expanded="true"] .expanded, +.grade-report-user .user-grade th.category a[aria-expanded="false"] .collapsed { display: none; } -.path-grade-report-user .user-grade td.category a.toggle-category, -.grade-report-user .user-grade td.category a.toggle-category { +.path-grade-report-user .user-grade th.category a.toggle-category, +.grade-report-user .user-grade th.category a.toggle-category { height: 24px; width: 24px; font-size: 12px; @@ -123,8 +132,8 @@ margin-right: 3px; } -.path-grade-report-user .user-grade td.category a.toggle-category i, -.grade-report-user .user-grade td.category a.toggle-category i { +.path-grade-report-user .user-grade th.category a.toggle-category i, +.grade-report-user .user-grade th.category a.toggle-category i { font-size: 12px; width: 12px; height: 12px; @@ -173,14 +182,14 @@ } @media print { - .path-grade-report-user .user-grade td.category, - .grade-report-user .user-grade td.category { + .path-grade-report-user .user-grade th.category, + .grade-report-user .user-grade th.category { border-left: none; border-right: none; } - .path-grade-report-user .user-grade td.category a.toggle-category, - .grade-report-user .user-grade td.category a.toggle-category + .path-grade-report-user .user-grade th.category a.toggle-category, + .grade-report-user .user-grade th.category a.toggle-category .path-grade-report-user #page-footer { display: none; } From adc138d1f14fe323836b47b9c0d2ab0a15759894 Mon Sep 17 00:00:00 2001 From: Jun Pataleta Date: Mon, 4 Sep 2023 23:28:18 +0800 Subject: [PATCH 2/2] MDL-79056 gradereport_user: Make column heading IDs unique Associate column headings of user report tables to the user ID that the report is being generated for. This will prevent duplicate IDs for the report columns when multiple user report tables are displayed on the User report page. --- grade/report/user/classes/report/user.php | 23 ++++++++++++----------- 1 file changed, 12 insertions(+), 11 deletions(-) diff --git a/grade/report/user/classes/report/user.php b/grade/report/user/classes/report/user.php index b0bf955437d..e27d667ce2b 100644 --- a/grade/report/user/classes/report/user.php +++ b/grade/report/user/classes/report/user.php @@ -450,7 +450,7 @@ class user extends grade_report { $depth = $element['depth']; $gradeobject = $element['object']; $eid = $gradeobject->id; - $element['userid'] = $this->user->id; + $element['userid'] = $userid = $this->user->id; $fullname = $this->gtree->get_element_header($element, true, false, true, true, true); $data = []; $gradeitemdata = []; @@ -592,7 +592,7 @@ class user extends grade_report { if ($this->showweight) { $data['weight']['class'] = $class; $data['weight']['content'] = '-'; - $data['weight']['headers'] = "$headercat $headerrow weight"; + $data['weight']['headers'] = "$headercat $headerrow weight$userid"; // Has a weight assigned, might be extra credit. // This obliterates the weight because it provides a more informative description. @@ -679,7 +679,7 @@ class user extends grade_report { $gradegrade->grade_item, true); $gradeitemdata['graderaw'] = $gradeval; } - $data['grade']['headers'] = "$headercat $headerrow grade"; + $data['grade']['headers'] = "$headercat $headerrow grade$userid"; $gradeitemdata['gradeformatted'] = $data['grade']['content']; } @@ -690,7 +690,7 @@ class user extends grade_report { GRADE_DISPLAY_TYPE_REAL, $this->rangedecimals ); - $data['range']['headers'] = "$headercat $headerrow range"; + $data['range']['headers'] = "$headercat $headerrow range$userid"; $gradeitemdata['rangeformatted'] = $data['range']['content']; $gradeitemdata['grademin'] = $gradegrade->grade_item->grademin; @@ -722,7 +722,7 @@ class user extends grade_report { GRADE_DISPLAY_TYPE_PERCENTAGE ); } - $data['percentage']['headers'] = "$headercat $headerrow percentage"; + $data['percentage']['headers'] = "$headercat $headerrow percentage$userid"; $gradeitemdata['percentageformatted'] = $data['percentage']['content']; } @@ -752,7 +752,7 @@ class user extends grade_report { GRADE_DISPLAY_TYPE_LETTER ); } - $data['lettergrade']['headers'] = "$headercat $headerrow lettergrade"; + $data['lettergrade']['headers'] = "$headercat $headerrow lettergrade$userid"; $gradeitemdata['lettergradeformatted'] = $data['lettergrade']['content']; } @@ -786,7 +786,7 @@ class user extends grade_report { $gradeitemdata['rank'] = $rank; $gradeitemdata['numusers'] = $numusers; } - $data['rank']['headers'] = "$headercat $headerrow rank"; + $data['rank']['headers'] = "$headercat $headerrow rank$userid"; } // Average. @@ -800,7 +800,7 @@ class user extends grade_report { } else { $data['average']['content'] = '-'; } - $data['average']['headers'] = "$headercat $headerrow average"; + $data['average']['headers'] = "$headercat $headerrow average$userid"; } // Feedback. @@ -834,13 +834,13 @@ class user extends grade_report { ['context' => $gradegrade->get_context()]); $gradeitemdata['feedback'] = $gradegrade->feedback; } - $data['feedback']['headers'] = "$headercat $headerrow feedback"; + $data['feedback']['headers'] = "$headercat $headerrow feedback$userid"; } // Contribution to the course total column. if ($this->showcontributiontocoursetotal) { $data['contributiontocoursetotal']['class'] = $class; $data['contributiontocoursetotal']['content'] = '-'; - $data['contributiontocoursetotal']['headers'] = "$headercat $headerrow contributiontocoursetotal"; + $data['contributiontocoursetotal']['headers'] = "$headercat $headerrow contributiontocoursetotal$userid"; } $this->gradeitemsdata[] = $gradeitemdata; @@ -1022,9 +1022,10 @@ class user extends grade_report { ]; // Set the table headings. + $userid = $this->user->id; foreach ($this->tableheaders as $index => $heading) { $headingcell = new \html_table_cell($heading); - $headingcell->attributes['id'] = $this->tablecolumns[$index]; + $headingcell->attributes['id'] = $this->tablecolumns[$index] . $userid; $headingcell->attributes['class'] = "header column-{$this->tablecolumns[$index]}"; if ($index == 0) { $headingcell->colspan = $this->maxdepth;