Passed
Push — master ( 495efb...ace576 )
by Brian
06:14 queued 01:46
created
action-scheduler/classes/abstracts/ActionScheduler_Abstract_QueueRunner.php 2 patches
Indentation   +232 added lines, -232 removed lines patch added patch discarded remove patch
@@ -5,236 +5,236 @@
 block discarded – undo
5 5
  */
6 6
 abstract class ActionScheduler_Abstract_QueueRunner extends ActionScheduler_Abstract_QueueRunner_Deprecated {
7 7
 
8
-	/** @var ActionScheduler_QueueCleaner */
9
-	protected $cleaner;
10
-
11
-	/** @var ActionScheduler_FatalErrorMonitor */
12
-	protected $monitor;
13
-
14
-	/** @var ActionScheduler_Store */
15
-	protected $store;
16
-
17
-	/**
18
-	 * The created time.
19
-	 *
20
-	 * Represents when the queue runner was constructed and used when calculating how long a PHP request has been running.
21
-	 * For this reason it should be as close as possible to the PHP request start time.
22
-	 *
23
-	 * @var int
24
-	 */
25
-	private $created_time;
26
-
27
-	/**
28
-	 * ActionScheduler_Abstract_QueueRunner constructor.
29
-	 *
30
-	 * @param ActionScheduler_Store             $store
31
-	 * @param ActionScheduler_FatalErrorMonitor $monitor
32
-	 * @param ActionScheduler_QueueCleaner      $cleaner
33
-	 */
34
-	public function __construct( ActionScheduler_Store $store = null, ActionScheduler_FatalErrorMonitor $monitor = null, ActionScheduler_QueueCleaner $cleaner = null ) {
35
-
36
-		$this->created_time = microtime( true );
37
-
38
-		$this->store   = $store ? $store : ActionScheduler_Store::instance();
39
-		$this->monitor = $monitor ? $monitor : new ActionScheduler_FatalErrorMonitor( $this->store );
40
-		$this->cleaner = $cleaner ? $cleaner : new ActionScheduler_QueueCleaner( $this->store );
41
-	}
42
-
43
-	/**
44
-	 * Process an individual action.
45
-	 *
46
-	 * @param int $action_id The action ID to process.
47
-	 * @param string $context Optional identifer for the context in which this action is being processed, e.g. 'WP CLI' or 'WP Cron'
48
-	 *        Generally, this should be capitalised and not localised as it's a proper noun.
49
-	 */
50
-	public function process_action( $action_id, $context = '' ) {
51
-		try {
52
-			$valid_action = false;
53
-			do_action( 'action_scheduler_before_execute', $action_id, $context );
54
-
55
-			if ( ActionScheduler_Store::STATUS_PENDING !== $this->store->get_status( $action_id ) ) {
56
-				do_action( 'action_scheduler_execution_ignored', $action_id, $context );
57
-				return;
58
-			}
59
-
60
-			$valid_action = true;
61
-			do_action( 'action_scheduler_begin_execute', $action_id, $context );
62
-
63
-			$action = $this->store->fetch_action( $action_id );
64
-			$this->store->log_execution( $action_id );
65
-			$action->execute();
66
-			do_action( 'action_scheduler_after_execute', $action_id, $action, $context );
67
-			$this->store->mark_complete( $action_id );
68
-		} catch ( Exception $e ) {
69
-			if ( $valid_action ) {
70
-				$this->store->mark_failure( $action_id );
71
-				do_action( 'action_scheduler_failed_execution', $action_id, $e, $context );
72
-			} else {
73
-				do_action( 'action_scheduler_failed_validation', $action_id, $e, $context );
74
-			}
75
-		}
76
-
77
-		if ( isset( $action ) && is_a( $action, 'ActionScheduler_Action' ) && $action->get_schedule()->is_recurring() ) {
78
-			$this->schedule_next_instance( $action, $action_id );
79
-		}
80
-	}
81
-
82
-	/**
83
-	 * Schedule the next instance of the action if necessary.
84
-	 *
85
-	 * @param ActionScheduler_Action $action
86
-	 * @param int $action_id
87
-	 */
88
-	protected function schedule_next_instance( ActionScheduler_Action $action, $action_id ) {
89
-		try {
90
-			ActionScheduler::factory()->repeat( $action );
91
-		} catch ( Exception $e ) {
92
-			do_action( 'action_scheduler_failed_to_schedule_next_instance', $action_id, $e, $action );
93
-		}
94
-	}
95
-
96
-	/**
97
-	 * Run the queue cleaner.
98
-	 *
99
-	 * @author Jeremy Pry
100
-	 */
101
-	protected function run_cleanup() {
102
-		$this->cleaner->clean( 10 * $this->get_time_limit() );
103
-	}
104
-
105
-	/**
106
-	 * Get the number of concurrent batches a runner allows.
107
-	 *
108
-	 * @return int
109
-	 */
110
-	public function get_allowed_concurrent_batches() {
111
-		return apply_filters( 'action_scheduler_queue_runner_concurrent_batches', 1 );
112
-	}
113
-
114
-	/**
115
-	 * Check if the number of allowed concurrent batches is met or exceeded.
116
-	 *
117
-	 * @return bool
118
-	 */
119
-	public function has_maximum_concurrent_batches() {
120
-		return $this->store->get_claim_count() >= $this->get_allowed_concurrent_batches();
121
-	}
122
-
123
-	/**
124
-	 * Get the maximum number of seconds a batch can run for.
125
-	 *
126
-	 * @return int The number of seconds.
127
-	 */
128
-	protected function get_time_limit() {
129
-
130
-		$time_limit = 30;
131
-
132
-		// Apply deprecated filter from deprecated get_maximum_execution_time() method
133
-		if ( has_filter( 'action_scheduler_maximum_execution_time' ) ) {
134
-			_deprecated_function( 'action_scheduler_maximum_execution_time', '2.1.1', 'action_scheduler_queue_runner_time_limit' );
135
-			$time_limit = apply_filters( 'action_scheduler_maximum_execution_time', $time_limit );
136
-		}
137
-
138
-		return absint( apply_filters( 'action_scheduler_queue_runner_time_limit', $time_limit ) );
139
-	}
140
-
141
-	/**
142
-	 * Get the number of seconds the process has been running.
143
-	 *
144
-	 * @return int The number of seconds.
145
-	 */
146
-	protected function get_execution_time() {
147
-		$execution_time = microtime( true ) - $this->created_time;
148
-
149
-		// Get the CPU time if the hosting environment uses it rather than wall-clock time to calculate a process's execution time.
150
-		if ( function_exists( 'getrusage' ) && apply_filters( 'action_scheduler_use_cpu_execution_time', defined( 'PANTHEON_ENVIRONMENT' ) ) ) {
151
-			$resource_usages = getrusage();
152
-
153
-			if ( isset( $resource_usages['ru_stime.tv_usec'], $resource_usages['ru_stime.tv_usec'] ) ) {
154
-				$execution_time = $resource_usages['ru_stime.tv_sec'] + ( $resource_usages['ru_stime.tv_usec'] / 1000000 );
155
-			}
156
-		}
157
-
158
-		return $execution_time;
159
-	}
160
-
161
-	/**
162
-	 * Check if the host's max execution time is (likely) to be exceeded if processing more actions.
163
-	 *
164
-	 * @param int $processed_actions The number of actions processed so far - used to determine the likelihood of exceeding the time limit if processing another action
165
-	 * @return bool
166
-	 */
167
-	protected function time_likely_to_be_exceeded( $processed_actions ) {
168
-
169
-		$execution_time        = $this->get_execution_time();
170
-		$max_execution_time    = $this->get_time_limit();
171
-		$time_per_action       = $execution_time / $processed_actions;
172
-		$estimated_time        = $execution_time + ( $time_per_action * 3 );
173
-		$likely_to_be_exceeded = $estimated_time > $max_execution_time;
174
-
175
-		return apply_filters( 'action_scheduler_maximum_execution_time_likely_to_be_exceeded', $likely_to_be_exceeded, $this, $processed_actions, $execution_time, $max_execution_time );
176
-	}
177
-
178
-	/**
179
-	 * Get memory limit
180
-	 *
181
-	 * Based on WP_Background_Process::get_memory_limit()
182
-	 *
183
-	 * @return int
184
-	 */
185
-	protected function get_memory_limit() {
186
-		if ( function_exists( 'ini_get' ) ) {
187
-			$memory_limit = ini_get( 'memory_limit' );
188
-		} else {
189
-			$memory_limit = '128M'; // Sensible default, and minimum required by WooCommerce
190
-		}
191
-
192
-		if ( ! $memory_limit || -1 === $memory_limit || '-1' === $memory_limit ) {
193
-			// Unlimited, set to 32GB.
194
-			$memory_limit = '32G';
195
-		}
196
-
197
-		return ActionScheduler_Compatibility::convert_hr_to_bytes( $memory_limit );
198
-	}
199
-
200
-	/**
201
-	 * Memory exceeded
202
-	 *
203
-	 * Ensures the batch process never exceeds 90% of the maximum WordPress memory.
204
-	 *
205
-	 * Based on WP_Background_Process::memory_exceeded()
206
-	 *
207
-	 * @return bool
208
-	 */
209
-	protected function memory_exceeded() {
210
-
211
-		$memory_limit    = $this->get_memory_limit() * 0.90;
212
-		$current_memory  = memory_get_usage( true );
213
-		$memory_exceeded = $current_memory >= $memory_limit;
214
-
215
-		return apply_filters( 'action_scheduler_memory_exceeded', $memory_exceeded, $this );
216
-	}
217
-
218
-	/**
219
-	 * See if the batch limits have been exceeded, which is when memory usage is almost at
220
-	 * the maximum limit, or the time to process more actions will exceed the max time limit.
221
-	 *
222
-	 * Based on WC_Background_Process::batch_limits_exceeded()
223
-	 *
224
-	 * @param int $processed_actions The number of actions processed so far - used to determine the likelihood of exceeding the time limit if processing another action
225
-	 * @return bool
226
-	 */
227
-	protected function batch_limits_exceeded( $processed_actions ) {
228
-		return $this->memory_exceeded() || $this->time_likely_to_be_exceeded( $processed_actions );
229
-	}
230
-
231
-	/**
232
-	 * Process actions in the queue.
233
-	 *
234
-	 * @author Jeremy Pry
235
-	 * @param string $context Optional identifer for the context in which this action is being processed, e.g. 'WP CLI' or 'WP Cron'
236
-	 *        Generally, this should be capitalised and not localised as it's a proper noun.
237
-	 * @return int The number of actions processed.
238
-	 */
239
-	abstract public function run( $context = '' );
8
+    /** @var ActionScheduler_QueueCleaner */
9
+    protected $cleaner;
10
+
11
+    /** @var ActionScheduler_FatalErrorMonitor */
12
+    protected $monitor;
13
+
14
+    /** @var ActionScheduler_Store */
15
+    protected $store;
16
+
17
+    /**
18
+     * The created time.
19
+     *
20
+     * Represents when the queue runner was constructed and used when calculating how long a PHP request has been running.
21
+     * For this reason it should be as close as possible to the PHP request start time.
22
+     *
23
+     * @var int
24
+     */
25
+    private $created_time;
26
+
27
+    /**
28
+     * ActionScheduler_Abstract_QueueRunner constructor.
29
+     *
30
+     * @param ActionScheduler_Store             $store
31
+     * @param ActionScheduler_FatalErrorMonitor $monitor
32
+     * @param ActionScheduler_QueueCleaner      $cleaner
33
+     */
34
+    public function __construct( ActionScheduler_Store $store = null, ActionScheduler_FatalErrorMonitor $monitor = null, ActionScheduler_QueueCleaner $cleaner = null ) {
35
+
36
+        $this->created_time = microtime( true );
37
+
38
+        $this->store   = $store ? $store : ActionScheduler_Store::instance();
39
+        $this->monitor = $monitor ? $monitor : new ActionScheduler_FatalErrorMonitor( $this->store );
40
+        $this->cleaner = $cleaner ? $cleaner : new ActionScheduler_QueueCleaner( $this->store );
41
+    }
42
+
43
+    /**
44
+     * Process an individual action.
45
+     *
46
+     * @param int $action_id The action ID to process.
47
+     * @param string $context Optional identifer for the context in which this action is being processed, e.g. 'WP CLI' or 'WP Cron'
48
+     *        Generally, this should be capitalised and not localised as it's a proper noun.
49
+     */
50
+    public function process_action( $action_id, $context = '' ) {
51
+        try {
52
+            $valid_action = false;
53
+            do_action( 'action_scheduler_before_execute', $action_id, $context );
54
+
55
+            if ( ActionScheduler_Store::STATUS_PENDING !== $this->store->get_status( $action_id ) ) {
56
+                do_action( 'action_scheduler_execution_ignored', $action_id, $context );
57
+                return;
58
+            }
59
+
60
+            $valid_action = true;
61
+            do_action( 'action_scheduler_begin_execute', $action_id, $context );
62
+
63
+            $action = $this->store->fetch_action( $action_id );
64
+            $this->store->log_execution( $action_id );
65
+            $action->execute();
66
+            do_action( 'action_scheduler_after_execute', $action_id, $action, $context );
67
+            $this->store->mark_complete( $action_id );
68
+        } catch ( Exception $e ) {
69
+            if ( $valid_action ) {
70
+                $this->store->mark_failure( $action_id );
71
+                do_action( 'action_scheduler_failed_execution', $action_id, $e, $context );
72
+            } else {
73
+                do_action( 'action_scheduler_failed_validation', $action_id, $e, $context );
74
+            }
75
+        }
76
+
77
+        if ( isset( $action ) && is_a( $action, 'ActionScheduler_Action' ) && $action->get_schedule()->is_recurring() ) {
78
+            $this->schedule_next_instance( $action, $action_id );
79
+        }
80
+    }
81
+
82
+    /**
83
+     * Schedule the next instance of the action if necessary.
84
+     *
85
+     * @param ActionScheduler_Action $action
86
+     * @param int $action_id
87
+     */
88
+    protected function schedule_next_instance( ActionScheduler_Action $action, $action_id ) {
89
+        try {
90
+            ActionScheduler::factory()->repeat( $action );
91
+        } catch ( Exception $e ) {
92
+            do_action( 'action_scheduler_failed_to_schedule_next_instance', $action_id, $e, $action );
93
+        }
94
+    }
95
+
96
+    /**
97
+     * Run the queue cleaner.
98
+     *
99
+     * @author Jeremy Pry
100
+     */
101
+    protected function run_cleanup() {
102
+        $this->cleaner->clean( 10 * $this->get_time_limit() );
103
+    }
104
+
105
+    /**
106
+     * Get the number of concurrent batches a runner allows.
107
+     *
108
+     * @return int
109
+     */
110
+    public function get_allowed_concurrent_batches() {
111
+        return apply_filters( 'action_scheduler_queue_runner_concurrent_batches', 1 );
112
+    }
113
+
114
+    /**
115
+     * Check if the number of allowed concurrent batches is met or exceeded.
116
+     *
117
+     * @return bool
118
+     */
119
+    public function has_maximum_concurrent_batches() {
120
+        return $this->store->get_claim_count() >= $this->get_allowed_concurrent_batches();
121
+    }
122
+
123
+    /**
124
+     * Get the maximum number of seconds a batch can run for.
125
+     *
126
+     * @return int The number of seconds.
127
+     */
128
+    protected function get_time_limit() {
129
+
130
+        $time_limit = 30;
131
+
132
+        // Apply deprecated filter from deprecated get_maximum_execution_time() method
133
+        if ( has_filter( 'action_scheduler_maximum_execution_time' ) ) {
134
+            _deprecated_function( 'action_scheduler_maximum_execution_time', '2.1.1', 'action_scheduler_queue_runner_time_limit' );
135
+            $time_limit = apply_filters( 'action_scheduler_maximum_execution_time', $time_limit );
136
+        }
137
+
138
+        return absint( apply_filters( 'action_scheduler_queue_runner_time_limit', $time_limit ) );
139
+    }
140
+
141
+    /**
142
+     * Get the number of seconds the process has been running.
143
+     *
144
+     * @return int The number of seconds.
145
+     */
146
+    protected function get_execution_time() {
147
+        $execution_time = microtime( true ) - $this->created_time;
148
+
149
+        // Get the CPU time if the hosting environment uses it rather than wall-clock time to calculate a process's execution time.
150
+        if ( function_exists( 'getrusage' ) && apply_filters( 'action_scheduler_use_cpu_execution_time', defined( 'PANTHEON_ENVIRONMENT' ) ) ) {
151
+            $resource_usages = getrusage();
152
+
153
+            if ( isset( $resource_usages['ru_stime.tv_usec'], $resource_usages['ru_stime.tv_usec'] ) ) {
154
+                $execution_time = $resource_usages['ru_stime.tv_sec'] + ( $resource_usages['ru_stime.tv_usec'] / 1000000 );
155
+            }
156
+        }
157
+
158
+        return $execution_time;
159
+    }
160
+
161
+    /**
162
+     * Check if the host's max execution time is (likely) to be exceeded if processing more actions.
163
+     *
164
+     * @param int $processed_actions The number of actions processed so far - used to determine the likelihood of exceeding the time limit if processing another action
165
+     * @return bool
166
+     */
167
+    protected function time_likely_to_be_exceeded( $processed_actions ) {
168
+
169
+        $execution_time        = $this->get_execution_time();
170
+        $max_execution_time    = $this->get_time_limit();
171
+        $time_per_action       = $execution_time / $processed_actions;
172
+        $estimated_time        = $execution_time + ( $time_per_action * 3 );
173
+        $likely_to_be_exceeded = $estimated_time > $max_execution_time;
174
+
175
+        return apply_filters( 'action_scheduler_maximum_execution_time_likely_to_be_exceeded', $likely_to_be_exceeded, $this, $processed_actions, $execution_time, $max_execution_time );
176
+    }
177
+
178
+    /**
179
+     * Get memory limit
180
+     *
181
+     * Based on WP_Background_Process::get_memory_limit()
182
+     *
183
+     * @return int
184
+     */
185
+    protected function get_memory_limit() {
186
+        if ( function_exists( 'ini_get' ) ) {
187
+            $memory_limit = ini_get( 'memory_limit' );
188
+        } else {
189
+            $memory_limit = '128M'; // Sensible default, and minimum required by WooCommerce
190
+        }
191
+
192
+        if ( ! $memory_limit || -1 === $memory_limit || '-1' === $memory_limit ) {
193
+            // Unlimited, set to 32GB.
194
+            $memory_limit = '32G';
195
+        }
196
+
197
+        return ActionScheduler_Compatibility::convert_hr_to_bytes( $memory_limit );
198
+    }
199
+
200
+    /**
201
+     * Memory exceeded
202
+     *
203
+     * Ensures the batch process never exceeds 90% of the maximum WordPress memory.
204
+     *
205
+     * Based on WP_Background_Process::memory_exceeded()
206
+     *
207
+     * @return bool
208
+     */
209
+    protected function memory_exceeded() {
210
+
211
+        $memory_limit    = $this->get_memory_limit() * 0.90;
212
+        $current_memory  = memory_get_usage( true );
213
+        $memory_exceeded = $current_memory >= $memory_limit;
214
+
215
+        return apply_filters( 'action_scheduler_memory_exceeded', $memory_exceeded, $this );
216
+    }
217
+
218
+    /**
219
+     * See if the batch limits have been exceeded, which is when memory usage is almost at
220
+     * the maximum limit, or the time to process more actions will exceed the max time limit.
221
+     *
222
+     * Based on WC_Background_Process::batch_limits_exceeded()
223
+     *
224
+     * @param int $processed_actions The number of actions processed so far - used to determine the likelihood of exceeding the time limit if processing another action
225
+     * @return bool
226
+     */
227
+    protected function batch_limits_exceeded( $processed_actions ) {
228
+        return $this->memory_exceeded() || $this->time_likely_to_be_exceeded( $processed_actions );
229
+    }
230
+
231
+    /**
232
+     * Process actions in the queue.
233
+     *
234
+     * @author Jeremy Pry
235
+     * @param string $context Optional identifer for the context in which this action is being processed, e.g. 'WP CLI' or 'WP Cron'
236
+     *        Generally, this should be capitalised and not localised as it's a proper noun.
237
+     * @return int The number of actions processed.
238
+     */
239
+    abstract public function run( $context = '' );
240 240
 }
Please login to merge, or discard this patch.
Spacing   +46 added lines, -46 removed lines patch added patch discarded remove patch
@@ -31,13 +31,13 @@  discard block
 block discarded – undo
31 31
 	 * @param ActionScheduler_FatalErrorMonitor $monitor
32 32
 	 * @param ActionScheduler_QueueCleaner      $cleaner
33 33
 	 */
