/**
  * Allocate submissions as requested by user
  *
  * @return workshopplus_allocation_result
  */
 public function init()
 {
     global $PAGE;
     $result = new workshopplus_allocation_result($this);
     $customdata = array();
     $customdata['workshopplus'] = $this->workshopplus;
     $this->mform = new workshopplus_random_allocator_form($PAGE->url, $customdata);
     if ($this->mform->is_cancelled()) {
         redirect($this->workshopplus->view_url());
     } else {
         if ($settings = $this->mform->get_data()) {
             $settings = workshopplus_random_allocator_setting::instance_from_object($settings);
             $this->execute($settings, $result);
             return $result;
         } else {
             // this branch is executed if the form is submitted but the data
             // doesn't validate and the form should be redisplayed
             // or on the first display of the form.
             $result->set_status(workshopplus_allocation_result::STATUS_VOID);
             return $result;
         }
     }
 }
 /**
  * Stores the pre-defined random allocation settings for later usage
  *
  * @param bool $enabled is the scheduled allocation enabled
  * @param bool $reset reset the recent execution info
  * @param workshopplus_random_allocator_setting $settings settings form data
  * @param workshopplus_allocation_result $result logger
  */
 protected function store_settings($enabled, $reset, workshopplus_random_allocator_setting $settings, workshopplus_allocation_result $result)
 {
     global $DB;
     $data = new stdClass();
     $data->workshopplusid = $this->workshopplus->id;
     $data->enabled = $enabled;
     $data->submissionend = $this->workshopplus->submissionend;
     $data->settings = $settings->export_text();
     if ($reset) {
         $data->timeallocated = null;
         $data->resultstatus = null;
         $data->resultmessage = null;
         $data->resultlog = null;
     }
     $result->log($data->settings, 'debug');
     $current = $DB->get_record('workshopplusallocation_scheduled', array('workshopplusid' => $data->workshopplusid), '*', IGNORE_MISSING);
     if ($current === false) {
         $DB->insert_record('workshopplusallocation_scheduled', $data);
     } else {
         $data->id = $current->id;
         $DB->update_record('workshopplusallocation_scheduled', $data);
     }
 }