course)) { error("Course is misconfigured"); } if (! $workshop = get_record("workshop", "id", $cm->instance)) { error("Course module is incorrect"); } require_login($course->id); $navigation = ""; if ($course->category) { $navigation = "id\">$course->shortname ->"; } $strworkshops = get_string("modulenameplural", "workshop"); $strworkshop = get_string("modulename", "workshop"); $strassessments = get_string("assessments", "workshop"); // ... print the header and... print_header_simple("$workshop->name", "", "id\">$strworkshops -> id\">$workshop->name -> $strassessments", "", "", true); //...get the action require_variable($action); /*************** add comment to assessment (by author, assessor or teacher) ***************************/ if ($action == 'addcomment') { print_heading_with_help(get_string("addacomment", "workshop"), "addingacomment", "workshop"); // get assessment record if (!$assessmentid = $_REQUEST['aid']) { // comes from link or hidden form variable error("Assessment id not given"); } $assessment = get_record("workshop_assessments", "id", $assessmentid); if (!$submission = get_record("workshop_submissions", "id", $assessment->submissionid)) { error("Submission not found"); } ?>
\n"; echo " \n"; echo "

". get_string("comment", "workshop").":

\n"; echo " \n"; echo "
\n"; echo "\n"; echo "
\n"; echo "

".get_string("assessment", "workshop"). "
\n"; workshop_print_assessment($workshop, $assessment); } /*************** add stock comment (by teacher ) ***************************/ elseif ($action == 'addstockcomment') { require_variable($aid); require_variable($elementno); if (!isteacher($course->id)) { error("Only teachers can look at this page"); } if (!$assessment = get_record("workshop_assessments", "id", $aid)) { error("workshop assessment is misconfigured"); } $form = data_submitted("nomatch"); // probably always come from the same page, change this statement // store the comment in the stock comments table if ($elementno == 99) { // it's the general comment $form->feedback_99 = $form->generalcomment; } $comment->workshopid = $workshop->id; $comment->elementno = $elementno; $comment->comments = $form->{"feedback_$elementno"}; if (!(trim($comment->comments))) { // no comment given - just redisplay assessment form workshop_print_assessment($workshop, $assessment, true, true, $form->returnto); print_footer($course); exit(); } if (!$element->id = insert_record("workshop_stockcomments", $comment)) { error("Could not insert comment into comment bank"); } // now upate the assessment (just the elements, the assessment itself is not updated) // first get the assignment elements for maxscores and weights... $elementsraw = get_records("workshop_elements", "workshopid", $workshop->id, "elementno ASC"); if (count($elementsraw) < $workshop->nelements) { print_string("noteonassignmentelements", "workshop"); } if ($elementsraw) { foreach ($elementsraw as $element) { $elements[] = $element; // to renumber index 0,1,2... } } else { $elements = null; } $timenow = time(); // don't fiddle about, delete all the old and add the new! delete_records("workshop_grades", "assessmentid", $assessment->id); //determine what kind of grading we have switch ($workshop->gradingstrategy) { case 0: // no grading // Insert all the elements that contain something for ($i = 0; $i < $workshop->nelements; $i++) { unset($element); $element->workshopid = $workshop->id; $element->assessmentid = $assessment->id; $element->elementno = $i; $element->feedback = $form->{"feedback_$i"}; if (!$element->id = insert_record("workshop_grades", $element)) { error("Could not insert workshop grade!"); } } $grade = 0; // set to satisfy save to db break; case 1: // accumulative grading // Insert all the elements that contain something foreach ($form->grade as $key => $thegrade) { unset($element); $element->workshopid = $workshop->id; $element->assessmentid = $assessment->id; $element->elementno = $key; $element->feedback = $form->{"feedback_$key"}; $element->grade = $thegrade; if (!$element->id = insert_record("workshop_grades", $element)) { error("Could not insert workshop grade!"); } } // now work out the grade... $rawgrade=0; $totalweight=0; foreach ($form->grade as $key => $grade) { $maxscore = $elements[$key]->maxscore; $weight = $WORKSHOP_EWEIGHTS[$elements[$key]->weight]; if ($weight > 0) { $totalweight += $weight; } $rawgrade += ($grade / $maxscore) * $weight; // echo "\$key, \$maxscore, \$weight, \$totalweight, \$grade, \$rawgrade : $key, $maxscore, $weight, $totalweight, $grade, $rawgrade
"; } $grade = 100.0 * ($rawgrade / $totalweight); break; case 2: // error banded graded // Insert all the elements that contain something $error = 0.0; for ($i =0; $i < $workshop->nelements; $i++) { unset($element); $element->workshopid = $workshop->id; $element->assessmentid = $assessment->id; $element->elementno = $i; $element->feedback = $form->{"feedback_$i"}; $element->grade = $form->grade[$i]; if (!$element->id = insert_record("workshop_grades", $element)) { error("Could not insert workshop grade!"); } if (empty($form->grade[$i])){ $error += $WORKSHOP_EWEIGHTS[$elements[$i]->weight]; } } // now save the adjustment unset($element); $i = $workshop->nelements; $element->workshopid = $workshop->id; $element->assessmentid = $assessment->id; $element->elementno = $i; $element->grade = $form->grade[$i]; if (!$element->id = insert_record("workshop_grades", $element)) { error("Could not insert workshop grade!"); } $grade = ($elements[intval($error + 0.5)]->maxscore + $form->grade[$i]) * 100 / $workshop->grade; // do sanity check if ($grade < 0) { $grade = 0; } elseif ($grade > 100) { $grade = 100; } echo "

