See Release Notes
Long Term Support Release
<?php // This file is part of Moodle - http://moodle.org/ // // Moodle is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // Moodle is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Moodle. If not, see <http://www.gnu.org/licenses/>. abstract class feedback_item_base { /** @var string type of the element, should be overridden by each item type */ protected $type; /** @var feedback_item_form */ protected $item_form; /** @var stdClass */ protected $item; /** * constructor */ public function __construct() { } /** * Displays the form for editing an item * * this function only can used after the call of build_editform() */ public function show_editform() { $this->item_form->display(); } /** * Checks if the editing form was cancelled * * @return bool */ public function is_cancelled() { return $this->item_form->is_cancelled(); } /** * Gets submitted data from the edit form and saves it in $this->item * * @return bool */ public function get_data() { if ($this->item !== null) { return true; } if ($this->item = $this->item_form->get_data()) { return true; } return false; } /** * Set the item data (to be used by data generators). * * @param stdClass $itemdata the item data to set * @since Moodle 3.3 */ public function set_data($itemdata) { $this->item = $itemdata; } /** * Creates and returns an instance of the form for editing the item * * @param stdClass $item * @param stdClass $feedback * @param cm_info|stdClass $cm */ abstract public function build_editform($item, $feedback, $cm); /** * Saves the item after it has been edited (or created) */ abstract public function save_item(); /** * Converts the value from complete_form data to the string value that is stored in the db. * @param mixed $value element from mod_feedback_complete_form::get_data() with the name $item->typ.'_'.$item->id * @return string */ public function create_value($value) { return strval($value); } /** * Compares the dbvalue with the dependvalue * * @param stdClass $item * @param string $dbvalue is the value input by user in the format as it is stored in the db * @param string $dependvalue is the value that it needs to be compared against */ public function compare_value($item, $dbvalue, $dependvalue) { return strval($dbvalue) === strval($dependvalue); } /** * Wether this item type has a value that is expected from the user and saved in the stored values. * @return int */ public function get_hasvalue() { return 1; } /** * Wether this item can be set as both required and not * @return bool */ public function can_switch_require() { return true; } /** * Adds summary information about an item to the Excel export file * * @param object $worksheet a reference to the pear_spreadsheet-object * @param integer $row_offset * @param stdClass $xls_formats see analysis_to_excel.php * @param object $item the db-object from feedback_item * @param integer $groupid * @param integer $courseid * @return integer the new row_offset */ abstract public function excelprint_item(&$worksheet, $row_offset, $xls_formats, $item, $groupid, $courseid = false); /** * Prints analysis for the current item * * @param $item the db-object from feedback_item * @param string $itemnr * @param integer $groupid * @param integer $courseid * @return integer the new itemnr */ abstract public function print_analysed($item, $itemnr = '', $groupid = false, $courseid = false); /** * Prepares the value for exporting to Excel * * @param object $item the db-object from feedback_item< * @param string $value a item-related value from feedback_values> * @param object $value object with item-related value from feedback_values in the 'value' property* @return string */ abstract public function get_printval($item, $value); /** * Returns the formatted name of the item for the complete form or response view * * @param stdClass $item * @param bool $withpostfix * @return string */ public function get_display_name($item, $withpostfix = true) { return format_text($item->name, FORMAT_HTML, array('noclean' => true, 'para' => false)) . ($withpostfix ? $this->get_display_name_postfix($item) : ''); } /** * Returns the postfix to be appended to the display name that is based on other settings * * @param stdClass $item * @return string */ public function get_display_name_postfix($item) { return ''; } /** * Adds an input element to the complete form * * This method is called: * - to display the form when user completes feedback * - to display existing elements when teacher edits the feedback items * - to display the feedback preview (print.php) * - to display the completed response * - to preview a feedback template * * If it is important which mode the form is in, use $form->get_mode() * * Each item type must add a single form element with the name $item->typ.'_'.$item->id * This element must always be present in form data even if nothing is selected (i.e. use advcheckbox and not checkbox). * To add an element use either: * $form->add_form_element() - adds a single element to the form * $form->add_form_group_element() - adds a group element to the form * * Other useful methods: * $form->get_item_value() * $form->set_element_default() * $form->add_validation_rule() * $form->set_element_type() * * The element must support freezing so it can be used for viewing the response as well. * If the desired form element does not support freezing, check $form->is_frozen() * and create a static element instead. * * @param stdClass $item * @param mod_feedback_complete_form $form */ abstract public function complete_form_element($item, $form); /** * Returns the list of actions allowed on this item in the edit mode * * @param stdClass $item * @param stdClass $feedback * @param cm_info $cm * @return action_menu_link[] */ public function edit_actions($item, $feedback, $cm) { $actions = array(); $strupdate = get_string('edit_item', 'feedback'); $actions['update'] = new action_menu_link_secondary( new moodle_url('/mod/feedback/edit_item.php', array('id' => $item->id)), new pix_icon('t/edit', $strupdate, 'moodle', array('class' => 'iconsmall', 'title' => '')), $strupdate, array('class' => 'editing_update', 'data-action' => 'update') ); if ($this->can_switch_require()) { if ($item->required == 1) { $buttontitle = get_string('switch_item_to_not_required', 'feedback'); $buttonimg = 'required'; } else { $buttontitle = get_string('switch_item_to_required', 'feedback'); $buttonimg = 'notrequired'; } $actions['required'] = new action_menu_link_secondary( new moodle_url('/mod/feedback/edit.php', array('id' => $cm->id, 'switchitemrequired' => $item->id, 'sesskey' => sesskey())), new pix_icon($buttonimg, $buttontitle, 'feedback', array('class' => 'iconsmall', 'title' => '')), $buttontitle, array('class' => 'editing_togglerequired', 'data-action' => 'togglerequired') ); } $strdelete = get_string('delete_item', 'feedback'); $actions['delete'] = new action_menu_link_secondary( new moodle_url('/mod/feedback/edit.php', array('id' => $cm->id, 'deleteitem' => $item->id, 'sesskey' => sesskey())), new pix_icon('t/delete', $strdelete, 'moodle', array('class' => 'iconsmall', 'title' => '')), $strdelete, array('class' => 'editing_delete', 'data-action' => 'delete') ); return $actions; } /** * Return extra data for external functions. * * Some items may have additional configuration data or default values that should be returned for external functions: * - Info elements: The default value information (course or category name) * - Captcha: The recaptcha challenge hash key * * @param stdClass $item the item object * @return str the data, may be json_encoded for large structures */ public function get_data_for_external($item) { return null; } /** * Return the analysis data ready for external functions. * * @param stdClass $item the item (question) information * @param int $groupid the group id to filter data (optional) * @param int $courseid the course id (optional) * @return array an array of data with non scalar types json encoded * @since Moodle 3.3 */ abstract public function get_analysed_for_external($item, $groupid = false, $courseid = false); } //a dummy class to realize pagebreaks class feedback_item_pagebreak extends feedback_item_base { protected $type = "pagebreak"; public function show_editform() { } /** * Checks if the editing form was cancelled * @return bool */ public function is_cancelled() { } public function get_data() { } public function build_editform($item, $feedback, $cm) { } public function save_item() { } public function create_value($data) { } public function get_hasvalue() { return 0; } public function excelprint_item(&$worksheet, $row_offset, $xls_formats, $item, $groupid, $courseid = false) { } public function print_analysed($item, $itemnr = '', $groupid = false, $courseid = false) { } public function get_printval($item, $value) { } public function can_switch_require() { return false; } /** * Adds an input element to the complete form * * @param stdClass $item * @param mod_feedback_complete_form $form */ public function complete_form_element($item, $form) { $form->add_form_element($item, ['static', $item->typ.'_'.$item->id, '', html_writer::empty_tag('hr', ['class' => 'feedback_pagebreak', 'id' => 'feedback_item_' . $item->id]) ]); } /** * Returns the list of actions allowed on this item in the edit mode * * @param stdClass $item * @param stdClass $feedback * @param cm_info $cm * @return action_menu_link[] */ public function edit_actions($item, $feedback, $cm) { $actions = array(); $strdelete = get_string('delete_pagebreak', 'feedback'); $actions['delete'] = new action_menu_link_secondary( new moodle_url('/mod/feedback/edit.php', array('id' => $cm->id, 'deleteitem' => $item->id, 'sesskey' => sesskey())), new pix_icon('t/delete', $strdelete, 'moodle', array('class' => 'iconsmall', 'title' => '')), $strdelete, array('class' => 'editing_delete', 'data-action' => 'delete') ); return $actions; } /** * Return the analysis data ready for external functions. * * @param stdClass $item the item (question) information * @param int $groupid the group id to filter data (optional) * @param int $courseid the course id (optional) * @return array an array of data with non scalar types json encoded * @since Moodle 3.3 */ public function get_analysed_for_external($item, $groupid = false, $courseid = false) { return; } }