| [ Index ] |
PHP Cross Reference of Moodle |
[Summary view] [Print] [Text view]
1 <?php // $Id: assessments.php,v 1.57.2.1 2007/10/10 21:09:32 iarenaza Exp $ 2 3 /************************************************* 4 ACTIONS handled are: 5 6 addcomment 7 addstockcomment 8 confirmdelete 9 delete 10 adminlist 11 agreeassessment 12 displaygradingform 13 editcomment 14 editelements (teachers only) 15 gradeallassessments (teachers only) 16 gradeassessment (teachers only) 17 insertcomment 18 insertelements (for teachers) 19 listungradedstudentsubmissions (for teachers) 20 listungradedteachersubmissions (for teachers) 21 listteachersubmissions 22 regradestudentassessments (for teachers) 23 updateassessment 24 updatecomment 25 updategrading 26 27 ************************************************/ 28 29 require("../../config.php"); 30 require ("lib.php"); 31 require ("locallib.php"); 32 33 $action = required_param('action', PARAM_ALPHA); 34 $id = optional_param('id', 0, PARAM_INT); // Course Module ID 35 $wid = optional_param('wid', 0, PARAM_INT); // Workshop ID 36 $aid = optional_param('aid', 0, PARAM_INT); 37 $userid = optional_param('userid', 0, PARAM_INT); 38 $cid = optional_param('cid', 0, PARAM_INT ); // comment id 39 $sid = optional_param('sid', 0, PARAM_INT); // submission id 40 $elementno = optional_param('elementno', -1, PARAM_INT); 41 $stockcommentid = optional_param('stockcommentid', 0, PARAM_INT); 42 43 // get some useful stuff... 44 if ($id) { 45 if (! $cm = get_coursemodule_from_id('workshop', $id)) { 46 error("Course Module ID was incorrect"); 47 } 48 if (! $workshop = get_record("workshop", "id", $cm->instance)) { 49 error("Course module is incorrect"); 50 } 51 } else if ($wid) { 52 if (! $workshop = get_record("workshop", "id", $wid)) { 53 error("Workshop id is incorrect"); 54 } 55 if (! $cm = get_coursemodule_from_instance("workshop", $workshop->id, $workshop->course)) { 56 error("No coursemodule found"); 57 } 58 } else { 59 error("No id given"); 60 } 61 if (! $course = get_record("course", "id", $cm->course)) { 62 error("Course is misconfigured"); 63 } 64 65 require_login($course->id, false, $cm); 66 $context = get_context_instance(CONTEXT_MODULE, $cm->id); 67 68 $navigation = ""; 69 if ($course->id != SITEID) { 70 $navigation = "<a href=\"../../course/view.php?id=$course->id\">$course->shortname</a> ->"; 71 } 72 73 $strworkshops = get_string("modulenameplural", "workshop"); 74 $strworkshop = get_string("modulename", "workshop"); 75 $strassessments = get_string("assessments", "workshop"); 76 77 // ... print the header and... 78 print_header_simple(format_string($workshop->name), "", 79 "<a href=\"index.php?id=$course->id\">$strworkshops</a> -> 80 <a href=\"view.php?id=$cm->id\">".format_string($workshop->name,true)."</a> -> $strassessments", 81 "", "", true); 82 83 /*************** add comment to assessment (by author, assessor or teacher) ***************************/ 84 if ($action == 'addcomment') { 85 86 print_heading_with_help(get_string("addacomment", "workshop"), "addingacomment", "workshop"); 87 // get assessment record 88 if (!$assessmentid = $aid) { // comes from link or hidden form variable 89 error("Assessment id not given"); 90 } 91 $assessment = get_record("workshop_assessments", "id", $assessmentid); 92 if (!$submission = get_record("workshop_submissions", "id", $assessment->submissionid)) { 93 error("Submission not found"); 94 } 95 ?> 96 <form id="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 $aid ?>" /> 100 <div class="boxaligncenter"> 101 <table cellpadding="5" border="1"> 102 <?php 103 104 // now get the comment 105 echo "<tr valign=\"top\">\n"; 106 107 echo " <td align=\"right\"><b>". get_string("comment", "workshop").":</b></td>\n"; 108 109 echo " <td>\n"; 110 111 echo " <textarea name=\"comments\" rows=\"5\" cols=\"75\">\n"; 112 echo "</textarea>\n"; 113 114 echo " </td></tr></table>\n"; 115 echo "<input type=\"submit\" value=\"".get_string("savemycomment", "workshop")."\" />\n"; 116 echo "</div></form>\n"; 117 echo "<div style=\"text-align:center\"><b>".get_string("assessment", "workshop"). "</b></div>\n"; 118 workshop_print_assessment($workshop, $assessment); 119 } 120 121 122 /*************** add stock comment (by teacher ) ***************************/ 123 elseif ($action == 'addstockcomment') { 124 125 if (empty($aid) or ($elementno<0)) { 126 error("Workshop Assessment ID and/or Element Number missing"); 127 } 128 129 require_capability('mod/workshop:manage', $context); 130 131 if (!$assessment = get_record("workshop_assessments", "id", $aid)) { 132 error("workshop assessment is misconfigured"); 133 } 134 $form = data_submitted('nomatch'); //Nomatch because we can come from assess.php 135 136 // store the comment in the stock comments table 137 if ($elementno == 99) { // it's the general comment 138 $form->feedback_99 = $form->generalcomment; 139 } 140 $comment->workshopid = $workshop->id; 141 $comment->elementno = $elementno; 142 $comment->comments = clean_param($form->{"feedback_$elementno"}, PARAM_CLEAN); 143 if (!(trim($comment->comments))) { 144 // no comment given - just redisplay assessment form 145 workshop_print_assessment($workshop, $assessment, true, true, $form->returnto); 146 print_footer($course); 147 exit(); 148 } 149 150 if (!$element->id = insert_record("workshop_stockcomments", $comment)) { 151 error("Could not insert comment into comment bank"); 152 } 153 154 // now upate the assessment (just the elements, the assessment itself is not updated) 155 156 // first get the assignment elements for maxscores and weights... 157 $elementsraw = get_records("workshop_elements", "workshopid", $workshop->id, "elementno ASC"); 158 if (count($elementsraw) < $workshop->nelements) { 159 print_string("noteonassignmentelements", "workshop"); 160 } 161 if ($elementsraw) { 162 foreach ($elementsraw as $element) { 163 $elements[] = $element; // to renumber index 0,1,2... 164 } 165 } else { 166 $elements = null; 167 } 168 169 $timenow = time(); 170 // don't fiddle about, delete all the old and add the new! 171 delete_records("workshop_grades", "assessmentid", $assessment->id); 172 173 174 //determine what kind of grading we have 175 switch ($workshop->gradingstrategy) { 176 case 0: // no grading 177 // Insert all the elements that contain something 178 for ($i = 0; $i < $workshop->nelements; $i++) { 179 unset($element); 180 $element->workshopid = $workshop->id; 181 $element->assessmentid = $assessment->id; 182 $element->elementno = $i; 183 $element->feedback = clean_param($form->{"feedback_$i"}, PARAM_CLEAN); 184 if (!$element->id = insert_record("workshop_grades", $element)) { 185 error("Could not insert workshop grade!"); 186 } 187 } 188 $grade = 0; // set to satisfy save to db 189 break; 190 191 case 1: // accumulative grading 192 // Insert all the elements that contain something 193 foreach ($form->grade as $key => $thegrade) { 194 unset($element); 195 $element->workshopid = $workshop->id; 196 $element->assessmentid = $assessment->id; 197 $element->elementno = clean_param($key, PARAM_INT); 198 $element->feedback = clean_param($form->{"feedback_$key"}, PARAM_CLEAN); 199 $element->grade = $thegrade; 200 if (!$element->id = insert_record("workshop_grades", $element)) { 201 error("Could not insert workshop grade!"); 202 } 203 } 204 // now work out the grade... 205 $rawgrade=0; 206 $totalweight=0; 207 foreach ($form->grade as $key => $grade) { 208 $maxscore = $elements[$key]->maxscore; 209 $weight = $WORKSHOP_EWEIGHTS[$elements[$key]->weight]; 210 if ($weight > 0) { 211 $totalweight += $weight; 212 } 213 $rawgrade += ($grade / $maxscore) * $weight; 214 // echo "\$key, \$maxscore, \$weight, \$totalweight, \$grade, \$rawgrade : $key, $maxscore, $weight, $totalweight, $grade, $rawgrade<br />"; 215 } 216 $grade = 100.0 * ($rawgrade / $totalweight); 217 break; 218 219 case 2: // error banded graded 220 // Insert all the elements that contain something 221 $error = 0.0; 222 for ($i =0; $i < $workshop->nelements; $i++) { 223 unset($element); 224 $element->workshopid = $workshop->id; 225 $element->assessmentid = $assessment->id; 226 $element->elementno = $i; 227 $element->feedback = clean_param($form->{"feedback_$i"}, PARAM_CLEAN); 228 $element->grade = $form->grade[$i]; 229 if (!$element->id = insert_record("workshop_grades", $element)) { 230 error("Could not insert workshop grade!"); 231 } 232 if (empty($form->grade[$i])){ 233 $error += $WORKSHOP_EWEIGHTS[$elements[$i]->weight]; 234 } 235 } 236 // now save the adjustment 237 unset($element); 238 $i = $workshop->nelements; 239 $element->workshopid = $workshop->id; 240 $element->assessmentid = $assessment->id; 241 $element->elementno = $i; 242 $element->grade = $form->grade[$i]; 243 if (!$element->id = insert_record("workshop_grades", $element)) { 244 error("Could not insert workshop grade!"); 245 } 246 $grade = ($elements[intval($error + 0.5)]->maxscore + $form->grade[$i]) * 100 / $workshop->grade; 247 // do sanity check 248 if ($grade < 0) { 249 $grade = 0; 250 } elseif ($grade > 100) { 251 $grade = 100; 252 } 253 echo "<b>".get_string("weightederrorcount", "workshop", intval($error + 0.5))."</b>\n"; 254 break; 255 256 case 3: // criteria grading 257 // save in the selected criteria value in element zero, 258 unset($element); 259 $element->workshopid = $workshop->id; 260 $element->assessmentid = $assessment->id; 261 $element->elementno = 0; 262 $element->grade = $form->grade[0]; 263 if (!$element->id = insert_record("workshop_grades", $element)) { 264 error("Could not insert workshop grade!"); 265 } 266 // now save the adjustment in element one 267 unset($element); 268 $element->workshopid = $workshop->id; 269 $element->assessmentid = $assessment->id; 270 $element->elementno = 1; 271 $element->grade = $form->grade[1]; 272 if (!$element->id = insert_record("workshop_grades", $element)) { 273 error("Could not insert workshop grade!"); 274 } 275 $grade = ($elements[$form->grade[0]]->maxscore + $form->grade[1]); 276 break; 277 278 case 4: // rubric grading (identical to accumulative grading) 279 // Insert all the elements that contain something 280 foreach ($form->grade as $key => $thegrade) { 281 unset($element); 282 $element->workshopid = $workshop->id; 283 $element->assessmentid = $assessment->id; 284 $element->elementno = clean_param($key, PARAM_INT); 285 $element->feedback = clean_param($form->{"feedback_$key"}, PARAM_CLEAN); 286 $element->grade = $thegrade; 287 if (!$element->id = insert_record("workshop_grades", $element)) { 288 error("Could not insert workshop grade!"); 289 } 290 } 291 // now work out the grade... 292 $rawgrade=0; 293 $totalweight=0; 294 foreach ($form->grade as $key => $grade) { 295 $maxscore = $elements[$key]->maxscore; 296 $weight = $WORKSHOP_EWEIGHTS[$elements[$key]->weight]; 297 if ($weight > 0) { 298 $totalweight += $weight; 299 } 300 $rawgrade += ($grade / $maxscore) * $weight; 301 } 302 $grade = 100.0 * ($rawgrade / $totalweight); 303 break; 304 305 } // end of switch 306 307 308 // any comment? 309 if (!empty($form->generalcomment)) { // update the object (no need to update the db record) 310 $assessment->generalcomment = clean_param($form->generalcomment, PARAM_CLEAN); 311 } 312 313 // redisplay form, going back to original returnto address 314 workshop_print_assessment($workshop, $assessment, true, true, $form->returnto); 315 316 // add_to_log($course->id, "workshop", "assess", "viewassessment.php?id=$cm->id&aid=$assessment->id", "$assessment->id", "$cm->id"); 317 318 } 319 320 321 /******************* confirm delete ************************************/ 322 elseif ($action == 'confirmdelete' ) { 323 324 if (empty($aid)) { 325 error("Confirm delete: assessment id missing"); 326 } 327 328 notice_yesno(get_string("confirmdeletionofthisitem","workshop", get_string("assessment", "workshop")), 329 "assessments.php?action=delete&id=$cm->id&aid=$aid", "submissions.php?action=adminlist&id=$cm->id"); 330 } 331 332 333 /******************* delete ************************************/ 334 elseif ($action == 'delete' ) { 335 336 if (empty($aid)) { 337 error("Delete: submission id missing"); 338 } 339 340 print_string("deleting", "workshop"); 341 // first delete all the associated records... 342 delete_records("workshop_comments", "assessmentid", $aid); 343 delete_records("workshop_grades", "assessmentid", $aid); 344 // ...now delete the assessment... 345 delete_records("workshop_assessments", "id", $aid); 346 347 print_continue("view.php?id=$cm->id"); 348 } 349 350 351 /*********************** admin list of asssessments (of a submission) (by teachers)**************/ 352 elseif ($action == 'adminlist') { 353 354 require_capability('mod/workshop:manage', $context); 355 356 if (empty($sid)) { 357 error ("Workshop asssessments: adminlist called with no sid"); 358 } 359 $submission = get_record("workshop_submissions", "id", $sid); 360 workshop_print_assessments_for_admin($workshop, $submission); 361 print_continue("submissions.php?action=adminlist&id=$cm->id"); 362 } 363 364 365 /*********************** admin list of asssessments by a student (used by teachers only )******************/ 366 elseif ($action == 'adminlistbystudent') { 367 368 require_capability('mod/workshop:manage', $context); 369 370 if (empty($userid)) { 371 error ("Workshop asssessments: adminlistbystudent called with no userid"); 372 } 373 $user = get_record("user", "id", $userid); 374 workshop_print_assessments_by_user_for_admin($workshop, $user); 375 print_continue("submissions.php?action=adminlist&id=$cm->id"); 376 } 377 378 379 /*************** agree (to) assessment (by student) ***************************/ 380 elseif ($action == 'agreeassessment') { 381 $timenow = time(); 382 // assessment id comes from link or hidden form variable 383 if (!$assessment = get_record("workshop_assessments", "id", $aid)) { 384 error("Assessment : agree assessment failed"); 385 } 386 //save time of agreement 387 set_field("workshop_assessments", "timeagreed", $timenow, "id", $assessment->id); 388 echo "<div style=\"text-align:center\"><b>".get_string("savedok", "workshop")."</b></div><br />\n"; 389 390 add_to_log($course->id, "workshop", "agree", "viewassessment.php?id=$cm->id&aid=$assessment->id", "$assessment->id"); 391 print_continue("view.php?id=$cm->id"); 392 } 393 394 395 396 /*************** display grading form (viewed by student) *********************************/ 397 elseif ($action == 'displaygradingform') { 398 399 print_heading_with_help(get_string("specimenassessmentform", "workshop"), "specimen", "workshop"); 400 401 workshop_print_assessment($workshop); // called with no assessment 402 print_continue("view.php?id=$cm->id"); 403 } 404 405 406 /*************** edit comment on assessment (by author, assessor or teacher) ***************************/ 407 elseif ($action == 'editcomment') { 408 409 print_heading_with_help(get_string("editacomment", "workshop"), "editingacomment", "workshop"); 410 // get the comment record... 411 if (!$comment = get_record("workshop_comments", "id", $cid)) { 412 error("Edit Comment: Comment not found"); 413 } 414 if (!$assessment = get_record("workshop_assessments", "id", $comment->assessmentid)) { 415 error("Edit Comment: Assessment not found"); 416 } 417 if (!$submission = get_record("workshop_submissions", "id",