From af22c038b77a5670f9fa5190f2a63ac761e582c9 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 5ec773e5001..67bde03025d 100644 --- a/grade/report/user/classes/report/user.php +++ b/grade/report/user/classes/report/user.php @@ -1054,6 +1054,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 7998d80302d40a49c7f0c1ca6041a3a21035d843 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 67bde03025d..a0227c7b41b 100644 --- a/grade/report/user/classes/report/user.php +++ b/grade/report/user/classes/report/user.php @@ -445,7 +445,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, false, true); $data = []; $gradeitemdata = []; @@ -587,7 +587,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. @@ -690,7 +690,7 @@ class user extends grade_report { $gradegrade->grade_item, true) . $gradestatus; $gradeitemdata['graderaw'] = $gradeval; } - $data['grade']['headers'] = "$headercat $headerrow grade"; + $data['grade']['headers'] = "$headercat $headerrow grade$userid"; $gradeitemdata['gradeformatted'] = $data['grade']['content']; } @@ -701,7 +701,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; @@ -733,7 +733,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']; } @@ -763,7 +763,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']; } @@ -797,7 +797,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. @@ -811,7 +811,7 @@ class user extends grade_report { } else { $data['average']['content'] = '-'; } - $data['average']['headers'] = "$headercat $headerrow average"; + $data['average']['headers'] = "$headercat $headerrow average$userid"; } // Feedback. @@ -838,13 +838,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; @@ -1026,9 +1026,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;