*/ class stTaskConfiguration { const TIME_INTERVAL_5MIN = 300; const TIME_INTERVAL_10MIN = self::TIME_INTERVAL_5MIN * 2; const TIME_INTERVAL_15MIN = self::TIME_INTERVAL_5MIN * 3; const TIME_INTERVAL_30MIN = self::TIME_INTERVAL_15MIN * 2; const TIME_INTERVAL_1HOUR = self::TIME_INTERVAL_30MIN * 2; const TIME_INTERVAL_2HOURS = self::TIME_INTERVAL_1HOUR * 2; const TIME_INTERVAL_4HOURS = self::TIME_INTERVAL_1HOUR * 4; const TIME_INTERVAL_6HOURS = self::TIME_INTERVAL_1HOUR * 6; const TIME_INTERVAL_12HOURS = self::TIME_INTERVAL_1HOUR * 12; const TIME_INTERVAL_1DAY = self::TIME_INTERVAL_1HOUR * 24; const TIME_INTERVAL_1WEEK = self::TIME_INTERVAL_1DAY * 7; const PRIORITY_FIRST = -1000000; const PRIORITY_LAST = 1000000; static $tasks = null; /** * Dodaje nowe zadanie * * @param string $id Id zadania * @param string $className Klasa zadania * @param string $name Nazwa zadania (wyświetlana użytkownikowi) * @param integer $interval Interwał czasowy * @param string $executeAt Godzina o której ma zostać wykonane zadanie (parametr jest brany pod uwagę tylko w przypadku interwału czasowego: TIME_INTERVAL_1DAY, TIME_INTERVAL_1WEEK) * @param bool $isSystem Zadanie systemowe * @return void */ public static function addTask(string $id, string $className, string $name, array $options = array()): void { if (strlen($id) > 64) { throw new stTaskConfigurationException('The task id cannot exceed 64 characters'); } if (!class_exists($className)) { throw new stTaskConfigurationException(sprintf('The class name "%s" does not exist', $className)); } $options = stConfigHelper::mergeOptions($options, [ 'time_interval' => self::TIME_INTERVAL_1HOUR, 'execute_at' => '23:59:59', 'is_system' => false, 'priority' => 0, 'is_active' => true, 'frontend' => false, 'parent' => null, ]); $options['class_name'] = $className; $options['name'] = $name; $tasks = sfConfig::get('app_st_task_scheluder_tasks', array()); if (!self::hasTimeInterval($options['time_interval'])) { $options['is_system'] = true; } $tasks[$id] = $options; sfConfig::set('app_st_task_scheluder_tasks', $tasks); } /** * Sprawdza czy podany interwał czasowy istnieje * * @param int $timeInterval Interwał czasowy * @return bool */ public static function hasTimeInterval(int $timeInterval) { $timeIntervals = self::getTimeIntervals(); return isset($timeIntervals[$timeInterval]); } /** * Zwraca listę dostępnych interwałów czasowych * * @var int $minTimeInerval Minimalny interwał czasowy */ public static function getTimeIntervals(int $minTimeInerval = null) { $timeIntervals = array( stTaskConfiguration::TIME_INTERVAL_10MIN => 'co 10 minut', stTaskConfiguration::TIME_INTERVAL_15MIN => 'co 15 minut', stTaskConfiguration::TIME_INTERVAL_30MIN => 'co 30 minut', stTaskConfiguration::TIME_INTERVAL_1HOUR => 'co 1 godzinę', stTaskConfiguration::TIME_INTERVAL_2HOURS => 'co 2 godziny', stTaskConfiguration::TIME_INTERVAL_4HOURS => 'co 4 godziny', stTaskConfiguration::TIME_INTERVAL_6HOURS => 'co 6 godzin', stTaskConfiguration::TIME_INTERVAL_12HOURS => 'co 12 godzin', stTaskConfiguration::TIME_INTERVAL_1DAY => 'raz dziennie', stTaskConfiguration::TIME_INTERVAL_1WEEK => 'co tydzień', ); if (null !== $minTimeInerval) { foreach ($timeIntervals as $timeInterval => $label) { if ($minTimeInerval > $timeInterval) { unset($timeIntervals[$timeInterval]); } } } return $timeIntervals; } /** * Zwraca konfiguracje dla zadania * * @param string $taskId * @return array */ public static function getTask(string $taskId) { $tasks = self::getTasks(); if (!isset($tasks[$taskId])) { throw new stTaskConfigurationException(sprintf('The task with id "%s" does not exist', $taskId)); } return $tasks[$taskId]; } /** * Zwraca listę konfiguracji zadań * * @return array */ public static function getTasks(): array { if (null === self::$tasks) { stEventDispatcher::getInstance()->notify(new sfEvent(null, 'stTaskConfiguration.getTasks')); $tasks = sfConfig::get('app_st_task_scheluder_tasks', array()); uasort($tasks, function ($t1, $t2) { if ($t1['priority'] == $t2['priority']) { return 0; } return ($t1['priority'] < $t2['priority']) ? -1 : 1; }); self::$tasks = $tasks; } return self::$tasks; } }