diff --git a/mod/assign/externallib.php b/mod/assign/externallib.php index 2c65d1562a3..5c7d8624040 100644 --- a/mod/assign/externallib.php +++ b/mod/assign/externallib.php @@ -1681,9 +1681,12 @@ class mod_assign_external extends external_api { $notices = array(); - $submissiondata = (object)$params['plugindata']; - - $assignment->save_submission($submissiondata, $notices); + if (!$assignment->submissions_open($USER->id)) { + $notices[] = get_string('duedatereached', 'assign'); + } else { + $submissiondata = (object)$params['plugindata']; + $assignment->save_submission($submissiondata, $notices); + } $warnings = array(); foreach ($notices as $notice) { diff --git a/mod/assign/tests/externallib_test.php b/mod/assign/tests/externallib_test.php index 01c5d4de528..63e9c36ffbd 100644 --- a/mod/assign/tests/externallib_test.php +++ b/mod/assign/tests/externallib_test.php @@ -946,6 +946,16 @@ class mod_assign_external_testcase extends externallib_advanced_testcase { $this->assertEquals(0, count($result)); + // Set up a due and cutoff passed date. + $instance->duedate = time() - WEEKSECS; + $instance->cutoffdate = time() - WEEKSECS; + $DB->update_record('assign', $instance); + + $result = mod_assign_external::save_submission($instance->id, $submissionpluginparams); + $result = external_api::clean_returnvalue(mod_assign_external::save_submission_returns(), $result); + + $this->assertCount(1, $result); + $this->assertEquals(get_string('duedatereached', 'assign'), $result[0]['item']); } /**