".get_string("weightederrorcount", "workshop", intval($error + 0.5))."\n"; break; case 3: // criteria grading // save in the selected criteria value in element zero, unset($element); $element->workshopid = $workshop->id; $element->assessmentid = $assessment->id; $element->elementno = 0; $element->grade = $form->grade[0]; if (!$element->id = insert_record("workshop_grades", $element)) { error("Could not insert workshop grade!"); } // now save the adjustment in element one unset($element); $element->workshopid = $workshop->id; $element->assessmentid = $assessment->id; $element->elementno = 1; $element->grade = $form->grade[1]; if (!$element->id = insert_record("workshop_grades", $element)) { error("Could not insert workshop grade!"); } $grade = ($elements[$form->grade[0]]->maxscore + $form->grade[1]); break; case 4: // rubric grading (identical to accumulative grading) // Insert all the elements that contain something foreach ($form->grade as $key => $thegrade) { unset($element); $element->workshopid = $workshop->id; $element->assessmentid = $assessment->id; $element->elementno = $key; $element->feedback = $form->{"feedback_$key"}; $element->grade = $thegrade; if (!$element->id = insert_record("workshop_grades", $element)) { error("Could not insert workshop grade!"); } } // now work out the grade... $rawgrade=0; $totalweight=0; foreach ($form->grade as $key => $grade) { $maxscore = $elements[$key]->maxscore; $weight = $WORKSHOP_EWEIGHTS[$elements[$key]->weight]; if ($weight > 0) { $totalweight += $weight; } $rawgrade += ($grade / $maxscore) * $weight; } $grade = 100.0 * ($rawgrade / $totalweight); break; } // end of switch // any comment? if (!empty($form->generalcomment)) { // update the object (no need to update the db record) $assessment->generalcomment = $form->generalcomment; } // redisplay form, going back to original returnto address workshop_print_assessment($workshop, $assessment, true, true, $form->returnto); // add_to_log($course->id, "workshop", "assess", "assessments.php?action=viewassessment&id=$cm->id&aid=$assessment->id", "$assessment->id", "$cm->id"); } /******************* admin confirm delete ************************************/ elseif ($action == 'adminconfirmdelete' ) { if (!isteacher($course->id)) { error("Only teachers can look at this page"); } if (empty($_GET['aid'])) { error("Admin confirm delete: assessment id missing"); } notice_yesno(get_string("confirmdeletionofthisitem","workshop", get_string("assessment", "workshop")), "assessments.php?action=admindelete&id=$cm->id&aid=$_GET[aid]", "submissions.php?action=adminlist&id=$cm->id"); } /******************* admin delete ************************************/ elseif ($action == 'admindelete' ) { if (!isteacher($course->id)) { error("Only teachers can look at this page"); } if (empty($_GET['aid'])) { error("Admin delete: submission id missing"); } print_string("deleting", "workshop"); // first delete all the associated records... delete_records("workshop_comments", "assessmentid", $_GET['aid']); delete_records("workshop_grades", "assessmentid", $_GET['aid']); // ...now delete the assessment... delete_records("workshop_assessments", "id", $_GET['aid']); print_continue("submissions.php?id=$cm->id&action=adminlist"); } /*********************** admin list of asssessments (of a submission) (by teachers)**************/ elseif ($action == 'adminlist') { if (!isteacher($course->id)) { error("Only teachers can look at this page"); } if (empty($_GET['sid'])) { error ("Workshop asssessments: adminlist called with no sid"); } $submission = get_record("workshop_submissions", "id", $_GET['sid']); workshop_print_assessments_for_admin($workshop, $submission); print_continue("submissions.php?action=adminlist&id=$cm->id"); } /*********************** admin list of asssessments by a student (used by teachers only )******************/ elseif ($action == 'adminlistbystudent') { if (!isteacher($course->id)) { error("Only teachers can look at this page"); } if (empty($_GET['userid'])) { error ("Workshop asssessments: adminlistbystudent called with no userid"); } $user = get_record("user", "id", $_GET['userid']); workshop_print_assessments_by_user_for_admin($workshop, $user); print_continue("submissions.php?action=adminlist&id=$cm->id"); } /*************** agree (to) assessment (by student) ***************************/ elseif ($action == 'agreeassessment') { $timenow = time(); // assessment id comes from link or hidden form variable if (!$assessment = get_record("workshop_assessments", "id", $_REQUEST['aid'])) { error("Assessment : agree assessment failed"); } //save time of agreement set_field("workshop_assessments", "timeagreed", $timenow, "id", $assessment->id); echo "".get_string("savedok", "workshop")."
\n"; add_to_log($course->id, "workshop", "agree", "assessments.php?action=viewassessment&id=$cm->id&aid=$assessment->id", "$assessment->id"); print_continue("view.php?id=$cm->id"); } /*************** Assess submission (by teacher or student) ***************************/ elseif ($action == 'assesssubmission') { require_variable($sid); optional_variable($allowcomments); if (!isset($allowcomments)) { $allowcomments = false; } if (! $submission = get_record("workshop_submissions", "id", $sid)) { error("Assess submission is misconfigured - no submission record!"); } // there can be an assessment record (for teacher submissions), if there isn't... if (!$assessment = get_record("workshop_assessments", "submissionid", $submission->id, "userid", $USER->id)) { // if it's the teacher see if the user has done a self assessment if so copy it if (isteacher($course->id) and ($assessment = get_record("workshop_assessments", "submissionid", $submission->id, "userid", $submission->userid))) { $assessment = workshop_copy_assessment($assessment, $submission, true); // need to set owner of assessment set_field("workshop_assessments", "userid", $USER->id, "id", $assessment->id); $assessment->resubmission = 0; // not set by workshop_copy_assessment $assessment->timegraded = 0; // not set by workshop_copy_assessment $assessment->timeagreed = 0; // not set by workshop_copy_assessment } else { $yearfromnow = time() + 365 * 86400; // ...create one and set timecreated way in the future, this is reset when record is updated $assessment->workshopid = $workshop->id; $assessment->submissionid = $submission->id; $assessment->userid = $USER->id; $assessment->timecreated = $yearfromnow; $assessment->grade = -1; // set impossible grade $assessment->timegraded = 0; $assessment->timeagreed = 0; $assessment->resubmission = 0; if (!$assessment->id = insert_record("workshop_assessments", $assessment)) { error("Could not insert workshop assessment!"); } // if it's the teacher and the workshop is error banded set all the elements to Yes if (isteacher($course->id) and ($workshop->gradingstrategy == 2)) { for ($i =0; $i < $workshop->nelements; $i++) { unset($element); $element->workshopid = $workshop->id; $element->assessmentid = $assessment->id; $element->elementno = $i; $element->feedback = ''; $element->grade = 1; if (!$element->id = insert_record("workshop_grades", $element)) { error("Could not insert workshop grade!"); } } // now set the adjustment unset($element); $i = $workshop->nelements; $element->workshopid = $workshop->id; $element->assessmentid = $assessment->id; $element->elementno = $i; $element->grade = 0; if (!$element->id = insert_record("workshop_grades", $element)) { error("Could not insert workshop grade!"); } } } } print_heading_with_help(get_string("assessthissubmission", "workshop"), "grading", "workshop"); // show assessment and allow changes workshop_print_assessment($workshop, $assessment, true, $allowcomments, $_SERVER["HTTP_REFERER"]); } /*************** display grading form (viewed by student) *********************************/ elseif ($action == 'displaygradingform') { print_heading_with_help(get_string("specimenassessmentform", "workshop"), "specimen", "workshop"); workshop_print_assessment($workshop); // called with no assessment print_continue("view.php?id=$cm->id"); } /*************** edit comment on assessment (by author, assessor or teacher) ***************************/ elseif ($action == 'editcomment') { print_heading_with_help(get_string("editacomment", "workshop"), "editingacomment", "workshop"); // get the comment record... if (!$comment = get_record("workshop_comments", "id", $_GET['cid'])) { error("Edit Comment: Comment not found"); } if (!$assessment = get_record("workshop_assessments", "id", $comment->assessmentid)) { error("Edit Comment: Assessment not found"); } if (!$submission = get_record("workshop_submissions", "id", $assessment->submissionid)) { error("Edit Comment: Submission not found"); } ?>

