diff --git a/mod/assign/locallib.php b/mod/assign/locallib.php index 3ae3cb9e4c1..ad92865e562 100644 --- a/mod/assign/locallib.php +++ b/mod/assign/locallib.php @@ -77,6 +77,9 @@ class assign { /** @var stdClass the assignment record that contains the global settings for this assign instance */ private $instance; + /** @var stdClass the grade_item record for this assign instance's primary grade item. */ + private $gradeitem; + /** @var context the context of the course module for this assign instance * (or just the course if we are creating a new one) */ @@ -1085,6 +1088,29 @@ class assign { return $this->instance; } + /** + * Get the primary grade item for this assign instance. + * + * @return stdClass The grade_item record + */ + public function get_grade_item() { + if ($this->gradeitem) { + return $this->gradeitem; + } + $instance = $this->get_instance(); + $params = array('itemtype' => 'mod', + 'itemmodule' => 'assign', + 'iteminstance' => $instance->id, + 'courseid' => $instance->course, + 'itemnumber' => 0); + $this->gradeitem = grade_item::fetch($params); + if (!$this->gradeitem) { + throw new coding_exception('Improper use of the assignment class. ' . + 'Cannot load the grade item.'); + } + return $this->gradeitem; + } + /** * Get the context of the current course. * @@ -1200,13 +1226,15 @@ class assign { $o .= ''; if ($grade == -1 || $grade === null) { $o .= '-'; - return $o; } else { - $o .= format_float($grade, 2) . - ' / ' . - format_float($this->get_instance()->grade, 2); - return $o; + $item = $this->get_grade_item(); + $o .= grade_format_gradevalue($grade, $item); + if ($item->get_displaytype() == GRADE_DISPLAY_TYPE_REAL) { + // If displaying the raw grade, also display the total value. + $o .= ' / ' . format_float($this->get_instance()->grade, 2); + } } + return $o; } } else {