From 85b5e20cdedec890abcd87c393f4b3fd7c8a9451 Mon Sep 17 00:00:00 2001 From: Damyon Wiese Date: Mon, 19 Nov 2012 16:56:02 +0800 Subject: [PATCH] MDL-35963: Assignment - do not accept empty submissions Conflicts: mod/assign/locallib.php --- mod/assign/lang/en/assign.php | 1 + mod/assign/locallib.php | 37 ++++++++++++++++++++++++++--------- 2 files changed, 29 insertions(+), 9 deletions(-) diff --git a/mod/assign/lang/en/assign.php b/mod/assign/lang/en/assign.php index f36242193e2..cd9efcf69f3 100644 --- a/mod/assign/lang/en/assign.php +++ b/mod/assign/lang/en/assign.php @@ -88,6 +88,7 @@ $string['download all submissions'] = 'Download all submissions in a zip file.'; $string['duedate'] = 'Due date'; $string['duedate_help'] = 'This is when the assignment is due. If late submissions are allowed, any assignments submitted after this date are marked as late.'; $string['duedateno'] = 'No due date'; +$string['submissionempty'] = 'Nothing was submitted'; $string['duedatereached'] = 'The due date for this assignment has now passed'; $string['duedatevalidation'] = 'Due date must be after the allow submissions from date.'; $string['editsubmission'] = 'Edit my submission'; diff --git a/mod/assign/locallib.php b/mod/assign/locallib.php index 12e3a44fea5..6f449a9680c 100644 --- a/mod/assign/locallib.php +++ b/mod/assign/locallib.php @@ -296,11 +296,12 @@ class assign { $o = ''; $mform = null; + $notices = array(); - // handle form submissions first + // Handle form submissions first. if ($action == 'savesubmission') { $action = 'editsubmission'; - if ($this->process_save_submission($mform)) { + if ($this->process_save_submission($mform, $notices)) { $action = 'view'; } } else if ($action == 'lock') { @@ -351,7 +352,7 @@ class assign { $returnparams = array('rownum'=>optional_param('rownum', 0, PARAM_INT)); $this->register_return_link($action, $returnparams); - // now show the right view page + // Now show the right view page. if ($action == 'previousgrade') { $mform = null; $o .= $this->view_single_grade_page($mform, -1); @@ -368,7 +369,7 @@ class assign { } else if ($action == 'viewpluginassignsubmission') { $o .= $this->view_plugin_content('assignsubmission'); } else if ($action == 'editsubmission') { - $o .= $this->view_edit_submission_page($mform); + $o .= $this->view_edit_submission_page($mform, $notices); } else if ($action == 'grading') { $o .= $this->view_grading_page(); } else if ($action == 'downloadall') { @@ -1939,9 +1940,10 @@ class assign { * View edit submissions page. * * @param moodleform $mform + * @param array $notices A list of notices to display at the top of the edit submission form (e.g. from plugins). * @return void */ - private function view_edit_submission_page($mform) { + private function view_edit_submission_page($mform, $notices) { global $CFG; $o = ''; @@ -1965,6 +1967,10 @@ class assign { $mform = new mod_assign_submission_form(null, array($this, $data)); } + foreach ($notices as $notice) { + $o .= $this->output->notification($notice); + } + $o .= $this->output->render(new assign_form('editsubmissionform',$mform)); $o .= $this->view_footer(); @@ -2821,15 +2827,16 @@ class assign { * save assignment submission * * @param moodleform $mform + * @param array $notices Any error messages that should be shown to the user at the top of the edit submission form. * @return bool */ - private function process_save_submission(&$mform) { + private function process_save_submission(&$mform, &$notices) { global $USER, $CFG; - // Include submission form + // Include submission form. require_once($CFG->dirroot . '/mod/assign/submission_form.php'); - // Need submit permission to submit an assignment + // Need submit permission to submit an assignment. require_capability('mod/assign:submit', $this->context); require_sesskey(); @@ -2847,13 +2854,25 @@ class assign { } + $allempty = true; + $pluginerror = false; foreach ($this->submissionplugins as $plugin) { if ($plugin->is_enabled()) { if (!$plugin->save($submission, $data)) { - print_error($plugin->get_error()); + $notices[] = $plugin->get_error(); + $pluginerror = true; + } + if (!$allempty || !$plugin->is_empty($submission)) { + $allempty = false; } } } + if ($pluginerror || $allempty) { + if ($allempty) { + $notices[] = get_string('submissionempty', 'mod_assign'); + } + return false; + } $this->update_submission($submission);