2 // This file is part of Moodle - http://moodle.org/
4 // Moodle is free software: you can redistribute it and/or modify
5 // it under the terms of the GNU General Public License as published by
6 // the Free Software Foundation, either version 3 of the License, or
7 // (at your option) any later version.
9 // Moodle is distributed in the hope that it will be useful,
10 // but WITHOUT ANY WARRANTY; without even the implied warranty of
11 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 // GNU General Public License for more details.
14 // You should have received a copy of the GNU General Public License
15 // along with Moodle. If not, see <http://www.gnu.org/licenses/>.
18 * UI element representing the finalgrade column.
20 * @package gradereport_singleview
21 * @copyright 2014 Moodle Pty Ltd (http://moodle.com)
22 * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
25 namespace gradereport_singleview\local\ui;
27 defined('MOODLE_INTERNAL') || die;
31 * UI element representing the finalgrade column.
33 * @package gradereport_singleview
34 * @copyright 2014 Moodle Pty Ltd (http://moodle.com)
35 * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
37 class finalgrade extends grade_attribute_format implements unique_value, be_disabled {
39 /** @var string $name Name of this input */
40 public $name = 'finalgrade';
43 * Get the value for this input.
45 * @return string The value based on the grade_grade.
47 public function get_value() {
48 $this->label = $this->grade->grade_item->itemname;
50 $isoverridden = $this->grade->is_overridden();
51 if (!empty($isoverridden)) {
52 $val = $this->grade->finalgrade;
54 $val = $this->grade->rawgrade;
57 if ($this->grade->grade_item->scaleid) {
58 return $val ? (int)$val : -1;
60 return $val ? format_float($val, $this->grade->grade_item->get_decimals()) : '';
65 * Get the label for this input.
67 * @return string The label for this form input.
69 public function get_label() {
70 if (!isset($this->grade->label)) {
71 $this->grade->label = '';
73 return $this->grade->label;
77 * Is this input field disabled.
79 * @return bool Set disabled on this input or not.
81 public function is_disabled() {
86 // Disable editing if grade item or grade score is locked
87 // if any of these items are set, then we will disable editing
88 // at some point, we might want to show the reason for the lock
89 // this code could be simplified, but its more readable for steve's little mind.
91 if (!empty($this->grade->locked)) {
94 if (!empty($this->grade->grade_item->locked)) {
97 if ($this->grade->grade_item->is_overridable_item() and !$this->grade->is_overridden()) {
100 return ($locked || $gradeitemlocked || $overridden);
104 * Create the element for this column.
108 public function determine_format() {
109 if ($this->grade->grade_item->load_scale()) {
110 $scale = $this->grade->grade_item->load_scale();
112 $options = array(-1 => get_string('nograde'));
114 foreach ($scale->scale_items as $i => $name) {
115 $options[$i + 1] = $name;
118 return new dropdown_attribute(
123 $this->is_disabled(),
124 $this->get_tabindex()
127 return new text_attribute(
131 $this->is_disabled(),
132 $this->get_tabindex()
138 * Save the altered value for this field.
140 * @param string $value The new value.
141 * @return string Any error string
143 public function set($value) {
146 $userid = $this->grade->userid;
147 $gradeitem = $this->grade->grade_item;
150 $feedbackformat = false;
151 if ($gradeitem->gradetype == GRADE_TYPE_SCALE) {
155 $finalgrade = $value;
158 $finalgrade = unformat_float($value);
163 $bounded = $gradeitem->bounded_grade($finalgrade);
164 if ($bounded > $finalgrade) {
165 $errorstr = 'lessthanmin';
166 } else if ($bounded < $finalgrade) {
167 $errorstr = 'morethanmax';
172 $user = $DB->get_record('user', array('id' => $userid), 'id, firstname, alternatename, lastname');
173 $gradestr = new stdClass;
174 if (!empty($user->alternatename)) {
175 $gradestr->username = $user->alternatename . ' (' . $user->firstname . ') ' . $user->lastname;
177 $gradestr->username = $user->firstname . ' ' . $user->lastname;
179 $gradestr->itemname = $this->grade->grade_item->get_name();
180 $errorstr = get_string($errorstr, 'grades', $gradestr);
183 $gradeitem->update_final_grade($userid, $finalgrade, 'singleview', $feedback, FORMAT_MOODLE);