}
$this->repeat_elements($repeated, $repeatsatstart, array(), 'nounits', 'addunits', 2, get_string('addmoreunitblanks', 'qtype_numerical'));
- $firstunit =& $mform->getElement('multiplier[0]');
- $firstunit->freeze();
- $firstunit->setValue('1.0');
- $firstunit->setPersistantFreeze(true);
+ if ($mform->elementExists('multiplier[0]')) {
+ /// Does not exist when this form is used in 'move to another category'
+ /// mode with a qusetion that has no units. This was leading to errors.
+ $firstunit =& $mform->getElement('multiplier[0]');
+ $firstunit->freeze();
+ $firstunit->setValue('1.0');
+ $firstunit->setPersistantFreeze(true);
+ }
}
function set_data($question) {
$answercount++;
}
}
- if ($answercount==0){
+ if ($answercount == 0) {
$errors['answer[0]'] = get_string('notenoughanswers', 'qtype_numerical');
}
if ($maxgrade == false) {
// Check units.
$alreadyseenunits = array();
- foreach ($data['unit'] as $key => $unit) {
- $trimmedunit = trim($unit);
- if ($trimmedunit!='' && in_array($trimmedunit, $alreadyseenunits)) {
- $errors["unit[$key]"] = get_string('errorrepeatedunit', 'qtype_numerical');
- if (trim($data['multiplier'][$key]) == '') {
- $errors["multiplier[$key]"] = get_string('errornomultiplier', 'qtype_numerical');
+ if (isset($data['unit'])) {
+ foreach ($data['unit'] as $key => $unit) {
+ $trimmedunit = trim($unit);
+ if ($trimmedunit!='' && in_array($trimmedunit, $alreadyseenunits)) {
+ $errors["unit[$key]"] = get_string('errorrepeatedunit', 'qtype_numerical');
+ if (trim($data['multiplier'][$key]) == '') {
+ $errors["multiplier[$key]"] = get_string('errornomultiplier', 'qtype_numerical');
+ }
+ } else {
+ $alreadyseenunits[] = $trimmedunit;
}
- } else {
- $alreadyseenunits[] = $trimmedunit;
}
}