MDL-23709 Added more checks to prevent multiply submissions per user

This commit is contained in:
David Mudrak
2010-08-17 13:31:53 +00:00
parent 3f873af7bf
commit 2e7bd6c286
5 changed files with 61 additions and 12 deletions
+16 -5
View File
@@ -53,6 +53,7 @@ if ($id) { // example is specified
$example = new stdclass();
$example->id = null;
$example->authorid = $USER->id;
$example->example = 1;
}
$canmanage = has_capability('mod/workshop:manageexamples', $workshop->context);
@@ -113,8 +114,14 @@ if ($edit and $canmanage) {
redirect($workshop->view_url());
} elseif ($canmanage and $formdata = $mform->get_data()) {
if ($formdata->example == 1) {
// this was used just for validation, it must be set to one when dealing with example submissions
unset($formdata->example);
} else {
throw new coding_exception('Invalid submission form data value: example');
}
$timenow = time();
if (empty($formdata->id)) {
if (is_null($example->id)) {
$formdata->workshopid = $workshop->id;
$formdata->example = 1;
$formdata->authorid = $USER->id;
@@ -126,15 +133,19 @@ if ($edit and $canmanage) {
$formdata->content = ''; // updated later
$formdata->contentformat = FORMAT_HTML; // updated later
$formdata->contenttrust = 0; // updated later
if (empty($formdata->id)) {
$formdata->id = $DB->insert_record('workshop_submissions', $formdata);
if (is_null($example->id)) {
$example->id = $formdata->id = $DB->insert_record('workshop_submissions', $formdata);
// todo add to log
} else {
if (empty($formdata->id) or empty($example->id) or ($formdata->id != $example->id)) {
throw new moodle_exception('err_examplesubmissionid', 'workshop');
}
}
// save and relink embedded images and save attachments
$formdata = file_postupdate_standard_editor($formdata, 'content', $contentopts, $workshop->context,
'mod_workshop', 'submission_content', $formdata->id);
'mod_workshop', 'submission_content', $example->id);
$formdata = file_postupdate_standard_filemanager($formdata, 'attachment', $attachmentopts, $workshop->context,
'mod_workshop', 'submission_attachment', $formdata->id);
'mod_workshop', 'submission_attachment', $example->id);
if (empty($formdata->attachment)) {
// explicit cast to zero integer
$formdata->attachment = 0;
+1
View File
@@ -87,6 +87,7 @@ $string['editassessmentformstrategy'] = 'Edit assessment form ({$a})';
$string['editingassessmentform'] = 'Editing assessment form';
$string['editingsubmission'] = 'Editing submission';
$string['editsubmission'] = 'Edit submission';
$string['err_multiplesubmissions'] = 'While editing this form, another version of the submission has been saved. Multiple submissions per user are not allowed.';
$string['err_removegrademappings'] = 'Unable to remove the unused grade mappings';
$string['evaluategradeswait'] = 'Please wait until the assessments are evaluated and the grades are calculated';
$string['evaluation'] = 'Grading evaluation';
+5 -2
View File
@@ -298,11 +298,14 @@
/**
* Assessment
*/
.path-mod-workshop .assessment-summary.graded,
.path-mod-workshop .example-summary.graded {
.path-mod-workshop .assessment-summary.graded {
background-color: #e7f1c3;
}
.path-mod-workshop .example-summary.notgraded {
background-color: #ffd3d9;
}
.path-mod-workshop .assessmentform .description {
margin: 0px 1em;
}
+16 -5
View File
@@ -51,6 +51,7 @@ if ($id) { // submission is specified
$submission = new stdclass();
$submission->id = null;
$submission->authorid = $USER->id;
$submission->example = 0;
$submission->grade = null;
$submission->gradeover = null;
$submission->published = null;
@@ -122,8 +123,14 @@ if ($edit) {
redirect($workshop->view_url());
} elseif ($cansubmit and $formdata = $mform->get_data()) {
if ($formdata->example == 0) {
// this was used just for validation, it must be set to zero when dealing with normal submissions
unset($formdata->example);
} else {
throw new coding_exception('Invalid submission form data value: example');
}
$timenow = time();
if (empty($formdata->id)) {
if (is_null($submission->id)) {
$formdata->workshopid = $workshop->id;
$formdata->example = 0;
$formdata->authorid = $USER->id;
@@ -142,15 +149,19 @@ if ($edit) {
if ($workshop->phase == workshop::PHASE_ASSESSMENT) {
$formdata->late = $formdata->late | 0x2;
}
if (empty($formdata->id)) {
$formdata->id = $DB->insert_record('workshop_submissions', $formdata);
if (is_null($submission->id)) {
$submission->id = $formdata->id = $DB->insert_record('workshop_submissions', $formdata);
// todo add to log
} else {
if (empty($formdata->id) or empty($submission->id) or ($formdata->id != $submission->id)) {
throw new moodle_exception('err_submissionid', 'workshop');
}
}
// save and relink embedded images and save attachments
$formdata = file_postupdate_standard_editor($formdata, 'content', $contentopts, $workshop->context,
'mod_workshop', 'submission_content', $formdata->id);
'mod_workshop', 'submission_content', $submission->id);
$formdata = file_postupdate_standard_filemanager($formdata, 'attachment', $attachmentopts, $workshop->context,
'mod_workshop', 'submission_attachment', $formdata->id);
'mod_workshop', 'submission_attachment', $submission->id);
if (empty($formdata->attachment)) {
// explicit cast to zero integer
$formdata->attachment = 0;
+23
View File
@@ -53,8 +53,16 @@ class workshop_submission_form extends moodleform {
}
$mform->addElement('hidden', 'id', $current->id);
$mform->setType('id', PARAM_INT);
$mform->addElement('hidden', 'cmid', $workshop->cm->id);
$mform->setType('cmid', PARAM_INT);
$mform->addElement('hidden', 'edit', 1);
$mform->setType('edit', PARAM_INT);
$mform->addElement('hidden', 'example', 0);
$mform->setType('hidden', PARAM_INT);
$this->add_action_buttons();
@@ -65,6 +73,21 @@ class workshop_submission_form extends moodleform {
global $CFG, $USER, $DB;
$errors = parent::validation($data, $files);
if (empty($data['id']) and empty($data['example'])) {
// make sure there is no submission saved meanwhile from another browser window
$sql = "SELECT COUNT (s.id)
FROM {workshop_submissions} s
JOIN {workshop} w ON (s.workshopid = w.id)
JOIN {course_modules} cm ON (w.id = cm.instance)
JOIN {modules} m ON (m.name = 'workshop' AND m.id = cm.module)
WHERE cm.id = ? AND s.authorid = ? AND s.example = 0";
if ($DB->count_records_sql($sql, array($data['cmid'], $USER->id))) {
$errors['title'] = get_string('err_multiplesubmissions', 'mod_workshop');
}
}
return $errors;
}
}