| [ Index ] |
PHP Cross Reference of Moodle |
[Summary view] [Print] [Text view]
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 (!