[ Index ]

PHP Cross Reference of Moodle

title

Body

[close]

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

   1  <?php  // $Id: lib.php,v 1.95.2.1 2007/03/07 07:49:03 moodler Exp $
   2  
   3  // workshop constants and standard Moodle functions plus the workshop functions 
   4  // called by the standard functions
   5  
   6  // see also locallib.php for other non-standard workshop functions
   7  
   8  require_once($CFG->libdir.'/filelib.php');
   9  
  10  /*** Constants **********************************/
  11  
  12  
  13  $WORKSHOP_EWEIGHTS = array(  0 => -4.0, 1 => -2.0, 2 => -1.5, 3 => -1.0, 4 => -0.75, 5 => -0.5,  6 => -0.25, 
  14                               7 => 0.0, 8 => 0.25, 9 => 0.5, 10 => 0.75, 11=> 1.0, 12 => 1.5, 13=> 2.0, 
  15                               14 => 4.0); 
  16  
  17  $WORKSHOP_FWEIGHTS = array(  0 => 0, 1 => 0.1, 2 => 0.25, 3 => 0.5, 4 => 0.75, 5 => 1.0,  6 => 1.5, 
  18                               7 => 2.0, 8 => 3.0, 9 => 5.0, 10 => 7.5, 11=> 10.0, 12=>50.0); 
  19  
  20  
  21  $WORKSHOP_ASSESSMENT_COMPS = array (
  22                            0 => array('name' => get_string('verylax', 'workshop'), 'value' => 1),
  23                            1 => array('name' => get_string('lax', 'workshop'), 'value' => 0.6),
  24                            2 => array('name' => get_string('fair', 'workshop'), 'value' => 0.4),
  25                            3 => array('name' => get_string('strict', 'workshop'), 'value' => 0.33),
  26                            4 => array('name' => get_string('verystrict', 'workshop'), 'value' => 0.2) );
  27  
  28  
  29  /*** Moodle 1.7 compatibility functions *****
  30   *
  31   ********************************************/
  32  function workshop_context($workshop) {
  33      //TODO: add some $cm caching if needed
  34      if (is_object($workshop)) {
  35          $workshop = $workshop->id;
  36      }
  37      if (! $cm = get_coursemodule_from_instance('workshop', $workshop)) {
  38          error('Course Module ID was incorrect');
  39      }
  40  
  41      return get_context_instance(CONTEXT_MODULE, $cm->id);
  42  }
  43  
  44  function workshop_is_teacher($workshop, $userid=NULL) {
  45      return has_capability('mod/workshop:manage', workshop_context($workshop), $userid);
  46  }
  47   
  48  function workshop_is_teacheredit($workshop, $userid=NULL) {
  49      return has_capability('mod/workshop:manage', workshop_context($workshop), $userid)
  50         and has_capability('moodle/site:accessallgroups', workshop_context($workshop), $userid);
  51  }
  52  
  53  function workshop_is_student($workshop, $userid=NULL) {
  54      return has_capability('mod/workshop:participate', workshop_context($workshop), $userid);
  55  }
  56  
  57  function workshop_get_students($workshop, $sort='u.lastaccess', $fields='u.*') {
  58      return $users = get_users_by_capability(workshop_context($workshop), 'mod/workshop:participate', $fields, $sort);
  59  }
  60  
  61  function workshop_get_teachers($workshop, $sort='u.lastaccess', $fields='u.*') {
  62      return $users = get_users_by_capability(workshop_context($workshop), 'mod/workshop:manage', $fields, $sort);
  63  }
  64  
  65  
  66  /*** Standard Moodle functions ******************
  67  workshop_add_instance($workshop) 
  68  workshop_check_dates($workshop)
  69  workshop_cron () 
  70  workshop_delete_instance($id) 
  71  workshop_grades($workshopid) 
  72  workshop_print_recent_activity(&$logs, $isteacher=false) 
  73  workshop_refresh_events($workshop) 
  74  workshop_update_instance($workshop) 
  75  workshop_user_complete($course, $user, $mod, $workshop) 
  76  workshop_user_outline($course, $user, $mod, $workshop) 
  77  **********************************************/
  78  
  79  ///////////////////////////////////////////////////////////////////////////////
  80  function workshop_add_instance($workshop) {
  81  // Given an object containing all the necessary data, 
  82  // (defined by the form in mod.html) this function 
  83  // will create a new instance and return the id number 
  84  // of the new instance.
  85  
  86      $workshop->timemodified = time();
  87  
  88      $workshop->submissionstart = make_timestamp($workshop->submissionstartyear, 
  89              $workshop->submissionstartmonth, $workshop->submissionstartday, $workshop->submissionstarthour, 
  90              $workshop->submissionstartminute);
  91  
  92      $workshop->assessmentstart = make_timestamp($workshop->assessmentstartyear, 
  93              $workshop->assessmentstartmonth, $workshop->assessmentstartday, $workshop->assessmentstarthour, 
  94              $workshop->assessmentstartminute);
  95  
  96      $workshop->submissionend = make_timestamp($workshop->submissionendyear, 
  97              $workshop->submissionendmonth, $workshop->submissionendday, $workshop->submissionendhour, 
  98              $workshop->submissionendminute);
  99  
 100      $workshop->assessmentend = make_timestamp($workshop->assessmentendyear, 
 101              $workshop->assessmentendmonth, $workshop->assessmentendday, $workshop->assessmentendhour, 
 102              $workshop->assessmentendminute);
 103  
 104      $workshop->releasegrades = make_timestamp($workshop->releaseyear, 
 105              $workshop->releasemonth, $workshop->releaseday, $workshop->releasehour, 
 106              $workshop->releaseminute);
 107      
 108      if (!workshop_check_dates($workshop)) {
 109          return get_string('invaliddates', 'workshop');
 110      }
 111  
 112      if ($returnid = insert_record("workshop", $workshop)) {
 113  
 114          $event = NULL;
 115          $event->name        = get_string('submissionstartevent','workshop', $workshop->name);
 116          $event->description = $workshop->description;
 117          $event->courseid    = $workshop->course;
 118          $event->groupid     = 0;
 119          $event->userid      = 0;
 120          $event->modulename  = 'workshop';
 121          $event->instance    = $returnid;
 122          $event->eventtype   = 'submissionstart';
 123          $event->timestart   = $workshop->submissionstart;
 124          $event->timeduration = 0;
 125          add_event($event);
 126  
 127          $event->name        = get_string('submissionendevent','workshop', $workshop->name);
 128          $event->eventtype   = 'submissionend';
 129          $event->timestart   = $workshop->submissionend;
 130          add_event($event);
 131  
 132          $event->name        = get_string('assessmentstartevent','workshop', $workshop->name);
 133          $event->eventtype   = 'assessmentstart';
 134          $event->timestart   = $workshop->assessmentstart;
 135          add_event($event);
 136  
 137          $event->name        = get_string('assessmentendevent','workshop', $workshop->name);
 138          $event->eventtype   = 'assessmentend';
 139          $event->timestart   = $workshop->assessmentend;
 140          add_event($event);
 141      }
 142  
 143      return $returnid;
 144  }
 145  
 146  ///////////////////////////////////////////////////////////////////////////////
 147  // returns true if the dates are valid, false otherwise
 148  function workshop_check_dates($workshop) {
 149      // allow submission and assessment to start on the same date and to end on the same date
 150      // but enforce non-empty submission period and non-empty assessment period.
 151      return ($workshop->submissionstart < $workshop->submissionend and
 152              $workshop->submissionstart <= $workshop->assessmentstart and
 153              $workshop->assessmentstart < $workshop->assessmentend and
 154              $workshop->submissionend <= $workshop->assessmentend);
 155  }
 156  
 157  
 158  ///////////////////////////////////////////////////////////////////////////////
 159  function workshop_cron () {
 160  // Function to be run periodically according to the moodle cron
 161  
 162      global $CFG, $USER;
 163      
 164      // if there any ungraded assessments run the grading routine
 165      if ($workshops = get_records("workshop")) {
 166          foreach ($workshops as $workshop) {
 167              // automatically grade assessments if workshop has examples and/or peer assessments
 168              if ($workshop->gradingstrategy and ($workshop->ntassessments or $workshop->nsassessments)) {
 169                  workshop_grade_assessments($workshop);
 170              }
 171          }
 172      }
 173      $timenow = time();
 174  
 175      $CFG->enablerecordcache = true;      // We want all the caching we can get
 176      
 177      // Find all workshop notifications that have yet to be mailed out, and mails them
 178      $cutofftime = $timenow - $CFG->maxeditingtime;
 179  
 180      // look for new assessments
 181      if ($assessments = workshop_get_unmailed_assessments($cutofftime)) {
 182          foreach ($assessments as $assessment) {
 183  
 184              echo "Processing workshop assessment $assessment->id\n";
 185              
 186              // only process the entry once
 187              if (! set_field("workshop_assessments", "mailed", "1", "id", "$assessment->id")) {
 188                  echo "Could not update the mailed field for id $assessment->id\n";
 189              }
 190              
 191              if (! $submission = get_record("workshop_submissions", "id", "$assessment->submissionid")) {
 192                  echo "Could not find submission $assessment->submissionid\n";
 193                  continue;
 194              }
 195              if (! $workshop = get_record("workshop", "id", $submission->workshopid)) {
 196                  echo "Could not find workshop id $submission->workshopid\n";
 197                  continue;
 198              }
 199              if (! $course = get_record("course", "id", $workshop->course)) {
 200                  error("Could not find course id $workshop->course");
 201                  continue;
 202              }
 203              if (! $cm = get_coursemodule_from_instance("workshop", $workshop->id, $course->id)) {
 204                  error("Course Module ID was incorrect");
 205                  continue;
 206              }
 207              if (! $submissionowner = get_record("user", "id", "$submission->userid")) {
 208                  echo "Could not find user $submission->userid\n";
 209                  continue;
 210              }
 211              if (! $assessmentowner = get_record("user", "id", "$assessment->userid")) {
 212                  echo "Could not find user $assessment->userid\n";
 213                  continue;
 214              }
 215              if (! workshop_is_student($workshop, $submissionowner->id) and !workshop_is_teacher($workshop, 
 216                          $submissionowner->id)) {
 217                  continue;  // Not an active participant
 218              }
 219              if (! workshop_is_student($workshop, $assessmentowner->id) and !workshop_is_teacher($workshop, 
 220                          $assessmentowner->id)) {
 221                  continue;  // Not an active participant
 222              }
 223              // don't sent self assessment
 224              if ($submissionowner->id == $assessmentowner->id) {
 225                  continue;
 226              }
 227              $strworkshops = get_string("modulenameplural", "workshop");
 228              $strworkshop  = get_string("modulename", "workshop");
 229      
 230              // it's an assessment, tell the submission owner
 231              $USER->lang = $submissionowner->lang;
 232              $sendto = $submissionowner;
 233              // "Your assignment \"$submission->title\" has been assessed by"
 234              if (workshop_is_student($workshop, $assessmentowner->id)) {
 235                  $msg = get_string("mail1", "workshop", $submission->title)." a $course->student.\n";
 236              }
 237              else {
 238                  $msg = get_string("mail1", "workshop", $submission->title).
 239                      " ".fullname($assessmentowner)."\n";
 240              }
 241              // "The comments and grade can be seen in the workshop assignment '$workshop->name'
 242              // I have taken the following line out because the info is repeated below.
 243              // $msg .= get_string("mail2", "workshop", $workshop->name)."\n\n";
 244      
 245              $postsubject = "$course->shortname: $strworkshops: ".format_string($workshop->name,true);
 246              $posttext  = "$course->shortname -> $strworkshops -> ".format_string($workshop->name,true)."\n";
 247              $posttext .= "---------------------------------------------------------------------\n";
 248              $posttext .= $msg;
 249              // "The comments and grade can be seen in ..."
 250              $posttext .= get_string("mail2", "workshop", 
 251                  format_string($workshop->name,true).",   $CFG->wwwroot/mod/workshop/view.php?id=$cm->id")."\n";
 252              $posttext .= "---------------------------------------------------------------------\n";
 253              if ($sendto->mailformat == 1) {  // HTML
 254                  $posthtml = "<p><font face=\"sans-serif\">".
 255                      "<a href=\"$CFG->wwwroot/course/view.php?id=$course->id\">$course->shortname</a> ->".
 256                      "<a href=\"$CFG->wwwroot/mod/workshop/index.php?id=$course->id\">$strworkshops</a> ->".
 257                      "<a href=\"$CFG->wwwroot/mod/workshop/view.php?id=$cm->id\">".format_string($workshop->name,true)."</a></font></p>";
 258                  $posthtml .= "<hr><font face=\"sans-serif\">";
 259                  $posthtml .= "<p>$msg</p>";
 260                  $posthtml .= "<p>".get_string("mail2", "workshop",
 261                      " <a href=\"$CFG->wwwroot/mod/workshop/view.php?id=$cm->id\">".format_string($workshop->name,true)."</a>")."</p></font><hr>";
 262              } else {
 263                  $posthtml = "";
 264              }
 265      
 266              if (!$teacher = get_teacher($course->id)) {
 267                  echo "Error: can not find teacher for course $course->id!\n";
 268              }
 269                  
 270              if (! email_to_user($sendto, $teacher, $postsubject, $posttext, $posthtml)) {
 271                  echo "Error: workshop cron: Could not send out mail for id $submission->id to 
 272                      user $sendto->id ($sendto->email)\n";
 273              }
 274          }
 275      }
 276          
 277      // look for new assessments of resubmissions
 278      if ($assessments = workshop_get_unmailed_resubmissions($cutofftime)) {
 279          $timenow = time();
 280  
 281          foreach ($assessments as $assessment) {
 282  
 283              echo "Processing workshop assessment $assessment->id\n";
 284              
 285              // only process the entry once
 286              if (! set_field("workshop_assessments", "mailed", "1", "id", "$assessment->id")) {
 287                  echo "Could not update the mailed field for id $assessment->id\n";
 288              }
 289              
 290              if (! $submission = get_record("workshop_submissions", "id", "$assessment->submissionid")) {
 291                  echo "Could not find submission $assessment->submissionid\n";
 292                  continue;
 293              }
 294              if (! $workshop = get_record("workshop", "id", $submission->workshopid)) {
 295                  echo "Could not find workshop id $submission->workshopid\n";
 296                  continue;
 297              }
 298              if (! $course = get_record("course", "id", $workshop->course)) {
 299                  error("Could not find course id $workshop->course");
 300                  continue;
 301              }
 302              if (! $cm = get_coursemodule_from_instance("workshop", $workshop->id, $course->id)) {
 303                  error("Course Module ID was incorrect");
 304                  continue;
 305              }
 306              if (! $submissionowner = get_record("user", "id", "$submission->userid")) {
 307                  echo "Could not find user $submission->userid\n";
 308                  continue;
 309              }
 310              if (! $assessmentowner = get_record("user", "id", "$assessment->userid")) {
 311                  echo "Could not find user $assessment->userid\n";
 312                  continue;
 313              }
 314              if (! workshop_is_student($workshop, $submissionowner->id) and !workshop_is_teacher($workshop, 
 315                          $submissionowner->id)) {
 316                  continue;  // Not an active participant
 317              }
 318              if (! workshop_is_student($workshop, $assessmentowner->id) and !workshop_is_teacher($workshop, 
 319                          $assessmentowner->id)) {
 320                  continue;  // Not an active participant
 321              }
 322      
 323              $strworkshops = get_string("modulenameplural", "workshop");
 324              $strworkshop  = get_string("modulename", "workshop");
 325      
 326              // it's a resubission assessment, tell the assessment owner to (re)assess
 327              $USER->lang = $assessmentowner->lang;
 328              $sendto = $assessmentowner;
 329              // "The assignment \"$submission->title\" is a revised piece of work. "
 330              $msg = get_string("mail8", "workshop", $submission->title)."\n";
 331              // "Please assess it in the workshop assignment '$workshop->name'
 332              // $msg .= get_string("mail9", "workshop", $workshop->name)."\n\n";
 333      
 334              $postsubject = "$course->shortname: $strworkshops: ".format_string($workshop->name,true);
 335              $posttext  = "$course->shortname -> $strworkshops -> ".format_string($workshop->name,true)."\n";
 336              $posttext .= "---------------------------------------------------------------------\n";
 337              $posttext .= $msg;
 338              // "Please assess it in ..."
 339              $posttext .= get_string("mail9", "workshop", 
 340                             format_string($workshop->name,true).", $CFG->wwwroot/mod/workshop/view.php?id=$cm->id")."\n";
 341              $posttext .= "---------------------------------------------------------------------\n";
 342              if ($sendto->mailformat == 1) {  // HTML
 343                  $posthtml = "<p><font face=\"sans-serif\">".
 344                    "<a href=\"$CFG->wwwroot/course/view.php?id=$course->id\">$course->shortname</a> ->".
 345                    "<a href=\"$CFG->wwwroot/mod/workshop/index.php?id=$course->id\">$strworkshops</a> ->".
 346                    "<a href=\"$CFG->wwwroot/mod/workshop/view.php?id=$cm->id\">".format_string($workshop->name,true)."</a></font></p>";
 347                  $posthtml .= "<hr><font face=\"sans-serif\">";
 348                  $posthtml .= "<p>$msg</p>";
 349                  $posthtml .= "<p>".get_string("mail9", "workshop",
 350                    " <a href=\"$CFG->wwwroot/mod/workshop/view.php?id=$cm->id\">".format_string($workshop->name,true)."</a>").'</p></font><hr>';
 351              } 
 352              else {
 353                $posthtml = "";
 354              }
 355      
 356              if (!