예제 #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;
 }
예제 #2
0
 /**
  * Allocate submissions as requested by user
  *
  * @return teamwork_allocation_result
  */
 public function init()
 {
     global $PAGE;
     $mode = optional_param('mode', 'display', PARAM_ALPHA);
     $perpage = optional_param('perpage', null, PARAM_INT);
     if ($perpage and $perpage > 0 and $perpage <= 1000) {
         require_sesskey();
         set_user_preference('teamworkallocation_manual_perpage', $perpage);
         redirect($PAGE->url);
     }
     $result = new teamwork_allocation_result($this);
     switch ($mode) {
         case 'new':
             if (!confirm_sesskey()) {
                 throw new moodle_exception('confirmsesskeybad');
             }
             $reviewerid = required_param('by', PARAM_INT);
             $authorid = required_param('of', PARAM_INT);
             $m = array();
             // message object to be passed to the next page
             $submission = $this->teamwork->get_submission_by_author($authorid);
             if (!$submission) {
                 // nothing submitted by the given user
                 $m[] = self::MSG_NOSUBMISSION;
                 $m[] = $authorid;
             } else {
                 // ok, we have the submission
                 $res = $this->teamwork->add_allocation($submission, $reviewerid);
                 if ($res == teamwork::ALLOCATION_EXISTS) {
                     $m[] = self::MSG_EXISTS;
                     $m[] = $submission->authorid;
                     $m[] = $reviewerid;
                 } else {
                     $m[] = self::MSG_ADDED;
                     $m[] = $submission->authorid;
                     $m[] = $reviewerid;
                 }
             }
             $m = implode('-', $m);
             // serialize message object to be passed via URL
             redirect($PAGE->url->out(false, array('m' => $m)));
             break;
         case 'del':
             if (!confirm_sesskey()) {
                 throw new moodle_exception('confirmsesskeybad');
             }
             $assessmentid = required_param('what', PARAM_INT);
             $confirmed = optional_param('confirm', 0, PARAM_INT);
             $assessment = $this->teamwork->get_assessment_by_id($assessmentid);
             if ($assessment) {
                 if (!$confirmed) {
                     $m[] = self::MSG_CONFIRM_DEL;
                     $m[] = $assessment->id;
                     $m[] = $assessment->authorid;
                     $m[] = $assessment->reviewerid;
                     if (is_null($assessment->grade)) {
                         $m[] = 0;
                     } else {
                         $m[] = 1;
                     }
                 } else {
                     if ($this->teamwork->delete_assessment($assessment->id)) {
                         $m[] = self::MSG_DELETED;
                         $m[] = $assessment->authorid;
                         $m[] = $assessment->reviewerid;
                     } else {
                         $m[] = self::MSG_DELETE_ERROR;
                         $m[] = $assessment->authorid;
                         $m[] = $assessment->reviewerid;
                     }
                 }
                 $m = implode('-', $m);
                 // serialize message object to be passed via URL
                 redirect($PAGE->url->out(false, array('m' => $m)));
             }
             break;
     }
     $result->set_status(teamwork_allocation_result::STATUS_VOID);
     return $result;
 }