[ Index ]

PHP Cross Reference of Moodle

title

Body

[close]

/mod/workshop/ -> assessments.php (source)

   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&amp;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&amp;id=$cm->id&amp;aid=$aid", "submissions.php?action=adminlist&amp;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&amp;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&amp;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&amp;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",