Beispiel #1
0
 /**
  * Tests forbidden call to setDay on Daily
  */
 public function testSetDayScheduledTimeDaily()
 {
     try {
         $dailySchedule = Schedule::factory('daily');
         $dailySchedule->setDay(1);
     } catch (Exception $e) {
         return;
     }
     $this->fail('Expected exception not raised');
 }
Beispiel #2
0
 public function schedule()
 {
     foreach (API::getInstance()->getReports() as $report) {
         if (!$report['deleted'] && $report['period'] != Schedule::PERIOD_NEVER) {
             $schedule = Schedule::getScheduledTimeForPeriod($report['period']);
             $schedule->setHour($report['hour']);
             $schedule->setTimezone('UTC');
             // saved hour is UTC always
             $this->custom(API::getInstance(), 'sendReport', $report['idreport'], $schedule);
         }
     }
 }
Beispiel #3
0
 /**
  * @group Plugins
  */
 public function testGetScheduledTasks()
 {
     // stub API to control getReports() return values
     $report1 = self::getDailyPDFReportData($this->idSite);
     $report1['idreport'] = 1;
     $report1['hour'] = 0;
     $report1['deleted'] = 0;
     $report2 = self::getMonthlyEmailReportData($this->idSite);
     $report2['idreport'] = 2;
     $report2['idsite'] = 2;
     $report2['hour'] = 0;
     $report2['deleted'] = 0;
     $report3 = self::getMonthlyEmailReportData($this->idSite);
     $report3['idreport'] = 3;
     $report3['deleted'] = 1;
     // should not be scheduled
     $report4 = self::getMonthlyEmailReportData($this->idSite);
     $report4['idreport'] = 4;
     $report4['idsite'] = 1;
     $report4['hour'] = 8;
     $report4['deleted'] = 0;
     $report5 = self::getMonthlyEmailReportData($this->idSite);
     $report5['idreport'] = 5;
     $report5['idsite'] = 2;
     $report5['hour'] = 8;
     $report5['deleted'] = 0;
     // test no exception is raised when a scheduled report is set to never send
     $report6 = self::getMonthlyEmailReportData($this->idSite);
     $report6['idreport'] = 6;
     $report6['period'] = Schedule::PERIOD_NEVER;
     $report6['deleted'] = 0;
     $stubbedAPIScheduledReports = $this->getMock('\\Piwik\\Plugins\\ScheduledReports\\API', array('getReports', 'getInstance'), $arguments = array(), $mockClassName = '', $callOriginalConstructor = false);
     $stubbedAPIScheduledReports->expects($this->any())->method('getReports')->will($this->returnValue(array($report1, $report2, $report3, $report4, $report5, $report6)));
     \Piwik\Plugins\ScheduledReports\API::setSingletonInstance($stubbedAPIScheduledReports);
     // initialize sites 1 and 2
     Site::setSites(array(1 => array('timezone' => 'Europe/Paris'), 2 => array('timezone' => 'UTC-6.5')));
     // expected tasks
     $scheduleTask1 = Schedule::factory('daily');
     $scheduleTask1->setHour(0);
     // paris is UTC-1, period ends at 23h UTC
     $scheduleTask1->setTimezone('Europe/Paris');
     $scheduleTask2 = new Monthly();
     $scheduleTask2->setHour(0);
     // site is UTC-6.5, period ends at 6h30 UTC, smallest resolution is hour
     $scheduleTask2->setTimezone('UTC-6.5');
     $scheduleTask3 = new Monthly();
     $scheduleTask3->setHour(8);
     // paris is UTC-1, configured to be sent at 8h
     $scheduleTask3->setTimezone('Europe/Paris');
     $scheduleTask4 = new Monthly();
     $scheduleTask4->setHour(8);
     // site is UTC-6.5, configured to be sent at 8h
     $scheduleTask4->setTimezone('UTC-6.5');
     $expectedTasks = array(new Task(APIScheduledReports::getInstance(), 'sendReport', 1, $scheduleTask1), new Task(APIScheduledReports::getInstance(), 'sendReport', 2, $scheduleTask2), new Task(APIScheduledReports::getInstance(), 'sendReport', 4, $scheduleTask3), new Task(APIScheduledReports::getInstance(), 'sendReport', 5, $scheduleTask4));
     $pdfReportPlugin = new Tasks();
     $pdfReportPlugin->schedule();
     $tasks = $pdfReportPlugin->getScheduledTasks();
     $this->assertEquals($expectedTasks, $tasks);
     \Piwik\Plugins\ScheduledReports\API::unsetInstance();
 }
 public function provideContainerConfig()
 {
     if (!defined('DEBUG_FORCE_SCHEDULED_TASKS')) {
         define('DEBUG_FORCE_SCHEDULED_TASKS', 1);
     }
     $testingEnvironment = new \Piwik\Tests\Framework\TestingEnvironmentVariables();
     $tasksToAdd = array();
     if ($testingEnvironment->addFailingScheduledTask) {
         if ($testingEnvironment->scheduledTaskFailureShouldBeFatal) {
             $tasksToAdd[] = new Task($this, 'triggerFatalError', null, Schedule::factory('hourly'));
         } else {
             $tasksToAdd[] = new Task($this, 'throwScheduledTaskException', null, Schedule::factory('hourly'));
         }
     }
     if ($testingEnvironment->addScheduledTask) {
         $tasksToAdd[] = new Task($this, 'markScheduledTaskExecutionFinished', null, Schedule::factory('hourly'));
     }
     $result = array();
     if (!empty($tasksToAdd)) {
         $initialTask = new Task($this, 'markCustomTaskExecuted', null, Schedule::factory('hourly'));
         $tasksToAdd = array_merge(array($initialTask), $tasksToAdd);
         $mockTaskLoader = $this->getMock('Piwik\\Scheduler\\TaskLoader', array('loadTasks'));
         $mockTaskLoader->expects($this->any())->method('loadTasks')->will($this->returnValue($tasksToAdd));
         $result['Piwik\\Scheduler\\TaskLoader'] = $mockTaskLoader;
     }
     return $result;
 }
Beispiel #5
0
 /**
  * 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;
 }