From: David Mudrak Date: Mon, 4 Jan 2010 18:23:22 +0000 (+0000) Subject: MDL-20058 workshop allows override grade for submission X-Git-Url: http://git.mjollnir.org/gw?a=commitdiff_plain;h=557a11009e65cf346964200804ceb66e60d4d396;p=moodle.git MDL-20058 workshop allows override grade for submission --- diff --git a/mod/workshop/feedbackauthor_form.php b/mod/workshop/feedbackauthor_form.php new file mode 100644 index 0000000000..ab711b55a7 --- /dev/null +++ b/mod/workshop/feedbackauthor_form.php @@ -0,0 +1,65 @@ +. + +/** + * A form used by teachers to give feedback to authors on their submission + * + * @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_feedbackauthor_form extends moodleform { + + function definition() { + $mform = $this->_form; + + $current = $this->_customdata['current']; + $workshop = $this->_customdata['workshop']; + $opts = $this->_customdata['feedbackopts']; + + $mform->addElement('header', 'feedbackauthorform', get_string('feedbackauthor', 'workshop')); + + $mform->addElement('static', 'grade', get_string('gradecalculated', 'workshop')); + + $grades = array('' => get_string('notoverridden', 'workshop')); + for ($i = (int)$workshop->grade; $i >= 0; $i--) { + $grades[$i] = $i; + } + $mform->addElement('select', 'gradeover', get_string('gradeover', 'workshop'), $grades); + + $mform->addElement('editor', 'feedbackauthor_editor', get_string('feedbackauthor', 'workshop'), null, $opts); + $mform->setType('feedbackauthor_editor', PARAM_RAW); + + $mform->addElement('hidden', 'submissionid'); + + $mform->addElement('submit', 'save', get_string('saveandclose', 'workshop')); + + $this->set_data($current); + } + + function validation($data, $files) { + global $CFG, $USER, $DB; + + $errors = parent::validation($data, $files); + return $errors; + } +} diff --git a/mod/workshop/lang/en_utf8/workshop.php b/mod/workshop/lang/en_utf8/workshop.php index f5bea340b8..aec261240f 100644 --- a/mod/workshop/lang/en_utf8/workshop.php +++ b/mod/workshop/lang/en_utf8/workshop.php @@ -82,15 +82,18 @@ $string['examplesbeforeassessment'] = 'Examples are available after own submissi $string['examplesbeforesubmission'] = 'Examples must be assessed before own submission'; $string['examplesmode'] = 'Mode of examples assessment'; $string['examplesvoluntary'] = 'Assessment of example submission is voluntary'; +$string['feedbackauthor'] = 'Feedback for the author'; $string['feedbackreviewer'] = 'Feedback for the reviewer'; $string['formataggregatedgrade'] = '$a->grade'; $string['formataggregatedgradeover'] = '$a->grade
$a->over'; $string['formatpeergrade'] = '$a->grade ($a->gradinggrade)'; $string['formatpeergradeover'] = '$a->grade ($a->gradinggrade / $a->gradinggradeover)'; -$string['givengradestatus'] = 'Status: $a'; $string['givengrades'] = 'Given grades'; +$string['givengradestatus'] = 'Status: $a'; +$string['gradecalculated'] = 'Calculated grade for submission'; $string['gradedecimals'] = 'Decimal places in grades'; $string['gradegivento'] = ' > '; +$string['gradeover'] = 'Override grade for submission'; $string['gradereceivedfrom'] = ' < '; $string['gradinggradecalculated'] = 'Calculated grade for assessment'; $string['gradinggrade'] = 'Grade for assessment'; diff --git a/mod/workshop/locallib.php b/mod/workshop/locallib.php index 4984c93245..e5fff4b2ac 100644 --- a/mod/workshop/locallib.php +++ b/mod/workshop/locallib.php @@ -1239,7 +1239,7 @@ class workshop { */ public function real_grade_value($value, $max) { $localized = true; - if (is_null($value)) { + if (is_null($value) or $value === '') { return null; } elseif ($max == 0) { return 0; @@ -1258,7 +1258,7 @@ class workshop { * @return float suitable to be stored as numeric(10,5) */ public function raw_grade_value($value, $max) { - if (is_null($value)) { + if (is_null($value) or $value === '') { return null; } if ($max == 0 or $value < 0) { @@ -1278,7 +1278,7 @@ class workshop { * @return string */ public function format_total_grade($raw) { - if (is_null($raw)) { + if (is_null($raw) or $raw === '') { return null; } return format_float($raw, $this->gradedecimals, true); @@ -1491,10 +1491,10 @@ class workshop { $current = new stdClass(); $current->submissionid = $submission->id; - $current->grade = $this->real_grade($assessment->grade); - $current->gradeover = $this->real_grade($assessment->gradeover); - $current->feedbackauthor = $assessment->feedbackreviewer; - $current->feedbackauthorformat = $assessment->feedbackreviewerformat; + $current->grade = $this->real_grade($submission->grade); + $current->gradeover = $this->real_grade($submission->gradeover); + $current->feedbackauthor = $submission->feedbackauthor; + $current->feedbackauthorformat = $submission->feedbackauthorformat; if (is_null($current->grade)) { $current->grade = get_string('nullgrade', 'workshop'); } diff --git a/mod/workshop/submission.php b/mod/workshop/submission.php index 2957235c9d..d1449bff25 100644 --- a/mod/workshop/submission.php +++ b/mod/workshop/submission.php @@ -93,6 +93,7 @@ if ($edit and $ownsubmission) { $formdata->example = 0; // todo add examples support $formdata->authorid = $USER->id; $formdata->timecreated = $timenow; + $formdata->feedbackauthorformat = FORMAT_HTML; // todo better default } $formdata->timemodified = $timenow; $formdata->title = trim($formdata->title); @@ -114,6 +115,22 @@ if ($edit and $ownsubmission) { } } +// load the form to override gradinggrade and process the submitted data eventually +if (!$edit and $canoverride) { + $feedbackform = $workshop->get_feedbackauthor_form($PAGE->url, $submission); + if ($data = $feedbackform->get_data()) { + $data = file_postupdate_standard_editor($data, 'feedbackauthor', array(), $workshop->context); + $record = new stdClass(); + $record->id = $submission->id; + $record->gradeover = $workshop->raw_grade_value($data->gradeover, $workshop->grade); + $record->gradeoverby = $USER->id; + $record->feedbackauthor = $data->feedbackauthor; + $record->feedbackauthorformat = $data->feedbackauthorformat; + $DB->update_record('workshop_submissions', $record); + redirect($workshop->view_url()); + } +} + $PAGE->set_title($workshop->name); $PAGE->set_heading($course->fullname); if ($edit) { @@ -184,4 +201,9 @@ if ($canviewallassessments) { $strategy = $workshop->grading_strategy_instance(); } +if (!$edit and $canoverride) { + // display a form to override the submission grade + $feedbackform->display(); +} + echo $OUTPUT->footer();