@@ -89,49 +89,44 @@ public function adjust_display_options(question_display_options $options) {
8989class 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