From df558765a43df1593113ecebd2faa8fb24bbad5b Mon Sep 17 00:00:00 2001 From: David Mudrak Date: Sat, 31 Mar 2012 00:51:29 +0200 Subject: [PATCH] MDL-26099 validate the phases open dates and deadlines --- mod/workshop/lang/en/workshop.php | 3 +++ mod/workshop/mod_form.php | 38 +++++++++++++++++++++++++++++++ 2 files changed, 41 insertions(+) diff --git a/mod/workshop/lang/en/workshop.php b/mod/workshop/lang/en/workshop.php index 712208e6ccd..84bf166447d 100644 --- a/mod/workshop/lang/en/workshop.php +++ b/mod/workshop/lang/en/workshop.php @@ -50,6 +50,7 @@ $string['assessmentbyfullname'] = 'Assessment by {$a}'; $string['assessmentbyyourself'] = 'Your assessment'; $string['assessmentdeleted'] = 'Assessment deallocated'; $string['assessmentend'] = 'Deadline for assessment'; +$string['assessmentendbeforestart'] = 'Deadline for assessment can not be specified before the open for assessment date'; $string['assessmentenddatetime'] = 'Assessment deadline: {$a->daydatetime} ({$a->distanceday})'; $string['assessmentform'] = 'Assessment form'; $string['assessmentofsubmission'] = 'Assessment of {$a->submissiontitle}'; @@ -174,6 +175,7 @@ $string['participantreviewedby'] = 'Participant is reviewed by'; $string['phaseassessment'] = 'Assessment phase'; $string['phaseclosed'] = 'Closed'; $string['phaseevaluation'] = 'Grading evaluation phase'; +$string['phasesoverlap'] = 'The submission phase and the assessment phase can not overlap'; $string['phasesetup'] = 'Setup phase'; $string['phasesubmission'] = 'Submission phase'; $string['pluginadministration'] = 'Workshop administration'; @@ -207,6 +209,7 @@ $string['submissionby'] = 'Submission by {$a}'; $string['submissionattachment'] = 'Attachment'; $string['submissioncontent'] = 'Submission content'; $string['submissionend'] = 'Submissions deadline'; +$string['submissionendbeforestart'] = 'Submissions deadline can not be specified before the open for submissions date'; $string['submissionenddatetime'] = 'Submissions deadline: {$a->daydatetime} ({$a->distanceday})'; $string['submissiongrade'] = 'Grade for submission'; $string['submissiongrade_help'] = 'This setting specifies the maximum grade that may be obtained for submitted work.'; diff --git a/mod/workshop/mod_form.php b/mod/workshop/mod_form.php index 74af6d4bbe1..078efe4a7d7 100644 --- a/mod/workshop/mod_form.php +++ b/mod/workshop/mod_form.php @@ -283,4 +283,42 @@ class mod_workshop_mod_form extends moodleform_mod { parent::definition_after_data(); } + + /** + * Validates the form input + * + * @param array $data submitted data + * @param array $files submitted files + * @return array eventual errors indexed by the field name + */ + public function validation(array $data, array $files) { + $errors = array(); + + // check the phases borders are valid + if ($data['submissionstart'] > 0 and $data['submissionend'] > 0 and $data['submissionstart'] >= $data['submissionend']) { + $errors['submissionend'] = get_string('submissionendbeforestart', 'mod_workshop'); + } + if ($data['assessmentstart'] > 0 and $data['assessmentend'] > 0 and $data['assessmentstart'] >= $data['assessmentend']) { + $errors['assessmentend'] = get_string('assessmentendbeforestart', 'mod_workshop'); + } + + // check the phases do not overlap + if (max($data['submissionstart'], $data['submissionend']) > 0 and max($data['assessmentstart'], $data['assessmentend']) > 0) { + $phasesubmissionend = max($data['submissionstart'], $data['submissionend']); + $phaseassessmentstart = min($data['assessmentstart'], $data['assessmentend']); + if ($phaseassessmentstart == 0) { + $phaseassessmentstart = max($data['assessmentstart'], $data['assessmentend']); + } + if ($phasesubmissionend > 0 and $phaseassessmentstart > 0 and $phaseassessmentstart < $phasesubmissionend) { + foreach (array('submissionend', 'submissionstart', 'assessmentstart', 'assessmentend') as $f) { + if ($data[$f] > 0) { + $errors[$f] = get_string('phasesoverlap', 'mod_workshop'); + break; + } + } + } + } + + return $errors; + } }