Skip to content

Commit a1d4d57

Browse files
committed
CTP-3652 reinstate form validation
1 parent cdbe6c4 commit a1d4d57

File tree

1 file changed

+41
-32
lines changed

1 file changed

+41
-32
lines changed

mod_form.php

Lines changed: 41 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -243,6 +243,46 @@ public function set_data($default_values) {
243243
parent::set_data($default_values);
244244
}
245245

246+
/**
247+
* This function is public static so that it can be called from outside of this plugin by another plugin.
248+
* The other plugin wants a more limited version of this form but cannot inherit from it.
249+
* This covers only the fields that the other plugin is interested in. Rest are covered in validation().
250+
* @param array $data
251+
* @param array $files
252+
* @return array
253+
*@see self::add_availability_fields() which adds the related form fields.
254+
*/
255+
public static function validate_availability_section_data(array $data, array $files): array {
256+
$errors = [];
257+
if ($data['startdate'] != 0 && !empty($data['deadline']) && $data['startdate'] > $data['deadline']) {
258+
$errors['startdate'] = get_string('must_be_before_dealdine', 'mod_coursework');
259+
}
260+
if (isset($data['initialmarkingdeadline']) && $data['initialmarkingdeadline'] != 0 && !empty($data['deadline'])) {
261+
if ($data['initialmarkingdeadline'] < $data['deadline']) {
262+
$errors['initialmarkingdeadline'] = get_string('must_be_after_dealdine', 'mod_coursework');
263+
}
264+
if ($data['deadline'] && $data['initialmarkingdeadline'] < $data['deadline']) {
265+
$errors['initialmarkingdeadline'] = get_string('must_be_after_dealdine', 'mod_coursework');
266+
}
267+
}
268+
269+
if (isset($data['agreedgrademarkingdeadline']) && $data['agreedgrademarkingdeadline'] != 0) {
270+
if (!empty($data['deadline']) && $data['agreedgrademarkingdeadline'] < $data['deadline']) {
271+
$errors['agreedgrademarkingdeadline'] = get_string('must_be_after_dealdine', 'mod_coursework');
272+
}
273+
if ($data['agreedgrademarkingdeadline'] < $data['initialmarkingdeadline']) {
274+
$errors['agreedgrademarkingdeadline'] = get_string('must_be_after_initial_grade_dealdine', 'mod_coursework');
275+
}
276+
if (!empty($data['deadline']) && $data['agreedgrademarkingdeadline'] < $data['deadline']) {
277+
$errors['agreedgrademarkingdeadline'] = get_string('must_be_after_dealdine', 'mod_coursework');
278+
}
279+
if ($data['agreedgrademarkingdeadline'] < $data['initialmarkingdeadline']) {
280+
$errors['agreedgrademarkingdeadline'] = get_string('must_be_after_initial_grade_dealdine', 'mod_coursework');
281+
}
282+
}
283+
return $errors;
284+
}
285+
246286
/**
247287
* We can't do this with $mform->addRule() because the compare function works with the raw form values, which is
248288
* an array of date components. Here, Moodle's internals have processed those values into a Unix timestamp, so the
@@ -254,50 +294,19 @@ public function set_data($default_values) {
254294
*/
255295
public function validation($data, $files) {
256296

257-
$errors = array();
258-
259-
if ($data['startdate'] != 0 && !empty($data['deadline']) && $data['startdate'] > $data['deadline']){
260-
$errors['startdate'] = get_string('must_be_before_dealdine', 'mod_coursework');
261-
}
297+
$errors = self::validate_availability_section_data($data, $files);
262298

263299
if ($data['individualfeedback'] != 0 && !empty($data['deadline']) && $data['individualfeedback'] < $data['deadline']) {
264300
$errors['individualfeedback'] = get_string('must_be_after_dealdine', 'mod_coursework');
265301
}
266-
267302
if ($data['generalfeedback'] != 0 && !empty($data['deadline']) && $data['generalfeedback'] < $data['deadline']) {
268303
$errors['generalfeedback'] = get_string('must_be_after_dealdine', 'mod_coursework');
269304
}
270-
271-
if (isset($data['initialmarkingdeadline']) && $data['initialmarkingdeadline'] != 0 && !empty($data['deadline']) && $data['initialmarkingdeadline'] < $data['deadline']){
272-
$errors['initialmarkingdeadline'] = get_string('must_be_after_dealdine', 'mod_coursework');
273-
}
274-
275-
if (isset($data['agreedgrademarkingdeadline']) && $data['agreedgrademarkingdeadline'] != 0 && !empty($data['deadline']) && $data['agreedgrademarkingdeadline'] < $data['deadline']){
276-
$errors['agreedgrademarkingdeadline'] = get_string('must_be_after_dealdine', 'mod_coursework');
277-
}
278-
279-
if (isset($data['agreedgrademarkingdeadline']) && $data['agreedgrademarkingdeadline'] != 0 && $data['agreedgrademarkingdeadline'] < $data['initialmarkingdeadline'] ){
280-
$errors['agreedgrademarkingdeadline'] = get_string('must_be_after_initial_grade_dealdine', 'mod_coursework');
281-
}
282-
283-
if (isset($data['initialmarkingdeadline']) && $data['initialmarkingdeadline'] != 0 && !empty($data['deadline']) && $data['deadline'] && $data['initialmarkingdeadline'] < $data['deadline']){
284-
$errors['initialmarkingdeadline'] = get_string('must_be_after_dealdine', 'mod_coursework');
285-
}
286-
287-
if (isset($data['agreedgrademarkingdeadline']) && $data['agreedgrademarkingdeadline'] != 0 && !empty($data['deadline']) && $data['agreedgrademarkingdeadline'] < $data['deadline']){
288-
$errors['agreedgrademarkingdeadline'] = get_string('must_be_after_dealdine', 'mod_coursework');
289-
}
290-
291-
if (isset($data['agreedgrademarkingdeadline']) && $data['agreedgrademarkingdeadline'] != 0 && $data['agreedgrademarkingdeadline'] < $data['initialmarkingdeadline'] ){
292-
$errors['agreedgrademarkingdeadline'] = get_string('must_be_after_initial_grade_dealdine', 'mod_coursework');
293-
}
294-
295305
if (isset($data['relativeagreedmarkingdeadline']) && $data['relativeagreedmarkingdeadline'] != 0 && $data['relativeagreedmarkingdeadline'] < $data['relativeinitialmarkingdeadline'] ) {
296306
$errors['relativeagreedmarkingdeadline'] = get_string('must_be_after_or_equal_to_relative_initial_grade_dealdine', 'mod_coursework');
297307

298308
}
299309

300-
301310
$courseworkid = self::get_coursework_id();
302311
if ($courseworkid) {
303312
$coursework = mod_coursework\models\coursework::find($courseworkid);

0 commit comments

Comments
 (0)