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;
+ }
}