From 33e4dea627bb78735932e2540386cc67106655a9 Mon Sep 17 00:00:00 2001 From: David Mudrak Date: Mon, 4 Jan 2010 17:38:29 +0000 Subject: [PATCH] Initial draft of submission support --- mod/workshop/db/install.xml | 11 +- mod/workshop/editgradingform.php | 53 ++++------ mod/workshop/lang/en_utf8/workshop.php | 2 +- mod/workshop/submission.php | 136 +++++++++++++++++++++++++ mod/workshop/submission_form.php | 70 +++++++++++++ mod/workshop/view.php | 4 +- 6 files changed, 238 insertions(+), 38 deletions(-) create mode 100644 mod/workshop/submission.php create mode 100644 mod/workshop/submission_form.php diff --git a/mod/workshop/db/install.xml b/mod/workshop/db/install.xml index 08276eeecf..dffd618068 100644 --- a/mod/workshop/db/install.xml +++ b/mod/workshop/db/install.xml @@ -1,5 +1,5 @@ - @@ -50,8 +50,13 @@ - - + + + + + + + diff --git a/mod/workshop/editgradingform.php b/mod/workshop/editgradingform.php index 642775eb13..8f3914d7e2 100644 --- a/mod/workshop/editgradingform.php +++ b/mod/workshop/editgradingform.php @@ -27,45 +27,32 @@ require_once(dirname(dirname(dirname(__FILE__))).'/config.php'); require_once(dirname(__FILE__).'/lib.php'); -$id = optional_param('id', 0, PARAM_INT); // course_module ID, or -$a = optional_param('a', 0, PARAM_INT); // workshop instance ID - -if ($id) { - if (! $cm = get_coursemodule_from_id('workshop', $id)) { - error('Course Module ID was incorrect'); - } - - if (! $course = $DB->get_record('course', array('id' => $cm->course))) { - error('Course is misconfigured'); - } - - if (! $workshop = $DB->get_record('workshop', array('id' => $cm->instance))) { - error('Course module is incorrect'); - } - -} else if ($a) { - if (! $workshop = $DB->get_record('workshop', array('id' => $a))) { - error('Course module is incorrect'); - } - if (! $course = $DB->get_record('course', array('id' => $workshop->course))) { - error('Course is misconfigured'); - } - if (! $cm = get_coursemodule_from_instance('workshop', $workshop->id, $course->id)) { - error('Course Module ID was incorrect'); - } - -} else { - error('You must specify a course_module ID or an instance ID'); +$cmid = required_param('cmid', PARAM_INT); // course module id + +if (!$cm = get_coursemodule_from_id('workshop', $cmid)) { + print_error('invalidcoursemodule'); +} + +if (!$course = $DB->get_record('course', array('id' => $cm->course))) { + print_error('coursemisconf'); +} + +require_login($course, false, $cm); + +$context = get_context_instance(CONTEXT_MODULE, $cm->id); + +if (isguestuser()) { + print_error('guestnoedit', 'workshop', "$CFG->wwwroot/mod/workshop/view.php?id=$cmid"); } -require_login($course, true, $cm); - -add_to_log($course->id, "workshop", "editgradingform", "editgradingform.php?id=$cm->id", "$workshop->id"); +if (!$workshop = $DB->get_record('workshop', array('id' => $cm->instance))) { + print_error('invalidid', 'workshop'); +} // where should the user be sent after closing the editing form $returnurl = "{$CFG->wwwroot}/mod/workshop/view.php?id={$cm->id}"; // the URL of this editing form -$selfurl = "{$CFG->wwwroot}/mod/workshop/editgradingform.php?id={$cm->id}"; +$selfurl = "{$CFG->wwwroot}/mod/workshop/editgradingform.php?cmid={$cm->id}"; // load the grading strategy logic $strategylib = dirname(__FILE__) . '/grading/' . $workshop->strategy . '/strategy.php'; diff --git a/mod/workshop/lang/en_utf8/workshop.php b/mod/workshop/lang/en_utf8/workshop.php index ac22488f44..f91dffb23a 100644 --- a/mod/workshop/lang/en_utf8/workshop.php +++ b/mod/workshop/lang/en_utf8/workshop.php @@ -95,7 +95,7 @@ $string['nsassessments'] = 'Number of required assessments of other users\' work $string['releasegrades'] = 'Push final grades into the gradebook'; $string['requirepassword'] = 'Require password'; $string['saveandclose'] = 'Save and close'; -$string['saveandcontinue'] = 'Save and continue'; +$string['saveandcontinue'] = 'Save and continue editing'; $string['strategyaccumulative'] = 'Accumulative grading'; $string['strategyerrorbanded'] = 'Error banded grading'; $string['strategy'] = 'Grading strategy'; diff --git a/mod/workshop/submission.php b/mod/workshop/submission.php new file mode 100644 index 0000000000..b4bd15c1d0 --- /dev/null +++ b/mod/workshop/submission.php @@ -0,0 +1,136 @@ +. + + +/** + * Submit an assignment or edit the already submitted work + * + * @package mod-workshop + * @copyright 2009 David Mudrak + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + */ + +require_once(dirname(dirname(dirname(__FILE__))).'/config.php'); +require_once(dirname(__FILE__).'/lib.php'); +require_once(dirname(__FILE__).'/submission_form.php'); + +$cmid = required_param('cmid', PARAM_INT); // course module id +$id = optional_param('id', 0, PARAM_INT); // submission id + +if (!$cm = get_coursemodule_from_id('workshop', $cmid)) { + print_error('invalidcoursemodule'); +} + +if (!$course = $DB->get_record('course', array('id' => $cm->course))) { + print_error('coursemisconf'); +} + +require_login($course, false, $cm); + +$context = get_context_instance(CONTEXT_MODULE, $cm->id); + +if (isguestuser()) { + print_error('guestnoedit', 'workshop', "$CFG->wwwroot/mod/workshop/view.php?id=$cmid"); +} + +if (!$workshop = $DB->get_record('workshop', array('id' => $cm->instance))) { + print_error('invalidid', 'workshop'); +} + +if ($id) { // if submission is specified + if (!$submission = $DB->get_record('workshop_submissions', array('id' => $id, 'workshopid' => $workshop->id))) { + print_error('invalidsubmissionid', 'workshop'); + } + // todo check access rights + +} else { // new submission + //require_capability('mod/workshop:submit', $context); + $submission = new object(); + $submission->id = null; +} + +$maxfiles = $workshop->nattachments; +$maxbytes = $workshop->maxbytes; + +$dataoptions = array('trusttext' => true, 'subdirs' => false, 'maxfiles' => $maxfiles, 'maxbytes' => $maxbytes); +$attachmentoptions = array('subdirs' => false, 'maxfiles'=>$maxfiles, 'maxbytes'=>$maxbytes); + +$submission = file_prepare_standard_editor($submission, 'data', $dataoptions, $context, 'workshop_submission', $submission->id); +$submission = file_prepare_standard_filemanager($submission, 'attachment', $attachmentoptions, $context, + 'workshop_attachment', $submission->id); + +$submission->cmid = $cm->id; + +// create form and set initial data +$mform = new workshop_submission_form(null, array('current' => $submission, 'cm' => $cm, 'workshop'=>$workshop, + 'dataoptions' => $dataoptions, 'attachmentoptions'=>$attachmentoptions)); + +if ($mform->is_cancelled()){ + if ($id){ + redirect("view.php?id=$cm->id"); + } else { + redirect("view.php?id=$cm->id"); + } + +} else if ($submission = $mform->get_data()) { + + $timenow = time(); + + if (empty($submission->id)) { + $submission->workshopid = $workshop->id; + $submission->example = 0; // todo add examples support + $submission->userid = $USER->id; + $submission->timecreated = $timenow; + } + + $submission->timemodified = $timenow; + $submission->title = trim($submission->title); + $submission->data = ''; // updated later + $submission->dataformat = FORMAT_HTML; // updated later + $submission->datatrust = 0; // updated later + + if (empty($submission->id)) { + //new submission + $submission->id = $DB->insert_record('workshop_submissions', $submission); + // todo add to log + + } else { + //existing submission + $DB->update_record('workshop_submissions', $submission); + // todo add to log + } + + // save and relink embedded images and save attachments + $submission = file_postupdate_standard_editor($submission, 'data', $dataoptions, $context, 'workshop_submission', $submission->id); + $submission = file_postupdate_standard_filemanager($submission, 'attachment', $attachmentoptions, $context, 'workshop_attachment', $submission->id); + + // store the updated value values + $DB->update_record('workshop_submissions', $submission); + + redirect("view.php?id=$cm->id"); +} + +$stredit = empty($submission->id) ? get_string('addsubmission', 'workshop') : get_string('edit'); + +$navigation = build_navigation($stredit, $cm); +print_header_simple(format_string($workshop->name), "", $navigation, "", "", true, "", navmenu($course, $cm)); + +print_heading(format_string($workshop->name)); + +$mform->display(); + +print_footer($course); diff --git a/mod/workshop/submission_form.php b/mod/workshop/submission_form.php new file mode 100644 index 0000000000..8991652d5e --- /dev/null +++ b/mod/workshop/submission_form.php @@ -0,0 +1,70 @@ +. + + +/** + * Submit an assignment or edit the already submitted work + * + * @package mod-workshop + * @copyright 2009 David Mudrak + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + */ + +defined('MOODLE_INTERNAL') || die(); + +require_once ($CFG->dirroot.'/lib/formslib.php'); + +class workshop_submission_form extends moodleform { + + function definition() { + + $mform = $this->_form; + + $current = $this->_customdata['current']; + $workshop = $this->_customdata['workshop']; + $cm = $this->_customdata['cm']; + $dataoptions = $this->_customdata['dataoptions']; + $attachmentoptions = $this->_customdata['attachmentoptions']; + + $mform->addElement('header', 'general', get_string('submission', 'workshop')); + + $mform->addElement('text', 'title', get_string('submissiontitle', 'workshop')); + $mform->setType('title', PARAM_TEXT); + $mform->addRule('title', null, 'required', null, 'client'); + + $mform->addElement('editor', 'data_editor', get_string('submissiondata', 'workshop'), null, $dataoptions); + $mform->setType('data_editor', PARAM_RAW); + + $mform->addElement('filemanager', 'attachment_filemanager', get_string('submissionattachment', 'workshop'), + null, $attachmentoptions); + + $mform->addElement('hidden', 'id'); + $mform->addElement('hidden', 'cmid'); + + $this->add_action_buttons(); + + $this->set_data($current); + } + + + function validation($data, $files) { + global $CFG, $USER, $DB; + + $errors = parent::validation($data, $files); + return $errors; + } +} diff --git a/mod/workshop/view.php b/mod/workshop/view.php index 7f7c79799f..4638e27fe2 100644 --- a/mod/workshop/view.php +++ b/mod/workshop/view.php @@ -82,7 +82,9 @@ print_header_simple(format_string($workshop->name), '', $navigation, '', '', tru /// Print the main part of the page -echo "id}\">Edit grading form"; +echo "id}\">Edit grading form"; +echo " | "; +echo "id}\">My submission"; /// Finish the page print_footer($course); -- 2.39.5