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 * Defines the question behaviour type base class 19 * 20 * @package core 21 * @subpackage questionbehaviours 22 * @copyright 2012 The Open University 23 * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later 24 */ 25 26 27 defined('MOODLE_INTERNAL') || die(); 28 29 30 /** 31 * This class represents the type of behaviour, rather than the instance of the 32 * behaviour which control a particular question attempt. 33 * 34 * @copyright 2012 The Open University 35 * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later 36 */ 37 abstract class question_behaviour_type { 38 /** 39 * Certain behaviours are definitive of a way that questions can behave when 40 * attempted. For example deferredfeedback model, interactive model, etc. 41 * These are the options that should be listed in the user-interface, and 42 * for these behaviours this method should return true. Other behaviours are 43 * more implementation details, for example the informationitem behaviours, 44 * or a special subclass like interactive_adapted_for_my_qtype. These 45 * behaviours should return false. 46 * @return bool whether this is an archetypal behaviour. 47 */ 48 public function is_archetypal() { 49 return false; 50 } 51 52 /** 53 * Override this method if there are some display options that do not make 54 * sense 'during the attempt'. 55 * @return array of {@link question_display_options} field names, that are 56 * not relevant to this behaviour before a 'finish' action. 57 */ 58 public function get_unused_display_options() { 59 return array(); 60 } 61 62 /** 63 * With this behaviour, is it possible that a question might finish as the student 64 * interacts with it, without a call to the {@link question_attempt::finish()} method? 65 * @return bool whether with this behaviour, questions may finish naturally. 66 */ 67 public function can_questions_finish_during_the_attempt() { 68 return false; 69 } 70 71 /** 72 * Adjust a random guess score for a question using this model. You have to 73 * do this without knowing details of the specific question, or which usage 74 * it is in. 75 * @param number $fraction the random guess score from the question type. 76 * @return number the adjusted fraction. 77 */ 78 public function adjust_random_guess_score($fraction) { 79 return $fraction; 80 } 81 82 /** 83 * Get summary information about a queston usage. 84 * 85 * Behaviours are not obliged to do anything here, but this is an opportunity 86 * to provide additional information that can be displayed in places like 87 * at the top of the quiz review page. 88 * 89 * In the return value, the array keys should be identifiers of the form 90 * qbehaviour_behaviourname_meaningfullkey. For qbehaviour_deferredcbm_highsummary. 91 * The values should be arrays with two items, title and content. Each of these 92 * should be either a string, or a renderable. 93 * 94 * To understand how to implement this method, look at the CBM behaviours, 95 * and their unit tests. 96 * 97 * @param question_usage_by_activity $quba the usage to provide summary data for. 98 * @return array as described above. 99 */ 100 public function summarise_usage(question_usage_by_activity $quba, 101 question_display_options $options) { 102 return array(); 103 } 104 105 /** 106 * Does this question behaviour accept multiple submissions of responses within one attempt eg. multiple tries for the 107 * interactive or adaptive question behaviours. 108 * 109 * @return bool 110 */ 111 public function allows_multiple_submitted_responses() { 112 return false; 113 } 114 } 115 116 117 /** 118 * This class exists to allow behaviours that worked in Moodle 2.3 to continue 119 * to work. It implements the question_behaviour_type API for the other behaviour 120 * as much as possible in a backwards-compatible way. 121 * 122 * @copyright 2012 The Open University 123 * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later 124 */ 125 class question_behaviour_type_fallback extends question_behaviour_type { 126 127 /** @var string the behaviour class name. */ 128 protected $behaviourclass; 129 130 /** 131 * @param string $behaviourtype the type of behaviour we are providing a fallback for. 132 */ 133 public function __construct($behaviour) { 134 question_engine::load_behaviour_class($behaviour); 135 $this->behaviourclass = 'qbehaviour_' . $behaviour; 136 } 137 138 public function is_archetypal() { 139 return constant($this->behaviourclass . '::IS_ARCHETYPAL'); 140 } 141 142 /** 143 * Override this method if there are some display options that do not make 144 * sense 'during the attempt'. 145 * @return array of {@link question_display_options} field names, that are 146 * not relevant to this behaviour before a 'finish' action. 147 */ 148 public function get_unused_display_options() { 149 return call_user_func(array($this->behaviourclass, 'get_unused_display_options')); 150 } 151 152 /** 153 * Adjust a random guess score for a question using this model. You have to 154 * do this without knowing details of the specific question, or which usage 155 * it is in. 156 * @param number $fraction the random guess score from the question type. 157 * @return number the adjusted fraction. 158 */ 159 public function adjust_random_guess_score($fraction) { 160 return call_user_func(array($this->behaviourclass, 'adjust_random_guess_score'), 161 $fraction); 162 } 163 }
title
Description
Body
title
Description
Body
title
Description
Body
title
Body