From ddb59c778f8a3b6948fb04e9765c9a27c87afaf9 Mon Sep 17 00:00:00 2001 From: David Mudrak Date: Mon, 4 Jan 2010 18:02:16 +0000 Subject: [PATCH] Displays all assigned submissions to be reviewed and saves the calculated grade --- mod/workshop/assessment.php | 7 ++-- .../grading/accumulative/strategy.php | 2 +- mod/workshop/lang/en_utf8/workshop.php | 10 ++--- mod/workshop/locallib.php | 30 +++++++++++-- mod/workshop/renderer.php | 5 ++- mod/workshop/styles.php | 8 ++++ mod/workshop/view.php | 42 ++++++++++++++++--- 7 files changed, 83 insertions(+), 21 deletions(-) diff --git a/mod/workshop/assessment.php b/mod/workshop/assessment.php index 246f20547e..2716750dd0 100644 --- a/mod/workshop/assessment.php +++ b/mod/workshop/assessment.php @@ -93,7 +93,6 @@ if ($mform->is_cancelled()) { $rawgrade = $strategy->save_assessment($assessment, $data); if (!is_null($rawgrade) and isset($data->saveandclose)) { echo $OUTPUT->header(); - include(dirname(__FILE__) . '/tabs.php'); echo $OUTPUT->heading(get_string('assessmentresult', 'workshop'), 2); echo $OUTPUT->box('Given grade: ' . sprintf("%01.2f", $rawgrade * 100) . ' %'); // todo more detailed info using own renderer echo $OUTPUT->continue_button($workshop->view_url()); @@ -109,7 +108,6 @@ if ($mform->is_cancelled()) { // Output starts here echo $OUTPUT->header(); -include(dirname(__FILE__) . '/tabs.php'); echo $OUTPUT->heading(get_string('assessmentform', 'workshop'), 2); if ('assessment' === $mode) { @@ -120,8 +118,9 @@ if ('assessment' === $mode) { $showname = false; $author = null; } - $wsoutput = $PAGE->theme->get_renderer('mod_workshop', $PAGE); // workshop renderer - echo $wsoutput->submission_full($submission, $showname, $author); + $wsoutput = $PAGE->theme->get_renderer('mod_workshop', $PAGE); // workshop renderer + $submission = $workshop->get_submission_by_id($submission->id); // reload so can be passed to the renderer + echo $wsoutput->submission_full($submission, $showname); } $mform->display(); diff --git a/mod/workshop/grading/accumulative/strategy.php b/mod/workshop/grading/accumulative/strategy.php index 6b750e6df2..d85aafede7 100644 --- a/mod/workshop/grading/accumulative/strategy.php +++ b/mod/workshop/grading/accumulative/strategy.php @@ -381,7 +381,7 @@ class workshop_accumulative_strategy implements workshop_strategy { $grades = $this->get_current_assessment_data($assessment); $suggested = $this->calculate_peer_grade($grades); if (!is_null($suggested)) { - // todo save into workshop_assessments + $this->workshop->set_peer_grade($assessment->id, $suggested); } return $suggested; } diff --git a/mod/workshop/lang/en_utf8/workshop.php b/mod/workshop/lang/en_utf8/workshop.php index 94e1cc7837..15f2f12f2d 100644 --- a/mod/workshop/lang/en_utf8/workshop.php +++ b/mod/workshop/lang/en_utf8/workshop.php @@ -28,11 +28,11 @@ defined('MOODLE_INTERNAL') || die(); $string[''] = ''; $string[''] = ''; $string[''] = ''; -$string[''] = ''; -$string[''] = ''; -$string[''] = ''; -$string[''] = ''; -$string[''] = ''; +$string['assignedassessmentsnone'] = 'You have no assigned submission to assess'; +$string['reassess'] = 'Re-assess'; +$string['assess'] = 'Assess'; +$string['assignedassessments'] = 'Assigned submissions to assess'; +$string['givengrade'] = 'Given grade: $a'; $string['someuserswosubmission'] = 'There are some users who have not submitted yet'; $string['accesscontrol'] = 'Access control'; $string['agreeassessments'] = 'Assessments must be agreed'; diff --git a/mod/workshop/locallib.php b/mod/workshop/locallib.php index cffdd7ba20..85feaba270 100644 --- a/mod/workshop/locallib.php +++ b/mod/workshop/locallib.php @@ -311,7 +311,7 @@ class workshop { a.grade, a.gradinggrade, a.gradinggradeover, a.gradinggradeoverby, reviewer.id AS reviewerid,reviewer.firstname AS reviewerfirstname,reviewer.lastname as reviewerlastname, s.title, - author.id AS authorid, author.firstname AS authorfirstname,author.lastname as authorlastname + author.id AS authorid, author.firstname AS authorfirstname,author.lastname AS authorlastname FROM {workshop_assessments} a INNER JOIN {user} reviewer ON (a.userid = reviewer.id) INNER JOIN {workshop_submissions} s ON (a.submissionid = s.id) @@ -356,9 +356,11 @@ class workshop { global $DB; $sql = 'SELECT a.*, - reviewer.id AS reviewerid,reviewer.firstname AS reviewerfirstname,reviewer.lastname as reviewerlastname, - s.title, - author.id AS authorid, author.firstname AS authorfirstname,author.lastname as authorlastname + reviewer.id AS reviewerid,reviewer.firstname AS reviewerfirstname,reviewer.lastname AS reviewerlastname, + s.id AS submissionid, s.title AS submissiontitle, s.timecreated AS submissioncreated, + s.timemodified AS submissionmodified, + author.id AS authorid, author.firstname AS authorfirstname,author.lastname AS authorlastname, + author.picture AS authorpicture, author.imagealt AS authorimagealt FROM {workshop_assessments} a INNER JOIN {user} reviewer ON (a.userid = reviewer.id) INNER JOIN {workshop_submissions} s ON (a.submissionid = s.id) @@ -918,4 +920,24 @@ class workshop { $DB->set_field('workshop', 'phase', $newphase, array('id' => $this->id)); return true; } + + /** + * Saves a raw grade for submission as calculated from the assessment form fields + * + * @param array $assessmentid assessment record id, must exists + * @param mixed $grade raw percentual grade from 0 to 1 + * @return false|float the saved grade + */ + public function set_peer_grade($assessmentid, $grade) { + global $DB; + + if (is_null($grade)) { + return false; + } + $data = new stdClass(); + $data->id = $assessmentid; + $data->grade = $grade; + $DB->update_record('workshop_assessments', $data); + return $grade; + } } diff --git a/mod/workshop/renderer.php b/mod/workshop/renderer.php index ffd494dc77..d605dea9a1 100644 --- a/mod/workshop/renderer.php +++ b/mod/workshop/renderer.php @@ -114,6 +114,9 @@ class moodle_mod_workshop_renderer extends moodle_renderer_base { /** * Display a short summary of the submission * + * The passed submission object must define at least: id, title, timecreated, timemodified, + * authorid, authorfirstname, authorlastname, authorpicture and authorimagealt + * * @param stdClass $submission The submission record * @param bool $showauthorname Should the author name be displayed * @return string html to be echoed @@ -174,7 +177,7 @@ class moodle_mod_workshop_renderer extends moodle_renderer_base { * * By default, this looks similar to a forum post. * - * @param stdClass $submission The submission record + * @param stdClass $submission The submission data * @param bool $showauthorname Should the author name be displayed * @return string html to be echoed */ diff --git a/mod/workshop/styles.php b/mod/workshop/styles.php index 3100e54e1f..95d3644885 100644 --- a/mod/workshop/styles.php +++ b/mod/workshop/styles.php @@ -318,3 +318,11 @@ padding: 0px 10px 0px 25px; font-size: 80%; } + +/** + * Assessment + */ +.assessment-summary.graded { + background-color: #e7f1c3; +} + diff --git a/mod/workshop/view.php b/mod/workshop/view.php index 66ea6e73bd..0483d8c1a8 100644 --- a/mod/workshop/view.php +++ b/mod/workshop/view.php @@ -102,19 +102,49 @@ case workshop::PHASE_SUBMISSION: if (has_capability('mod/workshop:viewallsubmissions', $PAGE->context)) { $shownames = has_capability('mod/workshop:viewauthornames', $PAGE->context); echo $OUTPUT->box_start('generalbox allsubmissions'); - $counter = 0; - $submissions = $workshop->get_submissions('all', false); + if (! $submissions = $workshop->get_submissions('all', false)) { + echo $OUTPUT->container(get_string('nosubmissions', 'workshop'), 'nosubmissions'); + } foreach ($submissions as $submission) { - $counter++; echo $wsoutput->submission_summary($submission, $shownames); } - if ($counter == 0) { - echo $OUTPUT->container(get_string('nosubmissions', 'workshop'), 'nosubmissions'); - } echo $OUTPUT->box_end(); } break; case workshop::PHASE_ASSESSMENT: + if (! $assessments = $workshop->get_assessments_by_reviewer($USER->id)) { + echo $OUTPUT->heading(get_string('assignedassessmentsnone', 'workshop'), 3); + } else { + echo $OUTPUT->heading(get_string('assignedassessments', 'workshop'), 3); + $shownames = has_capability('mod/workshop:viewauthornames', $PAGE->context); + foreach ($assessments as $assessment) { + $submission = clone($assessment); + $submission->id = $submission->submissionid; + $submission->title = $submission->submissiontitle; + $submission->timecreated = $submission->submissioncreated; + $submission->timemodified = $submission->submissionmodified; + if (is_null($assessment->grade)) { + $class = ' notgraded'; + $givengrade = get_string('nogradeyet', 'workshop'); + $buttontext = get_string('assess', 'workshop'); + } else { + $class = ' graded'; + // todo format grade + $givengrade = $assessment->grade; + $buttontext = get_string('reassess', 'workshop'); + } + echo $OUTPUT->box_start('generalbox assessment-summary' . $class); + echo $wsoutput->submission_summary($submission, $shownames); + echo get_string('givengrade', 'workshop', $givengrade); + $button = new html_form(); + $button->method = 'get'; + $button->button->text = $buttontext; + $button->url = $workshop->assess_url($assessment->id); + echo $OUTPUT->button($button); + echo $OUTPUT->box_end(); + } + } + case workshop::PHASE_EVALUATION: case workshop::PHASE_CLOSED: default: -- 2.39.5