Skip to content

Commit 9605b3b

Browse files
committed
Set default question options when there are none in the DB during restore.
1 parent 1faaa0c commit 9605b3b

File tree

2 files changed

+49
-34
lines changed

2 files changed

+49
-34
lines changed

edit_mtf_form.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -224,13 +224,13 @@ protected function definition_inner($mform) {
224224
if (isset($this->question->options->rows) && count($this->question->options->rows) > 0) {
225225
$this->numberofrows = count($this->question->options->rows);
226226
} else {
227-
$this->numberofrows = 4;
227+
$this->numberofrows = QTYPE_MTF_NUMBER_OF_OPTIONS;
228228
}
229229

230230
if (isset($this->question->options->columns) && count($this->question->options->columns) > 0) {
231231
$this->numberofcolumns = count($this->question->options->columns);
232232
} else {
233-
$this->numberofcolumns = 2;
233+
$this->numberofcolumns = QTYPE_MTF_NUMBER_OF_RESPONSES;
234234
}
235235

236236
$this->editoroptions['changeformat'] = 1;

questiontype.php

Lines changed: 47 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -89,49 +89,44 @@ public function adjust_display_options(question_display_options $options) {
8989
class qtype_mtf extends question_type {
9090

9191
/**
92-
* Sets the default options for the question.
93-
* (non-PHPdoc)
94-
* @see question_type::set_default_options()
95-
* @param object $question
92+
* Returns the default options for the MTF question type.
93+
* @param stdClass $options
94+
* @return stdClass
9695
*/
97-
public function set_default_options($question) {
96+
protected function get_default_mtf_options(stdClass $options): stdClass {
9897
$mtfconfig = get_config('qtype_mtf');
9998

100-
if (!isset($question->options)) {
101-
$question->options = new stdClass();
99+
if (!isset($options->numberofrows)) {
100+
$options->numberofrows = QTYPE_MTF_NUMBER_OF_OPTIONS;
102101
}
103-
if (!isset($question->options->numberofrows)) {
104-
$question->options->numberofrows = QTYPE_MTF_NUMBER_OF_OPTIONS;
102+
if (!isset($options->numberofcolumns)) {
103+
$options->numberofcolumns = QTYPE_MTF_NUMBER_OF_RESPONSES;
105104
}
106-
if (!isset($question->options->numberofcolumns)) {
107-
$question->options->numberofcolumns = QTYPE_MTF_NUMBER_OF_RESPONSES;
105+
if (!isset($options->shuffleanswers)) {
106+
$options->shuffleanswers = $mtfconfig->shuffleanswers;
108107
}
109-
if (!isset($question->options->shuffleanswers)) {
110-
$question->options->shuffleanswers = $mtfconfig->shuffleanswers;
111-
}
112-
if (!isset($question->options->deduction)) {
113-
$question->options->deduction = 0.0;
108+
if (!isset($options->deduction)) {
109+
$options->deduction = 0.0;
114110
}
115-
if (!isset($question->options->scoringmethod)) {
116-
$question->options->scoringmethod = $mtfconfig->scoringmethod;
111+
if (!isset($options->scoringmethod)) {
112+
$options->scoringmethod = $mtfconfig->scoringmethod;
117113
}
118-
if (!isset($question->options->rows)) {
119-
$rows = array();
120-
for ($i = 1; $i <= $question->options->numberofrows; ++$i) {
114+
if (!isset($options->rows)) {
115+
$options->rows = [];
116+
for ($i = 1; $i <= $options->numberofrows; ++$i) {
121117
$row = new stdClass();
122118
$row->number = $i;
123119
$row->optiontext = '';
124120
$row->optiontextformat = FORMAT_HTML;
125121
$row->optionfeedback = '';
126122
$row->optionfeedbackformat = FORMAT_HTML;
127-
$rows[] = $row;
123+
$options->rows[] = $row;
128124
}
129-
$question->options->rows = $rows;
130125
}
131126

132-
if (!isset($question->options->columns)) {
133-
$columns = array();
134-
for ($i = 1; $i <= $question->options->numberofcolumns; ++$i) {
127+
if (!isset($options->columns)) {
128+
$options->columns = [];
129+
for ($i = 1; $i <= $options->numberofcolumns; ++$i) {
135130
$column = new stdClass();
136131
$column->number = $i;
137132

@@ -142,10 +137,24 @@ public function set_default_options($question) {
142137
}
143138
$column->responsetext = $responsetextcol;
144139
$column->responsetextformat = FORMAT_MOODLE;
145-
$columns[] = $column;
140+
$options->columns[] = $column;
146141
}
147-
$question->options->columns = $columns;
148142
}
143+
144+
return $options;
145+
}
146+
147+
/**
148+
* Sets the default options for the question.
149+
* (non-PHPdoc)
150+
* @see question_type::set_default_options()
151+
* @param object $question
152+
*/
153+
public function set_default_options($question) {
154+
if (!isset($question->options)) {
155+
$question->options = new stdClass();
156+
}
157+
$question->options = $this->get_default_mtf_options($question->options);
149158
}
150159

151160
/**
@@ -160,8 +169,14 @@ public function get_question_options($question) {
160169
parent::get_question_options($question);
161170

162171
// Retrieve the question options.
163-
$question->options = $DB->get_record('qtype_mtf_options',
164-
array('questionid' => $question->id));
172+
$mtfoptions = $DB->get_record('qtype_mtf_options',
173+
['questionid' => $question->id]);
174+
if (!$mtfoptions) {
175+
$mtfoptions = $this->get_default_mtf_options($question->options);
176+
}
177+
foreach($mtfoptions as $property => $value) {
178+
$question->options->$property = $value;
179+
}
165180

166181
// Retrieve the question rows (mtf options).
167182
$question->options->rows = $DB->get_records('qtype_mtf_rows',
@@ -177,7 +192,7 @@ public function get_question_options($question) {
177192
array('questionid' => $question->id),
178193
'rownumber ASC, columnnumber ASC');
179194

180-
foreach ($question->options->rows as $key => $row) {
195+
foreach ($question->options->rows as $row) {
181196

182197
$indexcounter = $row->number - 1;
183198

@@ -187,7 +202,7 @@ public function get_question_options($question) {
187202
$question->feedback[$indexcounter]['format'] = $row->optionfeedbackformat;
188203
}
189204

190-
foreach ($question->options->columns as $key => $column) {
205+
foreach ($question->options->columns as $column) {
191206
$question->{'responsetext_' . $column->number} = $column->responsetext;
192207
}
193208

0 commit comments

Comments
 (0)