From 7d054079c57bb5ffebf301a96f8e72944ff05d95 Mon Sep 17 00:00:00 2001 From: Damyon Wiese Date: Fri, 1 Feb 2013 13:44:46 +0800 Subject: [PATCH] MDL-37635 Assign: Prevent errors when viewing a feedback when there is no grade_item in the gradebook --- mod/assign/locallib.php | 57 +++++++++++++++++++++++++++++------------ mod/assign/renderer.php | 22 ++++++++-------- 2 files changed, 52 insertions(+), 27 deletions(-) diff --git a/mod/assign/locallib.php b/mod/assign/locallib.php index f61aa404ef1..badd017ee8f 100644 --- a/mod/assign/locallib.php +++ b/mod/assign/locallib.php @@ -2180,8 +2180,12 @@ class assign { $this->get_instance()->id, $user->id); - $gradingitem = $gradinginfo->items[0]; - $gradebookgrade = $gradingitem->grades[$user->id]; + $gradingitem = null; + $gradebookgrade = '-'; + if (isset($gradinginfo->items[0])) { + $gradingitem = $gradinginfo->items[0]; + $gradebookgrade = $gradingitem->grades[$user->id]; + } // check to see if all feedback plugins are empty $emptyplugins = true; @@ -2196,24 +2200,34 @@ class assign { } - if (!($gradebookgrade->hidden) && ($gradebookgrade->grade !== null || !$emptyplugins)) { + $cangrade = has_capability('mod/assign:grade', $this->get_context()); + // If there is feedback or a visible grade, show the summary. + if ((!empty($gradebookgrade->grade) && ($cangrade || !$gradebookgrade->hidden)) || + !$emptyplugins) { - $gradefordisplay = ''; + $gradefordisplay = null; + $gradeddate = null; + $grader = null; $gradingmanager = get_grading_manager($this->get_context(), 'mod_assign', 'submissions'); - if ($controller = $gradingmanager->get_active_controller()) { - $controller->set_grade_range(make_grades_menu($this->get_instance()->grade)); - $gradefordisplay = $controller->render_grade($PAGE, - $grade->id, - $gradingitem, - $gradebookgrade->str_long_grade, - has_capability('mod/assign:grade', $this->get_context())); - } else { - $gradefordisplay = $this->display_grade($gradebookgrade->grade, false); + // Only show the grade if it is not hidden in gradebook. + if (!empty($gradebookgrade->grade) && ($cangrade || !$gradebookgrade->hidden)) { + if ($controller = $gradingmanager->get_active_controller()) { + $controller->set_grade_range(make_grades_menu($this->get_instance()->grade)); + $gradefordisplay = $controller->render_grade($PAGE, + $grade->id, + $gradingitem, + $gradebookgrade->str_long_grade, + $cangrade); + } else { + $gradefordisplay = $this->display_grade($gradebookgrade->grade, false); + } + $gradeddate = $gradebookgrade->dategraded; + if (isset($grade->grader)) { + $grader = $DB->get_record('user', array('id'=>$grade->grader)); + } } - $gradeddate = $gradebookgrade->dategraded; - $grader = $DB->get_record('user', array('id'=>$grade->grader)); $feedbackstatus = new assign_feedback_status($gradefordisplay, $gradeddate, @@ -3093,11 +3107,20 @@ class assign { } if (has_all_capabilities(array('gradereport/grader:view', 'moodle/grade:viewall'), $this->get_course_context())) { + $usergrade = '-'; + if (isset($gradinginfo->items[0]->grades[$userid]->str_grade)) { + $usergrade = $gradinginfo->items[0]->grades[$userid]->str_grade; + } $gradestring = $this->output->action_link(new moodle_url('/grade/report/grader/index.php', array('id'=>$this->get_course()->id)), - $gradinginfo->items[0]->grades[$userid]->str_grade); + $usergrade); } else { - $gradestring = $gradinginfo->items[0]->grades[$userid]->str_grade; + $usergrade = '-'; + if (isset($gradinginfo->items[0]->grades[$userid]) && + !$grading_info->items[0]->grades[$userid]->hidden) { + $usergrade = $gradinginfo->items[0]->grades[$userid]->str_grade; + } + $gradestring = $usergrade; } $mform->addElement('static', 'finalgrade', get_string('currentgrade', 'assign').':', $gradestring); diff --git a/mod/assign/renderer.php b/mod/assign/renderer.php index 107eae885ae..4af7b1f2ffc 100644 --- a/mod/assign/renderer.php +++ b/mod/assign/renderer.php @@ -303,17 +303,19 @@ class mod_assign_renderer extends plugin_renderer_base { $o .= $this->output->box_start('boxaligncenter feedbacktable'); $t = new html_table(); - $row = new html_table_row(); - $cell1 = new html_table_cell(get_string('grade')); - $cell2 = new html_table_cell($status->gradefordisplay); - $row->cells = array($cell1, $cell2); - $t->data[] = $row; + if (isset($status->gradefordisplay)) { + $row = new html_table_row(); + $cell1 = new html_table_cell(get_string('grade')); + $cell2 = new html_table_cell($status->gradefordisplay); + $row->cells = array($cell1, $cell2); + $t->data[] = $row; - $row = new html_table_row(); - $cell1 = new html_table_cell(get_string('gradedon', 'assign')); - $cell2 = new html_table_cell(userdate($status->gradeddate)); - $row->cells = array($cell1, $cell2); - $t->data[] = $row; + $row = new html_table_row(); + $cell1 = new html_table_cell(get_string('gradedon', 'assign')); + $cell2 = new html_table_cell(userdate($status->gradeddate)); + $row->cells = array($cell1, $cell2); + $t->data[] = $row; + } if ($status->grader) { $row = new html_table_row(); -- 2.43.0