@@ -4,20 +4,20 @@ |
||
4 | 4 | * Class ActionScheduler_ActionClaim |
5 | 5 | */ |
6 | 6 | class ActionScheduler_ActionClaim { |
7 | - private $id = ''; |
|
8 | - private $action_ids = array(); |
|
7 | + private $id = ''; |
|
8 | + private $action_ids = array(); |
|
9 | 9 | |
10 | - public function __construct( $id, array $action_ids ) { |
|
11 | - $this->id = $id; |
|
12 | - $this->action_ids = $action_ids; |
|
13 | - } |
|
10 | + public function __construct( $id, array $action_ids ) { |
|
11 | + $this->id = $id; |
|
12 | + $this->action_ids = $action_ids; |
|
13 | + } |
|
14 | 14 | |
15 | - public function get_id() { |
|
16 | - return $this->id; |
|
17 | - } |
|
15 | + public function get_id() { |
|
16 | + return $this->id; |
|
17 | + } |
|
18 | 18 | |
19 | - public function get_actions() { |
|
20 | - return $this->action_ids; |
|
21 | - } |
|
19 | + public function get_actions() { |
|
20 | + return $this->action_ids; |
|
21 | + } |
|
22 | 22 | } |
23 | - |
|
24 | 23 | \ No newline at end of file |
24 | + |
|
25 | 25 | \ No newline at end of file |
@@ -7,7 +7,7 @@ |
||
7 | 7 | private $id = ''; |
8 | 8 | private $action_ids = array(); |
9 | 9 | |
10 | - public function __construct( $id, array $action_ids ) { |
|
10 | + public function __construct($id, array $action_ids) { |
|
11 | 11 | $this->id = $id; |
12 | 12 | $this->action_ids = $action_ids; |
13 | 13 | } |
@@ -4,195 +4,195 @@ |
||
4 | 4 | * Class ActionScheduler_QueueRunner |
5 | 5 | */ |
6 | 6 | class ActionScheduler_QueueRunner extends ActionScheduler_Abstract_QueueRunner { |
7 | - const WP_CRON_HOOK = 'action_scheduler_run_queue'; |
|
8 | - |
|
9 | - const WP_CRON_SCHEDULE = 'every_minute'; |
|
10 | - |
|
11 | - /** @var ActionScheduler_AsyncRequest_QueueRunner */ |
|
12 | - protected $async_request; |
|
13 | - |
|
14 | - /** @var ActionScheduler_QueueRunner */ |
|
15 | - private static $runner = null; |
|
16 | - |
|
17 | - /** |
|
18 | - * @return ActionScheduler_QueueRunner |
|
19 | - * @codeCoverageIgnore |
|
20 | - */ |
|
21 | - public static function instance() { |
|
22 | - if ( empty(self::$runner) ) { |
|
23 | - $class = apply_filters('action_scheduler_queue_runner_class', 'ActionScheduler_QueueRunner'); |
|
24 | - self::$runner = new $class(); |
|
25 | - } |
|
26 | - return self::$runner; |
|
27 | - } |
|
28 | - |
|
29 | - /** |
|
30 | - * ActionScheduler_QueueRunner constructor. |
|
31 | - * |
|
32 | - * @param ActionScheduler_Store $store |
|
33 | - * @param ActionScheduler_FatalErrorMonitor $monitor |
|
34 | - * @param ActionScheduler_QueueCleaner $cleaner |
|
35 | - */ |
|
36 | - public function __construct( ActionScheduler_Store $store = null, ActionScheduler_FatalErrorMonitor $monitor = null, ActionScheduler_QueueCleaner $cleaner = null, ActionScheduler_AsyncRequest_QueueRunner $async_request = null ) { |
|
37 | - parent::__construct( $store, $monitor, $cleaner ); |
|
38 | - |
|
39 | - if ( is_null( $async_request ) ) { |
|
40 | - $async_request = new ActionScheduler_AsyncRequest_QueueRunner( $this->store ); |
|
41 | - } |
|
42 | - |
|
43 | - $this->async_request = $async_request; |
|
44 | - } |
|
45 | - |
|
46 | - /** |
|
47 | - * @codeCoverageIgnore |
|
48 | - */ |
|
49 | - public function init() { |
|
50 | - |
|
51 | - add_filter( 'cron_schedules', array( self::instance(), 'add_wp_cron_schedule' ) ); |
|
52 | - |
|
53 | - $cron_context = array( 'WP Cron' ); |
|
54 | - |
|
55 | - if ( ! wp_next_scheduled( self::WP_CRON_HOOK, $cron_context ) ) { |
|
56 | - |
|
57 | - // Check for and remove any WP Cron hook scheduled by Action Scheduler < 3.0.0, which didn't include the $context param |
|
58 | - $next_timestamp = wp_next_scheduled( self::WP_CRON_HOOK ); |
|
59 | - if ( $next_timestamp ) { |
|
60 | - wp_unschedule_event( $next_timestamp, self::WP_CRON_HOOK ); |
|
61 | - } |
|
62 | - |
|
63 | - $schedule = apply_filters( 'action_scheduler_run_schedule', self::WP_CRON_SCHEDULE ); |
|
64 | - wp_schedule_event( time(), $schedule, self::WP_CRON_HOOK, $cron_context ); |
|
65 | - } |
|
66 | - |
|
67 | - add_action( self::WP_CRON_HOOK, array( self::instance(), 'run' ) ); |
|
68 | - $this->hook_dispatch_async_request(); |
|
69 | - } |
|
70 | - |
|
71 | - /** |
|
72 | - * Hook check for dispatching an async request. |
|
73 | - */ |
|
74 | - public function hook_dispatch_async_request() { |
|
75 | - add_action( 'shutdown', array( $this, 'maybe_dispatch_async_request' ) ); |
|
76 | - } |
|
77 | - |
|
78 | - /** |
|
79 | - * Unhook check for dispatching an async request. |
|
80 | - */ |
|
81 | - public function unhook_dispatch_async_request() { |
|
82 | - remove_action( 'shutdown', array( $this, 'maybe_dispatch_async_request' ) ); |
|
83 | - } |
|
84 | - |
|
85 | - /** |
|
86 | - * Check if we should dispatch an async request to process actions. |
|
87 | - * |
|
88 | - * This method is attached to 'shutdown', so is called frequently. To avoid slowing down |
|
89 | - * the site, it mitigates the work performed in each request by: |
|
90 | - * 1. checking if it's in the admin context and then |
|
91 | - * 2. haven't run on the 'shutdown' hook within the lock time (60 seconds by default) |
|
92 | - * 3. haven't exceeded the number of allowed batches. |
|
93 | - * |
|
94 | - * The order of these checks is important, because they run from a check on a value: |
|
95 | - * 1. in memory - is_admin() maps to $GLOBALS or the WP_ADMIN constant |
|
96 | - * 2. in memory - transients use autoloaded options by default |
|
97 | - * 3. from a database query - has_maximum_concurrent_batches() run the query |
|
98 | - * $this->store->get_claim_count() to find the current number of claims in the DB. |
|
99 | - * |
|
100 | - * If all of these conditions are met, then we request an async runner check whether it |
|
101 | - * should dispatch a request to process pending actions. |
|
102 | - */ |
|
103 | - public function maybe_dispatch_async_request() { |
|
104 | - if ( is_admin() && ! ActionScheduler::lock()->is_locked( 'async-request-runner' ) ) { |
|
105 | - // Only start an async queue at most once every 60 seconds |
|
106 | - ActionScheduler::lock()->set( 'async-request-runner' ); |
|
107 | - $this->async_request->maybe_dispatch(); |
|
108 | - } |
|
109 | - } |
|
110 | - |
|
111 | - /** |
|
112 | - * Process actions in the queue. Attached to self::WP_CRON_HOOK i.e. 'action_scheduler_run_queue' |
|
113 | - * |
|
114 | - * The $context param of this method defaults to 'WP Cron', because prior to Action Scheduler 3.0.0 |
|
115 | - * that was the only context in which this method was run, and the self::WP_CRON_HOOK hook had no context |
|
116 | - * passed along with it. New code calling this method directly, or by triggering the self::WP_CRON_HOOK, |
|
117 | - * should set a context as the first parameter. For an example of this, refer to the code seen in |
|
118 | - * @see ActionScheduler_AsyncRequest_QueueRunner::handle() |
|
119 | - * |
|
120 | - * @param string $context Optional identifer for the context in which this action is being processed, e.g. 'WP CLI' or 'WP Cron' |
|
121 | - * Generally, this should be capitalised and not localised as it's a proper noun. |
|
122 | - * @return int The number of actions processed. |
|
123 | - */ |
|
124 | - public function run( $context = 'WP Cron' ) { |
|
125 | - ActionScheduler_Compatibility::raise_memory_limit(); |
|
126 | - ActionScheduler_Compatibility::raise_time_limit( $this->get_time_limit() ); |
|
127 | - do_action( 'action_scheduler_before_process_queue' ); |
|
128 | - $this->run_cleanup(); |
|
129 | - $processed_actions = 0; |
|
130 | - if ( false === $this->has_maximum_concurrent_batches() ) { |
|
131 | - $batch_size = apply_filters( 'action_scheduler_queue_runner_batch_size', 25 ); |
|
132 | - do { |
|
133 | - $processed_actions_in_batch = $this->do_batch( $batch_size, $context ); |
|
134 | - $processed_actions += $processed_actions_in_batch; |
|
135 | - } while ( $processed_actions_in_batch > 0 && ! $this->batch_limits_exceeded( $processed_actions ) ); // keep going until we run out of actions, time, or memory |
|
136 | - } |
|
137 | - |
|
138 | - do_action( 'action_scheduler_after_process_queue' ); |
|
139 | - return $processed_actions; |
|
140 | - } |
|
141 | - |
|
142 | - /** |
|
143 | - * Process a batch of actions pending in the queue. |
|
144 | - * |
|
145 | - * Actions are processed by claiming a set of pending actions then processing each one until either the batch |
|
146 | - * size is completed, or memory or time limits are reached, defined by @see $this->batch_limits_exceeded(). |
|
147 | - * |
|
148 | - * @param int $size The maximum number of actions to process in the batch. |
|
149 | - * @param string $context Optional identifer for the context in which this action is being processed, e.g. 'WP CLI' or 'WP Cron' |
|
150 | - * Generally, this should be capitalised and not localised as it's a proper noun. |
|
151 | - * @return int The number of actions processed. |
|
152 | - */ |
|
153 | - protected function do_batch( $size = 100, $context = '' ) { |
|
154 | - $claim = $this->store->stake_claim($size); |
|
155 | - $this->monitor->attach($claim); |
|
156 | - $processed_actions = 0; |
|
157 | - |
|
158 | - foreach ( $claim->get_actions() as $action_id ) { |
|
159 | - // bail if we lost the claim |
|
160 | - if ( ! in_array( $action_id, $this->store->find_actions_by_claim_id( $claim->get_id() ) ) ) { |
|
161 | - break; |
|
162 | - } |
|
163 | - $this->process_action( $action_id, $context ); |
|
164 | - $processed_actions++; |
|
165 | - |
|
166 | - if ( $this->batch_limits_exceeded( $processed_actions ) ) { |
|
167 | - break; |
|
168 | - } |
|
169 | - } |
|
170 | - $this->store->release_claim($claim); |
|
171 | - $this->monitor->detach(); |
|
172 | - $this->clear_caches(); |
|
173 | - return $processed_actions; |
|
174 | - } |
|
175 | - |
|
176 | - /** |
|
177 | - * Running large batches can eat up memory, as WP adds data to its object cache. |
|
178 | - * |
|
179 | - * If using a persistent object store, this has the side effect of flushing that |
|
180 | - * as well, so this is disabled by default. To enable: |
|
181 | - * |
|
182 | - * add_filter( 'action_scheduler_queue_runner_flush_cache', '__return_true' ); |
|
183 | - */ |
|
184 | - protected function clear_caches() { |
|
185 | - if ( ! wp_using_ext_object_cache() || apply_filters( 'action_scheduler_queue_runner_flush_cache', false ) ) { |
|
186 | - wp_cache_flush(); |
|
187 | - } |
|
188 | - } |
|
189 | - |
|
190 | - public function add_wp_cron_schedule( $schedules ) { |
|
191 | - $schedules['every_minute'] = array( |
|
192 | - 'interval' => 60, // in seconds |
|
193 | - 'display' => __( 'Every minute', 'action-scheduler' ), |
|
194 | - ); |
|
195 | - |
|
196 | - return $schedules; |
|
197 | - } |
|
7 | + const WP_CRON_HOOK = 'action_scheduler_run_queue'; |
|
8 | + |
|
9 | + const WP_CRON_SCHEDULE = 'every_minute'; |
|
10 | + |
|
11 | + /** @var ActionScheduler_AsyncRequest_QueueRunner */ |
|
12 | + protected $async_request; |
|
13 | + |
|
14 | + /** @var ActionScheduler_QueueRunner */ |
|
15 | + private static $runner = null; |
|
16 | + |
|
17 | + /** |
|
18 | + * @return ActionScheduler_QueueRunner |
|
19 | + * @codeCoverageIgnore |
|
20 | + */ |
|
21 | + public static function instance() { |
|
22 | + if ( empty(self::$runner) ) { |
|
23 | + $class = apply_filters('action_scheduler_queue_runner_class', 'ActionScheduler_QueueRunner'); |
|
24 | + self::$runner = new $class(); |
|
25 | + } |
|
26 | + return self::$runner; |
|
27 | + } |
|
28 | + |
|
29 | + /** |
|
30 | + * ActionScheduler_QueueRunner constructor. |
|
31 | + * |
|
32 | + * @param ActionScheduler_Store $store |
|
33 | + * @param ActionScheduler_FatalErrorMonitor $monitor |
|
34 | + * @param ActionScheduler_QueueCleaner $cleaner |
|
35 | + */ |
|
36 | + public function __construct( ActionScheduler_Store $store = null, ActionScheduler_FatalErrorMonitor $monitor = null, ActionScheduler_QueueCleaner $cleaner = null, ActionScheduler_AsyncRequest_QueueRunner $async_request = null ) { |
|
37 | + parent::__construct( $store, $monitor, $cleaner ); |
|
38 | + |
|
39 | + if ( is_null( $async_request ) ) { |
|
40 | + $async_request = new ActionScheduler_AsyncRequest_QueueRunner( $this->store ); |
|
41 | + } |
|
42 | + |
|
43 | + $this->async_request = $async_request; |
|
44 | + } |
|
45 | + |
|
46 | + /** |
|
47 | + * @codeCoverageIgnore |
|
48 | + */ |
|
49 | + public function init() { |
|
50 | + |
|
51 | + add_filter( 'cron_schedules', array( self::instance(), 'add_wp_cron_schedule' ) ); |
|
52 | + |
|
53 | + $cron_context = array( 'WP Cron' ); |
|
54 | + |
|
55 | + if ( ! wp_next_scheduled( self::WP_CRON_HOOK, $cron_context ) ) { |
|
56 | + |
|
57 | + // Check for and remove any WP Cron hook scheduled by Action Scheduler < 3.0.0, which didn't include the $context param |
|
58 | + $next_timestamp = wp_next_scheduled( self::WP_CRON_HOOK ); |
|
59 | + if ( $next_timestamp ) { |
|
60 | + wp_unschedule_event( $next_timestamp, self::WP_CRON_HOOK ); |
|
61 | + } |
|
62 | + |
|
63 | + $schedule = apply_filters( 'action_scheduler_run_schedule', self::WP_CRON_SCHEDULE ); |
|
64 | + wp_schedule_event( time(), $schedule, self::WP_CRON_HOOK, $cron_context ); |
|
65 | + } |
|
66 | + |
|
67 | + add_action( self::WP_CRON_HOOK, array( self::instance(), 'run' ) ); |
|
68 | + $this->hook_dispatch_async_request(); |
|
69 | + } |
|
70 | + |
|
71 | + /** |
|
72 | + * Hook check for dispatching an async request. |
|
73 | + */ |
|
74 | + public function hook_dispatch_async_request() { |
|
75 | + add_action( 'shutdown', array( $this, 'maybe_dispatch_async_request' ) ); |
|
76 | + } |
|
77 | + |
|
78 | + /** |
|
79 | + * Unhook check for dispatching an async request. |
|
80 | + */ |
|
81 | + public function unhook_dispatch_async_request() { |
|
82 | + remove_action( 'shutdown', array( $this, 'maybe_dispatch_async_request' ) ); |
|
83 | + } |
|
84 | + |
|
85 | + /** |
|
86 | + * Check if we should dispatch an async request to process actions. |
|
87 | + * |
|
88 | + * This method is attached to 'shutdown', so is called frequently. To avoid slowing down |
|
89 | + * the site, it mitigates the work performed in each request by: |
|
90 | + * 1. checking if it's in the admin context and then |
|
91 | + * 2. haven't run on the 'shutdown' hook within the lock time (60 seconds by default) |
|
92 | + * 3. haven't exceeded the number of allowed batches. |
|
93 | + * |
|
94 | + * The order of these checks is important, because they run from a check on a value: |
|
95 | + * 1. in memory - is_admin() maps to $GLOBALS or the WP_ADMIN constant |
|
96 | + * 2. in memory - transients use autoloaded options by default |
|
97 | + * 3. from a database query - has_maximum_concurrent_batches() run the query |
|
98 | + * $this->store->get_claim_count() to find the current number of claims in the DB. |
|
99 | + * |
|
100 | + * If all of these conditions are met, then we request an async runner check whether it |
|
101 | + * should dispatch a request to process pending actions. |
|
102 | + */ |
|
103 | + public function maybe_dispatch_async_request() { |
|
104 | + if ( is_admin() && ! ActionScheduler::lock()->is_locked( 'async-request-runner' ) ) { |
|
105 | + // Only start an async queue at most once every 60 seconds |
|
106 | + ActionScheduler::lock()->set( 'async-request-runner' ); |
|
107 | + $this->async_request->maybe_dispatch(); |
|
108 | + } |
|
109 | + } |
|
110 | + |
|
111 | + /** |
|
112 | + * Process actions in the queue. Attached to self::WP_CRON_HOOK i.e. 'action_scheduler_run_queue' |
|
113 | + * |
|
114 | + * The $context param of this method defaults to 'WP Cron', because prior to Action Scheduler 3.0.0 |
|
115 | + * that was the only context in which this method was run, and the self::WP_CRON_HOOK hook had no context |
|
116 | + * passed along with it. New code calling this method directly, or by triggering the self::WP_CRON_HOOK, |
|
117 | + * should set a context as the first parameter. For an example of this, refer to the code seen in |
|
118 | + * @see ActionScheduler_AsyncRequest_QueueRunner::handle() |
|
119 | + * |
|
120 | + * @param string $context Optional identifer for the context in which this action is being processed, e.g. 'WP CLI' or 'WP Cron' |
|
121 | + * Generally, this should be capitalised and not localised as it's a proper noun. |
|
122 | + * @return int The number of actions processed. |
|
123 | + */ |
|
124 | + public function run( $context = 'WP Cron' ) { |
|
125 | + ActionScheduler_Compatibility::raise_memory_limit(); |
|
126 | + ActionScheduler_Compatibility::raise_time_limit( $this->get_time_limit() ); |
|
127 | + do_action( 'action_scheduler_before_process_queue' ); |
|
128 | + $this->run_cleanup(); |
|
129 | + $processed_actions = 0; |
|
130 | + if ( false === $this->has_maximum_concurrent_batches() ) { |
|
131 | + $batch_size = apply_filters( 'action_scheduler_queue_runner_batch_size', 25 ); |
|
132 | + do { |
|
133 | + $processed_actions_in_batch = $this->do_batch( $batch_size, $context ); |
|
134 | + $processed_actions += $processed_actions_in_batch; |
|
135 | + } while ( $processed_actions_in_batch > 0 && ! $this->batch_limits_exceeded( $processed_actions ) ); // keep going until we run out of actions, time, or memory |
|
136 | + } |
|
137 | + |
|
138 | + do_action( 'action_scheduler_after_process_queue' ); |
|
139 | + return $processed_actions; |
|
140 | + } |
|
141 | + |
|
142 | + /** |
|
143 | + * Process a batch of actions pending in the queue. |
|
144 | + * |
|
145 | + * Actions are processed by claiming a set of pending actions then processing each one until either the batch |
|
146 | + * size is completed, or memory or time limits are reached, defined by @see $this->batch_limits_exceeded(). |
|
147 | + * |
|
148 | + * @param int $size The maximum number of actions to process in the batch. |
|
149 | + * @param string $context Optional identifer for the context in which this action is being processed, e.g. 'WP CLI' or 'WP Cron' |
|
150 | + * Generally, this should be capitalised and not localised as it's a proper noun. |
|
151 | + * @return int The number of actions processed. |
|
152 | + */ |
|
153 | + protected function do_batch( $size = 100, $context = '' ) { |
|
154 | + $claim = $this->store->stake_claim($size); |
|
155 | + $this->monitor->attach($claim); |
|
156 | + $processed_actions = 0; |
|
157 | + |
|
158 | + foreach ( $claim->get_actions() as $action_id ) { |
|
159 | + // bail if we lost the claim |
|
160 | + if ( ! in_array( $action_id, $this->store->find_actions_by_claim_id( $claim->get_id() ) ) ) { |
|
161 | + break; |
|
162 | + } |
|
163 | + $this->process_action( $action_id, $context ); |
|
164 | + $processed_actions++; |
|
165 | + |
|
166 | + if ( $this->batch_limits_exceeded( $processed_actions ) ) { |
|
167 | + break; |
|
168 | + } |
|
169 | + } |
|
170 | + $this->store->release_claim($claim); |
|
171 | + $this->monitor->detach(); |
|
172 | + $this->clear_caches(); |
|
173 | + return $processed_actions; |
|
174 | + } |
|
175 | + |
|
176 | + /** |
|
177 | + * Running large batches can eat up memory, as WP adds data to its object cache. |
|
178 | + * |
|
179 | + * If using a persistent object store, this has the side effect of flushing that |
|
180 | + * as well, so this is disabled by default. To enable: |
|
181 | + * |
|
182 | + * add_filter( 'action_scheduler_queue_runner_flush_cache', '__return_true' ); |
|
183 | + */ |
|
184 | + protected function clear_caches() { |
|
185 | + if ( ! wp_using_ext_object_cache() || apply_filters( 'action_scheduler_queue_runner_flush_cache', false ) ) { |
|
186 | + wp_cache_flush(); |
|
187 | + } |
|
188 | + } |
|
189 | + |
|
190 | + public function add_wp_cron_schedule( $schedules ) { |
|
191 | + $schedules['every_minute'] = array( |
|
192 | + 'interval' => 60, // in seconds |
|
193 | + 'display' => __( 'Every minute', 'action-scheduler' ), |
|
194 | + ); |
|
195 | + |
|
196 | + return $schedules; |
|
197 | + } |
|
198 | 198 | } |
@@ -19,7 +19,7 @@ discard block |
||
19 | 19 | * @codeCoverageIgnore |
20 | 20 | */ |
21 | 21 | public static function instance() { |
22 | - if ( empty(self::$runner) ) { |
|
22 | + if (empty(self::$runner)) { |
|
23 | 23 | $class = apply_filters('action_scheduler_queue_runner_class', 'ActionScheduler_QueueRunner'); |
24 | 24 | self::$runner = new $class(); |
25 | 25 | } |
@@ -33,11 +33,11 @@ discard block |
||
33 | 33 | * @param ActionScheduler_FatalErrorMonitor $monitor |
34 | 34 | * @param ActionScheduler_QueueCleaner $cleaner |
35 | 35 | */ |
36 | - public function __construct( ActionScheduler_Store $store = null, ActionScheduler_FatalErrorMonitor $monitor = null, ActionScheduler_QueueCleaner $cleaner = null, ActionScheduler_AsyncRequest_QueueRunner $async_request = null ) { |
|
37 | - parent::__construct( $store, $monitor, $cleaner ); |
|
36 | + public function __construct(ActionScheduler_Store $store = null, ActionScheduler_FatalErrorMonitor $monitor = null, ActionScheduler_QueueCleaner $cleaner = null, ActionScheduler_AsyncRequest_QueueRunner $async_request = null) { |
|
37 | + parent::__construct($store, $monitor, $cleaner); |
|
38 | 38 | |
39 | - if ( is_null( $async_request ) ) { |
|
40 | - $async_request = new ActionScheduler_AsyncRequest_QueueRunner( $this->store ); |
|
39 | + if (is_null($async_request)) { |
|
40 | + $async_request = new ActionScheduler_AsyncRequest_QueueRunner($this->store); |
|
41 | 41 | } |
42 | 42 | |
43 | 43 | $this->async_request = $async_request; |
@@ -48,23 +48,23 @@ discard block |
||
48 | 48 | */ |
49 | 49 | public function init() { |
50 | 50 | |
51 | - add_filter( 'cron_schedules', array( self::instance(), 'add_wp_cron_schedule' ) ); |
|
51 | + add_filter('cron_schedules', array(self::instance(), 'add_wp_cron_schedule')); |
|
52 | 52 | |
53 | - $cron_context = array( 'WP Cron' ); |
|
53 | + $cron_context = array('WP Cron'); |
|
54 | 54 | |
55 | - if ( ! wp_next_scheduled( self::WP_CRON_HOOK, $cron_context ) ) { |
|
55 | + if (!wp_next_scheduled(self::WP_CRON_HOOK, $cron_context)) { |
|
56 | 56 | |
57 | 57 | // Check for and remove any WP Cron hook scheduled by Action Scheduler < 3.0.0, which didn't include the $context param |
58 | - $next_timestamp = wp_next_scheduled( self::WP_CRON_HOOK ); |
|
59 | - if ( $next_timestamp ) { |
|
60 | - wp_unschedule_event( $next_timestamp, self::WP_CRON_HOOK ); |
|
58 | + $next_timestamp = wp_next_scheduled(self::WP_CRON_HOOK); |
|
59 | + if ($next_timestamp) { |
|
60 | + wp_unschedule_event($next_timestamp, self::WP_CRON_HOOK); |
|
61 | 61 | } |
62 | 62 | |
63 | - $schedule = apply_filters( 'action_scheduler_run_schedule', self::WP_CRON_SCHEDULE ); |
|
64 | - wp_schedule_event( time(), $schedule, self::WP_CRON_HOOK, $cron_context ); |
|
63 | + $schedule = apply_filters('action_scheduler_run_schedule', self::WP_CRON_SCHEDULE); |
|
64 | + wp_schedule_event(time(), $schedule, self::WP_CRON_HOOK, $cron_context); |
|
65 | 65 | } |
66 | 66 | |
67 | - add_action( self::WP_CRON_HOOK, array( self::instance(), 'run' ) ); |
|
67 | + add_action(self::WP_CRON_HOOK, array(self::instance(), 'run')); |
|
68 | 68 | $this->hook_dispatch_async_request(); |
69 | 69 | } |
70 | 70 | |
@@ -72,14 +72,14 @@ discard block |
||
72 | 72 | * Hook check for dispatching an async request. |
73 | 73 | */ |
74 | 74 | public function hook_dispatch_async_request() { |
75 | - add_action( 'shutdown', array( $this, 'maybe_dispatch_async_request' ) ); |
|
75 | + add_action('shutdown', array($this, 'maybe_dispatch_async_request')); |
|
76 | 76 | } |
77 | 77 | |
78 | 78 | /** |
79 | 79 | * Unhook check for dispatching an async request. |
80 | 80 | */ |
81 | 81 | public function unhook_dispatch_async_request() { |
82 | - remove_action( 'shutdown', array( $this, 'maybe_dispatch_async_request' ) ); |
|
82 | + remove_action('shutdown', array($this, 'maybe_dispatch_async_request')); |
|
83 | 83 | } |
84 | 84 | |
85 | 85 | /** |
@@ -101,9 +101,9 @@ discard block |
||
101 | 101 | * should dispatch a request to process pending actions. |
102 | 102 | */ |
103 | 103 | public function maybe_dispatch_async_request() { |
104 | - if ( is_admin() && ! ActionScheduler::lock()->is_locked( 'async-request-runner' ) ) { |
|
104 | + if (is_admin() && !ActionScheduler::lock()->is_locked('async-request-runner')) { |
|
105 | 105 | // Only start an async queue at most once every 60 seconds |
106 | - ActionScheduler::lock()->set( 'async-request-runner' ); |
|
106 | + ActionScheduler::lock()->set('async-request-runner'); |
|
107 | 107 | $this->async_request->maybe_dispatch(); |
108 | 108 | } |
109 | 109 | } |
@@ -121,21 +121,21 @@ discard block |
||
121 | 121 | * Generally, this should be capitalised and not localised as it's a proper noun. |
122 | 122 | * @return int The number of actions processed. |
123 | 123 | */ |
124 | - public function run( $context = 'WP Cron' ) { |
|
124 | + public function run($context = 'WP Cron') { |
|
125 | 125 | ActionScheduler_Compatibility::raise_memory_limit(); |
126 | - ActionScheduler_Compatibility::raise_time_limit( $this->get_time_limit() ); |
|
127 | - do_action( 'action_scheduler_before_process_queue' ); |
|
126 | + ActionScheduler_Compatibility::raise_time_limit($this->get_time_limit()); |
|
127 | + do_action('action_scheduler_before_process_queue'); |
|
128 | 128 | $this->run_cleanup(); |
129 | 129 | $processed_actions = 0; |
130 | - if ( false === $this->has_maximum_concurrent_batches() ) { |
|
131 | - $batch_size = apply_filters( 'action_scheduler_queue_runner_batch_size', 25 ); |
|
130 | + if (false === $this->has_maximum_concurrent_batches()) { |
|
131 | + $batch_size = apply_filters('action_scheduler_queue_runner_batch_size', 25); |
|
132 | 132 | do { |
133 | - $processed_actions_in_batch = $this->do_batch( $batch_size, $context ); |
|
133 | + $processed_actions_in_batch = $this->do_batch($batch_size, $context); |
|
134 | 134 | $processed_actions += $processed_actions_in_batch; |
135 | - } while ( $processed_actions_in_batch > 0 && ! $this->batch_limits_exceeded( $processed_actions ) ); // keep going until we run out of actions, time, or memory |
|
135 | + } while ($processed_actions_in_batch > 0 && !$this->batch_limits_exceeded($processed_actions)); // keep going until we run out of actions, time, or memory |
|
136 | 136 | } |
137 | 137 | |
138 | - do_action( 'action_scheduler_after_process_queue' ); |
|
138 | + do_action('action_scheduler_after_process_queue'); |
|
139 | 139 | return $processed_actions; |
140 | 140 | } |
141 | 141 | |
@@ -150,20 +150,20 @@ discard block |
||
150 | 150 | * Generally, this should be capitalised and not localised as it's a proper noun. |
151 | 151 | * @return int The number of actions processed. |
152 | 152 | */ |
153 | - protected function do_batch( $size = 100, $context = '' ) { |
|
153 | + protected function do_batch($size = 100, $context = '') { |
|
154 | 154 | $claim = $this->store->stake_claim($size); |
155 | 155 | $this->monitor->attach($claim); |
156 | 156 | $processed_actions = 0; |
157 | 157 | |
158 | - foreach ( $claim->get_actions() as $action_id ) { |
|
158 | + foreach ($claim->get_actions() as $action_id) { |
|
159 | 159 | // bail if we lost the claim |
160 | - if ( ! in_array( $action_id, $this->store->find_actions_by_claim_id( $claim->get_id() ) ) ) { |
|
160 | + if (!in_array($action_id, $this->store->find_actions_by_claim_id($claim->get_id()))) { |
|
161 | 161 | break; |
162 | 162 | } |
163 | - $this->process_action( $action_id, $context ); |
|
163 | + $this->process_action($action_id, $context); |
|
164 | 164 | $processed_actions++; |
165 | 165 | |
166 | - if ( $this->batch_limits_exceeded( $processed_actions ) ) { |
|
166 | + if ($this->batch_limits_exceeded($processed_actions)) { |
|
167 | 167 | break; |
168 | 168 | } |
169 | 169 | } |
@@ -182,15 +182,15 @@ discard block |
||
182 | 182 | * add_filter( 'action_scheduler_queue_runner_flush_cache', '__return_true' ); |
183 | 183 | */ |
184 | 184 | protected function clear_caches() { |
185 | - if ( ! wp_using_ext_object_cache() || apply_filters( 'action_scheduler_queue_runner_flush_cache', false ) ) { |
|
185 | + if (!wp_using_ext_object_cache() || apply_filters('action_scheduler_queue_runner_flush_cache', false)) { |
|
186 | 186 | wp_cache_flush(); |
187 | 187 | } |
188 | 188 | } |
189 | 189 | |
190 | - public function add_wp_cron_schedule( $schedules ) { |
|
190 | + public function add_wp_cron_schedule($schedules) { |
|
191 | 191 | $schedules['every_minute'] = array( |
192 | 192 | 'interval' => 60, // in seconds |
193 | - 'display' => __( 'Every minute', 'action-scheduler' ), |
|
193 | + 'display' => __('Every minute', 'action-scheduler'), |
|
194 | 194 | ); |
195 | 195 | |
196 | 196 | return $schedules; |
@@ -10,88 +10,88 @@ |
||
10 | 10 | */ |
11 | 11 | class ActionScheduler_AsyncRequest_QueueRunner extends WP_Async_Request { |
12 | 12 | |
13 | - /** |
|
14 | - * Data store for querying actions |
|
15 | - * |
|
16 | - * @var ActionScheduler_Store |
|
17 | - * @access protected |
|
18 | - */ |
|
19 | - protected $store; |
|
20 | - |
|
21 | - /** |
|
22 | - * Prefix for ajax hooks |
|
23 | - * |
|
24 | - * @var string |
|
25 | - * @access protected |
|
26 | - */ |
|
27 | - protected $prefix = 'as'; |
|
28 | - |
|
29 | - /** |
|
30 | - * Action for ajax hooks |
|
31 | - * |
|
32 | - * @var string |
|
33 | - * @access protected |
|
34 | - */ |
|
35 | - protected $action = 'async_request_queue_runner'; |
|
36 | - |
|
37 | - /** |
|
38 | - * Initiate new async request |
|
39 | - */ |
|
40 | - public function __construct( ActionScheduler_Store $store ) { |
|
41 | - parent::__construct(); |
|
42 | - $this->store = $store; |
|
43 | - } |
|
44 | - |
|
45 | - /** |
|
46 | - * Handle async requests |
|
47 | - * |
|
48 | - * Run a queue, and maybe dispatch another async request to run another queue |
|
49 | - * if there are still pending actions after completing a queue in this request. |
|
50 | - */ |
|
51 | - protected function handle() { |
|
52 | - do_action( 'action_scheduler_run_queue', 'Async Request' ); // run a queue in the same way as WP Cron, but declare the Async Request context |
|
53 | - |
|
54 | - $sleep_seconds = $this->get_sleep_seconds(); |
|
55 | - |
|
56 | - if ( $sleep_seconds ) { |
|
57 | - sleep( $sleep_seconds ); |
|
58 | - } |
|
59 | - |
|
60 | - $this->maybe_dispatch(); |
|
61 | - } |
|
62 | - |
|
63 | - /** |
|
64 | - * If the async request runner is needed and allowed to run, dispatch a request. |
|
65 | - */ |
|
66 | - public function maybe_dispatch() { |
|
67 | - if ( ! $this->allow() ) { |
|
68 | - return; |
|
69 | - } |
|
70 | - |
|
71 | - $this->dispatch(); |
|
72 | - ActionScheduler_QueueRunner::instance()->unhook_dispatch_async_request(); |
|
73 | - } |
|
74 | - |
|
75 | - /** |
|
76 | - * Only allow async requests when needed. |
|
77 | - * |
|
78 | - * Also allow 3rd party code to disable running actions via async requests. |
|
79 | - */ |
|
80 | - protected function allow() { |
|
81 | - |
|
82 | - if ( ! has_action( 'action_scheduler_run_queue' ) || ActionScheduler::runner()->has_maximum_concurrent_batches() || ! $this->store->has_pending_actions_due() ) { |
|
83 | - $allow = false; |
|
84 | - } else { |
|
85 | - $allow = true; |
|
86 | - } |
|
87 | - |
|
88 | - return apply_filters( 'action_scheduler_allow_async_request_runner', $allow ); |
|
89 | - } |
|
90 | - |
|
91 | - /** |
|
92 | - * Chaining async requests can crash MySQL. A brief sleep call in PHP prevents that. |
|
93 | - */ |
|
94 | - protected function get_sleep_seconds() { |
|
95 | - return apply_filters( 'action_scheduler_async_request_sleep_seconds', 5, $this ); |
|
96 | - } |
|
13 | + /** |
|
14 | + * Data store for querying actions |
|
15 | + * |
|
16 | + * @var ActionScheduler_Store |
|
17 | + * @access protected |
|
18 | + */ |
|
19 | + protected $store; |
|
20 | + |
|
21 | + /** |
|
22 | + * Prefix for ajax hooks |
|
23 | + * |
|
24 | + * @var string |
|
25 | + * @access protected |
|
26 | + */ |
|
27 | + protected $prefix = 'as'; |
|
28 | + |
|
29 | + /** |
|
30 | + * Action for ajax hooks |
|
31 | + * |
|
32 | + * @var string |
|
33 | + * @access protected |
|
34 | + */ |
|
35 | + protected $action = 'async_request_queue_runner'; |
|
36 | + |
|
37 | + /** |
|
38 | + * Initiate new async request |
|
39 | + */ |
|
40 | + public function __construct( ActionScheduler_Store $store ) { |
|
41 | + parent::__construct(); |
|
42 | + $this->store = $store; |
|
43 | + } |
|
44 | + |
|
45 | + /** |
|
46 | + * Handle async requests |
|
47 | + * |
|
48 | + * Run a queue, and maybe dispatch another async request to run another queue |
|
49 | + * if there are still pending actions after completing a queue in this request. |
|
50 | + */ |
|
51 | + protected function handle() { |
|
52 | + do_action( 'action_scheduler_run_queue', 'Async Request' ); // run a queue in the same way as WP Cron, but declare the Async Request context |
|
53 | + |
|
54 | + $sleep_seconds = $this->get_sleep_seconds(); |
|
55 | + |
|
56 | + if ( $sleep_seconds ) { |
|
57 | + sleep( $sleep_seconds ); |
|
58 | + } |
|
59 | + |
|
60 | + $this->maybe_dispatch(); |
|
61 | + } |
|
62 | + |
|
63 | + /** |
|
64 | + * If the async request runner is needed and allowed to run, dispatch a request. |
|
65 | + */ |
|
66 | + public function maybe_dispatch() { |
|
67 | + if ( ! $this->allow() ) { |
|
68 | + return; |
|
69 | + } |
|
70 | + |
|
71 | + $this->dispatch(); |
|
72 | + ActionScheduler_QueueRunner::instance()->unhook_dispatch_async_request(); |
|
73 | + } |
|
74 | + |
|
75 | + /** |
|
76 | + * Only allow async requests when needed. |
|
77 | + * |
|
78 | + * Also allow 3rd party code to disable running actions via async requests. |
|
79 | + */ |
|
80 | + protected function allow() { |
|
81 | + |
|
82 | + if ( ! has_action( 'action_scheduler_run_queue' ) || ActionScheduler::runner()->has_maximum_concurrent_batches() || ! $this->store->has_pending_actions_due() ) { |
|
83 | + $allow = false; |
|
84 | + } else { |
|
85 | + $allow = true; |
|
86 | + } |
|
87 | + |
|
88 | + return apply_filters( 'action_scheduler_allow_async_request_runner', $allow ); |
|
89 | + } |
|
90 | + |
|
91 | + /** |
|
92 | + * Chaining async requests can crash MySQL. A brief sleep call in PHP prevents that. |
|
93 | + */ |
|
94 | + protected function get_sleep_seconds() { |
|
95 | + return apply_filters( 'action_scheduler_async_request_sleep_seconds', 5, $this ); |
|
96 | + } |
|
97 | 97 | } |
@@ -3,7 +3,7 @@ discard block |
||
3 | 3 | * ActionScheduler_AsyncRequest_QueueRunner |
4 | 4 | */ |
5 | 5 | |
6 | -defined( 'ABSPATH' ) || exit; |
|
6 | +defined('ABSPATH') || exit; |
|
7 | 7 | |
8 | 8 | /** |
9 | 9 | * ActionScheduler_AsyncRequest_QueueRunner class. |
@@ -37,7 +37,7 @@ discard block |
||
37 | 37 | /** |
38 | 38 | * Initiate new async request |
39 | 39 | */ |
40 | - public function __construct( ActionScheduler_Store $store ) { |
|
40 | + public function __construct(ActionScheduler_Store $store) { |
|
41 | 41 | parent::__construct(); |
42 | 42 | $this->store = $store; |
43 | 43 | } |
@@ -49,12 +49,12 @@ discard block |
||
49 | 49 | * if there are still pending actions after completing a queue in this request. |
50 | 50 | */ |
51 | 51 | protected function handle() { |
52 | - do_action( 'action_scheduler_run_queue', 'Async Request' ); // run a queue in the same way as WP Cron, but declare the Async Request context |
|
52 | + do_action('action_scheduler_run_queue', 'Async Request'); // run a queue in the same way as WP Cron, but declare the Async Request context |
|
53 | 53 | |
54 | 54 | $sleep_seconds = $this->get_sleep_seconds(); |
55 | 55 | |
56 | - if ( $sleep_seconds ) { |
|
57 | - sleep( $sleep_seconds ); |
|
56 | + if ($sleep_seconds) { |
|
57 | + sleep($sleep_seconds); |
|
58 | 58 | } |
59 | 59 | |
60 | 60 | $this->maybe_dispatch(); |
@@ -64,7 +64,7 @@ discard block |
||
64 | 64 | * If the async request runner is needed and allowed to run, dispatch a request. |
65 | 65 | */ |
66 | 66 | public function maybe_dispatch() { |
67 | - if ( ! $this->allow() ) { |
|
67 | + if (!$this->allow()) { |
|
68 | 68 | return; |
69 | 69 | } |
70 | 70 | |
@@ -79,19 +79,19 @@ discard block |
||
79 | 79 | */ |
80 | 80 | protected function allow() { |
81 | 81 | |
82 | - if ( ! has_action( 'action_scheduler_run_queue' ) || ActionScheduler::runner()->has_maximum_concurrent_batches() || ! $this->store->has_pending_actions_due() ) { |
|
82 | + if (!has_action('action_scheduler_run_queue') || ActionScheduler::runner()->has_maximum_concurrent_batches() || !$this->store->has_pending_actions_due()) { |
|
83 | 83 | $allow = false; |
84 | 84 | } else { |
85 | 85 | $allow = true; |
86 | 86 | } |
87 | 87 | |
88 | - return apply_filters( 'action_scheduler_allow_async_request_runner', $allow ); |
|
88 | + return apply_filters('action_scheduler_allow_async_request_runner', $allow); |
|
89 | 89 | } |
90 | 90 | |
91 | 91 | /** |
92 | 92 | * Chaining async requests can crash MySQL. A brief sleep call in PHP prevents that. |
93 | 93 | */ |
94 | 94 | protected function get_sleep_seconds() { |
95 | - return apply_filters( 'action_scheduler_async_request_sleep_seconds', 5, $this ); |
|
95 | + return apply_filters('action_scheduler_async_request_sleep_seconds', 5, $this); |
|
96 | 96 | } |
97 | 97 | } |
@@ -7,109 +7,109 @@ |
||
7 | 7 | */ |
8 | 8 | class ActionScheduler_WPCommentCleaner { |
9 | 9 | |
10 | - /** |
|
11 | - * Post migration hook used to cleanup the WP comment table. |
|
12 | - * |
|
13 | - * @var string |
|
14 | - */ |
|
15 | - protected static $cleanup_hook = 'action_scheduler/cleanup_wp_comment_logs'; |
|
16 | - |
|
17 | - /** |
|
18 | - * An instance of the ActionScheduler_wpCommentLogger class to interact with the comments table. |
|
19 | - * |
|
20 | - * This instance should only be used as an interface. It should not be initialized. |
|
21 | - * |
|
22 | - * @var ActionScheduler_wpCommentLogger |
|
23 | - */ |
|
24 | - protected static $wp_comment_logger = null; |
|
25 | - |
|
26 | - /** |
|
27 | - * The key used to store the cached value of whether there are logs in the WP comment table. |
|
28 | - * |
|
29 | - * @var string |
|
30 | - */ |
|
31 | - protected static $has_logs_option_key = 'as_has_wp_comment_logs'; |
|
32 | - |
|
33 | - /** |
|
34 | - * Initialize the class and attach callbacks. |
|
35 | - */ |
|
36 | - public static function init() { |
|
37 | - if ( empty( self::$wp_comment_logger ) ) { |
|
38 | - self::$wp_comment_logger = new ActionScheduler_wpCommentLogger(); |
|
39 | - } |
|
40 | - |
|
41 | - add_action( self::$cleanup_hook, array( __CLASS__, 'delete_all_action_comments' ) ); |
|
42 | - |
|
43 | - // While there are orphaned logs left in the comments table, we need to attach the callbacks which filter comment counts. |
|
44 | - add_action( 'pre_get_comments', array( self::$wp_comment_logger, 'filter_comment_queries' ), 10, 1 ); |
|
45 | - add_action( 'wp_count_comments', array( self::$wp_comment_logger, 'filter_comment_count' ), 20, 2 ); // run after WC_Comments::wp_count_comments() to make sure we exclude order notes and action logs |
|
46 | - add_action( 'comment_feed_where', array( self::$wp_comment_logger, 'filter_comment_feed' ), 10, 2 ); |
|
47 | - |
|
48 | - // Action Scheduler may be displayed as a Tools screen or WooCommerce > Status administration screen |
|
49 | - add_action( 'load-tools_page_action-scheduler', array( __CLASS__, 'register_admin_notice' ) ); |
|
50 | - add_action( 'load-woocommerce_page_wc-status', array( __CLASS__, 'register_admin_notice' ) ); |
|
51 | - } |
|
52 | - |
|
53 | - /** |
|
54 | - * Determines if there are log entries in the wp comments table. |
|
55 | - * |
|
56 | - * Uses the flag set on migration completion set by @see self::maybe_schedule_cleanup(). |
|
57 | - * |
|
58 | - * @return boolean Whether there are scheduled action comments in the comments table. |
|
59 | - */ |
|
60 | - public static function has_logs() { |
|
61 | - return 'yes' === get_option( self::$has_logs_option_key ); |
|
62 | - } |
|
63 | - |
|
64 | - /** |
|
65 | - * Schedules the WP Post comment table cleanup to run in 6 months if it's not already scheduled. |
|
66 | - * Attached to the migration complete hook 'action_scheduler/migration_complete'. |
|
67 | - */ |
|
68 | - public static function maybe_schedule_cleanup() { |
|
69 | - if ( (bool) get_comments( array( 'type' => ActionScheduler_wpCommentLogger::TYPE, 'number' => 1, 'fields' => 'ids' ) ) ) { |
|
70 | - update_option( self::$has_logs_option_key, 'yes' ); |
|
71 | - |
|
72 | - if ( ! as_next_scheduled_action( self::$cleanup_hook ) ) { |
|
73 | - as_schedule_single_action( gmdate( 'U' ) + ( 6 * MONTH_IN_SECONDS ), self::$cleanup_hook ); |
|
74 | - } |
|
75 | - } |
|
76 | - } |
|
77 | - |
|
78 | - /** |
|
79 | - * Delete all action comments from the WP Comments table. |
|
80 | - */ |
|
81 | - public static function delete_all_action_comments() { |
|
82 | - global $wpdb; |
|
83 | - $wpdb->delete( $wpdb->comments, array( 'comment_type' => ActionScheduler_wpCommentLogger::TYPE, 'comment_agent' => ActionScheduler_wpCommentLogger::AGENT ) ); |
|
84 | - delete_option( self::$has_logs_option_key ); |
|
85 | - } |
|
86 | - |
|
87 | - /** |
|
88 | - * Registers admin notices about the orphaned action logs. |
|
89 | - */ |
|
90 | - public static function register_admin_notice() { |
|
91 | - add_action( 'admin_notices', array( __CLASS__, 'print_admin_notice' ) ); |
|
92 | - } |
|
10 | + /** |
|
11 | + * Post migration hook used to cleanup the WP comment table. |
|
12 | + * |
|
13 | + * @var string |
|
14 | + */ |
|
15 | + protected static $cleanup_hook = 'action_scheduler/cleanup_wp_comment_logs'; |
|
16 | + |
|
17 | + /** |
|
18 | + * An instance of the ActionScheduler_wpCommentLogger class to interact with the comments table. |
|
19 | + * |
|
20 | + * This instance should only be used as an interface. It should not be initialized. |
|
21 | + * |
|
22 | + * @var ActionScheduler_wpCommentLogger |
|
23 | + */ |
|
24 | + protected static $wp_comment_logger = null; |
|
25 | + |
|
26 | + /** |
|
27 | + * The key used to store the cached value of whether there are logs in the WP comment table. |
|
28 | + * |
|
29 | + * @var string |
|
30 | + */ |
|
31 | + protected static $has_logs_option_key = 'as_has_wp_comment_logs'; |
|
32 | + |
|
33 | + /** |
|
34 | + * Initialize the class and attach callbacks. |
|
35 | + */ |
|
36 | + public static function init() { |
|
37 | + if ( empty( self::$wp_comment_logger ) ) { |
|
38 | + self::$wp_comment_logger = new ActionScheduler_wpCommentLogger(); |
|
39 | + } |
|
40 | + |
|
41 | + add_action( self::$cleanup_hook, array( __CLASS__, 'delete_all_action_comments' ) ); |
|
42 | + |
|
43 | + // While there are orphaned logs left in the comments table, we need to attach the callbacks which filter comment counts. |
|
44 | + add_action( 'pre_get_comments', array( self::$wp_comment_logger, 'filter_comment_queries' ), 10, 1 ); |
|
45 | + add_action( 'wp_count_comments', array( self::$wp_comment_logger, 'filter_comment_count' ), 20, 2 ); // run after WC_Comments::wp_count_comments() to make sure we exclude order notes and action logs |
|
46 | + add_action( 'comment_feed_where', array( self::$wp_comment_logger, 'filter_comment_feed' ), 10, 2 ); |
|
47 | + |
|
48 | + // Action Scheduler may be displayed as a Tools screen or WooCommerce > Status administration screen |
|
49 | + add_action( 'load-tools_page_action-scheduler', array( __CLASS__, 'register_admin_notice' ) ); |
|
50 | + add_action( 'load-woocommerce_page_wc-status', array( __CLASS__, 'register_admin_notice' ) ); |
|
51 | + } |
|
52 | + |
|
53 | + /** |
|
54 | + * Determines if there are log entries in the wp comments table. |
|
55 | + * |
|
56 | + * Uses the flag set on migration completion set by @see self::maybe_schedule_cleanup(). |
|
57 | + * |
|
58 | + * @return boolean Whether there are scheduled action comments in the comments table. |
|
59 | + */ |
|
60 | + public static function has_logs() { |
|
61 | + return 'yes' === get_option( self::$has_logs_option_key ); |
|
62 | + } |
|
63 | + |
|
64 | + /** |
|
65 | + * Schedules the WP Post comment table cleanup to run in 6 months if it's not already scheduled. |
|
66 | + * Attached to the migration complete hook 'action_scheduler/migration_complete'. |
|
67 | + */ |
|
68 | + public static function maybe_schedule_cleanup() { |
|
69 | + if ( (bool) get_comments( array( 'type' => ActionScheduler_wpCommentLogger::TYPE, 'number' => 1, 'fields' => 'ids' ) ) ) { |
|
70 | + update_option( self::$has_logs_option_key, 'yes' ); |
|
71 | + |
|
72 | + if ( ! as_next_scheduled_action( self::$cleanup_hook ) ) { |
|
73 | + as_schedule_single_action( gmdate( 'U' ) + ( 6 * MONTH_IN_SECONDS ), self::$cleanup_hook ); |
|
74 | + } |
|
75 | + } |
|
76 | + } |
|
77 | + |
|
78 | + /** |
|
79 | + * Delete all action comments from the WP Comments table. |
|
80 | + */ |
|
81 | + public static function delete_all_action_comments() { |
|
82 | + global $wpdb; |
|
83 | + $wpdb->delete( $wpdb->comments, array( 'comment_type' => ActionScheduler_wpCommentLogger::TYPE, 'comment_agent' => ActionScheduler_wpCommentLogger::AGENT ) ); |
|
84 | + delete_option( self::$has_logs_option_key ); |
|
85 | + } |
|
86 | + |
|
87 | + /** |
|
88 | + * Registers admin notices about the orphaned action logs. |
|
89 | + */ |
|
90 | + public static function register_admin_notice() { |
|
91 | + add_action( 'admin_notices', array( __CLASS__, 'print_admin_notice' ) ); |
|
92 | + } |
|
93 | 93 | |
94 | - /** |
|
95 | - * Prints details about the orphaned action logs and includes information on where to learn more. |
|
96 | - */ |
|
97 | - public static function print_admin_notice() { |
|
98 | - $next_cleanup_message = ''; |
|
99 | - $next_scheduled_cleanup_hook = as_next_scheduled_action( self::$cleanup_hook ); |
|
100 | - |
|
101 | - if ( $next_scheduled_cleanup_hook ) { |
|
102 | - /* translators: %s: date interval */ |
|
103 | - $next_cleanup_message = sprintf( __( 'This data will be deleted in %s.', 'action-scheduler' ), human_time_diff( gmdate( 'U' ), $next_scheduled_cleanup_hook ) ); |
|
104 | - } |
|
105 | - |
|
106 | - $notice = sprintf( |
|
107 | - /* translators: 1: next cleanup message 2: github issue URL */ |
|
108 | - __( 'Action Scheduler has migrated data to custom tables; however, orphaned log entries exist in the WordPress Comments table. %1$s <a href="%2$s">Learn more »</a>', 'action-scheduler' ), |
|
109 | - $next_cleanup_message, |
|
110 | - 'https://github.com/woocommerce/action-scheduler/issues/368' |
|
111 | - ); |
|
112 | - |
|
113 | - echo '<div class="notice notice-warning"><p>' . wp_kses_post( $notice ) . '</p></div>'; |
|
114 | - } |
|
94 | + /** |
|
95 | + * Prints details about the orphaned action logs and includes information on where to learn more. |
|
96 | + */ |
|
97 | + public static function print_admin_notice() { |
|
98 | + $next_cleanup_message = ''; |
|
99 | + $next_scheduled_cleanup_hook = as_next_scheduled_action( self::$cleanup_hook ); |
|
100 | + |
|
101 | + if ( $next_scheduled_cleanup_hook ) { |
|
102 | + /* translators: %s: date interval */ |
|
103 | + $next_cleanup_message = sprintf( __( 'This data will be deleted in %s.', 'action-scheduler' ), human_time_diff( gmdate( 'U' ), $next_scheduled_cleanup_hook ) ); |
|
104 | + } |
|
105 | + |
|
106 | + $notice = sprintf( |
|
107 | + /* translators: 1: next cleanup message 2: github issue URL */ |
|
108 | + __( 'Action Scheduler has migrated data to custom tables; however, orphaned log entries exist in the WordPress Comments table. %1$s <a href="%2$s">Learn more »</a>', 'action-scheduler' ), |
|
109 | + $next_cleanup_message, |
|
110 | + 'https://github.com/woocommerce/action-scheduler/issues/368' |
|
111 | + ); |
|
112 | + |
|
113 | + echo '<div class="notice notice-warning"><p>' . wp_kses_post( $notice ) . '</p></div>'; |
|
114 | + } |
|
115 | 115 | } |
@@ -34,20 +34,20 @@ discard block |
||
34 | 34 | * Initialize the class and attach callbacks. |
35 | 35 | */ |
36 | 36 | public static function init() { |
37 | - if ( empty( self::$wp_comment_logger ) ) { |
|
37 | + if (empty(self::$wp_comment_logger)) { |
|
38 | 38 | self::$wp_comment_logger = new ActionScheduler_wpCommentLogger(); |
39 | 39 | } |
40 | 40 | |
41 | - add_action( self::$cleanup_hook, array( __CLASS__, 'delete_all_action_comments' ) ); |
|
41 | + add_action(self::$cleanup_hook, array(__CLASS__, 'delete_all_action_comments')); |
|
42 | 42 | |
43 | 43 | // While there are orphaned logs left in the comments table, we need to attach the callbacks which filter comment counts. |
44 | - add_action( 'pre_get_comments', array( self::$wp_comment_logger, 'filter_comment_queries' ), 10, 1 ); |
|
45 | - add_action( 'wp_count_comments', array( self::$wp_comment_logger, 'filter_comment_count' ), 20, 2 ); // run after WC_Comments::wp_count_comments() to make sure we exclude order notes and action logs |
|
46 | - add_action( 'comment_feed_where', array( self::$wp_comment_logger, 'filter_comment_feed' ), 10, 2 ); |
|
44 | + add_action('pre_get_comments', array(self::$wp_comment_logger, 'filter_comment_queries'), 10, 1); |
|
45 | + add_action('wp_count_comments', array(self::$wp_comment_logger, 'filter_comment_count'), 20, 2); // run after WC_Comments::wp_count_comments() to make sure we exclude order notes and action logs |
|
46 | + add_action('comment_feed_where', array(self::$wp_comment_logger, 'filter_comment_feed'), 10, 2); |
|
47 | 47 | |
48 | 48 | // Action Scheduler may be displayed as a Tools screen or WooCommerce > Status administration screen |
49 | - add_action( 'load-tools_page_action-scheduler', array( __CLASS__, 'register_admin_notice' ) ); |
|
50 | - add_action( 'load-woocommerce_page_wc-status', array( __CLASS__, 'register_admin_notice' ) ); |
|
49 | + add_action('load-tools_page_action-scheduler', array(__CLASS__, 'register_admin_notice')); |
|
50 | + add_action('load-woocommerce_page_wc-status', array(__CLASS__, 'register_admin_notice')); |
|
51 | 51 | } |
52 | 52 | |
53 | 53 | /** |
@@ -58,7 +58,7 @@ discard block |
||
58 | 58 | * @return boolean Whether there are scheduled action comments in the comments table. |
59 | 59 | */ |
60 | 60 | public static function has_logs() { |
61 | - return 'yes' === get_option( self::$has_logs_option_key ); |
|
61 | + return 'yes' === get_option(self::$has_logs_option_key); |
|
62 | 62 | } |
63 | 63 | |
64 | 64 | /** |
@@ -66,11 +66,11 @@ discard block |
||
66 | 66 | * Attached to the migration complete hook 'action_scheduler/migration_complete'. |
67 | 67 | */ |
68 | 68 | public static function maybe_schedule_cleanup() { |
69 | - if ( (bool) get_comments( array( 'type' => ActionScheduler_wpCommentLogger::TYPE, 'number' => 1, 'fields' => 'ids' ) ) ) { |
|
70 | - update_option( self::$has_logs_option_key, 'yes' ); |
|
69 | + if ((bool) get_comments(array('type' => ActionScheduler_wpCommentLogger::TYPE, 'number' => 1, 'fields' => 'ids'))) { |
|
70 | + update_option(self::$has_logs_option_key, 'yes'); |
|
71 | 71 | |
72 | - if ( ! as_next_scheduled_action( self::$cleanup_hook ) ) { |
|
73 | - as_schedule_single_action( gmdate( 'U' ) + ( 6 * MONTH_IN_SECONDS ), self::$cleanup_hook ); |
|
72 | + if (!as_next_scheduled_action(self::$cleanup_hook)) { |
|
73 | + as_schedule_single_action(gmdate('U') + (6 * MONTH_IN_SECONDS), self::$cleanup_hook); |
|
74 | 74 | } |
75 | 75 | } |
76 | 76 | } |
@@ -80,15 +80,15 @@ discard block |
||
80 | 80 | */ |
81 | 81 | public static function delete_all_action_comments() { |
82 | 82 | global $wpdb; |
83 | - $wpdb->delete( $wpdb->comments, array( 'comment_type' => ActionScheduler_wpCommentLogger::TYPE, 'comment_agent' => ActionScheduler_wpCommentLogger::AGENT ) ); |
|
84 | - delete_option( self::$has_logs_option_key ); |
|
83 | + $wpdb->delete($wpdb->comments, array('comment_type' => ActionScheduler_wpCommentLogger::TYPE, 'comment_agent' => ActionScheduler_wpCommentLogger::AGENT)); |
|
84 | + delete_option(self::$has_logs_option_key); |
|
85 | 85 | } |
86 | 86 | |
87 | 87 | /** |
88 | 88 | * Registers admin notices about the orphaned action logs. |
89 | 89 | */ |
90 | 90 | public static function register_admin_notice() { |
91 | - add_action( 'admin_notices', array( __CLASS__, 'print_admin_notice' ) ); |
|
91 | + add_action('admin_notices', array(__CLASS__, 'print_admin_notice')); |
|
92 | 92 | } |
93 | 93 | |
94 | 94 | /** |
@@ -96,20 +96,20 @@ discard block |
||
96 | 96 | */ |
97 | 97 | public static function print_admin_notice() { |
98 | 98 | $next_cleanup_message = ''; |
99 | - $next_scheduled_cleanup_hook = as_next_scheduled_action( self::$cleanup_hook ); |
|
99 | + $next_scheduled_cleanup_hook = as_next_scheduled_action(self::$cleanup_hook); |
|
100 | 100 | |
101 | - if ( $next_scheduled_cleanup_hook ) { |
|
101 | + if ($next_scheduled_cleanup_hook) { |
|
102 | 102 | /* translators: %s: date interval */ |
103 | - $next_cleanup_message = sprintf( __( 'This data will be deleted in %s.', 'action-scheduler' ), human_time_diff( gmdate( 'U' ), $next_scheduled_cleanup_hook ) ); |
|
103 | + $next_cleanup_message = sprintf(__('This data will be deleted in %s.', 'action-scheduler'), human_time_diff(gmdate('U'), $next_scheduled_cleanup_hook)); |
|
104 | 104 | } |
105 | 105 | |
106 | 106 | $notice = sprintf( |
107 | 107 | /* translators: 1: next cleanup message 2: github issue URL */ |
108 | - __( 'Action Scheduler has migrated data to custom tables; however, orphaned log entries exist in the WordPress Comments table. %1$s <a href="%2$s">Learn more »</a>', 'action-scheduler' ), |
|
108 | + __('Action Scheduler has migrated data to custom tables; however, orphaned log entries exist in the WordPress Comments table. %1$s <a href="%2$s">Learn more »</a>', 'action-scheduler'), |
|
109 | 109 | $next_cleanup_message, |
110 | 110 | 'https://github.com/woocommerce/action-scheduler/issues/368' |
111 | 111 | ); |
112 | 112 | |
113 | - echo '<div class="notice notice-warning"><p>' . wp_kses_post( $notice ) . '</p></div>'; |
|
113 | + echo '<div class="notice notice-warning"><p>' . wp_kses_post($notice) . '</p></div>'; |
|
114 | 114 | } |
115 | 115 | } |
@@ -5,12 +5,12 @@ |
||
5 | 5 | */ |
6 | 6 | class ActionScheduler_FinishedAction extends ActionScheduler_Action { |
7 | 7 | |
8 | - public function execute() { |
|
9 | - // don't execute |
|
10 | - } |
|
8 | + public function execute() { |
|
9 | + // don't execute |
|
10 | + } |
|
11 | 11 | |
12 | - public function is_finished() { |
|
13 | - return TRUE; |
|
14 | - } |
|
12 | + public function is_finished() { |
|
13 | + return TRUE; |
|
14 | + } |
|
15 | 15 | } |
16 | - |
|
17 | 16 | \ No newline at end of file |
17 | + |
|
18 | 18 | \ No newline at end of file |
@@ -8,16 +8,16 @@ |
||
8 | 8 | */ |
9 | 9 | class ActionScheduler_CanceledAction extends ActionScheduler_FinishedAction { |
10 | 10 | |
11 | - /** |
|
12 | - * @param string $hook |
|
13 | - * @param array $args |
|
14 | - * @param ActionScheduler_Schedule $schedule |
|
15 | - * @param string $group |
|
16 | - */ |
|
17 | - public function __construct( $hook, array $args = array(), ActionScheduler_Schedule $schedule = null, $group = '' ) { |
|
18 | - parent::__construct( $hook, $args, $schedule, $group ); |
|
19 | - if ( is_null( $schedule ) ) { |
|
20 | - $this->set_schedule( new ActionScheduler_NullSchedule() ); |
|
21 | - } |
|
22 | - } |
|
11 | + /** |
|
12 | + * @param string $hook |
|
13 | + * @param array $args |
|
14 | + * @param ActionScheduler_Schedule $schedule |
|
15 | + * @param string $group |
|
16 | + */ |
|
17 | + public function __construct( $hook, array $args = array(), ActionScheduler_Schedule $schedule = null, $group = '' ) { |
|
18 | + parent::__construct( $hook, $args, $schedule, $group ); |
|
19 | + if ( is_null( $schedule ) ) { |
|
20 | + $this->set_schedule( new ActionScheduler_NullSchedule() ); |
|
21 | + } |
|
22 | + } |
|
23 | 23 | } |
@@ -14,10 +14,10 @@ |
||
14 | 14 | * @param ActionScheduler_Schedule $schedule |
15 | 15 | * @param string $group |
16 | 16 | */ |
17 | - public function __construct( $hook, array $args = array(), ActionScheduler_Schedule $schedule = null, $group = '' ) { |
|
18 | - parent::__construct( $hook, $args, $schedule, $group ); |
|
19 | - if ( is_null( $schedule ) ) { |
|
20 | - $this->set_schedule( new ActionScheduler_NullSchedule() ); |
|
17 | + public function __construct($hook, array $args = array(), ActionScheduler_Schedule $schedule = null, $group = '') { |
|
18 | + parent::__construct($hook, $args, $schedule, $group); |
|
19 | + if (is_null($schedule)) { |
|
20 | + $this->set_schedule(new ActionScheduler_NullSchedule()); |
|
21 | 21 | } |
22 | 22 | } |
23 | 23 | } |
@@ -4,72 +4,72 @@ |
||
4 | 4 | * Class ActionScheduler_Action |
5 | 5 | */ |
6 | 6 | class ActionScheduler_Action { |
7 | - protected $hook = ''; |
|
8 | - protected $args = array(); |
|
9 | - /** @var ActionScheduler_Schedule */ |
|
10 | - protected $schedule = NULL; |
|
11 | - protected $group = ''; |
|
7 | + protected $hook = ''; |
|
8 | + protected $args = array(); |
|
9 | + /** @var ActionScheduler_Schedule */ |
|
10 | + protected $schedule = NULL; |
|
11 | + protected $group = ''; |
|
12 | 12 | |
13 | - public function __construct( $hook, array $args = array(), ActionScheduler_Schedule $schedule = NULL, $group = '' ) { |
|
14 | - $schedule = empty( $schedule ) ? new ActionScheduler_NullSchedule() : $schedule; |
|
15 | - $this->set_hook($hook); |
|
16 | - $this->set_schedule($schedule); |
|
17 | - $this->set_args($args); |
|
18 | - $this->set_group($group); |
|
19 | - } |
|
13 | + public function __construct( $hook, array $args = array(), ActionScheduler_Schedule $schedule = NULL, $group = '' ) { |
|
14 | + $schedule = empty( $schedule ) ? new ActionScheduler_NullSchedule() : $schedule; |
|
15 | + $this->set_hook($hook); |
|
16 | + $this->set_schedule($schedule); |
|
17 | + $this->set_args($args); |
|
18 | + $this->set_group($group); |
|
19 | + } |
|
20 | 20 | |
21 | - public function execute() { |
|
22 | - return do_action_ref_array($this->get_hook(), $this->get_args()); |
|
23 | - } |
|
21 | + public function execute() { |
|
22 | + return do_action_ref_array($this->get_hook(), $this->get_args()); |
|
23 | + } |
|
24 | 24 | |
25 | - /** |
|
26 | - * @param string $hook |
|
27 | - */ |
|
28 | - protected function set_hook( $hook ) { |
|
29 | - $this->hook = $hook; |
|
30 | - } |
|
25 | + /** |
|
26 | + * @param string $hook |
|
27 | + */ |
|
28 | + protected function set_hook( $hook ) { |
|
29 | + $this->hook = $hook; |
|
30 | + } |
|
31 | 31 | |
32 | - public function get_hook() { |
|
33 | - return $this->hook; |
|
34 | - } |
|
32 | + public function get_hook() { |
|
33 | + return $this->hook; |
|
34 | + } |
|
35 | 35 | |
36 | - protected function set_schedule( ActionScheduler_Schedule $schedule ) { |
|
37 | - $this->schedule = $schedule; |
|
38 | - } |
|
36 | + protected function set_schedule( ActionScheduler_Schedule $schedule ) { |
|
37 | + $this->schedule = $schedule; |
|
38 | + } |
|
39 | 39 | |
40 | - /** |
|
41 | - * @return ActionScheduler_Schedule |
|
42 | - */ |
|
43 | - public function get_schedule() { |
|
44 | - return $this->schedule; |
|
45 | - } |
|
40 | + /** |
|
41 | + * @return ActionScheduler_Schedule |
|
42 | + */ |
|
43 | + public function get_schedule() { |
|
44 | + return $this->schedule; |
|
45 | + } |
|
46 | 46 | |
47 | - protected function set_args( array $args ) { |
|
48 | - $this->args = $args; |
|
49 | - } |
|
47 | + protected function set_args( array $args ) { |
|
48 | + $this->args = $args; |
|
49 | + } |
|
50 | 50 | |
51 | - public function get_args() { |
|
52 | - return $this->args; |
|
53 | - } |
|
51 | + public function get_args() { |
|
52 | + return $this->args; |
|
53 | + } |
|
54 | 54 | |
55 | - /** |
|
56 | - * @param string $group |
|
57 | - */ |
|
58 | - protected function set_group( $group ) { |
|
59 | - $this->group = $group; |
|
60 | - } |
|
55 | + /** |
|
56 | + * @param string $group |
|
57 | + */ |
|
58 | + protected function set_group( $group ) { |
|
59 | + $this->group = $group; |
|
60 | + } |
|
61 | 61 | |
62 | - /** |
|
63 | - * @return string |
|
64 | - */ |
|
65 | - public function get_group() { |
|
66 | - return $this->group; |
|
67 | - } |
|
62 | + /** |
|
63 | + * @return string |
|
64 | + */ |
|
65 | + public function get_group() { |
|
66 | + return $this->group; |
|
67 | + } |
|
68 | 68 | |
69 | - /** |
|
70 | - * @return bool If the action has been finished |
|
71 | - */ |
|
72 | - public function is_finished() { |
|
73 | - return FALSE; |
|
74 | - } |
|
69 | + /** |
|
70 | + * @return bool If the action has been finished |
|
71 | + */ |
|
72 | + public function is_finished() { |
|
73 | + return FALSE; |
|
74 | + } |
|
75 | 75 | } |
@@ -10,8 +10,8 @@ discard block |
||
10 | 10 | protected $schedule = NULL; |
11 | 11 | protected $group = ''; |
12 | 12 | |
13 | - public function __construct( $hook, array $args = array(), ActionScheduler_Schedule $schedule = NULL, $group = '' ) { |
|
14 | - $schedule = empty( $schedule ) ? new ActionScheduler_NullSchedule() : $schedule; |
|
13 | + public function __construct($hook, array $args = array(), ActionScheduler_Schedule $schedule = NULL, $group = '') { |
|
14 | + $schedule = empty($schedule) ? new ActionScheduler_NullSchedule() : $schedule; |
|
15 | 15 | $this->set_hook($hook); |
16 | 16 | $this->set_schedule($schedule); |
17 | 17 | $this->set_args($args); |
@@ -25,7 +25,7 @@ discard block |
||
25 | 25 | /** |
26 | 26 | * @param string $hook |
27 | 27 | */ |
28 | - protected function set_hook( $hook ) { |
|
28 | + protected function set_hook($hook) { |
|
29 | 29 | $this->hook = $hook; |
30 | 30 | } |
31 | 31 | |
@@ -33,7 +33,7 @@ discard block |
||
33 | 33 | return $this->hook; |
34 | 34 | } |
35 | 35 | |
36 | - protected function set_schedule( ActionScheduler_Schedule $schedule ) { |
|
36 | + protected function set_schedule(ActionScheduler_Schedule $schedule) { |
|
37 | 37 | $this->schedule = $schedule; |
38 | 38 | } |
39 | 39 | |
@@ -44,7 +44,7 @@ discard block |
||
44 | 44 | return $this->schedule; |
45 | 45 | } |
46 | 46 | |
47 | - protected function set_args( array $args ) { |
|
47 | + protected function set_args(array $args) { |
|
48 | 48 | $this->args = $args; |
49 | 49 | } |
50 | 50 | |
@@ -55,7 +55,7 @@ discard block |
||
55 | 55 | /** |
56 | 56 | * @param string $group |
57 | 57 | */ |
58 | - protected function set_group( $group ) { |
|
58 | + protected function set_group($group) { |
|
59 | 59 | $this->group = $group; |
60 | 60 | } |
61 | 61 |
@@ -5,12 +5,12 @@ |
||
5 | 5 | */ |
6 | 6 | class ActionScheduler_NullAction extends ActionScheduler_Action { |
7 | 7 | |
8 | - public function __construct( $hook = '', array $args = array(), ActionScheduler_Schedule $schedule = NULL ) { |
|
9 | - $this->set_schedule( new ActionScheduler_NullSchedule() ); |
|
10 | - } |
|
8 | + public function __construct( $hook = '', array $args = array(), ActionScheduler_Schedule $schedule = NULL ) { |
|
9 | + $this->set_schedule( new ActionScheduler_NullSchedule() ); |
|
10 | + } |
|
11 | 11 | |
12 | - public function execute() { |
|
13 | - // don't execute |
|
14 | - } |
|
12 | + public function execute() { |
|
13 | + // don't execute |
|
14 | + } |
|
15 | 15 | } |
16 | - |
|
17 | 16 | \ No newline at end of file |
17 | + |
|
18 | 18 | \ No newline at end of file |
@@ -5,8 +5,8 @@ |
||
5 | 5 | */ |
6 | 6 | class ActionScheduler_NullAction extends ActionScheduler_Action { |
7 | 7 | |
8 | - public function __construct( $hook = '', array $args = array(), ActionScheduler_Schedule $schedule = NULL ) { |
|
9 | - $this->set_schedule( new ActionScheduler_NullSchedule() ); |
|
8 | + public function __construct($hook = '', array $args = array(), ActionScheduler_Schedule $schedule = NULL) { |
|
9 | + $this->set_schedule(new ActionScheduler_NullSchedule()); |
|
10 | 10 | } |
11 | 11 | |
12 | 12 | public function execute() { |
@@ -6,149 +6,149 @@ |
||
6 | 6 | */ |
7 | 7 | class ActionScheduler_AdminView extends ActionScheduler_AdminView_Deprecated { |
8 | 8 | |
9 | - private static $admin_view = NULL; |
|
10 | - |
|
11 | - private static $screen_id = 'tools_page_action-scheduler'; |
|
12 | - |
|
13 | - /** @var ActionScheduler_ListTable */ |
|
14 | - protected $list_table; |
|
15 | - |
|
16 | - /** |
|
17 | - * @return ActionScheduler_AdminView |
|
18 | - * @codeCoverageIgnore |
|
19 | - */ |
|
20 | - public static function instance() { |
|
21 | - |
|
22 | - if ( empty( self::$admin_view ) ) { |
|
23 | - $class = apply_filters('action_scheduler_admin_view_class', 'ActionScheduler_AdminView'); |
|
24 | - self::$admin_view = new $class(); |
|
25 | - } |
|
26 | - |
|
27 | - return self::$admin_view; |
|
28 | - } |
|
29 | - |
|
30 | - /** |
|
31 | - * @codeCoverageIgnore |
|
32 | - */ |
|
33 | - public function init() { |
|
34 | - if ( is_admin() && ( ! defined( 'DOING_AJAX' ) || false == DOING_AJAX ) ) { |
|
35 | - |
|
36 | - if ( class_exists( 'WooCommerce' ) ) { |
|
37 | - add_action( 'woocommerce_admin_status_content_action-scheduler', array( $this, 'render_admin_ui' ) ); |
|
38 | - add_action( 'woocommerce_system_status_report', array( $this, 'system_status_report' ) ); |
|
39 | - add_filter( 'woocommerce_admin_status_tabs', array( $this, 'register_system_status_tab' ) ); |
|
40 | - } |
|
41 | - |
|
42 | - add_action( 'admin_menu', array( $this, 'register_menu' ) ); |
|
43 | - |
|
44 | - add_action( 'current_screen', array( $this, 'add_help_tabs' ) ); |
|
45 | - } |
|
46 | - } |
|
47 | - |
|
48 | - public function system_status_report() { |
|
49 | - $table = new ActionScheduler_wcSystemStatus( ActionScheduler::store() ); |
|
50 | - $table->render(); |
|
51 | - } |
|
52 | - |
|
53 | - /** |
|
54 | - * Registers action-scheduler into WooCommerce > System status. |
|
55 | - * |
|
56 | - * @param array $tabs An associative array of tab key => label. |
|
57 | - * @return array $tabs An associative array of tab key => label, including Action Scheduler's tabs |
|
58 | - */ |
|
59 | - public function register_system_status_tab( array $tabs ) { |
|
60 | - $tabs['action-scheduler'] = __( 'Scheduled Actions', 'action-scheduler' ); |
|
61 | - |
|
62 | - return $tabs; |
|
63 | - } |
|
64 | - |
|
65 | - /** |
|
66 | - * Include Action Scheduler's administration under the Tools menu. |
|
67 | - * |
|
68 | - * A menu under the Tools menu is important for backward compatibility (as that's |
|
69 | - * where it started), and also provides more convenient access than the WooCommerce |
|
70 | - * System Status page, and for sites where WooCommerce isn't active. |
|
71 | - */ |
|
72 | - public function register_menu() { |
|
73 | - $hook_suffix = add_submenu_page( |
|
74 | - 'tools.php', |
|
75 | - __( 'Scheduled Actions', 'action-scheduler' ), |
|
76 | - __( 'Scheduled Actions', 'action-scheduler' ), |
|
77 | - 'manage_options', |
|
78 | - 'action-scheduler', |
|
79 | - array( $this, 'render_admin_ui' ) |
|
80 | - ); |
|
81 | - add_action( 'load-' . $hook_suffix , array( $this, 'process_admin_ui' ) ); |
|
82 | - } |
|
83 | - |
|
84 | - /** |
|
85 | - * Triggers processing of any pending actions. |
|
86 | - */ |
|
87 | - public function process_admin_ui() { |
|
88 | - $this->get_list_table(); |
|
89 | - } |
|
90 | - |
|
91 | - /** |
|
92 | - * Renders the Admin UI |
|
93 | - */ |
|
94 | - public function render_admin_ui() { |
|
95 | - $table = $this->get_list_table(); |
|
96 | - $table->display_page(); |
|
97 | - } |
|
98 | - |
|
99 | - /** |
|
100 | - * Get the admin UI object and process any requested actions. |
|
101 | - * |
|
102 | - * @return ActionScheduler_ListTable |
|
103 | - */ |
|
104 | - protected function get_list_table() { |
|
105 | - if ( null === $this->list_table ) { |
|
106 | - $this->list_table = new ActionScheduler_ListTable( ActionScheduler::store(), ActionScheduler::logger(), ActionScheduler::runner() ); |
|
107 | - $this->list_table->process_actions(); |
|
108 | - } |
|
109 | - |
|
110 | - return $this->list_table; |
|
111 | - } |
|
112 | - |
|
113 | - /** |
|
114 | - * Provide more information about the screen and its data in the help tab. |
|
115 | - */ |
|
116 | - public function add_help_tabs() { |
|
117 | - $screen = get_current_screen(); |
|
118 | - |
|
119 | - if ( ! $screen || self::$screen_id != $screen->id ) { |
|
120 | - return; |
|
121 | - } |
|
122 | - |
|
123 | - $as_version = ActionScheduler_Versions::instance()->latest_version(); |
|
124 | - $screen->add_help_tab( |
|
125 | - array( |
|
126 | - 'id' => 'action_scheduler_about', |
|
127 | - 'title' => __( 'About', 'action-scheduler' ), |
|
128 | - 'content' => |
|
129 | - '<h2>' . sprintf( __( 'About Action Scheduler %s', 'action-scheduler' ), $as_version ) . '</h2>' . |
|
130 | - '<p>' . |
|
131 | - __( 'Action Scheduler is a scalable, traceable job queue for background processing large sets of actions. Action Scheduler works by triggering an action hook to run at some time in the future. Scheduled actions can also be scheduled to run on a recurring schedule.', 'action-scheduler' ) . |
|
132 | - '</p>', |
|
133 | - ) |
|
134 | - ); |
|
135 | - |
|
136 | - $screen->add_help_tab( |
|
137 | - array( |
|
138 | - 'id' => 'action_scheduler_columns', |
|
139 | - 'title' => __( 'Columns', 'action-scheduler' ), |
|
140 | - 'content' => |
|
141 | - '<h2>' . __( 'Scheduled Action Columns', 'action-scheduler' ) . '</h2>' . |
|
142 | - '<ul>' . |
|
143 | - sprintf( '<li><strong>%1$s</strong>: %2$s</li>', __( 'Hook', 'action-scheduler' ), __( 'Name of the action hook that will be triggered.', 'action-scheduler' ) ) . |
|
144 | - sprintf( '<li><strong>%1$s</strong>: %2$s</li>', __( 'Status', 'action-scheduler' ), __( 'Action statuses are Pending, Complete, Canceled, Failed', 'action-scheduler' ) ) . |
|
145 | - sprintf( '<li><strong>%1$s</strong>: %2$s</li>', __( 'Arguments', 'action-scheduler' ), __( 'Optional data array passed to the action hook.', 'action-scheduler' ) ) . |
|
146 | - sprintf( '<li><strong>%1$s</strong>: %2$s</li>', __( 'Group', 'action-scheduler' ), __( 'Optional action group.', 'action-scheduler' ) ) . |
|
147 | - sprintf( '<li><strong>%1$s</strong>: %2$s</li>', __( 'Recurrence', 'action-scheduler' ), __( 'The action\'s schedule frequency.', 'action-scheduler' ) ) . |
|
148 | - sprintf( '<li><strong>%1$s</strong>: %2$s</li>', __( 'Scheduled', 'action-scheduler' ), __( 'The date/time the action is/was scheduled to run.', 'action-scheduler' ) ) . |
|
149 | - sprintf( '<li><strong>%1$s</strong>: %2$s</li>', __( 'Log', 'action-scheduler' ), __( 'Activity log for the action.', 'action-scheduler' ) ) . |
|
150 | - '</ul>', |
|
151 | - ) |
|
152 | - ); |
|
153 | - } |
|
9 | + private static $admin_view = NULL; |
|
10 | + |
|
11 | + private static $screen_id = 'tools_page_action-scheduler'; |
|
12 | + |
|
13 | + /** @var ActionScheduler_ListTable */ |
|
14 | + protected $list_table; |
|
15 | + |
|
16 | + /** |
|
17 | + * @return ActionScheduler_AdminView |
|
18 | + * @codeCoverageIgnore |
|
19 | + */ |
|
20 | + public static function instance() { |
|
21 | + |
|
22 | + if ( empty( self::$admin_view ) ) { |
|
23 | + $class = apply_filters('action_scheduler_admin_view_class', 'ActionScheduler_AdminView'); |
|
24 | + self::$admin_view = new $class(); |
|
25 | + } |
|
26 | + |
|
27 | + return self::$admin_view; |
|
28 | + } |
|
29 | + |
|
30 | + /** |
|
31 | + * @codeCoverageIgnore |
|
32 | + */ |
|
33 | + public function init() { |
|
34 | + if ( is_admin() && ( ! defined( 'DOING_AJAX' ) || false == DOING_AJAX ) ) { |
|
35 | + |
|
36 | + if ( class_exists( 'WooCommerce' ) ) { |
|
37 | + add_action( 'woocommerce_admin_status_content_action-scheduler', array( $this, 'render_admin_ui' ) ); |
|
38 | + add_action( 'woocommerce_system_status_report', array( $this, 'system_status_report' ) ); |
|
39 | + add_filter( 'woocommerce_admin_status_tabs', array( $this, 'register_system_status_tab' ) ); |
|
40 | + } |
|
41 | + |
|
42 | + add_action( 'admin_menu', array( $this, 'register_menu' ) ); |
|
43 | + |
|
44 | + add_action( 'current_screen', array( $this, 'add_help_tabs' ) ); |
|
45 | + } |
|
46 | + } |
|
47 | + |
|
48 | + public function system_status_report() { |
|
49 | + $table = new ActionScheduler_wcSystemStatus( ActionScheduler::store() ); |
|
50 | + $table->render(); |
|
51 | + } |
|
52 | + |
|
53 | + /** |
|
54 | + * Registers action-scheduler into WooCommerce > System status. |
|
55 | + * |
|
56 | + * @param array $tabs An associative array of tab key => label. |
|
57 | + * @return array $tabs An associative array of tab key => label, including Action Scheduler's tabs |
|
58 | + */ |
|
59 | + public function register_system_status_tab( array $tabs ) { |
|
60 | + $tabs['action-scheduler'] = __( 'Scheduled Actions', 'action-scheduler' ); |
|
61 | + |
|
62 | + return $tabs; |
|
63 | + } |
|
64 | + |
|
65 | + /** |
|
66 | + * Include Action Scheduler's administration under the Tools menu. |
|
67 | + * |
|
68 | + * A menu under the Tools menu is important for backward compatibility (as that's |
|
69 | + * where it started), and also provides more convenient access than the WooCommerce |
|
70 | + * System Status page, and for sites where WooCommerce isn't active. |
|
71 | + */ |
|
72 | + public function register_menu() { |
|
73 | + $hook_suffix = add_submenu_page( |
|
74 | + 'tools.php', |
|
75 | + __( 'Scheduled Actions', 'action-scheduler' ), |
|
76 | + __( 'Scheduled Actions', 'action-scheduler' ), |
|
77 | + 'manage_options', |
|
78 | + 'action-scheduler', |
|
79 | + array( $this, 'render_admin_ui' ) |
|
80 | + ); |
|
81 | + add_action( 'load-' . $hook_suffix , array( $this, 'process_admin_ui' ) ); |
|
82 | + } |
|
83 | + |
|
84 | + /** |
|
85 | + * Triggers processing of any pending actions. |
|
86 | + */ |
|
87 | + public function process_admin_ui() { |
|
88 | + $this->get_list_table(); |
|
89 | + } |
|
90 | + |
|
91 | + /** |
|
92 | + * Renders the Admin UI |
|
93 | + */ |
|
94 | + public function render_admin_ui() { |
|
95 | + $table = $this->get_list_table(); |
|
96 | + $table->display_page(); |
|
97 | + } |
|
98 | + |
|
99 | + /** |
|
100 | + * Get the admin UI object and process any requested actions. |
|
101 | + * |
|
102 | + * @return ActionScheduler_ListTable |
|
103 | + */ |
|
104 | + protected function get_list_table() { |
|
105 | + if ( null === $this->list_table ) { |
|
106 | + $this->list_table = new ActionScheduler_ListTable( ActionScheduler::store(), ActionScheduler::logger(), ActionScheduler::runner() ); |
|
107 | + $this->list_table->process_actions(); |
|
108 | + } |
|
109 | + |
|
110 | + return $this->list_table; |
|
111 | + } |
|
112 | + |
|
113 | + /** |
|
114 | + * Provide more information about the screen and its data in the help tab. |
|
115 | + */ |
|
116 | + public function add_help_tabs() { |
|
117 | + $screen = get_current_screen(); |
|
118 | + |
|
119 | + if ( ! $screen || self::$screen_id != $screen->id ) { |
|
120 | + return; |
|
121 | + } |
|
122 | + |
|
123 | + $as_version = ActionScheduler_Versions::instance()->latest_version(); |
|
124 | + $screen->add_help_tab( |
|
125 | + array( |
|
126 | + 'id' => 'action_scheduler_about', |
|
127 | + 'title' => __( 'About', 'action-scheduler' ), |
|
128 | + 'content' => |
|
129 | + '<h2>' . sprintf( __( 'About Action Scheduler %s', 'action-scheduler' ), $as_version ) . '</h2>' . |
|
130 | + '<p>' . |
|
131 | + __( 'Action Scheduler is a scalable, traceable job queue for background processing large sets of actions. Action Scheduler works by triggering an action hook to run at some time in the future. Scheduled actions can also be scheduled to run on a recurring schedule.', 'action-scheduler' ) . |
|
132 | + '</p>', |
|
133 | + ) |
|
134 | + ); |
|
135 | + |
|
136 | + $screen->add_help_tab( |
|
137 | + array( |
|
138 | + 'id' => 'action_scheduler_columns', |
|
139 | + 'title' => __( 'Columns', 'action-scheduler' ), |
|
140 | + 'content' => |
|
141 | + '<h2>' . __( 'Scheduled Action Columns', 'action-scheduler' ) . '</h2>' . |
|
142 | + '<ul>' . |
|
143 | + sprintf( '<li><strong>%1$s</strong>: %2$s</li>', __( 'Hook', 'action-scheduler' ), __( 'Name of the action hook that will be triggered.', 'action-scheduler' ) ) . |
|
144 | + sprintf( '<li><strong>%1$s</strong>: %2$s</li>', __( 'Status', 'action-scheduler' ), __( 'Action statuses are Pending, Complete, Canceled, Failed', 'action-scheduler' ) ) . |
|
145 | + sprintf( '<li><strong>%1$s</strong>: %2$s</li>', __( 'Arguments', 'action-scheduler' ), __( 'Optional data array passed to the action hook.', 'action-scheduler' ) ) . |
|
146 | + sprintf( '<li><strong>%1$s</strong>: %2$s</li>', __( 'Group', 'action-scheduler' ), __( 'Optional action group.', 'action-scheduler' ) ) . |
|
147 | + sprintf( '<li><strong>%1$s</strong>: %2$s</li>', __( 'Recurrence', 'action-scheduler' ), __( 'The action\'s schedule frequency.', 'action-scheduler' ) ) . |
|
148 | + sprintf( '<li><strong>%1$s</strong>: %2$s</li>', __( 'Scheduled', 'action-scheduler' ), __( 'The date/time the action is/was scheduled to run.', 'action-scheduler' ) ) . |
|
149 | + sprintf( '<li><strong>%1$s</strong>: %2$s</li>', __( 'Log', 'action-scheduler' ), __( 'Activity log for the action.', 'action-scheduler' ) ) . |
|
150 | + '</ul>', |
|
151 | + ) |
|
152 | + ); |
|
153 | + } |
|
154 | 154 | } |
@@ -19,7 +19,7 @@ discard block |
||
19 | 19 | */ |
20 | 20 | public static function instance() { |
21 | 21 | |
22 | - if ( empty( self::$admin_view ) ) { |
|
22 | + if (empty(self::$admin_view)) { |
|
23 | 23 | $class = apply_filters('action_scheduler_admin_view_class', 'ActionScheduler_AdminView'); |
24 | 24 | self::$admin_view = new $class(); |
25 | 25 | } |
@@ -31,22 +31,22 @@ discard block |
||
31 | 31 | * @codeCoverageIgnore |
32 | 32 | */ |
33 | 33 | public function init() { |
34 | - if ( is_admin() && ( ! defined( 'DOING_AJAX' ) || false == DOING_AJAX ) ) { |
|
34 | + if (is_admin() && (!defined('DOING_AJAX') || false == DOING_AJAX)) { |
|
35 | 35 | |
36 | - if ( class_exists( 'WooCommerce' ) ) { |
|
37 | - add_action( 'woocommerce_admin_status_content_action-scheduler', array( $this, 'render_admin_ui' ) ); |
|
38 | - add_action( 'woocommerce_system_status_report', array( $this, 'system_status_report' ) ); |
|
39 | - add_filter( 'woocommerce_admin_status_tabs', array( $this, 'register_system_status_tab' ) ); |
|
36 | + if (class_exists('WooCommerce')) { |
|
37 | + add_action('woocommerce_admin_status_content_action-scheduler', array($this, 'render_admin_ui')); |
|
38 | + add_action('woocommerce_system_status_report', array($this, 'system_status_report')); |
|
39 | + add_filter('woocommerce_admin_status_tabs', array($this, 'register_system_status_tab')); |
|
40 | 40 | } |
41 | 41 | |
42 | - add_action( 'admin_menu', array( $this, 'register_menu' ) ); |
|
42 | + add_action('admin_menu', array($this, 'register_menu')); |
|
43 | 43 | |
44 | - add_action( 'current_screen', array( $this, 'add_help_tabs' ) ); |
|
44 | + add_action('current_screen', array($this, 'add_help_tabs')); |
|
45 | 45 | } |
46 | 46 | } |
47 | 47 | |
48 | 48 | public function system_status_report() { |
49 | - $table = new ActionScheduler_wcSystemStatus( ActionScheduler::store() ); |
|
49 | + $table = new ActionScheduler_wcSystemStatus(ActionScheduler::store()); |
|
50 | 50 | $table->render(); |
51 | 51 | } |
52 | 52 | |
@@ -56,8 +56,8 @@ discard block |
||
56 | 56 | * @param array $tabs An associative array of tab key => label. |
57 | 57 | * @return array $tabs An associative array of tab key => label, including Action Scheduler's tabs |
58 | 58 | */ |
59 | - public function register_system_status_tab( array $tabs ) { |
|
60 | - $tabs['action-scheduler'] = __( 'Scheduled Actions', 'action-scheduler' ); |
|
59 | + public function register_system_status_tab(array $tabs) { |
|
60 | + $tabs['action-scheduler'] = __('Scheduled Actions', 'action-scheduler'); |
|
61 | 61 | |
62 | 62 | return $tabs; |
63 | 63 | } |
@@ -72,13 +72,13 @@ discard block |
||
72 | 72 | public function register_menu() { |
73 | 73 | $hook_suffix = add_submenu_page( |
74 | 74 | 'tools.php', |
75 | - __( 'Scheduled Actions', 'action-scheduler' ), |
|
76 | - __( 'Scheduled Actions', 'action-scheduler' ), |
|
75 | + __('Scheduled Actions', 'action-scheduler'), |
|
76 | + __('Scheduled Actions', 'action-scheduler'), |
|
77 | 77 | 'manage_options', |
78 | 78 | 'action-scheduler', |
79 | - array( $this, 'render_admin_ui' ) |
|
79 | + array($this, 'render_admin_ui') |
|
80 | 80 | ); |
81 | - add_action( 'load-' . $hook_suffix , array( $this, 'process_admin_ui' ) ); |
|
81 | + add_action('load-' . $hook_suffix, array($this, 'process_admin_ui')); |
|
82 | 82 | } |
83 | 83 | |
84 | 84 | /** |
@@ -102,8 +102,8 @@ discard block |
||
102 | 102 | * @return ActionScheduler_ListTable |
103 | 103 | */ |
104 | 104 | protected function get_list_table() { |
105 | - if ( null === $this->list_table ) { |
|
106 | - $this->list_table = new ActionScheduler_ListTable( ActionScheduler::store(), ActionScheduler::logger(), ActionScheduler::runner() ); |
|
105 | + if (null === $this->list_table) { |
|
106 | + $this->list_table = new ActionScheduler_ListTable(ActionScheduler::store(), ActionScheduler::logger(), ActionScheduler::runner()); |
|
107 | 107 | $this->list_table->process_actions(); |
108 | 108 | } |
109 | 109 | |
@@ -116,7 +116,7 @@ discard block |
||
116 | 116 | public function add_help_tabs() { |
117 | 117 | $screen = get_current_screen(); |
118 | 118 | |
119 | - if ( ! $screen || self::$screen_id != $screen->id ) { |
|
119 | + if (!$screen || self::$screen_id != $screen->id) { |
|
120 | 120 | return; |
121 | 121 | } |
122 | 122 | |
@@ -124,11 +124,11 @@ discard block |
||
124 | 124 | $screen->add_help_tab( |
125 | 125 | array( |
126 | 126 | 'id' => 'action_scheduler_about', |
127 | - 'title' => __( 'About', 'action-scheduler' ), |
|
127 | + 'title' => __('About', 'action-scheduler'), |
|
128 | 128 | 'content' => |
129 | - '<h2>' . sprintf( __( 'About Action Scheduler %s', 'action-scheduler' ), $as_version ) . '</h2>' . |
|
129 | + '<h2>' . sprintf(__('About Action Scheduler %s', 'action-scheduler'), $as_version) . '</h2>' . |
|
130 | 130 | '<p>' . |
131 | - __( 'Action Scheduler is a scalable, traceable job queue for background processing large sets of actions. Action Scheduler works by triggering an action hook to run at some time in the future. Scheduled actions can also be scheduled to run on a recurring schedule.', 'action-scheduler' ) . |
|
131 | + __('Action Scheduler is a scalable, traceable job queue for background processing large sets of actions. Action Scheduler works by triggering an action hook to run at some time in the future. Scheduled actions can also be scheduled to run on a recurring schedule.', 'action-scheduler') . |
|
132 | 132 | '</p>', |
133 | 133 | ) |
134 | 134 | ); |
@@ -136,17 +136,17 @@ discard block |
||
136 | 136 | $screen->add_help_tab( |
137 | 137 | array( |
138 | 138 | 'id' => 'action_scheduler_columns', |
139 | - 'title' => __( 'Columns', 'action-scheduler' ), |
|
139 | + 'title' => __('Columns', 'action-scheduler'), |
|
140 | 140 | 'content' => |
141 | - '<h2>' . __( 'Scheduled Action Columns', 'action-scheduler' ) . '</h2>' . |
|
141 | + '<h2>' . __('Scheduled Action Columns', 'action-scheduler') . '</h2>' . |
|
142 | 142 | '<ul>' . |
143 | - sprintf( '<li><strong>%1$s</strong>: %2$s</li>', __( 'Hook', 'action-scheduler' ), __( 'Name of the action hook that will be triggered.', 'action-scheduler' ) ) . |
|
144 | - sprintf( '<li><strong>%1$s</strong>: %2$s</li>', __( 'Status', 'action-scheduler' ), __( 'Action statuses are Pending, Complete, Canceled, Failed', 'action-scheduler' ) ) . |
|
145 | - sprintf( '<li><strong>%1$s</strong>: %2$s</li>', __( 'Arguments', 'action-scheduler' ), __( 'Optional data array passed to the action hook.', 'action-scheduler' ) ) . |
|
146 | - sprintf( '<li><strong>%1$s</strong>: %2$s</li>', __( 'Group', 'action-scheduler' ), __( 'Optional action group.', 'action-scheduler' ) ) . |
|
147 | - sprintf( '<li><strong>%1$s</strong>: %2$s</li>', __( 'Recurrence', 'action-scheduler' ), __( 'The action\'s schedule frequency.', 'action-scheduler' ) ) . |
|
148 | - sprintf( '<li><strong>%1$s</strong>: %2$s</li>', __( 'Scheduled', 'action-scheduler' ), __( 'The date/time the action is/was scheduled to run.', 'action-scheduler' ) ) . |
|
149 | - sprintf( '<li><strong>%1$s</strong>: %2$s</li>', __( 'Log', 'action-scheduler' ), __( 'Activity log for the action.', 'action-scheduler' ) ) . |
|
143 | + sprintf('<li><strong>%1$s</strong>: %2$s</li>', __('Hook', 'action-scheduler'), __('Name of the action hook that will be triggered.', 'action-scheduler')) . |
|
144 | + sprintf('<li><strong>%1$s</strong>: %2$s</li>', __('Status', 'action-scheduler'), __('Action statuses are Pending, Complete, Canceled, Failed', 'action-scheduler')) . |
|
145 | + sprintf('<li><strong>%1$s</strong>: %2$s</li>', __('Arguments', 'action-scheduler'), __('Optional data array passed to the action hook.', 'action-scheduler')) . |
|
146 | + sprintf('<li><strong>%1$s</strong>: %2$s</li>', __('Group', 'action-scheduler'), __('Optional action group.', 'action-scheduler')) . |
|
147 | + sprintf('<li><strong>%1$s</strong>: %2$s</li>', __('Recurrence', 'action-scheduler'), __('The action\'s schedule frequency.', 'action-scheduler')) . |
|
148 | + sprintf('<li><strong>%1$s</strong>: %2$s</li>', __('Scheduled', 'action-scheduler'), __('The date/time the action is/was scheduled to run.', 'action-scheduler')) . |
|
149 | + sprintf('<li><strong>%1$s</strong>: %2$s</li>', __('Log', 'action-scheduler'), __('Activity log for the action.', 'action-scheduler')) . |
|
150 | 150 | '</ul>', |
151 | 151 | ) |
152 | 152 | ); |