\n"; echo " \n"; echo "

". get_string("comment", "workshop").":

\n"; echo " \n"; echo "
\n"; echo "\n"; echo "
\n"; workshop_print_assessment($workshop, $assessment); } /*********************** edit assessment elements (for teachers) ***********************/ elseif ($action == 'editelements') { if (!isteacher($course->id)) { error("Only teachers can look at this page"); } $count = count_records("workshop_grades", "workshopid", $workshop->id); if ($workshop->phase > 1 and $count) { notify(get_string("warningonamendingelements", "workshop")); } // set up heading, form and table print_heading_with_help(get_string("editingassessmentelements", "workshop"), "elements", "workshop"); ?>
id, "elementno ASC" )) { foreach ($elementsraw as $element) { $elements[] = $element; // to renumber index 0,1,2... } } // check for missing elements (this happens either the first time round or when the number of elements is icreased) for ($i=0; $i<$workshop->nelements; $i++) { if (!isset($elements[$i])) { $elements[$i]->description = ''; $elements[$i]->scale =0; $elements[$i]->maxscore = 0; $elements[$i]->weight = 11; } } switch ($workshop->gradingstrategy) { case 0: // no grading for ($i=0; $i<$workshop->nelements; $i++) { $iplus1 = $i+1; echo "\n"; echo " \n"; echo "\n"; echo "\n"; echo " \n"; echo "\n"; } break; case 1: // accumulative grading // set up scales name foreach ($WORKSHOP_SCALES as $KEY => $SCALE) { $SCALES[] = $SCALE['name']; } for ($i=0; $i<$workshop->nelements; $i++) { $iplus1 = $i+1; echo "\n"; echo " \n"; echo "\n"; echo "\n"; echo " \n"; echo "\n"; echo "\n"; echo "\n"; echo "\n"; echo " \n"; echo "\n"; } break; case 2: // error banded grading for ($i=0; $i<$workshop->nelements; $i++) { $iplus1 = $i+1; echo "\n"; echo " \n"; echo "\n"; if ($elements[$i]->weight == '') { // not set $elements[$i]->weight = 11; // unity } echo "\n"; echo "\n"; echo "\n"; echo "\n"; echo " \n"; echo "\n"; } echo "

". get_string("element","workshop")." $iplus1:

\n"; echo "
cellheading2\"> 

". get_string("element","workshop")." $iplus1:

\n"; echo "

". get_string("typeofscale", "workshop"). ":

\n"; choose_from_menu($SCALES, "scale[]", $elements[$i]->scale, ""); if ($elements[$i]->weight == '') { // not set $elements[$i]->weight = 11; // unity } echo "
".get_string("elementweight", "workshop").":\n"; workshop_choose_from_menu($WORKSHOP_EWEIGHTS, "weight[]", $elements[$i]->weight, ""); echo "
cellheading2\"> 

". get_string("element","workshop")." $iplus1:

\n"; echo "
".get_string("elementweight", "workshop").":\n"; workshop_choose_from_menu($WORKSHOP_EWEIGHTS, "weight[]", $elements[$i]->weight, ""); echo "
cellheading2\"> 

\n"; echo "

".get_string("gradetable","workshop")."
\n"; echo "
\n"; for ($j = $workshop->grade; $j >= 0; $j--) { $numbers[$j] = $j; } for ($i=0; $i<=$workshop->nelements; $i++) { echo "\n"; } echo "
". get_string("numberofnegativeresponses", "workshop"); echo "". get_string("suggestedgrade", "workshop")."
$i"; if (!isset($elements[$i])) { // the "last one" will be! $elements[$i]->description = ""; $elements[$i]->maxscore = 0; } choose_from_menu($numbers, "maxscore[$i]", $elements[$i]->maxscore, ""); echo "
\n"; break; case 3: // criterion grading for ($j = 100; $j >= 0; $j--) { $numbers[$j] = $j; } for ($i=0; $i<$workshop->nelements; $i++) { $iplus1 = $i+1; echo "\n"; echo "

". get_string("criterion","workshop")." $iplus1:\n"; echo "\n"; echo " \n"; echo "". get_string("suggestedgrade", "workshop").":\n"; choose_from_menu($numbers, "maxscore[$i]", $elements[$i]->maxscore, ""); echo "\n"; echo "\n"; echo " cellheading2\"> \n"; echo "\n"; } break; case 4: // rubric for ($j = 100; $j >= 0; $j--) { $numbers[$j] = $j; } if ($rubricsraw = get_records("workshop_rubrics", "workshopid", $workshop->id)) { foreach ($rubricsraw as $rubric) { $rubrics[$rubric->elementno][$rubric->rubricno] = $rubric->description; // reindex 0,1,2... } } for ($i=0; $i<$workshop->nelements; $i++) { $iplus1 = $i+1; echo "\n"; echo "

". get_string("element","workshop")." $iplus1:\n"; echo "\n"; echo " \n"; echo "".get_string("elementweight", "workshop").":\n"; workshop_choose_from_menu($WORKSHOP_EWEIGHTS, "weight[]", $elements[$i]->weight, ""); echo " \n"; echo "\n"; for ($j=0; $j<5; $j++) { $jplus1 = $j+1; if (empty($rubrics[$i][$j])) { $rubrics[$i][$j] = ""; } echo "\n"; echo "

". get_string("grade","workshop")." $j:\n"; echo "\n"; echo " \n"; } echo "\n"; echo " cellheading2\"> \n"; echo "\n"; } break; } // close table and form ?>
" /> " />

