/** * Regular jobs to execute via cron * * @return boolean true on success, false otherwise */ function teamwork_cron() { global $CFG, $DB; $now = time(); mtrace(' processing teamwork subplugins ...'); cron_execute_plugin_type('teamworkallocation', 'teamwork allocation methods'); // now when the scheduled allocator had a chance to do its job, check if there // are some teamworks to switch into the assessment phase $teamworks = $DB->get_records_select("teamwork", "phase = 20 AND phaseswitchassessment = 1 AND submissionend > 0 AND submissionend < ?", array($now)); if (!empty($teamworks)) { mtrace('Processing automatic assessment phase switch in ' . count($teamworks) . ' teamwork(s) ... ', ''); require_once $CFG->dirroot . '/mod/teamwork/locallib.php'; foreach ($teamworks as $teamwork) { $cm = get_coursemodule_from_instance('teamwork', $teamwork->id, $teamwork->course, false, MUST_EXIST); $course = $DB->get_record('course', array('id' => $cm->course), '*', MUST_EXIST); $teamwork = new teamwork($teamwork, $cm, $course); $teamwork->switch_phase(teamwork::PHASE_ASSESSMENT); $params = array('objectid' => $teamwork->id, 'context' => $teamwork->context, 'courseid' => $teamwork->course->id, 'other' => array('teamworkphase' => $teamwork->phase)); $event = \mod_teamwork\event\phase_switched::create($params); $event->trigger(); // disable the automatic switching now so that it is not executed again by accident // if the teacher changes the phase back to the submission one $DB->set_field('teamwork', 'phaseswitchassessment', 0, array('id' => $teamwork->id)); // todo inform the teachers } mtrace('done'); } return true; }
/** * Switch to a new teamwork phase * * Modifies the underlying database record. You should terminate the script shortly after calling this. * * @param int $newphase new phase code * @return bool true if success, false otherwise */ public function switch_phase($newphase) { global $DB; $known = $this->available_phases_list(); if (!isset($known[$newphase])) { return false; } if (self::PHASE_CLOSED == $newphase) { // push the grades into the gradebook $teamwork = new stdclass(); foreach ($this as $property => $value) { $teamwork->{$property} = $value; } $teamwork->course = $this->course->id; $teamwork->cmidnumber = $this->cm->id; $teamwork->modname = 'teamwork'; teamwork_update_grades($teamwork); } $DB->set_field('teamwork', 'phase', $newphase, array('id' => $this->id)); $this->phase = $newphase; $eventdata = array('objectid' => $this->id, 'context' => $this->context, 'other' => array('teamworkphase' => $this->phase)); $event = \mod_teamwork\event\phase_switched::create($eventdata); $event->trigger(); return true; }