1 <?PHP
// $Id: lib.php,v 1.1 22 Aug 2003
3 /*************************************************
14 editelements (teachers only)
15 gradeassessment (teachers only)
17 insertelements (for teachers)
18 listungradedstudentsubmissions (for teachers)
19 listungradedteachersubmissions (for teachers)
20 listteachersubmissions
28 ************************************************/
30 require("../../config.php");
33 optional_variable($id); // Course Module ID
34 optional_variable($a); // workshop ID
36 // get some useful stuff...
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");
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
);
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",
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'] ?>">
101 <TABLE CELLPADDING
=5 BORDER
=1>
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";
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') {
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",
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'] ?>">
271 <TABLE CELLPADDING
=5 BORDER
=1>
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";
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>
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++
) {
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\"> </TD>\n";
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++
) {
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
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
, "");
363 echo "<TR valign=top>\n";
364 echo " <TD colspan=2 BGCOLOR=\"$THEME->cellheading2\"> </TD>\n";
369 case 2: // error banded grading
370 for ($i=0; $i<$workshop->nelements
; $i++
) {
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
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
, "");
384 echo "<TR valign=top>\n";
385 echo " <TD colspan=2 BGCOLOR=\"$THEME->cellheading2\"> </TD>\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--) {
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
, "");
405 echo "</TABLE></CENTER>\n";
408 case 3: // criterion grading
409 for ($j = 100; $j >= 0; $j--) {
412 for ($i=0; $i<$workshop->nelements
; $i++
) {
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
, "");
421 echo "<TR valign=top>\n";
422 echo " <TD colspan=2 BGCOLOR=\"$THEME->cellheading2\"> </TD>\n";
428 for ($j = 100; $j >= 0; $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++
) {
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
, "");
447 for ($j=0; $j<5; $j++
) {
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\"> </TD>\n";
463 // close table and form
466 <input type
="submit" value
="<?php print_string("savechanges
") ?>">
467 <input type
="submit" name
=cancel value
="<?php print_string("cancel
") ?>">
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--) {
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'] ?>">
512 <TABLE CELLPADDING
=5 BORDER
=1>
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";
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";
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') {
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) {
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!");
588 case 1: // accumulative grading
589 // Insert all the elements that contain something
590 foreach ($form->description
as $key => $description) {
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;
601 case 'selection' : $element->maxscore
= $WORKSHOP_SCALES[$form->scale
[$key]]['size'];
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!");
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) {
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!");
635 case 4: // ...and criteria grading
636 // Insert all the elements that contain something
637 foreach ($form->description
as $key => $description) {
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]))
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++
) {
657 if (empty($form->rubric
[$i][$j])) { // OK to have an element with fewer than 5 items
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!");
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");
719 foreach ($elementsraw as $element) {
720 $elements[] = $element; // to renumber index 0,1,2...
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) {
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
747 case 1: // accumulative grading
748 // Insert all the elements that contain something
749 foreach ($form->grade
as $key => $thegrade) {
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...
763 foreach ($form->grade
as $key => $grade) {
764 $maxscore = $elements[$key]->maxscore
;
765 $weight = $WORKSHOP_EWEIGHTS[$elements[$key]->weight
];
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);
775 case 2: // error banded graded
776 // Insert all the elements that contain something
778 for ($i =0; $i < $workshop->nelements
; $i++
) {
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
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";
806 case 3: // criteria grading
807 // save in the selected criteria value in element zero,
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
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;
828 case 4: // rubric grading (identical to accumulative grading)
829 // Insert all the elements that contain something
830 foreach ($form->grade
as $key => $thegrade) {
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...
844 foreach ($form->grade
as $key => $grade) {
845 $maxscore = $elements[$key]->maxscore
;
846 $weight = $WORKSHOP_EWEIGHTS[$elements[$key]->weight
];
848 $totalweight +
= $weight;
850 $rawgrade +
= ($grade / $maxscore) * $weight;
852 $grade = $workshop->grade
* ($rawgrade / $totalweight);
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
);
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
).")");
900 /****************** update comment (by author, assessor or teacher) ********************/
901 elseif ($action == 'updatecomment') {
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') {
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
) {
955 redirect("assessments.php?action=listungradedstudentsubmissions&id=$cm->id");
958 redirect("assessments.php?action=listungradedteachersubmissions&id=$cm->id");
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 **************************************/
1034 error("Fatal Error: Unknown Action: ".$action."\n");
1037 print_footer($course);