a23f0aaf |
1 | <?php |
2 | require_once ('moodleform_mod.php'); |
3 | |
4 | require_once("$CFG->dirroot/mod/quiz/locallib.php"); |
5 | |
6 | class quiz_mod_form extends moodleform_mod { |
7 | var $_feedbacks; |
8 | |
9 | function definition() { |
10 | |
11 | global $COURSE, $CFG, $QUIZ_GRADE_METHOD; |
12 | $mform =& $this->_form; |
13 | |
14 | $mform->setShowAdvanced(get_user_preferences('quiz_optionsettingspref', 0)); |
15 | //------------------------------------------------------------------------------- |
16 | $mform->addElement('header', 'general', get_string('general', 'form')); |
17 | |
18 | $mform->addElement('text', 'name', get_string('name')); |
19 | $mform->setType('name', PARAM_TEXT); |
20 | |
21 | $mform->addElement('htmleditor', 'intro', get_string("introduction", "quiz")); |
22 | $mform->setType('intro', PARAM_RAW); |
23 | |
24 | //------------------------------------------------------------------------------- |
25 | $mform->addElement('header', 'timinghdr', get_string('timing', 'form')); |
26 | $mform->addElement('date_selector', 'timeopen', get_string("quizopen", "quiz"), array('optional'=>true)); |
27 | $mform->setHelpButton('timeopen', array('timeopen', get_string('quizopens', 'quiz'), 'quiz')); |
28 | |
29 | $mform->addElement('date_selector', 'timeclose', get_string("quizcloses", "quiz"), array('optional'=>true)); |
30 | $mform->setHelpButton('timeclose', array('timeopen', get_string('quizcloses', 'quiz'), 'quiz')); |
31 | |
32 | |
33 | $timelimitgrp=array(); |
34 | $timelimitgrp[] = &$mform->createElement('text', 'timelimit'); |
35 | $timelimitgrp[] = &$mform->createElement('checkbox', 'timelimitenable', '', get_string('enable')); |
36 | $mform->addGroup($timelimitgrp, 'timelimitgrp', get_string("timelimit", "quiz"), array(' '), false); |
37 | $mform->setType('timelimit', PARAM_TEXT); |
38 | $timelimitgrprules = array(); |
39 | $timelimitgrprules['timelimit'][] = array(null, 'numeric', null, 'client'); |
40 | $mform->addGroupRule('timelimitgrp', $timelimitgrprules); |
41 | $mform->disabledIf('timelimitgrp', 'timelimitenable'); |
42 | $mform->setAdvanced('timelimitgrp', $CFG->quiz_fix_timelimit); |
43 | $mform->setHelpButton('timelimitgrp', array("timelimit", get_string("quiztimer","quiz"), "quiz")); |
44 | $mform->setDefault('timelimit', $CFG->quiz_timelimit); |
45 | |
46 | |
47 | //enforced time delay between quiz attempts add-on |
48 | $timedelayoptions = array(); |
49 | $timedelayoptions[0] = get_string('none'); |
50 | $timedelayoptions[1800] = get_string('numminutes', '', 30); |
51 | $timedelayoptions[3600] = get_string('numminutes', '', 60); |
52 | for($i=2; $i<=23; $i++) { |
53 | $seconds = $i*3600; |
54 | $timedelayoptions[$seconds] = get_string('numhours', '', $i); |
55 | } |
56 | $timedelayoptions[86400] = get_string('numhours', '', 24); |
57 | for($i=2; $i<=7; $i++) { |
58 | $seconds = $i*86400; |
59 | $timedelayoptions[$seconds] = get_string('numdays', '', $i); |
60 | } |
61 | $mform->addElement('select', 'delay1', get_string("delay1", "quiz"), $timedelayoptions); |
62 | $mform->setHelpButton('delay1', array("timedelay1", get_string("delay1", "quiz"), "quiz")); |
63 | $mform->setAdvanced('delay1', $CFG->quiz_fix_delay1); |
64 | $mform->setDefault('delay1', $CFG->quiz_delay1); |
65 | |
66 | $mform->addElement('select', 'delay2', get_string("delay2", "quiz"), $timedelayoptions); |
67 | $mform->setHelpButton('delay2', array("timedelay2", get_string("delay2", "quiz"), "quiz")); |
68 | $mform->setAdvanced('delay2', $CFG->quiz_fix_delay2); |
69 | $mform->setDefault('delay2', $CFG->quiz_delay2); |
70 | |
71 | //------------------------------------------------------------------------------- |
72 | $mform->addElement('header', 'displayhdr', get_string('display', 'form')); |
73 | $perpage = array(); |
74 | for ($i = 0; $i <= 50; ++$i) { |
75 | $perpage[$i] = $i; |
76 | } |
77 | $perpage[0] = get_string('allinone', 'quiz'); |
78 | $mform->addElement('select', 'questionsperpage', get_string('questionsperpage', 'quiz'), $perpage); |
79 | $mform->setHelpButton('questionsperpage', array('questionsperpage', get_string('questionsperpage', 'quiz'), 'quiz')); |
80 | $mform->setAdvanced('questionsperpage', $CFG->quiz_fix_questionsperpage); |
81 | $mform->setDefault('questionsperpage', $CFG->quiz_questionsperpage); |
82 | |
83 | $mform->addElement('selectyesno', 'shufflequestions', get_string("shufflequestions", "quiz")); |
84 | $mform->setHelpButton('shufflequestions', array("shufflequestions", get_string("shufflequestions","quiz"), "quiz")); |
85 | $mform->setAdvanced('shufflequestions', $CFG->quiz_fix_shufflequestions); |
86 | $mform->setDefault('shufflequestions', $CFG->quiz_shufflequestions); |
87 | |
88 | $mform->addElement('selectyesno', 'shuffleanswers', get_string("shufflewithin", "quiz")); |
89 | $mform->setHelpButton('shuffleanswers', array("shufflewithin", get_string("shufflewithin","quiz"), "quiz")); |
90 | $mform->setAdvanced('shuffleanswers', $CFG->quiz_fix_shuffleanswers); |
91 | $mform->setDefault('shuffleanswers', $CFG->quiz_shuffleanswers); |
92 | |
93 | //------------------------------------------------------------------------------- |
94 | $mform->addElement('header', 'attemptshdr', get_string('attempts', 'quiz')); |
95 | $attemptoptions = array(); |
96 | $attemptoptions[0] = get_string("attemptsunlimited", "quiz"); |
97 | $attemptoptions[1] = "1 ".moodle_strtolower(get_string("attempt", "quiz")); |
98 | for ($i=2;$i<=6;$i++) { |
99 | $attemptoptions[$i] = "$i ".moodle_strtolower(get_string("attempts", "quiz")); |
100 | } |
101 | $mform->addElement('select', 'attempts', get_string("attemptsallowed", "quiz"), $attemptoptions); |
102 | $mform->setHelpButton('attempts', array("attempts", get_string("attemptsallowed","quiz"), "quiz")); |
103 | $mform->setAdvanced('attempts', $CFG->quiz_fix_attempts); |
104 | $mform->setDefault('attempts', $CFG->quiz_attempts); |
105 | |
106 | $mform->addElement('selectyesno', 'attemptonlast', get_string("eachattemptbuildsonthelast", "quiz")); |
107 | $mform->setHelpButton('attemptonlast', array("repeatattempts", get_string("eachattemptbuildsonthelast", "quiz"), "quiz")); |
108 | $mform->setAdvanced('attemptonlast', $CFG->quiz_fix_attemptonlast); |
109 | $mform->setDefault('attemptonlast', $CFG->quiz_attemptonlast); |
110 | |
111 | $mform->addElement('selectyesno', 'adaptive', get_string("adaptive", "quiz")); |
112 | $mform->setHelpButton('adaptive', array("adaptive", get_string("adaptive","quiz"), "quiz")); |
113 | $mform->setAdvanced('adaptive', $CFG->quiz_fix_adaptive); |
114 | $mform->setDefault('adaptive', $CFG->quiz_optionflags & QUESTION_ADAPTIVE); |
115 | |
116 | |
117 | //------------------------------------------------------------------------------- |
118 | $mform->addElement('header', 'gradeshdr', get_string('grades', 'grades')); |
119 | $mform->addElement('select', 'grademethod', get_string("grademethod", "quiz"), $QUIZ_GRADE_METHOD); |
120 | $mform->setHelpButton('grademethod', array("grademethod", get_string("grademethod","quiz"), "quiz")); |
121 | $mform->setAdvanced('grademethod', $CFG->quiz_fix_grademethod); |
122 | $mform->setDefault('grademethod', $CFG->quiz_grademethod); |
123 | |
124 | $mform->addElement('selectyesno', 'penaltyscheme', get_string("penaltyscheme", "quiz")); |
125 | $mform->setHelpButton('penaltyscheme', array("penaltyscheme", get_string("penaltyscheme","quiz"), "quiz")); |
126 | $mform->setAdvanced('penaltyscheme', $CFG->quiz_fix_penaltyscheme); |
127 | $mform->setDefault('penaltyscheme', $CFG->quiz_penaltyscheme); |
128 | |
129 | $options = array( |
130 | 0 => '0', |
131 | 1 => '1', |
132 | 2 => '2', |
133 | 3 => '3'); |
134 | $mform->addElement('select', 'decimalpoints', get_string("decimaldigits", "quiz"), $options); |
135 | $mform->setHelpButton('decimalpoints', array("decimalpoints", get_string("decimaldigits","quiz"), "quiz")); |
136 | $mform->setAdvanced('decimalpoints', $CFG->quiz_fix_decimalpoints); |
137 | |
138 | $mform->addElement('hidden', 'grade', $CFG->quiz_maximumgrade); |
139 | |
140 | //------------------------------------------------------------------------------- |
141 | $mform->addElement('header', 'reviewoptionshdr', get_string("reviewoptions", "quiz")); |
142 | $mform->setHelpButton('reviewoptionshdr', array("review2", get_string("allowreview","quiz"), "quiz")); |
143 | $mform->setAdvanced('reviewoptionshdr', $CFG->quiz_fix_review); |
144 | |
145 | $immediatelyoptionsgrp=array(); |
146 | $immediatelyoptionsgrp[] = &$mform->createElement('checkbox', 'responsesimmediately', '', get_string('responses', 'quiz')); |
147 | $immediatelyoptionsgrp[] = &$mform->createElement('checkbox', 'scoreimmediately', '', get_string('scores', 'quiz')); |
148 | $immediatelyoptionsgrp[] = &$mform->createElement('checkbox', 'feedbackimmediately', '', get_string('feedback', 'quiz')); |
149 | $immediatelyoptionsgrp[] = &$mform->createElement('checkbox', 'answersimmediately', '', get_string('answers', 'quiz')); |
150 | $immediatelyoptionsgrp[] = &$mform->createElement('checkbox', 'generalfeedbackimmediately', '', get_string('generalfeedback', 'quiz')); |
151 | $mform->addGroup($immediatelyoptionsgrp, 'immediatelyoptionsgrp', get_string("reviewimmediately", "quiz"), null, false); |
152 | $mform->setDefault('responsesimmediately', $CFG->quiz_review & QUIZ_REVIEW_RESPONSES & QUIZ_REVIEW_IMMEDIATELY); |
153 | $mform->setDefault('scoreimmediately', $CFG->quiz_review & QUIZ_REVIEW_SCORES & QUIZ_REVIEW_IMMEDIATELY); |
154 | $mform->setDefault('feedbackimmediately', $CFG->quiz_review & QUIZ_REVIEW_FEEDBACK & QUIZ_REVIEW_IMMEDIATELY); |
155 | $mform->setDefault('answersimmediately', $CFG->quiz_review & QUIZ_REVIEW_ANSWERS & QUIZ_REVIEW_IMMEDIATELY); |
156 | $mform->setDefault('generalfeedbackimmediately', $CFG->quiz_review & QUIZ_REVIEW_GENERALFEEDBACK & QUIZ_REVIEW_IMMEDIATELY); |
157 | |
158 | $openoptionsgrp=array(); |
159 | $openoptionsgrp[] = &$mform->createElement('checkbox', 'responsesopen', '', get_string('responses', 'quiz')); |
160 | $openoptionsgrp[] = &$mform->createElement('checkbox', 'scoreopen', '', get_string('scores', 'quiz')); |
161 | $openoptionsgrp[] = &$mform->createElement('checkbox', 'feedbackopen', '', get_string('feedback', 'quiz')); |
162 | $openoptionsgrp[] = &$mform->createElement('checkbox', 'answersopen', '', get_string('answers', 'quiz')); |
163 | $openoptionsgrp[] = &$mform->createElement('checkbox', 'generalfeedbackopen', '', get_string('generalfeedback', 'quiz')); |
164 | $mform->addGroup($openoptionsgrp, 'openoptionsgrp', get_string("reviewopen", "quiz"), array(' '), false); |
165 | $mform->setDefault('responsesopen', $CFG->quiz_review & QUIZ_REVIEW_RESPONSES & QUIZ_REVIEW_OPEN); |
166 | $mform->setDefault('scoreopen', $CFG->quiz_review & QUIZ_REVIEW_SCORES & QUIZ_REVIEW_OPEN); |
167 | $mform->setDefault('feedbackopen', $CFG->quiz_review & QUIZ_REVIEW_FEEDBACK & QUIZ_REVIEW_OPEN); |
168 | $mform->setDefault('answersopen', $CFG->quiz_review & QUIZ_REVIEW_ANSWERS & QUIZ_REVIEW_OPEN); |
169 | $mform->setDefault('generalfeedbackopen', $CFG->quiz_review & QUIZ_REVIEW_GENERALFEEDBACK & QUIZ_REVIEW_OPEN); |
170 | |
171 | |
172 | $closedoptionsgrp=array(); |
173 | $closedoptionsgrp[] = &$mform->createElement('checkbox', 'responsesclosed', '', get_string('responses', 'quiz')); |
174 | $closedoptionsgrp[] = &$mform->createElement('checkbox', 'scoreclosed', '', get_string('scores', 'quiz')); |
175 | $closedoptionsgrp[] = &$mform->createElement('checkbox', 'feedbackclosed', '', get_string('feedback', 'quiz')); |
176 | $closedoptionsgrp[] = &$mform->createElement('checkbox', 'answersclosed', '', get_string('answers', 'quiz')); |
177 | $closedoptionsgrp[] = &$mform->createElement('checkbox', 'generalfeedbackclosed', '', get_string('generalfeedback', 'quiz')); |
178 | $mform->addGroup($closedoptionsgrp, 'closedoptionsgrp', get_string("reviewclosed", "quiz"), array(' '), false); |
179 | $mform->setDefault('responsesclosed', $CFG->quiz_review & QUIZ_REVIEW_RESPONSES & QUIZ_REVIEW_CLOSED); |
180 | $mform->setDefault('scoreclosed', $CFG->quiz_review & QUIZ_REVIEW_SCORES & QUIZ_REVIEW_CLOSED); |
181 | $mform->setDefault('feedbackclosed', $CFG->quiz_review & QUIZ_REVIEW_FEEDBACK & QUIZ_REVIEW_CLOSED); |
182 | $mform->setDefault('answersclosed', $CFG->quiz_review & QUIZ_REVIEW_ANSWERS & QUIZ_REVIEW_CLOSED); |
183 | $mform->setDefault('generalfeedbackclosed', $CFG->quiz_review & QUIZ_REVIEW_GENERALFEEDBACK & QUIZ_REVIEW_CLOSED); |
184 | |
185 | //------------------------------------------------------------------------------- |
186 | $mform->addElement('header', 'security', get_string('security', 'form')); |
187 | |
188 | $mform->addElement('selectyesno', 'popup', get_string("popup", "quiz")); |
189 | $mform->setHelpButton('popup', array("popup", get_string("popup", "quiz"), "quiz")); |
190 | $mform->setAdvanced('popup', $CFG->quiz_fix_popup); |
191 | $mform->setDefault('popup', $CFG->quiz_popup); |
192 | |
193 | $mform->addElement('text', 'password', get_string("requirepassword", "quiz")); |
194 | $mform->setType('password', PARAM_TEXT); |
195 | $mform->setHelpButton('password', array("requirepassword", get_string("requirepassword", "quiz"), "quiz")); |
196 | $mform->setAdvanced('password', $CFG->quiz_fix_password); |
197 | $mform->setDefault('password', $CFG->quiz_password); |
198 | |
199 | $mform->addElement('text', 'subnet', get_string("requiresubnet", "quiz")); |
200 | $mform->setType('subnet', PARAM_TEXT); |
201 | $mform->setHelpButton('subnet', array("requiresubnet", get_string("requiresubnet", "quiz"), "quiz")); |
202 | $mform->setAdvanced('subnet', $CFG->quiz_fix_subnet); |
203 | $mform->setDefault('subnet', $CFG->quiz_subnet); |
204 | |
205 | //------------------------------------------------------------------------------- |
206 | $this->standard_coursemodule_elements(); |
207 | //------------------------------------------------------------------------------- |
208 | $mform->addElement('header', 'overallfeedbackhdr', get_string('overallfeedback', 'quiz')); |
209 | $mform->setHelpButton('overallfeedbackhdr', array('overallfeedback', get_string('overallfeedback', 'quiz'), 'quiz')); |
210 | |
211 | $mform->addElement('static', 'gradeboundarystatic1', get_string('gradeboundary', 'quiz'), '100%'); |
212 | |
213 | $repeatarray=array(); |
214 | $repeatarray[] = &MoodleQuickForm::createElement('text', 'feedbacktext', get_string('feedback', 'quiz')); |
215 | $repeatarray[] = &MoodleQuickForm::createElement('text', 'feedbackboundaries', get_string('gradeboundary', 'quiz')); |
216 | |
217 | if (!empty($this->_instance)) { |
218 | $this->_feedbacks = get_records('quiz_feedback', 'quizid', $this->_instance, 'mingrade DESC'); |
219 | } else { |
220 | $this->_feedbacks = array(); |
221 | } |
222 | $numfeedbacks = max(count($this->_feedbacks) * 1.5, 5); |
223 | $nextel=$this->repeat_elements($repeatarray, $numfeedbacks-1, |
224 | array('feedbacktext'=> array('type'=>PARAM_TEXT), |
225 | 'feedbackboundaries' => array('type'=>PARAM_TEXT)), |
226 | 'boundary_repeats', 'boundary_add_fields', 3); |
227 | |
228 | //put some extra elements in before the button |
229 | $insertEl = &MoodleQuickForm::createElement('text', "feedbacktext[$nextel]", get_string('feedback', 'quiz')); |
230 | $mform->insertElementBefore($insertEl, 'boundary_add_fields'); |
231 | $mform->setType("feedbacktext[$nextel]", PARAM_TEXT); |
232 | $mform->setHelpButton("feedbacktext[$nextel]", array('options', get_string('modulenameplural', 'choice'), 'choice')); |
233 | |
234 | $insertEl = &MoodleQuickForm::createElement('static', 'gradeboundarystatic2', get_string('gradeboundary', 'quiz'), '0%'); |
235 | $mform->insertElementBefore($insertEl, 'boundary_add_fields'); |
236 | |
237 | //------------------------------------------------------------------------------- |
238 | // buttons |
239 | $this->add_action_buttons(); |
240 | } |
241 | |
242 | function defaults_preprocessing(&$default_values){ |
243 | if (count($this->_feedbacks)) { |
244 | $key = 0; |
245 | foreach ($this->_feedbacks as $feedback){ |
246 | $default_values['feedbacktext['.$key.']'] = $feedback->feedbacktext; |
247 | if ($feedback->mingrade > 0) { |
248 | $default_values['feedbackboundaries['.$key.']'] = (100.0 * $feedback->mingrade / $default_values['grade']) . '%'; |
249 | } |
250 | $key++; |
251 | } |
252 | |
253 | } |
254 | if (empty($default_values['timelimit'])) { |
255 | $default_values['timelimitenable'] = 0; |
256 | } else { |
257 | $default_values['timelimitenable'] = 1; |
258 | } |
259 | |
260 | if (isset($default_values['review'])){ |
261 | $review = (int)$default_values['review']; |
262 | unset($default_values['review']); |
263 | |
264 | $default_values['responsesimmediately'] = $review & QUIZ_REVIEW_RESPONSES & QUIZ_REVIEW_IMMEDIATELY; |
265 | $default_values['scoreimmediately'] = $review & QUIZ_REVIEW_SCORES & QUIZ_REVIEW_IMMEDIATELY; |
266 | $default_values['feedbackimmediately'] = $review & QUIZ_REVIEW_FEEDBACK & QUIZ_REVIEW_IMMEDIATELY; |
267 | $default_values['answersimmediately'] = $review & QUIZ_REVIEW_ANSWERS & QUIZ_REVIEW_IMMEDIATELY; |
268 | $default_values['generalfeedbackimmediately'] = $review & QUIZ_REVIEW_GENERALFEEDBACK & QUIZ_REVIEW_IMMEDIATELY; |
269 | |
270 | $default_values['responsesopen'] = $review & QUIZ_REVIEW_RESPONSES & QUIZ_REVIEW_OPEN; |
271 | $default_values['scoreopen'] = $review & QUIZ_REVIEW_SCORES & QUIZ_REVIEW_OPEN; |
272 | $default_values['feedbackopen'] = $review & QUIZ_REVIEW_FEEDBACK & QUIZ_REVIEW_OPEN; |
273 | $default_values['answersopen'] = $review & QUIZ_REVIEW_ANSWERS & QUIZ_REVIEW_OPEN; |
274 | $default_values['generalfeedbackopen'] = $review & QUIZ_REVIEW_GENERALFEEDBACK & QUIZ_REVIEW_OPEN; |
275 | |
276 | $default_values['responsesclosed'] = $review & QUIZ_REVIEW_RESPONSES & QUIZ_REVIEW_CLOSED; |
277 | $default_values['scoreclosed'] = $review & QUIZ_REVIEW_SCORES & QUIZ_REVIEW_CLOSED; |
278 | $default_values['feedbackclosed'] = $review & QUIZ_REVIEW_FEEDBACK & QUIZ_REVIEW_CLOSED; |
279 | $default_values['answersclosed'] = $review & QUIZ_REVIEW_ANSWERS & QUIZ_REVIEW_CLOSED; |
280 | $default_values['generalfeedbackclosed'] = $review & QUIZ_REVIEW_GENERALFEEDBACK & QUIZ_REVIEW_CLOSED; |
281 | } |
282 | |
283 | if (isset($default_values['optionflags'])){ |
284 | $default_values['adaptive'] = $default_values['optionflags'] & QUESTION_ADAPTIVE; |
285 | unset($default_values['optionflags']); |
286 | } |
287 | } |
288 | |
289 | function validation($data){ |
290 | $errors = array(); |
291 | // Check open and close times are consistent. |
292 | if ($data['timeopen'] != 0 && $data['timeclose'] != 0 && $data['timeclose'] < $data['timeopen']) { |
293 | $errors['timeclose'] = get_string('closebeforeopen', 'quiz'); |
294 | } |
295 | |
296 | // Check the boundary value is a number or a percentage, and in range. |
297 | $i = 0; |
298 | while (!empty($data['feedbackboundaries'][$i] )) { |
299 | $boundary = trim($data['feedbackboundaries'][$i]); |
300 | if (strlen($boundary) > 0 && $boundary[strlen($boundary) - 1] == '%') { |
301 | $boundary = trim(substr($boundary, 0, -1)); |
302 | if (is_numeric($boundary)) { |
303 | $boundary = $boundary * $data['grade'] / 100.0; |
304 | } else { |
305 | $errors["feedbackboundaries[$i]"] = get_string('feedbackerrorboundaryformat', 'quiz', $i + 1); |
306 | } |
307 | } |
308 | if (is_numeric($boundary) && $boundary <= 0 || $boundary >= $data['grade'] ) { |
309 | $errors["feedbackboundaries[$i]"] = get_string('feedbackerrorboundaryoutofrange', 'quiz', $i + 1); |
310 | } |
311 | if (is_numeric($boundary) && $i > 0 && $boundary >= $data['feedbackboundaries'][$i - 1]) { |
312 | $errors["feedbackboundaries[$i]"] = get_string('feedbackerrororder', 'quiz', $i + 1); |
313 | } |
314 | $data['feedbackboundaries'][$i] = $boundary; |
315 | $i += 1; |
316 | } |
317 | $numboundaries = $i; |
318 | |
319 | // Check there is nothing in the remaining unused fields. |
320 | for ($i = $numboundaries; $i < count($data['feedbackboundaries'] ); $i += 1) { |
321 | if (!empty($data['feedbackboundaries'][$i] ) && trim($data['feedbackboundaries'][$i] ) != '') { |
322 | $errors["feedbackboundaries[$i]"] = get_string('feedbackerrorjunkinboundary', 'quiz', $i + 1); |
323 | } |
324 | } |
325 | for ($i = $numboundaries + 1; $i < count($data['feedbacktext'] ); $i += 1) { |
326 | if (!empty($data['feedbacktext'][$i] ) && trim($data['feedbacktext'][$i] ) != '') { |
327 | $errors["feedbacktext[$i]"] = get_string('feedbackerrorjunkinfeedback', 'quiz', $i + 1); |
328 | } |
329 | } |
330 | return $errors; |
331 | } |
332 | |
333 | } |
334 | ?> |