| <?php |
|
|
| |
| |
| |
| |
| |
| |
|
|
| namespace Piwik\Scheduler\Schedule; |
|
|
| use Exception; |
|
|
| |
| |
| |
| |
| |
| class Monthly extends Schedule |
| { |
| |
| |
| |
| private static $weekNumberStringToInt = array('first' => 0, 'second' => 1, 'third' => 2, 'fourth' => 3); |
|
|
| |
| |
| |
| |
| |
| private $dayOfWeek = null; |
|
|
| |
| |
| |
| |
| |
| private $week = null; |
|
|
| public function setDayOfWeekFromString($day) |
| { |
| @list($weekNumberString, $dayNumberString) = explode(' ', $day); |
|
|
| |
| $day = Weekly::getDayIntFromString($dayNumberString) % 7; |
|
|
| |
| $weekNumberString = strtolower($weekNumberString); |
| if (isset(self::$weekNumberStringToInt[$weekNumberString])) { |
| $week = self::$weekNumberStringToInt[$weekNumberString]; |
| } else { |
| throw new Exception("Invalid week describer in Schedule\\Monthly::setDayOfWeekFromString: '$weekNumberString'. " |
| . "Supported values are 'first', 'second', 'third', 'fourth'."); |
| } |
|
|
| $this->setDayOfWeek($day, $week); |
| } |
|
|
| |
| |
| |
| public function getRescheduledTime() |
| { |
| $currentTime = $this->getTime(); |
|
|
| |
| $rescheduledTime = mktime( |
| date('H', $currentTime), |
| date('i', $currentTime), |
| date('s', $currentTime), |
| date('n', $currentTime) + 1, |
| 1, |
| date('Y', $currentTime) |
| ); |
|
|
| $nextMonthLength = date('t', $rescheduledTime); |
|
|
| |
| $scheduledDay = date('j', $currentTime); |
|
|
| if ($this->day !== null) { |
| $scheduledDay = $this->day; |
| } |
|
|
| if ( |
| $this->dayOfWeek !== null |
| && $this->week !== null |
| ) { |
| $newTime = $rescheduledTime + $this->week * 7 * 86400; |
| while (date("w", $newTime) != $this->dayOfWeek % 7) { |
| |
|
|
| $newTime += 86400; |
| } |
| $scheduledDay = ($newTime - $rescheduledTime) / 86400 + 1; |
| } |
|
|
| |
| if ($scheduledDay > $nextMonthLength) { |
| $scheduledDay = $nextMonthLength; |
| } |
|
|
| |
| $rescheduledTime += ($scheduledDay - 1) * 86400; |
|
|
| |
| $rescheduledTime = $this->adjustHour($rescheduledTime); |
| $rescheduledTime = $this->adjustTimezone($rescheduledTime); |
|
|
| return $rescheduledTime; |
| } |
|
|
| |
| |
| |
| |
| public function setDay($_day) |
| { |
| if (!($_day >= 1 && $_day < 32)) { |
| throw new Exception("Invalid day parameter, must be >=1 and < 32"); |
| } |
|
|
| $this->day = $_day; |
| } |
|
|
| |
| |
| |
| |
| |
| |
| |
| public function setDayOfWeek($_day, $_week) |
| { |
| if (!($_day >= 0 && $_day < 7)) { |
| throw new Exception("Invalid day of week parameter, must be >= 0 & < 7"); |
| } |
|
|
| if (!($_week >= 0 && $_week < 4)) { |
| throw new Exception("Invalid week number, must be >= 1 & < 4"); |
| } |
|
|
| $this->dayOfWeek = $_day; |
| $this->week = $_week; |
| } |
| } |
|
|