Proyectos de Subversion Moodle

Rev

| Ultima modificación | Ver Log |

Rev Autor Línea Nro. Línea
1 efrain 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
}