MDL-78082 core_grades: Incomplete Grade Item Handling Enhanced

Problem:
In grade_edittree_column_status::get_category_cell, an assumption was
made that $category->grade_item is always populated. However, this was
not guaranteed, leading to potential issues.

Solution:
To ensure $category->grade_item availability, a $category->load_grade_item();
call was introduced in grade_edittree_column_status::get_category_cell.
This guarantees safe usage of $category->grade_item.

Furthermore, in grade_edit_tree::build_html_tree, $category->get_grade_item()
was replaced with $category->load_grade_item() for enhanced reliability
and potential performance improvement.

Explanation:
These changes enhance robustness and efficiency in gradebook.
Addressing incomplete grade item handling improves code reliability and
user experiences.
This commit is contained in:
Shamim Rezaie
2023-09-06 22:20:39 +10:00
parent 4cf11157c2
commit 8e73a9ec19
+4 -2
View File
@@ -158,7 +158,7 @@ class grade_edit_tree {
$level++;
$this->categories[$object->id] = $strippedname;
$category = grade_category::fetch(array('id' => $object->id));
$item = $category->get_grade_item();
$category->load_grade_item();
// Add aggregation coef input if not a course item and if parent category has correct aggregation type
// Before we print the category's row, we must find out how many rows will appear below it (for the filler cell's rowspan)
@@ -271,7 +271,7 @@ class grade_edit_tree {
$categoryrow->id = 'grade-item-' . $eid;
$categoryrow->attributes['class'] = $courseclass . ' category ';
$categoryrow->attributes['data-category'] = $eid;
$categoryrow->attributes['data-itemid'] = $category->get_grade_item()->id;
$categoryrow->attributes['data-itemid'] = $category->grade_item->id;
$categoryrow->attributes['data-hidden'] = 'false';
foreach ($rowclasses as $class) {
$categoryrow->attributes['class'] .= ' ' . $class;
@@ -1058,6 +1058,8 @@ class grade_edit_tree_column_status extends grade_edit_tree_column {
*/
public function get_category_cell($category, $levelclass, $params) {
global $OUTPUT, $gtree;
$category->load_grade_item();
$categorycell = parent::get_category_cell($category, $levelclass, $params);
$element = [];
$element['object'] = $category;