MDL-81945 gradereport_singleview: Fix hidden grades handling.

If a user is lacking moodle/grade:viewhidden he should not be able
to view or modify grades.
This commit is contained in:
Ilya Tregubov
2025-03-14 15:20:24 +00:00
committed by Jenkins
parent f6bb25b56f
commit 00e68b4589
6 changed files with 33 additions and 3 deletions
@@ -24,6 +24,7 @@
namespace gradereport_singleview\local\screen;
use context_course;
use grade_report;
use gradereport_singleview\local\ui\range;
use gradereport_singleview\local\ui\bulk_insert;
@@ -217,8 +218,12 @@ class grade extends tablelike implements selectable_items, filterable_items {
$grade = $this->fetch_grade_or_default($this->item, $item->id);
$gradestatus = '';
$canviewhidden = $grade->is_hidden() &&
!has_capability('moodle/grade:viewhidden', context_course::instance($this->courseid));
$context = [
'hidden' => $grade->is_hidden(),
'hidden' => $canviewhidden,
'locked' => $grade->is_locked(),
];
@@ -24,6 +24,7 @@
namespace gradereport_singleview\local\screen;
use context_course;
use grade_seq;
use gradereport_singleview;
use moodle_url;
@@ -171,8 +172,11 @@ class user extends tablelike implements selectable_items {
$grade = $this->fetch_grade_or_default($item, $this->item->id);
$gradestatus = '';
$canviewhidden = ($grade->is_hidden() || $item->is_hidden()) &&
!has_capability('moodle/grade:viewhidden', context_course::instance($item->courseid));
$context = [
'hidden' => $grade->is_hidden(),
'hidden' => $canviewhidden,
'locked' => $grade->is_locked(),
];
@@ -26,6 +26,7 @@ namespace gradereport_singleview\local\ui;
defined('MOODLE_INTERNAL') || die;
use context_course;
use grade_grade;
/**
@@ -83,6 +84,10 @@ class exclude extends grade_attribute_format implements be_checked, be_disabled,
* @return element
*/
public function determine_format(): element {
if (($this->grade->is_hidden() || $this->grade->grade_item->is_hidden()) &&
!has_capability('moodle/grade:viewhidden', context_course::instance($this->grade->grade_item->courseid))) {
return new empty_element();
}
return new checkbox_attribute(
$this->get_name(),
$this->get_label(),
@@ -24,6 +24,8 @@
namespace gradereport_singleview\local\ui;
use context_course;
defined('MOODLE_INTERNAL') || die;
/**
@@ -104,6 +106,10 @@ class feedback extends grade_attribute_format implements unique_value, be_disabl
* @return element
*/
public function determine_format(): element {
if (($this->grade->is_hidden() || $this->grade->grade_item->is_hidden()) &&
!has_capability('moodle/grade:viewhidden', context_course::instance($this->grade->grade_item->courseid))) {
return new empty_element();
}
return new text_attribute(
$this->get_name(),
$this->get_value(),
@@ -26,6 +26,7 @@ namespace gradereport_singleview\local\ui;
defined('MOODLE_INTERNAL') || die;
use context_course;
use stdClass;
/**
* UI element representing the finalgrade column.
@@ -115,6 +116,11 @@ class finalgrade extends grade_attribute_format implements unique_value, be_disa
public function determine_format(): element {
global $CFG;
if (($this->grade->is_hidden() || $this->grade->grade_item->is_hidden()) &&
!has_capability('moodle/grade:viewhidden', context_course::instance($this->grade->grade_item->courseid))) {
return new empty_element();
}
if ($this->grade->grade_item->load_scale()) {
$scale = $this->grade->grade_item->load_scale();
@@ -24,6 +24,8 @@
namespace gradereport_singleview\local\ui;
use context_course;
defined('MOODLE_INTERNAL') || die;
/**
@@ -94,7 +96,9 @@ class override extends grade_attribute_format implements be_checked, be_disabled
* @return element
*/
public function determine_format(): element {
if (!$this->grade->grade_item->is_overridable_item()) {
$canviewhidden = ($this->grade->is_hidden() || $this->grade->is_hidden()) &&
!has_capability('moodle/grade:viewhidden', context_course::instance($this->grade->grade_item->courseid));
if (!$canviewhidden || !$this->grade->grade_item->is_overridable_item()) {
return new empty_element();
}
return new checkbox_attribute(