From 51508f2591abb638c04a77d0b55c84ddedccb084 Mon Sep 17 00:00:00 2001 From: David Mudrak Date: Mon, 4 Jan 2010 18:01:50 +0000 Subject: [PATCH] Go workshop, go! --- mod/workshop/allocation.php | 8 ++--- mod/workshop/allocation/manual/renderer.php | 12 ++++--- mod/workshop/lang/en_utf8/workshop.php | 1 - mod/workshop/locallib.php | 19 +++++++++++ mod/workshop/submission.php | 35 ++++++++++++++------- mod/workshop/switchphase.php | 4 +-- mod/workshop/tabs.php | 2 +- mod/workshop/view.php | 7 +++++ 8 files changed, 64 insertions(+), 24 deletions(-) diff --git a/mod/workshop/allocation.php b/mod/workshop/allocation.php index e476637705..6fcfb748f2 100644 --- a/mod/workshop/allocation.php +++ b/mod/workshop/allocation.php @@ -30,16 +30,16 @@ require_once(dirname(dirname(dirname(__FILE__))).'/config.php'); require_once(dirname(__FILE__).'/locallib.php'); require_once(dirname(__FILE__).'/allocation/lib.php'); -$cmid = required_param('cmid', PARAM_INT); // course module -$method = optional_param('method', 'manual', PARAM_ALPHA); // method to use - -$PAGE->set_url('mod/workshop/allocation.php', array('cmid' => $cmid, 'method' => $method)); +$cmid = required_param('cmid', PARAM_INT); // course module +$method = optional_param('method', 'manual', PARAM_ALPHA); // method to use $cm = get_coursemodule_from_id('workshop', $cmid, 0, false, MUST_EXIST); $course = $DB->get_record('course', array('id' => $cm->course), '*', MUST_EXIST); $workshop = $DB->get_record('workshop', array('id' => $cm->instance), '*', MUST_EXIST); $workshop = new workshop($workshop, $cm, $course); +$PAGE->set_url(new moodle_url($workshop->allocation_url(), array('cmid' => $cmid, 'method' => $method))); + require_login($course, false, $cm); $context = $PAGE->context; require_capability('mod/workshop:allocate', $context); diff --git a/mod/workshop/allocation/manual/renderer.php b/mod/workshop/allocation/manual/renderer.php index a7b2ec6d7e..645f53dae6 100644 --- a/mod/workshop/allocation/manual/renderer.php +++ b/mod/workshop/allocation/manual/renderer.php @@ -76,7 +76,7 @@ class moodle_workshopallocation_manual_renderer extends moodle_renderer_base { foreach ($peers as $user) { $row = array(); $row[] = $this->reviewers_of_participant($user, $workshop, $peers); - $row[] = $this->participant($user); + $row[] = $this->participant($user, $workshop); $row[] = $this->reviewees_of_participant($user, $workshop, $peers); $thisrowclasses = array(); if ($user->id == $hlauthorid) { @@ -96,17 +96,21 @@ class moodle_workshopallocation_manual_renderer extends moodle_renderer_base { * Returns information about the workshop participant * * @param stdClass $user participant data + * @param workshop API * @return string HTML code */ - protected function participant(stdClass $user) { + protected function participant(stdClass $user, workshop $workshop) { $o = $this->output->user_picture($user, $this->page->course->id); $o .= fullname($user); $o .= $this->output->container_start(array('submission')); if (is_null($user->submissionid)) { $o .= $this->output->output_tag('span', array('class' => 'info'), get_string('nosubmissionfound', 'workshop')); } else { - $submlink = $this->output->output_tag('a', array('href' => '#'), s($user->submissiontitle)); // todo link - $o .= $this->output->container($submlink, array('title')); + $submlink = new html_link(); + $submlink->url = new moodle_url($workshop->submission_url(), array('id' => $user->submissionid)); + $submlink->text = format_string($user->submissiontitle); + $submlink->set_classes('title'); + $o .= $this->output->link($submlink); if (is_null($user->submissiongrade)) { $o .= $this->output->container(get_string('nogradeyet', 'workshop'), array('grade', 'missing')); } else { diff --git a/mod/workshop/lang/en_utf8/workshop.php b/mod/workshop/lang/en_utf8/workshop.php index 2e41d8259d..2cfd32964b 100644 --- a/mod/workshop/lang/en_utf8/workshop.php +++ b/mod/workshop/lang/en_utf8/workshop.php @@ -94,7 +94,6 @@ $string['maxbytes'] = 'Maximum file size'; $string['messageclose'] = '(hide)'; $string['modulenameplural'] = 'Workshops'; $string['modulename'] = 'Workshop'; -$string['mysubmission'] = 'My submission'; $string['nattachments'] = 'Maximum number of submission attachments'; $string['nexassessments'] = 'Number of required assessments of examples'; $string['nogradeyet'] = 'No grade yet'; diff --git a/mod/workshop/locallib.php b/mod/workshop/locallib.php index a2ba6f583a..eaae461537 100644 --- a/mod/workshop/locallib.php +++ b/mod/workshop/locallib.php @@ -261,6 +261,25 @@ class workshop { return $DB->get_recordset_sql($sql, $params); } + /** + * Returns a submission record with the author's data + * + * @param int $id submission id + * @return stdClass + */ + public function get_submission_by_id($id) { + global $DB; + + $sql = 'SELECT s.*, + u.lastname AS authorlastname, u.firstname AS authorfirstname, u.id AS authorid, + u.picture AS authorpicture, u.imagealt AS authorimagealt + FROM {workshop_submissions} s + INNER JOIN {user} u ON (s.userid = u.id) + WHERE s.workshopid = :workshopid AND s.id = :id'; + $params = array('workshopid' => $this->id, 'id' => $id); + return $DB->get_record_sql($sql, $params, MUST_EXIST); + } + /** * Returns a submission submitted by the given author or authors. * diff --git a/mod/workshop/submission.php b/mod/workshop/submission.php index 76cf537b51..29515e1b7d 100644 --- a/mod/workshop/submission.php +++ b/mod/workshop/submission.php @@ -16,7 +16,7 @@ // along with Moodle. If not, see . /** - * Submit own assignment or edit the already submitted own work + * View a single (usually the own) submission, submit own work. * * @package mod-workshop * @copyright 2009 David Mudrak @@ -36,16 +36,17 @@ $cm = get_coursemodule_from_id('workshop', $cmid, 0, false, MUST_EXIST); $course = $DB->get_record('course', array('id' => $cm->course), '*', MUST_EXIST); require_login($course, false, $cm); -require_capability('mod/workshop:submit', $PAGE->context); if (isguestuser()) { print_error('guestsarenotallowed'); } -$workshop = $DB->get_record('workshop', array('id' => $cm->instance), '*', MUST_EXIST); -$workshop = new workshop($workshop, $cm, $course); +$workshop = $DB->get_record('workshop', array('id' => $cm->instance), '*', MUST_EXIST); +$workshop = new workshop($workshop, $cm, $course); + +$PAGE->set_url(new moodle_url($workshop->submission_url(), array('cmid' => $cmid, 'id' => $id, 'edit' => $edit))); if ($id) { // submission is specified - $submission = $DB->get_record('workshop_submissions', array('id' => $id, 'workshopid' => $workshop->id), '*', MUST_EXIST); + $submission = $workshop->get_submission_by_id($id); } else { // no submission specified if (!$submission = $workshop->get_submission_by_author($USER->id)) { $submission = new stdClass(); @@ -54,8 +55,15 @@ if ($id) { // submission is specified } } -if ($submission->userid !== $USER->id) { - print_error('nopermissiontoviewpage', 'error', $workshop->view_url()); +$ownsubmission = $submission->userid == $USER->id; +$canviewall = has_capability('mod/workshop:viewallsubmissions', $PAGE->context); +$cansubmit = has_capability('mod/workshop:submit', $PAGE->context); + +if (!$ownsubmission and !$canviewall) { + print_error('nopermissions'); +} +if ($ownsubmission and !$cansubmit) { + print_error('nopermissions'); } $maxfiles = $workshop->nattachments; @@ -72,7 +80,7 @@ $mform = new workshop_submission_form(null, array('current' => $submiss if ($mform->is_cancelled()) { redirect($workshop->view_url()); -} elseif ($formdata = $mform->get_data()) { +} elseif ($cansubmit and $formdata = $mform->get_data()) { $timenow = time(); if (empty($formdata->id)) { $formdata->workshopid = $workshop->id; @@ -99,21 +107,24 @@ if ($mform->is_cancelled()) { redirect($workshop->view_url()); } -$PAGE->set_url('mod/workshop/submission.php', array('cmid' => $cm->id)); $PAGE->set_title($workshop->name); $PAGE->set_heading($course->fullname); if ($edit) { $PAGE->navbar->add(get_string('mysubmission', 'workshop'), $workshop->submission_url(), navigation_node::TYPE_CUSTOM); $PAGE->navbar->add(get_string('editingsubmission', 'workshop')); -} else { +} elseif ($ownsubmission) { $PAGE->navbar->add(get_string('mysubmission', 'workshop')); +} else { + $PAGE->navbar->add(get_string('submission', 'workshop')); } // Output starts here echo $OUTPUT->header(); +$currenttab = 'submission'; +include(dirname(__FILE__) . '/tabs.php'); echo $OUTPUT->heading(format_string($workshop->name), 2); -if ($edit) { +if ($edit and $ownsubmission) { $mform->display(); echo $OUTPUT->footer(); die(); @@ -124,7 +135,7 @@ if (!empty($submission->id)) { echo $wsoutput->submission_full($submission, true); } -if ($workshop->submitting_allowed()) { +if ($ownsubmission and $workshop->submitting_allowed()) { $editbutton = new html_form(); $editbutton->method = 'get'; $editbutton->button->text = get_string('editsubmission', 'workshop'); diff --git a/mod/workshop/switchphase.php b/mod/workshop/switchphase.php index 199b05545f..4c4147ff68 100644 --- a/mod/workshop/switchphase.php +++ b/mod/workshop/switchphase.php @@ -30,13 +30,13 @@ $cmid = required_param('cmid', PARAM_INT); // course module $phase = required_param('phase', PARAM_INT); // the code of the new page $confirm = optional_param('confirm', false, PARAM_BOOL); // confirmation -$PAGE->set_url('mod/workshop/switchphase.php', array('cmid' => $cmid, 'phase' => $phase)); - $cm = get_coursemodule_from_id('workshop', $cmid, 0, false, MUST_EXIST); $course = $DB->get_record('course', array('id' => $cm->course), '*', MUST_EXIST); $workshop = $DB->get_record('workshop', array('id' => $cm->instance), '*', MUST_EXIST); $workshop = new workshop($workshop, $cm, $course); +$PAGE->set_url(new moodle_url($workshop->switchphase_user(), array('cmid' => $cmid, 'phase' => $phase)); + require_login($course, false, $cm); require_capability('mod/workshop:switchphase', $PAGE->context); diff --git a/mod/workshop/tabs.php b/mod/workshop/tabs.php index b423adae4d..22b6268ccb 100644 --- a/mod/workshop/tabs.php +++ b/mod/workshop/tabs.php @@ -47,7 +47,7 @@ if (has_capability('mod/workshop:editdimensions', $workshop->context)) { $row[] = new tabobject('editform', $workshop->editform_url()->out(), get_string('editassessmentform', 'workshop')); } if (has_capability('mod/workshop:submit', $workshop->context)) { - $row[] = new tabobject('submission', $workshop->submission_url()->out(), get_string('mysubmission', 'workshop')); + $row[] = new tabobject('submission', $workshop->submission_url()->out(), get_string('submission', 'workshop')); } if (has_capability('mod/workshop:allocate', $workshop->context)) { $row[] = new tabobject('allocation', $workshop->allocation_url()->out(), get_string('allocate', 'workshop')); diff --git a/mod/workshop/view.php b/mod/workshop/view.php index 97666c047a..b145632deb 100644 --- a/mod/workshop/view.php +++ b/mod/workshop/view.php @@ -89,6 +89,13 @@ case workshop::PHASE_SUBMISSION: if ($submission = $workshop->get_submission_by_author($USER->id)) { echo $OUTPUT->box_start('generalbox mysubmission'); echo $wsoutput->submission_summary($submission, true); + if ($workshop->submitting_allowed()) { + $editbutton = new html_form(); + $editbutton->method = 'get'; + $editbutton->button->text = get_string('editsubmission', 'workshop'); + $editbutton->url = new moodle_url($PAGE->url, array('edit' => 'on', 'id' => $submission->id)); + echo $OUTPUT->button($editbutton); + } echo $OUTPUT->box_end(); } } -- 2.39.5