Too many bugs, not enough time!
[moodle.git] / mod / workshop / assessments.php
blob43597a6750cdf49302efa3c620c6bf86fca5591e
1 <?PHP // $Id: lib.php,v 1.1 22 Aug 2003
3 /*************************************************
4 ACTIONS handled are:
6 addcomment
7 adminconfirmdelete
8 admindelete
9 adminlist
10 agreeassessment
11 assesssubmission
12 displaygradingform
13 editcomment
14 editelements (teachers only)
15 gradeassessment (teachers only)
16 insertcomment
17 insertelements (for teachers)
18 listungradedstudentsubmissions (for teachers)
19 listungradedteachersubmissions (for teachers)
20 listteachersubmissions
21 updateassessment
22 updatecomment
23 updategrading
24 userconfirmdelete
25 userdelete
26 viewassessment
28 ************************************************/
30 require("../../config.php");
31 require("lib.php");
33 optional_variable($id); // Course Module ID
34 optional_variable($a); // workshop ID
36 // get some useful stuff...
37 if ($id) {
38 if (! $cm = get_record("course_modules", "id", $id)) {
39 error("Course Module ID was incorrect");
42 if (! $course = get_record("course", "id", $cm->course)) {
43 error("Course is misconfigured");
46 if (! $workshop = get_record("workshop", "id", $cm->instance)) {
47 error("Course module is incorrect");
50 } else {
51 if (! $workshop = get_record("workshop", "id", $a)) {
52 error("Course module is incorrect");
54 if (! $course = get_record("course", "id", $workshop->course)) {
55 error("Course is misconfigured");
57 if (! $cm = get_coursemodule_from_instance("workshop", $workshop->id, $course->id)) {
58 error("Course Module ID was incorrect");
62 require_login($course->id);
64 $navigation = "";
65 if ($course->category) {
66 $navigation = "<A HREF=\"../../course/view.php?id=$course->id\">$course->shortname</A> ->";
69 $strworkshops = get_string("modulenameplural", "workshop");
70 $strworkshop = get_string("modulename", "workshop");
71 $strassessments = get_string("assessments", "workshop");
73 // ... print the header and...
74 print_header("$course->shortname: $workshop->name", "$course->fullname",
75 "$navigation <A HREF=index.php?id=$course->id>$strworkshops</A> ->
76 <A HREF=\"view.php?a=$workshop->id\">$workshop->name</A> -> $strassessments",
77 "", "", true);
79 //...get the action
80 require_variable($action);
83 /*************** add comment to assessment (by author, assessor or teacher) ***************************/
84 if ($action == 'addcomment') {
86 print_heading_with_help(get_string("addacomment", "workshop"), "addingacomment", "workshop");
87 // get assessment record
88 if (!$assessmentid = $_REQUEST['aid']) { // comes from link or hidden form variable
89 error("Assessment id not given");
91 $assessment = get_record("workshop_assessments", "id", $assessmentid);
92 if (!$submission = get_record("workshop_submissions", "id", $assessment->submissionid)) {
93 error("Submission not found");
96 <FORM NAME="commentform" ACTION="assessments.php" METHOD="post">
97 <INPUT TYPE="HIDDEN" NAME="action" VALUE="insertcomment">
98 <INPUT TYPE="HIDDEN" NAME="id" VALUE="<?PHP echo $cm->id ?>">
99 <INPUT TYPE="HIDDEN" NAME="aid" VALUE="<?PHP echo $_REQUEST['aid'] ?>">
100 <CENTER>
101 <TABLE CELLPADDING=5 BORDER=1>
102 <?PHP
104 // now get the comment
105 echo "<TR valign=top>\n";
106 echo " <TD align=right><P><B>". get_string("comment", "workshop").":</B></P></TD>\n";
107 echo " <TD>\n";
108 echo " <textarea name=\"comments\" rows=5 cols=75 wrap=\"virtual\">\n";
109 echo "</textarea>\n";
110 echo " </TD></TR></TABLE>\n";
111 echo "<INPUT TYPE=submit VALUE=\"".get_string("savemycomment", "workshop")."\">\n";
112 echo "</CENTER></FORM>\n";
113 echo "<P><CENTER><B>".get_string("assessment", "workshop"). "</B></CENTER>\n";
114 workshop_print_assessment($workshop, $assessment);
118 /******************* admin confirm delete ************************************/
119 elseif ($action == 'adminconfirmdelete' ) {
121 if (!isteacher($course->id)) {
122 error("Only teachers can look at this page");
124 if (empty($_GET['aid'])) {
125 error("Admin confirm delete: assessment id missing");
128 notice_yesno(get_string("confirmdeletionofthisitem","workshop", get_string("assessment", "workshop")),
129 "assessments.php?action=admindelete&id=$cm->id&aid=$_GET[aid]", "submissions.php?action=adminlist&id=$cm->id");
133 /******************* admin delete ************************************/
134 elseif ($action == 'admindelete' ) {
136 if (!isteacher($course->id)) {
137 error("Only teachers can look at this page");
139 if (empty($_GET['aid'])) {
140 error("Admin delete: submission id missing");
143 print_string("deleting", "workshop");
144 // first delete all the associated records...
145 delete_records("workshop_comments", "assessmentid", $_GET['aid']);
146 delete_records("workshop_grades", "assessmentid", $_GET['aid']);
147 // ...now delete the assessment...
148 delete_records("workshop_assessments", "id", $_GET['aid']);
150 print_continue("submissions.php?id=$cm->id&action=adminlist");
154 /*********************** admin list of asssessments (of a submission) (by teachers)**************/
155 elseif ($action == 'adminlist') {
157 if (!isteacher($course->id)) {
158 error("Only teachers can look at this page");
161 if (empty($_GET['sid'])) {
162 error ("Workshop asssessments: adminlist called with no sid");
164 $submission = get_record("workshop_submissions", "id", $_GET['sid']);
165 workshop_print_assessments_for_admin($workshop, $submission);
166 print_continue("submissions.php?action=adminlist&a=$workshop->id");
170 /*********************** admin list of asssessments by a student (used by teachers only )******************/
171 elseif ($action == 'adminlistbystudent') {
173 if (!isteacher($course->id)) {
174 error("Only teachers can look at this page");
177 if (empty($_GET['userid'])) {
178 error ("Workshop asssessments: adminlistbystudent called with no userid");
180 $user = get_record("user", "id", $_GET['userid']);
181 workshop_print_assessments_by_user_for_admin($workshop, $user);
182 print_continue("submissions.php?action=adminlist&a=$workshop->id");
186 /*************** agree (to) assessment (by student) ***************************/
187 elseif ($action == 'agreeassessment') {
188 $timenow = time();
189 // assessment id comes from link or hidden form variable
190 if (!$assessment = get_record("workshop_assessments", "id", $_REQUEST['aid'])) {
191 error("Assessment : agree assessment failed");
193 //save time of agreement
194 set_field("workshop_assessments", "timeagreed", $timenow, "id", $assessment->id);
195 echo "<CENTRE><B>".get_string("savedok", "workshop")."</B></CENTER><BR>\n";
197 add_to_log($course->id, "workshop", "agree", "assessments.php?action=viewassessment&id=$cm->id&aid=$assessment->id", "$assessment->id");
198 print_continue("view.php?id=$cm->id");
202 /*************** Assess submission (by teacher or student) ***************************/
203 elseif ($action == 'assesssubmission') {
205 require_variable($sid);
207 optional_variable($allowcomments);
208 if (!isset($allowcomments)) {
209 $allowcomments = false;
212 if (! $submission = get_record("workshop_submissions", "id", $sid)) {
213 error("Assess submission is misconfigured - no submission record!");
216 // there can be an assessment record (for teacher submissions), if there isn't...
217 if (!$assessment = get_record("workshop_assessments", "submissionid", $submission->id, "userid",
218 $USER->id)) {
219 $yearfromnow = time() + 365 * 86400;
220 // ...create one and set timecreated way in the future, this is reset when record is updated
221 $assessment->workshopid = $workshop->id;
222 $assessment->submissionid = $submission->id;
223 $assessment->userid = $USER->id;
224 $assessment->grade = -1; // set impossible grade
225 $assessment->timecreated = $yearfromnow;
226 $assessment->timegraded = 0;
227 $assessment->timeagreed = 0;
228 $assessment->resubmission = 0;
229 if (!$assessment->id = insert_record("workshop_assessments", $assessment)) {
230 error("Could not insert workshop assessment!");
234 print_heading_with_help(get_string("assessthissubmission", "workshop"), "grading", "workshop");
236 // show assessment and allow changes
237 workshop_print_assessment($workshop, $assessment, true, $allowcomments, $_SERVER["HTTP_REFERER"]);
241 /*************** display grading form (viewed by student) *********************************/
242 elseif ($action == 'displaygradingform') {
244 print_heading_with_help(get_string("specimenassessmentform", "workshop"), "specimen", "workshop");
246 workshop_print_assessment($workshop); // called with no assessment
247 print_continue("view.php?a=$workshop->id");
251 /*************** edit comment on assessment (by author, assessor or teacher) ***************************/
252 elseif ($action == 'editcomment') {
254 print_heading_with_help(get_string("editacomment", "workshop"), "editingacomment", "workshop");
255 // get the comment record...
256 if (!$comment = get_record("workshop_comments", "id", $_GET['cid'])) {
257 error("Edit Comment: Comment not found");
259 if (!$assessment = get_record("workshop_assessments", "id", $comment->assessmentid)) {
260 error("Edit Comment: Assessment not found");
262 if (!$submission = get_record("workshop_submissions", "id", $assessment->submissionid)) {
263 error("Edit Comment: Submission not found");
266 <FORM NAME="gradingform" ACTION="assessments.php" METHOD="post">
267 <INPUT TYPE="HIDDEN" NAME="action" VALUE="updatecomment">
268 <INPUT TYPE="HIDDEN" NAME="id" VALUE="<?PHP echo $cm->id ?>">
269 <INPUT TYPE="HIDDEN" NAME="cid" VALUE="<?PHP echo $_GET['cid'] ?>">
270 <CENTER>
271 <TABLE CELLPADDING=5 BORDER=1>
272 <?PHP
274 // now show the comment
275 echo "<TR valign=top>\n";
276 echo " <TD align=right><P><B>". get_string("comment", "workshop").":</B></P></TD>\n";
277 echo " <TD>\n";
278 echo " <textarea name=\"comments\" rows=5 cols=75 wrap=\"virtual\">\n";
279 if (isset($comment->comments)) {
280 echo $comment->comments;
282 echo " </textarea>\n";
283 echo " </TD></TR></TABLE>\n";
284 echo "<INPUT TYPE=submit VALUE=\"".get_string("savemycomment", "workshop")."\">\n";
285 echo "</CENTER></FORM>\n";
286 workshop_print_assessment($workshop, $assessment);
290 /*********************** edit assessment elements (for teachers) ***********************/
291 elseif ($action == 'editelements') {
293 if (!isteacher($course->id)) {
294 error("Only teachers can look at this page");
297 $count = count_records("workshop_grades", "workshop", $workshop->id);
298 if ($workshop->phase > 1 and $count) {
299 notify(get_string("warningonamendingelements", "workshop"));
301 // set up heading, form and table
302 print_heading_with_help(get_string("editingassessmentelements", "workshop"), "elements", "workshop");
304 <form name="form" method="post" action="assessments.php">
305 <input type="hidden" name="id" value="<?PHP echo $cm->id ?>">
306 <input type="hidden" name="action" value="insertelements">
307 <CENTER><TABLE cellpadding=5 border=1>
308 <?PHP
310 // get existing elements, if none set up appropriate default ones
311 if ($elementsraw = get_records("workshop_elements", "workshopid", $workshop->id, "elementno ASC" )) {
312 foreach ($elementsraw as $element) {
313 $elements[] = $element; // to renumber index 0,1,2...
316 // check for missing elements (this happens either the first time round or when the number of elements is icreased)
317 for ($i=0; $i<$workshop->nelements; $i++) {
318 if (!isset($elements[$i])) {
319 $elements[$i]->description = '';
320 $elements[$i]->scale =0;
321 $elements[$i]->maxscore = 0;
322 $elements[$i]->weight = 11;
326 switch ($workshop->gradingstrategy) {
327 case 0: // no grading
328 for ($i=0; $i<$workshop->nelements; $i++) {
329 $iplus1 = $i+1;
330 echo "<TR valign=top>\n";
331 echo " <TD ALIGN=RIGHT><P><B>". get_string("element","workshop")." $iplus1:</B></TD>\n";
332 echo "<TD><textarea name=\"description[]\" rows=3 cols=75 wrap=\"virtual\">".$elements[$i]->description."</textarea>\n";
333 echo " </TD></TR>\n";
334 echo "<TR valign=top>\n";
335 echo " <TD colspan=2 BGCOLOR=\"$THEME->cellheading2\">&nbsp;</TD>\n";
336 echo "</TR>\n";
338 break;
340 case 1: // accumulative grading
341 // set up scales name
342 foreach ($WORKSHOP_SCALES as $KEY => $SCALE) {
343 $SCALES[] = $SCALE['name'];
345 for ($i=0; $i<$workshop->nelements; $i++) {
346 $iplus1 = $i+1;
347 echo "<TR valign=top>\n";
348 echo " <TD ALIGN=RIGHT><P><B>". get_string("element","workshop")." $iplus1:</B></TD>\n";
349 echo "<TD><textarea name=\"description[]\" rows=3 cols=75 wrap=\"virtual\">".$elements[$i]->description."</textarea>\n";
350 echo " </TD></TR>\n";
351 echo "<TR valign=top>\n";
352 echo " <TD align=right><P><B>". get_string("typeofscale", "workshop"). ":</B></P></TD>\n";
353 echo "<TD valign=\"top\">\n";
354 choose_from_menu($SCALES, "scale[]", $elements[$i]->scale, "");
355 if ($elements[$i]->weight == '') { // not set
356 $elements[$i]->weight = 11; // unity
358 echo "</TR>\n";
359 echo "<TR valign=top><TD ALIGN=RIGHT><B>".get_string("elementweight", "workshop").":</B></TD><TD>\n";
360 workshop_choose_from_menu($WORKSHOP_EWEIGHTS, "weight[]", $elements[$i]->weight, "");
361 echo " </TD>\n";
362 echo "</TR>\n";
363 echo "<TR valign=top>\n";
364 echo " <TD colspan=2 BGCOLOR=\"$THEME->cellheading2\">&nbsp;</TD>\n";
365 echo "</TR>\n";
367 break;
369 case 2: // error banded grading
370 for ($i=0; $i<$workshop->nelements; $i++) {
371 $iplus1 = $i+1;
372 echo "<TR valign=top>\n";
373 echo " <TD ALIGN=RIGHT><P><B>". get_string("element","workshop")." $iplus1:</B></TD>\n";
374 echo "<TD><textarea name=\"description[$i]\" rows=3 cols=75 wrap=\"virtual\">".$elements[$i]->description."</textarea>\n";
375 echo " </TD></TR>\n";
376 if ($elements[$i]->weight == '') { // not set
377 $elements[$i]->weight = 11; // unity
379 echo "</TR>\n";
380 echo "<TR valign=top><TD ALIGN=RIGHT><B>".get_string("elementweight", "workshop").":</B></TD><TD>\n";
381 workshop_choose_from_menu($WORKSHOP_EWEIGHTS, "weight[]", $elements[$i]->weight, "");
382 echo " </TD>\n";
383 echo "</TR>\n";
384 echo "<TR valign=top>\n";
385 echo " <TD colspan=2 BGCOLOR=\"$THEME->cellheading2\">&nbsp;</TD>\n";
386 echo "</TR>\n";
388 echo "</CENTER></TABLE><BR>\n";
389 echo "<P><CENTER><B>".get_string("gradetable","workshop")."</B></CENTER>\n";
390 echo "<CENTER><TABLE cellpadding=5 border=1><TR><TD ALIGN=\"CENTER\">".
391 get_string("numberofnegativeresponses", "workshop");
392 echo "</TD><TD>". get_string("suggestedgrade", "workshop")."</TD></TR>\n";
393 for ($j = $workshop->grade; $j >= 0; $j--) {
394 $numbers[$j] = $j;
396 for ($i=0; $i<=$workshop->nelements; $i++) {
397 echo "<TR><TD ALIGN=\"CENTER\">$i</TD><TD ALIGN=\"CENTER\">";
398 if (!isset($elements[$i])) { // the "last one" will be!
399 $elements[$i]->description = "";
400 $elements[$i]->maxscore = 0;
402 choose_from_menu($numbers, "maxscore[$i]", $elements[$i]->maxscore, "");
403 echo "</TD></TR>\n";
405 echo "</TABLE></CENTER>\n";
406 break;
408 case 3: // criterion grading
409 for ($j = 100; $j >= 0; $j--) {
410 $numbers[$j] = $j;
412 for ($i=0; $i<$workshop->nelements; $i++) {
413 $iplus1 = $i+1;
414 echo "<TR valign=top>\n";
415 echo " <TD ALIGN=RIGHT><P><B>". get_string("criterion","workshop")." $iplus1:</B></TD>\n";
416 echo "<TD><textarea name=\"description[$i]\" rows=3 cols=75 wrap=\"virtual\">".$elements[$i]->description."</textarea>\n";
417 echo " </TD></TR>\n";
418 echo "<TR><TD><B>". get_string("suggestedgrade", "workshop").":</B></TD><TD>\n";
419 choose_from_menu($numbers, "maxscore[$i]", $elements[$i]->maxscore, "");
420 echo "</TD></TR>\n";
421 echo "<TR valign=top>\n";
422 echo " <TD colspan=2 BGCOLOR=\"$THEME->cellheading2\">&nbsp;</TD>\n";
423 echo "</TR>\n";
425 break;
427 case 4: // rubric
428 for ($j = 100; $j >= 0; $j--) {
429 $numbers[$j] = $j;
431 if ($rubricsraw = get_records("workshop_rubrics", "workshopid", $workshop->id)) {
432 foreach ($rubricsraw as $rubric) {
433 $rubrics[$rubric->elementno][$rubric->rubricno] = $rubric->description; // reindex 0,1,2...
436 for ($i=0; $i<$workshop->nelements; $i++) {
437 $iplus1 = $i+1;
438 echo "<TR valign=top>\n";
439 echo " <TD ALIGN=RIGHT><P><B>". get_string("element","workshop")." $iplus1:</B></TD>\n";
440 echo "<TD><textarea name=\"description[$i]\" rows=3 cols=75 wrap=\"virtual\">".$elements[$i]->description."</textarea>\n";
441 echo " </TD></TR>\n";
442 echo "<TR valign=top><TD ALIGN=RIGHT><B>".get_string("elementweight", "workshop").":</B></TD><TD>\n";
443 workshop_choose_from_menu($WORKSHOP_EWEIGHTS, "weight[]", $elements[$i]->weight, "");
444 echo " </TD>\n";
445 echo "</TR>\n";
447 for ($j=0; $j<5; $j++) {
448 $jplus1 = $j+1;
449 if (empty($rubrics[$i][$j])) {
450 $rubrics[$i][$j] = "";
452 echo "<TR valign=top>\n";
453 echo " <TD ALIGN=RIGHT><P><B>". get_string("grade","workshop")." $j:</B></TD>\n";
454 echo "<TD><textarea name=\"rubric[$i][$j]\" rows=3 cols=75 wrap=\"virtual\">".$rubrics[$i][$j]."</textarea>\n";
455 echo " </TD></TR>\n";
457 echo "<TR valign=top>\n";
458 echo " <TD colspan=2 BGCOLOR=\"$THEME->cellheading2\">&nbsp;</TD>\n";
459 echo "</TR>\n";
461 break;
463 // close table and form
465 </TABLE>
466 <input type="submit" value="<?php print_string("savechanges") ?>">
467 <input type="submit" name=cancel value="<?php print_string("cancel") ?>">
468 </CENTER>
469 </FORM>
470 <?PHP
474 /*************** grade (student's) assessment (by teacher) ***************************/
475 elseif ($action == 'gradeassessment') {
477 if (!isteacher($course->id)) {
478 error("Only teachers can look at this page");
481 // set up coment scale
482 for ($i=COMMENTSCALE; $i>=0; $i--) {
483 $num[$i] = $i;
486 print_heading_with_help(get_string("gradeassessment", "workshop"), "gradingassessments", "workshop");
487 // get assessment record
488 if (!$assessmentid = $_GET['aid']) {
489 error("Assessment id not given");
491 $assessment = get_record("workshop_assessments", "id", $assessmentid);
492 if (!$submission = get_record("workshop_submissions", "id", $assessment->submissionid)) {
493 error("Submission not found");
495 // get the teacher's assessment first
496 if ($teachersassessment = workshop_get_submission_assessment($submission, $USER)) {
497 echo "<P><CENTER><B>".get_string("teacherassessments", "workshop", $course->teacher)."</B></CENTER>\n";
498 workshop_print_assessment($workshop, $teachersassessment);
500 // now the student's assessment (don't allow changes)
501 $user = get_record("user", "id", $assessment->userid);
502 echo "<P><CENTER><B>".get_string("assessmentby", "workshop", $user->firstname." ".$user->lastname)."</B></CENTER>\n";
503 workshop_print_assessment($workshop, $assessment);
506 <FORM NAME="gradingform" ACTION="assessments.php" METHOD="post">
507 <INPUT TYPE="HIDDEN" NAME="action" VALUE="updategrading">
508 <INPUT TYPE="HIDDEN" NAME="id" VALUE="<?PHP echo $cm->id ?>">
509 <INPUT TYPE="HIDDEN" NAME="stype" VALUE="<?PHP echo $_GET['stype'] ?>">
510 <INPUT TYPE="HIDDEN" NAME="aid" VALUE="<?PHP echo $_GET['aid'] ?>">
511 <CENTER>
512 <TABLE CELLPADDING=5 BORDER=1>
513 <?PHP
515 // now get the teacher's comment
516 echo "<TR valign=top>\n";
517 echo " <TD align=right><P><B>". get_string("teacherscomment", "workshop").":</B></P></TD>\n";
518 echo " <TD>\n";
519 echo " <textarea name=\"teachercomment\" rows=5 cols=75 wrap=\"virtual\">\n";
520 if (isset($assessment->teachercomment)) {
521 echo $assessment->teachercomment;
523 echo "</textarea>\n";
524 echo " </TD>\n";
525 echo "</TR>\n";
526 echo "<TR><TD ALIGN=RIGHT><B>".get_string("gradeforstudentsassessment", "workshop")."</TD><TD>\n";
527 choose_from_menu($num, "gradinggrade", $assessment->gradinggrade, "");
528 echo "</TD></TR></TABLE>\n";
529 echo "<INPUT TYPE=submit VALUE=\"".get_string("savemygrading", "workshop")."\">\n";
530 echo "</CENTER></FORM>\n";
534 /*************** insert (new) comment (by author, assessor or teacher) ***************************/
535 elseif ($action == 'insertcomment') {
536 $timenow = time();
538 $form = (object)$_POST;
540 if (!$assessment = get_record("workshop_assessments", "id", $_POST['aid'])) {
541 error("Unable to insert comment");
543 // save the comment...
544 $comment->workshopid = $workshop->id;
545 $comment->assessmentid = $assessment->id;
546 $comment->userid = $USER->id;
547 $comment->timecreated = $timenow;
548 $comment->comments = $form->comments;
549 if (!$comment->id = insert_record("workshop_comments", $comment)) {
550 error("Could not insert workshop comment!");
553 add_to_log($course->id, "workshop", "comment", "view.php?id=$cm->id", "$comment->id");
555 print_continue("assessments.php?action=viewassessment&id=$cm->id&aid=$assessment->id");
559 /*********************** insert/update assignment elements (for teachers)***********************/
560 elseif ($action == 'insertelements') {
562 if (!isteacher($course->id)) {
563 error("Only teachers can look at this page");
566 $form = (object)$HTTP_POST_VARS;
568 // let's not fool around here, dump the junk!
569 delete_records("workshop_elements", "workshopid", $workshop->id);
571 // determine wich type of grading
572 switch ($workshop->gradingstrategy) {
573 case 0: // no grading
574 // Insert all the elements that contain something
575 foreach ($form->description as $key => $description) {
576 if ($description) {
577 unset($element);
578 $element->description = $description;
579 $element->workshopid = $workshop->id;
580 $element->elementno = $key;
581 if (!$element->id = insert_record("workshop_elements", $element)) {
582 error("Could not insert workshop element!");
586 break;
588 case 1: // accumulative grading
589 // Insert all the elements that contain something
590 foreach ($form->description as $key => $description) {
591 if ($description) {
592 unset($element);
593 $element->description = $description;
594 $element->workshopid = $workshop->id;
595 $element->elementno = $key;
596 if (isset($form->scale[$key])) {
597 $element->scale = $form->scale[$key];
598 switch ($WORKSHOP_SCALES[$form->scale[$key]]['type']) {
599 case 'radio' : $element->maxscore = $WORKSHOP_SCALES[$form->scale[$key]]['size'] - 1;
600 break;
601 case 'selection' : $element->maxscore = $WORKSHOP_SCALES[$form->scale[$key]]['size'];
602 break;
605 if (isset($form->weight[$key])) {
606 $element->weight = $form->weight[$key];
608 if (!$element->id = insert_record("workshop_elements", $element)) {
609 error("Could not insert workshop element!");
613 break;
615 case 2: // error banded grading...
616 case 3: // ...and criterion grading
617 // Insert all the elements that contain something, the number of descriptions is one less than the number of grades
618 foreach ($form->maxscore as $key => $themaxscore) {
619 unset($element);
620 $element->workshopid = $workshop->id;
621 $element->elementno = $key;
622 $element->maxscore = $themaxscore;
623 if (isset($form->description[$key])) {
624 $element->description = $form->description[$key];
626 if (isset($form->weight[$key])) {
627 $element->weight = $form->weight[$key];
629 if (!$element->id = insert_record("workshop_elements", $element)) {
630 error("Could not insert workshop element!");
633 break;
635 case 4: // ...and criteria grading
636 // Insert all the elements that contain something
637 foreach ($form->description as $key => $description) {
638 unset($element);
639 $element->workshopid = $workshop->id;
640 $element->elementno = $key;
641 $element->description = $description;
642 $element->weight = $form->weight[$key];
643 for ($j=0;$j<5;$j++) {
644 if (empty($form->rubric[$key][$j]))
645 break;
647 $element->maxscore = $j - 1;
648 if (!$element->id = insert_record("workshop_elements", $element)) {
649 error("Could not insert workshop element!");
652 // let's not fool around here, dump the junk!
653 delete_records("workshop_rubrics", "workshopid", $workshop->id);
654 for ($i=0;$i<$workshop->nelements;$i++) {
655 for ($j=0;$j<5;$j++) {
656 unset($element);
657 if (empty($form->rubric[$i][$j])) { // OK to have an element with fewer than 5 items
658 break;
660 $element->workshopid = $workshop->id;
661 $element->elementno = $i;
662 $element->rubricno = $j;
663 $element->description = $form->rubric[$i][$j];
664 if (!$element->id = insert_record("workshop_rubrics", $element)) {
665 error("Could not insert workshop element!");
669 break;
670 } // end of switch
672 redirect("view.php?id=$cm->id", get_string("savedok","workshop"));
676 /*********************** list assessments for grading (Student submissions)(by teachers)***********************/
677 elseif ($action == 'listungradedstudentsubmissions') {
679 if (!isteacher($course->id)) {
680 error("Only teachers can look at this page");
682 workshop_list_ungraded_assessments($workshop, "student");
683 print_continue("view.php?a=$workshop->id");
687 /*********************** list assessments for grading (Teacher submissions) (by teachers)***********************/
688 elseif ($action == 'listungradedteachersubmissions') {
690 if (!isteacher($course->id)) {
691 error("Only teachers can look at this page");
693 workshop_list_ungraded_assessments($workshop, "teacher");
694 print_continue("view.php?a=$workshop->id");
698 /****************** list teacher submissions ***********************/
699 elseif ($action == 'listteachersubmissions') {
701 workshop_list_teacher_submissions($workshop, $USER);
702 print_continue("view.php?a=$workshop->id");
706 /*************** update assessment (by teacher or student) ***************************/
707 elseif ($action == 'updateassessment') {
709 require_variable($aid);
710 if (! $assessment = get_record("workshop_assessments", "id", $aid)) {
711 error("workshop assessment is misconfigured");
714 // first get the assignment elements for maxscores and weights...
715 if (!$elementsraw = get_records("workshop_elements", "workshopid", $workshop->id, "elementno ASC")) {
716 print_string("noteonassignmentelements", "workshop");
718 else {
719 foreach ($elementsraw as $element) {
720 $elements[] = $element; // to renumber index 0,1,2...
724 $timenow = time();
725 // don't fiddle about, delete all the old and add the new!
726 delete_records("workshop_grades", "assessmentid", $assessment->id);
728 $form = (object)$HTTP_POST_VARS;
730 //determine what kind of grading we have
731 switch ($workshop->gradingstrategy) {
732 case 0: // no grading
733 // Insert all the elements that contain something
734 foreach ($form->feedback as $key => $thefeedback) {
735 unset($element);
736 $element->workshopid = $workshop->id;
737 $element->assessmentid = $assessment->id;
738 $element->elementno = $key;
739 $element->feedback = $thefeedback;
740 if (!$element->id = insert_record("workshop_grades", $element)) {
741 error("Could not insert workshop element!");
744 $grade = 0; // set to satisfy save to db
745 break;
747 case 1: // accumulative grading
748 // Insert all the elements that contain something
749 foreach ($form->grade as $key => $thegrade) {
750 unset($element);
751 $element->workshopid = $workshop->id;
752 $element->assessmentid = $assessment->id;
753 $element->elementno = $key;
754 $element->feedback = $form->feedback[$key];
755 $element->grade = $thegrade;
756 if (!$element->id = insert_record("workshop_grades", $element)) {
757 error("Could not insert workshop element!");
760 // now work out the grade...
761 $rawgrade=0;
762 $totalweight=0;
763 foreach ($form->grade as $key => $grade) {
764 $maxscore = $elements[$key]->maxscore;
765 $weight = $WORKSHOP_EWEIGHTS[$elements[$key]->weight];
766 if ($weight > 0) {
767 $totalweight += $weight;
769 $rawgrade += ($grade / $maxscore) * $weight;
770 // echo "\$key, \$maxscore, \$weight, \$totalweight, \$grade, \$rawgrade : $key, $maxscore, $weight, $totalweight, $grade, $rawgrade<BR>";
772 $grade = $workshop->grade * ($rawgrade / $totalweight);
773 break;
775 case 2: // error banded graded
776 // Insert all the elements that contain something
777 $error = 0.0;
778 for ($i =0; $i < $workshop->nelements; $i++) {
779 unset($element);
780 $element->workshopid = $workshop->id;
781 $element->assessmentid = $assessment->id;
782 $element->elementno = $i;
783 $element->feedback = $form->feedback[$i];
784 $element->grade = $form->grade[$i];
785 if (!$element->id = insert_record("workshop_grades", $element)) {
786 error("Could not insert workshop element!");
788 if (empty($form->grade[$i])){
789 $error += $WORKSHOP_EWEIGHTS[$elements[$i]->weight];
792 // now save the adjustment
793 unset($element);
794 $i = $workshop->nelements;
795 $element->workshopid = $workshop->id;
796 $element->assessmentid = $assessment->id;
797 $element->elementno = $i;
798 $element->grade = $form->grade[$i];
799 if (!$element->id = insert_record("workshop_grades", $element)) {
800 error("Could not insert workshop element!");
802 $grade = ($elements[intval($error + 0.5)]->maxscore + $form->grade[$i]);
803 echo "<P><B>".get_string("weightederrorcount", "workshop", intval($error + 0.5))."</B>\n";
804 break;
806 case 3: // criteria grading
807 // save in the selected criteria value in element zero,
808 unset($element);
809 $element->workshopid = $workshop->id;
810 $element->assessmentid = $assessment->id;
811 $element->elementno = 0;
812 $element->grade = $form->grade[0];
813 if (!$element->id = insert_record("workshop_grades", $element)) {
814 error("Could not insert workshop element!");
816 // now save the adjustment in element one
817 unset($element);
818 $element->workshopid = $workshop->id;
819 $element->assessmentid = $assessment->id;
820 $element->elementno = 1;
821 $element->grade = $form->grade[1];
822 if (!$element->id = insert_record("workshop_grades", $element)) {
823 error("Could not insert workshop element!");
825 $grade = ($elements[$form->grade[0]]->maxscore + $form->grade[1]) * $workshop->grade / 100;
826 break;
828 case 4: // rubric grading (identical to accumulative grading)
829 // Insert all the elements that contain something
830 foreach ($form->grade as $key => $thegrade) {
831 unset($element);
832 $element->workshopid = $workshop->id;
833 $element->assessmentid = $assessment->id;
834 $element->elementno = $key;
835 $element->feedback = $form->feedback[$key];
836 $element->grade = $thegrade;
837 if (!$element->id = insert_record("workshop_grades", $element)) {
838 error("Could not insert workshop element!");
841 // now work out the grade...
842 $rawgrade=0;
843 $totalweight=0;
844 foreach ($form->grade as $key => $grade) {
845 $maxscore = $elements[$key]->maxscore;
846 $weight = $WORKSHOP_EWEIGHTS[$elements[$key]->weight];
847 if ($weight > 0) {
848 $totalweight += $weight;
850 $rawgrade += ($grade / $maxscore) * $weight;
852 $grade = $workshop->grade * ($rawgrade / $totalweight);
853 break;
855 } // end of switch
857 // update the time of the assessment record (may be re-edited)...
858 set_field("workshop_assessments", "timecreated", $timenow, "id", $assessment->id);
860 if (!$submission = get_record("workshop_submissions", "id", $assessment->submissionid)) {
861 error ("Updateassessment: submission record not found");
864 // if the workshop does need peer agreement AND it's self assessment then set timeagreed
865 if ($workshop->agreeassessments and ($submission->userid == $assessment->userid)) {
866 set_field("workshop_assessments", "timeagreed", $timenow, "id", $assessment->id);
869 set_field("workshop_assessments", "grade", $grade, "id", $assessment->id);
870 // ...and clear any grading of this assessment...
871 set_field("workshop_assessments", "timegraded", 0, "id", $assessment->id);
872 set_field("workshop_assessments", "gradinggrade", 0, "id", $assessment->id);
873 // ...and the resubmission flag
874 set_field("workshop_assessments", "resubmission", 0, "id", $assessment->id);
876 // any comment?
877 if (!empty($form->generalcomment)) {
878 set_field("workshop_assessments", "generalcomment", $form->generalcomment, "id", $assessment->id);
881 add_to_log($course->id, "workshop", "assess",
882 "assessments.php?action=viewassessment&id=$cm->id&aid=$assessment->id", "$assessment->id", "$cm->id");
884 // set up return address
885 if (!$returnto = $form->returnto) {
886 $returnto = "view.php?id=$cm->id";
889 // show grade if grading strategy is not zero
890 if ($workshop->gradingstrategy) {
891 redirect($returnto, get_string("thegradeis", "workshop").": ".number_format($grade, 2).
892 " (".get_string("maximumgrade")." ".number_format($workshop->grade).")");
894 else {
895 redirect($returnto);
900 /****************** update comment (by author, assessor or teacher) ********************/
901 elseif ($action == 'updatecomment') {
902 $timenow = time();
904 $form = (object)$_POST;
906 // get the comment record...
907 if (!$comment = get_record("workshop_comments", "id", $_POST['cid'])) {
908 error("Update to Comment failed");
910 if (!$assessment = get_record("workshop_assessments", "id", $comment->assessmentid)) {
911 error("Update Comment: Assessment not found");
913 //save the comment for the assessment...
914 if (isset($form->comments)) {
915 set_field("workshop_comments", "comments", $form->comments, "id", $comment->id);
916 set_field("workshop_comments", "timecreated", $timenow, "id", $comment->id);
917 // ..and kick to comment into life (probably not needed but just in case)
918 set_field("workshop_comments", "mailed", 0, "id", $comment->id);
919 echo "<CENTRE><B>".get_string("savedok", "workshop")."</B></CENTER><BR>\n";
921 add_to_log($course->id, "workshop", "comment",
922 "assessments.php?action=viewassessment&id=$cm->id&aid=$assessment->id", "$comment->id");
925 print_continue("assessments.php?action=viewassessment&id=$cm->id&aid=$assessment->id");
929 /****************** update grading (by teacher) ***************************/
930 elseif ($action == 'updategrading') {
931 $timenow = time();
933 if (!isteacher($course->id)) {
934 error("Only teachers can look at this page");
937 $form = (object)$_POST;
939 if (!$assessment = get_record("workshop_assessments", "id", $_POST['aid'])) {
940 error("Update Grading failed");
942 //save the comment and grade for the assessment
943 if (isset($form->teachercomment)) {
944 set_field("workshop_assessments", "teachercomment", $form->teachercomment, "id", $assessment->id);
945 set_field("workshop_assessments", "gradinggrade", $form->gradinggrade, "id", $assessment->id);
946 set_field("workshop_assessments", "timegraded", $timenow, "id", $assessment->id);
947 set_field("workshop_assessments", "mailed", 0, "id", $assessment->id);
948 echo "<CENTRE><B>".get_string("savedok", "workshop")."</B></CENTRE><BR>\n";
950 add_to_log($course->id, "workshop", "grade",
951 "assessments.php?action=viewassessment&id=$cm->id&aid=$assessment->id", "$assessment->id", "$cm->id");
953 switch ($form->stype) {
954 case "student" :
955 redirect("assessments.php?action=listungradedstudentsubmissions&id=$cm->id");
956 break;
957 case "teacher" :
958 redirect("assessments.php?action=listungradedteachersubmissions&id=$cm->id");
959 break;
964 /****************** user confirm delete ************************************/
965 elseif ($action == 'userconfirmdelete' ) {
967 if (empty($_GET['aid'])) {
968 error("User confirm delete: assessment id missing");
971 notice_yesno(get_string("confirmdeletionofthisitem","workshop",
972 get_string("assessment", "workshop")),
973 "assessments.php?action=userdelete&id=$cm->id&aid=$_GET[aid]", "view.php?id=$cm->id");
977 /****************** user delete ************************************/
978 elseif ($action == 'userdelete' ) {
980 if (empty($_GET['aid'])) {
981 error("User delete: assessment id missing");
984 print_string("deleting", "workshop");
985 // first delete all the associated records...
986 delete_records("workshop_comments", "assessmentid", $_GET['aid']);
987 delete_records("workshop_grades", "assessmentid", $_GET['aid']);
988 // ...now delete the assessment...
989 delete_records("workshop_assessments", "id", $_GET['aid']);
991 print_continue("view.php?id=$cm->id");
995 /****************** view all assessments ***********************/
996 elseif ($action == 'viewallassessments') {
998 if (!$submission = get_record("workshop_submissions", "id", $_GET['sid'])) {
999 error("View All Assessments: submission record not found");
1002 if ($assessments = workshop_get_assessments($submission)) {
1003 foreach ($assessments as $assessment) {
1004 workshop_print_assessment($workshop, $assessment);
1007 // only called from list all submissions
1008 print_continue("submissions.php?action=listallsubmissions&id=$cm->id");
1012 /****************** view assessment *****************************/
1013 elseif ($action == 'viewassessment') {
1015 optional_variable($allowcomments);
1016 if (!isset($allowcomments)) {
1017 $allowcomments = false;
1020 // get the assessment record
1021 if (!$assessment = get_record("workshop_assessments", "id", $_GET['aid'])) {
1022 error("Assessment record not found");
1025 // show assessment but don't allow changes
1026 workshop_print_assessment($workshop, $assessment, false, $allowcomments);
1028 print_continue("view.php?a=$workshop->id");
1032 /*************** no man's land **************************************/
1033 else {
1034 error("Fatal Error: Unknown Action: ".$action."\n");
1037 print_footer($course);