Welcome to mirror list, hosted at ThFree Co, Russian Federation.

ScheduledTime.php « core - github.com/matomo-org/matomo.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
blob: 8dc8a483adafe1101a254895e053db7a270c1002 (plain)
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
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
<?php
/**
 * Piwik - Open source web analytics
 * 
 * @link http://piwik.org
 * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
 * 
 * @category Piwik
 * @package Piwik
 */

/**
 * The Piwik_ScheduledTime abstract class is used as a base class for different types of scheduling intervals.
 * Piwik_ScheduledTime subclasses are used to schedule tasks within Piwik.
 *
 * @see Piwik_ScheduledTask
 * @package Piwik
 * @subpackage Piwik_ScheduledTime
 */
abstract class Piwik_ScheduledTime
{
	const PERIOD_NEVER = 'never';
	const PERIOD_DAY = 'day';
	const PERIOD_WEEK = 'week';
	const PERIOD_MONTH = 'month';

	/**
	 * @link http://php.net/manual/en/function.date.php, format string : 'G'
	 * Defaults to midnight
	 * @var integer 
	 */
	public $hour = 0;
	
	/**
	 * For weekly scheduling : http://php.net/manual/en/function.date.php, format string : 'N', defaults to Monday
	 * For monthly scheduling : day of the month (1 to 31) (note: will be capped at the latest day available the
	 * month), defaults to first day of the month
	 * @var integer
	 */
	public $day = 1;

	static public function getScheduledTimeForPeriod($period)
	{
		switch($period)
		{
			case self::PERIOD_MONTH: return new Piwik_ScheduledTime_Monthly();
			case self::PERIOD_WEEK: return new Piwik_ScheduledTime_Weekly();
			case self::PERIOD_DAY: return new Piwik_ScheduledTime_Daily();

			default: throw new Exception('period ' . $period . 'is undefined.');
		}
	}

	/**
	 * Returns the system time used by subclasses to compute schedulings.
	 * This method has been introduced so unit tests can override the current system time.
     * @return int
	 */
	protected function getTime()
	{
		return time();
	}

	/**
	 * Computes the next scheduled time based on the system time at which the method has been called and
	 * the underlying scheduling interval.
	 *
	 * @abstract
	 * @return integer Returns the rescheduled time measured in the number of seconds since the Unix Epoch
	 */
	abstract public function getRescheduledTime();

	/**
     * @abstract
	 * @param  int $_day the day to set
	 * @throws Exception if method not supported by subclass or parameter _day is invalid
	 */
	abstract public function setDay($_day);

	/**
	 * @param  int $_hour the hour to set, has to be >= 0 and < 24
	 * @throws Exception if method not supported by subclass or parameter _hour is invalid
	 */
	public function setHour($_hour)
	{
		if (!($_hour >=0 && $_hour < 24))
		{
			throw new Exception ("Invalid hour parameter, must be >=0 and < 24");
		}

		$this->hour = $_hour;
	}
	
	/**
	 * Computes the delta in seconds needed to adjust the rescheduled time to the required hour.
	 * 
	 * @param int $rescheduledTime The rescheduled time to be adjusted
	 * @return int adjusted rescheduled time
	 */
	protected function adjustHour ($rescheduledTime)
	{
		if ( $this->hour !== null )
		{
			// Reset the number of minutes and set the scheduled hour to the one specified with setHour()
			$rescheduledTime = mktime ( $this->hour,
										0,
										date('s', $rescheduledTime),
										date('n', $rescheduledTime),
										date('j', $rescheduledTime),
										date('Y', $rescheduledTime)
										);
		}
		return $rescheduledTime;
	}
}