Passed
Pull Request — master (#284)
by Brian
04:40
created
libraries/action-scheduler/classes/abstracts/ActionScheduler_Lock.php 1 patch
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.
includes/libraries/action-scheduler/classes/abstracts/ActionScheduler.php 1 patch
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.
action-scheduler/classes/abstracts/ActionScheduler_Abstract_Schema.php 1 patch
Indentation   +120 added lines, -120 removed lines patch added patch discarded remove patch
@@ -12,124 +12,124 @@
 block discarded – undo
12 12
  */
13 13
 abstract class ActionScheduler_Abstract_Schema {
14 14
 
15
-	/**
16
-	 * @var int Increment this value in derived class to trigger a schema update.
17
-	 */
18
-	protected $schema_version = 1;
19
-
20
-	/**
21
-	 * @var array Names of tables that will be registered by this class.
22
-	 */
23
-	protected $tables = [];
24
-
25
-	/**
26
-	 * Register tables with WordPress, and create them if needed.
27
-	 *
28
-	 * @param bool $force_update Optional. Default false. Use true to always run the schema update.
29
-	 *
30
-	 * @return void
31
-	 */
32
-	public function register_tables( $force_update = false ) {
33
-		global $wpdb;
34
-
35
-		// make WP aware of our tables
36
-		foreach ( $this->tables as $table ) {
37
-			$wpdb->tables[] = $table;
38
-			$name           = $this->get_full_table_name( $table );
39
-			$wpdb->$table   = $name;
40
-		}
41
-
42
-		// create the tables
43
-		if ( $this->schema_update_required() || $force_update ) {
44
-			foreach ( $this->tables as $table ) {
45
-				$this->update_table( $table );
46
-			}
47
-			$this->mark_schema_update_complete();
48
-		}
49
-	}
50
-
51
-	/**
52
-	 * @param string $table The name of the table
53
-	 *
54
-	 * @return string The CREATE TABLE statement, suitable for passing to dbDelta
55
-	 */
56
-	abstract protected function get_table_definition( $table );
57
-
58
-	/**
59
-	 * Determine if the database schema is out of date
60
-	 * by comparing the integer found in $this->schema_version
61
-	 * with the option set in the WordPress options table
62
-	 *
63
-	 * @return bool
64
-	 */
65
-	private function schema_update_required() {
66
-		$option_name         = 'schema-' . static::class;
67
-		$version_found_in_db = get_option( $option_name, 0 );
68
-
69
-		// Check for schema option stored by the Action Scheduler Custom Tables plugin in case site has migrated from that plugin with an older schema
70
-		if ( 0 === $version_found_in_db ) {
71
-
72
-			$plugin_option_name = 'schema-';
73
-
74
-			switch ( static::class ) {
75
-				case 'ActionScheduler_StoreSchema' :
76
-					$plugin_option_name .= 'Action_Scheduler\Custom_Tables\DB_Store_Table_Maker';
77
-					break;
78
-				case 'ActionScheduler_LoggerSchema' :
79
-					$plugin_option_name .= 'Action_Scheduler\Custom_Tables\DB_Logger_Table_Maker';
80
-					break;
81
-			}
82
-
83
-			$version_found_in_db = get_option( $plugin_option_name, 0 );
84
-
85
-			delete_option( $plugin_option_name );
86
-		}
87
-
88
-		return version_compare( $version_found_in_db, $this->schema_version, '<' );
89
-	}
90
-
91
-	/**
92
-	 * Update the option in WordPress to indicate that
93
-	 * our schema is now up to date
94
-	 *
95
-	 * @return void
96
-	 */
97
-	private function mark_schema_update_complete() {
98
-		$option_name = 'schema-' . static::class;
99
-
100
-		// work around race conditions and ensure that our option updates
101
-		$value_to_save = (string) $this->schema_version . '.0.' . time();
102
-
103
-		update_option( $option_name, $value_to_save );
104
-	}
105
-
106
-	/**
107
-	 * Update the schema for the given table
108
-	 *
109
-	 * @param string $table The name of the table to update
110
-	 *
111
-	 * @return void
112
-	 */
113
-	private function update_table( $table ) {
114
-		require_once( ABSPATH . 'wp-admin/includes/upgrade.php' );
115
-		$definition = $this->get_table_definition( $table );
116
-		if ( $definition ) {
117
-			$updated = dbDelta( $definition );
118
-			foreach ( $updated as $updated_table => $update_description ) {
119
-				if ( strpos( $update_description, 'Created table' ) === 0 ) {
120
-					do_action( 'action_scheduler/created_table', $updated_table, $table );
121
-				}
122
-			}
123
-		}
124
-	}
125
-
126
-	/**
127
-	 * @param string $table
128
-	 *
129
-	 * @return string The full name of the table, including the
130
-	 *                table prefix for the current blog
131
-	 */
132
-	protected function get_full_table_name( $table ) {
133
-		return $GLOBALS[ 'wpdb' ]->prefix . $table;
134
-	}
15
+    /**
16
+     * @var int Increment this value in derived class to trigger a schema update.
17
+     */
18
+    protected $schema_version = 1;
19
+
20
+    /**
21
+     * @var array Names of tables that will be registered by this class.
22
+     */
23
+    protected $tables = [];
24
+
25
+    /**
26
+     * Register tables with WordPress, and create them if needed.
27
+     *
28
+     * @param bool $force_update Optional. Default false. Use true to always run the schema update.
29
+     *
30
+     * @return void
31
+     */
32
+    public function register_tables( $force_update = false ) {
33
+        global $wpdb;
34
+
35
+        // make WP aware of our tables
36
+        foreach ( $this->tables as $table ) {
37
+            $wpdb->tables[] = $table;
38
+            $name           = $this->get_full_table_name( $table );
39
+            $wpdb->$table   = $name;
40
+        }
41
+
42
+        // create the tables
43
+        if ( $this->schema_update_required() || $force_update ) {
44
+            foreach ( $this->tables as $table ) {
45
+                $this->update_table( $table );
46
+            }
47
+            $this->mark_schema_update_complete();
48
+        }
49
+    }
50
+
51
+    /**
52
+     * @param string $table The name of the table
53
+     *
54
+     * @return string The CREATE TABLE statement, suitable for passing to dbDelta
55
+     */
56
+    abstract protected function get_table_definition( $table );
57
+
58
+    /**
59
+     * Determine if the database schema is out of date
60
+     * by comparing the integer found in $this->schema_version
61
+     * with the option set in the WordPress options table
62
+     *
63
+     * @return bool
64
+     */
65
+    private function schema_update_required() {
66
+        $option_name         = 'schema-' . static::class;
67
+        $version_found_in_db = get_option( $option_name, 0 );
68
+
69
+        // Check for schema option stored by the Action Scheduler Custom Tables plugin in case site has migrated from that plugin with an older schema
70
+        if ( 0 === $version_found_in_db ) {
71
+
72
+            $plugin_option_name = 'schema-';
73
+
74
+            switch ( static::class ) {
75
+                case 'ActionScheduler_StoreSchema' :
76
+                    $plugin_option_name .= 'Action_Scheduler\Custom_Tables\DB_Store_Table_Maker';
77
+                    break;
78
+                case 'ActionScheduler_LoggerSchema' :
79
+                    $plugin_option_name .= 'Action_Scheduler\Custom_Tables\DB_Logger_Table_Maker';
80
+                    break;
81
+            }
82
+
83
+            $version_found_in_db = get_option( $plugin_option_name, 0 );
84
+
85
+            delete_option( $plugin_option_name );
86
+        }
87
+
88
+        return version_compare( $version_found_in_db, $this->schema_version, '<' );
89
+    }
90
+
91
+    /**
92
+     * Update the option in WordPress to indicate that
93
+     * our schema is now up to date
94
+     *
95
+     * @return void
96
+     */
97
+    private function mark_schema_update_complete() {
98
+        $option_name = 'schema-' . static::class;
99
+
100
+        // work around race conditions and ensure that our option updates
101
+        $value_to_save = (string) $this->schema_version . '.0.' . time();
102
+
103
+        update_option( $option_name, $value_to_save );
104
+    }
105
+
106
+    /**
107
+     * Update the schema for the given table
108
+     *
109
+     * @param string $table The name of the table to update
110
+     *
111
+     * @return void
112
+     */
113
+    private function update_table( $table ) {
114
+        require_once( ABSPATH . 'wp-admin/includes/upgrade.php' );
115
+        $definition = $this->get_table_definition( $table );
116
+        if ( $definition ) {
117
+            $updated = dbDelta( $definition );
118
+            foreach ( $updated as $updated_table => $update_description ) {
119
+                if ( strpos( $update_description, 'Created table' ) === 0 ) {
120
+                    do_action( 'action_scheduler/created_table', $updated_table, $table );
121
+                }
122
+            }
123
+        }
124
+    }
125
+
126
+    /**
127
+     * @param string $table
128
+     *
129
+     * @return string The full name of the table, including the
130
+     *                table prefix for the current blog
131
+     */
132
+    protected function get_full_table_name( $table ) {
133
+        return $GLOBALS[ 'wpdb' ]->prefix . $table;
134
+    }
135 135
 }
136 136
\ No newline at end of file
Please login to merge, or discard this patch.
libraries/action-scheduler/classes/ActionScheduler_Compatibility.php 1 patch
Indentation   +81 added lines, -81 removed lines patch added patch discarded remove patch
@@ -5,95 +5,95 @@
 block discarded – undo
5 5
  */
6 6
 class ActionScheduler_Compatibility {
7 7
 
8
-	/**
9
-	 * Converts a shorthand byte value to an integer byte value.
10
-	 *
11
-	 * Wrapper for wp_convert_hr_to_bytes(), moved to load.php in WordPress 4.6 from media.php
12
-	 *
13
-	 * @link https://secure.php.net/manual/en/function.ini-get.php
14
-	 * @link https://secure.php.net/manual/en/faq.using.php#faq.using.shorthandbytes
15
-	 *
16
-	 * @param string $value A (PHP ini) byte value, either shorthand or ordinary.
17
-	 * @return int An integer byte value.
18
-	 */
19
-	public static function convert_hr_to_bytes( $value ) {
20
-		if ( function_exists( 'wp_convert_hr_to_bytes' ) ) {
21
-			return wp_convert_hr_to_bytes( $value );
22
-		}
8
+    /**
9
+     * Converts a shorthand byte value to an integer byte value.
10
+     *
11
+     * Wrapper for wp_convert_hr_to_bytes(), moved to load.php in WordPress 4.6 from media.php
12
+     *
13
+     * @link https://secure.php.net/manual/en/function.ini-get.php
14
+     * @link https://secure.php.net/manual/en/faq.using.php#faq.using.shorthandbytes
15
+     *
16
+     * @param string $value A (PHP ini) byte value, either shorthand or ordinary.
17
+     * @return int An integer byte value.
18
+     */
19
+    public static function convert_hr_to_bytes( $value ) {
20
+        if ( function_exists( 'wp_convert_hr_to_bytes' ) ) {
21
+            return wp_convert_hr_to_bytes( $value );
22
+        }
23 23
 
24
-		$value = strtolower( trim( $value ) );
25
-		$bytes = (int) $value;
24
+        $value = strtolower( trim( $value ) );
25
+        $bytes = (int) $value;
26 26
 
27
-		if ( false !== strpos( $value, 'g' ) ) {
28
-			$bytes *= GB_IN_BYTES;
29
-		} elseif ( false !== strpos( $value, 'm' ) ) {
30
-			$bytes *= MB_IN_BYTES;
31
-		} elseif ( false !== strpos( $value, 'k' ) ) {
32
-			$bytes *= KB_IN_BYTES;
33
-		}
27
+        if ( false !== strpos( $value, 'g' ) ) {
28
+            $bytes *= GB_IN_BYTES;
29
+        } elseif ( false !== strpos( $value, 'm' ) ) {
30
+            $bytes *= MB_IN_BYTES;
31
+        } elseif ( false !== strpos( $value, 'k' ) ) {
32
+            $bytes *= KB_IN_BYTES;
33
+        }
34 34
 
35
-		// Deal with large (float) values which run into the maximum integer size.
36
-		return min( $bytes, PHP_INT_MAX );
37
-	}
35
+        // Deal with large (float) values which run into the maximum integer size.
36
+        return min( $bytes, PHP_INT_MAX );
37
+    }
38 38
 
39
-	/**
40
-	 * Attempts to raise the PHP memory limit for memory intensive processes.
41
-	 *
42
-	 * Only allows raising the existing limit and prevents lowering it.
43
-	 *
44
-	 * Wrapper for wp_raise_memory_limit(), added in WordPress v4.6.0
45
-	 *
46
-	 * @return bool|int|string The limit that was set or false on failure.
47
-	 */
48
-	public static function raise_memory_limit() {
49
-		if ( function_exists( 'wp_raise_memory_limit' ) ) {
50
-			return wp_raise_memory_limit( 'admin' );
51
-		}
39
+    /**
40
+     * Attempts to raise the PHP memory limit for memory intensive processes.
41
+     *
42
+     * Only allows raising the existing limit and prevents lowering it.
43
+     *
44
+     * Wrapper for wp_raise_memory_limit(), added in WordPress v4.6.0
45
+     *
46
+     * @return bool|int|string The limit that was set or false on failure.
47
+     */
48
+    public static function raise_memory_limit() {
49
+        if ( function_exists( 'wp_raise_memory_limit' ) ) {
50
+            return wp_raise_memory_limit( 'admin' );
51
+        }
52 52
 
53
-		$current_limit     = @ini_get( 'memory_limit' );
54
-		$current_limit_int = self::convert_hr_to_bytes( $current_limit );
53
+        $current_limit     = @ini_get( 'memory_limit' );
54
+        $current_limit_int = self::convert_hr_to_bytes( $current_limit );
55 55
 
56
-		if ( -1 === $current_limit_int ) {
57
-			return false;
58
-		}
56
+        if ( -1 === $current_limit_int ) {
57
+            return false;
58
+        }
59 59
 
60
-		$wp_max_limit       = WP_MAX_MEMORY_LIMIT;
61
-		$wp_max_limit_int   = self::convert_hr_to_bytes( $wp_max_limit );
62
-		$filtered_limit     = apply_filters( 'admin_memory_limit', $wp_max_limit );
63
-		$filtered_limit_int = self::convert_hr_to_bytes( $filtered_limit );
60
+        $wp_max_limit       = WP_MAX_MEMORY_LIMIT;
61
+        $wp_max_limit_int   = self::convert_hr_to_bytes( $wp_max_limit );
62
+        $filtered_limit     = apply_filters( 'admin_memory_limit', $wp_max_limit );
63
+        $filtered_limit_int = self::convert_hr_to_bytes( $filtered_limit );
64 64
 
65
-		if ( -1 === $filtered_limit_int || ( $filtered_limit_int > $wp_max_limit_int && $filtered_limit_int > $current_limit_int ) ) {
66
-			if ( false !== @ini_set( 'memory_limit', $filtered_limit ) ) {
67
-				return $filtered_limit;
68
-			} else {
69
-				return false;
70
-			}
71
-		} elseif ( -1 === $wp_max_limit_int || $wp_max_limit_int > $current_limit_int ) {
72
-			if ( false !== @ini_set( 'memory_limit', $wp_max_limit ) ) {
73
-				return $wp_max_limit;
74
-			} else {
75
-				return false;
76
-			}
77
-		}
78
-		return false;
79
-	}
65
+        if ( -1 === $filtered_limit_int || ( $filtered_limit_int > $wp_max_limit_int && $filtered_limit_int > $current_limit_int ) ) {
66
+            if ( false !== @ini_set( 'memory_limit', $filtered_limit ) ) {
67
+                return $filtered_limit;
68
+            } else {
69
+                return false;
70
+            }
71
+        } elseif ( -1 === $wp_max_limit_int || $wp_max_limit_int > $current_limit_int ) {
72
+            if ( false !== @ini_set( 'memory_limit', $wp_max_limit ) ) {
73
+                return $wp_max_limit;
74
+            } else {
75
+                return false;
76
+            }
77
+        }
78
+        return false;
79
+    }
80 80
 
81
-	/**
82
-	 * Attempts to raise the PHP timeout for time intensive processes.
83
-	 *
84
-	 * Only allows raising the existing limit and prevents lowering it. Wrapper for wc_set_time_limit(), when available.
85
-	 *
86
-	 * @param int The time limit in seconds.
87
-	 */
88
-	public static function raise_time_limit( $limit = 0 ) {
89
-		if ( $limit < ini_get( 'max_execution_time' ) ) {
90
-			return;
91
-		}
81
+    /**
82
+     * Attempts to raise the PHP timeout for time intensive processes.
83
+     *
84
+     * Only allows raising the existing limit and prevents lowering it. Wrapper for wc_set_time_limit(), when available.
85
+     *
86
+     * @param int The time limit in seconds.
87
+     */
88
+    public static function raise_time_limit( $limit = 0 ) {
89
+        if ( $limit < ini_get( 'max_execution_time' ) ) {
90
+            return;
91
+        }
92 92
 
93
-		if ( function_exists( 'wc_set_time_limit' ) ) {
94
-			wc_set_time_limit( $limit );
95
-		} elseif ( function_exists( 'set_time_limit' ) && false === strpos( ini_get( 'disable_functions' ), 'set_time_limit' ) && ! ini_get( 'safe_mode' ) ) {
96
-			@set_time_limit( $limit );
97
-		}
98
-	}
93
+        if ( function_exists( 'wc_set_time_limit' ) ) {
94
+            wc_set_time_limit( $limit );
95
+        } elseif ( function_exists( 'set_time_limit' ) && false === strpos( ini_get( 'disable_functions' ), 'set_time_limit' ) && ! ini_get( 'safe_mode' ) ) {
96
+            @set_time_limit( $limit );
97
+        }
98
+    }
99 99
 }
Please login to merge, or discard this patch.
includes/libraries/action-scheduler/lib/WP_Async_Request.php 1 patch
Indentation   +153 added lines, -153 removed lines patch added patch discarded remove patch
@@ -14,157 +14,157 @@
 block discarded – undo
14 14
 
15 15
 if ( ! class_exists( 'WP_Async_Request' ) ) {
16 16
 
17
-	/**
18
-	 * Abstract WP_Async_Request class.
19
-	 *
20
-	 * @abstract
21
-	 */
22
-	abstract class WP_Async_Request {
23
-
24
-		/**
25
-		 * Prefix
26
-		 *
27
-		 * (default value: 'wp')
28
-		 *
29
-		 * @var string
30
-		 * @access protected
31
-		 */
32
-		protected $prefix = 'wp';
33
-
34
-		/**
35
-		 * Action
36
-		 *
37
-		 * (default value: 'async_request')
38
-		 *
39
-		 * @var string
40
-		 * @access protected
41
-		 */
42
-		protected $action = 'async_request';
43
-
44
-		/**
45
-		 * Identifier
46
-		 *
47
-		 * @var mixed
48
-		 * @access protected
49
-		 */
50
-		protected $identifier;
51
-
52
-		/**
53
-		 * Data
54
-		 *
55
-		 * (default value: array())
56
-		 *
57
-		 * @var array
58
-		 * @access protected
59
-		 */
60
-		protected $data = array();
61
-
62
-		/**
63
-		 * Initiate new async request
64
-		 */
65
-		public function __construct() {
66
-			$this->identifier = $this->prefix . '_' . $this->action;
67
-
68
-			add_action( 'wp_ajax_' . $this->identifier, array( $this, 'maybe_handle' ) );
69
-			add_action( 'wp_ajax_nopriv_' . $this->identifier, array( $this, 'maybe_handle' ) );
70
-		}
71
-
72
-		/**
73
-		 * Set data used during the request
74
-		 *
75
-		 * @param array $data Data.
76
-		 *
77
-		 * @return $this
78
-		 */
79
-		public function data( $data ) {
80
-			$this->data = $data;
81
-
82
-			return $this;
83
-		}
84
-
85
-		/**
86
-		 * Dispatch the async request
87
-		 *
88
-		 * @return array|WP_Error
89
-		 */
90
-		public function dispatch() {
91
-			$url  = add_query_arg( $this->get_query_args(), $this->get_query_url() );
92
-			$args = $this->get_post_args();
93
-
94
-			return wp_remote_post( esc_url_raw( $url ), $args );
95
-		}
96
-
97
-		/**
98
-		 * Get query args
99
-		 *
100
-		 * @return array
101
-		 */
102
-		protected function get_query_args() {
103
-			if ( property_exists( $this, 'query_args' ) ) {
104
-				return $this->query_args;
105
-			}
106
-
107
-			return array(
108
-				'action' => $this->identifier,
109
-				'nonce'  => wp_create_nonce( $this->identifier ),
110
-			);
111
-		}
112
-
113
-		/**
114
-		 * Get query URL
115
-		 *
116
-		 * @return string
117
-		 */
118
-		protected function get_query_url() {
119
-			if ( property_exists( $this, 'query_url' ) ) {
120
-				return $this->query_url;
121
-			}
122
-
123
-			return admin_url( 'admin-ajax.php' );
124
-		}
125
-
126
-		/**
127
-		 * Get post args
128
-		 *
129
-		 * @return array
130
-		 */
131
-		protected function get_post_args() {
132
-			if ( property_exists( $this, 'post_args' ) ) {
133
-				return $this->post_args;
134
-			}
135
-
136
-			return array(
137
-				'timeout'   => 0.01,
138
-				'blocking'  => false,
139
-				'body'      => $this->data,
140
-				'cookies'   => $_COOKIE,
141
-				'sslverify' => apply_filters( 'https_local_ssl_verify', false ),
142
-			);
143
-		}
144
-
145
-		/**
146
-		 * Maybe handle
147
-		 *
148
-		 * Check for correct nonce and pass to handler.
149
-		 */
150
-		public function maybe_handle() {
151
-			// Don't lock up other requests while processing
152
-			session_write_close();
153
-
154
-			check_ajax_referer( $this->identifier, 'nonce' );
155
-
156
-			$this->handle();
157
-
158
-			wp_die();
159
-		}
160
-
161
-		/**
162
-		 * Handle
163
-		 *
164
-		 * Override this method to perform any actions required
165
-		 * during the async request.
166
-		 */
167
-		abstract protected function handle();
168
-
169
-	}
17
+    /**
18
+     * Abstract WP_Async_Request class.
19
+     *
20
+     * @abstract
21
+     */
22
+    abstract class WP_Async_Request {
23
+
24
+        /**
25
+         * Prefix
26
+         *
27
+         * (default value: 'wp')
28
+         *
29
+         * @var string
30
+         * @access protected
31
+         */
32
+        protected $prefix = 'wp';
33
+
34
+        /**
35
+         * Action
36
+         *
37
+         * (default value: 'async_request')
38
+         *
39
+         * @var string
40
+         * @access protected
41
+         */
42
+        protected $action = 'async_request';
43
+
44
+        /**
45
+         * Identifier
46
+         *
47
+         * @var mixed
48
+         * @access protected
49
+         */
50
+        protected $identifier;
51
+
52
+        /**
53
+         * Data
54
+         *
55
+         * (default value: array())
56
+         *
57
+         * @var array
58
+         * @access protected
59
+         */
60
+        protected $data = array();
61
+
62
+        /**
63
+         * Initiate new async request
64
+         */
65
+        public function __construct() {
66
+            $this->identifier = $this->prefix . '_' . $this->action;
67
+
68
+            add_action( 'wp_ajax_' . $this->identifier, array( $this, 'maybe_handle' ) );
69
+            add_action( 'wp_ajax_nopriv_' . $this->identifier, array( $this, 'maybe_handle' ) );
70
+        }
71
+
72
+        /**
73
+         * Set data used during the request
74
+         *
75
+         * @param array $data Data.
76
+         *
77
+         * @return $this
78
+         */
79
+        public function data( $data ) {
80
+            $this->data = $data;
81
+
82
+            return $this;
83
+        }
84
+
85
+        /**
86
+         * Dispatch the async request
87
+         *
88
+         * @return array|WP_Error
89
+         */
90
+        public function dispatch() {
91
+            $url  = add_query_arg( $this->get_query_args(), $this->get_query_url() );
92
+            $args = $this->get_post_args();
93
+
94
+            return wp_remote_post( esc_url_raw( $url ), $args );
95
+        }
96
+
97
+        /**
98
+         * Get query args
99
+         *
100
+         * @return array
101
+         */
102
+        protected function get_query_args() {
103
+            if ( property_exists( $this, 'query_args' ) ) {
104
+                return $this->query_args;
105
+            }
106
+
107
+            return array(
108
+                'action' => $this->identifier,
109
+                'nonce'  => wp_create_nonce( $this->identifier ),
110
+            );
111
+        }
112
+
113
+        /**
114
+         * Get query URL
115
+         *
116
+         * @return string
117
+         */
118
+        protected function get_query_url() {
119
+            if ( property_exists( $this, 'query_url' ) ) {
120
+                return $this->query_url;
121
+            }
122
+
123
+            return admin_url( 'admin-ajax.php' );
124
+        }
125
+
126
+        /**
127
+         * Get post args
128
+         *
129
+         * @return array
130
+         */
131
+        protected function get_post_args() {
132
+            if ( property_exists( $this, 'post_args' ) ) {
133
+                return $this->post_args;
134
+            }
135
+
136
+            return array(
137
+                'timeout'   => 0.01,
138
+                'blocking'  => false,
139
+                'body'      => $this->data,
140
+                'cookies'   => $_COOKIE,
141
+                'sslverify' => apply_filters( 'https_local_ssl_verify', false ),
142
+            );
143
+        }
144
+
145
+        /**
146
+         * Maybe handle
147
+         *
148
+         * Check for correct nonce and pass to handler.
149
+         */
150
+        public function maybe_handle() {
151
+            // Don't lock up other requests while processing
152
+            session_write_close();
153
+
154
+            check_ajax_referer( $this->identifier, 'nonce' );
155
+
156
+            $this->handle();
157
+
158
+            wp_die();
159
+        }
160
+
161
+        /**
162
+         * Handle
163
+         *
164
+         * Override this method to perform any actions required
165
+         * during the async request.
166
+         */
167
+        abstract protected function handle();
168
+
169
+    }
170 170
 }
Please login to merge, or discard this patch.