function workshopallocation_live_assessable_uploaded($event) { global $DB; $cm = get_coursemodule_from_id('workshop', $event->contextinstanceid, 0, false, MUST_EXIST); $course = $DB->get_record('course', array('id' => $cm->course), '*', MUST_EXIST); $instance = $DB->get_record('workshop', array('id' => $cm->instance), '*', MUST_EXIST); $workshop = new workshop($instance, $cm, $course); $record = $DB->get_record('workshopallocation_live', array('workshopid' => $workshop->id)); if ($workshop->phase == workshop::PHASE_ASSESSMENT and $record and $record->enabled) { $randomallocator = $workshop->allocator_instance('random'); $settings = workshop_random_allocator_setting::instance_from_text($record->settings); $result = new workshop_allocation_result($randomallocator); $randomallocator->execute($settings, $result); } return true; }
/** * Executes the allocation * * @return workshop_allocation_result */ public function execute() { global $DB; $result = new workshop_allocation_result($this); // make sure the workshop itself is at the expected state if ($this->workshop->phase != workshop::PHASE_SUBMISSION) { $result->set_status(workshop_allocation_result::STATUS_FAILED, get_string('resultfailedphase', 'workshopallocation_scheduled')); return $result; } if (empty($this->workshop->submissionend)) { $result->set_status(workshop_allocation_result::STATUS_FAILED, get_string('resultfaileddeadline', 'workshopallocation_scheduled')); return $result; } if ($this->workshop->submissionend > time()) { $result->set_status(workshop_allocation_result::STATUS_VOID, get_string('resultvoiddeadline', 'workshopallocation_scheduled')); return $result; } $current = $DB->get_record('workshopallocation_scheduled', array('workshopid' => $this->workshop->id, 'enabled' => 1), '*', IGNORE_MISSING); if ($current === false) { $result->set_status(workshop_allocation_result::STATUS_FAILED, get_string('resultfailedconfig', 'workshopallocation_scheduled')); return $result; } if (!$current->enabled) { $result->set_status(workshop_allocation_result::STATUS_VOID, get_string('resultdisabled', 'workshopallocation_scheduled')); return $result; } if (!is_null($current->timeallocated) and $current->timeallocated >= $this->workshop->submissionend) { $result->set_status(workshop_allocation_result::STATUS_VOID, get_string('resultvoidexecuted', 'workshopallocation_scheduled')); return $result; } // so now we know that we are after the submissions deadline and either the scheduled allocation was not // executed yet or it was but the submissions deadline has been prolonged (and hence we should repeat the // allocations) $settings = workshop_random_allocator_setting::instance_from_text($current->settings); $randomallocator = $this->workshop->allocator_instance('random'); $randomallocator->execute($settings, $result); // store the result in the instance's table $update = new stdClass(); $update->id = $current->id; $update->timeallocated = $result->get_timeend(); $update->resultstatus = $result->get_status(); $update->resultmessage = $result->get_message(); $update->resultlog = json_encode($result->get_logs()); $DB->update_record('workshopallocation_scheduled', $update); return $result; }