/** * Executes the allocation * * @return teamwork_allocation_result */ public function execute() { global $DB; $result = new teamwork_allocation_result($this); // make sure the teamwork itself is at the expected state if ($this->teamwork->phase != teamwork::PHASE_SUBMISSION) { $result->set_status(teamwork_allocation_result::STATUS_FAILED, get_string('resultfailedphase', 'teamworkallocation_scheduled')); return $result; } if (empty($this->teamwork->submissionend)) { $result->set_status(teamwork_allocation_result::STATUS_FAILED, get_string('resultfaileddeadline', 'teamworkallocation_scheduled')); return $result; } if ($this->teamwork->submissionend > time()) { $result->set_status(teamwork_allocation_result::STATUS_VOID, get_string('resultvoiddeadline', 'teamworkallocation_scheduled')); return $result; } $current = $DB->get_record('teamworkallocation_scheduled', array('teamworkid' => $this->teamwork->id, 'enabled' => 1), '*', IGNORE_MISSING); if ($current === false) { $result->set_status(teamwork_allocation_result::STATUS_FAILED, get_string('resultfailedconfig', 'teamworkallocation_scheduled')); return $result; } if (!$current->enabled) { $result->set_status(teamwork_allocation_result::STATUS_VOID, get_string('resultdisabled', 'teamworkallocation_scheduled')); return $result; } if (!is_null($current->timeallocated) and $current->timeallocated >= $this->teamwork->submissionend) { $result->set_status(teamwork_allocation_result::STATUS_VOID, get_string('resultvoidexecuted', 'teamworkallocation_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 = teamwork_random_allocator_setting::instance_from_text($current->settings); $randomallocator = $this->teamwork->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('teamworkallocation_scheduled', $update); return $result; }