Skip to content
Extraits de code Groupes Projets
Tasks.php 5,37 ko
Newer Older
  • Learn to ignore specific revisions
  •  * 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\Plugin;
    
    
    Thomas Steur's avatar
    Thomas Steur a validé
    use Piwik\Development;
    
    use Piwik\Scheduler\Schedule\Schedule;
    
    use Piwik\Scheduler\Task;
    
    /**
     * Base class for all Tasks declarations.
     * Tasks are usually meant as scheduled tasks that are executed regularily by Piwik in the background. For instance
     * once every hour or every day. This could be for instance checking for updates, sending email reports, etc.
     * Please don't mix up tasks with console commands which can be executed on the CLI.
     */
    
        const LOWEST_PRIORITY  = Task::LOWEST_PRIORITY;
        const LOW_PRIORITY     = Task::LOW_PRIORITY;
        const NORMAL_PRIORITY  = Task::NORMAL_PRIORITY;
        const HIGH_PRIORITY    = Task::HIGH_PRIORITY;
        const HIGHEST_PRIORITY = Task::HIGHEST_PRIORITY;
    
        /**
         * This method is called to collect all schedule tasks. Register all your tasks here that should be executed
         * regularily such as daily or monthly.
         */
    
            // eg $this->daily('myMethodName')
    
         * @return Task[] $tasks
    
         */
        public function getScheduledTasks()
        {
            return $this->tasks;
        }
    
        /**
         * Schedule the given tasks/method to run once every hour.
         *
         * @param string $methodName             The name of the method that will be called when the task is being
         *                                       exectuted. To make it work you need to create a public method having the
         *                                       given method name in your Tasks class.
         * @param null|string $methodParameter   Can be null if the task does not need any parameter or a string. It is not
         *                                       possible to specify multiple parameters as an array etc. If you need to
         *                                       pass multiple parameters separate them via any characters such as '###'.
         *                                       For instance '$param1###$param2###$param3'
         * @param int $priority                  Can be any constant such as self::LOW_PRIORITY
         *
    
         * @return Schedule
    
         * @api
         */
        protected function hourly($methodName, $methodParameter = null, $priority = self::NORMAL_PRIORITY)
        {
    
            return $this->custom($this, $methodName, $methodParameter, 'hourly', $priority);
    
        }
    
        /**
         * Schedule the given tasks/method to run once every day.
         *
         * See {@link hourly()}
         * @api
         */
        protected function daily($methodName, $methodParameter = null, $priority = self::NORMAL_PRIORITY)
        {
    
            return $this->custom($this, $methodName, $methodParameter, 'daily', $priority);
    
        }
    
        /**
         * Schedule the given tasks/method to run once every week.
         *
         * See {@link hourly()}
         * @api
         */
        protected function weekly($methodName, $methodParameter = null, $priority = self::NORMAL_PRIORITY)
        {
    
            return $this->custom($this, $methodName, $methodParameter, 'weekly', $priority);
    
        }
    
        /**
         * Schedule the given tasks/method to run once every month.
         *
         * See {@link hourly()}
         * @api
         */
        protected function monthly($methodName, $methodParameter = null, $priority = self::NORMAL_PRIORITY)
        {
    
            return $this->custom($this, $methodName, $methodParameter, 'monthly', $priority);
    
        }
    
        /**
         * Schedules the given tasks/method to run depending at the given scheduled time. Unlike the convenient methods
         * such as {@link hourly()} you need to specify the object on which the given method should be called. This can be
         * either an instance of a class or a class name. For more information about these parameters see {@link hourly()}
         *
         * @param string|object $objectOrClassName
         * @param string $methodName
         * @param null|string $methodParameter
    
         * @param string|Schedule $time
    
         * @return \Piwik\Scheduler\Schedule\Schedule
    
         *
         * @throws \Exception If a wrong time format is given. Needs to be either a string such as 'daily', 'weekly', ...
    
         *                    or an instance of {@link Piwik\Scheduler\Schedule\Schedule}
    
         *
         * @api
         */
        protected function custom($objectOrClassName, $methodName, $methodParameter, $time, $priority = self::NORMAL_PRIORITY)
        {
    
    Thomas Steur's avatar
    Thomas Steur a validé
            $this->checkIsValidTask($objectOrClassName, $methodName);
    
    
                $time = Schedule::factory($time);
    
            if (!($time instanceof Schedule)) {
                throw new \Exception('$time should be an instance of Schedule');
    
            $this->scheduleTask(new Task($objectOrClassName, $methodName, $methodParameter, $time, $priority));
    
        /**
         * In case you need very high flexibility and none of the other convenient methods such as {@link hourly()} or
         * {@link custom()} suit you, you can use this method to add a custom scheduled task.
         *
    
         * @param Task $task
    
        protected function scheduleTask(Task $task)
    
    Thomas Steur's avatar
    Thomas Steur a validé
    
        private function checkIsValidTask($objectOrClassName, $methodName)
        {
            Development::checkMethodIsCallable($objectOrClassName, $methodName, 'The registered task is not valid as the method');
        }