File size: 2,028 Bytes
f8ce8bb | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 | <?php
/**
* Matomo - free/libre analytics platform
*
* @link https://matomo.org
* @license https://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
*/
namespace Piwik\Scheduler\Schedule;
use Exception;
/**
* Weekly class is used to schedule tasks every week.
*
* @see \Piwik\Scheduler\Task
*/
class Weekly extends Schedule
{
/**
* @see Schedule::getRescheduledTime
* @return int
*/
public function getRescheduledTime()
{
$currentTime = $this->getTime();
$daysFromNow = 7;
// Adjusts the scheduled day
if ($this->day !== null) {
$daysFromNow = ($this->day - date('N', $currentTime) + 7) % 7;
if ($daysFromNow == 0) {
$daysFromNow = 7;
}
}
// Adds correct number of days
$rescheduledTime = mktime(
date('H', $currentTime),
date('i', $currentTime),
date('s', $currentTime),
date('n', $currentTime),
date('j', $currentTime) + $daysFromNow,
date('Y', $currentTime)
);
// Adjusts the scheduled hour
$rescheduledTime = $this->adjustHour($rescheduledTime);
$rescheduledTime = $this->adjustTimezone($rescheduledTime);
return $rescheduledTime;
}
/**
* @param int $day the day to set, has to be >= 1 and < 8
* @throws Exception if parameter _day is invalid
*/
public function setDay($day)
{
if (!is_int($day)) {
$day = self::getDayIntFromString($day);
}
if (!($day >= 1 && $day < 8)) {
throw new Exception("Invalid day parameter, must be >=1 and < 8");
}
$this->day = $day;
}
public static function getDayIntFromString($dayString)
{
$time = strtotime($dayString);
if ($time === false) {
throw new Exception("Invalid day string '$dayString'. Must be 'monday', 'tuesday', etc.");
}
return date("N", $time);
}
}
|