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 * @param int $priority * * @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) { $this->checkIsValidTask($objectOrClassName, $methodName); if (is_string($time)) { $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)); return $time; } /** * 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) { $this->tasks[] = $task; } private function checkIsValidTask($objectOrClassName, $methodName) { Development::checkMethodIsCallable($objectOrClassName, $methodName, 'The registered task is not valid as the method'); } }