Merge branch 'MDL-70106-icon-cache-310' of https://github.com/Peterburnett/moodle...
[moodle.git] / question / type / upgrade.txt
CommitLineData
78fc17eb
TH
1This files describes API changes for question type plugins.
2
c9491626
TH
3=== 3.8 ===
4
5* There is a new method for question types get_extra_question_bank_actions.
6 Assuming the question bank display is using the new 'edit_menu_column'
7 (which it will be by default) this method lets you add question-type-specific
8 actions to the menu. The question_type base class has extensive PHPdoc comments
9 on the method to explain what you should do, and there is an example of how to
10 use it in a question type at
11 https://github.com/moodleou/moodle-qtype_pmatch/commit/2aefa8b5dcc7bab768f4707a4ffb7befcf4c2540.
12
9c14b28d
TH
13=== 3.8, 3.7.3, 3.6.7 ===
14
15* Coming up in Moodle 3.8 are some changes to the question bank UI. These will break any
16 Behat automated tests which use the common pattern
17 When I click on "Duplicate" "link" in the "Test question" "table_row"
18 to trigger actions on questions when looking at the question bank screen. Therefore,
19 a new step has been introduced:
20 When I choose "Duplicate" action for "Test question" in the question bank
21 If you want your Behat tests to continue working with Moodle 3.8, you will need to use
22 the new step. The new step has been back-ported, so you can start updating your tests
23 and have them work with Moodle 3.6 and 3.7. In addition, if you want to trigger the
24 "Edit" action, you should change that to "Edit question".
25
26
94cb5a66 27=== 3.5 ===
9c14b28d 28
5a8d683f
NN
29 + Added new classes backup_qtype_extrafields_plugin and restore_qtype_extrafields_plugin
30 in order to use extra fields method in backup/restore question type. Require and inherit new classes for using it. See
31 backup_qtype_shortanswer_plugin and restore_qtype_shortanswer_plugin for an example of using this.
94cb5a66
LB
32 + The declaration of is_gradable_response has been moved from question_automatically_gradable to
33 question_manually_gradable.
34 + The default implementation of is_gradable_response has been moved from question_graded_automatically to
35 question_with_responses.
b197da87
MG
36 + Note that format_text() is no longer applied to the results of
37 qtype_elements_embedded_in_question_text_renderer::embedded_element(). If question type overrides
38 this method make sure you apply format_text() to any text that came from a user.
5a8d683f 39
c28bfbef
TH
40=== 3.1.5, 3.2.2, 3.3 ===
41
42* If you are using check_combined_feedback_file_access in your check_file_access method,
43 then you must now pass $args as the 4th argument, so the correct permission checks
44 can be performed. If you don't, you will get a developer debug notice.
45
1405f010
EL
46=== 3.1 ===
47
48* The following functions, previously used (exclusively) by upgrade steps are not available
49 anymore because of the upgrade cleanup performed for this version. See MDL-51580 for more info:
50 - qtype_essay_convert_to_html()
51
3d6f2466
JP
52=== 2.7 ===
53 + We have added a new method to the question_type base class 'break_down_stats_and_response_analysis_by_variant'. By default it
54 returns true. If your question type does not have variants of question instances then you can ignore this method as it only
55 applies to question types that have variants. If a question type does have variants the default action is to break down
56 response analysis and question stats by variant. But for some question types there might be an almost infinite quantity of
57 variants for the question, in this case you can suppress break down by variant by returning false from this method. See for
58 example the non-core question type varnumeric or the slightly more complex stack question type.
58794ac9
JP
59 + We have added a pair of methods to the question_definition class 'prepare_simulated_post_data' and
60 'get_student_response_values_for_simulation'. You may want to override these methods in question.php in your question type plug
61 -in. These methods are used to convert data from a csv file of simulated step data into the simulated post data that is fed
62 to the question engine. These csv files can be used for unit testing or manual testing the use of your question type within the
63 quiz module. You can use the simulate quiz report for manual testing and also to easily generate csv test files. You can
64 run a number of students through a test and then download a csv file representing their interaction with the quiz. For most
65 question types the default of just passing csv data as post data, directly from the csv file will probably work fine. But for
66 certain question types where the meaning of the post data is deliberately obfuscated it might be necessary to convert from a
67 human friendly format in the csv file to response data expected by the question type using 'prepare_simulated_post_data' and
68 to convert back from a question type response array to values for download in a csv file using
69 'get_student_response_values_for_simulation'.
0c0dfa8f
DW
70=== 2.6 ===
71 + The changes in MDL-32750 were reverted in favour of the new pdw toggle toolbars
72 plugin for TinyMCE. The get_non_collapsible_editor_options method has been deprecated.
73
eca230b5
TH
74=== 2.5 ===
75
dc38c5b4 76* There have been some tweaks to the helper class that is used to write
eca230b5
TH
77 walkthrough tests. You should not have to change your code, but you might
78 like to take a look at some of the new helper methods available. In particular,
79 if you had any code that did
80 $this->process_submission(array('-finish' => 1));
81 you should change that to
82 $this->finish();
dc38c5b4
TH
83
84* There have been lots of usability improvements to the question editing forms.
85 MDL-37417 links to all the changes. There are only a few API changes that
86 *require* you to upgrade your question type, but you are strongly recommended
87 to make similar usability improvements in your own question types.
88
89 + Some of the ids used in the form HTML have had ‘id_’ added at the front.
90 Take care if you refer to these in your JavasSript or CSS.
91
92 + MDL-32750 The HTML editing tools are now collapsed. This is applied by default
93 to all HTML editors except question text and general feedback. If you want to
94 add more exceptions, see the get_non_collabsible_editor_options method.
95
96 + Form fields have been grouped onto one line where appropriate, to reduce
97 the height of the form. qtype_numerical is a good example of this.
98
99 + Where elements are in groups, we have changed the normal accesshide CSS, so
100 that their labels are visible. If you were using grouped elements in the past
101 with static elements to lable the fields, then you will need to remove the statics.
102
103 + All the choices / answers have been merged into a single section of the form.
104 This works better with the new 'shortforms' MDL-30637. Also the
105 "Add blanks for more ..." buttons are now inside that section. This probably
106 requries that you remove any headings from your per-answer fields, and change
107 some of the labels.
108
109 + Having merged all the elements into one form section, we then used CSS to
110 visually group the fields for one choice, answer, etc.
111
112 + When editing an existing question, we only show as many repeats are are
113 actually needed until the user clicks the "Add blanks for more ..." button.
114 Where you have your own repeat elements, you may need to change the
115 number of repeats calculation.
116
117 + As with all forms, setType() is now required for all text form elements.
118
119 + A good example of a question type being upgraded to take account of all these
120 changes is
121 https://github.com/moodleou/moodle-qtype_pmatch/commit/9d8e1beb9f780246416a0f3a7622f700b8fa90c8
122
eca230b5 123
e01cf1fa
TH
124=== 2.3.5 / 2.4.2 / 2.5 ===
125
126* The special value question_attempt::PARAM_CLEANHTML_FILES that could be used
127 in the get_expected_data method was renamed to question_attempt::PARAM_RAW_FILES
128 in order to fix a bug. We failed to think this throught, and so did not realised
129 that this might break some question types. If this affected your question type,
130 please accept our apologies. Details in MDL-37847.
131
132
a031b0f3 133=== 2.3 ===
c2f5e2ab 134
a031b0f3
TH
135* Support for backwards-compatible string names dropped. MDL-30120. (See under 2.2 below.)
136* If you are overriding export_to_xml and import_from_xml to provide Moodle XML format
137 import and export, then you will probably get PHP strict syntax notices in developer
138 debug mode until you change the method signature to include qformat_xml $format.
139 That is, you need to specify the argument type.
7a00d438
DM
140* qtype_xxx_pluginfile() is now given the 7th parameter (hopefully the last
141 one) that contains additional options for the file serving. The array should
142 be re-passed to question_pluginfile() as is.
c2f5e2ab
TH
143
144
78fc17eb
TH
145=== 2.2 ===
146
147* The XML import/export base class has had some minor API changes. The
148 - write_combined_feedback method now requires that you pass the questionid and
149 contextid. (MDL-29058)
150 - calls to the import_hints and import_answer methods now should pass the question
151 text format as the last argument, to be used as a default if necessary. (MDL-29739)
152 If you do not upgrade your code, it will not break, but there will be PHP
153 warnings, and it the export will not work 100% correctly.
154
226b3124
TH
155* The old
156 public function requires_qtypes()
157method is no more. Instead use the ->dependencies facility in version.php. E.g.
158$plugin->dependencies = array(
159 'qtype_numerical' => 2011102700,
160);
161
162* The plugin name and related strings used to be defined in language strings
163called the same thing as the format, for example:
164
165$string['addingdescription'] = 'Adding a Description';
166$string['description'] = 'Description';
167$string['description_help'] = 'A description is not really a question type. It simply enables text to be displayed without requiring any answers, similar to a label on the course page.
168$string['description_link'] = 'A description is not really a question type. It simply enables text to be displayed without requiring any answers, similar to a label on the course page.
169$string['descriptionsummary'] = 'This is not actually a question. Instead it is a way to add some instructions, rubric or other content to the activity. This is similar to the way that labels can be used to add content to the course page.';
170$string['editingdescription'] = 'Editing a Description';
171
172All these need to be changed to use the standard string name pluginname, as for
173other plugin types, and similar for the other strings.
174
175$string['pluginname'] = 'Description';
176$string['pluginname_help'] = 'A description is not really a question type. It simply enables text to be displayed without requiring any answers, similar to a label on the course page.
177$string['pluginname_link'] = 'A description is not really a question type. It simply enables text to be displayed without requiring any answers, similar to a label on the course page.
178$string['pluginnameadding'] = 'Adding a Description';
179$string['pluginnameediting'] = 'Editing a Description';
180$string['pluginnamesummary'] = 'This is not actually a question. Instead it is a way to add some instructions, rubric or other content to the activity. This is similar to the way that labels can be used to add content to the course page.';
181
182The old strings will continue to work, but only until Moodle 2.3 is released.
56565037
VS
183
184* If you are using the facilities provided by overriding the extra_answer_fields
185 or questionid_column_name methods, then you must change these to be public
186 methods. (This is required so that backup and restore can be made to work
187 automatically. MDL-24408, MDL-25617, MDL-30562)
0b94d6bf 188
0b94d6bf 189
a031b0f3
TH
190=== 2.1 ===
191
192* Lots of API changes due to the new question engine. See
193http://docs.moodle.org/dev/Developing_a_Question_Type#Converting_a_Moodle_2.0_question_type
194
195
196=== 2.0 ===
197
198* Lots of changes due to all the API changes in Moodle 2.0.
199
200* This plugin type now supports cron in the standard way. If required, Create a
201 lib.php file containing
202function qtype_mypluginname_cron() {};