Passed
Pull Request — master (#281)
by Kiran
04:07
created
includes/libraries/action-scheduler/classes/WP_CLI/Migration_Command.php 2 patches
Indentation   +124 added lines, -124 removed lines patch added patch discarded remove patch
@@ -21,128 +21,128 @@
 block discarded – undo
21 21
  */
22 22
 class Migration_Command extends WP_CLI_Command {
23 23
 
24
-	/** @var int */
25
-	private $total_processed = 0;
26
-
27
-	/**
28
-	 * Register the command with WP-CLI
29
-	 */
30
-	public function register() {
31
-		if ( ! defined( 'WP_CLI' ) || ! WP_CLI ) {
32
-			return;
33
-		}
34
-
35
-		WP_CLI::add_command( 'action-scheduler migrate', [ $this, 'migrate' ], [
36
-			'shortdesc' => 'Migrates actions to the DB tables store',
37
-			'synopsis'  => [
38
-				[
39
-					'type'        => 'assoc',
40
-					'name'        => 'batch-size',
41
-					'optional'    => true,
42
-					'default'     => 100,
43
-					'description' => 'The number of actions to process in each batch',
44
-				],
45
-				[
46
-					'type'        => 'assoc',
47
-					'name'        => 'free-memory-on',
48
-					'optional'    => true,
49
-					'default'     => 50,
50
-					'description' => 'The number of actions to process between freeing memory. 0 disables freeing memory',
51
-				],
52
-				[
53
-					'type'        => 'assoc',
54
-					'name'        => 'pause',
55
-					'optional'    => true,
56
-					'default'     => 0,
57
-					'description' => 'The number of seconds to pause when freeing memory',
58
-				],
59
-				[
60
-					'type'        => 'flag',
61
-					'name'        => 'dry-run',
62
-					'optional'    => true,
63
-					'description' => 'Reports on the actions that would have been migrated, but does not change any data',
64
-				],
65
-			],
66
-		] );
67
-	}
68
-
69
-	/**
70
-	 * Process the data migration.
71
-	 *
72
-	 * @param array $positional_args Required for WP CLI. Not used in migration.
73
-	 * @param array $assoc_args Optional arguments.
74
-	 *
75
-	 * @return void
76
-	 */
77
-	public function migrate( $positional_args, $assoc_args ) {
78
-		$this->init_logging();
79
-
80
-		$config = $this->get_migration_config( $assoc_args );
81
-		$runner = new Runner( $config );
82
-		$runner->init_destination();
83
-
84
-		$batch_size = isset( $assoc_args[ 'batch-size' ] ) ? (int) $assoc_args[ 'batch-size' ] : 100;
85
-		$free_on    = isset( $assoc_args[ 'free-memory-on' ] ) ? (int) $assoc_args[ 'free-memory-on' ] : 50;
86
-		$sleep      = isset( $assoc_args[ 'pause' ] ) ? (int) $assoc_args[ 'pause' ] : 0;
87
-		\ActionScheduler_DataController::set_free_ticks( $free_on );
88
-		\ActionScheduler_DataController::set_sleep_time( $sleep );
89
-
90
-		do {
91
-			$actions_processed     = $runner->run( $batch_size );
92
-			$this->total_processed += $actions_processed;
93
-		} while ( $actions_processed > 0 );
94
-
95
-		if ( ! $config->get_dry_run() ) {
96
-			// let the scheduler know that there's nothing left to do
97
-			$scheduler = new Scheduler();
98
-			$scheduler->mark_complete();
99
-		}
100
-
101
-		WP_CLI::success( sprintf( '%s complete. %d actions processed.', $config->get_dry_run() ? 'Dry run' : 'Migration', $this->total_processed ) );
102
-	}
103
-
104
-	/**
105
-	 * Build the config object used to create the Runner
106
-	 *
107
-	 * @param array $args Optional arguments.
108
-	 *
109
-	 * @return ActionScheduler\Migration\Config
110
-	 */
111
-	private function get_migration_config( $args ) {
112
-		$args = wp_parse_args( $args, [
113
-			'dry-run' => false,
114
-		] );
115
-
116
-		$config = Controller::instance()->get_migration_config_object();
117
-		$config->set_dry_run( ! empty( $args[ 'dry-run' ] ) );
118
-
119
-		return $config;
120
-	}
121
-
122
-	/**
123
-	 * Hook command line logging into migration actions.
124
-	 */
125
-	private function init_logging() {
126
-		add_action( 'action_scheduler/migrate_action_dry_run', function ( $action_id ) {
127
-			WP_CLI::debug( sprintf( 'Dry-run: migrated action %d', $action_id ) );
128
-		}, 10, 1 );
129
-		add_action( 'action_scheduler/no_action_to_migrate', function ( $action_id ) {
130
-			WP_CLI::debug( sprintf( 'No action found to migrate for ID %d', $action_id ) );
131
-		}, 10, 1 );
132
-		add_action( 'action_scheduler/migrate_action_failed', function ( $action_id ) {
133
-			WP_CLI::warning( sprintf( 'Failed migrating action with ID %d', $action_id ) );
134
-		}, 10, 1 );
135
-		add_action( 'action_scheduler/migrate_action_incomplete', function ( $source_id, $destination_id ) {
136
-			WP_CLI::warning( sprintf( 'Unable to remove source action with ID %d after migrating to new ID %d', $source_id, $destination_id ) );
137
-		}, 10, 2 );
138
-		add_action( 'action_scheduler/migrated_action', function ( $source_id, $destination_id ) {
139
-			WP_CLI::debug( sprintf( 'Migrated source action with ID %d to new store with ID %d', $source_id, $destination_id ) );
140
-		}, 10, 2 );
141
-		add_action( 'action_scheduler/migration_batch_starting', function ( $batch ) {
142
-			WP_CLI::debug( 'Beginning migration of batch: ' . print_r( $batch, true ) );
143
-		}, 10, 1 );
144
-		add_action( 'action_scheduler/migration_batch_complete', function ( $batch ) {
145
-			WP_CLI::log( sprintf( 'Completed migration of %d actions', count( $batch ) ) );
146
-		}, 10, 1 );
147
-	}
24
+    /** @var int */
25
+    private $total_processed = 0;
26
+
27
+    /**
28
+     * Register the command with WP-CLI
29
+     */
30
+    public function register() {
31
+        if ( ! defined( 'WP_CLI' ) || ! WP_CLI ) {
32
+            return;
33
+        }
34
+
35
+        WP_CLI::add_command( 'action-scheduler migrate', [ $this, 'migrate' ], [
36
+            'shortdesc' => 'Migrates actions to the DB tables store',
37
+            'synopsis'  => [
38
+                [
39
+                    'type'        => 'assoc',
40
+                    'name'        => 'batch-size',
41
+                    'optional'    => true,
42
+                    'default'     => 100,
43
+                    'description' => 'The number of actions to process in each batch',
44
+                ],
45
+                [
46
+                    'type'        => 'assoc',
47
+                    'name'        => 'free-memory-on',
48
+                    'optional'    => true,
49
+                    'default'     => 50,
50
+                    'description' => 'The number of actions to process between freeing memory. 0 disables freeing memory',
51
+                ],
52
+                [
53
+                    'type'        => 'assoc',
54
+                    'name'        => 'pause',
55
+                    'optional'    => true,
56
+                    'default'     => 0,
57
+                    'description' => 'The number of seconds to pause when freeing memory',
58
+                ],
59
+                [
60
+                    'type'        => 'flag',
61
+                    'name'        => 'dry-run',
62
+                    'optional'    => true,
63
+                    'description' => 'Reports on the actions that would have been migrated, but does not change any data',
64
+                ],
65
+            ],
66
+        ] );
67
+    }
68
+
69
+    /**
70
+     * Process the data migration.
71
+     *
72
+     * @param array $positional_args Required for WP CLI. Not used in migration.
73
+     * @param array $assoc_args Optional arguments.
74
+     *
75
+     * @return void
76
+     */
77
+    public function migrate( $positional_args, $assoc_args ) {
78
+        $this->init_logging();
79
+
80
+        $config = $this->get_migration_config( $assoc_args );
81
+        $runner = new Runner( $config );
82
+        $runner->init_destination();
83
+
84
+        $batch_size = isset( $assoc_args[ 'batch-size' ] ) ? (int) $assoc_args[ 'batch-size' ] : 100;
85
+        $free_on    = isset( $assoc_args[ 'free-memory-on' ] ) ? (int) $assoc_args[ 'free-memory-on' ] : 50;
86
+        $sleep      = isset( $assoc_args[ 'pause' ] ) ? (int) $assoc_args[ 'pause' ] : 0;
87
+        \ActionScheduler_DataController::set_free_ticks( $free_on );
88
+        \ActionScheduler_DataController::set_sleep_time( $sleep );
89
+
90
+        do {
91
+            $actions_processed     = $runner->run( $batch_size );
92
+            $this->total_processed += $actions_processed;
93
+        } while ( $actions_processed > 0 );
94
+
95
+        if ( ! $config->get_dry_run() ) {
96
+            // let the scheduler know that there's nothing left to do
97
+            $scheduler = new Scheduler();
98
+            $scheduler->mark_complete();
99
+        }
100
+
101
+        WP_CLI::success( sprintf( '%s complete. %d actions processed.', $config->get_dry_run() ? 'Dry run' : 'Migration', $this->total_processed ) );
102
+    }
103
+
104
+    /**
105
+     * Build the config object used to create the Runner
106
+     *
107
+     * @param array $args Optional arguments.
108
+     *
109
+     * @return ActionScheduler\Migration\Config
110
+     */
111
+    private function get_migration_config( $args ) {
112
+        $args = wp_parse_args( $args, [
113
+            'dry-run' => false,
114
+        ] );
115
+
116
+        $config = Controller::instance()->get_migration_config_object();
117
+        $config->set_dry_run( ! empty( $args[ 'dry-run' ] ) );
118
+
119
+        return $config;
120
+    }
121
+
122
+    /**
123
+     * Hook command line logging into migration actions.
124
+     */
125
+    private function init_logging() {
126
+        add_action( 'action_scheduler/migrate_action_dry_run', function ( $action_id ) {
127
+            WP_CLI::debug( sprintf( 'Dry-run: migrated action %d', $action_id ) );
128
+        }, 10, 1 );
129
+        add_action( 'action_scheduler/no_action_to_migrate', function ( $action_id ) {
130
+            WP_CLI::debug( sprintf( 'No action found to migrate for ID %d', $action_id ) );
131
+        }, 10, 1 );
132
+        add_action( 'action_scheduler/migrate_action_failed', function ( $action_id ) {
133
+            WP_CLI::warning( sprintf( 'Failed migrating action with ID %d', $action_id ) );
134
+        }, 10, 1 );
135
+        add_action( 'action_scheduler/migrate_action_incomplete', function ( $source_id, $destination_id ) {
136
+            WP_CLI::warning( sprintf( 'Unable to remove source action with ID %d after migrating to new ID %d', $source_id, $destination_id ) );
137
+        }, 10, 2 );
138
+        add_action( 'action_scheduler/migrated_action', function ( $source_id, $destination_id ) {
139
+            WP_CLI::debug( sprintf( 'Migrated source action with ID %d to new store with ID %d', $source_id, $destination_id ) );
140
+        }, 10, 2 );
141
+        add_action( 'action_scheduler/migration_batch_starting', function ( $batch ) {
142
+            WP_CLI::debug( 'Beginning migration of batch: ' . print_r( $batch, true ) );
143
+        }, 10, 1 );
144
+        add_action( 'action_scheduler/migration_batch_complete', function ( $batch ) {
145
+            WP_CLI::log( sprintf( 'Completed migration of %d actions', count( $batch ) ) );
146
+        }, 10, 1 );
147
+    }
148 148
 }
Please login to merge, or discard this patch.
Spacing   +40 added lines, -40 removed lines patch added patch discarded remove patch
@@ -28,11 +28,11 @@  discard block
 block discarded – undo
28 28
 	 * Register the command with WP-CLI
29 29
 	 */
30 30
 	public function register() {
31
-		if ( ! defined( 'WP_CLI' ) || ! WP_CLI ) {
31
+		if (!defined('WP_CLI') || !WP_CLI) {
32 32
 			return;
33 33
 		}
34 34
 
35
-		WP_CLI::add_command( 'action-scheduler migrate', [ $this, 'migrate' ], [
35
+		WP_CLI::add_command('action-scheduler migrate', [$this, 'migrate'], [
36 36
 			'shortdesc' => 'Migrates actions to the DB tables store',
37 37
 			'synopsis'  => [
38 38
 				[
@@ -63,7 +63,7 @@  discard block
 block discarded – undo
63 63
 					'description' => 'Reports on the actions that would have been migrated, but does not change any data',
64 64
 				],
65 65
 			],
66
-		] );
66
+		]);
67 67
 	}
68 68
 
69 69
 	/**
@@ -74,31 +74,31 @@  discard block
 block discarded – undo
74 74
 	 *
75 75
 	 * @return void
76 76
 	 */
77
-	public function migrate( $positional_args, $assoc_args ) {
77
+	public function migrate($positional_args, $assoc_args) {
78 78
 		$this->init_logging();
79 79
 
80
-		$config = $this->get_migration_config( $assoc_args );
81
-		$runner = new Runner( $config );
80
+		$config = $this->get_migration_config($assoc_args);
81
+		$runner = new Runner($config);
82 82
 		$runner->init_destination();
83 83
 
84
-		$batch_size = isset( $assoc_args[ 'batch-size' ] ) ? (int) $assoc_args[ 'batch-size' ] : 100;
85
-		$free_on    = isset( $assoc_args[ 'free-memory-on' ] ) ? (int) $assoc_args[ 'free-memory-on' ] : 50;
86
-		$sleep      = isset( $assoc_args[ 'pause' ] ) ? (int) $assoc_args[ 'pause' ] : 0;
87
-		\ActionScheduler_DataController::set_free_ticks( $free_on );
88
-		\ActionScheduler_DataController::set_sleep_time( $sleep );
84
+		$batch_size = isset($assoc_args['batch-size']) ? (int) $assoc_args['batch-size'] : 100;
85
+		$free_on    = isset($assoc_args['free-memory-on']) ? (int) $assoc_args['free-memory-on'] : 50;
86
+		$sleep      = isset($assoc_args['pause']) ? (int) $assoc_args['pause'] : 0;
87
+		\ActionScheduler_DataController::set_free_ticks($free_on);
88
+		\ActionScheduler_DataController::set_sleep_time($sleep);
89 89
 
90 90
 		do {
91
-			$actions_processed     = $runner->run( $batch_size );
91
+			$actions_processed = $runner->run($batch_size);
92 92
 			$this->total_processed += $actions_processed;
93
-		} while ( $actions_processed > 0 );
93
+		} while ($actions_processed > 0);
94 94
 
95
-		if ( ! $config->get_dry_run() ) {
95
+		if (!$config->get_dry_run()) {
96 96
 			// let the scheduler know that there's nothing left to do
97 97
 			$scheduler = new Scheduler();
98 98
 			$scheduler->mark_complete();
99 99
 		}
100 100
 
101
-		WP_CLI::success( sprintf( '%s complete. %d actions processed.', $config->get_dry_run() ? 'Dry run' : 'Migration', $this->total_processed ) );
101
+		WP_CLI::success(sprintf('%s complete. %d actions processed.', $config->get_dry_run() ? 'Dry run' : 'Migration', $this->total_processed));
102 102
 	}
103 103
 
104 104
 	/**
@@ -108,13 +108,13 @@  discard block
 block discarded – undo
108 108
 	 *
109 109
 	 * @return ActionScheduler\Migration\Config
110 110
 	 */
111
-	private function get_migration_config( $args ) {
112
-		$args = wp_parse_args( $args, [
111
+	private function get_migration_config($args) {
112
+		$args = wp_parse_args($args, [
113 113
 			'dry-run' => false,
114
-		] );
114
+		]);
115 115
 
116 116
 		$config = Controller::instance()->get_migration_config_object();
117
-		$config->set_dry_run( ! empty( $args[ 'dry-run' ] ) );
117
+		$config->set_dry_run(!empty($args['dry-run']));
118 118
 
119 119
 		return $config;
120 120
 	}
@@ -123,26 +123,26 @@  discard block
 block discarded – undo
123 123
 	 * Hook command line logging into migration actions.
124 124
 	 */
125 125
 	private function init_logging() {
126
-		add_action( 'action_scheduler/migrate_action_dry_run', function ( $action_id ) {
127
-			WP_CLI::debug( sprintf( 'Dry-run: migrated action %d', $action_id ) );
128
-		}, 10, 1 );
129
-		add_action( 'action_scheduler/no_action_to_migrate', function ( $action_id ) {
130
-			WP_CLI::debug( sprintf( 'No action found to migrate for ID %d', $action_id ) );
131
-		}, 10, 1 );
132
-		add_action( 'action_scheduler/migrate_action_failed', function ( $action_id ) {
133
-			WP_CLI::warning( sprintf( 'Failed migrating action with ID %d', $action_id ) );
134
-		}, 10, 1 );
135
-		add_action( 'action_scheduler/migrate_action_incomplete', function ( $source_id, $destination_id ) {
136
-			WP_CLI::warning( sprintf( 'Unable to remove source action with ID %d after migrating to new ID %d', $source_id, $destination_id ) );
137
-		}, 10, 2 );
138
-		add_action( 'action_scheduler/migrated_action', function ( $source_id, $destination_id ) {
139
-			WP_CLI::debug( sprintf( 'Migrated source action with ID %d to new store with ID %d', $source_id, $destination_id ) );
140
-		}, 10, 2 );
141
-		add_action( 'action_scheduler/migration_batch_starting', function ( $batch ) {
142
-			WP_CLI::debug( 'Beginning migration of batch: ' . print_r( $batch, true ) );
143
-		}, 10, 1 );
144
-		add_action( 'action_scheduler/migration_batch_complete', function ( $batch ) {
145
-			WP_CLI::log( sprintf( 'Completed migration of %d actions', count( $batch ) ) );
146
-		}, 10, 1 );
126
+		add_action('action_scheduler/migrate_action_dry_run', function($action_id) {
127
+			WP_CLI::debug(sprintf('Dry-run: migrated action %d', $action_id));
128
+		}, 10, 1);
129
+		add_action('action_scheduler/no_action_to_migrate', function($action_id) {
130
+			WP_CLI::debug(sprintf('No action found to migrate for ID %d', $action_id));
131
+		}, 10, 1);
132
+		add_action('action_scheduler/migrate_action_failed', function($action_id) {
133
+			WP_CLI::warning(sprintf('Failed migrating action with ID %d', $action_id));
134
+		}, 10, 1);
135
+		add_action('action_scheduler/migrate_action_incomplete', function($source_id, $destination_id) {
136
+			WP_CLI::warning(sprintf('Unable to remove source action with ID %d after migrating to new ID %d', $source_id, $destination_id));
137
+		}, 10, 2);
138
+		add_action('action_scheduler/migrated_action', function($source_id, $destination_id) {
139
+			WP_CLI::debug(sprintf('Migrated source action with ID %d to new store with ID %d', $source_id, $destination_id));
140
+		}, 10, 2);
141
+		add_action('action_scheduler/migration_batch_starting', function($batch) {
142
+			WP_CLI::debug('Beginning migration of batch: ' . print_r($batch, true));
143
+		}, 10, 1);
144
+		add_action('action_scheduler/migration_batch_complete', function($batch) {
145
+			WP_CLI::log(sprintf('Completed migration of %d actions', count($batch)));
146
+		}, 10, 1);
147 147
 	}
148 148
 }
Please login to merge, or discard this patch.
action-scheduler/classes/WP_CLI/ActionScheduler_WPCLI_Scheduler_command.php 2 patches
Indentation   +138 added lines, -138 removed lines patch added patch discarded remove patch
@@ -5,154 +5,154 @@
 block discarded – undo
5 5
  */
6 6
 class ActionScheduler_WPCLI_Scheduler_command extends WP_CLI_Command {
7 7
 
8
-	/**
9
-	 * Run the Action Scheduler
10
-	 *
11
-	 * ## OPTIONS
12
-	 *
13
-	 * [--batch-size=<size>]
14
-	 * : The maximum number of actions to run. Defaults to 100.
15
-	 *
16
-	 * [--batches=<size>]
17
-	 * : Limit execution to a number of batches. Defaults to 0, meaning batches will continue being executed until all actions are complete.
18
-	 *
19
-	 * [--cleanup-batch-size=<size>]
20
-	 * : The maximum number of actions to clean up. Defaults to the value of --batch-size.
21
-	 *
22
-	 * [--hooks=<hooks>]
23
-	 * : Only run actions with the specified hook. Omitting this option runs actions with any hook. Define multiple hooks as a comma separated string (without spaces), e.g. `--hooks=hook_one,hook_two,hook_three`
24
-	 *
25
-	 * [--group=<group>]
26
-	 * : Only run actions from the specified group. Omitting this option runs actions from all groups.
27
-	 *
28
-	 * [--free-memory-on=<count>]
29
-	 * : The number of actions to process between freeing memory. 0 disables freeing memory. Default 50.
30
-	 *
31
-	 * [--pause=<seconds>]
32
-	 * : The number of seconds to pause when freeing memory. Default no pause.
33
-	 *
34
-	 * [--force]
35
-	 * : Whether to force execution despite the maximum number of concurrent processes being exceeded.
36
-	 *
37
-	 * @param array $args Positional arguments.
38
-	 * @param array $assoc_args Keyed arguments.
39
-	 * @throws \WP_CLI\ExitException When an error occurs.
40
-	 *
41
-	 * @subcommand run
42
-	 */
43
-	public function run( $args, $assoc_args ) {
44
-		// Handle passed arguments.
45
-		$batch   = absint( \WP_CLI\Utils\get_flag_value( $assoc_args, 'batch-size', 100 ) );
46
-		$batches = absint( \WP_CLI\Utils\get_flag_value( $assoc_args, 'batches', 0 ) );
47
-		$clean   = absint( \WP_CLI\Utils\get_flag_value( $assoc_args, 'cleanup-batch-size', $batch ) );
48
-		$hooks   = explode( ',', WP_CLI\Utils\get_flag_value( $assoc_args, 'hooks', '' ) );
49
-		$hooks   = array_filter( array_map( 'trim', $hooks ) );
50
-		$group   = \WP_CLI\Utils\get_flag_value( $assoc_args, 'group', '' );
51
-		$free_on = \WP_CLI\Utils\get_flag_value( $assoc_args, 'free-memory-on', '' );
52
-		$sleep   = \WP_CLI\Utils\get_flag_value( $assoc_args, 'pause', '' );
53
-		$force   = \WP_CLI\Utils\get_flag_value( $assoc_args, 'force', false );
8
+    /**
9
+     * Run the Action Scheduler
10
+     *
11
+     * ## OPTIONS
12
+     *
13
+     * [--batch-size=<size>]
14
+     * : The maximum number of actions to run. Defaults to 100.
15
+     *
16
+     * [--batches=<size>]
17
+     * : Limit execution to a number of batches. Defaults to 0, meaning batches will continue being executed until all actions are complete.
18
+     *
19
+     * [--cleanup-batch-size=<size>]
20
+     * : The maximum number of actions to clean up. Defaults to the value of --batch-size.
21
+     *
22
+     * [--hooks=<hooks>]
23
+     * : Only run actions with the specified hook. Omitting this option runs actions with any hook. Define multiple hooks as a comma separated string (without spaces), e.g. `--hooks=hook_one,hook_two,hook_three`
24
+     *
25
+     * [--group=<group>]
26
+     * : Only run actions from the specified group. Omitting this option runs actions from all groups.
27
+     *
28
+     * [--free-memory-on=<count>]
29
+     * : The number of actions to process between freeing memory. 0 disables freeing memory. Default 50.
30
+     *
31
+     * [--pause=<seconds>]
32
+     * : The number of seconds to pause when freeing memory. Default no pause.
33
+     *
34
+     * [--force]
35
+     * : Whether to force execution despite the maximum number of concurrent processes being exceeded.
36
+     *
37
+     * @param array $args Positional arguments.
38
+     * @param array $assoc_args Keyed arguments.
39
+     * @throws \WP_CLI\ExitException When an error occurs.
40
+     *
41
+     * @subcommand run
42
+     */
43
+    public function run( $args, $assoc_args ) {
44
+        // Handle passed arguments.
45
+        $batch   = absint( \WP_CLI\Utils\get_flag_value( $assoc_args, 'batch-size', 100 ) );
46
+        $batches = absint( \WP_CLI\Utils\get_flag_value( $assoc_args, 'batches', 0 ) );
47
+        $clean   = absint( \WP_CLI\Utils\get_flag_value( $assoc_args, 'cleanup-batch-size', $batch ) );
48
+        $hooks   = explode( ',', WP_CLI\Utils\get_flag_value( $assoc_args, 'hooks', '' ) );
49
+        $hooks   = array_filter( array_map( 'trim', $hooks ) );
50
+        $group   = \WP_CLI\Utils\get_flag_value( $assoc_args, 'group', '' );
51
+        $free_on = \WP_CLI\Utils\get_flag_value( $assoc_args, 'free-memory-on', '' );
52
+        $sleep   = \WP_CLI\Utils\get_flag_value( $assoc_args, 'pause', '' );
53
+        $force   = \WP_CLI\Utils\get_flag_value( $assoc_args, 'force', false );
54 54
 
55
-		ActionScheduler_DataController::set_free_ticks( $free_on );
56
-		ActionScheduler_DataController::set_sleep_time( $sleep );
55
+        ActionScheduler_DataController::set_free_ticks( $free_on );
56
+        ActionScheduler_DataController::set_sleep_time( $sleep );
57 57
 
58
-		$batches_completed = 0;
59
-		$actions_completed = 0;
60
-		$unlimited         = $batches === 0;
58
+        $batches_completed = 0;
59
+        $actions_completed = 0;
60
+        $unlimited         = $batches === 0;
61 61
 
62
-		try {
63
-			// Custom queue cleaner instance.
64
-			$cleaner = new ActionScheduler_QueueCleaner( null, $clean );
62
+        try {
63
+            // Custom queue cleaner instance.
64
+            $cleaner = new ActionScheduler_QueueCleaner( null, $clean );
65 65
 
66
-			// Get the queue runner instance
67
-			$runner = new ActionScheduler_WPCLI_QueueRunner( null, null, $cleaner );
66
+            // Get the queue runner instance
67
+            $runner = new ActionScheduler_WPCLI_QueueRunner( null, null, $cleaner );
68 68
 
69
-			// Determine how many tasks will be run in the first batch.
70
-			$total = $runner->setup( $batch, $hooks, $group, $force );
69
+            // Determine how many tasks will be run in the first batch.
70
+            $total = $runner->setup( $batch, $hooks, $group, $force );
71 71
 
72
-			// Run actions for as long as possible.
73
-			while ( $total > 0 ) {
74
-				$this->print_total_actions( $total );
75
-				$actions_completed += $runner->run();
76
-				$batches_completed++;
72
+            // Run actions for as long as possible.
73
+            while ( $total > 0 ) {
74
+                $this->print_total_actions( $total );
75
+                $actions_completed += $runner->run();
76
+                $batches_completed++;
77 77
 
78
-				// Maybe set up tasks for the next batch.
79
-				$total = ( $unlimited || $batches_completed < $batches ) ? $runner->setup( $batch, $hooks, $group, $force ) : 0;
80
-			}
81
-		} catch ( Exception $e ) {
82
-			$this->print_error( $e );
83
-		}
78
+                // Maybe set up tasks for the next batch.
79
+                $total = ( $unlimited || $batches_completed < $batches ) ? $runner->setup( $batch, $hooks, $group, $force ) : 0;
80
+            }
81
+        } catch ( Exception $e ) {
82
+            $this->print_error( $e );
83
+        }
84 84
 
85
-		$this->print_total_batches( $batches_completed );
86
-		$this->print_success( $actions_completed );
87
-	}
85
+        $this->print_total_batches( $batches_completed );
86
+        $this->print_success( $actions_completed );
87
+    }
88 88
 
89
-	/**
90
-	 * Print WP CLI message about how many actions are about to be processed.
91
-	 *
92
-	 * @author Jeremy Pry
93
-	 *
94
-	 * @param int $total
95
-	 */
96
-	protected function print_total_actions( $total ) {
97
-		WP_CLI::log(
98
-			sprintf(
99
-				/* translators: %d refers to how many scheduled taks were found to run */
100
-				_n( 'Found %d scheduled task', 'Found %d scheduled tasks', $total, 'action-scheduler' ),
101
-				number_format_i18n( $total )
102
-			)
103
-		);
104
-	}
89
+    /**
90
+     * Print WP CLI message about how many actions are about to be processed.
91
+     *
92
+     * @author Jeremy Pry
93
+     *
94
+     * @param int $total
95
+     */
96
+    protected function print_total_actions( $total ) {
97
+        WP_CLI::log(
98
+            sprintf(
99
+                /* translators: %d refers to how many scheduled taks were found to run */
100
+                _n( 'Found %d scheduled task', 'Found %d scheduled tasks', $total, 'action-scheduler' ),
101
+                number_format_i18n( $total )
102
+            )
103
+        );
104
+    }
105 105
 
106
-	/**
107
-	 * Print WP CLI message about how many batches of actions were processed.
108
-	 *
109
-	 * @author Jeremy Pry
110
-	 *
111
-	 * @param int $batches_completed
112
-	 */
113
-	protected function print_total_batches( $batches_completed ) {
114
-		WP_CLI::log(
115
-			sprintf(
116
-				/* translators: %d refers to the total number of batches executed */
117
-				_n( '%d batch executed.', '%d batches executed.', $batches_completed, 'action-scheduler' ),
118
-				number_format_i18n( $batches_completed )
119
-			)
120
-		);
121
-	}
106
+    /**
107
+     * Print WP CLI message about how many batches of actions were processed.
108
+     *
109
+     * @author Jeremy Pry
110
+     *
111
+     * @param int $batches_completed
112
+     */
113
+    protected function print_total_batches( $batches_completed ) {
114
+        WP_CLI::log(
115
+            sprintf(
116
+                /* translators: %d refers to the total number of batches executed */
117
+                _n( '%d batch executed.', '%d batches executed.', $batches_completed, 'action-scheduler' ),
118
+                number_format_i18n( $batches_completed )
119
+            )
120
+        );
121
+    }
122 122
 
123
-	/**
124
-	 * Convert an exception into a WP CLI error.
125
-	 *
126
-	 * @author Jeremy Pry
127
-	 *
128
-	 * @param Exception $e The error object.
129
-	 *
130
-	 * @throws \WP_CLI\ExitException
131
-	 */
132
-	protected function print_error( Exception $e ) {
133
-		WP_CLI::error(
134
-			sprintf(
135
-				/* translators: %s refers to the exception error message */
136
-				__( 'There was an error running the action scheduler: %s', 'action-scheduler' ),
137
-				$e->getMessage()
138
-			)
139
-		);
140
-	}
123
+    /**
124
+     * Convert an exception into a WP CLI error.
125
+     *
126
+     * @author Jeremy Pry
127
+     *
128
+     * @param Exception $e The error object.
129
+     *
130
+     * @throws \WP_CLI\ExitException
131
+     */
132
+    protected function print_error( Exception $e ) {
133
+        WP_CLI::error(
134
+            sprintf(
135
+                /* translators: %s refers to the exception error message */
136
+                __( 'There was an error running the action scheduler: %s', 'action-scheduler' ),
137
+                $e->getMessage()
138
+            )
139
+        );
140
+    }
141 141
 
142
-	/**
143
-	 * Print a success message with the number of completed actions.
144
-	 *
145
-	 * @author Jeremy Pry
146
-	 *
147
-	 * @param int $actions_completed
148
-	 */
149
-	protected function print_success( $actions_completed ) {
150
-		WP_CLI::success(
151
-			sprintf(
152
-				/* translators: %d refers to the total number of taskes completed */
153
-				_n( '%d scheduled task completed.', '%d scheduled tasks completed.', $actions_completed, 'action-scheduler' ),
154
-				number_format_i18n( $actions_completed )
155
-			)
156
-		);
157
-	}
142
+    /**
143
+     * Print a success message with the number of completed actions.
144
+     *
145
+     * @author Jeremy Pry
146
+     *
147
+     * @param int $actions_completed
148
+     */
149
+    protected function print_success( $actions_completed ) {
150
+        WP_CLI::success(
151
+            sprintf(
152
+                /* translators: %d refers to the total number of taskes completed */
153
+                _n( '%d scheduled task completed.', '%d scheduled tasks completed.', $actions_completed, 'action-scheduler' ),
154
+                number_format_i18n( $actions_completed )
155
+            )
156
+        );
157
+    }
158 158
 }
Please login to merge, or discard this patch.
Spacing   +33 added lines, -33 removed lines patch added patch discarded remove patch
@@ -40,20 +40,20 @@  discard block
 block discarded – undo
40 40
 	 *
41 41
 	 * @subcommand run
42 42
 	 */
43
-	public function run( $args, $assoc_args ) {
43
+	public function run($args, $assoc_args) {
44 44
 		// Handle passed arguments.
45
-		$batch   = absint( \WP_CLI\Utils\get_flag_value( $assoc_args, 'batch-size', 100 ) );
46
-		$batches = absint( \WP_CLI\Utils\get_flag_value( $assoc_args, 'batches', 0 ) );
47
-		$clean   = absint( \WP_CLI\Utils\get_flag_value( $assoc_args, 'cleanup-batch-size', $batch ) );
48
-		$hooks   = explode( ',', WP_CLI\Utils\get_flag_value( $assoc_args, 'hooks', '' ) );
49
-		$hooks   = array_filter( array_map( 'trim', $hooks ) );
50
-		$group   = \WP_CLI\Utils\get_flag_value( $assoc_args, 'group', '' );
51
-		$free_on = \WP_CLI\Utils\get_flag_value( $assoc_args, 'free-memory-on', '' );
52
-		$sleep   = \WP_CLI\Utils\get_flag_value( $assoc_args, 'pause', '' );
53
-		$force   = \WP_CLI\Utils\get_flag_value( $assoc_args, 'force', false );
45
+		$batch   = absint(\WP_CLI\Utils\get_flag_value($assoc_args, 'batch-size', 100));
46
+		$batches = absint(\WP_CLI\Utils\get_flag_value($assoc_args, 'batches', 0));
47
+		$clean   = absint(\WP_CLI\Utils\get_flag_value($assoc_args, 'cleanup-batch-size', $batch));
48
+		$hooks   = explode(',', WP_CLI\Utils\get_flag_value($assoc_args, 'hooks', ''));
49
+		$hooks   = array_filter(array_map('trim', $hooks));
50
+		$group   = \WP_CLI\Utils\get_flag_value($assoc_args, 'group', '');
51
+		$free_on = \WP_CLI\Utils\get_flag_value($assoc_args, 'free-memory-on', '');
52
+		$sleep   = \WP_CLI\Utils\get_flag_value($assoc_args, 'pause', '');
53
+		$force   = \WP_CLI\Utils\get_flag_value($assoc_args, 'force', false);
54 54
 
55
-		ActionScheduler_DataController::set_free_ticks( $free_on );
56
-		ActionScheduler_DataController::set_sleep_time( $sleep );
55
+		ActionScheduler_DataController::set_free_ticks($free_on);
56
+		ActionScheduler_DataController::set_sleep_time($sleep);
57 57
 
58 58
 		$batches_completed = 0;
59 59
 		$actions_completed = 0;
@@ -61,29 +61,29 @@  discard block
 block discarded – undo
61 61
 
62 62
 		try {
63 63
 			// Custom queue cleaner instance.
64
-			$cleaner = new ActionScheduler_QueueCleaner( null, $clean );
64
+			$cleaner = new ActionScheduler_QueueCleaner(null, $clean);
65 65
 
66 66
 			// Get the queue runner instance
67
-			$runner = new ActionScheduler_WPCLI_QueueRunner( null, null, $cleaner );
67
+			$runner = new ActionScheduler_WPCLI_QueueRunner(null, null, $cleaner);
68 68
 
69 69
 			// Determine how many tasks will be run in the first batch.
70
-			$total = $runner->setup( $batch, $hooks, $group, $force );
70
+			$total = $runner->setup($batch, $hooks, $group, $force);
71 71
 
72 72
 			// Run actions for as long as possible.
73
-			while ( $total > 0 ) {
74
-				$this->print_total_actions( $total );
73
+			while ($total > 0) {
74
+				$this->print_total_actions($total);
75 75
 				$actions_completed += $runner->run();
76 76
 				$batches_completed++;
77 77
 
78 78
 				// Maybe set up tasks for the next batch.
79
-				$total = ( $unlimited || $batches_completed < $batches ) ? $runner->setup( $batch, $hooks, $group, $force ) : 0;
79
+				$total = ($unlimited || $batches_completed < $batches) ? $runner->setup($batch, $hooks, $group, $force) : 0;
80 80
 			}
81
-		} catch ( Exception $e ) {
82
-			$this->print_error( $e );
81
+		} catch (Exception $e) {
82
+			$this->print_error($e);
83 83
 		}
84 84
 
85
-		$this->print_total_batches( $batches_completed );
86
-		$this->print_success( $actions_completed );
85
+		$this->print_total_batches($batches_completed);
86
+		$this->print_success($actions_completed);
87 87
 	}
88 88
 
89 89
 	/**
@@ -93,12 +93,12 @@  discard block
 block discarded – undo
93 93
 	 *
94 94
 	 * @param int $total
95 95
 	 */
96
-	protected function print_total_actions( $total ) {
96
+	protected function print_total_actions($total) {
97 97
 		WP_CLI::log(
98 98
 			sprintf(
99 99
 				/* translators: %d refers to how many scheduled taks were found to run */
100
-				_n( 'Found %d scheduled task', 'Found %d scheduled tasks', $total, 'action-scheduler' ),
101
-				number_format_i18n( $total )
100
+				_n('Found %d scheduled task', 'Found %d scheduled tasks', $total, 'action-scheduler'),
101
+				number_format_i18n($total)
102 102
 			)
103 103
 		);
104 104
 	}
@@ -110,12 +110,12 @@  discard block
 block discarded – undo
110 110
 	 *
111 111
 	 * @param int $batches_completed
112 112
 	 */
113
-	protected function print_total_batches( $batches_completed ) {
113
+	protected function print_total_batches($batches_completed) {
114 114
 		WP_CLI::log(
115 115
 			sprintf(
116 116
 				/* translators: %d refers to the total number of batches executed */
117
-				_n( '%d batch executed.', '%d batches executed.', $batches_completed, 'action-scheduler' ),
118
-				number_format_i18n( $batches_completed )
117
+				_n('%d batch executed.', '%d batches executed.', $batches_completed, 'action-scheduler'),
118
+				number_format_i18n($batches_completed)
119 119
 			)
120 120
 		);
121 121
 	}
@@ -129,11 +129,11 @@  discard block
 block discarded – undo
129 129
 	 *
130 130
 	 * @throws \WP_CLI\ExitException
131 131
 	 */
132
-	protected function print_error( Exception $e ) {
132
+	protected function print_error(Exception $e) {
133 133
 		WP_CLI::error(
134 134
 			sprintf(
135 135
 				/* translators: %s refers to the exception error message */
136
-				__( 'There was an error running the action scheduler: %s', 'action-scheduler' ),
136
+				__('There was an error running the action scheduler: %s', 'action-scheduler'),
137 137
 				$e->getMessage()
138 138
 			)
139 139
 		);
@@ -146,12 +146,12 @@  discard block
 block discarded – undo
146 146
 	 *
147 147
 	 * @param int $actions_completed
148 148
 	 */
149
-	protected function print_success( $actions_completed ) {
149
+	protected function print_success($actions_completed) {
150 150
 		WP_CLI::success(
151 151
 			sprintf(
152 152
 				/* translators: %d refers to the total number of taskes completed */
153
-				_n( '%d scheduled task completed.', '%d scheduled tasks completed.', $actions_completed, 'action-scheduler' ),
154
-				number_format_i18n( $actions_completed )
153
+				_n('%d scheduled task completed.', '%d scheduled tasks completed.', $actions_completed, 'action-scheduler'),
154
+				number_format_i18n($actions_completed)
155 155
 			)
156 156
 		);
157 157
 	}
Please login to merge, or discard this patch.
includes/libraries/action-scheduler/classes/ActionScheduler_DateTime.php 2 patches
Indentation   +60 added lines, -60 removed lines patch added patch discarded remove patch
@@ -7,70 +7,70 @@
 block discarded – undo
7 7
  */
8 8
 class ActionScheduler_DateTime extends DateTime {
9 9
 
10
-	/**
11
-	 * UTC offset.
12
-	 *
13
-	 * Only used when a timezone is not set. When a timezone string is
14
-	 * used, this will be set to 0.
15
-	 *
16
-	 * @var int
17
-	 */
18
-	protected $utcOffset = 0;
10
+    /**
11
+     * UTC offset.
12
+     *
13
+     * Only used when a timezone is not set. When a timezone string is
14
+     * used, this will be set to 0.
15
+     *
16
+     * @var int
17
+     */
18
+    protected $utcOffset = 0;
19 19
 
20
-	/**
21
-	 * Get the unix timestamp of the current object.
22
-	 *
23
-	 * Missing in PHP 5.2 so just here so it can be supported consistently.
24
-	 *
25
-	 * @return int
26
-	 */
27
-	public function getTimestamp() {
28
-		return method_exists( 'DateTime', 'getTimestamp' ) ? parent::getTimestamp() : $this->format( 'U' );
29
-	}
20
+    /**
21
+     * Get the unix timestamp of the current object.
22
+     *
23
+     * Missing in PHP 5.2 so just here so it can be supported consistently.
24
+     *
25
+     * @return int
26
+     */
27
+    public function getTimestamp() {
28
+        return method_exists( 'DateTime', 'getTimestamp' ) ? parent::getTimestamp() : $this->format( 'U' );
29
+    }
30 30
 
31
-	/**
32
-	 * Set the UTC offset.
33
-	 *
34
-	 * This represents a fixed offset instead of a timezone setting.
35
-	 *
36
-	 * @param $offset
37
-	 */
38
-	public function setUtcOffset( $offset ) {
39
-		$this->utcOffset = intval( $offset );
40
-	}
31
+    /**
32
+     * Set the UTC offset.
33
+     *
34
+     * This represents a fixed offset instead of a timezone setting.
35
+     *
36
+     * @param $offset
37
+     */
38
+    public function setUtcOffset( $offset ) {
39
+        $this->utcOffset = intval( $offset );
40
+    }
41 41
 
42
-	/**
43
-	 * Returns the timezone offset.
44
-	 *
45
-	 * @return int
46
-	 * @link http://php.net/manual/en/datetime.getoffset.php
47
-	 */
48
-	public function getOffset() {
49
-		return $this->utcOffset ? $this->utcOffset : parent::getOffset();
50
-	}
42
+    /**
43
+     * Returns the timezone offset.
44
+     *
45
+     * @return int
46
+     * @link http://php.net/manual/en/datetime.getoffset.php
47
+     */
48
+    public function getOffset() {
49
+        return $this->utcOffset ? $this->utcOffset : parent::getOffset();
50
+    }
51 51
 
52
-	/**
53
-	 * Set the TimeZone associated with the DateTime
54
-	 *
55
-	 * @param DateTimeZone $timezone
56
-	 *
57
-	 * @return static
58
-	 * @link http://php.net/manual/en/datetime.settimezone.php
59
-	 */
60
-	public function setTimezone( $timezone ) {
61
-		$this->utcOffset = 0;
62
-		parent::setTimezone( $timezone );
52
+    /**
53
+     * Set the TimeZone associated with the DateTime
54
+     *
55
+     * @param DateTimeZone $timezone
56
+     *
57
+     * @return static
58
+     * @link http://php.net/manual/en/datetime.settimezone.php
59
+     */
60
+    public function setTimezone( $timezone ) {
61
+        $this->utcOffset = 0;
62
+        parent::setTimezone( $timezone );
63 63
 
64
-		return $this;
65
-	}
64
+        return $this;
65
+    }
66 66
 
67
-	/**
68
-	 * Get the timestamp with the WordPress timezone offset added or subtracted.
69
-	 *
70
-	 * @since  3.0.0
71
-	 * @return int
72
-	 */
73
-	public function getOffsetTimestamp() {
74
-		return $this->getTimestamp() + $this->getOffset();
75
-	}
67
+    /**
68
+     * Get the timestamp with the WordPress timezone offset added or subtracted.
69
+     *
70
+     * @since  3.0.0
71
+     * @return int
72
+     */
73
+    public function getOffsetTimestamp() {
74
+        return $this->getTimestamp() + $this->getOffset();
75
+    }
76 76
 }
Please login to merge, or discard this patch.
Spacing   +5 added lines, -5 removed lines patch added patch discarded remove patch
@@ -25,7 +25,7 @@  discard block
 block discarded – undo
25 25
 	 * @return int
26 26
 	 */
27 27
 	public function getTimestamp() {
28
-		return method_exists( 'DateTime', 'getTimestamp' ) ? parent::getTimestamp() : $this->format( 'U' );
28
+		return method_exists('DateTime', 'getTimestamp') ? parent::getTimestamp() : $this->format('U');
29 29
 	}
30 30
 
31 31
 	/**
@@ -35,8 +35,8 @@  discard block
 block discarded – undo
35 35
 	 *
36 36
 	 * @param $offset
37 37
 	 */
38
-	public function setUtcOffset( $offset ) {
39
-		$this->utcOffset = intval( $offset );
38
+	public function setUtcOffset($offset) {
39
+		$this->utcOffset = intval($offset);
40 40
 	}
41 41
 
42 42
 	/**
@@ -57,9 +57,9 @@  discard block
 block discarded – undo
57 57
 	 * @return static
58 58
 	 * @link http://php.net/manual/en/datetime.settimezone.php
59 59
 	 */
60
-	public function setTimezone( $timezone ) {
60
+	public function setTimezone($timezone) {
61 61
 		$this->utcOffset = 0;
62
-		parent::setTimezone( $timezone );
62
+		parent::setTimezone($timezone);
63 63
 
64 64
 		return $this;
65 65
 	}
Please login to merge, or discard this patch.
includes/libraries/action-scheduler/classes/ActionScheduler_LogEntry.php 2 patches
Indentation   +44 added lines, -44 removed lines patch added patch discarded remove patch
@@ -5,63 +5,63 @@
 block discarded – undo
5 5
  */
6 6
 class ActionScheduler_LogEntry {
7 7
 
8
-	/**
9
-	 * @var int $action_id
10
-	 */
11
-	protected $action_id =  '';
8
+    /**
9
+     * @var int $action_id
10
+     */
11
+    protected $action_id =  '';
12 12
 
13
-	/**
14
-	 * @var string $message
15
-	 */
16
-	protected $message =  '';
13
+    /**
14
+     * @var string $message
15
+     */
16
+    protected $message =  '';
17 17
 
18
-	/**
19
-	 * @var Datetime $date
20
-	 */
21
-	protected $date;
18
+    /**
19
+     * @var Datetime $date
20
+     */
21
+    protected $date;
22 22
 
23
-	/**
24
-	 * Constructor
25
-	 *
26
-	 * @param mixed  $action_id Action ID
27
-	 * @param string $message   Message
28
-	 * @param Datetime $date    Datetime object with the time when this log entry was created. If this parameter is
29
-	 *                          not provided a new Datetime object (with current time) will be created.
30
-	 */
31
-	public function __construct( $action_id, $message, $date = null ) {
23
+    /**
24
+     * Constructor
25
+     *
26
+     * @param mixed  $action_id Action ID
27
+     * @param string $message   Message
28
+     * @param Datetime $date    Datetime object with the time when this log entry was created. If this parameter is
29
+     *                          not provided a new Datetime object (with current time) will be created.
30
+     */
31
+    public function __construct( $action_id, $message, $date = null ) {
32 32
 
33
-		/*
33
+        /*
34 34
 		 * ActionScheduler_wpCommentLogger::get_entry() previously passed a 3rd param of $comment->comment_type
35 35
 		 * to ActionScheduler_LogEntry::__construct(), goodness knows why, and the Follow-up Emails plugin
36 36
 		 * hard-codes loading its own version of ActionScheduler_wpCommentLogger with that out-dated method,
37 37
 		 * goodness knows why, so we need to guard against that here instead of using a DateTime type declaration
38 38
 		 * for the constructor's 3rd param of $date and causing a fatal error with older versions of FUE.
39 39
 		 */
40
-		if ( null !== $date && ! is_a( $date, 'DateTime' ) ) {
41
-			_doing_it_wrong( __METHOD__, 'The third parameter must be a valid DateTime instance, or null.', '2.0.0' );
42
-			$date = null;
43
-		}
40
+        if ( null !== $date && ! is_a( $date, 'DateTime' ) ) {
41
+            _doing_it_wrong( __METHOD__, 'The third parameter must be a valid DateTime instance, or null.', '2.0.0' );
42
+            $date = null;
43
+        }
44 44
 
45
-		$this->action_id = $action_id;
46
-		$this->message   = $message;
47
-		$this->date      = $date ? $date : new Datetime;
48
-	}
45
+        $this->action_id = $action_id;
46
+        $this->message   = $message;
47
+        $this->date      = $date ? $date : new Datetime;
48
+    }
49 49
 
50
-	/**
51
-	 * Returns the date when this log entry was created
52
-	 *
53
-	 * @return Datetime
54
-	 */
55
-	public function get_date() {
56
-		return $this->date;
57
-	}
50
+    /**
51
+     * Returns the date when this log entry was created
52
+     *
53
+     * @return Datetime
54
+     */
55
+    public function get_date() {
56
+        return $this->date;
57
+    }
58 58
 
59
-	public function get_action_id() {
60
-		return $this->action_id;
61
-	}
59
+    public function get_action_id() {
60
+        return $this->action_id;
61
+    }
62 62
 
63
-	public function get_message() {
64
-		return $this->message;
65
-	}
63
+    public function get_message() {
64
+        return $this->message;
65
+    }
66 66
 }
67 67
 
Please login to merge, or discard this patch.
Spacing   +5 added lines, -5 removed lines patch added patch discarded remove patch
@@ -8,12 +8,12 @@  discard block
 block discarded – undo
8 8
 	/**
9 9
 	 * @var int $action_id
10 10
 	 */
11
-	protected $action_id =  '';
11
+	protected $action_id = '';
12 12
 
13 13
 	/**
14 14
 	 * @var string $message
15 15
 	 */
16
-	protected $message =  '';
16
+	protected $message = '';
17 17
 
18 18
 	/**
19 19
 	 * @var Datetime $date
@@ -28,7 +28,7 @@  discard block
 block discarded – undo
28 28
 	 * @param Datetime $date    Datetime object with the time when this log entry was created. If this parameter is
29 29
 	 *                          not provided a new Datetime object (with current time) will be created.
30 30
 	 */
31
-	public function __construct( $action_id, $message, $date = null ) {
31
+	public function __construct($action_id, $message, $date = null) {
32 32
 
33 33
 		/*
34 34
 		 * ActionScheduler_wpCommentLogger::get_entry() previously passed a 3rd param of $comment->comment_type
@@ -37,8 +37,8 @@  discard block
 block discarded – undo
37 37
 		 * goodness knows why, so we need to guard against that here instead of using a DateTime type declaration
38 38
 		 * for the constructor's 3rd param of $date and causing a fatal error with older versions of FUE.
39 39
 		 */
40
-		if ( null !== $date && ! is_a( $date, 'DateTime' ) ) {
41
-			_doing_it_wrong( __METHOD__, 'The third parameter must be a valid DateTime instance, or null.', '2.0.0' );
40
+		if (null !== $date && !is_a($date, 'DateTime')) {
41
+			_doing_it_wrong(__METHOD__, 'The third parameter must be a valid DateTime instance, or null.', '2.0.0');
42 42
 			$date = null;
43 43
 		}
44 44
 
Please login to merge, or discard this patch.
libraries/action-scheduler/classes/ActionScheduler_DataController.php 2 patches
Indentation   +170 added lines, -170 removed lines patch added patch discarded remove patch
@@ -14,174 +14,174 @@
 block discarded – undo
14 14
  * @since 3.0.0
15 15
  */
16 16
 class ActionScheduler_DataController {
17
-	/** Action data store class name. */
18
-	const DATASTORE_CLASS = 'ActionScheduler_DBStore';
19
-
20
-	/** Logger data store class name. */
21
-	const LOGGER_CLASS    = 'ActionScheduler_DBLogger';
22
-
23
-	/** Migration status option name. */
24
-	const STATUS_FLAG     = 'action_scheduler_migration_status';
25
-
26
-	/** Migration status option value. */
27
-	const STATUS_COMPLETE = 'complete';
28
-
29
-	/** Migration minimum required PHP version. */
30
-	const MIN_PHP_VERSION = '5.5';
31
-
32
-	/** @var ActionScheduler_DataController */
33
-	private static $instance;
34
-
35
-	/** @var int */
36
-	private static $sleep_time = 0;
37
-
38
-	/** @var int */
39
-	private static $free_ticks = 50;
40
-
41
-	/**
42
-	 * Get a flag indicating whether the migration environment dependencies are met.
43
-	 *
44
-	 * @return bool
45
-	 */
46
-	public static function dependencies_met() {
47
-		$php_support = version_compare( PHP_VERSION, self::MIN_PHP_VERSION, '>=' );
48
-		return $php_support && apply_filters( 'action_scheduler_migration_dependencies_met', true );
49
-	}
50
-
51
-	/**
52
-	 * Get a flag indicating whether the migration is complete.
53
-	 *
54
-	 * @return bool Whether the flag has been set marking the migration as complete
55
-	 */
56
-	public static function is_migration_complete() {
57
-		return get_option( self::STATUS_FLAG ) === self::STATUS_COMPLETE;
58
-	}
59
-
60
-	/**
61
-	 * Mark the migration as complete.
62
-	 */
63
-	public static function mark_migration_complete() {
64
-		update_option( self::STATUS_FLAG, self::STATUS_COMPLETE );
65
-	}
66
-
67
-	/**
68
-	 * Unmark migration when a plugin is de-activated. Will not work in case of silent activation, for example in an update.
69
-	 * We do this to mitigate the bug of lost actions which happens if there was an AS 2.x to AS 3.x migration in the past, but that plugin is now
70
-	 * deactivated and the site was running on AS 2.x again.
71
-	 */
72
-	public static function mark_migration_incomplete() {
73
-		delete_option( self::STATUS_FLAG );
74
-	}
75
-
76
-	/**
77
-	 * Set the action store class name.
78
-	 *
79
-	 * @param string $class Classname of the store class.
80
-	 *
81
-	 * @return string
82
-	 */
83
-	public static function set_store_class( $class ) {
84
-		return self::DATASTORE_CLASS;
85
-	}
86
-
87
-	/**
88
-	 * Set the action logger class name.
89
-	 *
90
-	 * @param string $class Classname of the logger class.
91
-	 *
92
-	 * @return string
93
-	 */
94
-	public static function set_logger_class( $class ) {
95
-		return self::LOGGER_CLASS;
96
-	}
97
-
98
-	/**
99
-	 * Set the sleep time in seconds.
100
-	 *
101
-	 * @param integer $sleep_time The number of seconds to pause before resuming operation.
102
-	 */
103
-	public static function set_sleep_time( $sleep_time ) {
104
-		self::$sleep_time = $sleep_time;
105
-	}
106
-
107
-	/**
108
-	 * Set the tick count required for freeing memory.
109
-	 *
110
-	 * @param integer $free_ticks The number of ticks to free memory on.
111
-	 */
112
-	public static function set_free_ticks( $free_ticks ) {
113
-		self::$free_ticks = $free_ticks;
114
-	}
115
-
116
-	/**
117
-	 * Free memory if conditions are met.
118
-	 *
119
-	 * @param int $ticks Current tick count.
120
-	 */
121
-	public static function maybe_free_memory( $ticks ) {
122
-		if ( self::$free_ticks && 0 === $ticks % self::$free_ticks ) {
123
-			self::free_memory();
124
-		}
125
-	}
126
-
127
-	/**
128
-	 * Reduce memory footprint by clearing the database query and object caches.
129
-	 */
130
-	public static function free_memory() {
131
-		if ( 0 < self::$sleep_time ) {
132
-			/* translators: %d: amount of time */
133
-			\WP_CLI::warning( sprintf( _n( 'Stopped the insanity for %d second', 'Stopped the insanity for %d seconds', self::$sleep_time, 'action-scheduler' ), self::$sleep_time ) );
134
-			sleep( self::$sleep_time );
135
-		}
136
-
137
-		\WP_CLI::warning( __( 'Attempting to reduce used memory...', 'action-scheduler' ) );
138
-
139
-		/**
140
-		 * @var $wpdb            \wpdb
141
-		 * @var $wp_object_cache \WP_Object_Cache
142
-		 */
143
-		global $wpdb, $wp_object_cache;
144
-
145
-		$wpdb->queries = array();
146
-
147
-		if ( ! is_a( $wp_object_cache, 'WP_Object_Cache' ) ) {
148
-			return;
149
-		}
150
-
151
-		$wp_object_cache->group_ops      = array();
152
-		$wp_object_cache->stats          = array();
153
-		$wp_object_cache->memcache_debug = array();
154
-		$wp_object_cache->cache          = array();
155
-
156
-		if ( is_callable( array( $wp_object_cache, '__remoteset' ) ) ) {
157
-			call_user_func( array( $wp_object_cache, '__remoteset' ) ); // important
158
-		}
159
-	}
160
-
161
-	/**
162
-	 * Connect to table datastores if migration is complete.
163
-	 * Otherwise, proceed with the migration if the dependencies have been met.
164
-	 */
165
-	public static function init() {
166
-		if ( self::is_migration_complete() ) {
167
-			add_filter( 'action_scheduler_store_class', array( 'ActionScheduler_DataController', 'set_store_class' ), 100 );
168
-			add_filter( 'action_scheduler_logger_class', array( 'ActionScheduler_DataController', 'set_logger_class' ), 100 );
169
-			add_action( 'deactivate_plugin', array( 'ActionScheduler_DataController', 'mark_migration_incomplete' ) );
170
-		} elseif ( self::dependencies_met() ) {
171
-			Controller::init();
172
-		}
173
-
174
-		add_action( 'action_scheduler/progress_tick', array( 'ActionScheduler_DataController', 'maybe_free_memory' ) );
175
-	}
176
-
177
-	/**
178
-	 * Singleton factory.
179
-	 */
180
-	public static function instance() {
181
-		if ( ! isset( self::$instance ) ) {
182
-			self::$instance = new static();
183
-		}
184
-
185
-		return self::$instance;
186
-	}
17
+    /** Action data store class name. */
18
+    const DATASTORE_CLASS = 'ActionScheduler_DBStore';
19
+
20
+    /** Logger data store class name. */
21
+    const LOGGER_CLASS    = 'ActionScheduler_DBLogger';
22
+
23
+    /** Migration status option name. */
24
+    const STATUS_FLAG     = 'action_scheduler_migration_status';
25
+
26
+    /** Migration status option value. */
27
+    const STATUS_COMPLETE = 'complete';
28
+
29
+    /** Migration minimum required PHP version. */
30
+    const MIN_PHP_VERSION = '5.5';
31
+
32
+    /** @var ActionScheduler_DataController */
33
+    private static $instance;
34
+
35
+    /** @var int */
36
+    private static $sleep_time = 0;
37
+
38
+    /** @var int */
39
+    private static $free_ticks = 50;
40
+
41
+    /**
42
+     * Get a flag indicating whether the migration environment dependencies are met.
43
+     *
44
+     * @return bool
45
+     */
46
+    public static function dependencies_met() {
47
+        $php_support = version_compare( PHP_VERSION, self::MIN_PHP_VERSION, '>=' );
48
+        return $php_support && apply_filters( 'action_scheduler_migration_dependencies_met', true );
49
+    }
50
+
51
+    /**
52
+     * Get a flag indicating whether the migration is complete.
53
+     *
54
+     * @return bool Whether the flag has been set marking the migration as complete
55
+     */
56
+    public static function is_migration_complete() {
57
+        return get_option( self::STATUS_FLAG ) === self::STATUS_COMPLETE;
58
+    }
59
+
60
+    /**
61
+     * Mark the migration as complete.
62
+     */
63
+    public static function mark_migration_complete() {
64
+        update_option( self::STATUS_FLAG, self::STATUS_COMPLETE );
65
+    }
66
+
67
+    /**
68
+     * Unmark migration when a plugin is de-activated. Will not work in case of silent activation, for example in an update.
69
+     * We do this to mitigate the bug of lost actions which happens if there was an AS 2.x to AS 3.x migration in the past, but that plugin is now
70
+     * deactivated and the site was running on AS 2.x again.
71
+     */
72
+    public static function mark_migration_incomplete() {
73
+        delete_option( self::STATUS_FLAG );
74
+    }
75
+
76
+    /**
77
+     * Set the action store class name.
78
+     *
79
+     * @param string $class Classname of the store class.
80
+     *
81
+     * @return string
82
+     */
83
+    public static function set_store_class( $class ) {
84
+        return self::DATASTORE_CLASS;
85
+    }
86
+
87
+    /**
88
+     * Set the action logger class name.
89
+     *
90
+     * @param string $class Classname of the logger class.
91
+     *
92
+     * @return string
93
+     */
94
+    public static function set_logger_class( $class ) {
95
+        return self::LOGGER_CLASS;
96
+    }
97
+
98
+    /**
99
+     * Set the sleep time in seconds.
100
+     *
101
+     * @param integer $sleep_time The number of seconds to pause before resuming operation.
102
+     */
103
+    public static function set_sleep_time( $sleep_time ) {
104
+        self::$sleep_time = $sleep_time;
105
+    }
106
+
107
+    /**
108
+     * Set the tick count required for freeing memory.
109
+     *
110
+     * @param integer $free_ticks The number of ticks to free memory on.
111
+     */
112
+    public static function set_free_ticks( $free_ticks ) {
113
+        self::$free_ticks = $free_ticks;
114
+    }
115
+
116
+    /**
117
+     * Free memory if conditions are met.
118
+     *
119
+     * @param int $ticks Current tick count.
120
+     */
121
+    public static function maybe_free_memory( $ticks ) {
122
+        if ( self::$free_ticks && 0 === $ticks % self::$free_ticks ) {
123
+            self::free_memory();
124
+        }
125
+    }
126
+
127
+    /**
128
+     * Reduce memory footprint by clearing the database query and object caches.
129
+     */
130
+    public static function free_memory() {
131
+        if ( 0 < self::$sleep_time ) {
132
+            /* translators: %d: amount of time */
133
+            \WP_CLI::warning( sprintf( _n( 'Stopped the insanity for %d second', 'Stopped the insanity for %d seconds', self::$sleep_time, 'action-scheduler' ), self::$sleep_time ) );
134
+            sleep( self::$sleep_time );
135
+        }
136
+
137
+        \WP_CLI::warning( __( 'Attempting to reduce used memory...', 'action-scheduler' ) );
138
+
139
+        /**
140
+         * @var $wpdb            \wpdb
141
+         * @var $wp_object_cache \WP_Object_Cache
142
+         */
143
+        global $wpdb, $wp_object_cache;
144
+
145
+        $wpdb->queries = array();
146
+
147
+        if ( ! is_a( $wp_object_cache, 'WP_Object_Cache' ) ) {
148
+            return;
149
+        }
150
+
151
+        $wp_object_cache->group_ops      = array();
152
+        $wp_object_cache->stats          = array();
153
+        $wp_object_cache->memcache_debug = array();
154
+        $wp_object_cache->cache          = array();
155
+
156
+        if ( is_callable( array( $wp_object_cache, '__remoteset' ) ) ) {
157
+            call_user_func( array( $wp_object_cache, '__remoteset' ) ); // important
158
+        }
159
+    }
160
+
161
+    /**
162
+     * Connect to table datastores if migration is complete.
163
+     * Otherwise, proceed with the migration if the dependencies have been met.
164
+     */
165
+    public static function init() {
166
+        if ( self::is_migration_complete() ) {
167
+            add_filter( 'action_scheduler_store_class', array( 'ActionScheduler_DataController', 'set_store_class' ), 100 );
168
+            add_filter( 'action_scheduler_logger_class', array( 'ActionScheduler_DataController', 'set_logger_class' ), 100 );
169
+            add_action( 'deactivate_plugin', array( 'ActionScheduler_DataController', 'mark_migration_incomplete' ) );
170
+        } elseif ( self::dependencies_met() ) {
171
+            Controller::init();
172
+        }
173
+
174
+        add_action( 'action_scheduler/progress_tick', array( 'ActionScheduler_DataController', 'maybe_free_memory' ) );
175
+    }
176
+
177
+    /**
178
+     * Singleton factory.
179
+     */
180
+    public static function instance() {
181
+        if ( ! isset( self::$instance ) ) {
182
+            self::$instance = new static();
183
+        }
184
+
185
+        return self::$instance;
186
+    }
187 187
 }
Please login to merge, or discard this patch.
Spacing   +25 added lines, -25 removed lines patch added patch discarded remove patch
@@ -44,8 +44,8 @@  discard block
 block discarded – undo
44 44
 	 * @return bool
45 45
 	 */
46 46
 	public static function dependencies_met() {
47
-		$php_support = version_compare( PHP_VERSION, self::MIN_PHP_VERSION, '>=' );
48
-		return $php_support && apply_filters( 'action_scheduler_migration_dependencies_met', true );
47
+		$php_support = version_compare(PHP_VERSION, self::MIN_PHP_VERSION, '>=');
48
+		return $php_support && apply_filters('action_scheduler_migration_dependencies_met', true);
49 49
 	}
50 50
 
51 51
 	/**
@@ -54,14 +54,14 @@  discard block
 block discarded – undo
54 54
 	 * @return bool Whether the flag has been set marking the migration as complete
55 55
 	 */
56 56
 	public static function is_migration_complete() {
57
-		return get_option( self::STATUS_FLAG ) === self::STATUS_COMPLETE;
57
+		return get_option(self::STATUS_FLAG) === self::STATUS_COMPLETE;
58 58
 	}
59 59
 
60 60
 	/**
61 61
 	 * Mark the migration as complete.
62 62
 	 */
63 63
 	public static function mark_migration_complete() {
64
-		update_option( self::STATUS_FLAG, self::STATUS_COMPLETE );
64
+		update_option(self::STATUS_FLAG, self::STATUS_COMPLETE);
65 65
 	}
66 66
 
67 67
 	/**
@@ -70,7 +70,7 @@  discard block
 block discarded – undo
70 70
 	 * deactivated and the site was running on AS 2.x again.
71 71
 	 */
72 72
 	public static function mark_migration_incomplete() {
73
-		delete_option( self::STATUS_FLAG );
73
+		delete_option(self::STATUS_FLAG);
74 74
 	}
75 75
 
76 76
 	/**
@@ -80,7 +80,7 @@  discard block
 block discarded – undo
80 80
 	 *
81 81
 	 * @return string
82 82
 	 */
83
-	public static function set_store_class( $class ) {
83
+	public static function set_store_class($class) {
84 84
 		return self::DATASTORE_CLASS;
85 85
 	}
86 86
 
@@ -91,7 +91,7 @@  discard block
 block discarded – undo
91 91
 	 *
92 92
 	 * @return string
93 93
 	 */
94
-	public static function set_logger_class( $class ) {
94
+	public static function set_logger_class($class) {
95 95
 		return self::LOGGER_CLASS;
96 96
 	}
97 97
 
@@ -100,7 +100,7 @@  discard block
 block discarded – undo
100 100
 	 *
101 101
 	 * @param integer $sleep_time The number of seconds to pause before resuming operation.
102 102
 	 */
103
-	public static function set_sleep_time( $sleep_time ) {
103
+	public static function set_sleep_time($sleep_time) {
104 104
 		self::$sleep_time = $sleep_time;
105 105
 	}
106 106
 
@@ -109,7 +109,7 @@  discard block
 block discarded – undo
109 109
 	 *
110 110
 	 * @param integer $free_ticks The number of ticks to free memory on.
111 111
 	 */
112
-	public static function set_free_ticks( $free_ticks ) {
112
+	public static function set_free_ticks($free_ticks) {
113 113
 		self::$free_ticks = $free_ticks;
114 114
 	}
115 115
 
@@ -118,8 +118,8 @@  discard block
 block discarded – undo
118 118
 	 *
119 119
 	 * @param int $ticks Current tick count.
120 120
 	 */
121
-	public static function maybe_free_memory( $ticks ) {
122
-		if ( self::$free_ticks && 0 === $ticks % self::$free_ticks ) {
121
+	public static function maybe_free_memory($ticks) {
122
+		if (self::$free_ticks && 0 === $ticks % self::$free_ticks) {
123 123
 			self::free_memory();
124 124
 		}
125 125
 	}
@@ -128,13 +128,13 @@  discard block
 block discarded – undo
128 128
 	 * Reduce memory footprint by clearing the database query and object caches.
129 129
 	 */
130 130
 	public static function free_memory() {
131
-		if ( 0 < self::$sleep_time ) {
131
+		if (0 < self::$sleep_time) {
132 132
 			/* translators: %d: amount of time */
133
-			\WP_CLI::warning( sprintf( _n( 'Stopped the insanity for %d second', 'Stopped the insanity for %d seconds', self::$sleep_time, 'action-scheduler' ), self::$sleep_time ) );
134
-			sleep( self::$sleep_time );
133
+			\WP_CLI::warning(sprintf(_n('Stopped the insanity for %d second', 'Stopped the insanity for %d seconds', self::$sleep_time, 'action-scheduler'), self::$sleep_time));
134
+			sleep(self::$sleep_time);
135 135
 		}
136 136
 
137
-		\WP_CLI::warning( __( 'Attempting to reduce used memory...', 'action-scheduler' ) );
137
+		\WP_CLI::warning(__('Attempting to reduce used memory...', 'action-scheduler'));
138 138
 
139 139
 		/**
140 140
 		 * @var $wpdb            \wpdb
@@ -144,7 +144,7 @@  discard block
 block discarded – undo
144 144
 
145 145
 		$wpdb->queries = array();
146 146
 
147
-		if ( ! is_a( $wp_object_cache, 'WP_Object_Cache' ) ) {
147
+		if (!is_a($wp_object_cache, 'WP_Object_Cache')) {
148 148
 			return;
149 149
 		}
150 150
 
@@ -153,8 +153,8 @@  discard block
 block discarded – undo
153 153
 		$wp_object_cache->memcache_debug = array();
154 154
 		$wp_object_cache->cache          = array();
155 155
 
156
-		if ( is_callable( array( $wp_object_cache, '__remoteset' ) ) ) {
157
-			call_user_func( array( $wp_object_cache, '__remoteset' ) ); // important
156
+		if (is_callable(array($wp_object_cache, '__remoteset'))) {
157
+			call_user_func(array($wp_object_cache, '__remoteset')); // important
158 158
 		}
159 159
 	}
160 160
 
@@ -163,22 +163,22 @@  discard block
 block discarded – undo
163 163
 	 * Otherwise, proceed with the migration if the dependencies have been met.
164 164
 	 */
165 165
 	public static function init() {
166
-		if ( self::is_migration_complete() ) {
167
-			add_filter( 'action_scheduler_store_class', array( 'ActionScheduler_DataController', 'set_store_class' ), 100 );
168
-			add_filter( 'action_scheduler_logger_class', array( 'ActionScheduler_DataController', 'set_logger_class' ), 100 );
169
-			add_action( 'deactivate_plugin', array( 'ActionScheduler_DataController', 'mark_migration_incomplete' ) );
170
-		} elseif ( self::dependencies_met() ) {
166
+		if (self::is_migration_complete()) {
167
+			add_filter('action_scheduler_store_class', array('ActionScheduler_DataController', 'set_store_class'), 100);
168
+			add_filter('action_scheduler_logger_class', array('ActionScheduler_DataController', 'set_logger_class'), 100);
169
+			add_action('deactivate_plugin', array('ActionScheduler_DataController', 'mark_migration_incomplete'));
170
+		} elseif (self::dependencies_met()) {
171 171
 			Controller::init();
172 172
 		}
173 173
 
174
-		add_action( 'action_scheduler/progress_tick', array( 'ActionScheduler_DataController', 'maybe_free_memory' ) );
174
+		add_action('action_scheduler/progress_tick', array('ActionScheduler_DataController', 'maybe_free_memory'));
175 175
 	}
176 176
 
177 177
 	/**
178 178
 	 * Singleton factory.
179 179
 	 */
180 180
 	public static function instance() {
181
-		if ( ! isset( self::$instance ) ) {
181
+		if (!isset(self::$instance)) {
182 182
 			self::$instance = new static();
183 183
 		}
184 184
 
Please login to merge, or discard this patch.
action-scheduler/classes/ActionScheduler_InvalidActionException.php 2 patches
Indentation   +32 added lines, -32 removed lines patch added patch discarded remove patch
@@ -9,39 +9,39 @@
 block discarded – undo
9 9
  */
10 10
 class ActionScheduler_InvalidActionException extends \InvalidArgumentException implements ActionScheduler_Exception {
11 11
 
12
-	/**
13
-	 * Create a new exception when the action's schedule cannot be fetched.
14
-	 *
15
-	 * @param string $action_id The action ID with bad args.
16
-	 * @return static
17
-	 */
18
-	public static function from_schedule( $action_id, $schedule ) {
19
-		$message = sprintf(
20
-			/* translators: 1: action ID 2: schedule */
21
-			__( 'Action [%1$s] has an invalid schedule: %2$s', 'action-scheduler' ),
22
-			$action_id,
23
-			var_export( $schedule, true )
24
-		);
12
+    /**
13
+     * Create a new exception when the action's schedule cannot be fetched.
14
+     *
15
+     * @param string $action_id The action ID with bad args.
16
+     * @return static
17
+     */
18
+    public static function from_schedule( $action_id, $schedule ) {
19
+        $message = sprintf(
20
+            /* translators: 1: action ID 2: schedule */
21
+            __( 'Action [%1$s] has an invalid schedule: %2$s', 'action-scheduler' ),
22
+            $action_id,
23
+            var_export( $schedule, true )
24
+        );
25 25
 
26
-		return new static( $message );
27
-	}
26
+        return new static( $message );
27
+    }
28 28
 
29
-	/**
30
-	 * Create a new exception when the action's args cannot be decoded to an array.
31
-	 *
32
-	 * @author Jeremy Pry
33
-	 *
34
-	 * @param string $action_id The action ID with bad args.
35
-	 * @return static
36
-	 */
37
-	public static function from_decoding_args( $action_id, $args = array() ) {
38
-		$message = sprintf(
39
-			/* translators: 1: action ID 2: arguments */
40
-			__( 'Action [%1$s] has invalid arguments. It cannot be JSON decoded to an array. $args = %2$s', 'action-scheduler' ),
41
-			$action_id,
42
-			var_export( $args, true )
43
-		);
29
+    /**
30
+     * Create a new exception when the action's args cannot be decoded to an array.
31
+     *
32
+     * @author Jeremy Pry
33
+     *
34
+     * @param string $action_id The action ID with bad args.
35
+     * @return static
36
+     */
37
+    public static function from_decoding_args( $action_id, $args = array() ) {
38
+        $message = sprintf(
39
+            /* translators: 1: action ID 2: arguments */
40
+            __( 'Action [%1$s] has invalid arguments. It cannot be JSON decoded to an array. $args = %2$s', 'action-scheduler' ),
41
+            $action_id,
42
+            var_export( $args, true )
43
+        );
44 44
 
45
-		return new static( $message );
46
-	}
45
+        return new static( $message );
46
+    }
47 47
 }
Please login to merge, or discard this patch.
Spacing   +8 added lines, -8 removed lines patch added patch discarded remove patch
@@ -15,15 +15,15 @@  discard block
 block discarded – undo
15 15
 	 * @param string $action_id The action ID with bad args.
16 16
 	 * @return static
17 17
 	 */
18
-	public static function from_schedule( $action_id, $schedule ) {
18
+	public static function from_schedule($action_id, $schedule) {
19 19
 		$message = sprintf(
20 20
 			/* translators: 1: action ID 2: schedule */
21
-			__( 'Action [%1$s] has an invalid schedule: %2$s', 'action-scheduler' ),
21
+			__('Action [%1$s] has an invalid schedule: %2$s', 'action-scheduler'),
22 22
 			$action_id,
23
-			var_export( $schedule, true )
23
+			var_export($schedule, true)
24 24
 		);
25 25
 
26
-		return new static( $message );
26
+		return new static($message);
27 27
 	}
28 28
 
29 29
 	/**
@@ -34,14 +34,14 @@  discard block
 block discarded – undo
34 34
 	 * @param string $action_id The action ID with bad args.
35 35
 	 * @return static
36 36
 	 */
37
-	public static function from_decoding_args( $action_id, $args = array() ) {
37
+	public static function from_decoding_args($action_id, $args = array()) {
38 38
 		$message = sprintf(
39 39
 			/* translators: 1: action ID 2: arguments */
40
-			__( 'Action [%1$s] has invalid arguments. It cannot be JSON decoded to an array. $args = %2$s', 'action-scheduler' ),
40
+			__('Action [%1$s] has invalid arguments. It cannot be JSON decoded to an array. $args = %2$s', 'action-scheduler'),
41 41
 			$action_id,
42
-			var_export( $args, true )
42
+			var_export($args, true)
43 43
 		);
44 44
 
45
-		return new static( $message );
45
+		return new static($message);
46 46
 	}
47 47
 }
Please login to merge, or discard this patch.
includes/libraries/action-scheduler/classes/ActionScheduler_Versions.php 2 patches
Indentation   +55 added lines, -55 removed lines patch added patch discarded remove patch
@@ -4,59 +4,59 @@
 block discarded – undo
4 4
  * Class ActionScheduler_Versions
5 5
  */
6 6
 class ActionScheduler_Versions {
7
-	/**
8
-	 * @var ActionScheduler_Versions
9
-	 */
10
-	private static $instance = NULL;
11
-
12
-	private $versions = array();
13
-
14
-	public function register( $version_string, $initialization_callback ) {
15
-		if ( isset($this->versions[$version_string]) ) {
16
-			return FALSE;
17
-		}
18
-		$this->versions[$version_string] = $initialization_callback;
19
-		return TRUE;
20
-	}
21
-
22
-	public function get_versions() {
23
-		return $this->versions;
24
-	}
25
-
26
-	public function latest_version() {
27
-		$keys = array_keys($this->versions);
28
-		if ( empty($keys) ) {
29
-			return false;
30
-		}
31
-		uasort( $keys, 'version_compare' );
32
-		return end($keys);
33
-	}
34
-
35
-	public function latest_version_callback() {
36
-		$latest = $this->latest_version();
37
-		if ( empty($latest) || !isset($this->versions[$latest]) ) {
38
-			return '__return_null';
39
-		}
40
-		return $this->versions[$latest];
41
-	}
42
-
43
-	/**
44
-	 * @return ActionScheduler_Versions
45
-	 * @codeCoverageIgnore
46
-	 */
47
-	public static function instance() {
48
-		if ( empty(self::$instance) ) {
49
-			self::$instance = new self();
50
-		}
51
-		return self::$instance;
52
-	}
53
-
54
-	/**
55
-	 * @codeCoverageIgnore
56
-	 */
57
-	public static function initialize_latest_version() {
58
-		$self = self::instance();
59
-		call_user_func($self->latest_version_callback());
60
-	}
7
+    /**
8
+     * @var ActionScheduler_Versions
9
+     */
10
+    private static $instance = NULL;
11
+
12
+    private $versions = array();
13
+
14
+    public function register( $version_string, $initialization_callback ) {
15
+        if ( isset($this->versions[$version_string]) ) {
16
+            return FALSE;
17
+        }
18
+        $this->versions[$version_string] = $initialization_callback;
19
+        return TRUE;
20
+    }
21
+
22
+    public function get_versions() {
23
+        return $this->versions;
24
+    }
25
+
26
+    public function latest_version() {
27
+        $keys = array_keys($this->versions);
28
+        if ( empty($keys) ) {
29
+            return false;
30
+        }
31
+        uasort( $keys, 'version_compare' );
32
+        return end($keys);
33
+    }
34
+
35
+    public function latest_version_callback() {
36
+        $latest = $this->latest_version();
37
+        if ( empty($latest) || !isset($this->versions[$latest]) ) {
38
+            return '__return_null';
39
+        }
40
+        return $this->versions[$latest];
41
+    }
42
+
43
+    /**
44
+     * @return ActionScheduler_Versions
45
+     * @codeCoverageIgnore
46
+     */
47
+    public static function instance() {
48
+        if ( empty(self::$instance) ) {
49
+            self::$instance = new self();
50
+        }
51
+        return self::$instance;
52
+    }
53
+
54
+    /**
55
+     * @codeCoverageIgnore
56
+     */
57
+    public static function initialize_latest_version() {
58
+        $self = self::instance();
59
+        call_user_func($self->latest_version_callback());
60
+    }
61 61
 }
62
- 
63 62
\ No newline at end of file
63
+    
64 64
\ No newline at end of file
Please login to merge, or discard this patch.
Spacing   +6 added lines, -6 removed lines patch added patch discarded remove patch
@@ -11,8 +11,8 @@  discard block
 block discarded – undo
11 11
 
12 12
 	private $versions = array();
13 13
 
14
-	public function register( $version_string, $initialization_callback ) {
15
-		if ( isset($this->versions[$version_string]) ) {
14
+	public function register($version_string, $initialization_callback) {
15
+		if (isset($this->versions[$version_string])) {
16 16
 			return FALSE;
17 17
 		}
18 18
 		$this->versions[$version_string] = $initialization_callback;
@@ -25,16 +25,16 @@  discard block
 block discarded – undo
25 25
 
26 26
 	public function latest_version() {
27 27
 		$keys = array_keys($this->versions);
28
-		if ( empty($keys) ) {
28
+		if (empty($keys)) {
29 29
 			return false;
30 30
 		}
31
-		uasort( $keys, 'version_compare' );
31
+		uasort($keys, 'version_compare');
32 32
 		return end($keys);
33 33
 	}
34 34
 
35 35
 	public function latest_version_callback() {
36 36
 		$latest = $this->latest_version();
37
-		if ( empty($latest) || !isset($this->versions[$latest]) ) {
37
+		if (empty($latest) || !isset($this->versions[$latest])) {
38 38
 			return '__return_null';
39 39
 		}
40 40
 		return $this->versions[$latest];
@@ -45,7 +45,7 @@  discard block
 block discarded – undo
45 45
 	 * @codeCoverageIgnore
46 46
 	 */
47 47
 	public static function instance() {
48
-		if ( empty(self::$instance) ) {
48
+		if (empty(self::$instance)) {
49 49
 			self::$instance = new self();
50 50
 		}
51 51
 		return self::$instance;
Please login to merge, or discard this patch.
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.