Differences Between: [Versions 310 and 402] [Versions 311 and 402] [Versions 39 and 402] [Versions 400 and 402]
1 <?php 2 // This file is part of Moodle - http://moodle.org/ 3 // 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. 8 // 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. 13 // 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/>. 16 17 /** 18 * UI element representing the finalgrade column. 19 * 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 23 */ 24 25 namespace gradereport_singleview\local\ui; 26 27 defined('MOODLE_INTERNAL') || die; 28 29 use stdClass; 30 /** 31 * UI element representing the finalgrade column. 32 * 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 36 */ 37 class finalgrade extends grade_attribute_format implements unique_value, be_disabled, be_readonly { 38 39 /** 40 * Name of this input 41 * @var string $name 42 */ 43 public $name = 'finalgrade'; 44 45 /** 46 * Get the value for this input. 47 * 48 * @return null|string The value based on the grade_grade. 49 */ 50 public function get_value(): ?string { 51 $this->label = $this->grade->grade_item->itemname; 52 53 $val = $this->grade->finalgrade; 54 if ($this->grade->grade_item->scaleid) { 55 return $val ? (int)$val : -1; 56 } else { 57 return $val ? format_float($val, $this->grade->grade_item->get_decimals()) : ''; 58 } 59 } 60 61 /** 62 * Get the label for this input. 63 * 64 * @return string The label for this form input. 65 */ 66 public function get_label(): string { 67 if (!isset($this->grade->label)) { 68 $this->grade->label = ''; 69 } 70 return $this->grade->label; 71 } 72 73 /** 74 * Is this input field disabled. 75 * 76 * @return bool Set disabled on this input or not. 77 */ 78 public function is_disabled(): bool { 79 $locked = 0; 80 $gradeitemlocked = 0; 81 $overridden = 0; 82 83 // Disable editing if grade item or grade score is locked 84 // if any of these items are set, then we will disable editing 85 // at some point, we might want to show the reason for the lock 86 // this code could be simplified, but its more readable for steve's little mind. 87 88 if (!empty($this->grade->locked)) { 89 $locked = 1; 90 } 91 if (!empty($this->grade->grade_item->locked)) { 92 $gradeitemlocked = 1; 93 } 94 if ($this->grade->grade_item->is_overridable_item() and !$this->grade->is_overridden()) { 95 $overridden = 1; 96 } 97 return ($locked || $gradeitemlocked || $overridden); 98 } 99 100 /** 101 * Return true if this is read-only. 102 * 103 * @return bool 104 */ 105 public function is_readonly(): bool { 106 global $USER; 107 return empty($USER->editing); 108 } 109 110 /** 111 * Create the element for this column. 112 * 113 * @return element 114 */ 115 public function determine_format(): element { 116 if ($this->grade->grade_item->load_scale()) { 117 $scale = $this->grade->grade_item->load_scale(); 118 119 $options = [-1 => get_string('nograde')]; 120 121 foreach ($scale->scale_items as $i => $name) { 122 $options[$i + 1] = $name; 123 } 124 125 return new dropdown_attribute( 126 $this->get_name(), 127 $options, 128 $this->get_label(), 129 $this->get_value(), 130 $this->is_disabled(), 131 $this->is_readonly() 132 ); 133 } else { 134 return new text_attribute( 135 $this->get_name(), 136 $this->get_value(), 137 $this->get_label(), 138 $this->is_disabled(), 139 $this->is_readonly() 140 ); 141 } 142 } 143 144 /** 145 * Save the altered value for this field. 146 * 147 * @param string $value The new value. 148 * @return string Any error string 149 */ 150 public function set($value) { 151 $userid = $this->grade->userid; 152 $gradeitem = $this->grade->grade_item; 153 154 $feedback = false; 155 $feedbackformat = false; 156 if ($gradeitem->gradetype == GRADE_TYPE_SCALE) { 157 $value = (int)unformat_float($value); 158 if ($value == -1) { 159 $finalgrade = null; 160 } else { 161 $finalgrade = $value; 162 } 163 } else { 164 $finalgrade = unformat_float($value); 165 } 166 167 $errorstr = ''; 168 if ($finalgrade) { 169 $bounded = $gradeitem->bounded_grade($finalgrade); 170 if ($bounded > $finalgrade) { 171 $errorstr = 'lessthanmin'; 172 } else if ($bounded < $finalgrade) { 173 $errorstr = 'morethanmax'; 174 } 175 } 176 177 if ($errorstr) { 178 $user = get_complete_user_data('id', $userid); 179 $gradestr = new stdClass; 180 if (has_capability('moodle/site:viewfullnames', \context_course::instance($gradeitem->courseid))) { 181 $gradestr->username = fullname($user, true); 182 } else { 183 $gradestr->username = fullname($user); 184 } 185 $gradestr->itemname = $this->grade->grade_item->get_name(); 186 $errorstr = get_string($errorstr, 'grades', $gradestr); 187 return $errorstr; 188 } 189 190 // Only update grades if there are no errors. 191 $gradeitem->update_final_grade($userid, $finalgrade, 'singleview', $feedback, FORMAT_MOODLE, 192 null, null, true); 193 return ''; 194 } 195 }
title
Description
Body
title
Description
Body
title
Description
Body
title
Body