PluginProbe
WooCommerce / 11.0.1
WooCommerce v11.0.1
11.1.0 11.1.0-rc.2 11.1.0-rc.1 11.1.0-beta.2 11.1.0-beta.1 11.0.1 11.0.0 11.0.0-rc.3 11.0.0-rc.2 11.0.0-rc.1 11.0.0-beta.2 11.0.0-beta.1 10.9.4 10.9.3 10.9.2 10.9.1 10.9.0 10.9.0-rc.1 10.9.0-beta.2 10.9.0-beta.1 10.8.1 10.8.0 10.8.0-rc.1 10.8.0-beta.2 10.8.0-beta.1 All 648 releases
woocommerce / packages / action-scheduler / classes / abstracts / ActionScheduler_Abstract_RecurringSchedule.php
ActionScheduler_Abstract_RecurringSchedule.php
113 lines 3.2 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2
3 /**
4 * Class ActionScheduler_Abstract_RecurringSchedule
5 */
6 abstract class ActionScheduler_Abstract_RecurringSchedule extends ActionScheduler_Abstract_Schedule {
7
8 /**
9 * The date & time the first instance of this schedule was setup to run (which may not be this instance).
10 *
11 * Schedule objects are attached to an action object. Each schedule stores the run date for that
12 * object as the start date - @see $this->start - and logic to calculate the next run date after
13 * that - @see $this->calculate_next(). The $first_date property also keeps a record of when the very
14 * first instance of this chain of schedules ran.
15 *
16 * @var DateTime
17 */
18 private $first_date = null;
19
20 /**
21 * Timestamp equivalent of @see $this->first_date
22 *
23 * @var int
24 */
25 protected $first_timestamp = null;
26
27 /**
28 * The recurrence between each time an action is run using this schedule.
29 * Used to calculate the start date & time. Can be a number of seconds, in the
30 * case of ActionScheduler_IntervalSchedule, or a cron expression, as in the
31 * case of ActionScheduler_CronSchedule. Or something else.
32 *
33 * @var mixed
34 */
35 protected $recurrence;
36
37 /**
38 * Construct.
39 *
40 * @param DateTime $date The date & time to run the action.
41 * @param mixed $recurrence The data used to determine the schedule's recurrence.
42 * @param DateTime|null $first (Optional) The date & time the first instance of this interval schedule ran. Default null, meaning this is the first instance.
43 */
44 public function __construct( DateTime $date, $recurrence, ?DateTime $first = null ) {
45 parent::__construct( $date );
46 $this->first_date = empty( $first ) ? $date : $first;
47 $this->recurrence = $recurrence;
48 }
49
50 /**
51 * Schedule is recurring.
52 *
53 * @return bool
54 */
55 public function is_recurring() {
56 return true;
57 }
58
59 /**
60 * Get the date & time of the first schedule in this recurring series.
61 *
62 * @return DateTime|null
63 */
64 public function get_first_date() {
65 return clone $this->first_date;
66 }
67
68 /**
69 * Get the schedule's recurrence.
70 *
71 * @return string
72 */
73 public function get_recurrence() {
74 return $this->recurrence;
75 }
76
77 /**
78 * For PHP 5.2 compat, since DateTime objects can't be serialized
79 *
80 * @return array
81 */
82 public function __sleep() {
83 $sleep_params = parent::__sleep();
84 $this->first_timestamp = $this->first_date->getTimestamp();
85 return array_merge(
86 $sleep_params,
87 array(
88 'first_timestamp',
89 'recurrence',
90 )
91 );
92 }
93
94 /**
95 * Unserialize recurring schedules serialized/stored prior to AS 3.0.0
96 *
97 * Prior to Action Scheduler 3.0.0, schedules used different property names to refer
98 * to equivalent data. For example, ActionScheduler_IntervalSchedule::start_timestamp
99 * was the same as ActionScheduler_SimpleSchedule::timestamp. This was addressed in
100 * Action Scheduler 3.0.0, where properties and property names were aligned for better
101 * inheritance. To maintain backward compatibility with scheduled serialized and stored
102 * prior to 3.0, we need to correctly map the old property names.
103 */
104 public function __wakeup() {
105 parent::__wakeup();
106 if ( $this->first_timestamp > 0 ) {
107 $this->first_date = as_get_datetime_object( $this->first_timestamp );
108 } else {
109 $this->first_date = $this->get_date();
110 }
111 }
112 }
113