コード例 #1
0
ファイル: TaskRepository.php プロジェクト: Pterodactyl/Panel
 /**
  * Create a new scheduled task for a given server.
  * @param  int      $id
  * @param  array    $data
  *
  * @throws DisplayException
  * @throws DisplayValidationException
  * @return void
  */
 public function create($id, $data)
 {
     $server = Models\Server::findOrFail($id);
     $validator = Validator::make($data, ['action' => 'string|required', 'data' => 'string|required', 'year' => 'string|sometimes', 'day_of_week' => 'string|sometimes', 'month' => 'string|sometimes', 'day_of_month' => 'string|sometimes', 'hour' => 'string|sometimes', 'minute' => 'string|sometimes']);
     if ($validator->fails()) {
         throw new DisplayValidationException(json_encode($validator->errors()));
     }
     if (!in_array($data['action'], $this->actions)) {
         throw new DisplayException('The action provided is not valid.');
     }
     $cron = $this->defaults;
     foreach ($this->defaults as $setting => $value) {
         if (array_key_exists($setting, $data) && !is_null($data[$setting]) && $data[$setting] !== '') {
             $cron[$setting] = $data[$setting];
         }
     }
     // Check that is this a valid Cron Entry
     try {
         $buildCron = Cron::factory(sprintf('%s %s %s %s %s %s', $cron['minute'], $cron['hour'], $cron['day_of_month'], $cron['month'], $cron['day_of_week'], $cron['year']));
     } catch (\Exception $ex) {
         throw $ex;
     }
     $task = new Models\Task();
     $task->fill(['server' => $server->id, 'active' => 1, 'action' => $data['action'], 'data' => $data['data'], 'queued' => 0, 'year' => $cron['year'], 'day_of_week' => $cron['day_of_week'], 'month' => $cron['month'], 'day_of_month' => $cron['day_of_month'], 'hour' => $cron['hour'], 'minute' => $cron['minute'], 'last_run' => null, 'next_run' => $buildCron->getNextRunDate()]);
     return $task->save();
 }