3 /*************************************************
14 editelements (teachers only)
15 gradeallassessments (teachers only)
16 gradeassessment (teachers only)
18 insertelements (for teachers)
19 listungradedstudentsubmissions (for teachers)
20 listungradedteachersubmissions (for teachers)
21 listteachersubmissions
22 regradestudentassessments (for teachers)
27 ************************************************/
29 require("../../config.php");
31 require("locallib.php");
33 $action = required_param('action', PARAM_ALPHA
);
34 $id = optional_param('id', 0, PARAM_INT
); // Course Module ID
35 $wid = optional_param('wid', 0, PARAM_INT
); // Workshop ID
36 $aid = optional_param('aid', 0, PARAM_INT
);
37 $userid = optional_param('userid', 0, PARAM_INT
);
38 $cid = optional_param('cid', 0, PARAM_INT
); // comment id
39 $sid = optional_param('sid', 0, PARAM_INT
); // submission id
40 $elementno = optional_param('elementno', -1, PARAM_INT
);
41 $stockcommentid = optional_param('stockcommentid', 0, PARAM_INT
);
43 // get some useful stuff...
45 if (! $cm = get_coursemodule_from_id('workshop', $id)) {
46 error("Course Module ID was incorrect");
48 if (! $workshop = get_record("workshop", "id", $cm->instance
)) {
49 error("Course module is incorrect");
52 if (! $workshop = get_record("workshop", "id", $wid)) {
53 error("Workshop id is incorrect");
55 if (! $cm = get_coursemodule_from_instance("workshop", $workshop->id
, $workshop->course
)) {
56 error("No coursemodule found");
61 if (! $course = get_record("course", "id", $cm->course
)) {
62 error("Course is misconfigured");
65 require_login($course->id
, false, $cm);
66 $context = get_context_instance(CONTEXT_MODULE
, $cm->id
);
68 $strworkshops = get_string("modulenameplural", "workshop");
69 $strworkshop = get_string("modulename", "workshop");
70 $strassessments = get_string("assessments", "workshop");
72 // ... print the header and...
73 $navigation = build_navigation($strassessments, $cm);
74 print_header_simple(format_string($workshop->name
), "", $navigation,
77 /*************** add comment to assessment (by author, assessor or teacher) ***************************/
78 if ($action == 'addcomment') {
80 print_heading_with_help(get_string("addacomment", "workshop"), "addingacomment", "workshop");
81 // get assessment record
82 if (!$assessmentid = $aid) { // comes from link or hidden form variable
83 error("Assessment id not given");
85 $assessment = get_record("workshop_assessments", "id", $assessmentid);
86 if (!$submission = get_record("workshop_submissions", "id", $assessment->submissionid
)) {
87 error("Submission not found");
90 <form id
="commentform" action
="assessments.php" method
="post">
91 <input type
="hidden" name
="action" value
="insertcomment" />
92 <input type
="hidden" name
="id" value
="<?php echo $cm->id ?>" />
93 <input type
="hidden" name
="aid" value
="<?php echo $aid ?>" />
94 <div
class="boxaligncenter">
95 <table cellpadding
="5" border
="1">
98 // now get the comment
99 echo "<tr valign=\"top\">\n";
101 echo " <td align=\"right\"><b>". get_string("comment", "workshop").":</b></td>\n";
105 echo " <textarea name=\"comments\" rows=\"5\" cols=\"75\">\n";
106 echo "</textarea>\n";
108 echo " </td></tr></table>\n";
109 echo "<input type=\"submit\" value=\"".get_string("savemycomment", "workshop")."\" />\n";
110 echo "</div></form>\n";
111 echo "<div style=\"text-align:center\"><b>".get_string("assessment", "workshop"). "</b></div>\n";
112 workshop_print_assessment($workshop, $assessment);
116 /*************** add stock comment (by teacher ) ***************************/
117 elseif ($action == 'addstockcomment') {
119 if (empty($aid) or ($elementno<0)) {
120 error("Workshop Assessment ID and/or Element Number missing");
123 require_capability('mod/workshop:manage', $context);
125 if (!$assessment = get_record("workshop_assessments", "id", $aid)) {
126 error("workshop assessment is misconfigured");
128 $form = data_submitted('nomatch'); //Nomatch because we can come from assess.php
130 // store the comment in the stock comments table
131 if ($elementno == 99) { // it's the general comment
132 $form->feedback_99
= $form->generalcomment
;
134 $comment->workshopid
= $workshop->id
;
135 $comment->elementno
= $elementno;
136 $comment->comments
= clean_param($form->{"feedback_$elementno"}, PARAM_CLEAN
);
137 if (!(trim($comment->comments
))) {
138 // no comment given - just redisplay assessment form
139 workshop_print_assessment($workshop, $assessment, true, true, $form->returnto
);
140 print_footer($course);
144 if (!$element->id
= insert_record("workshop_stockcomments", $comment)) {
145 error("Could not insert comment into comment bank");
148 // now upate the assessment (just the elements, the assessment itself is not updated)
150 // first get the assignment elements for maxscores and weights...
151 $elementsraw = get_records("workshop_elements", "workshopid", $workshop->id
, "elementno ASC");
152 if (count($elementsraw) < $workshop->nelements
) {
153 print_string("noteonassignmentelements", "workshop");
156 foreach ($elementsraw as $element) {
157 $elements[] = $element; // to renumber index 0,1,2...
164 // don't fiddle about, delete all the old and add the new!
165 delete_records("workshop_grades", "assessmentid", $assessment->id
);
168 //determine what kind of grading we have
169 switch ($workshop->gradingstrategy
) {
170 case 0: // no grading
171 // Insert all the elements that contain something
172 for ($i = 0; $i < $workshop->nelements
; $i++
) {
174 $element->workshopid
= $workshop->id
;
175 $element->assessmentid
= $assessment->id
;
176 $element->elementno
= $i;
177 $element->feedback
= clean_param($form->{"feedback_$i"}, PARAM_CLEAN
);
178 if (!$element->id
= insert_record("workshop_grades", $element)) {
179 error("Could not insert workshop grade!");
182 $grade = 0; // set to satisfy save to db
185 case 1: // accumulative grading
186 // Insert all the elements that contain something
187 foreach ($form->grade
as $key => $thegrade) {
189 $element->workshopid
= $workshop->id
;
190 $element->assessmentid
= $assessment->id
;
191 $element->elementno
= clean_param($key, PARAM_INT
);
192 $element->feedback
= clean_param($form->{"feedback_$key"}, PARAM_CLEAN
);
193 $element->grade
= $thegrade;
194 if (!$element->id
= insert_record("workshop_grades", $element)) {
195 error("Could not insert workshop grade!");
198 // now work out the grade...
201 foreach ($form->grade
as $key => $grade) {
202 $maxscore = $elements[$key]->maxscore
;
203 $weight = $WORKSHOP_EWEIGHTS[$elements[$key]->weight
];
205 $totalweight +
= $weight;
207 $rawgrade +
= ($grade / $maxscore) * $weight;
208 // echo "\$key, \$maxscore, \$weight, \$totalweight, \$grade, \$rawgrade : $key, $maxscore, $weight, $totalweight, $grade, $rawgrade<br />";
210 $grade = 100.0 * ($rawgrade / $totalweight);
213 case 2: // error banded graded
214 // Insert all the elements that contain something
216 for ($i =0; $i < $workshop->nelements
; $i++
) {
218 $element->workshopid
= $workshop->id
;
219 $element->assessmentid
= $assessment->id
;
220 $element->elementno
= $i;
221 $element->feedback
= clean_param($form->{"feedback_$i"}, PARAM_CLEAN
);
222 $element->grade
= $form->grade
[$i];
223 if (!$element->id
= insert_record("workshop_grades", $element)) {
224 error("Could not insert workshop grade!");
226 if (empty($form->grade
[$i])){
227 $error +
= $WORKSHOP_EWEIGHTS[$elements[$i]->weight
];
230 // now save the adjustment
232 $i = $workshop->nelements
;
233 $element->workshopid
= $workshop->id
;
234 $element->assessmentid
= $assessment->id
;
235 $element->elementno
= $i;
236 $element->grade
= $form->grade
[$i];
237 if (!$element->id
= insert_record("workshop_grades", $element)) {
238 error("Could not insert workshop grade!");
240 $grade = ($elements[intval($error +
0.5)]->maxscore +
$form->grade
[$i]) * 100 / $workshop->grade
;
244 } elseif ($grade > 100) {
247 echo "<b>".get_string("weightederrorcount", "workshop", intval($error +
0.5))."</b>\n";
250 case 3: // criteria grading
251 // save in the selected criteria value in element zero,
253 $element->workshopid
= $workshop->id
;
254 $element->assessmentid
= $assessment->id
;
255 $element->elementno
= 0;
256 $element->grade
= $form->grade
[0];
257 if (!$element->id
= insert_record("workshop_grades", $element)) {
258 error("Could not insert workshop grade!");
260 // now save the adjustment in element one
262 $element->workshopid
= $workshop->id
;
263 $element->assessmentid
= $assessment->id
;
264 $element->elementno
= 1;
265 $element->grade
= $form->grade
[1];
266 if (!$element->id
= insert_record("workshop_grades", $element)) {
267 error("Could not insert workshop grade!");
269 $grade = ($elements[$form->grade
[0]]->maxscore +
$form->grade
[1]);
272 case 4: // rubric grading (identical to accumulative grading)
273 // Insert all the elements that contain something
274 foreach ($form->grade
as $key => $thegrade) {
276 $element->workshopid
= $workshop->id
;
277 $element->assessmentid
= $assessment->id
;
278 $element->elementno
= clean_param($key, PARAM_INT
);
279 $element->feedback
= clean_param($form->{"feedback_$key"}, PARAM_CLEAN
);
280 $element->grade
= $thegrade;
281 if (!$element->id
= insert_record("workshop_grades", $element)) {
282 error("Could not insert workshop grade!");
285 // now work out the grade...
288 foreach ($form->grade
as $key => $grade) {
289 $maxscore = $elements[$key]->maxscore
;
290 $weight = $WORKSHOP_EWEIGHTS[$elements[$key]->weight
];
292 $totalweight +
= $weight;
294 $rawgrade +
= ($grade / $maxscore) * $weight;
296 $grade = 100.0 * ($rawgrade / $totalweight);
303 if (!empty($form->generalcomment
)) { // update the object (no need to update the db record)
304 $assessment->generalcomment
= clean_param($form->generalcomment
, PARAM_CLEAN
);
307 // redisplay form, going back to original returnto address
308 workshop_print_assessment($workshop, $assessment, true, true, $form->returnto
);
310 // add_to_log($course->id, "workshop", "assess", "viewassessment.php?id=$cm->id&aid=$assessment->id", "$assessment->id", "$cm->id");
315 /******************* confirm delete ************************************/
316 elseif ($action == 'confirmdelete' ) {
319 error("Confirm delete: assessment id missing");
322 notice_yesno(get_string("confirmdeletionofthisitem","workshop", get_string("assessment", "workshop")),
323 "assessments.php?action=delete&id=$cm->id&aid=$aid", "submissions.php?action=adminlist&id=$cm->id");
327 /******************* delete ************************************/
328 elseif ($action == 'delete' ) {
331 error("Delete: submission id missing");
334 print_string("deleting", "workshop");
335 // first delete all the associated records...
336 delete_records("workshop_comments", "assessmentid", $aid);
337 delete_records("workshop_grades", "assessmentid", $aid);
338 // ...now delete the assessment...
339 delete_records("workshop_assessments", "id", $aid);
341 print_continue("view.php?id=$cm->id");
345 /*********************** admin list of asssessments (of a submission) (by teachers)**************/
346 elseif ($action == 'adminlist') {
348 require_capability('mod/workshop:manage', $context);
351 error ("Workshop asssessments: adminlist called with no sid");
353 $submission = get_record("workshop_submissions", "id", $sid);
354 workshop_print_assessments_for_admin($workshop, $submission);
355 print_continue("submissions.php?action=adminlist&id=$cm->id");
359 /*********************** admin list of asssessments by a student (used by teachers only )******************/
360 elseif ($action == 'adminlistbystudent') {
362 require_capability('mod/workshop:manage', $context);
364 if (empty($userid)) {
365 error ("Workshop asssessments: adminlistbystudent called with no userid");
367 $user = get_record("user", "id", $userid);
368 workshop_print_assessments_by_user_for_admin($workshop, $user);
369 print_continue("submissions.php?action=adminlist&id=$cm->id");
373 /*************** agree (to) assessment (by student) ***************************/
374 elseif ($action == 'agreeassessment') {
376 // assessment id comes from link or hidden form variable
377 if (!$assessment = get_record("workshop_assessments", "id", $aid)) {
378 error("Assessment : agree assessment failed");
380 //save time of agreement
381 set_field("workshop_assessments", "timeagreed", $timenow, "id", $assessment->id
);
382 echo "<div style=\"text-align:center\"><b>".get_string("savedok", "workshop")."</b></div><br />\n";
384 add_to_log($course->id
, "workshop", "agree", "viewassessment.php?id=$cm->id&aid=$assessment->id", "$assessment->id");
385 print_continue("view.php?id=$cm->id");
390 /*************** display grading form (viewed by student) *********************************/
391 elseif ($action == 'displaygradingform') {
393 print_heading_with_help(get_string("specimenassessmentform", "workshop"), "specimen", "workshop");
395 workshop_print_assessment($workshop); // called with no assessment
396 print_continue("view.php?id=$cm->id");
400 /*************** edit comment on assessment (by author, assessor or teacher) ***************************/
401 elseif ($action == 'editcomment') {
403 print_heading_with_help(get_string("editacomment", "workshop"), "editingacomment", "workshop");
404 // get the comment record...
405 if (!$comment = get_record("workshop_comments", "id", $cid)) {
406 error("Edit Comment: Comment not found");
408 if (!$assessment = get_record("workshop_assessments", "id", $comment->assessmentid
)) {
409 error("Edit Comment: Assessment not found");
411 if (!$submission = get_record("workshop_submissions", "id", $assessment->submissionid
)) {
412 error("Edit Comment: Submission not found");
415 <form id
="gradingform" action
="assessments.php" method
="post">
416 <input type
="hidden" name
="action" value
="updatecomment" />
417 <input type
="hidden" name
="id" value
="<?php echo $cm->id ?>" />
418 <input type
="hidden" name
="cid" value
="<?php echo $cid ?>" />
419 <div
class="boxaligncenter">
420 <table cellpadding
="5" border
="1">
423 // now show the comment
424 echo "<tr valign=\"top\">\n";
425 echo " <td align=\"right\"><b>". get_string("comment", "workshop").":</b></td>\n";
427 echo " <textarea name=\"comments\" rows=\"5\" cols=\"75\">\n";
428 if (isset($comment->comments
)) {
429 echo $comment->comments
;
431 echo " </textarea>\n";
432 echo " </td></tr></table>\n";
433 echo "<input type=\"submit\" value=\"".get_string("savemycomment", "workshop")."\" />\n";
434 echo "</div></form>\n";
435 workshop_print_assessment($workshop, $assessment);
439 /*********************** edit assessment elements (for teachers) ***********************/
440 elseif ($action == 'editelements') {
442 require_capability('mod/workshop:manage', $context);
444 $count = count_records("workshop_grades", "workshopid", $workshop->id
);
446 notify(get_string("warningonamendingelements", "workshop"));
448 // set up heading, form and table
449 print_heading_with_help(get_string("editingassessmentelements", "workshop"), "elements", "workshop");
451 <form id
="form" method
="post" action
="assessments.php">
452 <input type
="hidden" name
="id" value
="<?php echo $cm->id ?>" />
453 <input type
="hidden" name
="action" value
="insertelements" />
454 <div
class="boxaligncenter"><table cellpadding
="5" border
="1">
457 // get existing elements, if none set up appropriate default ones
458 if ($elementsraw = get_records("workshop_elements", "workshopid", $workshop->id
, "elementno ASC" )) {
459 foreach ($elementsraw as $element) {
460 $elements[] = $element; // to renumber index 0,1,2...
463 // check for missing elements (this happens either the first time round or when the number of elements is icreased)
464 for ($i=0; $i<$workshop->nelements
; $i++
) {
465 if (!isset($elements[$i])) {
466 $elements[$i]->description
= '';
467 $elements[$i]->scale
=0;
468 $elements[$i]->maxscore
= 0;
469 $elements[$i]->weight
= 11;
473 switch ($workshop->gradingstrategy
) {
474 case 0: // no grading
475 for ($i=0; $i<$workshop->nelements
; $i++
) {
477 echo "<tr valign=\"top\">\n";
478 echo " <td align=\"right\"><b>". get_string("element","workshop")." $iplus1:</b></td>\n";
479 echo "<td><textarea name=\"description[]\" rows=\"3\" cols=\"75\">".$elements[$i]->description
."</textarea>\n";
480 echo " </td></tr>\n";
481 echo "<tr valign=\"top\">\n";
482 echo " <td colspan=\"2\" class=\"workshopassessmentheading\"> </td>\n";
487 case 1: // accumulative grading
488 // set up scales name
489 foreach ($WORKSHOP_SCALES as $KEY => $SCALE) {
490 $SCALES[] = $SCALE['name'];
492 for ($i=0; $i<$workshop->nelements
; $i++
) {
494 echo "<tr valign=\"top\">\n";
495 echo " <td align=\"right\"><b>". get_string("element","workshop")." $iplus1:</b></td>\n";
496 echo "<td><textarea name=\"description[]\" rows=\"3\" cols=\"75\">".$elements[$i]->description
."</textarea>\n";
497 echo " </td></tr>\n";
498 echo "<tr valign=\"top\">\n";
499 echo " <td align=\"right\"><b>". get_string("typeofscale", "workshop"). ":</b></td>\n";
500 echo "<td valign=\"top\">\n";
501 choose_from_menu($SCALES, "scale[]", $elements[$i]->scale
, "");
502 if ($elements[$i]->weight
== '') { // not set
503 $elements[$i]->weight
= 11; // unity
506 echo "<tr valign=\"top\"><td align=\"right\"><b>".get_string("elementweight", "workshop").":</b></td><td>\n";
507 workshop_choose_from_menu($WORKSHOP_EWEIGHTS, "weight[]", $elements[$i]->weight
, "");
510 echo "<tr valign=\"top\">\n";
511 echo " <td colspan=\"2\" class=\"workshopassessmentheading\"> </td>\n";
516 case 2: // error banded grading
517 for ($i=0; $i<$workshop->nelements
; $i++
) {
519 echo "<tr valign=\"top\">\n";
520 echo " <td align=\"right\"><b>". get_string("element","workshop")." $iplus1:</b></td>\n";
521 echo "<td><textarea name=\"description[$i]\" rows=\"3\" cols=\"75\">".$elements[$i]->description
."</textarea>\n";
522 echo " </td></tr>\n";
523 if ($elements[$i]->weight
== '') { // not set
524 $elements[$i]->weight
= 11; // unity
527 echo "<tr valign=\"top\"><td align=\"right\"><b>".get_string("elementweight", "workshop").":</b></td><td>\n";
528 workshop_choose_from_menu($WORKSHOP_EWEIGHTS, "weight[]", $elements[$i]->weight
, "");
531 echo "<tr valign=\"top\">\n";
532 echo " <td colspan=\"2\" class=\"workshopassessmentheading\"> </td>\n";
535 echo "</div></table><br />\n";
536 echo "<div style=\"text-align:center\"><b>".get_string("gradetable","workshop")."</b></div>\n";
537 echo "<div class=\"boxaligncenter\"><table cellpadding=\"5\" border=\"1\"><tr><td align=\"CENTER\">".
538 get_string("numberofnegativeresponses", "workshop");
539 echo "</td><td>". get_string("suggestedgrade", "workshop")."</td></tr>\n";
540 for ($j = $workshop->grade
; $j >= 0; $j--) {
543 for ($i=0; $i<=$workshop->nelements
; $i++
) {
544 echo "<tr><td align=\"CENTER\">$i</td><td align=\"CENTER\">";
545 if (!isset($elements[$i])) { // the "last one" will be!
546 $elements[$i]->description
= "";
547 $elements[$i]->maxscore
= 0;
549 choose_from_menu($numbers, "maxscore[$i]", $elements[$i]->maxscore
, "");
552 echo "</table></div>\n";
555 case 3: // criterion grading
556 for ($j = 100; $j >= 0; $j--) {
559 for ($i=0; $i<$workshop->nelements
; $i++
) {
561 echo "<tr valign=\"top\">\n";
562 echo " <td align=\"right\"><b>". get_string("criterion","workshop")." $iplus1:</b></td>\n";
563 echo "<td><textarea name=\"description[$i]\" rows=\"3\" cols=\"75\">".$elements[$i]->description
."</textarea>\n";
564 echo " </td></tr>\n";
565 echo "<tr><td><b>". get_string("suggestedgrade", "workshop").":</b></td><td>\n";
566 choose_from_menu($numbers, "maxscore[$i]", $elements[$i]->maxscore
, "");
568 echo "<tr valign=\"top\">\n";
569 echo " <td colspan=\"2\" class=\"workshopassessmentheading\"> </td>\n";
575 for ($j = 100; $j >= 0; $j--) {
578 if ($rubricsraw = get_records("workshop_rubrics", "workshopid", $workshop->id
)) {
579 foreach ($rubricsraw as $rubric) {
580 $rubrics[$rubric->elementno
][$rubric->rubricno
] = $rubric->description
; // reindex 0,1,2...
583 for ($i=0; $i<$workshop->nelements
; $i++
) {
585 echo "<tr valign=\"top\">\n";
586 echo " <td align=\"right\"><b>". get_string("element","workshop")." $iplus1:</b></td>\n";
587 echo "<td><textarea name=\"description[$i]\" rows=\"3\" cols=\"75\">".$elements[$i]->description
."</textarea>\n";
588 echo " </td></tr>\n";
589 echo "<tr valign=\"top\"><td align=\"right\"><b>".get_string("elementweight", "workshop").":</b></td><td>\n";
590 workshop_choose_from_menu($WORKSHOP_EWEIGHTS, "weight[]", $elements[$i]->weight
, "");
594 for ($j=0; $j<5; $j++
) {
596 if (empty($rubrics[$i][$j])) {
597 $rubrics[$i][$j] = "";
599 echo "<tr valign=\"top\">\n";
600 echo " <td align=\"right\"><b>". get_string("grade","workshop")." $j:</b></td>\n";
601 echo "<td><textarea name=\"rubric[$i][$j]\" rows=\"3\" cols=\"75\">".$rubrics[$i][$j]."</textarea>\n";
602 echo " </td></tr>\n";
604 echo "<tr valign=\"top\">\n";
605 echo " <td colspan=\"2\" class=\"workshopassessmentheading\"> </td>\n";
610 // close table and form
614 <input type
="submit" value
="<?php print_string("savechanges
") ?>" />
615 <input type
="submit" name
="cancel" value
="<?php print_string("cancel
") ?>" />
622 /*************** grade all assessments (by teacher) ***************************/
623 elseif ($action == 'gradeallassessments') {
625 require_capability('mod/workshop:manage', $context);
627 print_heading(get_string("gradingallassessments", "workshop"));
628 workshop_grade_assessments($workshop);
629 print_continue("view.php?id=$cm->id");
633 /*************** grade (student's) assessment (by teacher) ***************************/
634 elseif ($action == 'gradeassessment') {
636 require_capability('mod/workshop:manage', $context);
638 print_heading_with_help(get_string("gradeassessment", "workshop"), "gradingassessments", "workshop");
639 // get assessment record
640 if (!$assessmentid = $aid) {
641 error("Assessment id not given");
643 $assessment = get_record("workshop_assessments", "id", $assessmentid);
644 if (!$submission = get_record("workshop_submissions", "id", $assessment->submissionid
)) {
645 error("Submission not found");
647 // get the teacher's assessment first
648 if ($teachersassessment = workshop_get_submission_assessment($submission, $USER)) {
649 echo "<div style=\"text-align:center\"><b>".get_string("teacherassessments", "workshop", $course->teacher
)."</b></div>\n";
650 workshop_print_assessment($workshop, $teachersassessment);
652 // now the student's assessment (don't allow changes)
653 $user = get_record("user", "id", $assessment->userid
);
654 echo "<div style=\"text-align:center\"><b>".get_string("assessmentby", "workshop", $user->firstname
." ".$user->lastname
)."</b></div>\n";
655 workshop_print_assessment($workshop, $assessment);
657 include('assessment_grading_form.html');
662 /*************** insert (new) comment (by author, assessor or teacher) ***************************/
663 elseif ($action == 'insertcomment') {
666 $form = (object)$_POST;
668 if (!$assessment = get_record("workshop_assessments", "id", $aid)) {
669 error("Unable to insert comment");
671 // save the comment...
672 $comment->workshopid
= $workshop->id
;
673 $comment->assessmentid
= $assessment->id
;
674 $comment->userid
= $USER->id
;
675 $comment->timecreated
= $timenow;
676 $comment->comments
= clean_param($form->comments
, PARAM_CLEAN
);
677 if (!$comment->id
= insert_record("workshop_comments", $comment)) {
678 error("Could not insert workshop comment!");
681 add_to_log($course->id
, "workshop", "comment", "view.php?id=$cm->id", "$comment->id");
683 print_continue("viewassessment.php?id=$cm->id&aid=$assessment->id");
687 /*********************** insert/update assignment elements (for teachers)***********************/
688 elseif ($action == 'insertelements') {
690 require_capability('mod/workshop:manage', $context);
692 $form = data_submitted();
694 // let's not fool around here, dump the junk!
695 delete_records("workshop_elements", "workshopid", $workshop->id
);
697 // determine wich type of grading
698 switch ($workshop->gradingstrategy
) {
699 case 0: // no grading
700 // Insert all the elements that contain something
701 foreach ($form->description
as $key => $description) {
704 $element->description
= $description;
705 $element->workshopid
= $workshop->id
;
706 $element->elementno
= $key;
707 if (!$element->id
= insert_record("workshop_elements", $element)) {
708 error("Could not insert workshop element!");
714 case 1: // accumulative grading
715 // Insert all the elements that contain something
716 foreach ($form->description
as $key => $description) {
719 $element->description
= $description;
720 $element->workshopid
= $workshop->id
;
721 $element->elementno
= clean_param($key, PARAM_INT
);
722 if (isset($form->scale
[$key])) {
723 $element->scale
= $form->scale
[$key];
724 switch ($WORKSHOP_SCALES[$form->scale
[$key]]['type']) {
725 case 'radio' : $element->maxscore
= $WORKSHOP_SCALES[$form->scale
[$key]]['size'] - 1;
727 case 'selection' : $element->maxscore
= $WORKSHOP_SCALES[$form->scale
[$key]]['size'];
731 if (isset($form->weight
[$key])) {
732 $element->weight
= $form->weight
[$key];
734 if (!$element->id
= insert_record("workshop_elements", $element)) {
735 error("Could not insert workshop element!");
741 case 2: // error banded grading...
742 case 3: // ...and criterion grading
743 // Insert all the elements that contain something, the number of descriptions is one less than the number of grades
744 foreach ($form->maxscore
as $key => $themaxscore) {
746 $element->workshopid
= $workshop->id
;
747 $element->elementno
= clean_param($key, PARAM_INT
);
748 $element->maxscore
= $themaxscore;
749 if (isset($form->description
[$key])) {
750 $element->description
= $form->description
[$key];
752 if (isset($form->weight
[$key])) {
753 $element->weight
= $form->weight
[$key];
755 if (!$element->id
= insert_record("workshop_elements", $element)) {
756 error("Could not insert workshop element!");
761 case 4: // ...and criteria grading
762 // Insert all the elements that contain something
763 foreach ($form->description
as $key => $description) {
765 $element->workshopid
= $workshop->id
;
766 $element->elementno
= clean_param($key, PARAM_INT
);
767 $element->description
= $description;
768 $element->weight
= $form->weight
[$key];
769 for ($j=0;$j<5;$j++
) {
770 if (empty($form->rubric
[$key][$j]))
773 $element->maxscore
= $j - 1;
774 if (!$element->id
= insert_record("workshop_elements", $element)) {
775 error("Could not insert workshop element!");
778 // let's not fool around here, dump the junk!
779 delete_records("workshop_rubrics", "workshopid", $workshop->id
);
780 for ($i=0;$i<$workshop->nelements
;$i++
) {
781 for ($j=0;$j<5;$j++
) {
783 if (empty($form->rubric
[$i][$j])) { // OK to have an element with fewer than 5 items
786 $element->workshopid
= $workshop->id
;
787 $element->elementno
= $i;
788 $element->rubricno
= $j;
789 $element->description
= $form->rubric
[$i][$j];
790 if (!$element->id
= insert_record("workshop_rubrics", $element)) {
791 error("Could not insert workshop element!");
797 echo "</div>"; // not sure where this one came from MDL-7861
798 redirect("view.php?id=$cm->id", get_string("savedok","workshop"));
802 /*********************** list assessments for grading (Student submissions)(by teachers)***********************/
803 elseif ($action == 'listungradedstudentsubmissions') {
805 require_capability('mod/workshop:manage', $context);
807 workshop_list_ungraded_assessments($workshop, "student");
808 print_continue("view.php?id=$cm->id");
812 /*********************** list assessments for grading (Teacher submissions) (by teachers)***********************/
813 elseif ($action == 'listungradedteachersubmissions') {
815 require_capability('mod/workshop:manage', $context);
817 workshop_list_ungraded_assessments($workshop, "teacher");
818 print_continue("view.php?id=$cm->id");
822 /****************** list teacher submissions ***********************/
823 elseif ($action == 'listteachersubmissions') {
825 workshop_list_teacher_submissions($workshop, $USER);
826 print_continue("view.php?id=$cm->id");
830 /******************* regrade student assessments ************************************/
831 elseif ($action == 'regradestudentassessments' ) {
834 require_capability('mod/workshop:manage', $context);
835 // get all the submissions...
836 if ($submissions = get_records("workshop_submissions", "workshopid", $workshop->id
)) {
837 foreach ($submissions as $submission) {
839 if (($submission->timecreated +
$CFG->maxeditingtime
) < $timenow) {
840 // ...clear assessment count so workshop_grade_assessments() can do its thing
841 set_field("workshop_submissions", "nassessments", 0, "id", $submission->id
);
846 workshop_grade_assessments($workshop);
848 print_continue("submissions.php?id=$cm->id&action=adminlist");
852 /*************** remove stock comment (by teacher ) ***************************/
853 elseif ($action == 'removestockcomment') {
855 if (empty($aid) or empty($stockcommentid)) {
856 error("Workshop Assessment id and/or Stock Comment id missing");
859 require_capability('mod/workshop:manage', $context);
861 if (!$assessment = get_record("workshop_assessments", "id", $aid)) {
862 error("workshop assessment is misconfigured");
864 $form = data_submitted('nomatch'); //Nomatch because we can come from assess.php
866 // delete the comment from the stock comments table
867 if (!delete_records("workshop_stockcomments", "id", $stockcommentid)) {
868 error("Could not remove comment from the comment bank");
871 // now upate the assessment (just the elements, the assessment itself is not updated)
873 // first get the assignment elements for maxscores and weights...
874 $elementsraw = get_records("workshop_elements", "workshopid", $workshop->id
, "elementno ASC");
875 if (count($elementsraw) < $workshop->nelements
) {
876 print_string("noteonassignmentelements", "workshop");
879 foreach ($elementsraw as $element) {
880 $elements[] = $element; // to renumber index 0,1,2...
887 // don't fiddle about, delete all the old and add the new!
888 delete_records("workshop_grades", "assessmentid", $assessment->id
);
891 //determine what kind of grading we have
892 switch ($workshop->gradingstrategy
) {
893 case 0: // no grading
894 // Insert all the elements that contain something
895 for ($i =0; $i < $workshop->nelements
; $i++
) {
897 $element->workshopid
= $workshop->id
;
898 $element->assessmentid
= $assessment->id
;
899 $element->elementno
= $i;
900 $element->feedback
= clean_param($form->{"feedback_$i"}, PARAM_CLEAN
);
901 if (!$element->id
= insert_record("workshop_grades", $element)) {
902 error("Could not insert workshop grade!");
905 $grade = 0; // set to satisfy save to db
908 case 1: // accumulative grading
909 // Insert all the elements that contain something
910 foreach ($form->grade
as $key => $thegrade) {
912 $element->workshopid
= $workshop->id
;
913 $element->assessmentid
= $assessment->id
;
914 $element->elementno
= clean_param($key, PARAM_INT
);
915 $element->feedback
= clean_param($form->{"feedback_$key"}, PARAM_CLEAN
);
916 $element->grade
= $thegrade;
917 if (!$element->id
= insert_record("workshop_grades", $element)) {
918 error("Could not insert workshop grade!");
921 // now work out the grade...
924 foreach ($form->grade
as $key => $grade) {
925 $maxscore = $elements[$key]->maxscore
;
926 $weight = $WORKSHOP_EWEIGHTS[$elements[$key]->weight
];
928 $totalweight +
= $weight;
930 $rawgrade +
= ($grade / $maxscore) * $weight;
931 // echo "\$key, \$maxscore, \$weight, \$totalweight, \$grade, \$rawgrade : $key, $maxscore, $weight, $totalweight, $grade, $rawgrade<br />";
933 $grade = 100.0 * ($rawgrade / $totalweight);
936 case 2: // error banded graded
937 // Insert all the elements that contain something
939 for ($i =0; $i < $workshop->nelements
; $i++
) {
941 $element->workshopid
= $workshop->id
;
942 $element->assessmentid
= $assessment->id
;
943 $element->elementno
= $i;
944 $element->feedback
= clean_param($form->{"feedback_$i"}, PARAM_CLEAN
);
945 $element->grade
= $form->grade
[$i];
946 if (!$element->id
= insert_record("workshop_grades", $element)) {
947 error("Could not insert workshop grade!");
949 if (empty($form->grade
[$i])){
950 $error +
= $WORKSHOP_EWEIGHTS[$elements[$i]->weight
];
953 // now save the adjustment
955 $i = $workshop->nelements
;
956 $element->workshopid
= $workshop->id
;
957 $element->assessmentid
= $assessment->id
;
958 $element->elementno
= $i;
959 $element->grade
= $form->grade
[$i];
960 if (!$element->id
= insert_record("workshop_grades", $element)) {
961 error("Could not insert workshop grade!");
963 $grade = ($elements[intval($error +
0.5)]->maxscore +
$form->grade
[$i]) * 100 / $workshop->grade
;
967 } elseif ($grade > 100) {
970 echo "<b>".get_string("weightederrorcount", "workshop", intval($error +
0.5))."</b>\n";
973 case 3: // criteria grading
974 // save in the selected criteria value in element zero,
976 $element->workshopid
= $workshop->id
;
977 $element->assessmentid
= $assessment->id
;
978 $element->elementno
= 0;
979 $element->grade
= $form->grade
[0];
980 if (!$element->id
= insert_record("workshop_grades", $element)) {
981 error("Could not insert workshop grade!");
983 // now save the adjustment in element one
985 $element->workshopid
= $workshop->id
;
986 $element->assessmentid
= $assessment->id
;
987 $element->elementno
= 1;
988 $element->grade
= $form->grade
[1];
989 if (!$element->id
= insert_record("workshop_grades", $element)) {
990 error("Could not insert workshop grade!");
992 $grade = ($elements[$form->grade
[0]]->maxscore +
$form->grade
[1]);
995 case 4: // rubric grading (identical to accumulative grading)
996 // Insert all the elements that contain something
997 foreach ($form->grade
as $key => $thegrade) {
999 $element->workshopid
= $workshop->id
;
1000 $element->assessmentid
= $assessment->id
;
1001 $element->elementno
= clean_param($key, PARAM_INT
);
1002 $element->feedback
= clean_param($form->{"feedback_$key"}, PARAM_CLEAN
);
1003 $element->grade
= $thegrade;
1004 if (!$element->id
= insert_record("workshop_grades", $element)) {
1005 error("Could not insert workshop grade!");
1008 // now work out the grade...
1011 foreach ($form->grade
as $key => $grade) {
1012 $maxscore = $elements[$key]->maxscore
;
1013 $weight = $WORKSHOP_EWEIGHTS[$elements[$key]->weight
];
1015 $totalweight +
= $weight;
1017 $rawgrade +
= ($grade / $maxscore) * $weight;
1019 $grade = 100.0 * ($rawgrade / $totalweight);
1026 if (!empty($form->generalcomment
)) { // update the object (no need to update the db record)
1027 $assessment->generalcomment
= clean_param($form->generalcomment
, PARAM_CLEAN
);
1030 // redisplay form, going back to original returnto address
1031 workshop_print_assessment($workshop, $assessment, true, true, $form->returnto
);
1033 // add_to_log($course->id, "workshop", "assess", "viewassessment.php?id=$cm->id&aid=$assessment->id", "$assessment->id", "$cm->id");
1038 /*************** update assessment (by teacher or student) ***************************/
1039 elseif ($action == 'updateassessment') {
1042 error("Workshop Assessment id missing");
1045 if (! $assessment = get_record("workshop_assessments", "id", $aid)) {
1046 error("workshop assessment is misconfigured");
1049 // first get the assignment elements for maxscores and weights...
1050 $elementsraw = get_records("workshop_elements", "workshopid", $workshop->id
, "elementno ASC");
1051 if (count($elementsraw) < $workshop->nelements
) {
1052 print_string("noteonassignmentelements", "workshop");
1055 foreach ($elementsraw as $element) {
1056 $elements[] = $element; // to renumber index 0,1,2...
1063 // don't fiddle about, delete all the old and add the new!
1064 delete_records("workshop_grades", "assessmentid", $assessment->id
);
1066 $form = data_submitted('nomatch'); //Nomatch because we can come from assess.php
1068 //determine what kind of grading we have
1069 switch ($workshop->gradingstrategy
) {
1070 case 0: // no grading
1071 // Insert all the elements that contain something
1072 for ($i = 0; $i < $workshop->nelements
; $i++
) {
1074 $element->workshopid
= $workshop->id
;
1075 $element->assessmentid
= $assessment->id
;
1076 $element->elementno
= $i;
1077 $element->feedback
= clean_param($form->{"feedback_$i"}, PARAM_CLEAN
);
1078 if (!$element->id
= insert_record("workshop_grades", $element)) {
1079 error("Could not insert workshop grade!");
1082 $grade = 0; // set to satisfy save to db
1085 case 1: // accumulative grading
1086 // Insert all the elements that contain something
1087 foreach ($form->grade
as $key => $thegrade) {
1089 $element->workshopid
= $workshop->id
;
1090 $element->assessmentid
= $assessment->id
;
1091 $element->elementno
= $key;
1092 $element->feedback
= clean_param($form->{"feedback_$key"}, PARAM_CLEAN
);
1093 $element->grade
= $thegrade;
1094 if (!$element->id
= insert_record("workshop_grades", $element)) {
1095 error("Could not insert workshop grade!");
1098 // now work out the grade...
1101 foreach ($form->grade
as $key => $grade) {
1102 $maxscore = $elements[$key]->maxscore
;
1103 $weight = $WORKSHOP_EWEIGHTS[$elements[$key]->weight
];
1105 $totalweight +
= $weight;
1107 $rawgrade +
= ($grade / $maxscore) * $weight;
1108 // echo "\$key, \$maxscore, \$weight, \$totalweight, \$grade, \$rawgrade : $key, $maxscore, $weight, $totalweight, $grade, $rawgrade<br />";
1110 $grade = 100.0 * ($rawgrade / $totalweight);
1113 case 2: // error banded graded
1114 // Insert all the elements that contain something
1116 for ($i =0; $i < $workshop->nelements
; $i++
) {
1118 $element->workshopid
= $workshop->id
;
1119 $element->assessmentid
= $assessment->id
;
1120 $element->elementno
= $i;
1121 $element->feedback
= $form->{"feedback_$i"};
1122 $element->grade
= clean_param($form->grade
[$i], PARAM_CLEAN
);
1123 if (!$element->id
= insert_record("workshop_grades", $element)) {
1124 error("Could not insert workshop grade!");
1126 if (empty($form->grade
[$i])){
1127 $error +
= $WORKSHOP_EWEIGHTS[$elements[$i]->weight
];
1130 // now save the adjustment
1132 $i = $workshop->nelements
;
1133 $element->workshopid
= $workshop->id
;
1134 $element->assessmentid
= $assessment->id
;
1135 $element->elementno
= $i;
1136 $element->grade
= $form->grade
[$i];
1137 if (!$element->id
= insert_record("workshop_grades", $element)) {
1138 error("Could not insert workshop grade!");
1140 $grade = ($elements[intval($error +
0.5)]->maxscore +
$form->grade
[$i]) * 100 / $workshop->grade
;
1144 } elseif ($grade > 100) {
1147 echo "<b>".get_string("weightederrorcount", "workshop", intval($error +
0.5))."</b>\n";
1150 case 3: // criteria grading
1151 // save in the selected criteria value in element zero,
1153 $element->workshopid
= $workshop->id
;
1154 $element->assessmentid
= $assessment->id
;
1155 $element->elementno
= 0;
1156 $element->grade
= $form->grade
[0];
1157 if (!$element->id
= insert_record("workshop_grades", $element)) {
1158 error("Could not insert workshop grade!");
1160 // now save the adjustment in element one
1162 $element->workshopid
= $workshop->id
;
1163 $element->assessmentid
= $assessment->id
;
1164 $element->elementno
= 1;
1165 $element->grade
= $form->grade
[1];
1166 if (!$element->id
= insert_record("workshop_grades", $element)) {
1167 error("Could not insert workshop grade!");
1169 $grade = ($elements[$form->grade
[0]]->maxscore +
$form->grade
[1]);
1172 case 4: // rubric grading (identical to accumulative grading)
1173 // Insert all the elements that contain something
1174 foreach ($form->grade
as $key => $thegrade) {
1176 $element->workshopid
= $workshop->id
;
1177 $element->assessmentid
= $assessment->id
;
1178 $element->elementno
= clean_param($key, PARAM_INT
);
1179 $element->feedback
= clean_param($form->{"feedback_$key"}, PARAM_CLEAN
);
1180 $element->grade
= $thegrade;
1181 if (!$element->id
= insert_record("workshop_grades", $element)) {
1182 error("Could not insert workshop grade!");
1185 // now work out the grade...
1188 foreach ($form->grade
as $key => $grade) {
1189 $maxscore = $elements[$key]->maxscore
;
1190 $weight = $WORKSHOP_EWEIGHTS[$elements[$key]->weight
];
1192 $totalweight +
= $weight;
1194 $rawgrade +
= ($grade / $maxscore) * $weight;
1196 $grade = 100.0 * ($rawgrade / $totalweight);
1201 // update the time of the assessment record (may be re-edited)...
1202 set_field("workshop_assessments", "timecreated", $timenow, "id", $assessment->id
);
1204 if (!$submission = get_record("workshop_submissions", "id", $assessment->submissionid
)) {
1205 error ("Updateassessment: submission record not found");
1208 // if the workshop does need peer agreement AND it's self assessment then set timeagreed
1209 if ($workshop->agreeassessments
and ($submission->userid
== $assessment->userid
)) {
1210 set_field("workshop_assessments", "timeagreed", $timenow, "id", $assessment->id
);
1214 set_field("workshop_assessments", "grade", $grade, "id", $assessment->id
);
1215 // ...and clear the timegraded but set the graddinggrade to maximum, may be reduced subsequently...
1216 set_field("workshop_assessments", "timegraded", 0, "id", $assessment->id
);
1217 set_field("workshop_assessments", "gradinggrade", 100, "id", $assessment->id
);
1218 // ...and the resubmission flag
1219 set_field("workshop_assessments", "resubmission", 0, "id", $assessment->id
);
1221 // if there's examples or peer assessments clear the counter in the submission so that
1222 // all assessments for this submission will be regraded
1223 if ($workshop->ntassessments
or $workshop->nsassessments
) {
1224 set_field("workshop_submissions", "nassessments", 0, "id", $submission->id
);
1225 workshop_grade_assessments($workshop);
1226 } else { // it could be self assessment....
1227 // now see if there's a corresponding assessment so that the gradinggrade can be set
1228 if (workshop_is_teacher($workshop)) {
1229 // see if there's are student assessments, if so set their gradinggrade
1230 if ($assessments = workshop_get_assessments($submission)) {
1231 foreach($assessments as $studentassessment) {
1232 // skip if it's not a student assessment
1233 if (!workshop_is_student($workshop, $studentassessment->userid
)) {
1236 $gradinggrade = workshop_compare_assessments($workshop, $assessment, $studentassessment);
1237 set_field("workshop_assessments", "timegraded", $timenow, "id", $studentassessment->id
);
1238 set_field("workshop_assessments", "gradinggrade", $gradinggrade, "id", $studentassessment->id
);
1241 } else { //it's a student assessment, see if there's a corresponding teacher's assessment
1242 if ($assessments = workshop_get_assessments($submission)) {
1243 foreach($assessments as $teacherassessment) {
1244 if (workshop_is_teacher($workshop, $teacherassessment->userid
)) {
1245 $gradinggrade = workshop_compare_assessments($workshop, $assessment, $teacherassessment);
1246 set_field("workshop_assessments", "timegraded", $timenow, "id", $assessment->id
);
1247 set_field("workshop_assessments", "gradinggrade", $gradinggrade, "id", $assessment->id
);
1248 break; // only look for the first teacher assessment
1256 if (!empty($form->generalcomment
)) {
1257 set_field("workshop_assessments", "generalcomment", clean_param($form->generalcomment
, PARAM_CLEAN
), "id", $assessment->id
);
1260 add_to_log($course->id
, "workshop", "assess",
1261 "viewassessment.php?id=$cm->id&aid=$assessment->id", "$assessment->id", "$cm->id");
1263 // set up return address
1264 if (!$returnto = $form->returnto
) {
1265 $returnto = "view.php?id=$cm->id";
1268 // show grade if grading strategy is not zero
1269 if ($workshop->gradingstrategy
) {
1270 echo "</div>"; // MDL-7861, this is from <div id=page>
1271 redirect($returnto, get_string("thegradeis", "workshop").": ".
1272 number_format($grade * $workshop->grade
/ 100, 2).
1273 " (".get_string("maximumgrade")." ".number_format($workshop->grade
).")");
1276 redirect($returnto);
1282 /****************** update comment (by author, assessor or teacher) ********************/
1283 elseif ($action == 'updatecomment') {
1286 $form = (object)$_POST;
1288 // get the comment record...
1289 if (!$comment = get_record("workshop_comments", "id", $_POST['cid'])) {
1290 error("Update to Comment failed");
1292 if (!$assessment = get_record("workshop_assessments", "id", $comment->assessmentid
)) {
1293 error("Update Comment: Assessment not found");
1295 //save the comment for the assessment...
1296 if (isset($form->comments
)) {
1297 set_field("workshop_comments", "comments", $form->comments
, "id", $comment->id
);
1298 set_field("workshop_comments", "timecreated", $timenow, "id", $comment->id
);
1299 // ..and kick to comment into life (probably not needed but just in case)
1300 set_field("workshop_comments", "mailed", 0, "id", $comment->id
);
1301 echo "<centre><b>".get_string("savedok", "workshop")."</b></div><br />\n";
1303 add_to_log($course->id
, "workshop", "comment",
1304 "viewassessment.php?id=$cm->id&aid=$assessment->id", "$comment->id");
1307 print_continue("viewassessment.php?id=$cm->id&aid=$assessment->id");
1311 /****************** update grading (by teacher) ***************************/
1312 elseif ($action == 'updategrading') {
1315 require_capability('mod/workshop:manage', $context);
1317 $form = (object)$_POST;
1319 if (!$assessment = get_record("workshop_assessments", "id", $_POST['aid'])) {
1320 error("Update Grading failed");
1322 //save the comment and grade for the assessment
1323 if (isset($form->teachercomment
)) {
1324 set_field("workshop_assessments", "teachercomment", $form->teachercomment
, "id", $assessment->id
);
1325 set_field("workshop_assessments", "gradinggrade", $form->gradinggrade
, "id", $assessment->id
);
1326 set_field("workshop_assessments", "timegraded", $timenow, "id", $assessment->id
);
1327 set_field("workshop_assessments", "mailed", 0, "id", $assessment->id
);
1328 set_field("workshop_assessments", "teachergraded", 1, "id", $assessment->id
);
1329 echo "<centre><b>".get_string("savedok", "workshop")."</b></centre><br />\n";
1331 add_to_log($course->id
, "workshop", "grade",
1332 "viewassessment.php?id=$cm->id&aid=$assessment->id", "$assessment->id", "$cm->id");
1334 redirect($form->redirect
);
1338 /****************** view all assessments ***********************/
1339 elseif ($action == 'viewallassessments') {
1341 if (!$submission = get_record("workshop_submissions", "id", $sid)) {
1342 error("View All Assessments: submission record not found");
1345 if ($assessments = workshop_get_assessments($submission)) {
1346 foreach ($assessments as $assessment) {
1347 workshop_print_assessment($workshop, $assessment);
1350 // only called from list all submissions
1351 print_continue("submissions.php?action=listallsubmissions&id=$cm->id");
1354 /*************** no man's land **************************************/
1356 error("Fatal Error: Unknown Action: ".$action."\n");
1358 print_footer($course);