$canviewallassessments = has_capability('mod/workshop:viewallassessments', $workshop->context);
$canviewallsubmissions = has_capability('mod/workshop:viewallsubmissions', $workshop->context);
+$canoverridegrades = has_capability('mod/workshop:overridegrades', $workshop->context);
$isreviewer = ($USER->id == $assessment->reviewerid);
$isauthor = ($USER->id == $submission->authorid);
// only the reviewer is allowed to modify the assessment
if ($isreviewer and $workshop->assessing_allowed()) {
- $editable = true;
+ $assessmenteditable = true;
} else {
- $editable = false;
+ $assessmenteditable = false;
}
// load the grading strategy logic
$strategy = $workshop->grading_strategy_instance();
// load the assessment form
-$mform = $strategy->get_assessment_form($PAGE->url, 'assessment', $assessment, $editable);
+$mform = $strategy->get_assessment_form($PAGE->url, 'assessment', $assessment, $assessmenteditable);
if ($mform->is_cancelled()) {
redirect($workshop->view_url());
-} elseif ($editable and ($data = $mform->get_data())) {
+} elseif ($assessmenteditable and ($data = $mform->get_data())) {
$rawgrade = $strategy->save_assessment($assessment, $data);
if (!is_null($rawgrade) and isset($data->saveandclose)) {
redirect($workshop->view_url());
}
}
+// load the form to override gradinggrade
+if ($canoverridegrades) {
+ $feedbackform = $workshop->get_feedbackreviewer_form($PAGE->url, $assessment, $canoverridegrades);
+ if ($data = $feedbackform->get_data()) {
+ print_object($data); die(); // DONOTCOMMIT
+ // todo
+ redirect($PAGE->url);
+ }
+}
+
// output starts here
echo $OUTPUT->header();
-echo $OUTPUT->heading(get_string('assessmentform', 'workshop'), 2);
+echo $OUTPUT->heading(get_string('assessedsubmission', 'workshop'), 2);
$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, has_capability('mod/workshop:viewauthornames', $workshop->context));
+if ($isreviewer) {
+ echo $OUTPUT->heading(get_string('assessmentbyyourself', 'workshop'), 2);
+} elseif (has_capability('mod/workshop:viewreviewernames', $workshop->context)) {
+ $assessment = $workshop->get_assessment_by_id($assessment->id); // extend the current record with user details
+ $reviewer = new stdClass();
+ $reviewer->firstname = $assessment->reviewerfirstname;
+ $reviewer->lastname = $assessment->reviewerlastname;
+ echo $OUTPUT->heading(get_string('assessmentbyknown', 'workshop', fullname($reviewer)), 2);
+} else {
+ echo $OUTPUT->heading(get_string('assessmentbyunknown', 'workshop'), 2);
+}
$mform->display();
-echo $OUTPUT->footer();
+
+if ($canoverridegrades) {
+ $feedbackform->display();
+ echo $OUTPUT->footer();
+}
<?xml version="1.0" encoding="UTF-8" ?>
-<XMLDB PATH="mod/workshop/db" VERSION="20091015" COMMENT="XMLDB file for Moodle mod/workshop"
+<XMLDB PATH="mod/workshop/db" VERSION="20091022" COMMENT="XMLDB file for Moodle mod/workshop"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="../../../lib/xmldb/xmldb.xsd"
>
<FIELD NAME="attachment" TYPE="int" LENGTH="2" NOTNULL="false" UNSIGNED="true" DEFAULT="0" SEQUENCE="false" COMMENT="Used by File API file_postupdate_standard_filemanager" PREVIOUS="contenttrust" NEXT="grade"/>
<FIELD NAME="grade" TYPE="number" LENGTH="10" NOTNULL="false" UNSIGNED="true" SEQUENCE="false" DECIMALS="5" COMMENT="Aggregated grade for the submission. The grade is a decimal number from interval 0..100. If NULL then the grade for submission has not been aggregated yet." PREVIOUS="attachment" NEXT="gradeover"/>
<FIELD NAME="gradeover" TYPE="number" LENGTH="10" NOTNULL="false" UNSIGNED="true" SEQUENCE="false" DECIMALS="5" COMMENT="Grade for the submission manually overridden by a teacher. Grade is always from interval 0..100. If NULL then the grade is not overriden." PREVIOUS="grade" NEXT="gradeoverby"/>
- <FIELD NAME="gradeoverby" TYPE="int" LENGTH="10" NOTNULL="false" UNSIGNED="true" SEQUENCE="false" COMMENT="The id of the user who has overridden the grade for submission." PREVIOUS="gradeover" NEXT="teachercomment"/>
- <FIELD NAME="teachercomment" TYPE="text" LENGTH="big" NOTNULL="false" SEQUENCE="false" COMMENT="Teacher comment for the submission, for example describing the reasons for the overriding" PREVIOUS="gradeoverby" NEXT="teachercommentformat"/>
- <FIELD NAME="teachercommentformat" TYPE="int" LENGTH="3" NOTNULL="false" UNSIGNED="true" DEFAULT="0" SEQUENCE="false" COMMENT="The format of the teachercomment field" PREVIOUS="teachercomment"/>
+ <FIELD NAME="gradeoverby" TYPE="int" LENGTH="10" NOTNULL="false" UNSIGNED="true" SEQUENCE="false" COMMENT="The id of the user who has overridden the grade for submission." PREVIOUS="gradeover" NEXT="feedbackauthor"/>
+ <FIELD NAME="feedbackauthor" TYPE="text" LENGTH="big" NOTNULL="false" SEQUENCE="false" COMMENT="Teacher comment/feedback for the author of the submission, for example describing the reasons for the grade overriding" PREVIOUS="gradeoverby" NEXT="feedbackauthorformat"/>
+ <FIELD NAME="feedbackauthorformat" TYPE="int" LENGTH="3" NOTNULL="false" UNSIGNED="true" DEFAULT="0" SEQUENCE="false" PREVIOUS="feedbackauthor"/>
</FIELDS>
<KEYS>
<KEY NAME="primary" TYPE="primary" FIELDS="id" NEXT="workshop_fk"/>
<FIELD NAME="grade" TYPE="number" LENGTH="10" NOTNULL="false" UNSIGNED="true" SEQUENCE="false" DECIMALS="5" COMMENT="The aggregated grade for submission suggested by the reviewer. The grade 0..100 is computed from the values assigned to the assessment dimensions fields. If NULL then it has not been aggregated yet." PREVIOUS="timeagreed" NEXT="gradinggrade"/>
<FIELD NAME="gradinggrade" TYPE="number" LENGTH="10" NOTNULL="false" UNSIGNED="true" SEQUENCE="false" DECIMALS="5" COMMENT="The computed grade 0..100 for this assessment. If NULL then it has not been computed yet." PREVIOUS="grade" NEXT="gradinggradeover"/>
<FIELD NAME="gradinggradeover" TYPE="number" LENGTH="10" NOTNULL="false" UNSIGNED="true" SEQUENCE="false" DECIMALS="5" COMMENT="Grade for the assessment manually overridden by a teacher. Grade is always from interval 0..100. If NULL then the grade is not overriden." PREVIOUS="gradinggrade" NEXT="gradinggradeoverby"/>
- <FIELD NAME="gradinggradeoverby" TYPE="int" LENGTH="10" NOTNULL="false" UNSIGNED="true" SEQUENCE="false" COMMENT="The id of the user who has overridden the grade for submission." PREVIOUS="gradinggradeover" NEXT="generalcomment"/>
- <FIELD NAME="generalcomment" TYPE="text" LENGTH="big" NOTNULL="false" SEQUENCE="false" COMMENT="Comment from the reviewer" PREVIOUS="gradinggradeoverby" NEXT="generalcommentformat"/>
- <FIELD NAME="generalcommentformat" TYPE="int" LENGTH="3" NOTNULL="false" UNSIGNED="true" DEFAULT="0" SEQUENCE="false" COMMENT="The format of generalcomment field" PREVIOUS="generalcomment" NEXT="teachercomment"/>
- <FIELD NAME="teachercomment" TYPE="text" LENGTH="big" NOTNULL="false" SEQUENCE="false" COMMENT="The comment from the teacher. For example the reason why the grade for assessment was overridden" PREVIOUS="generalcommentformat" NEXT="teachercommentformat"/>
- <FIELD NAME="teachercommentformat" TYPE="int" LENGTH="3" NOTNULL="false" UNSIGNED="true" DEFAULT="0" SEQUENCE="false" COMMENT="The format of teachercomment field" PREVIOUS="teachercomment"/>
+ <FIELD NAME="gradinggradeoverby" TYPE="int" LENGTH="10" NOTNULL="false" UNSIGNED="true" SEQUENCE="false" COMMENT="The id of the user who has overridden the grade for submission." PREVIOUS="gradinggradeover" NEXT="feedbackauthor"/>
+ <FIELD NAME="feedbackauthor" TYPE="text" LENGTH="big" NOTNULL="false" SEQUENCE="false" COMMENT="The comment/feedback from the reviewer for the author." PREVIOUS="gradinggradeoverby" NEXT="feedbackauthorformat"/>
+ <FIELD NAME="feedbackauthorformat" TYPE="int" LENGTH="3" NOTNULL="false" UNSIGNED="true" DEFAULT="0" SEQUENCE="false" PREVIOUS="feedbackauthor" NEXT="feedbackreviewer"/>
+ <FIELD NAME="feedbackreviewer" TYPE="text" LENGTH="big" NOTNULL="false" SEQUENCE="false" COMMENT="The comment/feedback from the teacher for the reviewer. For example the reason why the grade for assessment was overridden" PREVIOUS="feedbackauthorformat" NEXT="feedbackreviewerformat"/>
+ <FIELD NAME="feedbackreviewerformat" TYPE="int" LENGTH="3" NOTNULL="false" UNSIGNED="true" DEFAULT="0" SEQUENCE="false" PREVIOUS="feedbackreviewer"/>
</FIELDS>
<KEYS>
<KEY NAME="primary" TYPE="primary" FIELDS="id" NEXT="submission_fk"/>
$string[''] = '';
$string[''] = '';
$string[''] = '';
-$string[''] = '';
-$string[''] = '';
-$string[''] = '';
+$string['assessmentbyyourself'] = 'Assessment by yourself';
+$string['assessmentbyunknown'] = 'Assessment';
+$string['assessmentbyknown'] = 'Assessment by $a';
+$string['assessedsubmission'] = 'Assessed submission';
$string['accesscontrol'] = 'Access control';
$string['aggregategrades'] = 'Re-calculate grades';
$string['aggregation'] = 'Grades aggregation';
$rs->close();
}
+ /**
+ * TODO: short description.
+ *
+ * @param array $actionurl
+ * @return TODO
+ */
+ public function get_feedbackreviewer_form(moodle_url $actionurl, stdClass $assessment, $editable) {
+ global $CFG;
+ require_once(dirname(__FILE__) . '/feedbackreviewer_form.php');
+
+ return new workshop_feedbackreviewer_form($actionurl,
+ array('workshop' => $this, 'current' => $assessment, 'feedbackopts' => array()),
+ 'post', '', null, $editable);
+ }
+
////////////////////////////////////////////////////////////////////////////
// Helper methods //
////////////////////////////////////////////////////////////////////////////
/* Rubric - grid layout */
+.mod-workshop .mform.frozen #rubric-grid-wrapper,
.mod-workshop .assessmentform.rubric #rubric-grid-wrapper {
border: none;
}
+.mod-workshop .mform.frozen #rubric-grid-wrapper legend,
.mod-workshop .assessmentform.rubric #rubric-grid-wrapper legend {
display: none;
}
+.mod-workshop .mform.frozen #rubric-grid-wrapper th,
+.mod-workshop .mform.frozen #rubric-grid-wrapper td,
.mod-workshop .assessmentform.rubric.grid th,
.mod-workshop .assessmentform.rubric.grid td {
border: 1px solid #ddd;
vertical-align: top;
}
+.mod-workshop .mform.frozen #rubric-grid-wrapper,
.mod-workshop .assessmentform.rubric.grid .criterion {
text-align: center;
}
text-align: center;
}
+.mod-workshop .mform.frozen #rubric-grid-wrapper .fitem .fitemtitle,
.mod-workshop .assessmentform.rubric.grid .fitem .fitemtitle {
display: none;
}
+.mod-workshop .mform.frozen #rubric-grid-wrapper .fitem .felement,
.mod-workshop .assessmentform.rubric.grid .fitem .felement {
width: 100%;
margin-left: auto;
margin-right: auto;
}
+.mod-workshop .mform.frozen #rubric-grid-wrapper .fitem .felement {
+ border: none;
+}
+
.mod-workshop .assessmentform.rubric.grid .fitem .felement span {
display: block;
text-align: center;