See Release Notes
Long Term Support Release
Differences Between: [Versions 310 and 401] [Versions 39 and 401]
1 <?php 2 // This file is part of Moodle - http://moodle.org/ 3 // 4 // Moodle is free software: you can redistribute it and/or modify 5 // it under the terms of the GNU General Public License as published by 6 // the Free Software Foundation, either version 3 of the License, or 7 // (at your option) any later version. 8 // 9 // Moodle is distributed in the hope that it will be useful, 10 // but WITHOUT ANY WARRANTY; without even the implied warranty of 11 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 // GNU General Public License for more details. 13 // 14 // You should have received a copy of the GNU General Public License 15 // along with Moodle. If not, see <http://www.gnu.org/licenses/>. 16 17 /** 18 * Event observers for workshopallocation_scheduled. 19 * 20 * @package workshopallocation_scheduled 21 * @copyright 2013 Adrian Greeve <adrian@moodle.com> 22 * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later 23 */ 24 25 namespace workshopallocation_scheduled; 26 defined('MOODLE_INTERNAL') || die(); 27 28 /** 29 * Class for workshopallocation_scheduled observers. 30 * 31 * @package workshopallocation_scheduled 32 * @copyright 2013 Adrian Greeve <adrian@moodle.com> 33 * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later 34 */ 35 class observer { 36 37 /** 38 * Triggered when the '\mod_workshop\event\course_module_viewed' event is triggered. 39 * 40 * This does the same job as {@link workshopallocation_scheduled_cron()} but for the 41 * single workshop. The idea is that we do not need to wait for cron to execute. 42 * Displaying the workshop main view.php can trigger the scheduled allocation, too. 43 * 44 * @param \mod_workshop\event\course_module_viewed $event 45 * @return bool 46 */ 47 public static function workshop_viewed($event) { 48 global $DB, $CFG; 49 50 require_once($CFG->dirroot . '/mod/workshop/locallib.php'); 51 52 $workshop = $event->get_record_snapshot('workshop', $event->objectid); 53 $course = $event->get_record_snapshot('course', $event->courseid); 54 $cm = $event->get_record_snapshot('course_modules', $event->contextinstanceid); 55 56 $workshop = new \workshop($workshop, $cm, $course); 57 $now = time(); 58 59 // Non-expensive check to see if the scheduled allocation can even happen. 60 if ($workshop->phase == \workshop::PHASE_SUBMISSION and $workshop->submissionend > 0 and $workshop->submissionend < $now) { 61 62 // Make sure the scheduled allocation has been configured for this workshop, that it has not 63 // been executed yet and that the passed workshop record is still valid. 64 $sql = "SELECT a.id 65 FROM {workshopallocation_scheduled} a 66 JOIN {workshop} w ON a.workshopid = w.id 67 WHERE w.id = :workshopid 68 AND a.enabled = 1 69 AND w.phase = :phase 70 AND w.submissionend > 0 71 AND w.submissionend < :now 72 AND (a.timeallocated IS NULL OR a.timeallocated < w.submissionend)"; 73 $params = array('workshopid' => $workshop->id, 'phase' => \workshop::PHASE_SUBMISSION, 'now' => $now); 74 75 if ($DB->record_exists_sql($sql, $params)) { 76 // Allocate submissions for assessments. 77 $allocator = $workshop->allocator_instance('scheduled'); 78 $result = $allocator->execute(); 79 // Todo inform the teachers about the results. 80 } 81 } 82 return true; 83 } 84 85 /** 86 * Called when the '\mod_workshop\event\phase_automatically_switched' event is triggered. 87 * 88 * This observer handles the phase_automatically_switched event triggered when phaseswithassesment is active 89 * and the phase is automatically switched. 90 * 91 * When this happens, this situation can occur: 92 * 93 * * cron_task transition the workshop to PHASE_ASESSMENT. 94 * * scheduled_allocator task executes. 95 * * scheduled_allocator task cannot allocate parcipants because workshop is not 96 * in PHASE_SUBMISSION state (it's in PHASE_ASSESMENT). 97 * 98 * @param \mod_workshop\event\phase_automatically_switched $event 99 */ 100 public static function phase_automatically_switched(\mod_workshop\event\phase_automatically_switched $event) { 101 if ($event->other['previousworkshopphase'] != \workshop::PHASE_SUBMISSION) { 102 return; 103 } 104 if ($event->other['targetworkshopphase'] != \workshop::PHASE_ASSESSMENT) { 105 return; 106 } 107 108 $workshop = $event->get_record_snapshot('workshop', $event->objectid); 109 $course = $event->get_record_snapshot('course', $event->courseid); 110 $cm = $event->get_record_snapshot('course_modules', $event->contextinstanceid); 111 112 $workshop = new \workshop($workshop, $cm, $course); 113 if ($workshop->phase != \workshop::PHASE_ASSESSMENT) { 114 return; 115 } 116 117 $allocator = $workshop->allocator_instance('scheduled'); 118 // We know that we come from PHASE_SUBMISSION so we tell the allocator not to test for the PHASE_SUBMISSION state. 119 $allocator->execute(false); 120 } 121 }
title
Description
Body
title
Description
Body
title
Description
Body
title
Body