Ejemplo n.º 1
0
 /**
  * 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;
 }