123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204 |
- <?php
- /**
- * Piwik - free/libre analytics platform
- *
- * @link http://piwik.org
- * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
- *
- */
-
- namespace Piwik;
-
- use Exception;
- use Piwik\ScheduledTime;
-
- /**
- * Contains metadata referencing PHP code that should be executed at regular
- * intervals.
- *
- * See the {@link TaskScheduler} docs to learn more about scheduled tasks.
- *
- *
- * @api
- */
- class ScheduledTask
- {
- const LOWEST_PRIORITY = 12;
- const LOW_PRIORITY = 9;
- const NORMAL_PRIORITY = 6;
- const HIGH_PRIORITY = 3;
- const HIGHEST_PRIORITY = 0;
-
- /**
- * Object instance on which the method will be executed by the task scheduler
- * @var string
- */
- private $objectInstance;
-
- /**
- * Class name where the specified method is located
- * @var string
- */
- private $className;
-
- /**
- * Class method to run when task is scheduled
- * @var string
- */
- private $methodName;
-
- /**
- * Parameter to pass to the executed method
- * @var string
- */
- private $methodParameter;
-
- /**
- * The scheduled time policy
- * @var ScheduledTime
- */
- private $scheduledTime;
-
- /**
- * The priority of a task. Affects the order in which this task will be run.
- * @var int
- */
- private $priority;
-
- /**
- * Constructor.
- *
- * @param mixed $objectInstance The object or class that contains the method to execute regularly.
- * Usually this will be a {@link Plugin} instance.
- * @param string $methodName The name of the method that will be regularly executed.
- * @param mixed|null $methodParameter An optional parameter to pass to the method when executed.
- * Must be convertible to string.
- * @param ScheduledTime|null $scheduledTime A {@link ScheduledTime} instance that describes when the method
- * should be executed and how long before the next execution.
- * @param int $priority The priority of the task. Tasks with a higher priority will be executed first.
- * Tasks with low priority will be executed last.
- */
- public function __construct($objectInstance, $methodName, $methodParameter, $scheduledTime,
- $priority = self::NORMAL_PRIORITY)
- {
- $this->className = $this->getClassNameFromInstance($objectInstance);
-
- if ($priority < self::HIGHEST_PRIORITY || $priority > self::LOWEST_PRIORITY) {
- throw new Exception("Invalid priority for ScheduledTask '$this->className.$methodName': $priority");
- }
-
- $this->objectInstance = $objectInstance;
- $this->methodName = $methodName;
- $this->scheduledTime = $scheduledTime;
- $this->methodParameter = $methodParameter;
- $this->priority = $priority;
- }
-
- protected function getClassNameFromInstance($_objectInstance)
- {
- if (is_string($_objectInstance)) {
- return $_objectInstance;
- }
-
- $namespaced = get_class($_objectInstance);
-
- return $namespaced;
- }
-
- /**
- * Returns the object instance that contains the method to execute. Returns a class
- * name if the method is static.
- *
- * @return mixed
- */
- public function getObjectInstance()
- {
- return $this->objectInstance;
- }
-
- /**
- * Returns the name of the class that contains the method to execute.
- *
- * @return string
- */
- public function getClassName()
- {
- return $this->className;
- }
-
- /**
- * Returns the name of the method that will be executed.
- *
- * @return string
- */
- public function getMethodName()
- {
- return $this->methodName;
- }
-
- /**
- * Returns the value that will be passed to the method when executed, or `null` if
- * no value will be supplied.
- *
- * @return string|null
- */
- public function getMethodParameter()
- {
- return $this->methodParameter;
- }
-
- /**
- * Returns a {@link ScheduledTime} instance that describes when the method should be executed
- * and how long before the next execution.
- *
- * @return ScheduledTime
- */
- public function getScheduledTime()
- {
- return $this->scheduledTime;
- }
-
- /**
- * Returns the time in milliseconds when this task will be executed next.
- *
- * @return int
- */
- public function getRescheduledTime()
- {
- return $this->getScheduledTime()->getRescheduledTime();
- }
-
- /**
- * Returns the task priority. The priority will be an integer whose value is
- * between {@link HIGH_PRIORITY} and {@link LOW_PRIORITY}.
- *
- * @return int
- */
- public function getPriority()
- {
- return $this->priority;
- }
-
- /**
- * Returns a unique name for this scheduled task. The name is stored in the DB and is used
- * to store a task's previous execution time. The name is created using:
- *
- * - the name of the class that contains the method to execute,
- * - the name of the method to regularly execute,
- * - and the value that is passed to the executed task.
- *
- * @return string
- */
- public function getName()
- {
- return self::getTaskName($this->getClassName(), $this->getMethodName(), $this->getMethodParameter());
- }
-
- /**
- * @ignore
- */
- public static function getTaskName($className, $methodName, $methodParameter = null)
- {
- return $className . '.' . $methodName . ($methodParameter == null ? '' : '_' . $methodParameter);
- }
- }
|