Differences Between: [Versions 310 and 311]
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 abstract class feedback_item_base { 18 19 /** @var string type of the element, should be overridden by each item type */ 20 protected $type; 21 22 /** @var feedback_item_form */ 23 protected $item_form; 24 25 /** @var stdClass */ 26 protected $item; 27 28 /** 29 * constructor 30 */ 31 public function __construct() { 32 } 33 34 /** 35 * Displays the form for editing an item 36 * 37 * this function only can used after the call of build_editform() 38 */ 39 public function show_editform() { 40 $this->item_form->display(); 41 } 42 43 /** 44 * Checks if the editing form was cancelled 45 * 46 * @return bool 47 */ 48 public function is_cancelled() { 49 return $this->item_form->is_cancelled(); 50 } 51 52 /** 53 * Gets submitted data from the edit form and saves it in $this->item 54 * 55 * @return bool 56 */ 57 public function get_data() { 58 if ($this->item !== null) { 59 return true; 60 } 61 if ($this->item = $this->item_form->get_data()) { 62 return true; 63 } 64 return false; 65 } 66 67 /** 68 * Set the item data (to be used by data generators). 69 * 70 * @param stdClass $itemdata the item data to set 71 * @since Moodle 3.3 72 */ 73 public function set_data($itemdata) { 74 $this->item = $itemdata; 75 } 76 77 /** 78 * Creates and returns an instance of the form for editing the item 79 * 80 * @param stdClass $item 81 * @param stdClass $feedback 82 * @param cm_info|stdClass $cm 83 */ 84 abstract public function build_editform($item, $feedback, $cm); 85 86 /** 87 * Saves the item after it has been edited (or created) 88 */ 89 abstract public function save_item(); 90 91 /** 92 * Converts the value from complete_form data to the string value that is stored in the db. 93 * @param mixed $value element from mod_feedback_complete_form::get_data() with the name $item->typ.'_'.$item->id 94 * @return string 95 */ 96 public function create_value($value) { 97 return strval($value); 98 } 99 100 /** 101 * Compares the dbvalue with the dependvalue 102 * 103 * @param stdClass $item 104 * @param string $dbvalue is the value input by user in the format as it is stored in the db 105 * @param string $dependvalue is the value that it needs to be compared against 106 */ 107 public function compare_value($item, $dbvalue, $dependvalue) { 108 return strval($dbvalue) === strval($dependvalue); 109 } 110 111 /** 112 * Wether this item type has a value that is expected from the user and saved in the stored values. 113 * @return int 114 */ 115 public function get_hasvalue() { 116 return 1; 117 } 118 119 /** 120 * Wether this item can be set as both required and not 121 * @return bool 122 */ 123 public function can_switch_require() { 124 return true; 125 } 126 127 /** 128 * Adds summary information about an item to the Excel export file 129 * 130 * @param object $worksheet a reference to the pear_spreadsheet-object 131 * @param integer $row_offset 132 * @param stdClass $xls_formats see analysis_to_excel.php 133 * @param object $item the db-object from feedback_item 134 * @param integer $groupid 135 * @param integer $courseid 136 * @return integer the new row_offset 137 */ 138 abstract public function excelprint_item(&$worksheet, $row_offset, 139 $xls_formats, $item, 140 $groupid, $courseid = false); 141 142 /** 143 * Prints analysis for the current item 144 * 145 * @param $item the db-object from feedback_item 146 * @param string $itemnr 147 * @param integer $groupid 148 * @param integer $courseid 149 * @return integer the new itemnr 150 */ 151 abstract public function print_analysed($item, $itemnr = '', $groupid = false, $courseid = false); 152 153 /** 154 * Prepares the value for exporting to Excel 155 * 156 * @param object $item the db-object from feedback_item 157 * @param object $value object with item-related value from feedback_values in the 'value' property 158 * @return string 159 */ 160 abstract public function get_printval($item, $value); 161 162 /** 163 * Returns the formatted name of the item for the complete form or response view 164 * 165 * @param stdClass $item 166 * @param bool $withpostfix 167 * @return string 168 */ 169 public function get_display_name($item, $withpostfix = true) { 170 return format_text($item->name, FORMAT_HTML, array('noclean' => true, 'para' => false)) . 171 ($withpostfix ? $this->get_display_name_postfix($item) : ''); 172 } 173 174 /** 175 * Returns the postfix to be appended to the display name that is based on other settings 176 * 177 * @param stdClass $item 178 * @return string 179 */ 180 public function get_display_name_postfix($item) { 181 return ''; 182 } 183 184 /** 185 * Adds an input element to the complete form 186 * 187 * This method is called: 188 * - to display the form when user completes feedback 189 * - to display existing elements when teacher edits the feedback items 190 * - to display the feedback preview (print.php) 191 * - to display the completed response 192 * - to preview a feedback template 193 * 194 * If it is important which mode the form is in, use $form->get_mode() 195 * 196 * Each item type must add a single form element with the name $item->typ.'_'.$item->id 197 * This element must always be present in form data even if nothing is selected (i.e. use advcheckbox and not checkbox). 198 * To add an element use either: 199 * $form->add_form_element() - adds a single element to the form 200 * $form->add_form_group_element() - adds a group element to the form 201 * 202 * Other useful methods: 203 * $form->get_item_value() 204 * $form->set_element_default() 205 * $form->add_validation_rule() 206 * $form->set_element_type() 207 * 208 * The element must support freezing so it can be used for viewing the response as well. 209 * If the desired form element does not support freezing, check $form->is_frozen() 210 * and create a static element instead. 211 * 212 * @param stdClass $item 213 * @param mod_feedback_complete_form $form 214 */ 215 abstract public function complete_form_element($item, $form); 216 217 /** 218 * Returns the list of actions allowed on this item in the edit mode 219 * 220 * @param stdClass $item 221 * @param stdClass $feedback 222 * @param cm_info $cm 223 * @return action_menu_link[] 224 */ 225 public function edit_actions($item, $feedback, $cm) { 226 $actions = array(); 227 228 $strupdate = get_string('edit_item', 'feedback'); 229 $actions['update'] = new action_menu_link_secondary( 230 new moodle_url('/mod/feedback/edit_item.php', array('id' => $item->id)), 231 new pix_icon('t/edit', $strupdate, 'moodle', array('class' => 'iconsmall', 'title' => '')), 232 $strupdate, 233 array('class' => 'editing_update', 'data-action' => 'update') 234 ); 235 236 if ($this->can_switch_require()) { 237 if ($item->required == 1) { 238 $buttontitle = get_string('switch_item_to_not_required', 'feedback'); 239 $buttonimg = 'required'; 240 } else { 241 $buttontitle = get_string('switch_item_to_required', 'feedback'); 242 $buttonimg = 'notrequired'; 243 } 244 $actions['required'] = new action_menu_link_secondary( 245 new moodle_url('/mod/feedback/edit.php', array('id' => $cm->id, 246 'switchitemrequired' => $item->id, 'sesskey' => sesskey())), 247 new pix_icon($buttonimg, $buttontitle, 'feedback', array('class' => 'iconsmall', 'title' => '')), 248 $buttontitle, 249 array('class' => 'editing_togglerequired', 'data-action' => 'togglerequired') 250 ); 251 } 252 253 $strdelete = get_string('delete_item', 'feedback'); 254 $actions['delete'] = new action_menu_link_secondary( 255 new moodle_url('/mod/feedback/edit.php', array('id' => $cm->id, 'deleteitem' => $item->id, 'sesskey' => sesskey())), 256 new pix_icon('t/delete', $strdelete, 'moodle', array('class' => 'iconsmall', 'title' => '')), 257 $strdelete, 258 array('class' => 'editing_delete', 'data-action' => 'delete') 259 ); 260 261 return $actions; 262 } 263 264 /** 265 * Return extra data for external functions. 266 * 267 * Some items may have additional configuration data or default values that should be returned for external functions: 268 * - Info elements: The default value information (course or category name) 269 * - Captcha: The recaptcha challenge hash key 270 * 271 * @param stdClass $item the item object 272 * @return str the data, may be json_encoded for large structures 273 */ 274 public function get_data_for_external($item) { 275 return null; 276 } 277 278 /** 279 * Return the analysis data ready for external functions. 280 * 281 * @param stdClass $item the item (question) information 282 * @param int $groupid the group id to filter data (optional) 283 * @param int $courseid the course id (optional) 284 * @return array an array of data with non scalar types json encoded 285 * @since Moodle 3.3 286 */ 287 abstract public function get_analysed_for_external($item, $groupid = false, $courseid = false); 288 } 289 290 //a dummy class to realize pagebreaks 291 class feedback_item_pagebreak extends feedback_item_base { 292 protected $type = "pagebreak"; 293 294 public function show_editform() { 295 } 296 297 /** 298 * Checks if the editing form was cancelled 299 * @return bool 300 */ 301 public function is_cancelled() { 302 } 303 public function get_data() { 304 } 305 public function build_editform($item, $feedback, $cm) { 306 } 307 public function save_item() { 308 } 309 public function create_value($data) { 310 } 311 public function get_hasvalue() { 312 return 0; 313 } 314 public function excelprint_item(&$worksheet, $row_offset, 315 $xls_formats, $item, 316 $groupid, $courseid = false) { 317 } 318 319 public function print_analysed($item, $itemnr = '', $groupid = false, $courseid = false) { 320 } 321 public function get_printval($item, $value) { 322 } 323 public function can_switch_require() { 324 return false; 325 } 326 327 /** 328 * Adds an input element to the complete form 329 * 330 * @param stdClass $item 331 * @param mod_feedback_complete_form $form 332 */ 333 public function complete_form_element($item, $form) { 334 $form->add_form_element($item, 335 ['static', 336 $item->typ.'_'.$item->id, 337 '', 338 html_writer::empty_tag('hr', ['class' => 'feedback_pagebreak', 'id' => 'feedback_item_' . $item->id]) 339 ]); 340 } 341 342 /** 343 * Returns the list of actions allowed on this item in the edit mode 344 * 345 * @param stdClass $item 346 * @param stdClass $feedback 347 * @param cm_info $cm 348 * @return action_menu_link[] 349 */ 350 public function edit_actions($item, $feedback, $cm) { 351 $actions = array(); 352 $strdelete = get_string('delete_pagebreak', 'feedback'); 353 $actions['delete'] = new action_menu_link_secondary( 354 new moodle_url('/mod/feedback/edit.php', array('id' => $cm->id, 'deleteitem' => $item->id, 'sesskey' => sesskey())), 355 new pix_icon('t/delete', $strdelete, 'moodle', array('class' => 'iconsmall', 'title' => '')), 356 $strdelete, 357 array('class' => 'editing_delete', 'data-action' => 'delete') 358 ); 359 return $actions; 360 } 361 362 /** 363 * Return the analysis data ready for external functions. 364 * 365 * @param stdClass $item the item (question) information 366 * @param int $groupid the group id to filter data (optional) 367 * @param int $courseid the course id (optional) 368 * @return array an array of data with non scalar types json encoded 369 * @since Moodle 3.3 370 */ 371 public function get_analysed_for_external($item, $groupid = false, $courseid = false) { 372 return; 373 } 374 }
title
Description
Body
title
Description
Body
title
Description
Body
title
Body