34
-	public function __construct( ActionScheduler_Store $store = null, ActionScheduler_FatalErrorMonitor $monitor = null, ActionScheduler_QueueCleaner $cleaner = null ) {
34
+	public function __construct(ActionScheduler_Store $store = null, ActionScheduler_FatalErrorMonitor $monitor = null, ActionScheduler_QueueCleaner $cleaner = null) {
35 35
 
36
-		$this->created_time = microtime( true );
36
+		$this->created_time = microtime(true);
37 37
 
38 38
 		$this->store   = $store ? $store : ActionScheduler_Store::instance();
39
-		$this->monitor = $monitor ? $monitor : new ActionScheduler_FatalErrorMonitor( $this->store );
40
-		$this->cleaner = $cleaner ? $cleaner : new ActionScheduler_QueueCleaner( $this->store );
39
+		$this->monitor = $monitor ? $monitor : new ActionScheduler_FatalErrorMonitor($this->store);
40
+		$this->cleaner = $cleaner ? $cleaner : new ActionScheduler_QueueCleaner($this->store);
41 41
 	}
42 42
 
43 43
 	/**
@@ -47,35 +47,35 @@  discard block
 block discarded – undo
47 47
 	 * @param string $context Optional identifer for the context in which this action is being processed, e.g. 'WP CLI' or 'WP Cron'
48 48
 	 *        Generally, this should be capitalised and not localised as it's a proper noun.
49 49
 	 */
50
-	public function process_action( $action_id, $context = '' ) {
50
+	public function process_action($action_id, $context = '') {
51 51
 		try {
52 52
 			$valid_action = false;
53
-			do_action( 'action_scheduler_before_execute', $action_id, $context );
53
+			do_action('action_scheduler_before_execute', $action_id, $context);
54 54
 
55
-			if ( ActionScheduler_Store::STATUS_PENDING !== $this->store->get_status( $action_id ) ) {
56
-				do_action( 'action_scheduler_execution_ignored', $action_id, $context );
55
+			if (ActionScheduler_Store::STATUS_PENDING !== $this->store->get_status($action_id)) {
56
+				do_action('action_scheduler_execution_ignored', $action_id, $context);
57 57
 				return;
58 58
 			}
59 59
 
60 60
 			$valid_action = true;
61
-			do_action( 'action_scheduler_begin_execute', $action_id, $context );
61
+			do_action('action_scheduler_begin_execute', $action_id, $context);
62 62
 
63
-			$action = $this->store->fetch_action( $action_id );
64
-			$this->store->log_execution( $action_id );
63
+			$action = $this->store->fetch_action($action_id);
64
+			$this->store->log_execution($action_id);
65 65
 			$action->execute();
66
-			do_action( 'action_scheduler_after_execute', $action_id, $action, $context );
67
-			$this->store->mark_complete( $action_id );
68
-		} catch ( Exception $e ) {
69
-			if ( $valid_action ) {
70
-				$this->store->mark_failure( $action_id );
71
-				do_action( 'action_scheduler_failed_execution', $action_id, $e, $context );
66
+			do_action('action_scheduler_after_execute', $action_id, $action, $context);
67
+			$this->store->mark_complete($action_id);
68
+		} catch (Exception $e) {
69
+			if ($valid_action) {
70
+				$this->store->mark_failure($action_id);
71
+				do_action('action_scheduler_failed_execution', $action_id, $e, $context);
72 72
 			} else {
73
-				do_action( 'action_scheduler_failed_validation', $action_id, $e, $context );
73
+				do_action('action_scheduler_failed_validation', $action_id, $e, $context);
74 74
 			}
75 75
 		}
76 76
 
77
-		if ( isset( $action ) && is_a( $action, 'ActionScheduler_Action' ) && $action->get_schedule()->is_recurring() ) {
78
-			$this->schedule_next_instance( $action, $action_id );
77
+		if (isset($action) && is_a($action, 'ActionScheduler_Action') && $action->get_schedule()->is_recurring()) {
78
+			$this->schedule_next_instance($action, $action_id);
79 79
 		}
80 80
 	}
81 81
 
@@ -85,11 +85,11 @@  discard block
 block discarded – undo
85 85
 	 * @param ActionScheduler_Action $action
86 86
 	 * @param int $action_id
87 87
 	 */
88
-	protected function schedule_next_instance( ActionScheduler_Action $action, $action_id ) {
88
+	protected function schedule_next_instance(ActionScheduler_Action $action, $action_id) {
89 89
 		try {
90
-			ActionScheduler::factory()->repeat( $action );
91
-		} catch ( Exception $e ) {
92
-			do_action( 'action_scheduler_failed_to_schedule_next_instance', $action_id, $e, $action );
90
+			ActionScheduler::factory()->repeat($action);
91
+		} catch (Exception $e) {
92
+			do_action('action_scheduler_failed_to_schedule_next_instance', $action_id, $e, $action);
93 93
 		}
94 94
 	}
95 95
 
@@ -99,7 +99,7 @@  discard block
 block discarded – undo
99 99
 	 * @author Jeremy Pry
100 100
 	 */
101 101
 	protected function run_cleanup() {
102
-		$this->cleaner->clean( 10 * $this->get_time_limit() );
102
+		$this->cleaner->clean(10 * $this->get_time_limit());
103 103
 	}
104 104
 
105 105
 	/**
@@ -108,7 +108,7 @@  discard block
 block discarded – undo
108 108
 	 * @return int
109 109
 	 */
110 110
 	public function get_allowed_concurrent_batches() {
111
-		return apply_filters( 'action_scheduler_queue_runner_concurrent_batches', 1 );
111
+		return apply_filters('action_scheduler_queue_runner_concurrent_batches', 1);
112 112
 	}
113 113
 
114 114
 	/**
@@ -130,12 +130,12 @@  discard block
 block discarded – undo
130 130
 		$time_limit = 30;
131 131
 
132 132
 		// Apply deprecated filter from deprecated get_maximum_execution_time() method
133
-		if ( has_filter( 'action_scheduler_maximum_execution_time' ) ) {
134
-			_deprecated_function( 'action_scheduler_maximum_execution_time', '2.1.1', 'action_scheduler_queue_runner_time_limit' );
135
-			$time_limit = apply_filters( 'action_scheduler_maximum_execution_time', $time_limit );
133
+		if (has_filter('action_scheduler_maximum_execution_time')) {
134
+			_deprecated_function('action_scheduler_maximum_execution_time', '2.1.1', 'action_scheduler_queue_runner_time_limit');
135
+			$time_limit = apply_filters('action_scheduler_maximum_execution_time', $time_limit);
136 136
 		}
137 137
 
138
-		return absint( apply_filters( 'action_scheduler_queue_runner_time_limit', $time_limit ) );
138
+		return absint(apply_filters('action_scheduler_queue_runner_time_limit', $time_limit));
139 139
 	}
140 140
 
141 141
 	/**
@@ -144,14 +144,14 @@  discard block
 block discarded – undo
144 144
 	 * @return int The number of seconds.
145 145
 	 */
146 146
 	protected function get_execution_time() {
147
-		$execution_time = microtime( true ) - $this->created_time;
147
+		$execution_time = microtime(true) - $this->created_time;
148 148
 
149 149
 		// Get the CPU time if the hosting environment uses it rather than wall-clock time to calculate a process's execution time.
150
-		if ( function_exists( 'getrusage' ) && apply_filters( 'action_scheduler_use_cpu_execution_time', defined( 'PANTHEON_ENVIRONMENT' ) ) ) {
150
+		if (function_exists('getrusage') && apply_filters('action_scheduler_use_cpu_execution_time', defined('PANTHEON_ENVIRONMENT'))) {
151 151
 			$resource_usages = getrusage();
152 152
 
153
-			if ( isset( $resource_usages['ru_stime.tv_usec'], $resource_usages['ru_stime.tv_usec'] ) ) {
154
-				$execution_time = $resource_usages['ru_stime.tv_sec'] + ( $resource_usages['ru_stime.tv_usec'] / 1000000 );
153
+			if (isset($resource_usages['ru_stime.tv_usec'], $resource_usages['ru_stime.tv_usec'])) {
154
+				$execution_time = $resource_usages['ru_stime.tv_sec'] + ($resource_usages['ru_stime.tv_usec'] / 1000000);
155 155
 			}
156 156
 		}
157 157
 
@@ -164,15 +164,15 @@  discard block
 block discarded – undo
164 164
 	 * @param int $processed_actions The number of actions processed so far - used to determine the likelihood of exceeding the time limit if processing another action
165 165
 	 * @return bool
166 166
 	 */
167
-	protected function time_likely_to_be_exceeded( $processed_actions ) {
167
+	protected function time_likely_to_be_exceeded($processed_actions) {
168 168
 
169 169
 		$execution_time        = $this->get_execution_time();
170 170
 		$max_execution_time    = $this->get_time_limit();
171 171
 		$time_per_action       = $execution_time / $processed_actions;
172
-		$estimated_time        = $execution_time + ( $time_per_action * 3 );
172
+		$estimated_time        = $execution_time + ($time_per_action * 3);
173 173
 		$likely_to_be_exceeded = $estimated_time > $max_execution_time;
174 174
 
175
-		return apply_filters( 'action_scheduler_maximum_execution_time_likely_to_be_exceeded', $likely_to_be_exceeded, $this, $processed_actions, $execution_time, $max_execution_time );
175
+		return apply_filters('action_scheduler_maximum_execution_time_likely_to_be_exceeded', $likely_to_be_exceeded, $this, $processed_actions, $execution_time, $max_execution_time);
176 176
 	}
177 177
 
178 178
 	/**
@@ -183,18 +183,18 @@  discard block
 block discarded – undo
183 183
 	 * @return int
184 184
 	 */
185 185
 	protected function get_memory_limit() {
186
-		if ( function_exists( 'ini_get' ) ) {
187
-			$memory_limit = ini_get( 'memory_limit' );
186
+		if (function_exists('ini_get')) {
187
+			$memory_limit = ini_get('memory_limit');
188 188
 		} else {
189 189
 			$memory_limit = '128M'; // Sensible default, and minimum required by WooCommerce
190 190
 		}
191 191
 
192
-		if ( ! $memory_limit || -1 === $memory_limit || '-1' === $memory_limit ) {
192
+		if (!$memory_limit || -1 === $memory_limit || '-1' === $memory_limit) {
193 193
 			// Unlimited, set to 32GB.
194 194
 			$memory_limit = '32G';
195 195
 		}
196 196
 
197
-		return ActionScheduler_Compatibility::convert_hr_to_bytes( $memory_limit );
197
+		return ActionScheduler_Compatibility::convert_hr_to_bytes($memory_limit);
198 198
 	}
199 199
 
200 200
 	/**
@@ -209,10 +209,10 @@  discard block
 block discarded – undo
209 209
 	protected function memory_exceeded() {
210 210
 
211 211
 		$memory_limit    = $this->get_memory_limit() * 0.90;
212
-		$current_memory  = memory_get_usage( true );
212
+		$current_memory  = memory_get_usage(true);
213 213
 		$memory_exceeded = $current_memory >= $memory_limit;
214 214
 
215
-		return apply_filters( 'action_scheduler_memory_exceeded', $memory_exceeded, $this );
215
+		return apply_filters('action_scheduler_memory_exceeded', $memory_exceeded, $this);
216 216
 	}
217 217
 
218 218
 	/**
@@ -224,8 +224,8 @@  discard block
 block discarded – undo
224 224
 	 * @param int $processed_actions The number of actions processed so far - used to determine the likelihood of exceeding the time limit if processing another action
225 225
 	 * @return bool
226 226
 	 */
227
-	protected function batch_limits_exceeded( $processed_actions ) {
228
-		return $this->memory_exceeded() || $this->time_likely_to_be_exceeded( $processed_actions );
227
+	protected function batch_limits_exceeded($processed_actions) {
228
+		return $this->memory_exceeded() || $this->time_likely_to_be_exceeded($processed_actions);
229 229
 	}
230 230
 
231 231
 	/**
@@ -236,5 +236,5 @@  discard block
 block discarded – undo
236 236
 	 *        Generally, this should be capitalised and not localised as it's a proper noun.
237 237
 	 * @return int The number of actions processed.
238 238
 	 */
239
-	abstract public function run( $context = '' );
239
+	abstract public function run($context = '');
240 240
 }
Please login to merge, or discard this patch.
action-scheduler/classes/abstracts/ActionScheduler_Abstract_ListTable.php 2 patches
Indentation   +649 added lines, -649 removed lines patch added patch discarded remove patch
@@ -1,7 +1,7 @@  discard block
 block discarded – undo
1 1
 <?php
2 2
 
3 3
 if ( ! class_exists( 'WP_List_Table' ) ) {
4
-	require_once( ABSPATH . 'wp-admin/includes/class-wp-list-table.php' );
4
+    require_once( ABSPATH . 'wp-admin/includes/class-wp-list-table.php' );
5 5
 }
6 6
 
7 7
 /**
@@ -23,652 +23,652 @@  discard block
 block discarded – undo
23 23
  */
24 24
 abstract class ActionScheduler_Abstract_ListTable extends WP_List_Table {
25 25
 
26
-	/**
27
-	 * The table name
28
-	 */
29
-	protected $table_name;
30
-
31
-	/**
32
-	 * Package name, used to get options from WP_List_Table::get_items_per_page.
33
-	 */
34
-	protected $package;
35
-
36
-	/**
37
-	 * How many items do we render per page?
38
-	 */
39
-	protected $items_per_page = 10;
40
-
41
-	/**
42
-	 * Enables search in this table listing. If this array
43
-	 * is empty it means the listing is not searchable.
44
-	 */
45
-	protected $search_by = array();
46
-
47
-	/**
48
-	 * Columns to show in the table listing. It is a key => value pair. The
49
-	 * key must much the table column name and the value is the label, which is
50
-	 * automatically translated.
51
-	 */
52
-	protected $columns = array();
53
-
54
-	/**
55
-	 * Defines the row-actions. It expects an array where the key
56
-	 * is the column name and the value is an array of actions.
57
-	 *
58
-	 * The array of actions are key => value, where key is the method name
59
-	 * (with the prefix row_action_<key>) and the value is the label
60
-	 * and title.
61
-	 */
62
-	protected $row_actions = array();
63
-
64
-	/**
65
-	 * The Primary key of our table
66
-	 */
67
-	protected $ID = 'ID';
68
-
69
-	/**
70
-	 * Enables sorting, it expects an array
71
-	 * of columns (the column names are the values)
72
-	 */
73
-	protected $sort_by = array();
74
-
75
-	protected $filter_by = array();
76
-
77
-	/**
78
-	 * @var array The status name => count combinations for this table's items. Used to display status filters.
79
-	 */
80
-	protected $status_counts = array();
81
-
82
-	/**
83
-	 * @var array Notices to display when loading the table. Array of arrays of form array( 'class' => {updated|error}, 'message' => 'This is the notice text display.' ).
84
-	 */
85
-	protected $admin_notices = array();
86
-
87
-	/**
88
-	 * @var string Localised string displayed in the <h1> element above the able.
89
-	 */
90
-	protected $table_header;
91
-
92
-	/**
93
-	 * Enables bulk actions. It must be an array where the key is the action name
94
-	 * and the value is the label (which is translated automatically). It is important
95
-	 * to notice that it will check that the method exists (`bulk_$name`) and will throw
96
-	 * an exception if it does not exists.
97
-	 *
98
-	 * This class will automatically check if the current request has a bulk action, will do the
99
-	 * validations and afterwards will execute the bulk method, with two arguments. The first argument
100
-	 * is the array with primary keys, the second argument is a string with a list of the primary keys,
101
-	 * escaped and ready to use (with `IN`).
102
-	 */
103
-	protected $bulk_actions = array();
104
-
105
-	/**
106
-	 * Makes translation easier, it basically just wraps
107
-	 * `_x` with some default (the package name).
108
-	 * 
109
-	 * @deprecated 3.0.0
110
-	 */
111
-	protected function translate( $text, $context = '' ) {
112
-		return $text;
113
-	}
114
-
115
-	/**
116
-	 * Reads `$this->bulk_actions` and returns an array that WP_List_Table understands. It
117
-	 * also validates that the bulk method handler exists. It throws an exception because
118
-	 * this is a library meant for developers and missing a bulk method is a development-time error.
119
-	 */
120
-	protected function get_bulk_actions() {
121
-		$actions = array();
122
-
123
-		foreach ( $this->bulk_actions as $action => $label ) {
124
-			if ( ! is_callable( array( $this, 'bulk_' . $action ) ) ) {
125
-				throw new RuntimeException( "The bulk action $action does not have a callback method" );
126
-			}
127
-
128
-			$actions[ $action ] = $label;
129
-		}
130
-
131
-		return $actions;
132
-	}
133
-
134
-	/**
135
-	 * Checks if the current request has a bulk action. If that is the case it will validate and will
136
-	 * execute the bulk method handler. Regardless if the action is valid or not it will redirect to
137
-	 * the previous page removing the current arguments that makes this request a bulk action.
138
-	 */
139
-	protected function process_bulk_action() {
140
-		global $wpdb;
141
-		// Detect when a bulk action is being triggered.
142
-		$action = $this->current_action();
143
-		if ( ! $action ) {
144
-			return;
145
-		}
146
-
147
-		check_admin_referer( 'bulk-' . $this->_args['plural'] );
148
-
149
-		$method   = 'bulk_' . $action;
150
-		if ( array_key_exists( $action, $this->bulk_actions ) && is_callable( array( $this, $method ) ) && ! empty( $_GET['ID'] ) && is_array( $_GET['ID'] ) ) {
151
-			$ids_sql = '(' . implode( ',', array_fill( 0, count( $_GET['ID'] ), '%s' ) ) . ')';
152
-			$this->$method( $_GET['ID'], $wpdb->prepare( $ids_sql, $_GET['ID'] ) );
153
-		}
154
-
155
-		wp_redirect( remove_query_arg(
156
-			array( '_wp_http_referer', '_wpnonce', 'ID', 'action', 'action2' ),
157
-			wp_unslash( $_SERVER['REQUEST_URI'] )
158
-		) );
159
-		exit;
160
-	}
161
-
162
-	/**
163
-	 * Default code for deleting entries.
164
-	 * validated already by process_bulk_action()
165
-	 */
166
-	protected function bulk_delete( array $ids, $ids_sql ) {
167
-		$store = ActionScheduler::store();
168
-		foreach ( $ids as $action_id ) {
169
-			$store->delete( $action_id );
170
-		}
171
-	}
172
-
173
-	/**
174
-	 * Prepares the _column_headers property which is used by WP_Table_List at rendering.
175
-	 * It merges the columns and the sortable columns.
176
-	 */
177
-	protected function prepare_column_headers() {
178
-		$this->_column_headers = array(
179
-			$this->get_columns(),
180
-			array(),
181
-			$this->get_sortable_columns(),
182
-		);
183
-	}
184
-
185
-	/**
186
-	 * Reads $this->sort_by and returns the columns name in a format that WP_Table_List
187
-	 * expects
188
-	 */
189
-	public function get_sortable_columns() {
190
-		$sort_by = array();
191
-		foreach ( $this->sort_by as $column ) {
192
-			$sort_by[ $column ] = array( $column, true );
193
-		}
194
-		return $sort_by;
195
-	}
196
-
197
-	/**
198
-	 * Returns the columns names for rendering. It adds a checkbox for selecting everything
199
-	 * as the first column
200
-	 */
201
-	public function get_columns() {
202
-		$columns = array_merge(
203
-			array( 'cb' => '<input type="checkbox" />' ),
204
-			$this->columns
205
-		);
206
-
207
-		return $columns;
208
-	}
209
-
210
-	/**
211
-	 * Get prepared LIMIT clause for items query
212
-	 *
213
-	 * @global wpdb $wpdb
214
-	 *
215
-	 * @return string Prepared LIMIT clause for items query.
216
-	 */
217
-	protected function get_items_query_limit() {
218
-		global $wpdb;
219
-
220
-		$per_page = $this->get_items_per_page( $this->package . '_items_per_page', $this->items_per_page );
221
-		return $wpdb->prepare( 'LIMIT %d', $per_page );
222
-	}
223
-
224
-	/**
225
-	 * Returns the number of items to offset/skip for this current view.
226
-	 *
227
-	 * @return int
228
-	 */
229
-	protected function get_items_offset() {
230
-		$per_page = $this->get_items_per_page( $this->package . '_items_per_page', $this->items_per_page );
231
-		$current_page = $this->get_pagenum();
232
-		if ( 1 < $current_page ) {
233
-			$offset = $per_page * ( $current_page - 1 );
234
-		} else {
235
-			$offset = 0;
236
-		}
237
-
238
-		return $offset;
239
-	}
240
-
241
-	/**
242
-	 * Get prepared OFFSET clause for items query
243
-	 *
244
-	 * @global wpdb $wpdb
245
-	 *
246
-	 * @return string Prepared OFFSET clause for items query.
247
-	 */
248
-	protected function get_items_query_offset() {
249
-		global $wpdb;
250
-
251
-		return $wpdb->prepare( 'OFFSET %d', $this->get_items_offset() );
252
-	}
253
-
254
-	/**
255
-	 * Prepares the ORDER BY sql statement. It uses `$this->sort_by` to know which
256
-	 * columns are sortable. This requests validates the orderby $_GET parameter is a valid
257
-	 * column and sortable. It will also use order (ASC|DESC) using DESC by default.
258
-	 */
259
-	protected function get_items_query_order() {
260
-		if ( empty( $this->sort_by ) ) {
261
-			return '';
262
-		}
263
-
264
-		$orderby = esc_sql( $this->get_request_orderby() );
265
-		$order   = esc_sql( $this->get_request_order() );
266
-
267
-		return "ORDER BY {$orderby} {$order}";
268
-	}
269
-
270
-	/**
271
-	 * Return the sortable column specified for this request to order the results by, if any.
272
-	 *
273
-	 * @return string
274
-	 */
275
-	protected function get_request_orderby() {
276
-
277
-		$valid_sortable_columns = array_values( $this->sort_by );
278
-
279
-		if ( ! empty( $_GET['orderby'] ) && in_array( $_GET['orderby'], $valid_sortable_columns ) ) {
280
-			$orderby = sanitize_text_field( $_GET['orderby'] );
281
-		} else {
282
-			$orderby = $valid_sortable_columns[0];
283
-		}
284
-
285
-		return $orderby;
286
-	}
287
-
288
-	/**
289
-	 * Return the sortable column order specified for this request.
290
-	 *
291
-	 * @return string
292
-	 */
293
-	protected function get_request_order() {
294
-
295
-		if ( ! empty( $_GET['order'] ) && 'desc' === strtolower( $_GET['order'] ) ) {
296
-			$order = 'DESC';
297
-		} else {
298
-			$order = 'ASC';
299
-		}
300
-
301
-		return $order;
302
-	}
303
-
304
-	/**
305
-	 * Return the status filter for this request, if any.
306
-	 *
307
-	 * @return string
308
-	 */
309
-	protected function get_request_status() {
310
-		$status = ( ! empty( $_GET['status'] ) ) ? $_GET['status'] : '';
311
-		return $status;
312
-	}
313
-
314
-	/**
315
-	 * Return the search filter for this request, if any.
316
-	 *
317
-	 * @return string
318
-	 */
319
-	protected function get_request_search_query() {
320
-		$search_query = ( ! empty( $_GET['s'] ) ) ? $_GET['s'] : '';
321
-		return $search_query;
322
-	}
323
-
324
-	/**
325
-	 * Process and return the columns name. This is meant for using with SQL, this means it
326
-	 * always includes the primary key.
327
-	 *
328
-	 * @return array
329
-	 */
330
-	protected function get_table_columns() {
331
-		$columns = array_keys( $this->columns );
332
-		if ( ! in_array( $this->ID, $columns ) ) {
333
-			$columns[] = $this->ID;
334
-		}
335
-
336
-		return $columns;
337
-	}
338
-
339
-	/**
340
-	 * Check if the current request is doing a "full text" search. If that is the case
341
-	 * prepares the SQL to search texts using LIKE.
342
-	 *
343
-	 * If the current request does not have any search or if this list table does not support
344
-	 * that feature it will return an empty string.
345
-	 *
346
-	 * TODO:
347
-	 *   - Improve search doing LIKE by word rather than by phrases.
348
-	 *
349
-	 * @return string
350
-	 */
351
-	protected function get_items_query_search() {
352
-		global $wpdb;
353
-
354
-		if ( empty( $_GET['s'] ) || empty( $this->search_by ) ) {
355
-			return '';
356
-		}
357
-
358
-		$filter  = array();
359
-		foreach ( $this->search_by as $column ) {
360
-			$filter[] = $wpdb->prepare('`' . $column . '` like "%%s%"', $wpdb->esc_like( $_GET['s'] ));
361
-		}
362
-		return implode( ' OR ', $filter );
363
-	}
364
-
365
-	/**
366
-	 * Prepares the SQL to filter rows by the options defined at `$this->filter_by`. Before trusting
367
-	 * any data sent by the user it validates that it is a valid option.
368
-	 */
369
-	protected function get_items_query_filters() {
370
-		global $wpdb;
371
-
372
-		if ( ! $this->filter_by || empty( $_GET['filter_by'] ) || ! is_array( $_GET['filter_by'] ) ) {
373
-			return '';
374
-		}
375
-
376
-		$filter = array();
377
-
378
-		foreach ( $this->filter_by as $column => $options ) {
379
-			if ( empty( $_GET['filter_by'][ $column ] ) || empty( $options[ $_GET['filter_by'][ $column ] ] ) ) {
380
-				continue;
381
-			}
382
-
383
-			$filter[] = $wpdb->prepare( "`$column` = %s", $_GET['filter_by'][ $column ] );
384
-		}
385
-
386
-		return implode( ' AND ', $filter );
387
-
388
-	}
389
-
390
-	/**
391
-	 * Prepares the data to feed WP_Table_List.
392
-	 *
393
-	 * This has the core for selecting, sorting and filting data. To keep the code simple
394
-	 * its logic is split among many methods (get_items_query_*).
395
-	 *
396
-	 * Beside populating the items this function will also count all the records that matches
397
-	 * the filtering criteria and will do fill the pagination variables.
398
-	 */
399
-	public function prepare_items() {
400
-		global $wpdb;
401
-
402
-		$this->process_bulk_action();
403
-
404
-		$this->process_row_actions();
405
-
406
-		if ( ! empty( $_REQUEST['_wp_http_referer'] ) ) {
407
-			// _wp_http_referer is used only on bulk actions, we remove it to keep the $_GET shorter
408
-			wp_redirect( remove_query_arg( array( '_wp_http_referer', '_wpnonce' ), wp_unslash( $_SERVER['REQUEST_URI'] ) ) );
409
-			exit;
410
-		}
411
-
412
-		$this->prepare_column_headers();
413
-
414
-		$limit   = $this->get_items_query_limit();
415
-		$offset  = $this->get_items_query_offset();
416
-		$order   = $this->get_items_query_order();
417
-		$where   = array_filter(array(
418
-			$this->get_items_query_search(),
419
-			$this->get_items_query_filters(),
420
-		));
421
-		$columns = '`' . implode( '`, `', $this->get_table_columns() ) . '`';
422
-
423
-		if ( ! empty( $where ) ) {
424
-			$where = 'WHERE ('. implode( ') AND (', $where ) . ')';
425
-		} else {
426
-			$where = '';
427
-		}
428
-
429
-		$sql = "SELECT $columns FROM {$this->table_name} {$where} {$order} {$limit} {$offset}";
430
-
431
-		$this->set_items( $wpdb->get_results( $sql, ARRAY_A ) );
432
-
433
-		$query_count = "SELECT COUNT({$this->ID}) FROM {$this->table_name} {$where}";
434
-		$total_items = $wpdb->get_var( $query_count );
435
-		$per_page    = $this->get_items_per_page( $this->package . '_items_per_page', $this->items_per_page );
436
-		$this->set_pagination_args( array(
437
-			'total_items' => $total_items,
438
-			'per_page'    => $per_page,
439
-			'total_pages' => ceil( $total_items / $per_page ),
440
-		) );
441
-	}
442
-
443
-	public function extra_tablenav( $which ) {
444
-		if ( ! $this->filter_by || 'top' !== $which ) {
445
-			return;
446
-		}
447
-
448
-		echo '<div class="alignleft actions">';
449
-
450
-		foreach ( $this->filter_by as $id => $options ) {
451
-			$default = ! empty( $_GET['filter_by'][ $id ] ) ? $_GET['filter_by'][ $id ] : '';
452
-			if ( empty( $options[ $default ] ) ) {
453
-				$default = '';
454
-			}
455
-
456
-			echo '<select name="filter_by[' . esc_attr( $id ) . ']" class="first" id="filter-by-' . esc_attr( $id ) . '">';
457
-
458
-			foreach ( $options as $value => $label ) {
459
-				echo '<option value="' . esc_attr( $value ) . '" ' . esc_html( $value == $default ? 'selected' : '' )  .'>'
460
-					. esc_html( $label )
461
-				. '</option>';
462
-			}
463
-
464
-			echo '</select>';
465
-		}
466
-
467
-		submit_button( esc_html__( 'Filter', 'action-scheduler' ), '', 'filter_action', false, array( 'id' => 'post-query-submit' ) );
468
-		echo '</div>';
469
-	}
470
-
471
-	/**
472
-	 * Set the data for displaying. It will attempt to unserialize (There is a chance that some columns
473
-	 * are serialized). This can be override in child classes for futher data transformation.
474
-	 */
475
-	protected function set_items( array $items ) {
476
-		$this->items = array();
477
-		foreach ( $items as $item ) {
478
-			$this->items[ $item[ $this->ID ] ] = array_map( 'maybe_unserialize', $item );
479
-		}
480
-	}
481
-
482
-	/**
483
-	 * Renders the checkbox for each row, this is the first column and it is named ID regardless
484
-	 * of how the primary key is named (to keep the code simpler). The bulk actions will do the proper
485
-	 * name transformation though using `$this->ID`.
486
-	 */
487
-	public function column_cb( $row ) {
488
-		return '<input name="ID[]" type="checkbox" value="' . esc_attr( $row[ $this->ID ] ) .'" />';
489
-	}
490
-
491
-	/**
492
-	 * Renders the row-actions.
493
-	 *
494
-	 * This method renders the action menu, it reads the definition from the $row_actions property,
495
-	 * and it checks that the row action method exists before rendering it.
496
-	 *
497
-	 * @param array $row     Row to render
498
-	 * @param $column_name   Current row
499
-	 * @return
500
-	 */
501
-	protected function maybe_render_actions( $row, $column_name ) {
502
-		if ( empty( $this->row_actions[ $column_name ] ) ) {
503
-			return;
504
-		}
505
-
506
-		$row_id = $row[ $this->ID ];
507
-
508
-		$actions = '<div class="row-actions">';
509
-		$action_count = 0;
510
-		foreach ( $this->row_actions[ $column_name ] as $action_key => $action ) {
511
-
512
-			$action_count++;
513
-
514
-			if ( ! method_exists( $this, 'row_action_' . $action_key ) ) {
515
-				continue;
516
-			}
517
-
518
-			$action_link = ! empty( $action['link'] ) ? $action['link'] : add_query_arg( array( 'row_action' => $action_key, 'row_id' => $row_id, 'nonce'  => wp_create_nonce( $action_key . '::' . $row_id ) ) );
519
-			$span_class  = ! empty( $action['class'] ) ? $action['class'] : $action_key;
520
-			$separator   = ( $action_count < count( $this->row_actions[ $column_name ] ) ) ? ' | ' : '';
521
-
522
-			$actions .= sprintf( '<span class="%s">', esc_attr( $span_class ) );
523
-			$actions .= sprintf( '<a href="%1$s" title="%2$s">%3$s</a>', esc_url( $action_link ), esc_attr( $action['desc'] ), esc_html( $action['name'] ) );
524
-			$actions .= sprintf( '%s</span>', $separator );
525
-		}
526
-		$actions .= '</div>';
527
-		return $actions;
528
-	}
529
-
530
-	protected function process_row_actions() {
531
-		$parameters = array( 'row_action', 'row_id', 'nonce' );
532
-		foreach ( $parameters as $parameter ) {
533
-			if ( empty( $_REQUEST[ $parameter ] ) ) {
534
-				return;
535
-			}
536
-		}
537
-
538
-		$method = 'row_action_' . $_REQUEST['row_action'];
539
-
540
-		if ( $_REQUEST['nonce'] === wp_create_nonce( $_REQUEST[ 'row_action' ] . '::' . $_REQUEST[ 'row_id' ] ) && method_exists( $this, $method ) ) {
541
-			$this->$method( $_REQUEST['row_id'] );
542
-		}
543
-
544
-		wp_redirect( remove_query_arg(
545
-			array( 'row_id', 'row_action', 'nonce' ),
546
-			wp_unslash( $_SERVER['REQUEST_URI'] )
547
-		) );
548
-		exit;
549
-	}
550
-
551
-	/**
552
-	 * Default column formatting, it will escape everythig for security.
553
-	 */
554
-	public function column_default( $item, $column_name ) {
555
-		$column_html = esc_html( $item[ $column_name ] );
556
-		$column_html .= $this->maybe_render_actions( $item, $column_name );
557
-		return $column_html;
558
-	}
559
-
560
-	/**
561
-	 * Display the table heading and search query, if any
562
-	 */
563
-	protected function display_header() {
564
-		echo '<h1 class="wp-heading-inline">' . esc_attr( $this->table_header ) . '</h1>';
565
-		if ( $this->get_request_search_query() ) {
566
-			/* translators: %s: search query */
567
-			echo '<span class="subtitle">' . esc_attr( sprintf( __( 'Search results for "%s"', 'action-scheduler' ), $this->get_request_search_query() ) ) . '</span>';
568
-		}
569
-		echo '<hr class="wp-header-end">';
570
-	}
571
-
572
-	/**
573
-	 * Display the table heading and search query, if any
574
-	 */
575
-	protected function display_admin_notices() {
576
-		foreach ( $this->admin_notices as $notice ) {
577
-			echo '<div id="message" class="' . $notice['class'] . '">';
578
-			echo '	<p>' . wp_kses_post( $notice['message'] ) . '</p>';
579
-			echo '</div>';
580
-		}
581
-	}
582
-
583
-	/**
584
-	 * Prints the available statuses so the user can click to filter.
585
-	 */
586
-	protected function display_filter_by_status() {
587
-
588
-		$status_list_items = array();
589
-		$request_status    = $this->get_request_status();
590
-
591
-		// Helper to set 'all' filter when not set on status counts passed in
592
-		if ( ! isset( $this->status_counts['all'] ) ) {
593
-			$this->status_counts = array( 'all' => array_sum( $this->status_counts ) ) + $this->status_counts;
594
-		}
595
-
596
-		foreach ( $this->status_counts as $status_name => $count ) {
597
-
598
-			if ( 0 === $count ) {
599
-				continue;
600
-			}
601
-
602
-			if ( $status_name === $request_status || ( empty( $request_status ) && 'all' === $status_name ) ) {
603
-				$status_list_item = '<li class="%1$s"><strong>%3$s</strong> (%4$d)</li>';
604
-			} else {
605
-				$status_list_item = '<li class="%1$s"><a href="%2$s">%3$s</a> (%4$d)</li>';
606
-			}
607
-
608
-			$status_filter_url   = ( 'all' === $status_name ) ? remove_query_arg( 'status' ) : add_query_arg( 'status', $status_name );
609
-			$status_filter_url   = remove_query_arg( array( 'paged', 's' ), $status_filter_url );
610
-			$status_list_items[] = sprintf( $status_list_item, esc_attr( $status_name ), esc_url( $status_filter_url ), esc_html( ucfirst( $status_name ) ), absint( $count ) );
611
-		}
612
-
613
-		if ( $status_list_items ) {
614
-			echo '<ul class="subsubsub">';
615
-			echo implode( " | \n", $status_list_items );
616
-			echo '</ul>';
617
-		}
618
-	}
619
-
620
-	/**
621
-	 * Renders the table list, we override the original class to render the table inside a form
622
-	 * and to render any needed HTML (like the search box). By doing so the callee of a function can simple
623
-	 * forget about any extra HTML.
624
-	 */
625
-	protected function display_table() {
626
-		echo '<form id="' . esc_attr( $this->_args['plural'] ) . '-filter" method="get">';
627
-		foreach ( $_GET as $key => $value ) {
628
-			if ( '_' === $key[0] || 'paged' === $key ) {
629
-				continue;
630
-			}
631
-			echo '<input type="hidden" name="' . esc_attr( $key ) . '" value="' . esc_attr( $value ) . '" />';
632
-		}
633
-		if ( ! empty( $this->search_by ) ) {
634
-			echo $this->search_box( $this->get_search_box_button_text(), 'plugin' ); // WPCS: XSS OK
635
-		}
636
-		parent::display();
637
-		echo '</form>';
638
-	}
639
-
640
-	/**
641
-	 * Process any pending actions.
642
-	 */
643
-	public function process_actions() {
644
-		$this->process_bulk_action();
645
-		$this->process_row_actions();
646
-
647
-		if ( ! empty( $_REQUEST['_wp_http_referer'] ) ) {
648
-			// _wp_http_referer is used only on bulk actions, we remove it to keep the $_GET shorter
649
-			wp_redirect( remove_query_arg( array( '_wp_http_referer', '_wpnonce' ), wp_unslash( $_SERVER['REQUEST_URI'] ) ) );
650
-			exit;
651
-		}
652
-	}
653
-
654
-	/**
655
-	 * Render the list table page, including header, notices, status filters and table.
656
-	 */
657
-	public function display_page() {
658
-		$this->prepare_items();
659
-
660
-		echo '<div class="wrap">';
661
-		$this->display_header();
662
-		$this->display_admin_notices();
663
-		$this->display_filter_by_status();
664
-		$this->display_table();
665
-		echo '</div>';
666
-	}
667
-
668
-	/**
669
-	 * Get the text to display in the search box on the list table.
670
-	 */
671
-	protected function get_search_box_placeholder() {
672
-		return esc_html__( 'Search', 'action-scheduler' );
673
-	}
26
+    /**
27
+     * The table name
28
+     */
29
+    protected $table_name;
30
+
31
+    /**
32
+     * Package name, used to get options from WP_List_Table::get_items_per_page.
33
+     */
34
+    protected $package;
35
+
36
+    /**
37
+     * How many items do we render per page?
38
+     */
39
+    protected $items_per_page = 10;
40
+
41
+    /**
42
+     * Enables search in this table listing. If this array
43
+     * is empty it means the listing is not searchable.
44
+     */
45
+    protected $search_by = array();
46
+
47
+    /**
48
+     * Columns to show in the table listing. It is a key => value pair. The
49
+     * key must much the table column name and the value is the label, which is
50
+     * automatically translated.
51
+     */
52
+    protected $columns = array();
53
+
54
+    /**
55
+     * Defines the row-actions. It expects an array where the key
56
+     * is the column name and the value is an array of actions.
57
+     *
58
+     * The array of actions are key => value, where key is the method name
59
+     * (with the prefix row_action_<key>) and the value is the label
60
+     * and title.
61
+     */
62
+    protected $row_actions = array();
63
+
64
+    /**
65
+     * The Primary key of our table
66
+     */
67
+    protected $ID = 'ID';
68
+
69
+    /**
70
+     * Enables sorting, it expects an array
71
+     * of columns (the column names are the values)
72
+     */
73
+    protected $sort_by = array();
74
+
75
+    protected $filter_by = array();
76
+
77
+    /**
78
+     * @var array The status name => count combinations for this table's items. Used to display status filters.
79
+     */
80
+    protected $status_counts = array();
81
+
82
+    /**
83
+     * @var array Notices to display when loading the table. Array of arrays of form array( 'class' => {updated|error}, 'message' => 'This is the notice text display.' ).
84
+     */
85
+    protected $admin_notices = array();
86
+
87
+    /**
88
+     * @var string Localised string displayed in the <h1> element above the able.
89
+     */
90
+    protected $table_header;
91
+
92
+    /**
93
+     * Enables bulk actions. It must be an array where the key is the action name
94
+     * and the value is the label (which is translated automatically). It is important
95
+     * to notice that it will check that the method exists (`bulk_$name`) and will throw
96
+     * an exception if it does not exists.
97
+     *
98
+     * This class will automatically check if the current request has a bulk action, will do the
99
+     * validations and afterwards will execute the bulk method, with two arguments. The first argument
100
+     * is the array with primary keys, the second argument is a string with a list of the primary keys,
101
+     * escaped and ready to use (with `IN`).
102
+     */
103
+    protected $bulk_actions = array();
104
+
105
+    /**
106
+     * Makes translation easier, it basically just wraps
107
+     * `_x` with some default (the package name).
108
+     * 
109
+     * @deprecated 3.0.0
110
+     */
111
+    protected function translate( $text, $context = '' ) {
112
+        return $text;
113
+    }
114
+
115
+    /**
116
+     * Reads `$this->bulk_actions` and returns an array that WP_List_Table understands. It
117
+     * also validates that the bulk method handler exists. It throws an exception because
118
+     * this is a library meant for developers and missing a bulk method is a development-time error.
119
+     */
120
+    protected function get_bulk_actions() {
121
+        $actions = array();
122
+
123
+        foreach ( $this->bulk_actions as $action => $label ) {
124
+            if ( ! is_callable( array( $this, 'bulk_' . $action ) ) ) {
125
+                throw new RuntimeException( "The bulk action $action does not have a callback method" );
126
+            }
127
+
128
+            $actions[ $action ] = $label;
129
+        }
130
+
131
+        return $actions;
132
+    }
133
+
134
+    /**
135
+     * Checks if the current request has a bulk action. If that is the case it will validate and will
136
+     * execute the bulk method handler. Regardless if the action is valid or not it will redirect to
137
+     * the previous page removing the current arguments that makes this request a bulk action.
138
+     */
139
+    protected function process_bulk_action() {
140
+        global $wpdb;
141
+        // Detect when a bulk action is being triggered.
142
+        $action = $this->current_action();
143
+        if ( ! $action ) {
144
+            return;
145
+        }
146
+
147
+        check_admin_referer( 'bulk-' . $this->_args['plural'] );
148
+
149
+        $method   = 'bulk_' . $action;
150
+        if ( array_key_exists( $action, $this->bulk_actions ) && is_callable( array( $this, $method ) ) && ! empty( $_GET['ID'] ) && is_array( $_GET['ID'] ) ) {
151
+            $ids_sql = '(' . implode( ',', array_fill( 0, count( $_GET['ID'] ), '%s' ) ) . ')';
152
+            $this->$method( $_GET['ID'], $wpdb->prepare( $ids_sql, $_GET['ID'] ) );
153
+        }
154
+
155
+        wp_redirect( remove_query_arg(
156
+            array( '_wp_http_referer', '_wpnonce', 'ID', 'action', 'action2' ),
157
+            wp_unslash( $_SERVER['REQUEST_URI'] )
158
+        ) );
159
+        exit;
160
+    }
161
+
162
+    /**
163
+     * Default code for deleting entries.
164
+     * validated already by process_bulk_action()
165
+     */
166
+    protected function bulk_delete( array $ids, $ids_sql ) {
167
+        $store = ActionScheduler::store();
168
+        foreach ( $ids as $action_id ) {
169
+            $store->delete( $action_id );
170
+        }
171
+    }
172
+
173
+    /**
174
+     * Prepares the _column_headers property which is used by WP_Table_List at rendering.
175
+     * It merges the columns and the sortable columns.
176
+     */
177
+    protected function prepare_column_headers() {
178
+        $this->_column_headers = array(
179
+            $this->get_columns(),
180
+            array(),
181
+            $this->get_sortable_columns(),
182
+        );
183
+    }
184
+
185
+    /**
186
+     * Reads $this->sort_by and returns the columns name in a format that WP_Table_List
187
+     * expects
188
+     */
189
+    public function get_sortable_columns() {
190
+        $sort_by = array();
191
+        foreach ( $this->sort_by as $column ) {
192
+            $sort_by[ $column ] = array( $column, true );
193
+        }
194
+        return $sort_by;
195
+    }
196
+
197
+    /**
198
+     * Returns the columns names for rendering. It adds a checkbox for selecting everything
199
+     * as the first column
200
+     */
201
+    public function get_columns() {
202
+        $columns = array_merge(
203
+            array( 'cb' => '<input type="checkbox" />' ),
204
+            $this->columns
205
+        );
206
+
207
+        return $columns;
208
+    }
209
+
210
+    /**
211
+     * Get prepared LIMIT clause for items query
212
+     *
213
+     * @global wpdb $wpdb
214
+     *
215
+     * @return string Prepared LIMIT clause for items query.
216
+     */
217
+    protected function get_items_query_limit() {
218
+        global $wpdb;
219
+
220
+        $per_page = $this->get_items_per_page( $this->package . '_items_per_page', $this->items_per_page );
221
+        return $wpdb->prepare( 'LIMIT %d', $per_page );
222
+    }
223
+
224
+    /**
225
+     * Returns the number of items to offset/skip for this current view.
226
+     *
227
+     * @return int
228
+     */
229
+    protected function get_items_offset() {
230
+        $per_page = $this->get_items_per_page( $this->package . '_items_per_page', $this->items_per_page );
231
+        $current_page = $this->get_pagenum();
232
+        if ( 1 < $current_page ) {
233
+            $offset = $per_page * ( $current_page - 1 );
234
+        } else {
235
+            $offset = 0;
236
+        }
237
+
238
+        return $offset;
239
+    }
240
+
241
+    /**
242
+     * Get prepared OFFSET clause for items query
243
+     *
244
+     * @global wpdb $wpdb
245
+     *
246
+     * @return string Prepared OFFSET clause for items query.
247
+     */
248
+    protected function get_items_query_offset() {
249
+        global $wpdb;
250
+
251
+        return $wpdb->prepare( 'OFFSET %d', $this->get_items_offset() );
252
+    }
253
+
254
+    /**
255
+     * Prepares the ORDER BY sql statement. It uses `$this->sort_by` to know which
256
+     * columns are sortable. This requests validates the orderby $_GET parameter is a valid
257
+     * column and sortable. It will also use order (ASC|DESC) using DESC by default.
258
+     */
259
+    protected function get_items_query_order() {
260
+        if ( empty( $this->sort_by ) ) {
261
+            return '';
262
+        }
263
+
264
+        $orderby = esc_sql( $this->get_request_orderby() );
265
+        $order   = esc_sql( $this->get_request_order() );
266
+
267
+        return "ORDER BY {$orderby} {$order}";
268
+    }
269
+
270
+    /**
271
+     * Return the sortable column specified for this request to order the results by, if any.
272
+     *
273
+     * @return string
274
+     */
275
+    protected function get_request_orderby() {
276
+
277
+        $valid_sortable_columns = array_values( $this->sort_by );
278
+
279
+        if ( ! empty( $_GET['orderby'] ) && in_array( $_GET['orderby'], $valid_sortable_columns ) ) {
280
+            $orderby = sanitize_text_field( $_GET['orderby'] );
281
+        } else {
282
+            $orderby = $valid_sortable_columns[0];
283
+        }
284
+
285
+        return $orderby;
286
+    }
287
+
288
+    /**
289
+     * Return the sortable column order specified for this request.
290
+     *
291
+     * @return string
292
+     */
293
+    protected function get_request_order() {
294
+
295
+        if ( ! empty( $_GET['order'] ) && 'desc' === strtolower( $_GET['order'] ) ) {
296
+            $order = 'DESC';
297
+        } else {
298
+            $order = 'ASC';
299
+        }
300
+
301
+        return $order;
302
+    }
303
+
304
+    /**
305
+     * Return the status filter for this request, if any.
306
+     *
307
+     * @return string
308
+     */
309
+    protected function get_request_status() {
310
+        $status = ( ! empty( $_GET['status'] ) ) ? $_GET['status'] : '';
311
+        return $status;
312
+    }
313
+
314
+    /**
315
+     * Return the search filter for this request, if any.
316
+     *
317
+     * @return string
318
+     */
319
+    protected function get_request_search_query() {
320
+        $search_query = ( ! empty( $_GET['s'] ) ) ? $_GET['s'] : '';
321
+        return $search_query;
322
+    }
323
+
324
+    /**
325
+     * Process and return the columns name. This is meant for using with SQL, this means it
326
+     * always includes the primary key.
327
+     *
328
+     * @return array
329
+     */
330
+    protected function get_table_columns() {
331
+        $columns = array_keys( $this->columns );
332
+        if ( ! in_array( $this->ID, $columns ) ) {
333
+            $columns[] = $this->ID;
334
+        }
335
+
336
+        return $columns;
337
+    }
338
+
339
+    /**
340
+     * Check if the current request is doing a "full text" search. If that is the case
341
+     * prepares the SQL to search texts using LIKE.
342
+     *
343
+     * If the current request does not have any search or if this list table does not support
344
+     * that feature it will return an empty string.
345
+     *
346
+     * TODO:
347
+     *   - Improve search doing LIKE by word rather than by phrases.
348
+     *
349
+     * @return string
350
+     */
351
+    protected function get_items_query_search() {
352
+        global $wpdb;
353
+
354
+        if ( empty( $_GET['s'] ) || empty( $this->search_by ) ) {
355
+            return '';
356
+        }
357
+
358
+        $filter  = array();
359
+        foreach ( $this->search_by as $column ) {
360
+            $filter[] = $wpdb->prepare('`' . $column . '` like "%%s%"', $wpdb->esc_like( $_GET['s'] ));
361
+        }
362
+        return implode( ' OR ', $filter );
363
+    }
364
+
365
+    /**
366
+     * Prepares the SQL to filter rows by the options defined at `$this->filter_by`. Before trusting
367
+     * any data sent by the user it validates that it is a valid option.
368
+     */
369
+    protected function get_items_query_filters() {
370
+        global $wpdb;
371
+
372
+        if ( ! $this->filter_by || empty( $_GET['filter_by'] ) || ! is_array( $_GET['filter_by'] ) ) {
373
+            return '';
374
+        }
375
+
376
+        $filter = array();
377
+
378
+        foreach ( $this->filter_by as $column => $options ) {
379
+            if ( empty( $_GET['filter_by'][ $column ] ) || empty( $options[ $_GET['filter_by'][ $column ] ] ) ) {
380
+                continue;
381
+            }
382
+
383
+            $filter[] = $wpdb->prepare( "`$column` = %s", $_GET['filter_by'][ $column ] );
384
+        }
385
+
386
+        return implode( ' AND ', $filter );
387
+
388
+    }
389
+
390
+    /**
391
+     * Prepares the data to feed WP_Table_List.
392
+     *
393
+     * This has the core for selecting, sorting and filting data. To keep the code simple
394
+     * its logic is split among many methods (get_items_query_*).
395
+     *
396
+     * Beside populating the items this function will also count all the records that matches
397
+     * the filtering criteria and will do fill the pagination variables.
398
+     */
399
+    public function prepare_items() {
400
+        global $wpdb;
401
+
402
+        $this->process_bulk_action();
403
+
404
+        $this->process_row_actions();
405
+
406
+        if ( ! empty( $_REQUEST['_wp_http_referer'] ) ) {
407
+            // _wp_http_referer is used only on bulk actions, we remove it to keep the $_GET shorter
408
+            wp_redirect( remove_query_arg( array( '_wp_http_referer', '_wpnonce' ), wp_unslash( $_SERVER['REQUEST_URI'] ) ) );
409
+            exit;
410
+        }
411
+
412
+        $this->prepare_column_headers();
413
+
414
+        $limit   = $this->get_items_query_limit();
415
+        $offset  = $this->get_items_query_offset();
416
+        $order   = $this->get_items_query_order();
417
+        $where   = array_filter(array(
418
+            $this->get_items_query_search(),
419
+            $this->get_items_query_filters(),
420
+        ));
421
+        $columns = '`' . implode( '`, `', $this->get_table_columns() ) . '`';
422
+
423
+        if ( ! empty( $where ) ) {
424
+            $where = 'WHERE ('. implode( ') AND (', $where ) . ')';
425
+        } else {
426
+            $where = '';
427
+        }
428
+
429
+        $sql = "SELECT $columns FROM {$this->table_name} {$where} {$order} {$limit} {$offset}";
430
+
431
+        $this->set_items( $wpdb->get_results( $sql, ARRAY_A ) );
432
+
433
+        $query_count = "SELECT COUNT({$this->ID}) FROM {$this->table_name} {$where}";
434
+        $total_items = $wpdb->get_var( $query_count );
435
+        $per_page    = $this->get_items_per_page( $this->package . '_items_per_page', $this->items_per_page );
436
+        $this->set_pagination_args( array(
437
+            'total_items' => $total_items,
438
+            'per_page'    => $per_page,
439
+            'total_pages' => ceil( $total_items / $per_page ),
440
+        ) );
441
+    }
442
+
443
+    public function extra_tablenav( $which ) {
444
+        if ( ! $this->filter_by || 'top' !== $which ) {
445
+            return;
446
+        }
447
+
448
+        echo '<div class="alignleft actions">';
449
+
450
+        foreach ( $this->filter_by as $id => $options ) {
451
+            $default = ! empty( $_GET['filter_by'][ $id ] ) ? $_GET['filter_by'][ $id ] : '';
452
+            if ( empty( $options[ $default ] ) ) {
453
+                $default = '';
454
+            }
455
+
456
+            echo '<select name="filter_by[' . esc_attr( $id ) . ']" class="first" id="filter-by-' . esc_attr( $id ) . '">';
457
+
458
+            foreach ( $options as $value => $label ) {
459
+                echo '<option value="' . esc_attr( $value ) . '" ' . esc_html( $value == $default ? 'selected' : '' )  .'>'
460
+                    . esc_html( $label )
461
+                . '</option>';
462
+            }
463
+
464
+            echo '</select>';
465
+        }
466
+
467
+        submit_button( esc_html__( 'Filter', 'action-scheduler' ), '', 'filter_action', false, array( 'id' => 'post-query-submit' ) );
468
+        echo '</div>';
469
+    }
470
+
471
+    /**
472
+     * Set the data for displaying. It will attempt to unserialize (There is a chance that some columns
473
+     * are serialized). This can be override in child classes for futher data transformation.
474
+     */
475
+    protected function set_items( array $items ) {
476
+        $this->items = array();
477
+        foreach ( $items as $item ) {
478
+            $this->items[ $item[ $this->ID ] ] = array_map( 'maybe_unserialize', $item );
479
+        }
480
+    }
481
+
482
+    /**
483
+     * Renders the checkbox for each row, this is the first column and it is named ID regardless
484
+     * of how the primary key is named (to keep the code simpler). The bulk actions will do the proper
485
+     * name transformation though using `$this->ID`.
486
+     */
487
+    public function column_cb( $row ) {
488
+        return '<input name="ID[]" type="checkbox" value="' . esc_attr( $row[ $this->ID ] ) .'" />';
489
+    }
490
+
491
+    /**
492
+     * Renders the row-actions.
493
+     *
494
+     * This method renders the action menu, it reads the definition from the $row_actions property,
495
+     * and it checks that the row action method exists before rendering it.
496
+     *
497
+     * @param array $row     Row to render
498
+     * @param $column_name   Current row
499
+     * @return
500
+     */
501
+    protected function maybe_render_actions( $row, $column_name ) {
502
+        if ( empty( $this->row_actions[ $column_name ] ) ) {
503
+            return;
504
+        }
505
+
506
+        $row_id = $row[ $this->ID ];
507
+
508
+        $actions = '<div class="row-actions">';
509
+        $action_count = 0;
510
+        foreach ( $this->row_actions[ $column_name ] as $action_key => $action ) {
511
+
512
+            $action_count++;
513
+
514
+            if ( ! method_exists( $this, 'row_action_' . $action_key ) ) {
515
+                continue;
516
+            }
517
+
518
+            $action_link = ! empty( $action['link'] ) ? $action['link'] : add_query_arg( array( 'row_action' => $action_key, 'row_id' => $row_id, 'nonce'  => wp_create_nonce( $action_key . '::' . $row_id ) ) );
519
+            $span_class  = ! empty( $action['class'] ) ? $action['class'] : $action_key;
520
+            $separator   = ( $action_count < count( $this->row_actions[ $column_name ] ) ) ? ' | ' : '';
521
+
522
+            $actions .= sprintf( '<span class="%s">', esc_attr( $span_class ) );
523
+            $actions .= sprintf( '<a href="%1$s" title="%2$s">%3$s</a>', esc_url( $action_link ), esc_attr( $action['desc'] ), esc_html( $action['name'] ) );
524
+            $actions .= sprintf( '%s</span>', $separator );
525
+        }
526
+        $actions .= '</div>';
527
+        return $actions;
528
+    }
529
+
530
+    protected function process_row_actions() {
531
+        $parameters = array( 'row_action', 'row_id', 'nonce' );
532
+        foreach ( $parameters as $parameter ) {
533
+            if ( empty( $_REQUEST[ $parameter ] ) ) {
534
+                return;
535
+            }
536
+        }
537
+
538
+        $method = 'row_action_' . $_REQUEST['row_action'];
539
+
540
+        if ( $_REQUEST['nonce'] === wp_create_nonce( $_REQUEST[ 'row_action' ] . '::' . $_REQUEST[ 'row_id' ] ) && method_exists( $this, $method ) ) {
541
+            $this->$method( $_REQUEST['row_id'] );
542
+        }
543
+
544
+        wp_redirect( remove_query_arg(
545
+            array( 'row_id', 'row_action', 'nonce' ),
546
+            wp_unslash( $_SERVER['REQUEST_URI'] )
547
+        ) );
548
+        exit;
549
+    }
550
+
551
+    /**
552
+     * Default column formatting, it will escape everythig for security.
553
+     */
554
+    public function column_default( $item, $column_name ) {
555
+        $column_html = esc_html( $item[ $column_name ] );
556
+        $column_html .= $this->maybe_render_actions( $item, $column_name );
557
+        return $column_html;
558
+    }
559
+
560
+    /**
561
+     * Display the table heading and search query, if any
562
+     */
563
+    protected function display_header() {
564
+        echo '<h1 class="wp-heading-inline">' . esc_attr( $this->table_header ) . '</h1>';
565
+        if ( $this->get_request_search_query() ) {
566
+            /* translators: %s: search query */
567
+            echo '<span class="subtitle">' . esc_attr( sprintf( __( 'Search results for "%s"', 'action-scheduler' ), $this->get_request_search_query() ) ) . '</span>';
568
+        }
569
+        echo '<hr class="wp-header-end">';
570
+    }
571
+
572
+    /**
573
+     * Display the table heading and search query, if any
574
+     */
575
+    protected function display_admin_notices() {
576
+        foreach ( $this->admin_notices as $notice ) {
577
+            echo '<div id="message" class="' . $notice['class'] . '">';
578
+            echo '	<p>' . wp_kses_post( $notice['message'] ) . '</p>';
579
+            echo '</div>';
580
+        }
581
+    }
582
+
583
+    /**
584
+     * Prints the available statuses so the user can click to filter.
585
+     */
586
+    protected function display_filter_by_status() {
587
+
588
+        $status_list_items = array();
589
+        $request_status    = $this->get_request_status();
590
+
591
+        // Helper to set 'all' filter when not set on status counts passed in
592
+        if ( ! isset( $this->status_counts['all'] ) ) {
593
+            $this->status_counts = array( 'all' => array_sum( $this->status_counts ) ) + $this->status_counts;
594
+        }
595
+
596
+        foreach ( $this->status_counts as $status_name => $count ) {
597
+
598
+            if ( 0 === $count ) {
599
+                continue;
600
+            }
601
+
602
+            if ( $status_name === $request_status || ( empty( $request_status ) && 'all' === $status_name ) ) {
603
+                $status_list_item = '<li class="%1$s"><strong>%3$s</strong> (%4$d)</li>';
604
+            } else {
605
+                $status_list_item = '<li class="%1$s"><a href="%2$s">%3$s</a> (%4$d)</li>';
606
+            }
607
+
608
+            $status_filter_url   = ( 'all' === $status_name ) ? remove_query_arg( 'status' ) : add_query_arg( 'status', $status_name );
609
+            $status_filter_url   = remove_query_arg( array( 'paged', 's' ), $status_filter_url );
610
+            $status_list_items[] = sprintf( $status_list_item, esc_attr( $status_name ), esc_url( $status_filter_url ), esc_html( ucfirst( $status_name ) ), absint( $count ) );
611
+        }
612
+
613
+        if ( $status_list_items ) {
614
+            echo '<ul class="subsubsub">';
615
+            echo implode( " | \n", $status_list_items );
616
+            echo '</ul>';
617
+        }
618
+    }
619
+
620
+    /**
621
+     * Renders the table list, we override the original class to render the table inside a form
622
+     * and to render any needed HTML (like the search box). By doing so the callee of a function can simple
623
+     * forget about any extra HTML.
624
+     */
625
+    protected function display_table() {
626
+        echo '<form id="' . esc_attr( $this->_args['plural'] ) . '-filter" method="get">';
627
+        foreach ( $_GET as $key => $value ) {
628
+            if ( '_' === $key[0] || 'paged' === $key ) {
629
+                continue;
630
+            }
631
+            echo '<input type="hidden" name="' . esc_attr( $key ) . '" value="' . esc_attr( $value ) . '" />';
632
+        }
633
+        if ( ! empty( $this->search_by ) ) {
634
+            echo $this->search_box( $this->get_search_box_button_text(), 'plugin' ); // WPCS: XSS OK
635
+        }
636
+        parent::display();
637
+        echo '</form>';
638
+    }
639
+
640
+    /**
641
+     * Process any pending actions.
642
+     */
643
+    public function process_actions() {
644
+        $this->process_bulk_action();
645
+        $this->process_row_actions();
646
+
647
+        if ( ! empty( $_REQUEST['_wp_http_referer'] ) ) {
648
+            // _wp_http_referer is used only on bulk actions, we remove it to keep the $_GET shorter
649
+            wp_redirect( remove_query_arg( array( '_wp_http_referer', '_wpnonce' ), wp_unslash( $_SERVER['REQUEST_URI'] ) ) );
650
+            exit;
651
+        }
652
+    }
653
+
654
+    /**
655
+     * Render the list table page, including header, notices, status filters and table.
656
+     */
657
+    public function display_page() {
658
+        $this->prepare_items();
659
+
660
+        echo '<div class="wrap">';
661
+        $this->display_header();
662
+        $this->display_admin_notices();
663
+        $this->display_filter_by_status();
664
+        $this->display_table();
665
+        echo '</div>';
666
+    }
667
+
668
+    /**
669
+     * Get the text to display in the search box on the list table.
670
+     */
671
+    protected function get_search_box_placeholder() {
672
+        return esc_html__( 'Search', 'action-scheduler' );
673
+    }
674 674
 }
Please login to merge, or discard this patch.
Spacing   +122 added lines, -122 removed lines patch added patch discarded remove patch
@@ -1,7 +1,7 @@  discard block
 block discarded – undo
1 1
 <?php
2 2
 
3
-if ( ! class_exists( 'WP_List_Table' ) ) {
4
-	require_once( ABSPATH . 'wp-admin/includes/class-wp-list-table.php' );
3
+if (!class_exists('WP_List_Table')) {
4
+	require_once(ABSPATH . 'wp-admin/includes/class-wp-list-table.php');
5 5
 }
6 6
 
7 7
 /**
@@ -108,7 +108,7 @@  discard block
 block discarded – undo
108 108
 	 * 
109 109
 	 * @deprecated 3.0.0
110 110
 	 */
111
-	protected function translate( $text, $context = '' ) {
111
+	protected function translate($text, $context = '') {
112 112
 		return $text;
113 113
 	}
114 114
 
@@ -120,12 +120,12 @@  discard block
 block discarded – undo
120 120
 	protected function get_bulk_actions() {
121 121
 		$actions = array();
122 122
 
123
-		foreach ( $this->bulk_actions as $action => $label ) {
124
-			if ( ! is_callable( array( $this, 'bulk_' . $action ) ) ) {
125
-				throw new RuntimeException( "The bulk action $action does not have a callback method" );
123
+		foreach ($this->bulk_actions as $action => $label) {
124
+			if (!is_callable(array($this, 'bulk_' . $action))) {
125
+				throw new RuntimeException("The bulk action $action does not have a callback method");
126 126
 			}
127 127
 
128
-			$actions[ $action ] = $label;
128
+			$actions[$action] = $label;
129 129
 		}
130 130
 
131 131
 		return $actions;
@@ -140,22 +140,22 @@  discard block
 block discarded – undo
140 140
 		global $wpdb;
141 141
 		// Detect when a bulk action is being triggered.
142 142
 		$action = $this->current_action();
143
-		if ( ! $action ) {
143
+		if (!$action) {
144 144
 			return;
145 145
 		}
146 146
 
147
-		check_admin_referer( 'bulk-' . $this->_args['plural'] );
147
+		check_admin_referer('bulk-' . $this->_args['plural']);
148 148
 
149 149
 		$method   = 'bulk_' . $action;
150
-		if ( array_key_exists( $action, $this->bulk_actions ) && is_callable( array( $this, $method ) ) && ! empty( $_GET['ID'] ) && is_array( $_GET['ID'] ) ) {
151
-			$ids_sql = '(' . implode( ',', array_fill( 0, count( $_GET['ID'] ), '%s' ) ) . ')';
152
-			$this->$method( $_GET['ID'], $wpdb->prepare( $ids_sql, $_GET['ID'] ) );
150
+		if (array_key_exists($action, $this->bulk_actions) && is_callable(array($this, $method)) && !empty($_GET['ID']) && is_array($_GET['ID'])) {
151
+			$ids_sql = '(' . implode(',', array_fill(0, count($_GET['ID']), '%s')) . ')';
152
+			$this->$method($_GET['ID'], $wpdb->prepare($ids_sql, $_GET['ID']));
153 153
 		}
154 154
 
155
-		wp_redirect( remove_query_arg(
156
-			array( '_wp_http_referer', '_wpnonce', 'ID', 'action', 'action2' ),
157
-			wp_unslash( $_SERVER['REQUEST_URI'] )
158
-		) );
155
+		wp_redirect(remove_query_arg(
156
+			array('_wp_http_referer', '_wpnonce', 'ID', 'action', 'action2'),
157
+			wp_unslash($_SERVER['REQUEST_URI'])
158
+		));
159 159
 		exit;
160 160
 	}
161 161
 
@@ -163,10 +163,10 @@  discard block
 block discarded – undo
163 163
 	 * Default code for deleting entries.
164 164
 	 * validated already by process_bulk_action()
165 165
 	 */
166
-	protected function bulk_delete( array $ids, $ids_sql ) {
166
+	protected function bulk_delete(array $ids, $ids_sql) {
167 167
 		$store = ActionScheduler::store();
168
-		foreach ( $ids as $action_id ) {
169
-			$store->delete( $action_id );
168
+		foreach ($ids as $action_id) {
169
+			$store->delete($action_id);
170 170
 		}
171 171
 	}
172 172
 
@@ -188,8 +188,8 @@  discard block
 block discarded – undo
188 188
 	 */
189 189
 	public function get_sortable_columns() {
190 190
 		$sort_by = array();
191
-		foreach ( $this->sort_by as $column ) {
192
-			$sort_by[ $column ] = array( $column, true );
191
+		foreach ($this->sort_by as $column) {
192
+			$sort_by[$column] = array($column, true);
193 193
 		}
194 194
 		return $sort_by;
195 195
 	}
@@ -200,7 +200,7 @@  discard block
 block discarded – undo
200 200
 	 */
201 201
 	public function get_columns() {
202 202
 		$columns = array_merge(
203
-			array( 'cb' => '<input type="checkbox" />' ),
203
+			array('cb' => '<input type="checkbox" />'),
204 204
 			$this->columns
205 205
 		);
206 206
 
@@ -217,8 +217,8 @@  discard block
 block discarded – undo
217 217
 	protected function get_items_query_limit() {
218 218
 		global $wpdb;
219 219
 
220
-		$per_page = $this->get_items_per_page( $this->package . '_items_per_page', $this->items_per_page );
221
-		return $wpdb->prepare( 'LIMIT %d', $per_page );
220
+		$per_page = $this->get_items_per_page($this->package . '_items_per_page', $this->items_per_page);
221
+		return $wpdb->prepare('LIMIT %d', $per_page);
222 222
 	}
223 223
 
224 224
 	/**
@@ -227,10 +227,10 @@  discard block
 block discarded – undo
227 227
 	 * @return int
228 228
 	 */
229 229
 	protected function get_items_offset() {
230
-		$per_page = $this->get_items_per_page( $this->package . '_items_per_page', $this->items_per_page );
230
+		$per_page = $this->get_items_per_page($this->package . '_items_per_page', $this->items_per_page);
231 231
 		$current_page = $this->get_pagenum();
232
-		if ( 1 < $current_page ) {
233
-			$offset = $per_page * ( $current_page - 1 );
232
+		if (1 < $current_page) {
233
+			$offset = $per_page * ($current_page - 1);
234 234
 		} else {
235 235
 			$offset = 0;
236 236
 		}
@@ -248,7 +248,7 @@  discard block
 block discarded – undo
248 248
 	protected function get_items_query_offset() {
249 249
 		global $wpdb;
250 250
 
251
-		return $wpdb->prepare( 'OFFSET %d', $this->get_items_offset() );
251
+		return $wpdb->prepare('OFFSET %d', $this->get_items_offset());
252 252
 	}
253 253
 
254 254
 	/**
@@ -257,12 +257,12 @@  discard block
 block discarded – undo
257 257
 	 * column and sortable. It will also use order (ASC|DESC) using DESC by default.
258 258
 	 */
259 259
 	protected function get_items_query_order() {
260
-		if ( empty( $this->sort_by ) ) {
260
+		if (empty($this->sort_by)) {
261 261
 			return '';
262 262
 		}
263 263
 
264
-		$orderby = esc_sql( $this->get_request_orderby() );
265
-		$order   = esc_sql( $this->get_request_order() );
264
+		$orderby = esc_sql($this->get_request_orderby());
265
+		$order   = esc_sql($this->get_request_order());
266 266
 
267 267
 		return "ORDER BY {$orderby} {$order}";
268 268
 	}
@@ -274,10 +274,10 @@  discard block
 block discarded – undo
274 274
 	 */
275 275
 	protected function get_request_orderby() {
276 276
 
277
-		$valid_sortable_columns = array_values( $this->sort_by );
277
+		$valid_sortable_columns = array_values($this->sort_by);
278 278
 
279
-		if ( ! empty( $_GET['orderby'] ) && in_array( $_GET['orderby'], $valid_sortable_columns ) ) {
280
-			$orderby = sanitize_text_field( $_GET['orderby'] );
279
+		if (!empty($_GET['orderby']) && in_array($_GET['orderby'], $valid_sortable_columns)) {
280
+			$orderby = sanitize_text_field($_GET['orderby']);
281 281
 		} else {
282 282
 			$orderby = $valid_sortable_columns[0];
283 283
 		}
@@ -292,7 +292,7 @@  discard block
 block discarded – undo
292 292
 	 */
293 293
 	protected function get_request_order() {
294 294
 
295
-		if ( ! empty( $_GET['order'] ) && 'desc' === strtolower( $_GET['order'] ) ) {
295
+		if (!empty($_GET['order']) && 'desc' === strtolower($_GET['order'])) {
296 296
 			$order = 'DESC';
297 297
 		} else {
298 298
 			$order = 'ASC';
@@ -307,7 +307,7 @@  discard block
 block discarded – undo
307 307
 	 * @return string
308 308
 	 */
309 309
 	protected function get_request_status() {
310
-		$status = ( ! empty( $_GET['status'] ) ) ? $_GET['status'] : '';
310
+		$status = (!empty($_GET['status'])) ? $_GET['status'] : '';
311 311
 		return $status;
312 312
 	}
313 313
 
@@ -317,7 +317,7 @@  discard block
 block discarded – undo
317 317
 	 * @return string
318 318
 	 */
319 319
 	protected function get_request_search_query() {
320
-		$search_query = ( ! empty( $_GET['s'] ) ) ? $_GET['s'] : '';
320
+		$search_query = (!empty($_GET['s'])) ? $_GET['s'] : '';
321 321
 		return $search_query;
322 322
 	}
323 323
 
@@ -328,8 +328,8 @@  discard block
 block discarded – undo
328 328
 	 * @return array
329 329
 	 */
330 330
 	protected function get_table_columns() {
331
-		$columns = array_keys( $this->columns );
332
-		if ( ! in_array( $this->ID, $columns ) ) {
331
+		$columns = array_keys($this->columns);
332
+		if (!in_array($this->ID, $columns)) {
333 333
 			$columns[] = $this->ID;
334 334
 		}
335 335
 
@@ -351,15 +351,15 @@  discard block
 block discarded – undo
351 351
 	protected function get_items_query_search() {
352 352
 		global $wpdb;
353 353
 
354
-		if ( empty( $_GET['s'] ) || empty( $this->search_by ) ) {
354
+		if (empty($_GET['s']) || empty($this->search_by)) {
355 355
 			return '';
356 356
 		}
357 357
 
358
-		$filter  = array();
359
-		foreach ( $this->search_by as $column ) {
360
-			$filter[] = $wpdb->prepare('`' . $column . '` like "%%s%"', $wpdb->esc_like( $_GET['s'] ));
358
+		$filter = array();
359
+		foreach ($this->search_by as $column) {
360
+			$filter[] = $wpdb->prepare('`' . $column . '` like "%%s%"', $wpdb->esc_like($_GET['s']));
361 361
 		}
362
-		return implode( ' OR ', $filter );
362
+		return implode(' OR ', $filter);
363 363
 	}
364 364
 
365 365
 	/**
@@ -369,21 +369,21 @@  discard block
 block discarded – undo
369 369
 	protected function get_items_query_filters() {
370 370
 		global $wpdb;
371 371
 
372
-		if ( ! $this->filter_by || empty( $_GET['filter_by'] ) || ! is_array( $_GET['filter_by'] ) ) {
372
+		if (!$this->filter_by || empty($_GET['filter_by']) || !is_array($_GET['filter_by'])) {
373 373
 			return '';
374 374
 		}
375 375
 
376 376
 		$filter = array();
377 377
 
378
-		foreach ( $this->filter_by as $column => $options ) {
379
-			if ( empty( $_GET['filter_by'][ $column ] ) || empty( $options[ $_GET['filter_by'][ $column ] ] ) ) {
378
+		foreach ($this->filter_by as $column => $options) {
379
+			if (empty($_GET['filter_by'][$column]) || empty($options[$_GET['filter_by'][$column]])) {
380 380
 				continue;
381 381
 			}
382 382
 
383
-			$filter[] = $wpdb->prepare( "`$column` = %s", $_GET['filter_by'][ $column ] );
383
+			$filter[] = $wpdb->prepare("`$column` = %s", $_GET['filter_by'][$column]);
384 384
 		}
385 385
 
386
-		return implode( ' AND ', $filter );
386
+		return implode(' AND ', $filter);
387 387
 
388 388
 	}
389 389
 
@@ -403,9 +403,9 @@  discard block
 block discarded – undo
403 403
 
404 404
 		$this->process_row_actions();
405 405
 
406
-		if ( ! empty( $_REQUEST['_wp_http_referer'] ) ) {
406
+		if (!empty($_REQUEST['_wp_http_referer'])) {
407 407
 			// _wp_http_referer is used only on bulk actions, we remove it to keep the $_GET shorter
408
-			wp_redirect( remove_query_arg( array( '_wp_http_referer', '_wpnonce' ), wp_unslash( $_SERVER['REQUEST_URI'] ) ) );
408
+			wp_redirect(remove_query_arg(array('_wp_http_referer', '_wpnonce'), wp_unslash($_SERVER['REQUEST_URI'])));
409 409
 			exit;
410 410
 		}
411 411
 
@@ -418,53 +418,53 @@  discard block
 block discarded – undo
418 418
 			$this->get_items_query_search(),
419 419
 			$this->get_items_query_filters(),
420 420
 		));
421
-		$columns = '`' . implode( '`, `', $this->get_table_columns() ) . '`';
421
+		$columns = '`' . implode('`, `', $this->get_table_columns()) . '`';
422 422
 
423
-		if ( ! empty( $where ) ) {
424
-			$where = 'WHERE ('. implode( ') AND (', $where ) . ')';
423
+		if (!empty($where)) {
424
+			$where = 'WHERE (' . implode(') AND (', $where) . ')';
425 425
 		} else {
426 426
 			$where = '';
427 427
 		}
428 428
 
429 429
 		$sql = "SELECT $columns FROM {$this->table_name} {$where} {$order} {$limit} {$offset}";
430 430
 
431
-		$this->set_items( $wpdb->get_results( $sql, ARRAY_A ) );
431
+		$this->set_items($wpdb->get_results($sql, ARRAY_A));
432 432
 
433 433
 		$query_count = "SELECT COUNT({$this->ID}) FROM {$this->table_name} {$where}";
434
-		$total_items = $wpdb->get_var( $query_count );
435
-		$per_page    = $this->get_items_per_page( $this->package . '_items_per_page', $this->items_per_page );
436
-		$this->set_pagination_args( array(
434
+		$total_items = $wpdb->get_var($query_count);
435
+		$per_page    = $this->get_items_per_page($this->package . '_items_per_page', $this->items_per_page);
436
+		$this->set_pagination_args(array(
437 437
 			'total_items' => $total_items,
438 438
 			'per_page'    => $per_page,
439
-			'total_pages' => ceil( $total_items / $per_page ),
440
-		) );
439
+			'total_pages' => ceil($total_items / $per_page),
440
+		));
441 441
 	}
442 442
 
443
-	public function extra_tablenav( $which ) {
444
-		if ( ! $this->filter_by || 'top' !== $which ) {
443
+	public function extra_tablenav($which) {
444
+		if (!$this->filter_by || 'top' !== $which) {
445 445
 			return;
446 446
 		}
447 447
 
448 448
 		echo '<div class="alignleft actions">';
449 449
 
450
-		foreach ( $this->filter_by as $id => $options ) {
451
-			$default = ! empty( $_GET['filter_by'][ $id ] ) ? $_GET['filter_by'][ $id ] : '';
452
-			if ( empty( $options[ $default ] ) ) {
450
+		foreach ($this->filter_by as $id => $options) {
451
+			$default = !empty($_GET['filter_by'][$id]) ? $_GET['filter_by'][$id] : '';
452
+			if (empty($options[$default])) {
453 453
 				$default = '';
454 454
 			}
455 455
 
456
-			echo '<select name="filter_by[' . esc_attr( $id ) . ']" class="first" id="filter-by-' . esc_attr( $id ) . '">';
456
+			echo '<select name="filter_by[' . esc_attr($id) . ']" class="first" id="filter-by-' . esc_attr($id) . '">';
457 457
 
458
-			foreach ( $options as $value => $label ) {
459
-				echo '<option value="' . esc_attr( $value ) . '" ' . esc_html( $value == $default ? 'selected' : '' )  .'>'
460
-					. esc_html( $label )
458
+			foreach ($options as $value => $label) {
459
+				echo '<option value="' . esc_attr($value) . '" ' . esc_html($value == $default ? 'selected' : '') . '>'
460
+					. esc_html($label)
461 461
 				. '</option>';
462 462
 			}
463 463
 
464 464
 			echo '</select>';
465 465
 		}
466 466
 
467
-		submit_button( esc_html__( 'Filter', 'action-scheduler' ), '', 'filter_action', false, array( 'id' => 'post-query-submit' ) );
467
+		submit_button(esc_html__('Filter', 'action-scheduler'), '', 'filter_action', false, array('id' => 'post-query-submit'));
468 468
 		echo '</div>';
469 469
 	}
470 470
 
@@ -472,10 +472,10 @@  discard block
 block discarded – undo
472 472
 	 * Set the data for displaying. It will attempt to unserialize (There is a chance that some columns
473 473
 	 * are serialized). This can be override in child classes for futher data transformation.
474 474
 	 */
475
-	protected function set_items( array $items ) {
475
+	protected function set_items(array $items) {
476 476
 		$this->items = array();
477
-		foreach ( $items as $item ) {
478
-			$this->items[ $item[ $this->ID ] ] = array_map( 'maybe_unserialize', $item );
477
+		foreach ($items as $item) {
478
+			$this->items[$item[$this->ID]] = array_map('maybe_unserialize', $item);
479 479
 		}
480 480
 	}
481 481
 
@@ -484,8 +484,8 @@  discard block
 block discarded – undo
484 484
 	 * of how the primary key is named (to keep the code simpler). The bulk actions will do the proper
485 485
 	 * name transformation though using `$this->ID`.
486 486
 	 */
487
-	public function column_cb( $row ) {
488
-		return '<input name="ID[]" type="checkbox" value="' . esc_attr( $row[ $this->ID ] ) .'" />';
487
+	public function column_cb($row) {
488
+		return '<input name="ID[]" type="checkbox" value="' . esc_attr($row[$this->ID]) . '" />';
489 489
 	}
490 490
 
491 491
 	/**
@@ -498,62 +498,62 @@  discard block
 block discarded – undo
498 498
 	 * @param $column_name   Current row
499 499
 	 * @return
500 500
 	 */
501
-	protected function maybe_render_actions( $row, $column_name ) {
502
-		if ( empty( $this->row_actions[ $column_name ] ) ) {
501
+	protected function maybe_render_actions($row, $column_name) {
502
+		if (empty($this->row_actions[$column_name])) {
503 503
 			return;
504 504
 		}
505 505
 
506
-		$row_id = $row[ $this->ID ];
506
+		$row_id = $row[$this->ID];
507 507
 
508 508
 		$actions = '<div class="row-actions">';
509 509
 		$action_count = 0;
510
-		foreach ( $this->row_actions[ $column_name ] as $action_key => $action ) {
510
+		foreach ($this->row_actions[$column_name] as $action_key => $action) {
511 511
 
512 512
 			$action_count++;
513 513
 
514
-			if ( ! method_exists( $this, 'row_action_' . $action_key ) ) {
514
+			if (!method_exists($this, 'row_action_' . $action_key)) {
515 515
 				continue;
516 516
 			}
517 517
 
518
-			$action_link = ! empty( $action['link'] ) ? $action['link'] : add_query_arg( array( 'row_action' => $action_key, 'row_id' => $row_id, 'nonce'  => wp_create_nonce( $action_key . '::' . $row_id ) ) );
519
-			$span_class  = ! empty( $action['class'] ) ? $action['class'] : $action_key;
520
-			$separator   = ( $action_count < count( $this->row_actions[ $column_name ] ) ) ? ' | ' : '';
518
+			$action_link = !empty($action['link']) ? $action['link'] : add_query_arg(array('row_action' => $action_key, 'row_id' => $row_id, 'nonce'  => wp_create_nonce($action_key . '::' . $row_id)));
519
+			$span_class  = !empty($action['class']) ? $action['class'] : $action_key;
520
+			$separator   = ($action_count < count($this->row_actions[$column_name])) ? ' | ' : '';
521 521
 
522
-			$actions .= sprintf( '<span class="%s">', esc_attr( $span_class ) );
523
-			$actions .= sprintf( '<a href="%1$s" title="%2$s">%3$s</a>', esc_url( $action_link ), esc_attr( $action['desc'] ), esc_html( $action['name'] ) );
524
-			$actions .= sprintf( '%s</span>', $separator );
522
+			$actions .= sprintf('<span class="%s">', esc_attr($span_class));
523
+			$actions .= sprintf('<a href="%1$s" title="%2$s">%3$s</a>', esc_url($action_link), esc_attr($action['desc']), esc_html($action['name']));
524
+			$actions .= sprintf('%s</span>', $separator);
525 525
 		}
526 526
 		$actions .= '</div>';
527 527
 		return $actions;
528 528
 	}
529 529
 
530 530
 	protected function process_row_actions() {
531
-		$parameters = array( 'row_action', 'row_id', 'nonce' );
532
-		foreach ( $parameters as $parameter ) {
533
-			if ( empty( $_REQUEST[ $parameter ] ) ) {
531
+		$parameters = array('row_action', 'row_id', 'nonce');
532
+		foreach ($parameters as $parameter) {
533
+			if (empty($_REQUEST[$parameter])) {
534 534
 				return;
535 535
 			}
536 536
 		}
537 537
 
538 538
 		$method = 'row_action_' . $_REQUEST['row_action'];
539 539
 
540
-		if ( $_REQUEST['nonce'] === wp_create_nonce( $_REQUEST[ 'row_action' ] . '::' . $_REQUEST[ 'row_id' ] ) && method_exists( $this, $method ) ) {
541
-			$this->$method( $_REQUEST['row_id'] );
540
+		if ($_REQUEST['nonce'] === wp_create_nonce($_REQUEST['row_action'] . '::' . $_REQUEST['row_id']) && method_exists($this, $method)) {
541
+			$this->$method($_REQUEST['row_id']);
542 542
 		}
543 543
 
544
-		wp_redirect( remove_query_arg(
545
-			array( 'row_id', 'row_action', 'nonce' ),
546
-			wp_unslash( $_SERVER['REQUEST_URI'] )
547
-		) );
544
+		wp_redirect(remove_query_arg(
545
+			array('row_id', 'row_action', 'nonce'),
546
+			wp_unslash($_SERVER['REQUEST_URI'])
547
+		));
548 548
 		exit;
549 549
 	}
550 550
 
551 551
 	/**
552 552
 	 * Default column formatting, it will escape everythig for security.
553 553
 	 */
554
-	public function column_default( $item, $column_name ) {
555
-		$column_html = esc_html( $item[ $column_name ] );
556
-		$column_html .= $this->maybe_render_actions( $item, $column_name );
554
+	public function column_default($item, $column_name) {
555
+		$column_html = esc_html($item[$column_name]);
556
+		$column_html .= $this->maybe_render_actions($item, $column_name);
557 557
 		return $column_html;
558 558
 	}
559 559
 
@@ -561,10 +561,10 @@  discard block
 block discarded – undo
561 561
 	 * Display the table heading and search query, if any
562 562
 	 */
563 563
 	protected function display_header() {
564
-		echo '<h1 class="wp-heading-inline">' . esc_attr( $this->table_header ) . '</h1>';
565
-		if ( $this->get_request_search_query() ) {
564
+		echo '<h1 class="wp-heading-inline">' . esc_attr($this->table_header) . '</h1>';
565
+		if ($this->get_request_search_query()) {
566 566
 			/* translators: %s: search query */
567
-			echo '<span class="subtitle">' . esc_attr( sprintf( __( 'Search results for "%s"', 'action-scheduler' ), $this->get_request_search_query() ) ) . '</span>';
567
+			echo '<span class="subtitle">' . esc_attr(sprintf(__('Search results for "%s"', 'action-scheduler'), $this->get_request_search_query())) . '</span>';
568 568
 		}
569 569
 		echo '<hr class="wp-header-end">';
570 570
 	}
@@ -573,9 +573,9 @@  discard block
 block discarded – undo
573 573
 	 * Display the table heading and search query, if any
574 574
 	 */
575 575
 	protected function display_admin_notices() {
576
-		foreach ( $this->admin_notices as $notice ) {
576
+		foreach ($this->admin_notices as $notice) {
577 577
 			echo '<div id="message" class="' . $notice['class'] . '">';
578
-			echo '	<p>' . wp_kses_post( $notice['message'] ) . '</p>';
578
+			echo '	<p>' . wp_kses_post($notice['message']) . '</p>';
579 579
 			echo '</div>';
580 580
 		}
581 581
 	}
@@ -589,30 +589,30 @@  discard block
 block discarded – undo
589 589
 		$request_status    = $this->get_request_status();
590 590
 
591 591
 		// Helper to set 'all' filter when not set on status counts passed in
592
-		if ( ! isset( $this->status_counts['all'] ) ) {
593
-			$this->status_counts = array( 'all' => array_sum( $this->status_counts ) ) + $this->status_counts;
592
+		if (!isset($this->status_counts['all'])) {
593
+			$this->status_counts = array('all' => array_sum($this->status_counts)) + $this->status_counts;
594 594
 		}
595 595
 
596
-		foreach ( $this->status_counts as $status_name => $count ) {
596
+		foreach ($this->status_counts as $status_name => $count) {
597 597
 
598
-			if ( 0 === $count ) {
598
+			if (0 === $count) {
599 599
 				continue;
600 600
 			}
601 601
 
602
-			if ( $status_name === $request_status || ( empty( $request_status ) && 'all' === $status_name ) ) {
602
+			if ($status_name === $request_status || (empty($request_status) && 'all' === $status_name)) {
603 603
 				$status_list_item = '<li class="%1$s"><strong>%3$s</strong> (%4$d)</li>';
604 604
 			} else {
605 605
 				$status_list_item = '<li class="%1$s"><a href="%2$s">%3$s</a> (%4$d)</li>';
606 606
 			}
607 607
 
608
-			$status_filter_url   = ( 'all' === $status_name ) ? remove_query_arg( 'status' ) : add_query_arg( 'status', $status_name );
609
-			$status_filter_url   = remove_query_arg( array( 'paged', 's' ), $status_filter_url );
610
-			$status_list_items[] = sprintf( $status_list_item, esc_attr( $status_name ), esc_url( $status_filter_url ), esc_html( ucfirst( $status_name ) ), absint( $count ) );
608
+			$status_filter_url   = ('all' === $status_name) ? remove_query_arg('status') : add_query_arg('status', $status_name);
609
+			$status_filter_url   = remove_query_arg(array('paged', 's'), $status_filter_url);
610
+			$status_list_items[] = sprintf($status_list_item, esc_attr($status_name), esc_url($status_filter_url), esc_html(ucfirst($status_name)), absint($count));
611 611
 		}
612 612
 
613
-		if ( $status_list_items ) {
613
+		if ($status_list_items) {
614 614
 			echo '<ul class="subsubsub">';
615
-			echo implode( " | \n", $status_list_items );
615
+			echo implode(" | \n", $status_list_items);
616 616
 			echo '</ul>';
617 617
 		}
618 618
 	}
@@ -623,15 +623,15 @@  discard block
 block discarded – undo
623 623
 	 * forget about any extra HTML.
624 624
 	 */
625 625
 	protected function display_table() {
626
-		echo '<form id="' . esc_attr( $this->_args['plural'] ) . '-filter" method="get">';
627
-		foreach ( $_GET as $key => $value ) {
628
-			if ( '_' === $key[0] || 'paged' === $key ) {
626
+		echo '<form id="' . esc_attr($this->_args['plural']) . '-filter" method="get">';
627
+		foreach ($_GET as $key => $value) {
628
+			if ('_' === $key[0] || 'paged' === $key) {
629 629
 				continue;
630 630
 			}
631
-			echo '<input type="hidden" name="' . esc_attr( $key ) . '" value="' . esc_attr( $value ) . '" />';
631
+			echo '<input type="hidden" name="' . esc_attr($key) . '" value="' . esc_attr($value) . '" />';
632 632
 		}
633
-		if ( ! empty( $this->search_by ) ) {
634
-			echo $this->search_box( $this->get_search_box_button_text(), 'plugin' ); // WPCS: XSS OK
633
+		if (!empty($this->search_by)) {
634
+			echo $this->search_box($this->get_search_box_button_text(), 'plugin'); // WPCS: XSS OK
635 635
 		}
636 636
 		parent::display();
637 637
 		echo '</form>';
@@ -644,9 +644,9 @@  discard block
 block discarded – undo
644 644
 		$this->process_bulk_action();
645 645
 		$this->process_row_actions();
646 646
 
647
-		if ( ! empty( $_REQUEST['_wp_http_referer'] ) ) {
647
+		if (!empty($_REQUEST['_wp_http_referer'])) {
648 648
 			// _wp_http_referer is used only on bulk actions, we remove it to keep the $_GET shorter
649
-			wp_redirect( remove_query_arg( array( '_wp_http_referer', '_wpnonce' ), wp_unslash( $_SERVER['REQUEST_URI'] ) ) );
649
+			wp_redirect(remove_query_arg(array('_wp_http_referer', '_wpnonce'), wp_unslash($_SERVER['REQUEST_URI'])));
650 650
 			exit;
651 651
 		}
652 652
 	}
@@ -669,6 +669,6 @@  discard block
 block discarded – undo
669 669
 	 * Get the text to display in the search box on the list table.
670 670
 	 */
671 671
 	protected function get_search_box_placeholder() {
672
-		return esc_html__( 'Search', 'action-scheduler' );
672
+		return esc_html__('Search', 'action-scheduler');
673 673
 	}
674 674
 }
Please login to merge, or discard this patch.
classes/abstracts/ActionScheduler_Abstract_RecurringSchedule.php 2 patches
Indentation   +86 added lines, -86 removed lines patch added patch discarded remove patch
@@ -5,98 +5,98 @@
 block discarded – undo
5 5
  */
6 6
 abstract class ActionScheduler_Abstract_RecurringSchedule extends ActionScheduler_Abstract_Schedule {
7 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;
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 19
 
20
-	/**
21
-	 * Timestamp equivalent of @see $this->first_date
22
-	 *
23
-	 * @var int
24
-	 */
25
-	protected $first_timestamp = NULL;
20
+    /**
21
+     * Timestamp equivalent of @see $this->first_date
22
+     *
23
+     * @var int
24
+     */
25
+    protected $first_timestamp = NULL;
26 26
 
27
-	/**
28
-	 * The recurrance 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;
27
+    /**
28
+     * The recurrance 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 36
 
37
-	/**
38
-	 * @param DateTime $date The date & time to run the action.
39
-	 * @param mixed $recurrence The data used to determine the schedule's recurrance.
40
-	 * @param DateTime|null $first (Optional) The date & time the first instance of this interval schedule ran. Default null, meaning this is the first instance.
41
-	 */
42
-	public function __construct( DateTime $date, $recurrence, DateTime $first = null ) {
43
-		parent::__construct( $date );
44
-		$this->first_date = empty( $first ) ? $date : $first;
45
-		$this->recurrence = $recurrence;
46
-	}
37
+    /**
38
+     * @param DateTime $date The date & time to run the action.
39
+     * @param mixed $recurrence The data used to determine the schedule's recurrance.
40
+     * @param DateTime|null $first (Optional) The date & time the first instance of this interval schedule ran. Default null, meaning this is the first instance.
41
+     */
42
+    public function __construct( DateTime $date, $recurrence, DateTime $first = null ) {
43
+        parent::__construct( $date );
44
+        $this->first_date = empty( $first ) ? $date : $first;
45
+        $this->recurrence = $recurrence;
46
+    }
47 47
 
48
-	/**
49
-	 * @return bool
50
-	 */
51
-	public function is_recurring() {
52
-		return true;
53
-	}
48
+    /**
49
+     * @return bool
50
+     */
51
+    public function is_recurring() {
52
+        return true;
53
+    }
54 54
 
55
-	/**
56
-	 * Get the date & time of the first schedule in this recurring series.
57
-	 *
58
-	 * @return DateTime|null
59
-	 */
60
-	public function get_first_date() {
61
-		return clone $this->first_date;
62
-	}
55
+    /**
56
+     * Get the date & time of the first schedule in this recurring series.
57
+     *
58
+     * @return DateTime|null
59
+     */
60
+    public function get_first_date() {
61
+        return clone $this->first_date;
62
+    }
63 63
 
64
-	/**
65
-	 * @return string
66
-	 */
67
-	public function get_recurrence() {
68
-		return $this->recurrence;
69
-	}
64
+    /**
65
+     * @return string
66
+     */
67
+    public function get_recurrence() {
68
+        return $this->recurrence;
69
+    }
70 70
 
71
-	/**
72
-	 * For PHP 5.2 compat, since DateTime objects can't be serialized
73
-	 * @return array
74
-	 */
75
-	public function __sleep() {
76
-		$sleep_params = parent::__sleep();
77
-		$this->first_timestamp = $this->first_date->getTimestamp();
78
-		return array_merge( $sleep_params, array(
79
-			'first_timestamp',
80
-			'recurrence'
81
-		) );
82
-	}
71
+    /**
72
+     * For PHP 5.2 compat, since DateTime objects can't be serialized
73
+     * @return array
74
+     */
75
+    public function __sleep() {
76
+        $sleep_params = parent::__sleep();
77
+        $this->first_timestamp = $this->first_date->getTimestamp();
78
+        return array_merge( $sleep_params, array(
79
+            'first_timestamp',
80
+            'recurrence'
81
+        ) );
82
+    }
83 83
 
84
-	/**
85
-	 * Unserialize recurring schedules serialized/stored prior to AS 3.0.0
86
-	 *
87
-	 * Prior to Action Scheduler 3.0.0, schedules used different property names to refer
88
-	 * to equivalent data. For example, ActionScheduler_IntervalSchedule::start_timestamp
89
-	 * was the same as ActionScheduler_SimpleSchedule::timestamp. This was addressed in
90
-	 * Action Scheduler 3.0.0, where properties and property names were aligned for better
91
-	 * inheritance. To maintain backward compatibility with scheduled serialized and stored
92
-	 * prior to 3.0, we need to correctly map the old property names.
93
-	 */
94
-	public function __wakeup() {
95
-		parent::__wakeup();
96
-		if ( $this->first_timestamp > 0 ) {
97
-			$this->first_date = as_get_datetime_object( $this->first_timestamp );
98
-		} else {
99
-			$this->first_date = $this->get_date();
100
-		}
101
-	}
84
+    /**
85
+     * Unserialize recurring schedules serialized/stored prior to AS 3.0.0
86
+     *
87
+     * Prior to Action Scheduler 3.0.0, schedules used different property names to refer
88
+     * to equivalent data. For example, ActionScheduler_IntervalSchedule::start_timestamp
89
+     * was the same as ActionScheduler_SimpleSchedule::timestamp. This was addressed in
90
+     * Action Scheduler 3.0.0, where properties and property names were aligned for better
91
+     * inheritance. To maintain backward compatibility with scheduled serialized and stored
92
+     * prior to 3.0, we need to correctly map the old property names.
93
+     */
94
+    public function __wakeup() {
95
+        parent::__wakeup();
96
+        if ( $this->first_timestamp > 0 ) {
97
+            $this->first_date = as_get_datetime_object( $this->first_timestamp );
98
+        } else {
99
+            $this->first_date = $this->get_date();
100
+        }
101
+    }
102 102
 }
Please login to merge, or discard this patch.
Spacing   +7 added lines, -7 removed lines patch added patch discarded remove patch
@@ -39,9 +39,9 @@  discard block
 block discarded – undo
39 39
 	 * @param mixed $recurrence The data used to determine the schedule's recurrance.
40 40
 	 * @param DateTime|null $first (Optional) The date & time the first instance of this interval schedule ran. Default null, meaning this is the first instance.
41 41
 	 */
42
-	public function __construct( DateTime $date, $recurrence, DateTime $first = null ) {
43
-		parent::__construct( $date );
44
-		$this->first_date = empty( $first ) ? $date : $first;
42
+	public function __construct(DateTime $date, $recurrence, DateTime $first = null) {
43
+		parent::__construct($date);
44
+		$this->first_date = empty($first) ? $date : $first;
45 45
 		$this->recurrence = $recurrence;
46 46
 	}
47 47
 
@@ -75,10 +75,10 @@  discard block
 block discarded – undo
75 75
 	public function __sleep() {
76 76
 		$sleep_params = parent::__sleep();
77 77
 		$this->first_timestamp = $this->first_date->getTimestamp();
78
-		return array_merge( $sleep_params, array(
78
+		return array_merge($sleep_params, array(
79 79
 			'first_timestamp',
80 80
 			'recurrence'
81
-		) );
81
+		));
82 82
 	}
83 83
 
84 84
 	/**
@@ -93,8 +93,8 @@  discard block
 block discarded – undo
93 93
 	 */
94 94
 	public function __wakeup() {
95 95
 		parent::__wakeup();
96
-		if ( $this->first_timestamp > 0 ) {
97
-			$this->first_date = as_get_datetime_object( $this->first_timestamp );
96
+		if ($this->first_timestamp > 0) {
97
+			$this->first_date = as_get_datetime_object($this->first_timestamp);
98 98
 		} else {
99 99
 			$this->first_date = $this->get_date();
100 100
 		}
Please login to merge, or discard this patch.
action-scheduler/classes/abstracts/ActionScheduler_TimezoneHelper.php 2 patches
Indentation   +145 added lines, -145 removed lines patch added patch discarded remove patch
@@ -4,149 +4,149 @@
 block discarded – undo
4 4
  * Class ActionScheduler_TimezoneHelper
5 5
  */
6 6
 abstract class ActionScheduler_TimezoneHelper {
7
-	private static $local_timezone = NULL;
8
-
9
-	/**
10
-	 * Set a DateTime's timezone to the WordPress site's timezone, or a UTC offset
11
-	 * if no timezone string is available.
12
-	 *
13
-	 * @since  2.1.0
14
-	 *
15
-	 * @param DateTime $date
16
-	 * @return ActionScheduler_DateTime
17
-	 */
18
-	public static function set_local_timezone( DateTime $date ) {
19
-
20
-		// Accept a DateTime for easier backward compatibility, even though we require methods on ActionScheduler_DateTime
21
-		if ( ! is_a( $date, 'ActionScheduler_DateTime' ) ) {
22
-			$date = as_get_datetime_object( $date->format( 'U' ) );
23
-		}
24
-
25
-		if ( get_option( 'timezone_string' ) ) {
26
-			$date->setTimezone( new DateTimeZone( self::get_local_timezone_string() ) );
27
-		} else {
28
-			$date->setUtcOffset( self::get_local_timezone_offset() );
29
-		}
30
-
31
-		return $date;
32
-	}
33
-
34
-	/**
35
-	 * Helper to retrieve the timezone string for a site until a WP core method exists
36
-	 * (see https://core.trac.wordpress.org/ticket/24730).
37
-	 *
38
-	 * Adapted from wc_timezone_string() and https://secure.php.net/manual/en/function.timezone-name-from-abbr.php#89155.
39
-	 *
40
-	 * If no timezone string is set, and its not possible to match the UTC offset set for the site to a timezone
41
-	 * string, then an empty string will be returned, and the UTC offset should be used to set a DateTime's
42
-	 * timezone.
43
-	 *
44
-	 * @since 2.1.0
45
-	 * @return string PHP timezone string for the site or empty if no timezone string is available.
46
-	 */
47
-	protected static function get_local_timezone_string( $reset = false ) {
48
-		// If site timezone string exists, return it.
49
-		$timezone = get_option( 'timezone_string' );
50
-		if ( $timezone ) {
51
-			return $timezone;
52
-		}
53
-
54
-		// Get UTC offset, if it isn't set then return UTC.
55
-		$utc_offset = intval( get_option( 'gmt_offset', 0 ) );
56
-		if ( 0 === $utc_offset ) {
57
-			return 'UTC';
58
-		}
59
-
60
-		// Adjust UTC offset from hours to seconds.
61
-		$utc_offset *= 3600;
62
-
63
-		// Attempt to guess the timezone string from the UTC offset.
64
-		$timezone = timezone_name_from_abbr( '', $utc_offset );
65
-		if ( $timezone ) {
66
-			return $timezone;
67
-		}
68
-
69
-		// Last try, guess timezone string manually.
70
-		foreach ( timezone_abbreviations_list() as $abbr ) {
71
-			foreach ( $abbr as $city ) {
72
-				if ( (bool) date( 'I' ) === (bool) $city['dst'] && $city['timezone_id'] && intval( $city['offset'] ) === $utc_offset ) {
73
-					return $city['timezone_id'];
74
-				}
75
-			}
76
-		}
77
-
78
-		// No timezone string
79
-		return '';
80
-	}
81
-
82
-	/**
83
-	 * Get timezone offset in seconds.
84
-	 *
85
-	 * @since  2.1.0
86
-	 * @return float
87
-	 */
88
-	protected static function get_local_timezone_offset() {
89
-		$timezone = get_option( 'timezone_string' );
90
-
91
-		if ( $timezone ) {
92
-			$timezone_object = new DateTimeZone( $timezone );
93
-			return $timezone_object->getOffset( new DateTime( 'now' ) );
94
-		} else {
95
-			return floatval( get_option( 'gmt_offset', 0 ) ) * HOUR_IN_SECONDS;
96
-		}
97
-	}
98
-
99
-	/**
100
-	 * @deprecated 2.1.0
101
-	 */
102
-	public static function get_local_timezone( $reset = FALSE ) {
103
-		_deprecated_function( __FUNCTION__, '2.1.0', 'ActionScheduler_TimezoneHelper::set_local_timezone()' );
104
-		if ( $reset ) {
105
-			self::$local_timezone = NULL;
106
-		}
107
-		if ( !isset(self::$local_timezone) ) {
108
-			$tzstring = get_option('timezone_string');
109
-
110
-			if ( empty($tzstring) ) {
111
-				$gmt_offset = get_option('gmt_offset');
112
-				if ( $gmt_offset == 0 ) {
113
-					$tzstring = 'UTC';
114
-				} else {
115
-					$gmt_offset *= HOUR_IN_SECONDS;
116
-					$tzstring   = timezone_name_from_abbr( '', $gmt_offset, 1 );
117
-
118
-					// If there's no timezone string, try again with no DST.
119
-					if ( false === $tzstring ) {
120
-						$tzstring = timezone_name_from_abbr( '', $gmt_offset, 0 );
121
-					}
122
-
123
-					// Try mapping to the first abbreviation we can find.
124
-					if ( false === $tzstring ) {
125
-						$is_dst = date( 'I' );
126
-						foreach ( timezone_abbreviations_list() as $abbr ) {
127
-							foreach ( $abbr as $city ) {
128
-								if ( $city['dst'] == $is_dst && $city['offset'] == $gmt_offset ) {
129
-									// If there's no valid timezone ID, keep looking.
130
-									if ( null === $city['timezone_id'] ) {
131
-										continue;
132
-									}
133
-
134
-									$tzstring = $city['timezone_id'];
135
-									break 2;
136
-								}
137
-							}
138
-						}
139
-					}
140
-
141
-					// If we still have no valid string, then fall back to UTC.
142
-					if ( false === $tzstring ) {
143
-						$tzstring = 'UTC';
144
-					}
145
-				}
146
-			}
147
-
148
-			self::$local_timezone = new DateTimeZone($tzstring);
149
-		}
150
-		return self::$local_timezone;
151
-	}
7
+    private static $local_timezone = NULL;
8
+
9
+    /**
10
+     * Set a DateTime's timezone to the WordPress site's timezone, or a UTC offset
11
+     * if no timezone string is available.
12
+     *
13
+     * @since  2.1.0
14
+     *
15
+     * @param DateTime $date
16
+     * @return ActionScheduler_DateTime
17
+     */
18
+    public static function set_local_timezone( DateTime $date ) {
19
+
20
+        // Accept a DateTime for easier backward compatibility, even though we require methods on ActionScheduler_DateTime
21
+        if ( ! is_a( $date, 'ActionScheduler_DateTime' ) ) {
22
+            $date = as_get_datetime_object( $date->format( 'U' ) );
23
+        }
24
+
25
+        if ( get_option( 'timezone_string' ) ) {
26
+            $date->setTimezone( new DateTimeZone( self::get_local_timezone_string() ) );
27
+        } else {
28
+            $date->setUtcOffset( self::get_local_timezone_offset() );
29
+        }
30
+
31
+        return $date;
32
+    }
33
+
34
+    /**
35
+     * Helper to retrieve the timezone string for a site until a WP core method exists
36
+     * (see https://core.trac.wordpress.org/ticket/24730).
37
+     *
38
+     * Adapted from wc_timezone_string() and https://secure.php.net/manual/en/function.timezone-name-from-abbr.php#89155.
39
+     *
40
+     * If no timezone string is set, and its not possible to match the UTC offset set for the site to a timezone
41
+     * string, then an empty string will be returned, and the UTC offset should be used to set a DateTime's
42
+     * timezone.
43
+     *
44
+     * @since 2.1.0
45
+     * @return string PHP timezone string for the site or empty if no timezone string is available.
46
+     */
47
+    protected static function get_local_timezone_string( $reset = false ) {
48
+        // If site timezone string exists, return it.
49
+        $timezone = get_option( 'timezone_string' );
50
+        if ( $timezone ) {
51
+            return $timezone;
52
+        }
53
+
54
+        // Get UTC offset, if it isn't set then return UTC.
55
+        $utc_offset = intval( get_option( 'gmt_offset', 0 ) );
56
+        if ( 0 === $utc_offset ) {
57
+            return 'UTC';
58
+        }
59
+
60
+        // Adjust UTC offset from hours to seconds.
61
+        $utc_offset *= 3600;
62
+
63
+        // Attempt to guess the timezone string from the UTC offset.
64
+        $timezone = timezone_name_from_abbr( '', $utc_offset );
65
+        if ( $timezone ) {
66
+            return $timezone;
67
+        }
68
+
69
+        // Last try, guess timezone string manually.
70
+        foreach ( timezone_abbreviations_list() as $abbr ) {
71
+            foreach ( $abbr as $city ) {
72
+                if ( (bool) date( 'I' ) === (bool) $city['dst'] && $city['timezone_id'] && intval( $city['offset'] ) === $utc_offset ) {
73
+                    return $city['timezone_id'];
74
+                }
75
+            }
76
+        }
77
+
78
+        // No timezone string
79
+        return '';
80
+    }
81
+
82
+    /**
83
+     * Get timezone offset in seconds.
84
+     *
85
+     * @since  2.1.0
86
+     * @return float
87
+     */
88
+    protected static function get_local_timezone_offset() {
89
+        $timezone = get_option( 'timezone_string' );
90
+
91
+        if ( $timezone ) {
92
+            $timezone_object = new DateTimeZone( $timezone );
93
+            return $timezone_object->getOffset( new DateTime( 'now' ) );
94
+        } else {
95
+            return floatval( get_option( 'gmt_offset', 0 ) ) * HOUR_IN_SECONDS;
96
+        }
97
+    }
98
+
99
+    /**
100
+     * @deprecated 2.1.0
101
+     */
102
+    public static function get_local_timezone( $reset = FALSE ) {
103
+        _deprecated_function( __FUNCTION__, '2.1.0', 'ActionScheduler_TimezoneHelper::set_local_timezone()' );
104
+        if ( $reset ) {
105
+            self::$local_timezone = NULL;
106
+        }
107
+        if ( !isset(self::$local_timezone) ) {
108
+            $tzstring = get_option('timezone_string');
109
+
110
+            if ( empty($tzstring) ) {
111
+                $gmt_offset = get_option('gmt_offset');
112
+                if ( $gmt_offset == 0 ) {
113
+                    $tzstring = 'UTC';
114
+                } else {
115
+                    $gmt_offset *= HOUR_IN_SECONDS;
116
+                    $tzstring   = timezone_name_from_abbr( '', $gmt_offset, 1 );
117
+
118
+                    // If there's no timezone string, try again with no DST.
119
+                    if ( false === $tzstring ) {
120
+                        $tzstring = timezone_name_from_abbr( '', $gmt_offset, 0 );
121
+                    }
122
+
123
+                    // Try mapping to the first abbreviation we can find.
124
+                    if ( false === $tzstring ) {
125
+                        $is_dst = date( 'I' );
126
+                        foreach ( timezone_abbreviations_list() as $abbr ) {
127
+                            foreach ( $abbr as $city ) {
128
+                                if ( $city['dst'] == $is_dst && $city['offset'] == $gmt_offset ) {
129
+                                    // If there's no valid timezone ID, keep looking.
130
+                                    if ( null === $city['timezone_id'] ) {
131
+                                        continue;
132
+                                    }
133
+
134
+                                    $tzstring = $city['timezone_id'];
135
+                                    break 2;
136
+                                }
137
+                            }
138
+                        }
139
+                    }
140
+
141
+                    // If we still have no valid string, then fall back to UTC.
142
+                    if ( false === $tzstring ) {
143
+                        $tzstring = 'UTC';
144
+                    }
145
+                }
146
+            }
147
+
148
+            self::$local_timezone = new DateTimeZone($tzstring);
149
+        }
150
+        return self::$local_timezone;
151
+    }
152 152
 }
Please login to merge, or discard this patch.
Spacing   +37 added lines, -37 removed lines patch added patch discarded remove patch
@@ -15,17 +15,17 @@  discard block
 block discarded – undo
15 15
 	 * @param DateTime $date
16 16
 	 * @return ActionScheduler_DateTime
17 17
 	 */
18
-	public static function set_local_timezone( DateTime $date ) {
18
+	public static function set_local_timezone(DateTime $date) {
19 19
 
20 20
 		// Accept a DateTime for easier backward compatibility, even though we require methods on ActionScheduler_DateTime
21
-		if ( ! is_a( $date, 'ActionScheduler_DateTime' ) ) {
22
-			$date = as_get_datetime_object( $date->format( 'U' ) );
21
+		if (!is_a($date, 'ActionScheduler_DateTime')) {
22
+			$date = as_get_datetime_object($date->format('U'));
23 23
 		}
24 24
 
25
-		if ( get_option( 'timezone_string' ) ) {
26
-			$date->setTimezone( new DateTimeZone( self::get_local_timezone_string() ) );
25
+		if (get_option('timezone_string')) {
26
+			$date->setTimezone(new DateTimeZone(self::get_local_timezone_string()));
27 27
 		} else {
28
-			$date->setUtcOffset( self::get_local_timezone_offset() );
28
+			$date->setUtcOffset(self::get_local_timezone_offset());
29 29
 		}
30 30
 
31 31
 		return $date;
@@ -44,16 +44,16 @@  discard block
 block discarded – undo
44 44
 	 * @since 2.1.0
45 45
 	 * @return string PHP timezone string for the site or empty if no timezone string is available.
46 46
 	 */
47
-	protected static function get_local_timezone_string( $reset = false ) {
47
+	protected static function get_local_timezone_string($reset = false) {
48 48
 		// If site timezone string exists, return it.
49
-		$timezone = get_option( 'timezone_string' );
50
-		if ( $timezone ) {
49
+		$timezone = get_option('timezone_string');
50
+		if ($timezone) {
51 51
 			return $timezone;
52 52
 		}
53 53
 
54 54
 		// Get UTC offset, if it isn't set then return UTC.
55
-		$utc_offset = intval( get_option( 'gmt_offset', 0 ) );
56
-		if ( 0 === $utc_offset ) {
55
+		$utc_offset = intval(get_option('gmt_offset', 0));
56
+		if (0 === $utc_offset) {
57 57
 			return 'UTC';
58 58
 		}
59 59
 
@@ -61,15 +61,15 @@  discard block
 block discarded – undo
61 61
 		$utc_offset *= 3600;
62 62
 
63 63
 		// Attempt to guess the timezone string from the UTC offset.
64
-		$timezone = timezone_name_from_abbr( '', $utc_offset );
65
-		if ( $timezone ) {
64
+		$timezone = timezone_name_from_abbr('', $utc_offset);
65
+		if ($timezone) {
66 66
 			return $timezone;
67 67
 		}
68 68
 
69 69
 		// Last try, guess timezone string manually.
70
-		foreach ( timezone_abbreviations_list() as $abbr ) {
71
-			foreach ( $abbr as $city ) {
72
-				if ( (bool) date( 'I' ) === (bool) $city['dst'] && $city['timezone_id'] && intval( $city['offset'] ) === $utc_offset ) {
70
+		foreach (timezone_abbreviations_list() as $abbr) {
71
+			foreach ($abbr as $city) {
72
+				if ((bool) date('I') === (bool) $city['dst'] && $city['timezone_id'] && intval($city['offset']) === $utc_offset) {
73 73
 					return $city['timezone_id'];
74 74
 				}
75 75
 			}
@@ -86,48 +86,48 @@  discard block
 block discarded – undo
86 86
 	 * @return float
87 87
 	 */
88 88
 	protected static function get_local_timezone_offset() {
89
-		$timezone = get_option( 'timezone_string' );
89
+		$timezone = get_option('timezone_string');
90 90
 
91
-		if ( $timezone ) {
92
-			$timezone_object = new DateTimeZone( $timezone );
93
-			return $timezone_object->getOffset( new DateTime( 'now' ) );
91
+		if ($timezone) {
92
+			$timezone_object = new DateTimeZone($timezone);
93
+			return $timezone_object->getOffset(new DateTime('now'));
94 94
 		} else {
95
-			return floatval( get_option( 'gmt_offset', 0 ) ) * HOUR_IN_SECONDS;
95
+			return floatval(get_option('gmt_offset', 0)) * HOUR_IN_SECONDS;
96 96
 		}
97 97
 	}
98 98
 
99 99
 	/**
100 100
 	 * @deprecated 2.1.0
101 101
 	 */
102
-	public static function get_local_timezone( $reset = FALSE ) {
103
-		_deprecated_function( __FUNCTION__, '2.1.0', 'ActionScheduler_TimezoneHelper::set_local_timezone()' );
104
-		if ( $reset ) {
102
+	public static function get_local_timezone($reset = FALSE) {
103
+		_deprecated_function(__FUNCTION__, '2.1.0', 'ActionScheduler_TimezoneHelper::set_local_timezone()');
104
+		if ($reset) {
105 105
 			self::$local_timezone = NULL;
106 106
 		}
107
-		if ( !isset(self::$local_timezone) ) {
107
+		if (!isset(self::$local_timezone)) {
108 108
 			$tzstring = get_option('timezone_string');
109 109
 
110
-			if ( empty($tzstring) ) {
110
+			if (empty($tzstring)) {
111 111
 				$gmt_offset = get_option('gmt_offset');
112
-				if ( $gmt_offset == 0 ) {
112
+				if ($gmt_offset == 0) {
113 113
 					$tzstring = 'UTC';
114 114
 				} else {
115 115
 					$gmt_offset *= HOUR_IN_SECONDS;
116
-					$tzstring   = timezone_name_from_abbr( '', $gmt_offset, 1 );
116
+					$tzstring = timezone_name_from_abbr('', $gmt_offset, 1);
117 117
 
118 118
 					// If there's no timezone string, try again with no DST.
119
-					if ( false === $tzstring ) {
120
-						$tzstring = timezone_name_from_abbr( '', $gmt_offset, 0 );
119
+					if (false === $tzstring) {
120
+						$tzstring = timezone_name_from_abbr('', $gmt_offset, 0);
121 121
 					}
122 122
 
123 123
 					// Try mapping to the first abbreviation we can find.
124
-					if ( false === $tzstring ) {
125
-						$is_dst = date( 'I' );
126
-						foreach ( timezone_abbreviations_list() as $abbr ) {
127
-							foreach ( $abbr as $city ) {
128
-								if ( $city['dst'] == $is_dst && $city['offset'] == $gmt_offset ) {
124
+					if (false === $tzstring) {
125
+						$is_dst = date('I');
126
+						foreach (timezone_abbreviations_list() as $abbr) {
127
+							foreach ($abbr as $city) {
128
+								if ($city['dst'] == $is_dst && $city['offset'] == $gmt_offset) {
129 129
 									// If there's no valid timezone ID, keep looking.
130
-									if ( null === $city['timezone_id'] ) {
130
+									if (null === $city['timezone_id']) {
131 131
 										continue;
132 132
 									}
133 133
 
@@ -139,7 +139,7 @@  discard block
 block discarded – undo
139 139
 					}
140 140
 
141 141
 					// If we still have no valid string, then fall back to UTC.
142
-					if ( false === $tzstring ) {
142
+					if (false === $tzstring) {
143 143
 						$tzstring = 'UTC';
144 144
 					}
145 145
 				}
Please login to merge, or discard this patch.
libraries/action-scheduler/classes/abstracts/ActionScheduler_Store.php 2 patches
Indentation   +337 added lines, -337 removed lines patch added patch discarded remove patch
@@ -5,341 +5,341 @@
 block discarded – undo
5 5
  * @codeCoverageIgnore
6 6
  */
7 7
 abstract class ActionScheduler_Store extends ActionScheduler_Store_Deprecated {
8
-	const STATUS_COMPLETE = 'complete';
9
-	const STATUS_PENDING  = 'pending';
10
-	const STATUS_RUNNING  = 'in-progress';
11
-	const STATUS_FAILED   = 'failed';
12
-	const STATUS_CANCELED = 'canceled';
13
-	const DEFAULT_CLASS   = 'ActionScheduler_wpPostStore';
14
-
15
-	/** @var ActionScheduler_Store */
16
-	private static $store = NULL;
17
-
18
-	/** @var int */
19
-	protected static $max_args_length = 191;
20
-
21
-	/**
22
-	 * @param ActionScheduler_Action $action
23
-	 * @param DateTime $scheduled_date Optional Date of the first instance
24
-	 *        to store. Otherwise uses the first date of the action's
25
-	 *        schedule.
26
-	 *
27
-	 * @return string The action ID
28
-	 */
29
-	abstract public function save_action( ActionScheduler_Action $action, DateTime $scheduled_date = NULL );
30
-
31
-	/**
32
-	 * @param string $action_id
33
-	 *
34
-	 * @return ActionScheduler_Action
35
-	 */
36
-	abstract public function fetch_action( $action_id );
37
-
38
-	/**
39
-	 * @param string $hook Hook name/slug.
40
-	 * @param array  $params Hook arguments.
41
-	 * @return string ID of the next action matching the criteria.
42
-	 */
43
-	abstract public function find_action( $hook, $params = array() );
44
-
45
-	/**
46
-	 * @param array  $query Query parameters.
47
-	 * @param string $query_type Whether to select or count the results. Default, select.
48
-	 *
49
-	 * @return array|int The IDs of or count of actions matching the query.
50
-	 */
51
-	abstract public function query_actions( $query = array(), $query_type = 'select' );
52
-
53
-	/**
54
-	 * Get a count of all actions in the store, grouped by status
55
-	 *
56
-	 * @return array
57
-	 */
58
-	abstract public function action_counts();
59
-
60
-	/**
61
-	 * @param string $action_id
62
-	 */
63
-	abstract public function cancel_action( $action_id );
64
-
65
-	/**
66
-	 * @param string $action_id
67
-	 */
68
-	abstract public function delete_action( $action_id );
69
-
70
-	/**
71
-	 * @param string $action_id
72
-	 *
73
-	 * @return DateTime The date the action is schedule to run, or the date that it ran.
74
-	 */
75
-	abstract public function get_date( $action_id );
76
-
77
-
78
-	/**
79
-	 * @param int      $max_actions
80
-	 * @param DateTime $before_date Claim only actions schedule before the given date. Defaults to now.
81
-	 * @param array    $hooks       Claim only actions with a hook or hooks.
82
-	 * @param string   $group       Claim only actions in the given group.
83
-	 *
84
-	 * @return ActionScheduler_ActionClaim
85
-	 */
86
-	abstract public function stake_claim( $max_actions = 10, DateTime $before_date = null, $hooks = array(), $group = '' );
87
-
88
-	/**
89
-	 * @return int
90
-	 */
91
-	abstract public function get_claim_count();
92
-
93
-	/**
94
-	 * @param ActionScheduler_ActionClaim $claim
95
-	 */
96
-	abstract public function release_claim( ActionScheduler_ActionClaim $claim );
97
-
98
-	/**
99
-	 * @param string $action_id
100
-	 */
101
-	abstract public function unclaim_action( $action_id );
102
-
103
-	/**
104
-	 * @param string $action_id
105
-	 */
106
-	abstract public function mark_failure( $action_id );
107
-
108
-	/**
109
-	 * @param string $action_id
110
-	 */
111
-	abstract public function log_execution( $action_id );
112
-
113
-	/**
114
-	 * @param string $action_id
115
-	 */
116
-	abstract public function mark_complete( $action_id );
117
-
118
-	/**
119
-	 * @param string $action_id
120
-	 *
121
-	 * @return string
122
-	 */
123
-	abstract public function get_status( $action_id );
124
-
125
-	/**
126
-	 * @param string $action_id
127
-	 * @return mixed
128
-	 */
129
-	abstract public function get_claim_id( $action_id );
130
-
131
-	/**
132
-	 * @param string $claim_id
133
-	 * @return array
134
-	 */
135
-	abstract public function find_actions_by_claim_id( $claim_id );
136
-
137
-	/**
138
-	 * @param string $comparison_operator
139
-	 * @return string
140
-	 */
141
-	protected function validate_sql_comparator( $comparison_operator ) {
142
-		if ( in_array( $comparison_operator, array('!=', '>', '>=', '<', '<=', '=') ) ) {
143
-			return $comparison_operator;
144
-		}
145
-		return '=';
146
-	}
147
-
148
-	/**
149
-	 * Get the time MySQL formated date/time string for an action's (next) scheduled date.
150
-	 *
151
-	 * @param ActionScheduler_Action $action
152
-	 * @param DateTime $scheduled_date (optional)
153
-	 * @return string
154
-	 */
155
-	protected function get_scheduled_date_string( ActionScheduler_Action $action, DateTime $scheduled_date = NULL ) {
156
-		$next = null === $scheduled_date ? $action->get_schedule()->get_date() : $scheduled_date;
157
-		if ( ! $next ) {
158
-			return '0000-00-00 00:00:00';
159
-		}
160
-		$next->setTimezone( new DateTimeZone( 'UTC' ) );
161
-
162
-		return $next->format( 'Y-m-d H:i:s' );
163
-	}
164
-
165
-	/**
166
-	 * Get the time MySQL formated date/time string for an action's (next) scheduled date.
167
-	 *
168
-	 * @param ActionScheduler_Action $action
169
-	 * @param DateTime $scheduled_date (optional)
170
-	 * @return string
171
-	 */
172
-	protected function get_scheduled_date_string_local( ActionScheduler_Action $action, DateTime $scheduled_date = NULL ) {
173
-		$next = null === $scheduled_date ? $action->get_schedule()->get_date() : $scheduled_date;
174
-		if ( ! $next ) {
175
-			return '0000-00-00 00:00:00';
176
-		}
177
-
178
-		ActionScheduler_TimezoneHelper::set_local_timezone( $next );
179
-		return $next->format( 'Y-m-d H:i:s' );
180
-	}
181
-
182
-	/**
183
-	 * Validate that we could decode action arguments.
184
-	 *
185
-	 * @param mixed $args      The decoded arguments.
186
-	 * @param int   $action_id The action ID.
187
-	 *
188
-	 * @throws ActionScheduler_InvalidActionException When the decoded arguments are invalid.
189
-	 */
190
-	protected function validate_args( $args, $action_id ) {
191
-		// Ensure we have an array of args.
192
-		if ( ! is_array( $args ) ) {
193
-			throw ActionScheduler_InvalidActionException::from_decoding_args( $action_id );
194
-		}
195
-
196
-		// Validate JSON decoding if possible.
197
-		if ( function_exists( 'json_last_error' ) && JSON_ERROR_NONE !== json_last_error() ) {
198
-			throw ActionScheduler_InvalidActionException::from_decoding_args( $action_id, $args );
199
-		}
200
-	}
201
-
202
-	/**
203
-	 * Validate a ActionScheduler_Schedule object.
204
-	 *
205
-	 * @param mixed $schedule  The unserialized ActionScheduler_Schedule object.
206
-	 * @param int   $action_id The action ID.
207
-	 *
208
-	 * @throws ActionScheduler_InvalidActionException When the schedule is invalid.
209
-	 */
210
-	protected function validate_schedule( $schedule, $action_id ) {
211
-		if ( empty( $schedule ) || ! is_a( $schedule, 'ActionScheduler_Schedule' ) ) {
212
-			throw ActionScheduler_InvalidActionException::from_schedule( $action_id, $schedule );
213
-		}
214
-	}
215
-
216
-	/**
217
-	 * InnoDB indexes have a maximum size of 767 bytes by default, which is only 191 characters with utf8mb4.
218
-	 *
219
-	 * Previously, AS wasn't concerned about args length, as we used the (unindex) post_content column. However,
220
-	 * with custom tables, we use an indexed VARCHAR column instead.
221
-	 *
222
-	 * @param  ActionScheduler_Action $action Action to be validated.
223
-	 * @throws InvalidArgumentException When json encoded args is too long.
224
-	 */
225
-	protected function validate_action( ActionScheduler_Action $action ) {
226
-		if ( strlen( json_encode( $action->get_args() ) ) > static::$max_args_length ) {
227
-			throw new InvalidArgumentException( sprintf( __( 'ActionScheduler_Action::$args too long. To ensure the args column can be indexed, action args should not be more than %d characters when encoded as JSON.', 'action-scheduler' ), static::$max_args_length ) );
228
-		}
229
-	}
230
-
231
-	/**
232
-	 * Cancel pending actions by hook.
233
-	 *
234
-	 * @since 3.0.0
235
-	 *
236
-	 * @param string $hook Hook name.
237
-	 *
238
-	 * @return void
239
-	 */
240
-	public function cancel_actions_by_hook( $hook ) {
241
-		$action_ids = true;
242
-		while ( ! empty( $action_ids ) ) {
243
-			$action_ids = $this->query_actions(
244
-				array(
245
-					'hook' => $hook,
246
-					'status' => self::STATUS_PENDING,
247
-					'per_page' => 1000,
248
-				)
249
-			);
250
-
251
-			$this->bulk_cancel_actions( $action_ids );
252
-		}
253
-	}
254
-
255
-	/**
256
-	 * Cancel pending actions by group.
257
-	 *
258
-	 * @since 3.0.0
259
-	 *
260
-	 * @param string $group Group slug.
261
-	 *
262
-	 * @return void
263
-	 */
264
-	public function cancel_actions_by_group( $group ) {
265
-		$action_ids = true;
266
-		while ( ! empty( $action_ids ) ) {
267
-			$action_ids = $this->query_actions(
268
-				array(
269
-					'group' => $group,
270
-					'status' => self::STATUS_PENDING,
271
-					'per_page' => 1000,
272
-				)
273
-			);
274
-
275
-			$this->bulk_cancel_actions( $action_ids );
276
-		}
277
-	}
278
-
279
-	/**
280
-	 * Cancel a set of action IDs.
281
-	 *
282
-	 * @since 3.0.0
283
-	 *
284
-	 * @param array $action_ids List of action IDs.
285
-	 *
286
-	 * @return void
287
-	 */
288
-	private function bulk_cancel_actions( $action_ids ) {
289
-		foreach ( $action_ids as $action_id ) {
290
-			$this->cancel_action( $action_id );
291
-		}
292
-
293
-		do_action( 'action_scheduler_bulk_cancel_actions', $action_ids );
294
-	}
295
-
296
-	/**
297
-	 * @return array
298
-	 */
299
-	public function get_status_labels() {
300
-		return array(
301
-			self::STATUS_COMPLETE => __( 'Complete', 'action-scheduler' ),
302
-			self::STATUS_PENDING  => __( 'Pending', 'action-scheduler' ),
303
-			self::STATUS_RUNNING  => __( 'In-progress', 'action-scheduler' ),
304
-			self::STATUS_FAILED   => __( 'Failed', 'action-scheduler' ),
305
-			self::STATUS_CANCELED => __( 'Canceled', 'action-scheduler' ),
306
-		);
307
-	}
308
-
309
-	/**
310
-	 * Check if there are any pending scheduled actions due to run.
311
-	 *
312
-	 * @param ActionScheduler_Action $action
313
-	 * @param DateTime $scheduled_date (optional)
314
-	 * @return string
315
-	 */
316
-	public function has_pending_actions_due() {
317
-		$pending_actions = $this->query_actions( array(
318
-			'date'   => as_get_datetime_object(),
319
-			'status' => ActionScheduler_Store::STATUS_PENDING,
320
-		) );
321
-
322
-		return ! empty( $pending_actions );
323
-	}
324
-
325
-	/**
326
-	 * Callable initialization function optionally overridden in derived classes.
327
-	 */
328
-	public function init() {}
329
-
330
-	/**
331
-	 * Callable function to mark an action as migrated optionally overridden in derived classes.
332
-	 */
333
-	public function mark_migrated( $action_id ) {}
334
-
335
-	/**
336
-	 * @return ActionScheduler_Store
337
-	 */
338
-	public static function instance() {
339
-		if ( empty( self::$store ) ) {
340
-			$class = apply_filters( 'action_scheduler_store_class', self::DEFAULT_CLASS );
341
-			self::$store = new $class();
342
-		}
343
-		return self::$store;
344
-	}
8
+    const STATUS_COMPLETE = 'complete';
9
+    const STATUS_PENDING  = 'pending';
10
+    const STATUS_RUNNING  = 'in-progress';
11
+    const STATUS_FAILED   = 'failed';
12
+    const STATUS_CANCELED = 'canceled';
13
+    const DEFAULT_CLASS   = 'ActionScheduler_wpPostStore';
14
+
15
+    /** @var ActionScheduler_Store */
16
+    private static $store = NULL;
17
+
18
+    /** @var int */
19
+    protected static $max_args_length = 191;
20
+
21
+    /**
22
+     * @param ActionScheduler_Action $action
23
+     * @param DateTime $scheduled_date Optional Date of the first instance
24
+     *        to store. Otherwise uses the first date of the action's
25
+     *        schedule.
26
+     *
27
+     * @return string The action ID
28
+     */
29
+    abstract public function save_action( ActionScheduler_Action $action, DateTime $scheduled_date = NULL );
30
+
31
+    /**
32
+     * @param string $action_id
33
+     *
34
+     * @return ActionScheduler_Action
35
+     */
36
+    abstract public function fetch_action( $action_id );
37
+
38
+    /**
39
+     * @param string $hook Hook name/slug.
40
+     * @param array  $params Hook arguments.
41
+     * @return string ID of the next action matching the criteria.
42
+     */
43
+    abstract public function find_action( $hook, $params = array() );
44
+
45
+    /**
46
+     * @param array  $query Query parameters.
47
+     * @param string $query_type Whether to select or count the results. Default, select.
48
+     *
49
+     * @return array|int The IDs of or count of actions matching the query.
50
+     */
51
+    abstract public function query_actions( $query = array(), $query_type = 'select' );
52
+
53
+    /**
54
+     * Get a count of all actions in the store, grouped by status
55
+     *
56
+     * @return array
57
+     */
58
+    abstract public function action_counts();
59
+
60
+    /**
61
+     * @param string $action_id
62
+     */
63
+    abstract public function cancel_action( $action_id );
64
+
65
+    /**
66
+     * @param string $action_id
67
+     */
68
+    abstract public function delete_action( $action_id );
69
+
70
+    /**
71
+     * @param string $action_id
72
+     *
73
+     * @return DateTime The date the action is schedule to run, or the date that it ran.
74
+     */
75
+    abstract public function get_date( $action_id );
76
+
77
+
78
+    /**
79
+     * @param int      $max_actions
80
+     * @param DateTime $before_date Claim only actions schedule before the given date. Defaults to now.
81
+     * @param array    $hooks       Claim only actions with a hook or hooks.
82
+     * @param string   $group       Claim only actions in the given group.
83
+     *
84
+     * @return ActionScheduler_ActionClaim
85
+     */
86
+    abstract public function stake_claim( $max_actions = 10, DateTime $before_date = null, $hooks = array(), $group = '' );
87
+
88
+    /**
89
+     * @return int
90
+     */
91
+    abstract public function get_claim_count();
92
+
93
+    /**
94
+     * @param ActionScheduler_ActionClaim $claim
95
+     */
96
+    abstract public function release_claim( ActionScheduler_ActionClaim $claim );
97
+
98
+    /**
99
+     * @param string $action_id
100
+     */
101
+    abstract public function unclaim_action( $action_id );
102
+
103
+    /**
104
+     * @param string $action_id
105
+     */
106
+    abstract public function mark_failure( $action_id );
107
+
108
+    /**
109
+     * @param string $action_id
110
+     */
111
+    abstract public function log_execution( $action_id );
112
+
113
+    /**
114
+     * @param string $action_id
115
+     */
116
+    abstract public function mark_complete( $action_id );
117
+
118
+    /**
119
+     * @param string $action_id
120
+     *
121
+     * @return string
122
+     */
123
+    abstract public function get_status( $action_id );
124
+
125
+    /**
126
+     * @param string $action_id
127
+     * @return mixed
128
+     */
129
+    abstract public function get_claim_id( $action_id );
130
+
131
+    /**
132
+     * @param string $claim_id
133
+     * @return array
134
+     */
135
+    abstract public function find_actions_by_claim_id( $claim_id );
136
+
137
+    /**
138
+     * @param string $comparison_operator
139
+     * @return string
140
+     */
141
+    protected function validate_sql_comparator( $comparison_operator ) {
142
+        if ( in_array( $comparison_operator, array('!=', '>', '>=', '<', '<=', '=') ) ) {
143
+            return $comparison_operator;
144
+        }
145
+        return '=';
146
+    }
147
+
148
+    /**
149
+     * Get the time MySQL formated date/time string for an action's (next) scheduled date.
150
+     *
151
+     * @param ActionScheduler_Action $action
152
+     * @param DateTime $scheduled_date (optional)
153
+     * @return string
154
+     */
155
+    protected function get_scheduled_date_string( ActionScheduler_Action $action, DateTime $scheduled_date = NULL ) {
156
+        $next = null === $scheduled_date ? $action->get_schedule()->get_date() : $scheduled_date;
157
+        if ( ! $next ) {
158
+            return '0000-00-00 00:00:00';
159
+        }
160
+        $next->setTimezone( new DateTimeZone( 'UTC' ) );
161
+
162
+        return $next->format( 'Y-m-d H:i:s' );
163
+    }
164
+
165
+    /**
166
+     * Get the time MySQL formated date/time string for an action's (next) scheduled date.
167
+     *
168
+     * @param ActionScheduler_Action $action
169
+     * @param DateTime $scheduled_date (optional)
170
+     * @return string
171
+     */
172
+    protected function get_scheduled_date_string_local( ActionScheduler_Action $action, DateTime $scheduled_date = NULL ) {
173
+        $next = null === $scheduled_date ? $action->get_schedule()->get_date() : $scheduled_date;
174
+        if ( ! $next ) {
175
+            return '0000-00-00 00:00:00';
176
+        }
177
+
178
+        ActionScheduler_TimezoneHelper::set_local_timezone( $next );
179
+        return $next->format( 'Y-m-d H:i:s' );
180
+    }
181
+
182
+    /**
183
+     * Validate that we could decode action arguments.
184
+     *
185
+     * @param mixed $args      The decoded arguments.
186
+     * @param int   $action_id The action ID.
187
+     *
188
+     * @throws ActionScheduler_InvalidActionException When the decoded arguments are invalid.
189
+     */
190
+    protected function validate_args( $args, $action_id ) {
191
+        // Ensure we have an array of args.
192
+        if ( ! is_array( $args ) ) {
193
+            throw ActionScheduler_InvalidActionException::from_decoding_args( $action_id );
194
+        }
195
+
196
+        // Validate JSON decoding if possible.
197
+        if ( function_exists( 'json_last_error' ) && JSON_ERROR_NONE !== json_last_error() ) {
198
+            throw ActionScheduler_InvalidActionException::from_decoding_args( $action_id, $args );
199
+        }
200
+    }
201
+
202
+    /**
203
+     * Validate a ActionScheduler_Schedule object.
204
+     *
205
+     * @param mixed $schedule  The unserialized ActionScheduler_Schedule object.
206
+     * @param int   $action_id The action ID.
207
+     *
208
+     * @throws ActionScheduler_InvalidActionException When the schedule is invalid.
209
+     */
210
+    protected function validate_schedule( $schedule, $action_id ) {
211
+        if ( empty( $schedule ) || ! is_a( $schedule, 'ActionScheduler_Schedule' ) ) {
212
+            throw ActionScheduler_InvalidActionException::from_schedule( $action_id, $schedule );
213
+        }
214
+    }
215
+
216
+    /**
217
+     * InnoDB indexes have a maximum size of 767 bytes by default, which is only 191 characters with utf8mb4.
218
+     *
219
+     * Previously, AS wasn't concerned about args length, as we used the (unindex) post_content column. However,
220
+     * with custom tables, we use an indexed VARCHAR column instead.
221
+     *
222
+     * @param  ActionScheduler_Action $action Action to be validated.
223
+     * @throws InvalidArgumentException When json encoded args is too long.
224
+     */
225
+    protected function validate_action( ActionScheduler_Action $action ) {
226
+        if ( strlen( json_encode( $action->get_args() ) ) > static::$max_args_length ) {
227
+            throw new InvalidArgumentException( sprintf( __( 'ActionScheduler_Action::$args too long. To ensure the args column can be indexed, action args should not be more than %d characters when encoded as JSON.', 'action-scheduler' ), static::$max_args_length ) );
228
+        }
229
+    }
230
+
231
+    /**
232
+     * Cancel pending actions by hook.
233
+     *
234
+     * @since 3.0.0
235
+     *
236
+     * @param string $hook Hook name.
237
+     *
238
+     * @return void
239
+     */
240
+    public function cancel_actions_by_hook( $hook ) {
241
+        $action_ids = true;
242
+        while ( ! empty( $action_ids ) ) {
243
+            $action_ids = $this->query_actions(
244
+                array(
245
+                    'hook' => $hook,
246
+                    'status' => self::STATUS_PENDING,
247
+                    'per_page' => 1000,
248
+                )
249
+            );
250
+
251
+            $this->bulk_cancel_actions( $action_ids );
252
+        }
253
+    }
254
+
255
+    /**
256
+     * Cancel pending actions by group.
257
+     *
258
+     * @since 3.0.0
259
+     *
260
+     * @param string $group Group slug.
261
+     *
262
+     * @return void
263
+     */
264
+    public function cancel_actions_by_group( $group ) {
265
+        $action_ids = true;
266
+        while ( ! empty( $action_ids ) ) {
267
+            $action_ids = $this->query_actions(
268
+                array(
269
+                    'group' => $group,
270
+                    'status' => self::STATUS_PENDING,
271
+                    'per_page' => 1000,
272
+                )
273
+            );
274
+
275
+            $this->bulk_cancel_actions( $action_ids );
276
+        }
277
+    }
278
+
279
+    /**
280
+     * Cancel a set of action IDs.
281
+     *
282
+     * @since 3.0.0
283
+     *
284
+     * @param array $action_ids List of action IDs.
285
+     *
286
+     * @return void
287
+     */
288
+    private function bulk_cancel_actions( $action_ids ) {
289
+        foreach ( $action_ids as $action_id ) {
290
+            $this->cancel_action( $action_id );
291
+        }
292
+
293
+        do_action( 'action_scheduler_bulk_cancel_actions', $action_ids );
294
+    }
295
+
296
+    /**
297
+     * @return array
298
+     */
299
+    public function get_status_labels() {
300
+        return array(
301
+            self::STATUS_COMPLETE => __( 'Complete', 'action-scheduler' ),
302
+            self::STATUS_PENDING  => __( 'Pending', 'action-scheduler' ),
303
+            self::STATUS_RUNNING  => __( 'In-progress', 'action-scheduler' ),
304
+            self::STATUS_FAILED   => __( 'Failed', 'action-scheduler' ),
305
+            self::STATUS_CANCELED => __( 'Canceled', 'action-scheduler' ),
306
+        );
307
+    }
308
+
309
+    /**
310
+     * Check if there are any pending scheduled actions due to run.
311
+     *
312
+     * @param ActionScheduler_Action $action
313
+     * @param DateTime $scheduled_date (optional)
314
+     * @return string
315
+     */
316
+    public function has_pending_actions_due() {
317
+        $pending_actions = $this->query_actions( array(
318
+            'date'   => as_get_datetime_object(),
319
+            'status' => ActionScheduler_Store::STATUS_PENDING,
320
+        ) );
321
+
322
+        return ! empty( $pending_actions );
323
+    }
324
+
325
+    /**
326
+     * Callable initialization function optionally overridden in derived classes.
327
+     */
328
+    public function init() {}
329
+
330
+    /**
331
+     * Callable function to mark an action as migrated optionally overridden in derived classes.
332
+     */
333
+    public function mark_migrated( $action_id ) {}
334
+
335
+    /**
336
+     * @return ActionScheduler_Store
337
+     */
338
+    public static function instance() {
339
+        if ( empty( self::$store ) ) {
340
+            $class = apply_filters( 'action_scheduler_store_class', self::DEFAULT_CLASS );
341
+            self::$store = new $class();
342
+        }
343
+        return self::$store;
344
+    }
345 345
 }
Please login to merge, or discard this patch.
Spacing   +58 added lines, -58 removed lines patch added patch discarded remove patch
@@ -26,21 +26,21 @@  discard block
 block discarded – undo
26 26
 	 *
27 27
 	 * @return string The action ID
28 28
 	 */
29
-	abstract public function save_action( ActionScheduler_Action $action, DateTime $scheduled_date = NULL );
29
+	abstract public function save_action(ActionScheduler_Action $action, DateTime $scheduled_date = NULL);
30 30
 
31 31
 	/**
32 32
 	 * @param string $action_id
33 33
 	 *
34 34
 	 * @return ActionScheduler_Action
35 35
 	 */
36
-	abstract public function fetch_action( $action_id );
36
+	abstract public function fetch_action($action_id);
37 37
 
38 38
 	/**
39 39
 	 * @param string $hook Hook name/slug.
40 40
 	 * @param array  $params Hook arguments.
41 41
 	 * @return string ID of the next action matching the criteria.
42 42
 	 */
43
-	abstract public function find_action( $hook, $params = array() );
43
+	abstract public function find_action($hook, $params = array());
44 44
 
45 45
 	/**
46 46
 	 * @param array  $query Query parameters.
@@ -48,7 +48,7 @@  discard block
 block discarded – undo
48 48
 	 *
49 49
 	 * @return array|int The IDs of or count of actions matching the query.
50 50
 	 */
51
-	abstract public function query_actions( $query = array(), $query_type = 'select' );
51
+	abstract public function query_actions($query = array(), $query_type = 'select');
52 52
 
53 53
 	/**
54 54
 	 * Get a count of all actions in the store, grouped by status
@@ -60,19 +60,19 @@  discard block
 block discarded – undo
60 60
 	/**
61 61
 	 * @param string $action_id
62 62
 	 */
63
-	abstract public function cancel_action( $action_id );
63
+	abstract public function cancel_action($action_id);
64 64
 
65 65
 	/**
66 66
 	 * @param string $action_id
67 67
 	 */
68
-	abstract public function delete_action( $action_id );
68
+	abstract public function delete_action($action_id);
69 69
 
70 70
 	/**
71 71
 	 * @param string $action_id
72 72
 	 *
73 73
 	 * @return DateTime The date the action is schedule to run, or the date that it ran.
74 74
 	 */
75
-	abstract public function get_date( $action_id );
75
+	abstract public function get_date($action_id);
76 76
 
77 77
 
78 78
 	/**
@@ -83,7 +83,7 @@  discard block
 block discarded – undo
83 83
 	 *
84 84
 	 * @return ActionScheduler_ActionClaim
85 85
 	 */
86
-	abstract public function stake_claim( $max_actions = 10, DateTime $before_date = null, $hooks = array(), $group = '' );
86
+	abstract public function stake_claim($max_actions = 10, DateTime $before_date = null, $hooks = array(), $group = '');
87 87
 
88 88
 	/**
89 89
 	 * @return int
@@ -93,53 +93,53 @@  discard block
 block discarded – undo
93 93
 	/**
94 94
 	 * @param ActionScheduler_ActionClaim $claim
95 95
 	 */
96
-	abstract public function release_claim( ActionScheduler_ActionClaim $claim );
96
+	abstract public function release_claim(ActionScheduler_ActionClaim $claim);
97 97
 
98 98
 	/**
99 99
 	 * @param string $action_id
100 100
 	 */
101
-	abstract public function unclaim_action( $action_id );
101
+	abstract public function unclaim_action($action_id);
102 102
 
103 103
 	/**
104 104
 	 * @param string $action_id
105 105
 	 */
106
-	abstract public function mark_failure( $action_id );
106
+	abstract public function mark_failure($action_id);
107 107
 
108 108
 	/**
109 109
 	 * @param string $action_id
110 110
 	 */
111
-	abstract public function log_execution( $action_id );
111
+	abstract public function log_execution($action_id);
112 112
 
113 113
 	/**
114 114
 	 * @param string $action_id
115 115
 	 */
116
-	abstract public function mark_complete( $action_id );
116
+	abstract public function mark_complete($action_id);
117 117
 
118 118
 	/**
119 119
 	 * @param string $action_id
120 120
 	 *
121 121
 	 * @return string
122 122
 	 */
123
-	abstract public function get_status( $action_id );
123
+	abstract public function get_status($action_id);
124 124
 
125 125
 	/**
126 126
 	 * @param string $action_id
127 127
 	 * @return mixed
128 128
 	 */
129
-	abstract public function get_claim_id( $action_id );
129
+	abstract public function get_claim_id($action_id);
130 130
 
131 131
 	/**
132 132
 	 * @param string $claim_id
133 133
 	 * @return array
134 134
 	 */
135
-	abstract public function find_actions_by_claim_id( $claim_id );
135
+	abstract public function find_actions_by_claim_id($claim_id);
136 136
 
137 137
 	/**
138 138
 	 * @param string $comparison_operator
139 139
 	 * @return string
140 140
 	 */
141
-	protected function validate_sql_comparator( $comparison_operator ) {
142
-		if ( in_array( $comparison_operator, array('!=', '>', '>=', '<', '<=', '=') ) ) {
141
+	protected function validate_sql_comparator($comparison_operator) {
142
+		if (in_array($comparison_operator, array('!=', '>', '>=', '<', '<=', '='))) {
143 143
 			return $comparison_operator;
144 144
 		}
145 145
 		return '=';
@@ -152,14 +152,14 @@  discard block
 block discarded – undo
152 152
 	 * @param DateTime $scheduled_date (optional)
153 153
 	 * @return string
154 154
 	 */
155
-	protected function get_scheduled_date_string( ActionScheduler_Action $action, DateTime $scheduled_date = NULL ) {
155
+	protected function get_scheduled_date_string(ActionScheduler_Action $action, DateTime $scheduled_date = NULL) {
156 156
 		$next = null === $scheduled_date ? $action->get_schedule()->get_date() : $scheduled_date;
157
-		if ( ! $next ) {
157
+		if (!$next) {
158 158
 			return '0000-00-00 00:00:00';
159 159
 		}
160
-		$next->setTimezone( new DateTimeZone( 'UTC' ) );
160
+		$next->setTimezone(new DateTimeZone('UTC'));
161 161
 
162
-		return $next->format( 'Y-m-d H:i:s' );
162
+		return $next->format('Y-m-d H:i:s');
163 163
 	}
164 164
 
165 165
 	/**
@@ -169,14 +169,14 @@  discard block
 block discarded – undo
169 169
 	 * @param DateTime $scheduled_date (optional)
170 170
 	 * @return string
171 171
 	 */
172
-	protected function get_scheduled_date_string_local( ActionScheduler_Action $action, DateTime $scheduled_date = NULL ) {
172
+	protected function get_scheduled_date_string_local(ActionScheduler_Action $action, DateTime $scheduled_date = NULL) {
173 173
 		$next = null === $scheduled_date ? $action->get_schedule()->get_date() : $scheduled_date;
174
-		if ( ! $next ) {
174
+		if (!$next) {
175 175
 			return '0000-00-00 00:00:00';
176 176
 		}
177 177
 
178
-		ActionScheduler_TimezoneHelper::set_local_timezone( $next );
179
-		return $next->format( 'Y-m-d H:i:s' );
178
+		ActionScheduler_TimezoneHelper::set_local_timezone($next);
179
+		return $next->format('Y-m-d H:i:s');
180 180
 	}
181 181
 
182 182
 	/**
@@ -187,15 +187,15 @@  discard block
 block discarded – undo
187 187
 	 *
188 188
 	 * @throws ActionScheduler_InvalidActionException When the decoded arguments are invalid.
189 189
 	 */
190
-	protected function validate_args( $args, $action_id ) {
190
+	protected function validate_args($args, $action_id) {
191 191
 		// Ensure we have an array of args.
192
-		if ( ! is_array( $args ) ) {
193
-			throw ActionScheduler_InvalidActionException::from_decoding_args( $action_id );
192
+		if (!is_array($args)) {
193
+			throw ActionScheduler_InvalidActionException::from_decoding_args($action_id);
194 194
 		}
195 195
 
196 196
 		// Validate JSON decoding if possible.
197
-		if ( function_exists( 'json_last_error' ) && JSON_ERROR_NONE !== json_last_error() ) {
198
-			throw ActionScheduler_InvalidActionException::from_decoding_args( $action_id, $args );
197
+		if (function_exists('json_last_error') && JSON_ERROR_NONE !== json_last_error()) {
198
+			throw ActionScheduler_InvalidActionException::from_decoding_args($action_id, $args);
199 199
 		}
200 200
 	}
201 201
 
@@ -207,9 +207,9 @@  discard block
 block discarded – undo
207 207
 	 *
208 208
 	 * @throws ActionScheduler_InvalidActionException When the schedule is invalid.
209 209
 	 */
210
-	protected function validate_schedule( $schedule, $action_id ) {
211
-		if ( empty( $schedule ) || ! is_a( $schedule, 'ActionScheduler_Schedule' ) ) {
212
-			throw ActionScheduler_InvalidActionException::from_schedule( $action_id, $schedule );
210
+	protected function validate_schedule($schedule, $action_id) {
211
+		if (empty($schedule) || !is_a($schedule, 'ActionScheduler_Schedule')) {
212
+			throw ActionScheduler_InvalidActionException::from_schedule($action_id, $schedule);
213 213
 		}
214 214
 	}
215 215
 
@@ -222,9 +222,9 @@  discard block
 block discarded – undo
222 222
 	 * @param  ActionScheduler_Action $action Action to be validated.
223 223
 	 * @throws InvalidArgumentException When json encoded args is too long.
224 224
 	 */
225
-	protected function validate_action( ActionScheduler_Action $action ) {
226
-		if ( strlen( json_encode( $action->get_args() ) ) > static::$max_args_length ) {
227
-			throw new InvalidArgumentException( sprintf( __( 'ActionScheduler_Action::$args too long. To ensure the args column can be indexed, action args should not be more than %d characters when encoded as JSON.', 'action-scheduler' ), static::$max_args_length ) );
225
+	protected function validate_action(ActionScheduler_Action $action) {
226
+		if (strlen(json_encode($action->get_args())) > static::$max_args_length) {
227
+			throw new InvalidArgumentException(sprintf(__('ActionScheduler_Action::$args too long. To ensure the args column can be indexed, action args should not be more than %d characters when encoded as JSON.', 'action-scheduler'), static::$max_args_length));
228 228
 		}
229 229
 	}
230 230
 
@@ -237,9 +237,9 @@  discard block
 block discarded – undo
237 237
 	 *
238 238
 	 * @return void
239 239
 	 */
240
-	public function cancel_actions_by_hook( $hook ) {
240
+	public function cancel_actions_by_hook($hook) {
241 241
 		$action_ids = true;
242
-		while ( ! empty( $action_ids ) ) {
242
+		while (!empty($action_ids)) {
243 243
 			$action_ids = $this->query_actions(
244 244
 				array(
245 245
 					'hook' => $hook,
@@ -248,7 +248,7 @@  discard block
 block discarded – undo
248 248
 				)
249 249
 			);
250 250
 
251
-			$this->bulk_cancel_actions( $action_ids );
251
+			$this->bulk_cancel_actions($action_ids);
252 252
 		}
253 253
 	}
254 254
 
@@ -261,9 +261,9 @@  discard block
 block discarded – undo
261 261
 	 *
262 262
 	 * @return void
263 263
 	 */
264
-	public function cancel_actions_by_group( $group ) {
264
+	public function cancel_actions_by_group($group) {
265 265
 		$action_ids = true;
266
-		while ( ! empty( $action_ids ) ) {
266
+		while (!empty($action_ids)) {
267 267
 			$action_ids = $this->query_actions(
268 268
 				array(
269 269
 					'group' => $group,
@@ -272,7 +272,7 @@  discard block
 block discarded – undo
272 272
 				)
273 273
 			);
274 274
 
275
-			$this->bulk_cancel_actions( $action_ids );
275
+			$this->bulk_cancel_actions($action_ids);
276 276
 		}
277 277
 	}
278 278
 
@@ -285,12 +285,12 @@  discard block
 block discarded – undo
285 285
 	 *
286 286
 	 * @return void
287 287
 	 */
288
-	private function bulk_cancel_actions( $action_ids ) {
289
-		foreach ( $action_ids as $action_id ) {
290
-			$this->cancel_action( $action_id );
288
+	private function bulk_cancel_actions($action_ids) {
289
+		foreach ($action_ids as $action_id) {
290
+			$this->cancel_action($action_id);
291 291
 		}
292 292
 
293
-		do_action( 'action_scheduler_bulk_cancel_actions', $action_ids );
293
+		do_action('action_scheduler_bulk_cancel_actions', $action_ids);
294 294
 	}
295 295
 
296 296
 	/**
@@ -298,11 +298,11 @@  discard block
 block discarded – undo
298 298
 	 */
299 299
 	public function get_status_labels() {
300 300
 		return array(
301
-			self::STATUS_COMPLETE => __( 'Complete', 'action-scheduler' ),
302
-			self::STATUS_PENDING  => __( 'Pending', 'action-scheduler' ),
303
-			self::STATUS_RUNNING  => __( 'In-progress', 'action-scheduler' ),
304
-			self::STATUS_FAILED   => __( 'Failed', 'action-scheduler' ),
305
-			self::STATUS_CANCELED => __( 'Canceled', 'action-scheduler' ),
301
+			self::STATUS_COMPLETE => __('Complete', 'action-scheduler'),
302
+			self::STATUS_PENDING  => __('Pending', 'action-scheduler'),
303
+			self::STATUS_RUNNING  => __('In-progress', 'action-scheduler'),
304
+			self::STATUS_FAILED   => __('Failed', 'action-scheduler'),
305
+			self::STATUS_CANCELED => __('Canceled', 'action-scheduler'),
306 306
 		);
307 307
 	}
308 308
 
@@ -314,12 +314,12 @@  discard block
 block discarded – undo
314 314
 	 * @return string
315 315
 	 */
316 316
 	public function has_pending_actions_due() {
317
-		$pending_actions = $this->query_actions( array(
317
+		$pending_actions = $this->query_actions(array(
318 318
 			'date'   => as_get_datetime_object(),
319 319
 			'status' => ActionScheduler_Store::STATUS_PENDING,
320
-		) );
320
+		));
321 321
 
322
-		return ! empty( $pending_actions );
322
+		return !empty($pending_actions);
323 323
 	}
324 324
 
325 325
 	/**
@@ -330,14 +330,14 @@  discard block
 block discarded – undo
330 330
 	/**
331 331
 	 * Callable function to mark an action as migrated optionally overridden in derived classes.
332 332
 	 */
333
-	public function mark_migrated( $action_id ) {}
333
+	public function mark_migrated($action_id) {}
334 334
 
335 335
 	/**
336 336
 	 * @return ActionScheduler_Store
337 337
 	 */
338 338
 	public static function instance() {
339
-		if ( empty( self::$store ) ) {
340
-			$class = apply_filters( 'action_scheduler_store_class', self::DEFAULT_CLASS );
339
+		if (empty(self::$store)) {
340
+			$class = apply_filters('action_scheduler_store_class', self::DEFAULT_CLASS);
341 341
 			self::$store = new $class();
342 342
 		}
343 343
 		return self::$store;
Please login to merge, or discard this patch.
action-scheduler/classes/abstracts/ActionScheduler_Abstract_Schedule.php 2 patches
Indentation   +67 added lines, -67 removed lines patch added patch discarded remove patch
@@ -5,79 +5,79 @@
 block discarded – undo
5 5
  */
6 6
 abstract class ActionScheduler_Abstract_Schedule extends ActionScheduler_Schedule_Deprecated {
7 7
 
8
-	/**
9
-	 * The date & time the schedule is set to run.
10
-	 *
11
-	 * @var DateTime
12
-	 */
13
-	private $scheduled_date = NULL;
8
+    /**
9
+     * The date & time the schedule is set to run.
10
+     *
11
+     * @var DateTime
12
+     */
13
+    private $scheduled_date = NULL;
14 14
 
15
-	/**
16
-	 * Timestamp equivalent of @see $this->scheduled_date
17
-	 *
18
-	 * @var int
19
-	 */
20
-	protected $scheduled_timestamp = NULL;
15
+    /**
16
+     * Timestamp equivalent of @see $this->scheduled_date
17
+     *
18
+     * @var int
19
+     */
20
+    protected $scheduled_timestamp = NULL;
21 21
 
22
-	/**
23
-	 * @param DateTime $date The date & time to run the action.
24
-	 */
25
-	public function __construct( DateTime $date ) {
26
-		$this->scheduled_date = $date;
27
-	}
22
+    /**
23
+     * @param DateTime $date The date & time to run the action.
24
+     */
25
+    public function __construct( DateTime $date ) {
26
+        $this->scheduled_date = $date;
27
+    }
28 28
 
29
-	/**
30
-	 * Check if a schedule should recur.
31
-	 *
32
-	 * @return bool
33
-	 */
34
-	abstract public function is_recurring();
29
+    /**
30
+     * Check if a schedule should recur.
31
+     *
32
+     * @return bool
33
+     */
34
+    abstract public function is_recurring();
35 35
 
36
-	/**
37
-	 * Calculate when the next instance of this schedule would run based on a given date & time.
38
-	 *
39
-	 * @param DateTime $after
40
-	 * @return DateTime
41
-	 */
42
-	abstract protected function calculate_next( DateTime $after );
36
+    /**
37
+     * Calculate when the next instance of this schedule would run based on a given date & time.
38
+     *
39
+     * @param DateTime $after
40
+     * @return DateTime
41
+     */
42
+    abstract protected function calculate_next( DateTime $after );
43 43
 
44
-	/**
45
-	 * Get the next date & time when this schedule should run after a given date & time.
46
-	 *
47
-	 * @param DateTime $after
48
-	 * @return DateTime|null
49
-	 */
50
-	public function get_next( DateTime $after ) {
51
-		$after = clone $after;
52
-		if ( $after > $this->scheduled_date ) {
53
-			$after = $this->calculate_next( $after );
54
-			return $after;
55
-		}
56
-		return clone $this->scheduled_date;
57
-	}
44
+    /**
45
+     * Get the next date & time when this schedule should run after a given date & time.
46
+     *
47
+     * @param DateTime $after
48
+     * @return DateTime|null
49
+     */
50
+    public function get_next( DateTime $after ) {
51
+        $after = clone $after;
52
+        if ( $after > $this->scheduled_date ) {
53
+            $after = $this->calculate_next( $after );
54
+            return $after;
55
+        }
56
+        return clone $this->scheduled_date;
57
+    }
58 58
 
59
-	/**
60
-	 * Get the date & time the schedule is set to run.
61
-	 *
62
-	 * @return DateTime|null
63
-	 */
64
-	public function get_date() {
65
-		return $this->scheduled_date;
66
-	}
59
+    /**
60
+     * Get the date & time the schedule is set to run.
61
+     *
62
+     * @return DateTime|null
63
+     */
64
+    public function get_date() {
65
+        return $this->scheduled_date;
66
+    }
67 67
 
68
-	/**
69
-	 * For PHP 5.2 compat, since DateTime objects can't be serialized
70
-	 * @return array
71
-	 */
72
-	public function __sleep() {
73
-		$this->scheduled_timestamp = $this->scheduled_date->getTimestamp();
74
-		return array(
75
-			'scheduled_timestamp',
76
-		);
77
-	}
68
+    /**
69
+     * For PHP 5.2 compat, since DateTime objects can't be serialized
70
+     * @return array
71
+     */
72
+    public function __sleep() {
73
+        $this->scheduled_timestamp = $this->scheduled_date->getTimestamp();
74
+        return array(
75
+            'scheduled_timestamp',
76
+        );
77
+    }
78 78
 
79
-	public function __wakeup() {
80
-		$this->scheduled_date = as_get_datetime_object( $this->scheduled_timestamp );
81
-		unset( $this->scheduled_timestamp );
82
-	}
79
+    public function __wakeup() {
80
+        $this->scheduled_date = as_get_datetime_object( $this->scheduled_timestamp );
81
+        unset( $this->scheduled_timestamp );
82
+    }
83 83
 }
Please login to merge, or discard this patch.
Spacing   +7 added lines, -7 removed lines patch added patch discarded remove patch
@@ -22,7 +22,7 @@  discard block
 block discarded – undo
22 22
 	/**
23 23
 	 * @param DateTime $date The date & time to run the action.
24 24
 	 */
25
-	public function __construct( DateTime $date ) {
25
+	public function __construct(DateTime $date) {
26 26
 		$this->scheduled_date = $date;
27 27
 	}
28 28
 
@@ -39,7 +39,7 @@  discard block
 block discarded – undo
39 39
 	 * @param DateTime $after
40 40
 	 * @return DateTime
41 41
 	 */
42
-	abstract protected function calculate_next( DateTime $after );
42
+	abstract protected function calculate_next(DateTime $after);
43 43
 
44 44
 	/**
45 45
 	 * Get the next date & time when this schedule should run after a given date & time.
@@ -47,10 +47,10 @@  discard block
 block discarded – undo
47 47
 	 * @param DateTime $after
48 48
 	 * @return DateTime|null
49 49
 	 */
50
-	public function get_next( DateTime $after ) {
50
+	public function get_next(DateTime $after) {
51 51
 		$after = clone $after;
52
-		if ( $after > $this->scheduled_date ) {
53
-			$after = $this->calculate_next( $after );
52
+		if ($after > $this->scheduled_date) {
53
+			$after = $this->calculate_next($after);
54 54
 			return $after;
55 55
 		}
56 56
 		return clone $this->scheduled_date;
@@ -77,7 +77,7 @@  discard block
 block discarded – undo
77 77
 	}
78 78
 
79 79
 	public function __wakeup() {
80
-		$this->scheduled_date = as_get_datetime_object( $this->scheduled_timestamp );
81
-		unset( $this->scheduled_timestamp );
80
+		$this->scheduled_date = as_get_datetime_object($this->scheduled_timestamp);
81
+		unset($this->scheduled_timestamp);
82 82
 	}
83 83
 }
Please login to merge, or discard this patch.
libraries/action-scheduler/classes/abstracts/ActionScheduler_Logger.php 2 patches
Indentation   +168 added lines, -168 removed lines patch added patch discarded remove patch
@@ -5,172 +5,172 @@
 block discarded – undo
5 5
  * @codeCoverageIgnore
6 6
  */
7 7
 abstract class ActionScheduler_Logger {
8
-	private static $logger = NULL;
9
-
10
-	/**
11
-	 * @return ActionScheduler_Logger
12
-	 */
13
-	public static function instance() {
14
-		if ( empty(self::$logger) ) {
15
-			$class = apply_filters('action_scheduler_logger_class', 'ActionScheduler_wpCommentLogger');
16
-			self::$logger = new $class();
17
-		}
18
-		return self::$logger;
19
-	}
20
-
21
-	/**
22
-	 * @param string $action_id
23
-	 * @param string $message
24
-	 * @param DateTime $date
25
-	 *
26
-	 * @return string The log entry ID
27
-	 */
28
-	abstract public function log( $action_id, $message, DateTime $date = NULL );
29
-
30
-	/**
31
-	 * @param string $entry_id
32
-	 *
33
-	 * @return ActionScheduler_LogEntry
34
-	 */
35
-	abstract public function get_entry( $entry_id );
36
-
37
-	/**
38
-	 * @param string $action_id
39
-	 *
40
-	 * @return ActionScheduler_LogEntry[]
41
-	 */
42
-	abstract public function get_logs( $action_id );
43
-
44
-
45
-	/**
46
-	 * @codeCoverageIgnore
47
-	 */
48
-	public function init() {
49
-		$this->hook_stored_action();
50
-		add_action( 'action_scheduler_canceled_action', array( $this, 'log_canceled_action' ), 10, 1 );
51
-		add_action( 'action_scheduler_begin_execute', array( $this, 'log_started_action' ), 10, 2 );
52
-		add_action( 'action_scheduler_after_execute', array( $this, 'log_completed_action' ), 10, 3 );
53
-		add_action( 'action_scheduler_failed_execution', array( $this, 'log_failed_action' ), 10, 3 );
54
-		add_action( 'action_scheduler_failed_action', array( $this, 'log_timed_out_action' ), 10, 2 );
55
-		add_action( 'action_scheduler_unexpected_shutdown', array( $this, 'log_unexpected_shutdown' ), 10, 2 );
56
-		add_action( 'action_scheduler_reset_action', array( $this, 'log_reset_action' ), 10, 1 );
57
-		add_action( 'action_scheduler_execution_ignored', array( $this, 'log_ignored_action' ), 10, 2 );
58
-		add_action( 'action_scheduler_failed_fetch_action', array( $this, 'log_failed_fetch_action' ), 10, 2 );
59
-		add_action( 'action_scheduler_failed_to_schedule_next_instance', array( $this, 'log_failed_schedule_next_instance' ), 10, 2 );
60
-		add_action( 'action_scheduler_bulk_cancel_actions', array( $this, 'bulk_log_cancel_actions' ), 10, 1 );
61
-	}
62
-
63
-	public function hook_stored_action() {
64
-		add_action( 'action_scheduler_stored_action', array( $this, 'log_stored_action' ) );
65
-	}
66
-
67
-	public function unhook_stored_action() {
68
-		remove_action( 'action_scheduler_stored_action', array( $this, 'log_stored_action' ) );
69
-	}
70
-
71
-	public function log_stored_action( $action_id ) {
72
-		$this->log( $action_id, __( 'action created', 'action-scheduler' ) );
73
-	}
74
-
75
-	public function log_canceled_action( $action_id ) {
76
-		$this->log( $action_id, __( 'action canceled', 'action-scheduler' ) );
77
-	}
78
-
79
-	public function log_started_action( $action_id, $context = '' ) {
80
-		if ( ! empty( $context ) ) {
81
-			/* translators: %s: context */
82
-			$message = sprintf( __( 'action started via %s', 'action-scheduler' ), $context );
83
-		} else {
84
-			$message = __( 'action started', 'action-scheduler' );
85
-		}
86
-		$this->log( $action_id, $message );
87
-	}
88
-
89
-	public function log_completed_action( $action_id, $action = NULL, $context = '' ) {
90
-		if ( ! empty( $context ) ) {
91
-			/* translators: %s: context */
92
-			$message = sprintf( __( 'action complete via %s', 'action-scheduler' ), $context );
93
-		} else {
94
-			$message = __( 'action complete', 'action-scheduler' );
95
-		}
96
-		$this->log( $action_id, $message );
97
-	}
98
-
99
-	public function log_failed_action( $action_id, Exception $exception, $context = '' ) {
100
-		if ( ! empty( $context ) ) {
101
-			/* translators: 1: context 2: exception message */
102
-			$message = sprintf( __( 'action failed via %1$s: %2$s', 'action-scheduler' ), $context, $exception->getMessage() );
103
-		} else {
104
-			/* translators: %s: exception message */
105
-			$message = sprintf( __( 'action failed: %s', 'action-scheduler' ), $exception->getMessage() );
106
-		}
107
-		$this->log( $action_id, $message );
108
-	}
109
-
110
-	public function log_timed_out_action( $action_id, $timeout ) {
111
-		/* translators: %s: amount of time */
112
-		$this->log( $action_id, sprintf( __( 'action timed out after %s seconds', 'action-scheduler' ), $timeout ) );
113
-	}
114
-
115
-	public function log_unexpected_shutdown( $action_id, $error ) {
116
-		if ( ! empty( $error ) ) {
117
-			/* translators: 1: error message 2: filename 3: line */
118
-			$this->log( $action_id, sprintf( __( 'unexpected shutdown: PHP Fatal error %1$s in %2$s on line %3$s', 'action-scheduler' ), $error['message'], $error['file'], $error['line'] ) );
119
-		}
120
-	}
121
-
122
-	public function log_reset_action( $action_id ) {
123
-		$this->log( $action_id, __( 'action reset', 'action-scheduler' ) );
124
-	}
125
-
126
-	public function log_ignored_action( $action_id, $context = '' ) {
127
-		if ( ! empty( $context ) ) {
128
-			/* translators: %s: context */
129
-			$message = sprintf( __( 'action ignored via %s', 'action-scheduler' ), $context );
130
-		} else {
131
-			$message = __( 'action ignored', 'action-scheduler' );
132
-		}
133
-		$this->log( $action_id, $message );
134
-	}
135
-
136
-	/**
137
-	 * @param string $action_id
138
-	 * @param Exception|NULL $exception The exception which occured when fetching the action. NULL by default for backward compatibility.
139
-	 *
140
-	 * @return ActionScheduler_LogEntry[]
141
-	 */
142
-	public function log_failed_fetch_action( $action_id, Exception $exception = NULL ) {
143
-
144
-		if ( ! is_null( $exception ) ) {
145
-			/* translators: %s: exception message */
146
-			$log_message = sprintf( __( 'There was a failure fetching this action: %s', 'action-scheduler' ), $exception->getMessage() );
147
-		} else {
148
-			$log_message = __( 'There was a failure fetching this action', 'action-scheduler' );
149
-		}
150
-
151
-		$this->log( $action_id, $log_message );
152
-	}
153
-
154
-	public function log_failed_schedule_next_instance( $action_id, Exception $exception ) {
155
-		/* translators: %s: exception message */
156
-		$this->log( $action_id, sprintf( __( 'There was a failure scheduling the next instance of this action: %s', 'action-scheduler' ), $exception->getMessage() ) );
157
-	}
158
-
159
-	/**
160
-	 * Bulk add cancel action log entries.
161
-	 *
162
-	 * Implemented here for backward compatibility. Should be implemented in parent loggers
163
-	 * for more performant bulk logging.
164
-	 *
165
-	 * @param array $action_ids List of action ID.
166
-	 */
167
-	public function bulk_log_cancel_actions( $action_ids ) {
168
-		if ( empty( $action_ids ) ) {
169
-			return;
170
-		}
171
-
172
-		foreach ( $action_ids as $action_id ) {
173
-			$this->log_canceled_action( $action_id );
174
-		}
175
-	}
8
+    private static $logger = NULL;
9
+
10
+    /**
11
+     * @return ActionScheduler_Logger
12
+     */
13
+    public static function instance() {
14
+        if ( empty(self::$logger) ) {
15
+            $class = apply_filters('action_scheduler_logger_class', 'ActionScheduler_wpCommentLogger');
16
+            self::$logger = new $class();
17
+        }
18
+        return self::$logger;
19
+    }
20
+
21
+    /**
22
+     * @param string $action_id
23
+     * @param string $message
24
+     * @param DateTime $date
25
+     *
26
+     * @return string The log entry ID
27
+     */
28
+    abstract public function log( $action_id, $message, DateTime $date = NULL );
29
+
30
+    /**
31
+     * @param string $entry_id
32
+     *
33
+     * @return ActionScheduler_LogEntry
34
+     */
35
+    abstract public function get_entry( $entry_id );
36
+
37
+    /**
38
+     * @param string $action_id
39
+     *
40
+     * @return ActionScheduler_LogEntry[]
41
+     */
42
+    abstract public function get_logs( $action_id );
43
+
44
+
45
+    /**
46
+     * @codeCoverageIgnore
47
+     */
48
+    public function init() {
49
+        $this->hook_stored_action();
50
+        add_action( 'action_scheduler_canceled_action', array( $this, 'log_canceled_action' ), 10, 1 );
51
+        add_action( 'action_scheduler_begin_execute', array( $this, 'log_started_action' ), 10, 2 );
52
+        add_action( 'action_scheduler_after_execute', array( $this, 'log_completed_action' ), 10, 3 );
53
+        add_action( 'action_scheduler_failed_execution', array( $this, 'log_failed_action' ), 10, 3 );
54
+        add_action( 'action_scheduler_failed_action', array( $this, 'log_timed_out_action' ), 10, 2 );
55
+        add_action( 'action_scheduler_unexpected_shutdown', array( $this, 'log_unexpected_shutdown' ), 10, 2 );
56
+        add_action( 'action_scheduler_reset_action', array( $this, 'log_reset_action' ), 10, 1 );
57
+        add_action( 'action_scheduler_execution_ignored', array( $this, 'log_ignored_action' ), 10, 2 );
58
+        add_action( 'action_scheduler_failed_fetch_action', array( $this, 'log_failed_fetch_action' ), 10, 2 );
59
+        add_action( 'action_scheduler_failed_to_schedule_next_instance', array( $this, 'log_failed_schedule_next_instance' ), 10, 2 );
60
+        add_action( 'action_scheduler_bulk_cancel_actions', array( $this, 'bulk_log_cancel_actions' ), 10, 1 );
61
+    }
62
+
63
+    public function hook_stored_action() {
64
+        add_action( 'action_scheduler_stored_action', array( $this, 'log_stored_action' ) );
65
+    }
66
+
67
+    public function unhook_stored_action() {
68
+        remove_action( 'action_scheduler_stored_action', array( $this, 'log_stored_action' ) );
69
+    }
70
+
71
+    public function log_stored_action( $action_id ) {
72
+        $this->log( $action_id, __( 'action created', 'action-scheduler' ) );
73
+    }
74
+
75
+    public function log_canceled_action( $action_id ) {
76
+        $this->log( $action_id, __( 'action canceled', 'action-scheduler' ) );
77
+    }
78
+
79
+    public function log_started_action( $action_id, $context = '' ) {
80
+        if ( ! empty( $context ) ) {
81
+            /* translators: %s: context */
82
+            $message = sprintf( __( 'action started via %s', 'action-scheduler' ), $context );
83
+        } else {
84
+            $message = __( 'action started', 'action-scheduler' );
85
+        }
86
+        $this->log( $action_id, $message );
87
+    }
88
+
89
+    public function log_completed_action( $action_id, $action = NULL, $context = '' ) {
90
+        if ( ! empty( $context ) ) {
91
+            /* translators: %s: context */
92
+            $message = sprintf( __( 'action complete via %s', 'action-scheduler' ), $context );
93
+        } else {
94
+            $message = __( 'action complete', 'action-scheduler' );
95
+        }
96
+        $this->log( $action_id, $message );
97
+    }
98
+
99
+    public function log_failed_action( $action_id, Exception $exception, $context = '' ) {
100
+        if ( ! empty( $context ) ) {
101
+            /* translators: 1: context 2: exception message */
102
+            $message = sprintf( __( 'action failed via %1$s: %2$s', 'action-scheduler' ), $context, $exception->getMessage() );
103
+        } else {
104
+            /* translators: %s: exception message */
105
+            $message = sprintf( __( 'action failed: %s', 'action-scheduler' ), $exception->getMessage() );
106
+        }
107
+        $this->log( $action_id, $message );
108
+    }
109
+
110
+    public function log_timed_out_action( $action_id, $timeout ) {
111
+        /* translators: %s: amount of time */
112
+        $this->log( $action_id, sprintf( __( 'action timed out after %s seconds', 'action-scheduler' ), $timeout ) );
113
+    }
114
+
115
+    public function log_unexpected_shutdown( $action_id, $error ) {
116
+        if ( ! empty( $error ) ) {
117
+            /* translators: 1: error message 2: filename 3: line */
118
+            $this->log( $action_id, sprintf( __( 'unexpected shutdown: PHP Fatal error %1$s in %2$s on line %3$s', 'action-scheduler' ), $error['message'], $error['file'], $error['line'] ) );
119
+        }
120
+    }
121
+
122
+    public function log_reset_action( $action_id ) {
123
+        $this->log( $action_id, __( 'action reset', 'action-scheduler' ) );
124
+    }
125
+
126
+    public function log_ignored_action( $action_id, $context = '' ) {
127
+        if ( ! empty( $context ) ) {
128
+            /* translators: %s: context */
129
+            $message = sprintf( __( 'action ignored via %s', 'action-scheduler' ), $context );
130
+        } else {
131
+            $message = __( 'action ignored', 'action-scheduler' );
132
+        }
133
+        $this->log( $action_id, $message );
134
+    }
135
+
136
+    /**
137
+     * @param string $action_id
138
+     * @param Exception|NULL $exception The exception which occured when fetching the action. NULL by default for backward compatibility.
139
+     *
140
+     * @return ActionScheduler_LogEntry[]
141
+     */
142
+    public function log_failed_fetch_action( $action_id, Exception $exception = NULL ) {
143
+
144
+        if ( ! is_null( $exception ) ) {
145
+            /* translators: %s: exception message */
146
+            $log_message = sprintf( __( 'There was a failure fetching this action: %s', 'action-scheduler' ), $exception->getMessage() );
147
+        } else {
148
+            $log_message = __( 'There was a failure fetching this action', 'action-scheduler' );
149
+        }
150
+
151
+        $this->log( $action_id, $log_message );
152
+    }
153
+
154
+    public function log_failed_schedule_next_instance( $action_id, Exception $exception ) {
155
+        /* translators: %s: exception message */
156
+        $this->log( $action_id, sprintf( __( 'There was a failure scheduling the next instance of this action: %s', 'action-scheduler' ), $exception->getMessage() ) );
157
+    }
158
+
159
+    /**
160
+     * Bulk add cancel action log entries.
161
+     *
162
+     * Implemented here for backward compatibility. Should be implemented in parent loggers
163
+     * for more performant bulk logging.
164
+     *
165
+     * @param array $action_ids List of action ID.
166
+     */
167
+    public function bulk_log_cancel_actions( $action_ids ) {
168
+        if ( empty( $action_ids ) ) {
169
+            return;
170
+        }
171
+
172
+        foreach ( $action_ids as $action_id ) {
173
+            $this->log_canceled_action( $action_id );
174
+        }
175
+    }
176 176
 }
Please login to merge, or discard this patch.
Spacing   +59 added lines, -59 removed lines patch added patch discarded remove patch
@@ -11,7 +11,7 @@  discard block
 block discarded – undo
11 11
 	 * @return ActionScheduler_Logger
12 12
 	 */
13 13
 	public static function instance() {
14
-		if ( empty(self::$logger) ) {
14
+		if (empty(self::$logger)) {
15 15
 			$class = apply_filters('action_scheduler_logger_class', 'ActionScheduler_wpCommentLogger');
16 16
 			self::$logger = new $class();
17 17
 		}
@@ -25,21 +25,21 @@  discard block
 block discarded – undo
25 25
 	 *
26 26
 	 * @return string The log entry ID
27 27
 	 */
28
-	abstract public function log( $action_id, $message, DateTime $date = NULL );
28
+	abstract public function log($action_id, $message, DateTime $date = NULL);
29 29
 
30 30
 	/**
31 31
 	 * @param string $entry_id
32 32
 	 *
33 33
 	 * @return ActionScheduler_LogEntry
34 34
 	 */
35
-	abstract public function get_entry( $entry_id );
35
+	abstract public function get_entry($entry_id);
36 36
 
37 37
 	/**
38 38
 	 * @param string $action_id
39 39
 	 *
40 40
 	 * @return ActionScheduler_LogEntry[]
41 41
 	 */
42
-	abstract public function get_logs( $action_id );
42
+	abstract public function get_logs($action_id);
43 43
 
44 44
 
45 45
 	/**
@@ -47,90 +47,90 @@  discard block
 block discarded – undo
47 47
 	 */
48 48
 	public function init() {
49 49
 		$this->hook_stored_action();
50
-		add_action( 'action_scheduler_canceled_action', array( $this, 'log_canceled_action' ), 10, 1 );
51
-		add_action( 'action_scheduler_begin_execute', array( $this, 'log_started_action' ), 10, 2 );
52
-		add_action( 'action_scheduler_after_execute', array( $this, 'log_completed_action' ), 10, 3 );
53
-		add_action( 'action_scheduler_failed_execution', array( $this, 'log_failed_action' ), 10, 3 );
54
-		add_action( 'action_scheduler_failed_action', array( $this, 'log_timed_out_action' ), 10, 2 );
55
-		add_action( 'action_scheduler_unexpected_shutdown', array( $this, 'log_unexpected_shutdown' ), 10, 2 );
56
-		add_action( 'action_scheduler_reset_action', array( $this, 'log_reset_action' ), 10, 1 );
57
-		add_action( 'action_scheduler_execution_ignored', array( $this, 'log_ignored_action' ), 10, 2 );
58
-		add_action( 'action_scheduler_failed_fetch_action', array( $this, 'log_failed_fetch_action' ), 10, 2 );
59
-		add_action( 'action_scheduler_failed_to_schedule_next_instance', array( $this, 'log_failed_schedule_next_instance' ), 10, 2 );
60
-		add_action( 'action_scheduler_bulk_cancel_actions', array( $this, 'bulk_log_cancel_actions' ), 10, 1 );
50
+		add_action('action_scheduler_canceled_action', array($this, 'log_canceled_action'), 10, 1);
51
+		add_action('action_scheduler_begin_execute', array($this, 'log_started_action'), 10, 2);
52
+		add_action('action_scheduler_after_execute', array($this, 'log_completed_action'), 10, 3);
53
+		add_action('action_scheduler_failed_execution', array($this, 'log_failed_action'), 10, 3);
54
+		add_action('action_scheduler_failed_action', array($this, 'log_timed_out_action'), 10, 2);
55
+		add_action('action_scheduler_unexpected_shutdown', array($this, 'log_unexpected_shutdown'), 10, 2);
56
+		add_action('action_scheduler_reset_action', array($this, 'log_reset_action'), 10, 1);
57
+		add_action('action_scheduler_execution_ignored', array($this, 'log_ignored_action'), 10, 2);
58
+		add_action('action_scheduler_failed_fetch_action', array($this, 'log_failed_fetch_action'), 10, 2);
59
+		add_action('action_scheduler_failed_to_schedule_next_instance', array($this, 'log_failed_schedule_next_instance'), 10, 2);
60
+		add_action('action_scheduler_bulk_cancel_actions', array($this, 'bulk_log_cancel_actions'), 10, 1);
61 61
 	}
62 62
 
63 63
 	public function hook_stored_action() {
64
-		add_action( 'action_scheduler_stored_action', array( $this, 'log_stored_action' ) );
64
+		add_action('action_scheduler_stored_action', array($this, 'log_stored_action'));
65 65
 	}
66 66
 
67 67
 	public function unhook_stored_action() {
68
-		remove_action( 'action_scheduler_stored_action', array( $this, 'log_stored_action' ) );
68
+		remove_action('action_scheduler_stored_action', array($this, 'log_stored_action'));
69 69
 	}
70 70
 
71
-	public function log_stored_action( $action_id ) {
72
-		$this->log( $action_id, __( 'action created', 'action-scheduler' ) );
71
+	public function log_stored_action($action_id) {
72
+		$this->log($action_id, __('action created', 'action-scheduler'));
73 73
 	}
74 74
 
75
-	public function log_canceled_action( $action_id ) {
76
-		$this->log( $action_id, __( 'action canceled', 'action-scheduler' ) );
75
+	public function log_canceled_action($action_id) {
76
+		$this->log($action_id, __('action canceled', 'action-scheduler'));
77 77
 	}
78 78
 
79
-	public function log_started_action( $action_id, $context = '' ) {
80
-		if ( ! empty( $context ) ) {
79
+	public function log_started_action($action_id, $context = '') {
80
+		if (!empty($context)) {
81 81
 			/* translators: %s: context */
82
-			$message = sprintf( __( 'action started via %s', 'action-scheduler' ), $context );
82
+			$message = sprintf(__('action started via %s', 'action-scheduler'), $context);
83 83
 		} else {
84
-			$message = __( 'action started', 'action-scheduler' );
84
+			$message = __('action started', 'action-scheduler');
85 85
 		}
86
-		$this->log( $action_id, $message );
86
+		$this->log($action_id, $message);
87 87
 	}
88 88
 
89
-	public function log_completed_action( $action_id, $action = NULL, $context = '' ) {
90
-		if ( ! empty( $context ) ) {
89
+	public function log_completed_action($action_id, $action = NULL, $context = '') {
90
+		if (!empty($context)) {
91 91
 			/* translators: %s: context */
92
-			$message = sprintf( __( 'action complete via %s', 'action-scheduler' ), $context );
92
+			$message = sprintf(__('action complete via %s', 'action-scheduler'), $context);
93 93
 		} else {
94
-			$message = __( 'action complete', 'action-scheduler' );
94
+			$message = __('action complete', 'action-scheduler');
95 95
 		}
96
-		$this->log( $action_id, $message );
96
+		$this->log($action_id, $message);
97 97
 	}
98 98
 
99
-	public function log_failed_action( $action_id, Exception $exception, $context = '' ) {
100
-		if ( ! empty( $context ) ) {
99
+	public function log_failed_action($action_id, Exception $exception, $context = '') {
100
+		if (!empty($context)) {
101 101
 			/* translators: 1: context 2: exception message */
102
-			$message = sprintf( __( 'action failed via %1$s: %2$s', 'action-scheduler' ), $context, $exception->getMessage() );
102
+			$message = sprintf(__('action failed via %1$s: %2$s', 'action-scheduler'), $context, $exception->getMessage());
103 103
 		} else {
104 104
 			/* translators: %s: exception message */
105
-			$message = sprintf( __( 'action failed: %s', 'action-scheduler' ), $exception->getMessage() );
105
+			$message = sprintf(__('action failed: %s', 'action-scheduler'), $exception->getMessage());
106 106
 		}
107
-		$this->log( $action_id, $message );
107
+		$this->log($action_id, $message);
108 108
 	}
109 109
 
110
-	public function log_timed_out_action( $action_id, $timeout ) {
110
+	public function log_timed_out_action($action_id, $timeout) {
111 111
 		/* translators: %s: amount of time */
112
-		$this->log( $action_id, sprintf( __( 'action timed out after %s seconds', 'action-scheduler' ), $timeout ) );
112
+		$this->log($action_id, sprintf(__('action timed out after %s seconds', 'action-scheduler'), $timeout));
113 113
 	}
114 114
 
115
-	public function log_unexpected_shutdown( $action_id, $error ) {
116
-		if ( ! empty( $error ) ) {
115
+	public function log_unexpected_shutdown($action_id, $error) {
116
+		if (!empty($error)) {
117 117
 			/* translators: 1: error message 2: filename 3: line */
118
-			$this->log( $action_id, sprintf( __( 'unexpected shutdown: PHP Fatal error %1$s in %2$s on line %3$s', 'action-scheduler' ), $error['message'], $error['file'], $error['line'] ) );
118
+			$this->log($action_id, sprintf(__('unexpected shutdown: PHP Fatal error %1$s in %2$s on line %3$s', 'action-scheduler'), $error['message'], $error['file'], $error['line']));
119 119
 		}
120 120
 	}
121 121
 
122
-	public function log_reset_action( $action_id ) {
123
-		$this->log( $action_id, __( 'action reset', 'action-scheduler' ) );
122
+	public function log_reset_action($action_id) {
123
+		$this->log($action_id, __('action reset', 'action-scheduler'));
124 124
 	}
125 125
 
126
-	public function log_ignored_action( $action_id, $context = '' ) {
127
-		if ( ! empty( $context ) ) {
126
+	public function log_ignored_action($action_id, $context = '') {
127
+		if (!empty($context)) {
128 128
 			/* translators: %s: context */
129
-			$message = sprintf( __( 'action ignored via %s', 'action-scheduler' ), $context );
129
+			$message = sprintf(__('action ignored via %s', 'action-scheduler'), $context);
130 130
 		} else {
131
-			$message = __( 'action ignored', 'action-scheduler' );
131
+			$message = __('action ignored', 'action-scheduler');
132 132
 		}
133
-		$this->log( $action_id, $message );
133
+		$this->log($action_id, $message);
134 134
 	}
135 135
 
136 136
 	/**
@@ -139,21 +139,21 @@  discard block
 block discarded – undo
139 139
 	 *
140 140
 	 * @return ActionScheduler_LogEntry[]
141 141
 	 */
142
-	public function log_failed_fetch_action( $action_id, Exception $exception = NULL ) {
142
+	public function log_failed_fetch_action($action_id, Exception $exception = NULL) {
143 143
 
144
-		if ( ! is_null( $exception ) ) {
144
+		if (!is_null($exception)) {
145 145
 			/* translators: %s: exception message */
146
-			$log_message = sprintf( __( 'There was a failure fetching this action: %s', 'action-scheduler' ), $exception->getMessage() );
146
+			$log_message = sprintf(__('There was a failure fetching this action: %s', 'action-scheduler'), $exception->getMessage());
147 147
 		} else {
148
-			$log_message = __( 'There was a failure fetching this action', 'action-scheduler' );
148
+			$log_message = __('There was a failure fetching this action', 'action-scheduler');
149 149
 		}
150 150
 
151
-		$this->log( $action_id, $log_message );
151
+		$this->log($action_id, $log_message);
152 152
 	}
153 153
 
154
-	public function log_failed_schedule_next_instance( $action_id, Exception $exception ) {
154
+	public function log_failed_schedule_next_instance($action_id, Exception $exception) {
155 155
 		/* translators: %s: exception message */
156
-		$this->log( $action_id, sprintf( __( 'There was a failure scheduling the next instance of this action: %s', 'action-scheduler' ), $exception->getMessage() ) );
156
+		$this->log($action_id, sprintf(__('There was a failure scheduling the next instance of this action: %s', 'action-scheduler'), $exception->getMessage()));
157 157
 	}
158 158
 
159 159
 	/**
@@ -164,13 +164,13 @@  discard block
 block discarded – undo
164 164
 	 *
165 165
 	 * @param array $action_ids List of action ID.
166 166
 	 */
167
-	public function bulk_log_cancel_actions( $action_ids ) {
168
-		if ( empty( $action_ids ) ) {
167
+	public function bulk_log_cancel_actions($action_ids) {
168
+		if (empty($action_ids)) {
169 169
 			return;
170 170
 		}
171 171
 
172
-		foreach ( $action_ids as $action_id ) {
173
-			$this->log_canceled_action( $action_id );
172
+		foreach ($action_ids as $action_id) {
173
+			$this->log_canceled_action($action_id);
174 174
 		}
175 175
 	}
176 176
 }
Please login to merge, or discard this patch.
libraries/action-scheduler/classes/abstracts/ActionScheduler_Lock.php 2 patches
Indentation   +52 added lines, -52 removed lines patch added patch discarded remove patch
@@ -7,56 +7,56 @@
 block discarded – undo
7 7
  */
8 8
 abstract class ActionScheduler_Lock {
9 9
 
10
-	/** @var ActionScheduler_Lock */
11
-	private static $locker = NULL;
12
-
13
-	/** @var int */
14
-	protected static $lock_duration = MINUTE_IN_SECONDS;
15
-
16
-	/**
17
-	 * Check if a lock is set for a given lock type.
18
-	 *
19
-	 * @param string $lock_type A string to identify different lock types.
20
-	 * @return bool
21
-	 */
22
-	public function is_locked( $lock_type ) {
23
-		return ( $this->get_expiration( $lock_type ) >= time() );
24
-	}
25
-
26
-	/**
27
-	 * Set a lock.
28
-	 *
29
-	 * @param string $lock_type A string to identify different lock types.
30
-	 * @return bool
31
-	 */
32
-	abstract public function set( $lock_type );
33
-
34
-	/**
35
-	 * If a lock is set, return the timestamp it was set to expiry.
36
-	 *
37
-	 * @param string $lock_type A string to identify different lock types.
38
-	 * @return bool|int False if no lock is set, otherwise the timestamp for when the lock is set to expire.
39
-	 */
40
-	abstract public function get_expiration( $lock_type );
41
-
42
-	/**
43
-	 * Get the amount of time to set for a given lock. 60 seconds by default.
44
-	 *
45
-	 * @param string $lock_type A string to identify different lock types.
46
-	 * @return int
47
-	 */
48
-	protected function get_duration( $lock_type ) {
49
-		return apply_filters( 'action_scheduler_lock_duration', self::$lock_duration, $lock_type );
50
-	}
51
-
52
-	/**
53
-	 * @return ActionScheduler_Lock
54
-	 */
55
-	public static function instance() {
56
-		if ( empty( self::$locker ) ) {
57
-			$class = apply_filters( 'action_scheduler_lock_class', 'ActionScheduler_OptionLock' );
58
-			self::$locker = new $class();
59
-		}
60
-		return self::$locker;
61
-	}
10
+    /** @var ActionScheduler_Lock */
11
+    private static $locker = NULL;
12
+
13
+    /** @var int */
14
+    protected static $lock_duration = MINUTE_IN_SECONDS;
15
+
16
+    /**
17
+     * Check if a lock is set for a given lock type.
18
+     *
19
+     * @param string $lock_type A string to identify different lock types.
20
+     * @return bool
21
+     */
22
+    public function is_locked( $lock_type ) {
23
+        return ( $this->get_expiration( $lock_type ) >= time() );
24
+    }
25
+
26
+    /**
27
+     * Set a lock.
28
+     *
29
+     * @param string $lock_type A string to identify different lock types.
30
+     * @return bool
31
+     */
32
+    abstract public function set( $lock_type );
33
+
34
+    /**
35
+     * If a lock is set, return the timestamp it was set to expiry.
36
+     *
37
+     * @param string $lock_type A string to identify different lock types.
38
+     * @return bool|int False if no lock is set, otherwise the timestamp for when the lock is set to expire.
39
+     */
40
+    abstract public function get_expiration( $lock_type );
41
+
42
+    /**
43
+     * Get the amount of time to set for a given lock. 60 seconds by default.
44
+     *
45
+     * @param string $lock_type A string to identify different lock types.
46
+     * @return int
47
+     */
48
+    protected function get_duration( $lock_type ) {
49
+        return apply_filters( 'action_scheduler_lock_duration', self::$lock_duration, $lock_type );
50
+    }
51
+
52
+    /**
53
+     * @return ActionScheduler_Lock
54
+     */
55
+    public static function instance() {
56
+        if ( empty( self::$locker ) ) {
57
+            $class = apply_filters( 'action_scheduler_lock_class', 'ActionScheduler_OptionLock' );
58
+            self::$locker = new $class();
59
+        }
60
+        return self::$locker;
61
+    }
62 62
 }
Please login to merge, or discard this patch.
Spacing   +8 added lines, -8 removed lines patch added patch discarded remove patch
@@ -19,8 +19,8 @@  discard block
 block discarded – undo
19 19
 	 * @param string $lock_type A string to identify different lock types.
20 20
 	 * @return bool
21 21
 	 */
22
-	public function is_locked( $lock_type ) {
23
-		return ( $this->get_expiration( $lock_type ) >= time() );
22
+	public function is_locked($lock_type) {
23
+		return ($this->get_expiration($lock_type) >= time());
24 24
 	}
25 25
 
26 26
 	/**
@@ -29,7 +29,7 @@  discard block
 block discarded – undo
29 29
 	 * @param string $lock_type A string to identify different lock types.
30 30
 	 * @return bool
31 31
 	 */
32
-	abstract public function set( $lock_type );
32
+	abstract public function set($lock_type);
33 33
 
34 34
 	/**
35 35
 	 * If a lock is set, return the timestamp it was set to expiry.
@@ -37,7 +37,7 @@  discard block
 block discarded – undo
37 37
 	 * @param string $lock_type A string to identify different lock types.
38 38
 	 * @return bool|int False if no lock is set, otherwise the timestamp for when the lock is set to expire.
39 39
 	 */
40
-	abstract public function get_expiration( $lock_type );
40
+	abstract public function get_expiration($lock_type);
41 41
 
42 42
 	/**
43 43
 	 * Get the amount of time to set for a given lock. 60 seconds by default.
@@ -45,16 +45,16 @@  discard block
 block discarded – undo
45 45
 	 * @param string $lock_type A string to identify different lock types.
46 46
 	 * @return int
47 47
 	 */
48
-	protected function get_duration( $lock_type ) {
49
-		return apply_filters( 'action_scheduler_lock_duration', self::$lock_duration, $lock_type );
48
+	protected function get_duration($lock_type) {
49
+		return apply_filters('action_scheduler_lock_duration', self::$lock_duration, $lock_type);
50 50
 	}
51 51
 
52 52
 	/**
53 53
 	 * @return ActionScheduler_Lock
54 54
 	 */
55 55
 	public static function instance() {
56
-		if ( empty( self::$locker ) ) {
57
-			$class = apply_filters( 'action_scheduler_lock_class', 'ActionScheduler_OptionLock' );
56
+		if (empty(self::$locker)) {
57
+			$class = apply_filters('action_scheduler_lock_class', 'ActionScheduler_OptionLock');
58 58
 			self::$locker = new $class();
59 59
 		}
60 60
 		return self::$locker;
Please login to merge, or discard this patch.
includes/libraries/action-scheduler/classes/abstracts/ActionScheduler.php 2 patches
Indentation   +264 added lines, -264 removed lines patch added patch discarded remove patch
@@ -8,268 +8,268 @@
 block discarded – undo
8 8
  * @codeCoverageIgnore
9 9
  */
10 10
 abstract class ActionScheduler {
11
-	private static $plugin_file = '';
12
-	/** @var ActionScheduler_ActionFactory */
13
-	private static $factory = NULL;
14
-
15
-	public static function factory() {
16
-		if ( !isset(self::$factory) ) {
17
-			self::$factory = new ActionScheduler_ActionFactory();
18
-		}
19
-		return self::$factory;
20
-	}
21
-
22
-	public static function store() {
23
-		return ActionScheduler_Store::instance();
24
-	}
25
-
26
-	public static function lock() {
27
-		return ActionScheduler_Lock::instance();
28
-	}
29
-
30
-	public static function logger() {
31
-		return ActionScheduler_Logger::instance();
32
-	}
33
-
34
-	public static function runner() {
35
-		return ActionScheduler_QueueRunner::instance();
36
-	}
37
-
38
-	public static function admin_view() {
39
-		return ActionScheduler_AdminView::instance();
40
-	}
41
-
42
-	/**
43
-	 * Get the absolute system path to the plugin directory, or a file therein
44
-	 * @static
45
-	 * @param string $path
46
-	 * @return string
47
-	 */
48
-	public static function plugin_path( $path ) {
49
-		$base = dirname(self::$plugin_file);
50
-		if ( $path ) {
51
-			return trailingslashit($base).$path;
52
-		} else {
53
-			return untrailingslashit($base);
54
-		}
55
-	}
56
-
57
-	/**
58
-	 * Get the absolute URL to the plugin directory, or a file therein
59
-	 * @static
60
-	 * @param string $path
61
-	 * @return string
62
-	 */
63
-	public static function plugin_url( $path ) {
64
-		return plugins_url($path, self::$plugin_file);
65
-	}
66
-
67
-	public static function autoload( $class ) {
68
-		$d           = DIRECTORY_SEPARATOR;
69
-		$classes_dir = self::plugin_path( 'classes' . $d );
70
-		$separator   = strrpos( $class, '\\' );
71
-		if ( false !== $separator ) {
72
-			if ( 0 !== strpos( $class, 'Action_Scheduler' ) ) {
73
-				return;
74
-			}
75
-			$class = substr( $class, $separator + 1 );
76
-		}
77
-
78
-		if ( 'Deprecated' === substr( $class, -10 ) ) {
79
-			$dir = self::plugin_path( 'deprecated' . $d );
80
-		} elseif ( self::is_class_abstract( $class ) ) {
81
-			$dir = $classes_dir . 'abstracts' . $d;
82
-		} elseif ( self::is_class_migration( $class ) ) {
83
-			$dir = $classes_dir . 'migration' . $d;
84
-		} elseif ( 'Schedule' === substr( $class, -8 ) ) {
85
-			$dir = $classes_dir . 'schedules' . $d;
86
-		} elseif ( 'Action' === substr( $class, -6 ) ) {
87
-			$dir = $classes_dir . 'actions' . $d;
88
-		} elseif ( 'Schema' === substr( $class, -6 ) ) {
89
-			$dir = $classes_dir . 'schema' . $d;
90
-		} elseif ( strpos( $class, 'ActionScheduler' ) === 0 ) {
91
-			$segments = explode( '_', $class );
92
-			$type = isset( $segments[ 1 ] ) ? $segments[ 1 ] : '';
93
-
94
-			switch ( $type ) {
95
-				case 'WPCLI':
96
-					$dir = $classes_dir . 'WP_CLI' . $d;
97
-					break;
98
-				case 'DBLogger':
99
-				case 'DBStore':
100
-				case 'HybridStore':
101
-				case 'wpPostStore':
102
-				case 'wpCommentLogger':
103
-					$dir = $classes_dir . 'data-stores' . $d;
104
-					break;
105
-				default:
106
-					$dir = $classes_dir;
107
-					break;
108
-			}
109
-		} elseif ( self::is_class_cli( $class ) ) {
110
-			$dir = $classes_dir . 'WP_CLI' . $d;
111
-		} elseif ( strpos( $class, 'CronExpression' ) === 0 ) {
112
-			$dir = self::plugin_path( 'lib' . $d . 'cron-expression' . $d );
113
-		} elseif ( strpos( $class, 'WP_Async_Request' ) === 0 ) {
114
-			$dir = self::plugin_path( 'lib' . $d );
115
-		} else {
116
-			return;
117
-		}
118
-
119
-		if ( file_exists( "{$dir}{$class}.php" ) ) {
120
-			include( "{$dir}{$class}.php" );
121
-			return;
122
-		}
123
-	}
124
-
125
-	/**
126
-	 * Initialize the plugin
127
-	 *
128
-	 * @static
129
-	 * @param string $plugin_file
130
-	 */
131
-	public static function init( $plugin_file ) {
132
-		self::$plugin_file = $plugin_file;
133
-		spl_autoload_register( array( __CLASS__, 'autoload' ) );
134
-
135
-		/**
136
-		 * Fires in the early stages of Action Scheduler init hook.
137
-		 */
138
-		do_action( 'action_scheduler_pre_init' );
139
-
140
-		require_once( self::plugin_path( 'functions.php' ) );
141
-		ActionScheduler_DataController::init();
142
-
143
-		$store      = self::store();
144
-		$logger     = self::logger();
145
-		$runner     = self::runner();
146
-		$admin_view = self::admin_view();
147
-
148
-		// Ensure initialization on plugin activation.
149
-		if ( ! did_action( 'init' ) ) {
150
-			add_action( 'init', array( $admin_view, 'init' ), 0, 0 ); // run before $store::init()
151
-			add_action( 'init', array( $store, 'init' ), 1, 0 );
152
-			add_action( 'init', array( $logger, 'init' ), 1, 0 );
153
-			add_action( 'init', array( $runner, 'init' ), 1, 0 );
154
-		} else {
155
-			$admin_view->init();
156
-			$store->init();
157
-			$logger->init();
158
-			$runner->init();
159
-		}
160
-
161
-		if ( apply_filters( 'action_scheduler_load_deprecated_functions', true ) ) {
162
-			require_once( self::plugin_path( 'deprecated/functions.php' ) );
163
-		}
164
-
165
-		if ( defined( 'WP_CLI' ) && WP_CLI ) {
166
-			WP_CLI::add_command( 'action-scheduler', 'ActionScheduler_WPCLI_Scheduler_command' );
167
-			if ( ! ActionScheduler_DataController::is_migration_complete() && Controller::instance()->allow_migration() ) {
168
-				$command = new Migration_Command();
169
-				$command->register();
170
-			}
171
-		}
172
-
173
-		/**
174
-		 * Handle WP comment cleanup after migration.
175
-		 */
176
-		if ( is_a( $logger, 'ActionScheduler_DBLogger' ) && ActionScheduler_DataController::is_migration_complete() && ActionScheduler_WPCommentCleaner::has_logs() ) {
177
-			ActionScheduler_WPCommentCleaner::init();
178
-		}
179
-
180
-		add_action( 'action_scheduler/migration_complete', 'ActionScheduler_WPCommentCleaner::maybe_schedule_cleanup' );
181
-	}
182
-
183
-	/**
184
-	 * Determine if the class is one of our abstract classes.
185
-	 *
186
-	 * @since 3.0.0
187
-	 *
188
-	 * @param string $class The class name.
189
-	 *
190
-	 * @return bool
191
-	 */
192
-	protected static function is_class_abstract( $class ) {
193
-		static $abstracts = array(
194
-			'ActionScheduler'                            => true,
195
-			'ActionScheduler_Abstract_ListTable'         => true,
196
-			'ActionScheduler_Abstract_QueueRunner'       => true,
197
-			'ActionScheduler_Abstract_Schedule'          => true,
198
-			'ActionScheduler_Abstract_RecurringSchedule' => true,
199
-			'ActionScheduler_Lock'                       => true,
200
-			'ActionScheduler_Logger'                     => true,
201
-			'ActionScheduler_Abstract_Schema'            => true,
202
-			'ActionScheduler_Store'                      => true,
203
-			'ActionScheduler_TimezoneHelper'             => true,
204
-		);
205
-
206
-		return isset( $abstracts[ $class ] ) && $abstracts[ $class ];
207
-	}
208
-
209
-	/**
210
-	 * Determine if the class is one of our migration classes.
211
-	 *
212
-	 * @since 3.0.0
213
-	 *
214
-	 * @param string $class The class name.
215
-	 *
216
-	 * @return bool
217
-	 */
218
-	protected static function is_class_migration( $class ) {
219
-		static $migration_segments = array(
220
-			'ActionMigrator'  => true,
221
-			'BatchFetcher'    => true,
222
-			'DBStoreMigrator' => true,
223
-			'DryRun'          => true,
224
-			'LogMigrator'     => true,
225
-			'Config'          => true,
226
-			'Controller'      => true,
227
-			'Runner'          => true,
228
-			'Scheduler'       => true,
229
-		);
230
-
231
-		$segments = explode( '_', $class );
232
-		$segment = isset( $segments[ 1 ] ) ? $segments[ 1 ] : $class;
233
-
234
-		return isset( $migration_segments[ $segment ] ) && $migration_segments[ $segment ];
235
-	}
236
-
237
-	/**
238
-	 * Determine if the class is one of our WP CLI classes.
239
-	 *
240
-	 * @since 3.0.0
241
-	 *
242
-	 * @param string $class The class name.
243
-	 *
244
-	 * @return bool
245
-	 */
246
-	protected static function is_class_cli( $class ) {
247
-		static $cli_segments = array(
248
-			'QueueRunner' => true,
249
-			'Command'     => true,
250
-			'ProgressBar' => true,
251
-		);
252
-
253
-		$segments = explode( '_', $class );
254
-		$segment = isset( $segments[ 1 ] ) ? $segments[ 1 ] : $class;
255
-
256
-		return isset( $cli_segments[ $segment ] ) && $cli_segments[ $segment ];
257
-	}
258
-
259
-	final public function __clone() {
260
-		trigger_error("Singleton. No cloning allowed!", E_USER_ERROR);
261
-	}
262
-
263
-	final public function __wakeup() {
264
-		trigger_error("Singleton. No serialization allowed!", E_USER_ERROR);
265
-	}
266
-
267
-	final private function __construct() {}
268
-
269
-	/** Deprecated **/
270
-
271
-	public static function get_datetime_object( $when = null, $timezone = 'UTC' ) {
272
-		_deprecated_function( __METHOD__, '2.0', 'wcs_add_months()' );
273
-		return as_get_datetime_object( $when, $timezone );
274
-	}
11
+    private static $plugin_file = '';
12
+    /** @var ActionScheduler_ActionFactory */
13
+    private static $factory = NULL;
14
+
15
+    public static function factory() {
16
+        if ( !isset(self::$factory) ) {
17
+            self::$factory = new ActionScheduler_ActionFactory();
18
+        }
19
+        return self::$factory;
20
+    }
21
+
22
+    public static function store() {
23
+        return ActionScheduler_Store::instance();
24
+    }
25
+
26
+    public static function lock() {
27
+        return ActionScheduler_Lock::instance();
28
+    }
29
+
30
+    public static function logger() {
31
+        return ActionScheduler_Logger::instance();
32
+    }
33
+
34
+    public static function runner() {
35
+        return ActionScheduler_QueueRunner::instance();
36
+    }
37
+
38
+    public static function admin_view() {
39
+        return ActionScheduler_AdminView::instance();
40
+    }
41
+
42
+    /**
43
+     * Get the absolute system path to the plugin directory, or a file therein
44
+     * @static
45
+     * @param string $path
46
+     * @return string
47
+     */
48
+    public static function plugin_path( $path ) {
49
+        $base = dirname(self::$plugin_file);
50
+        if ( $path ) {
51
+            return trailingslashit($base).$path;
52
+        } else {
53
+            return untrailingslashit($base);
54
+        }
55
+    }
56
+
57
+    /**
58
+     * Get the absolute URL to the plugin directory, or a file therein
59
+     * @static
60
+     * @param string $path
61
+     * @return string
62
+     */
63
+    public static function plugin_url( $path ) {
64
+        return plugins_url($path, self::$plugin_file);
65
+    }
66
+
67
+    public static function autoload( $class ) {
68
+        $d           = DIRECTORY_SEPARATOR;
69
+        $classes_dir = self::plugin_path( 'classes' . $d );
70
+        $separator   = strrpos( $class, '\\' );
71
+        if ( false !== $separator ) {
72
+            if ( 0 !== strpos( $class, 'Action_Scheduler' ) ) {
73
+                return;
74
+            }
75
+            $class = substr( $class, $separator + 1 );
76
+        }
77
+
78
+        if ( 'Deprecated' === substr( $class, -10 ) ) {
79
+            $dir = self::plugin_path( 'deprecated' . $d );
80
+        } elseif ( self::is_class_abstract( $class ) ) {
81
+            $dir = $classes_dir . 'abstracts' . $d;
82
+        } elseif ( self::is_class_migration( $class ) ) {
83
+            $dir = $classes_dir . 'migration' . $d;
84
+        } elseif ( 'Schedule' === substr( $class, -8 ) ) {
85
+            $dir = $classes_dir . 'schedules' . $d;
86
+        } elseif ( 'Action' === substr( $class, -6 ) ) {
87
+            $dir = $classes_dir . 'actions' . $d;
88
+        } elseif ( 'Schema' === substr( $class, -6 ) ) {
89
+            $dir = $classes_dir . 'schema' . $d;
90
+        } elseif ( strpos( $class, 'ActionScheduler' ) === 0 ) {
91
+            $segments = explode( '_', $class );
92
+            $type = isset( $segments[ 1 ] ) ? $segments[ 1 ] : '';
93
+
94
+            switch ( $type ) {
95
+                case 'WPCLI':
96
+                    $dir = $classes_dir . 'WP_CLI' . $d;
97
+                    break;
98
+                case 'DBLogger':
99
+                case 'DBStore':
100
+                case 'HybridStore':
101
+                case 'wpPostStore':
102
+                case 'wpCommentLogger':
103
+                    $dir = $classes_dir . 'data-stores' . $d;
104
+                    break;
105
+                default:
106
+                    $dir = $classes_dir;
107
+                    break;
108
+            }
109
+        } elseif ( self::is_class_cli( $class ) ) {
110
+            $dir = $classes_dir . 'WP_CLI' . $d;
111
+        } elseif ( strpos( $class, 'CronExpression' ) === 0 ) {
112
+            $dir = self::plugin_path( 'lib' . $d . 'cron-expression' . $d );
113
+        } elseif ( strpos( $class, 'WP_Async_Request' ) === 0 ) {
114
+            $dir = self::plugin_path( 'lib' . $d );
115
+        } else {
116
+            return;
117
+        }
118
+
119
+        if ( file_exists( "{$dir}{$class}.php" ) ) {
120
+            include( "{$dir}{$class}.php" );
121
+            return;
122
+        }
123
+    }
124
+
125
+    /**
126
+     * Initialize the plugin
127
+     *
128
+     * @static
129
+     * @param string $plugin_file
130
+     */
131
+    public static function init( $plugin_file ) {
132
+        self::$plugin_file = $plugin_file;
133
+        spl_autoload_register( array( __CLASS__, 'autoload' ) );
134
+
135
+        /**
136
+         * Fires in the early stages of Action Scheduler init hook.
137
+         */
138
+        do_action( 'action_scheduler_pre_init' );
139
+
140
+        require_once( self::plugin_path( 'functions.php' ) );
141
+        ActionScheduler_DataController::init();
142
+
143
+        $store      = self::store();
144
+        $logger     = self::logger();
145
+        $runner     = self::runner();
146
+        $admin_view = self::admin_view();
147
+
148
+        // Ensure initialization on plugin activation.
149
+        if ( ! did_action( 'init' ) ) {
150
+            add_action( 'init', array( $admin_view, 'init' ), 0, 0 ); // run before $store::init()
151
+            add_action( 'init', array( $store, 'init' ), 1, 0 );
152
+            add_action( 'init', array( $logger, 'init' ), 1, 0 );
153
+            add_action( 'init', array( $runner, 'init' ), 1, 0 );
154
+        } else {
155
+            $admin_view->init();
156
+            $store->init();
157
+            $logger->init();
158
+            $runner->init();
159
+        }
160
+
161
+        if ( apply_filters( 'action_scheduler_load_deprecated_functions', true ) ) {
162
+            require_once( self::plugin_path( 'deprecated/functions.php' ) );
163
+        }
164
+
165
+        if ( defined( 'WP_CLI' ) && WP_CLI ) {
166
+            WP_CLI::add_command( 'action-scheduler', 'ActionScheduler_WPCLI_Scheduler_command' );
167
+            if ( ! ActionScheduler_DataController::is_migration_complete() && Controller::instance()->allow_migration() ) {
168
+                $command = new Migration_Command();
169
+                $command->register();
170
+            }
171
+        }
172
+
173
+        /**
174
+         * Handle WP comment cleanup after migration.
175
+         */
176
+        if ( is_a( $logger, 'ActionScheduler_DBLogger' ) && ActionScheduler_DataController::is_migration_complete() && ActionScheduler_WPCommentCleaner::has_logs() ) {
177
+            ActionScheduler_WPCommentCleaner::init();
178
+        }
179
+
180
+        add_action( 'action_scheduler/migration_complete', 'ActionScheduler_WPCommentCleaner::maybe_schedule_cleanup' );
181
+    }
182
+
183
+    /**
184
+     * Determine if the class is one of our abstract classes.
185
+     *
186
+     * @since 3.0.0
187
+     *
188
+     * @param string $class The class name.
189
+     *
190
+     * @return bool
191
+     */
192
+    protected static function is_class_abstract( $class ) {
193
+        static $abstracts = array(
194
+            'ActionScheduler'                            => true,
195
+            'ActionScheduler_Abstract_ListTable'         => true,
196
+            'ActionScheduler_Abstract_QueueRunner'       => true,
197
+            'ActionScheduler_Abstract_Schedule'          => true,
198
+            'ActionScheduler_Abstract_RecurringSchedule' => true,
199
+            'ActionScheduler_Lock'                       => true,
200
+            'ActionScheduler_Logger'                     => true,
201
+            'ActionScheduler_Abstract_Schema'            => true,
202
+            'ActionScheduler_Store'                      => true,
203
+            'ActionScheduler_TimezoneHelper'             => true,
204
+        );
205
+
206
+        return isset( $abstracts[ $class ] ) && $abstracts[ $class ];
207
+    }
208
+
209
+    /**
210
+     * Determine if the class is one of our migration classes.
211
+     *
212
+     * @since 3.0.0
213
+     *
214
+     * @param string $class The class name.
215
+     *
216
+     * @return bool
217
+     */
218
+    protected static function is_class_migration( $class ) {
219
+        static $migration_segments = array(
220
+            'ActionMigrator'  => true,
221
+            'BatchFetcher'    => true,
222
+            'DBStoreMigrator' => true,
223
+            'DryRun'          => true,
224
+            'LogMigrator'     => true,
225
+            'Config'          => true,
226
+            'Controller'      => true,
227
+            'Runner'          => true,
228
+            'Scheduler'       => true,
229
+        );
230
+
231
+        $segments = explode( '_', $class );
232
+        $segment = isset( $segments[ 1 ] ) ? $segments[ 1 ] : $class;
233
+
234
+        return isset( $migration_segments[ $segment ] ) && $migration_segments[ $segment ];
235
+    }
236
+
237
+    /**
238
+     * Determine if the class is one of our WP CLI classes.
239
+     *
240
+     * @since 3.0.0
241
+     *
242
+     * @param string $class The class name.
243
+     *
244
+     * @return bool
245
+     */
246
+    protected static function is_class_cli( $class ) {
247
+        static $cli_segments = array(
248
+            'QueueRunner' => true,
249
+            'Command'     => true,
250
+            'ProgressBar' => true,
251
+        );
252
+
253
+        $segments = explode( '_', $class );
254
+        $segment = isset( $segments[ 1 ] ) ? $segments[ 1 ] : $class;
255
+
256
+        return isset( $cli_segments[ $segment ] ) && $cli_segments[ $segment ];
257
+    }
258
+
259
+    final public function __clone() {
260
+        trigger_error("Singleton. No cloning allowed!", E_USER_ERROR);
261
+    }
262
+
263
+    final public function __wakeup() {
264
+        trigger_error("Singleton. No serialization allowed!", E_USER_ERROR);
265
+    }
266
+
267
+    final private function __construct() {}
268
+
269
+    /** Deprecated **/
270
+
271
+    public static function get_datetime_object( $when = null, $timezone = 'UTC' ) {
272
+        _deprecated_function( __METHOD__, '2.0', 'wcs_add_months()' );
273
+        return as_get_datetime_object( $when, $timezone );
274
+    }
275 275
 }
Please login to merge, or discard this patch.
Spacing   +58 added lines, -58 removed lines patch added patch discarded remove patch
@@ -13,7 +13,7 @@  discard block
 block discarded – undo
13 13
 	private static $factory = NULL;
14 14
 
15 15
 	public static function factory() {
16
-		if ( !isset(self::$factory) ) {
16
+		if (!isset(self::$factory)) {
17 17
 			self::$factory = new ActionScheduler_ActionFactory();
18 18
 		}
19 19
 		return self::$factory;
@@ -45,10 +45,10 @@  discard block
 block discarded – undo
45 45
 	 * @param string $path
46 46
 	 * @return string
47 47
 	 */
48
-	public static function plugin_path( $path ) {
48
+	public static function plugin_path($path) {
49 49
 		$base = dirname(self::$plugin_file);
50
-		if ( $path ) {
51
-			return trailingslashit($base).$path;
50
+		if ($path) {
51
+			return trailingslashit($base) . $path;
52 52
 		} else {
53 53
 			return untrailingslashit($base);
54 54
 		}
@@ -60,38 +60,38 @@  discard block
 block discarded – undo
60 60
 	 * @param string $path
61 61
 	 * @return string
62 62
 	 */
63
-	public static function plugin_url( $path ) {
63
+	public static function plugin_url($path) {
64 64
 		return plugins_url($path, self::$plugin_file);
65 65
 	}
66 66
 
67
-	public static function autoload( $class ) {
67
+	public static function autoload($class) {
68 68
 		$d           = DIRECTORY_SEPARATOR;
69
-		$classes_dir = self::plugin_path( 'classes' . $d );
70
-		$separator   = strrpos( $class, '\\' );
71
-		if ( false !== $separator ) {
72
-			if ( 0 !== strpos( $class, 'Action_Scheduler' ) ) {
69
+		$classes_dir = self::plugin_path('classes' . $d);
70
+		$separator   = strrpos($class, '\\');
71
+		if (false !== $separator) {
72
+			if (0 !== strpos($class, 'Action_Scheduler')) {
73 73
 				return;
74 74
 			}
75
-			$class = substr( $class, $separator + 1 );
75
+			$class = substr($class, $separator + 1);
76 76
 		}
77 77
 
78
-		if ( 'Deprecated' === substr( $class, -10 ) ) {
79
-			$dir = self::plugin_path( 'deprecated' . $d );
80
-		} elseif ( self::is_class_abstract( $class ) ) {
78
+		if ('Deprecated' === substr($class, -10)) {
79
+			$dir = self::plugin_path('deprecated' . $d);
80
+		} elseif (self::is_class_abstract($class)) {
81 81
 			$dir = $classes_dir . 'abstracts' . $d;
82
-		} elseif ( self::is_class_migration( $class ) ) {
82
+		} elseif (self::is_class_migration($class)) {
83 83
 			$dir = $classes_dir . 'migration' . $d;
84
-		} elseif ( 'Schedule' === substr( $class, -8 ) ) {
84
+		} elseif ('Schedule' === substr($class, -8)) {
85 85
 			$dir = $classes_dir . 'schedules' . $d;
86
-		} elseif ( 'Action' === substr( $class, -6 ) ) {
86
+		} elseif ('Action' === substr($class, -6)) {
87 87
 			$dir = $classes_dir . 'actions' . $d;
88
-		} elseif ( 'Schema' === substr( $class, -6 ) ) {
88
+		} elseif ('Schema' === substr($class, -6)) {
89 89
 			$dir = $classes_dir . 'schema' . $d;
90
-		} elseif ( strpos( $class, 'ActionScheduler' ) === 0 ) {
91
-			$segments = explode( '_', $class );
92
-			$type = isset( $segments[ 1 ] ) ? $segments[ 1 ] : '';
90
+		} elseif (strpos($class, 'ActionScheduler') === 0) {
91
+			$segments = explode('_', $class);
92
+			$type = isset($segments[1]) ? $segments[1] : '';
93 93
 
94
-			switch ( $type ) {
94
+			switch ($type) {
95 95
 				case 'WPCLI':
96 96
 					$dir = $classes_dir . 'WP_CLI' . $d;
97 97
 					break;
@@ -106,18 +106,18 @@  discard block
 block discarded – undo
106 106
 					$dir = $classes_dir;
107 107
 					break;
108 108
 			}
109
-		} elseif ( self::is_class_cli( $class ) ) {
109
+		} elseif (self::is_class_cli($class)) {
110 110
 			$dir = $classes_dir . 'WP_CLI' . $d;
111
-		} elseif ( strpos( $class, 'CronExpression' ) === 0 ) {
112
-			$dir = self::plugin_path( 'lib' . $d . 'cron-expression' . $d );
113
-		} elseif ( strpos( $class, 'WP_Async_Request' ) === 0 ) {
114
-			$dir = self::plugin_path( 'lib' . $d );
111
+		} elseif (strpos($class, 'CronExpression') === 0) {
112
+			$dir = self::plugin_path('lib' . $d . 'cron-expression' . $d);
113
+		} elseif (strpos($class, 'WP_Async_Request') === 0) {
114
+			$dir = self::plugin_path('lib' . $d);
115 115
 		} else {
116 116
 			return;
117 117
 		}
118 118
 
119
-		if ( file_exists( "{$dir}{$class}.php" ) ) {
120
-			include( "{$dir}{$class}.php" );
119
+		if (file_exists("{$dir}{$class}.php")) {
120
+			include("{$dir}{$class}.php");
121 121
 			return;
122 122
 		}
123 123
 	}
@@ -128,16 +128,16 @@  discard block
 block discarded – undo
128 128
 	 * @static
129 129
 	 * @param string $plugin_file
130 130
 	 */
131
-	public static function init( $plugin_file ) {
131
+	public static function init($plugin_file) {
132 132
 		self::$plugin_file = $plugin_file;
133
-		spl_autoload_register( array( __CLASS__, 'autoload' ) );
133
+		spl_autoload_register(array(__CLASS__, 'autoload'));
134 134
 
135 135
 		/**
136 136
 		 * Fires in the early stages of Action Scheduler init hook.
137 137
 		 */
138
-		do_action( 'action_scheduler_pre_init' );
138
+		do_action('action_scheduler_pre_init');
139 139
 
140
-		require_once( self::plugin_path( 'functions.php' ) );
140
+		require_once(self::plugin_path('functions.php'));
141 141
 		ActionScheduler_DataController::init();
142 142
 
143 143
 		$store      = self::store();
@@ -146,11 +146,11 @@  discard block
 block discarded – undo
146 146
 		$admin_view = self::admin_view();
147 147
 
148 148
 		// Ensure initialization on plugin activation.
149
-		if ( ! did_action( 'init' ) ) {
150
-			add_action( 'init', array( $admin_view, 'init' ), 0, 0 ); // run before $store::init()
151
-			add_action( 'init', array( $store, 'init' ), 1, 0 );
152
-			add_action( 'init', array( $logger, 'init' ), 1, 0 );
153
-			add_action( 'init', array( $runner, 'init' ), 1, 0 );
149
+		if (!did_action('init')) {
150
+			add_action('init', array($admin_view, 'init'), 0, 0); // run before $store::init()
151
+			add_action('init', array($store, 'init'), 1, 0);
152
+			add_action('init', array($logger, 'init'), 1, 0);
153
+			add_action('init', array($runner, 'init'), 1, 0);
154 154
 		} else {
155 155
 			$admin_view->init();
156 156
 			$store->init();
@@ -158,13 +158,13 @@  discard block
 block discarded – undo
158 158
 			$runner->init();
159 159
 		}
160 160
 
161
-		if ( apply_filters( 'action_scheduler_load_deprecated_functions', true ) ) {
162
-			require_once( self::plugin_path( 'deprecated/functions.php' ) );
161
+		if (apply_filters('action_scheduler_load_deprecated_functions', true)) {
162
+			require_once(self::plugin_path('deprecated/functions.php'));
163 163
 		}
164 164
 
165
-		if ( defined( 'WP_CLI' ) && WP_CLI ) {
166
-			WP_CLI::add_command( 'action-scheduler', 'ActionScheduler_WPCLI_Scheduler_command' );
167
-			if ( ! ActionScheduler_DataController::is_migration_complete() && Controller::instance()->allow_migration() ) {
165
+		if (defined('WP_CLI') && WP_CLI) {
166
+			WP_CLI::add_command('action-scheduler', 'ActionScheduler_WPCLI_Scheduler_command');
167
+			if (!ActionScheduler_DataController::is_migration_complete() && Controller::instance()->allow_migration()) {
168 168
 				$command = new Migration_Command();
169 169
 				$command->register();
170 170
 			}
@@ -173,11 +173,11 @@  discard block
 block discarded – undo
173 173
 		/**
174 174
 		 * Handle WP comment cleanup after migration.
175 175
 		 */
176
-		if ( is_a( $logger, 'ActionScheduler_DBLogger' ) && ActionScheduler_DataController::is_migration_complete() && ActionScheduler_WPCommentCleaner::has_logs() ) {
176
+		if (is_a($logger, 'ActionScheduler_DBLogger') && ActionScheduler_DataController::is_migration_complete() && ActionScheduler_WPCommentCleaner::has_logs()) {
177 177
 			ActionScheduler_WPCommentCleaner::init();
178 178
 		}
179 179
 
180
-		add_action( 'action_scheduler/migration_complete', 'ActionScheduler_WPCommentCleaner::maybe_schedule_cleanup' );
180
+		add_action('action_scheduler/migration_complete', 'ActionScheduler_WPCommentCleaner::maybe_schedule_cleanup');
181 181
 	}
182 182
 
183 183
 	/**
@@ -189,7 +189,7 @@  discard block
 block discarded – undo
189 189
 	 *
190 190
 	 * @return bool
191 191
 	 */
192
-	protected static function is_class_abstract( $class ) {
192
+	protected static function is_class_abstract($class) {
193 193
 		static $abstracts = array(
194 194
 			'ActionScheduler'                            => true,
195 195
 			'ActionScheduler_Abstract_ListTable'         => true,
@@ -203,7 +203,7 @@  discard block
 block discarded – undo
203 203
 			'ActionScheduler_TimezoneHelper'             => true,
204 204
 		);
205 205
 
206
-		return isset( $abstracts[ $class ] ) && $abstracts[ $class ];
206
+		return isset($abstracts[$class]) && $abstracts[$class];
207 207
 	}
208 208
 
209 209
 	/**
@@ -215,7 +215,7 @@  discard block
 block discarded – undo
215 215
 	 *
216 216
 	 * @return bool
217 217
 	 */
218
-	protected static function is_class_migration( $class ) {
218
+	protected static function is_class_migration($class) {
219 219
 		static $migration_segments = array(
220 220
 			'ActionMigrator'  => true,
221 221
 			'BatchFetcher'    => true,
@@ -228,10 +228,10 @@  discard block
 block discarded – undo
228 228
 			'Scheduler'       => true,
229 229
 		);
230 230
 
231
-		$segments = explode( '_', $class );
232
-		$segment = isset( $segments[ 1 ] ) ? $segments[ 1 ] : $class;
231
+		$segments = explode('_', $class);
232
+		$segment = isset($segments[1]) ? $segments[1] : $class;
233 233
 
234
-		return isset( $migration_segments[ $segment ] ) && $migration_segments[ $segment ];
234
+		return isset($migration_segments[$segment]) && $migration_segments[$segment];
235 235
 	}
236 236
 
237 237
 	/**
@@ -243,17 +243,17 @@  discard block
 block discarded – undo
243 243
 	 *
244 244
 	 * @return bool
245 245
 	 */
246
-	protected static function is_class_cli( $class ) {
246
+	protected static function is_class_cli($class) {
247 247
 		static $cli_segments = array(
248 248
 			'QueueRunner' => true,
249 249
 			'Command'     => true,
250 250
 			'ProgressBar' => true,
251 251
 		);
252 252
 
253
-		$segments = explode( '_', $class );
254
-		$segment = isset( $segments[ 1 ] ) ? $segments[ 1 ] : $class;
253
+		$segments = explode('_', $class);
254
+		$segment = isset($segments[1]) ? $segments[1] : $class;
255 255
 
256
-		return isset( $cli_segments[ $segment ] ) && $cli_segments[ $segment ];
256
+		return isset($cli_segments[$segment]) && $cli_segments[$segment];
257 257
 	}
258 258
 
259 259
 	final public function __clone() {
@@ -268,8 +268,8 @@  discard block
 block discarded – undo
268 268
 
269 269
 	/** Deprecated **/
270 270
 
271
-	public static function get_datetime_object( $when = null, $timezone = 'UTC' ) {
272
-		_deprecated_function( __METHOD__, '2.0', 'wcs_add_months()' );
273
-		return as_get_datetime_object( $when, $timezone );
271
+	public static function get_datetime_object($when = null, $timezone = 'UTC') {
272
+		_deprecated_function(__METHOD__, '2.0', 'wcs_add_months()');
273
+		return as_get_datetime_object($when, $timezone);
274 274
 	}
275 275
 }
Please login to merge, or discard this patch.