id)) { error("Only teachers can look at this page"); } print_heading(get_string("gradingallassessments", "workshop")); workshop_grade_assessments($workshop); print_continue("view.php?id=$cm->id"); } /*************** grade (student's) assessment (by teacher) ***************************/ elseif ($action == 'gradeassessment') { if (!isteacher($course->id)) { error("Only teachers can look at this page"); } // set up coment scale for ($i=COMMENTSCALE; $i>=0; $i--) { $num[$i] = $i; } print_heading_with_help(get_string("gradeassessment", "workshop"), "gradingassessments", "workshop"); // get assessment record if (!$assessmentid = $_GET['aid']) { error("Assessment id not given"); } $assessment = get_record("workshop_assessments", "id", $assessmentid); if (!$submission = get_record("workshop_submissions", "id", $assessment->submissionid)) { error("Submission not found"); } // get the teacher's assessment first if ($teachersassessment = workshop_get_submission_assessment($submission, $USER)) { echo "

".get_string("teacherassessments", "workshop", $course->teacher)."
\n"; workshop_print_assessment($workshop, $teachersassessment); } // now the student's assessment (don't allow changes) $user = get_record("user", "id", $assessment->userid); echo "

".get_string("assessmentby", "workshop", $user->firstname." ".$user->lastname)."
\n"; workshop_print_assessment($workshop, $assessment); ?>
\n"; echo " \n"; echo " \n"; echo "\n"; echo "

". get_string("teacherscomment", "workshop").":

\n"; echo " \n"; echo "
".get_string("gradeforstudentsassessment", "workshop")."\n"; choose_from_menu($num, "gradinggrade", $assessment->gradinggrade, ""); echo "
\n"; echo "\n"; echo "
\n"; } /*************** insert (new) comment (by author, assessor or teacher) ***************************/ elseif ($action == 'insertcomment') { $timenow = time(); $form = (object)$_POST; if (!$assessment = get_record("workshop_assessments", "id", $_POST['aid'])) { error("Unable to insert comment"); } // save the comment... $comment->workshopid = $workshop->id; $comment->assessmentid = $assessment->id; $comment->userid = $USER->id; $comment->timecreated = $timenow; $comment->comments = $form->comments; if (!$comment->id = insert_record("workshop_comments", $comment)) { error("Could not insert workshop comment!"); } add_to_log($course->id, "workshop", "comment", "view.php?id=$cm->id", "$comment->id"); print_continue("assessments.php?action=viewassessment&id=$cm->id&aid=$assessment->id"); } /*********************** insert/update assignment elements (for teachers)***********************/ elseif ($action == 'insertelements') { if (!isteacher($course->id)) { error("Only teachers can look at this page"); } $form = (object)$HTTP_POST_VARS; // let's not fool around here, dump the junk! delete_records("workshop_elements", "workshopid", $workshop->id); // determine wich type of grading switch ($workshop->gradingstrategy) { case 0: // no grading // Insert all the elements that contain something foreach ($form->description as $key => $description) { if ($description) { unset($element); $element->description = $description; $element->workshopid = $workshop->id; $element->elementno = $key; if (!$element->id = insert_record("workshop_elements", $element)) { error("Could not insert workshop element!"); } } } break; case 1: // accumulative grading // Insert all the elements that contain something foreach ($form->description as $key => $description) { if ($description) { unset($element); $element->description = $description; $element->workshopid = $workshop->id; $element->elementno = $key; if (isset($form->scale[$key])) { $element->scale = $form->scale[$key]; switch ($WORKSHOP_SCALES[$form->scale[$key]]['type']) { case 'radio' : $element->maxscore = $WORKSHOP_SCALES[$form->scale[$key]]['size'] - 1; break; case 'selection' : $element->maxscore = $WORKSHOP_SCALES[$form->scale[$key]]['size']; break; } } if (isset($form->weight[$key])) { $element->weight = $form->weight[$key]; } if (!$element->id = insert_record("workshop_elements", $element)) { error("Could not insert workshop element!"); } } } break; case 2: // error banded grading... case 3: // ...and criterion grading // Insert all the elements that contain something, the number of descriptions is one less than the number of grades foreach ($form->maxscore as $key => $themaxscore) { unset($element); $element->workshopid = $workshop->id; $element->elementno = $key; $element->maxscore = $themaxscore; if (isset($form->description[$key])) { $element->description = $form->description[$key]; } if (isset($form->weight[$key])) { $element->weight = $form->weight[$key]; } if (!$element->id = insert_record("workshop_elements", $element)) { error("Could not insert workshop element!"); } } break; case 4: // ...and criteria grading // Insert all the elements that contain something foreach ($form->description as $key => $description) { unset($element); $element->workshopid = $workshop->id; $element->elementno = $key; $element->description = $description; $element->weight = $form->weight[$key]; for ($j=0;$j<5;$j++) { if (empty($form->rubric[$key][$j])) break; } $element->maxscore = $j - 1; if (!$element->id = insert_record("workshop_elements", $element)) { error("Could not insert workshop element!"); } } // let's not fool around here, dump the junk! delete_records("workshop_rubrics", "workshopid", $workshop->id); for ($i=0;$i<$workshop->nelements;$i++) { for ($j=0;$j<5;$j++) { unset($element); if (empty($form->rubric[$i][$j])) { // OK to have an element with fewer than 5 items break; } $element->workshopid = $workshop->id; $element->elementno = $i; $element->rubricno = $j; $element->description = $form->rubric[$i][$j]; if (!$element->id = insert_record("workshop_rubrics", $element)) { error("Could not insert workshop element!"); } } } break; } // end of switch redirect("view.php?id=$cm->id", get_string("savedok","workshop")); } /*********************** list assessments for grading (Student submissions)(by teachers)***********************/ elseif ($action == 'listungradedstudentsubmissions') { if (!isteacher($course->id)) { error("Only teachers can look at this page"); } workshop_list_ungraded_assessments($workshop, "student"); print_continue("view.php?id=$cm->id"); } /*********************** list assessments for grading (Teacher submissions) (by teachers)***********************/ elseif ($action == 'listungradedteachersubmissions') { if (!isteacher($course->id)) { error("Only teachers can look at this page"); } workshop_list_ungraded_assessments($workshop, "teacher"); print_continue("view.php?id=$cm->id"); } /****************** list teacher submissions ***********************/ elseif ($action == 'listteachersubmissions') { workshop_list_teacher_submissions($workshop, $USER); print_continue("view.php?id=$cm->id"); } /******************* regrade student assessments ************************************/ elseif ($action == 'regradestudentassessments' ) { $timenow = time(); if (!isteacher($course->id)) { error("Only teachers can look at this page"); } // get all the submissions... if ($submissions = get_records("workshop_submissions", "workshopid", $workshop->id)) { foreach ($submissions as $submission) { // ...if cold... if (($submission->timecreated + $CFG->maxeditingtime) < $timenow) { // ...clear assessment count so workshop_grade_assessments() can do its thing set_field("workshop_submissions", "nassessments", 0, "id", $submission->id); } } } echo "
";
        workshop_grade_assessments($workshop);
        print_continue("submissions.php?id=$cm->id&action=adminlist");
    }
    

    /*************** remove stock comment (by teacher ) ***************************/
    elseif ($action == 'removestockcomment') {

        require_variable($aid);
        require_variable($stockcommentid);

        if (!isteacher($course->id)) {
			error("Only teachers can look at this page");
    	}
    
        if (!$assessment = get_record("workshop_assessments", "id", $aid)) {
            error("workshop assessment is misconfigured");
        }
		$form = data_submitted("nomatch"); // probably always come from the same page, change this statement
	
        // delete the comment from the stock comments table
		if (!delete_records("workshop_stockcomments", "id", $stockcommentid)) {
			error("Could not remove comment from the comment bank");
		}

        // now upate the assessment (just the elements, the assessment itself is not updated)

        // first get the assignment elements for maxscores and weights...
        $elementsraw = get_records("workshop_elements", "workshopid", $workshop->id, "elementno ASC");
        if (count($elementsraw) < $workshop->nelements) {
            print_string("noteonassignmentelements", "workshop");
        }
        if ($elementsraw) {
            foreach ($elementsraw as $element) {
                $elements[] = $element;   // to renumber index 0,1,2...
            }
        } else {
            $elements = null;
        }

        $timenow = time();
        // don't fiddle about, delete all the old and add the new!
		delete_records("workshop_grades", "assessmentid",  $assessment->id);
		
	
		//determine what kind of grading we have
		switch ($workshop->gradingstrategy) {
			case 0: // no grading
				// Insert all the elements that contain something
				for ($i =0; $i < $workshop->nelements; $i++) {
					unset($element);
					$element->workshopid = $workshop->id;
					$element->assessmentid = $assessment->id;
					$element->elementno = $i;
					$element->feedback   = $form->{"feedback_$i"};
					if (!$element->id = insert_record("workshop_grades", $element)) {
						error("Could not insert workshop grade!");
					}
				}
				$grade = 0; // set to satisfy save to db
				break;
				
			case 1: // accumulative grading
				// Insert all the elements that contain something
				foreach ($form->grade as $key => $thegrade) {
					unset($element);
					$element->workshopid = $workshop->id;
					$element->assessmentid = $assessment->id;
					$element->elementno = $key;
					$element->feedback   = $form->{"feedback_$key"};
					$element->grade = $thegrade;
					if (!$element->id = insert_record("workshop_grades", $element)) {
						error("Could not insert workshop grade!");
						}
					}
				// now work out the grade...
				$rawgrade=0;
				$totalweight=0;
				foreach ($form->grade as $key => $grade) {
					$maxscore = $elements[$key]->maxscore;
					$weight = $WORKSHOP_EWEIGHTS[$elements[$key]->weight];
					if ($weight > 0) { 
						$totalweight += $weight;
					}
					$rawgrade += ($grade / $maxscore) * $weight;
					// echo "\$key, \$maxscore, \$weight, \$totalweight, \$grade, \$rawgrade : $key, $maxscore, $weight, $totalweight, $grade, $rawgrade
"; } $grade = 100.0 * ($rawgrade / $totalweight); break; case 2: // error banded graded // Insert all the elements that contain something $error = 0.0; for ($i =0; $i < $workshop->nelements; $i++) { unset($element); $element->workshopid = $workshop->id; $element->assessmentid = $assessment->id; $element->elementno = $i; $element->feedback = $form->{"feedback_$i"}; $element->grade = $form->grade[$i]; if (!$element->id = insert_record("workshop_grades", $element)) { error("Could not insert workshop grade!"); } if (empty($form->grade[$i])){ $error += $WORKSHOP_EWEIGHTS[$elements[$i]->weight]; } } // now save the adjustment unset($element); $i = $workshop->nelements; $element->workshopid = $workshop->id; $element->assessmentid = $assessment->id; $element->elementno = $i; $element->grade = $form->grade[$i]; if (!$element->id = insert_record("workshop_grades", $element)) { error("Could not insert workshop grade!"); } $grade = ($elements[intval($error + 0.5)]->maxscore + $form->grade[$i]) * 100 / $workshop->grade; // do sanity check if ($grade < 0) { $grade = 0; } elseif ($grade > 100) { $grade = 100; } echo "

".get_string("weightederrorcount", "workshop", intval($error + 0.5))."\n"; break; case 3: // criteria grading // save in the selected criteria value in element zero, unset($element); $element->workshopid = $workshop->id; $element->assessmentid = $assessment->id; $element->elementno = 0; $element->grade = $form->grade[0]; if (!$element->id = insert_record("workshop_grades", $element)) { error("Could not insert workshop grade!"); } // now save the adjustment in element one unset($element); $element->workshopid = $workshop->id; $element->assessmentid = $assessment->id; $element->elementno = 1; $element->grade = $form->grade[1]; if (!$element->id = insert_record("workshop_grades", $element)) { error("Could not insert workshop grade!"); } $grade = ($elements[$form->grade[0]]->maxscore + $form->grade[1]); break; case 4: // rubric grading (identical to accumulative grading) // Insert all the elements that contain something foreach ($form->grade as $key => $thegrade) { unset($element); $element->workshopid = $workshop->id; $element->assessmentid = $assessment->id; $element->elementno = $key; $element->feedback = $form->{"feedback_$key"}; $element->grade = $thegrade; if (!$element->id = insert_record("workshop_grades", $element)) { error("Could not insert workshop grade!"); } } // now work out the grade... $rawgrade=0; $totalweight=0; foreach ($form->grade as $key => $grade) { $maxscore = $elements[$key]->maxscore; $weight = $WORKSHOP_EWEIGHTS[$elements[$key]->weight]; if ($weight > 0) { $totalweight += $weight; } $rawgrade += ($grade / $maxscore) * $weight; } $grade = 100.0 * ($rawgrade / $totalweight); break; } // end of switch // any comment? if (!empty($form->generalcomment)) { // update the object (no need to update the db record) $assessment->generalcomment = $form->generalcomment; } // redisplay form, going back to original returnto address workshop_print_assessment($workshop, $assessment, true, true, $form->returnto); // add_to_log($course->id, "workshop", "assess", "assessments.php?action=viewassessment&id=$cm->id&aid=$assessment->id", "$assessment->id", "$cm->id"); } /*************** update assessment (by teacher or student) ***************************/ elseif ($action == 'updateassessment') { require_variable($aid); if (! $assessment = get_record("workshop_assessments", "id", $aid)) { error("workshop assessment is misconfigured"); } // first get the assignment elements for maxscores and weights... $elementsraw = get_records("workshop_elements", "workshopid", $workshop->id, "elementno ASC"); if (count($elementsraw) < $workshop->nelements) { print_string("noteonassignmentelements", "workshop"); } if ($elementsraw) { foreach ($elementsraw as $element) { $elements[] = $element; // to renumber index 0,1,2... } } else { $elements = null; } $timenow = time(); // don't fiddle about, delete all the old and add the new! delete_records("workshop_grades", "assessmentid", $assessment->id); $form = data_submitted("nomatch"); // probably always come from the same page, change this statement //determine what kind of grading we have switch ($workshop->gradingstrategy) { case 0: // no grading // Insert all the elements that contain something for ($i = 0; $i < $workshop->nelements; $i++) { unset($element); $element->workshopid = $workshop->id; $element->assessmentid = $assessment->id; $element->elementno = $i; $element->feedback = $form->{"feedback_$i"}; if (!$element->id = insert_record("workshop_grades", $element)) { error("Could not insert workshop grade!"); } } $grade = 0; // set to satisfy save to db break; case 1: // accumulative grading // Insert all the elements that contain something foreach ($form->grade as $key => $thegrade) { unset($element); $element->workshopid = $workshop->id; $element->assessmentid = $assessment->id; $element->elementno = $key; $element->feedback = $form->{"feedback_$key"}; $element->grade = $thegrade; if (!$element->id = insert_record("workshop_grades", $element)) { error("Could not insert workshop grade!"); } } // now work out the grade... $rawgrade=0; $totalweight=0; foreach ($form->grade as $key => $grade) { $maxscore = $elements[$key]->maxscore; $weight = $WORKSHOP_EWEIGHTS[$elements[$key]->weight]; if ($weight > 0) { $totalweight += $weight; } $rawgrade += ($grade / $maxscore) * $weight; // echo "\$key, \$maxscore, \$weight, \$totalweight, \$grade, \$rawgrade : $key, $maxscore, $weight, $totalweight, $grade, $rawgrade
"; } $grade = 100.0 * ($rawgrade / $totalweight); break; case 2: // error banded graded // Insert all the elements that contain something $error = 0.0; for ($i =0; $i < $workshop->nelements; $i++) { unset($element); $element->workshopid = $workshop->id; $element->assessmentid = $assessment->id; $element->elementno = $i; $element->feedback = $form->{"feedback_$i"}; $element->grade = $form->grade[$i]; if (!$element->id = insert_record("workshop_grades", $element)) { error("Could not insert workshop grade!"); } if (empty($form->grade[$i])){ $error += $WORKSHOP_EWEIGHTS[$elements[$i]->weight]; } } // now save the adjustment unset($element); $i = $workshop->nelements; $element->workshopid = $workshop->id; $element->assessmentid = $assessment->id; $element->elementno = $i; $element->grade = $form->grade[$i]; if (!$element->id = insert_record("workshop_grades", $element)) { error("Could not insert workshop grade!"); } $grade = ($elements[intval($error + 0.5)]->maxscore + $form->grade[$i]) * 100 / $workshop->grade; // do sanity check if ($grade < 0) { $grade = 0; } elseif ($grade > 100) { $grade = 100; } echo "

".get_string("weightederrorcount", "workshop", intval($error + 0.5))."\n"; break; case 3: // criteria grading // save in the selected criteria value in element zero, unset($element); $element->workshopid = $workshop->id; $element->assessmentid = $assessment->id; $element->elementno = 0; $element->grade = $form->grade[0]; if (!$element->id = insert_record("workshop_grades", $element)) { error("Could not insert workshop grade!"); } // now save the adjustment in element one unset($element); $element->workshopid = $workshop->id; $element->assessmentid = $assessment->id; $element->elementno = 1; $element->grade = $form->grade[1]; if (!$element->id = insert_record("workshop_grades", $element)) { error("Could not insert workshop grade!"); } $grade = ($elements[$form->grade[0]]->maxscore + $form->grade[1]); break; case 4: // rubric grading (identical to accumulative grading) // Insert all the elements that contain something foreach ($form->grade as $key => $thegrade) { unset($element); $element->workshopid = $workshop->id; $element->assessmentid = $assessment->id; $element->elementno = $key; $element->feedback = $form->{"feedback_$key"}; $element->grade = $thegrade; if (!$element->id = insert_record("workshop_grades", $element)) { error("Could not insert workshop grade!"); } } // now work out the grade... $rawgrade=0; $totalweight=0; foreach ($form->grade as $key => $grade) { $maxscore = $elements[$key]->maxscore; $weight = $WORKSHOP_EWEIGHTS[$elements[$key]->weight]; if ($weight > 0) { $totalweight += $weight; } $rawgrade += ($grade / $maxscore) * $weight; } $grade = 100.0 * ($rawgrade / $totalweight); break; } // end of switch // update the time of the assessment record (may be re-edited)... set_field("workshop_assessments", "timecreated", $timenow, "id", $assessment->id); if (!$submission = get_record("workshop_submissions", "id", $assessment->submissionid)) { error ("Updateassessment: submission record not found"); } // if the workshop does need peer agreement AND it's self assessment then set timeagreed if ($workshop->agreeassessments and ($submission->userid == $assessment->userid)) { set_field("workshop_assessments", "timeagreed", $timenow, "id", $assessment->id); } // set grade... set_field("workshop_assessments", "grade", $grade, "id", $assessment->id); // ...and clear the timegraded but set the graddinggrade to maximum, may to reduced subsequently... set_field("workshop_assessments", "timegraded", 0, "id", $assessment->id); set_field("workshop_assessments", "gradinggrade", 100, "id", $assessment->id); // ...and the resubmission flag set_field("workshop_assessments", "resubmission", 0, "id", $assessment->id); // if there's examples or peer assessments clear the counter in the submission so that // the cron job will regrade this assessment (and the other assessments fo the submission) if ($workshop->ntassessments or $workshop->nsassessments) { set_field("workshop_submissions", "nassessments", 0, "id", $submission->id); } else { // it could be self assessment.... // now see if there's a corresponding assessment so that the gradinggrade can be set if (isteacher($course->id)) { // see if there's are student assessments, if so set their gradinggrade if ($assessments = workshop_get_assessments($submission)) { foreach($assessments as $studentassessment) { // skip if it's not a student assessment if (!isstudent($course->id, $studentassessment->userid)) { continue; } $gradinggrade = workshop_compare_assessments($workshop, $assessment, $studentassessment); set_field("workshop_assessments", "timegraded", $timenow, "id", $studentassessment->id); set_field("workshop_assessments", "gradinggrade", $gradinggrade, "id", $studentassessment->id); } } } else { //it's a student assessment, see if there's a corresponding teacher's assessment if ($assessments = workshop_get_assessments($submission)) { foreach($assessments as $teacherassessment) { if (isteacher($course->id, $teacherassessment->userid)) { $gradinggrade = workshop_compare_assessments($workshop, $assessment, $teacherassessment); set_field("workshop_assessments", "timegraded", $timenow, "id", $assessment->id); set_field("workshop_assessments", "gradinggrade", $gradinggrade, "id", $assessment->id); break; // only look for the first teacher assessment } } } } } // any comment? if (!empty($form->generalcomment)) { set_field("workshop_assessments", "generalcomment", $form->generalcomment, "id", $assessment->id); } add_to_log($course->id, "workshop", "assess", "assessments.php?action=viewassessment&id=$cm->id&aid=$assessment->id", "$assessment->id", "$cm->id"); // set up return address if (!$returnto = $form->returnto) { $returnto = "view.php?id=$cm->id"; } // show grade if grading strategy is not zero if ($workshop->gradingstrategy) { redirect($returnto, get_string("thegradeis", "workshop").": ". number_format($grade * $workshop->grade / 100, 2). " (".get_string("maximumgrade")." ".number_format($workshop->grade).")"); } else { redirect($returnto); } } /****************** update comment (by author, assessor or teacher) ********************/ elseif ($action == 'updatecomment') { $timenow = time(); $form = (object)$_POST; // get the comment record... if (!$comment = get_record("workshop_comments", "id", $_POST['cid'])) { error("Update to Comment failed"); } if (!$assessment = get_record("workshop_assessments", "id", $comment->assessmentid)) { error("Update Comment: Assessment not found"); } //save the comment for the assessment... if (isset($form->comments)) { set_field("workshop_comments", "comments", $form->comments, "id", $comment->id); set_field("workshop_comments", "timecreated", $timenow, "id", $comment->id); // ..and kick to comment into life (probably not needed but just in case) set_field("workshop_comments", "mailed", 0, "id", $comment->id); echo "".get_string("savedok", "workshop")."
\n"; add_to_log($course->id, "workshop", "comment", "assessments.php?action=viewassessment&id=$cm->id&aid=$assessment->id", "$comment->id"); } print_continue("assessments.php?action=viewassessment&id=$cm->id&aid=$assessment->id"); } /****************** update grading (by teacher) ***************************/ elseif ($action == 'updategrading') { $timenow = time(); if (!isteacher($course->id)) { error("Only teachers can look at this page"); } $form = (object)$_POST; if (!$assessment = get_record("workshop_assessments", "id", $_POST['aid'])) { error("Update Grading failed"); } //save the comment and grade for the assessment if (isset($form->teachercomment)) { set_field("workshop_assessments", "teachercomment", $form->teachercomment, "id", $assessment->id); set_field("workshop_assessments", "gradinggrade", $form->gradinggrade, "id", $assessment->id); set_field("workshop_assessments", "timegraded", $timenow, "id", $assessment->id); set_field("workshop_assessments", "mailed", 0, "id", $assessment->id); echo "".get_string("savedok", "workshop")."
\n"; add_to_log($course->id, "workshop", "grade", "assessments.php?action=viewassessment&id=$cm->id&aid=$assessment->id", "$assessment->id", "$cm->id"); } switch ($form->stype) { case "student" : redirect("assessments.php?action=listungradedstudentsubmissions&id=$cm->id"); break; case "teacher" : redirect("assessments.php?action=listungradedteachersubmissions&id=$cm->id"); break; } } /****************** user confirm delete ************************************/ elseif ($action == 'userconfirmdelete' ) { if (empty($_GET['aid'])) { error("User confirm delete: assessment id missing"); } notice_yesno(get_string("confirmdeletionofthisitem","workshop", get_string("assessment", "workshop")), "assessments.php?action=userdelete&id=$cm->id&aid=$_GET[aid]", "view.php?id=$cm->id"); } /****************** user delete ************************************/ elseif ($action == 'userdelete' ) { if (empty($_GET['aid'])) { error("User delete: assessment id missing"); } print_string("deleting", "workshop"); // first delete all the associated records... delete_records("workshop_comments", "assessmentid", $_GET['aid']); delete_records("workshop_grades", "assessmentid", $_GET['aid']); // ...now delete the assessment... delete_records("workshop_assessments", "id", $_GET['aid']); print_continue("view.php?id=$cm->id"); } /****************** view all assessments ***********************/ elseif ($action == 'viewallassessments') { if (!$submission = get_record("workshop_submissions", "id", $_GET['sid'])) { error("View All Assessments: submission record not found"); } if ($assessments = workshop_get_assessments($submission)) { foreach ($assessments as $assessment) { workshop_print_assessment($workshop, $assessment); } } // only called from list all submissions print_continue("submissions.php?action=listallsubmissions&id=$cm->id"); } /****************** view assessment *****************************/ elseif ($action == 'viewassessment') { optional_variable($allowcomments); if (!isset($allowcomments)) { $allowcomments = false; } // get the assessment record if (!$assessment = get_record("workshop_assessments", "id", $_GET['aid'])) { error("Assessment record not found"); } // show assessment but don't allow changes workshop_print_assessment($workshop, $assessment, false, $allowcomments); print_continue("view.php?id=$cm->id"); } /*************** no man's land **************************************/ else { error("Fatal Error: Unknown Action: ".$action."\n"); } print_footer($course); ?>