Completed
Branch FET/extract-activation-detecti... (0caf02)
by
unknown
07:41 queued 05:25
created
core/libraries/rest_api/controllers/Base.php 2 patches
Spacing   +12 added lines, -12 removed lines patch added patch discarded remove patch
@@ -96,7 +96,7 @@  discard block
 block discarded – undo
96 96
      */
97 97
     protected function setDebugInfo($key, $info)
98 98
     {
99
-        $this->debug_info[ $key ] = $info;
99
+        $this->debug_info[$key] = $info;
100 100
     }
101 101
 
102 102
 
@@ -113,11 +113,11 @@  discard block
 block discarded – undo
113 113
     {
114 114
         if (is_array($value)) {
115 115
             foreach ($value as $value_key => $value_value) {
116
-                $this->setResponseHeader($header_key . '[' . $value_key . ']', $value_value);
116
+                $this->setResponseHeader($header_key.'['.$value_key.']', $value_value);
117 117
             }
118 118
         } else {
119 119
             $prefix = $use_ee_prefix ? Base::HEADER_PREFIX_FOR_EE : Base::HEADER_PREFIX_FOR_WP;
120
-            $this->response_headers[ $prefix . $header_key ] = $value;
120
+            $this->response_headers[$prefix.$header_key] = $value;
121 121
         }
122 122
     }
123 123
 
@@ -147,7 +147,7 @@  discard block
 block discarded – undo
147 147
     protected function addEeErrorsToResponse(WP_Error $wp_error_response)
148 148
     {
149 149
         $notices_during_checkin = EE_Error::get_raw_notices();
150
-        if (! empty($notices_during_checkin['errors'])) {
150
+        if ( ! empty($notices_during_checkin['errors'])) {
151 151
             foreach ($notices_during_checkin['errors'] as $error_code => $error_message) {
152 152
                 $wp_error_response->add(
153 153
                     sanitize_key($error_code),
@@ -190,7 +190,7 @@  discard block
 block discarded – undo
190 190
                 if (is_array($debug_info)) {
191 191
                     $debug_info = wp_json_encode($debug_info);
192 192
                 }
193
-                $headers[ 'X-EE4-Debug-' . ucwords($debug_key) ] = $debug_info;
193
+                $headers['X-EE4-Debug-'.ucwords($debug_key)] = $debug_info;
194 194
             }
195 195
         }
196 196
         $headers = array_merge(
@@ -249,15 +249,15 @@  discard block
 block discarded – undo
249 249
         $headers = array();
250 250
         $notices = EE_Error::get_raw_notices();
251 251
         foreach ($notices as $notice_type => $sub_notices) {
252
-            if (! is_array($sub_notices)) {
252
+            if ( ! is_array($sub_notices)) {
253 253
                 continue;
254 254
             }
255 255
             foreach ($sub_notices as $notice_code => $sub_notice) {
256
-                $headers[ 'X-EE4-Notices-'
256
+                $headers['X-EE4-Notices-'
257 257
                           . EEH_Inflector::humanize($notice_type)
258 258
                           . '['
259 259
                           . $notice_code
260
-                          . ']' ] = strip_tags($sub_notice);
260
+                          . ']'] = strip_tags($sub_notice);
261 261
             }
262 262
         }
263 263
         return apply_filters(
@@ -286,7 +286,7 @@  discard block
 block discarded – undo
286 286
         }
287 287
         $matches = $this->parseRoute(
288 288
             $route,
289
-            '~' . EED_Core_Rest_Api::ee_api_namespace_for_regex . '~',
289
+            '~'.EED_Core_Rest_Api::ee_api_namespace_for_regex.'~',
290 290
             array('version')
291 291
         );
292 292
         if (isset($matches['version'])) {
@@ -320,14 +320,14 @@  discard block
 block discarded – undo
320 320
         if (is_array($matches)) {
321 321
             // skip the overall regex match. Who cares
322 322
             for ($i = 1; $i <= count($match_keys); $i++) {
323
-                if (! isset($matches[ $i ])) {
323
+                if ( ! isset($matches[$i])) {
324 324
                     $success = false;
325 325
                 } else {
326
-                    $indexed_matches[ $match_keys[ $i - 1 ] ] = $matches[ $i ];
326
+                    $indexed_matches[$match_keys[$i - 1]] = $matches[$i];
327 327
                 }
328 328
             }
329 329
         }
330
-        if (! $success) {
330
+        if ( ! $success) {
331 331
             throw new EE_Error(
332 332
                 __('We could not parse the URL. Please contact Event Espresso Support', 'event_espresso'),
333 333
                 'endpoint_parsing_error'
Please login to merge, or discard this patch.
Indentation   +334 added lines, -334 removed lines patch added patch discarded remove patch
@@ -22,338 +22,338 @@
 block discarded – undo
22 22
 class Base
23 23
 {
24 24
 
25
-    /**
26
-     * @deprecated use all-caps version
27
-     */
28
-    // @codingStandardsIgnoreStart
29
-    const header_prefix_for_ee = 'X-EE-';
30
-    // @codingStandardsIgnoreEnd
31
-
32
-    const HEADER_PREFIX_FOR_EE = 'X-EE-';
33
-
34
-    /**
35
-     * @deprecated use all-caps version instead
36
-     */
37
-    // @codingStandardsIgnoreStart
38
-    const header_prefix_for_wp = 'X-WP-';
39
-    // @codingStandardsIgnoreEnd
40
-
41
-    const HEADER_PREFIX_FOR_WP = 'X-WP-';
42
-
43
-    /**
44
-     * Contains debug info we'll send back in the response headers
45
-     *
46
-     * @var array
47
-     */
48
-    protected $debug_info = array();
49
-
50
-    /**
51
-     * Indicates whether or not the API is in debug mode
52
-     *
53
-     * @var boolean
54
-     */
55
-    protected $debug_mode = false;
56
-
57
-    /**
58
-     * Indicates the version that was requested
59
-     *
60
-     * @var string
61
-     */
62
-    protected $requested_version;
63
-
64
-    /**
65
-     * flat array of headers to send in the response
66
-     *
67
-     * @var array
68
-     */
69
-    protected $response_headers = array();
70
-
71
-
72
-    public function __construct()
73
-    {
74
-        $this->debug_mode = EED_Core_Rest_Api::debugMode();
75
-        // we are handling a REST request. Don't show a fancy HTML error message is any error comes up
76
-        add_filter('FHEE__EE_Error__get_error__show_normal_exceptions', '__return_true');
77
-    }
78
-
79
-
80
-    /**
81
-     * Sets the version the user requested
82
-     *
83
-     * @param string $version eg '4.8'
84
-     */
85
-    public function setRequestedVersion($version)
86
-    {
87
-        $this->requested_version = $version;
88
-    }
89
-
90
-
91
-    /**
92
-     * Sets some debug info that we'll send back in headers
93
-     *
94
-     * @param string       $key
95
-     * @param string|array $info
96
-     */
97
-    protected function setDebugInfo($key, $info)
98
-    {
99
-        $this->debug_info[ $key ] = $info;
100
-    }
101
-
102
-
103
-    /**
104
-     * Sets headers for the response
105
-     *
106
-     * @param string       $header_key    , excluding the "X-EE-" part
107
-     * @param array|string $value         if an array, multiple headers will be added, one
108
-     *                                    for each key in the array
109
-     * @param boolean      $use_ee_prefix whether to use the EE prefix on the header, or fallback to
110
-     *                                    the standard WP one
111
-     */
112
-    protected function setResponseHeader($header_key, $value, $use_ee_prefix = true)
113
-    {
114
-        if (is_array($value)) {
115
-            foreach ($value as $value_key => $value_value) {
116
-                $this->setResponseHeader($header_key . '[' . $value_key . ']', $value_value);
117
-            }
118
-        } else {
119
-            $prefix = $use_ee_prefix ? Base::HEADER_PREFIX_FOR_EE : Base::HEADER_PREFIX_FOR_WP;
120
-            $this->response_headers[ $prefix . $header_key ] = $value;
121
-        }
122
-    }
123
-
124
-
125
-    /**
126
-     * Returns a flat array of headers to be added to the response
127
-     *
128
-     * @return array
129
-     */
130
-    protected function getResponseHeaders()
131
-    {
132
-        return apply_filters(
133
-            'FHEE__EventEspresso\core\libraries\rest_api\controllers\Base___get_response_headers',
134
-            $this->response_headers,
135
-            $this,
136
-            $this->requested_version
137
-        );
138
-    }
139
-
140
-
141
-    /**
142
-     * Adds error notices from EE_Error onto the provided \WP_Error
143
-     *
144
-     * @param WP_Error $wp_error_response
145
-     * @return WP_Error
146
-     */
147
-    protected function addEeErrorsToResponse(WP_Error $wp_error_response)
148
-    {
149
-        $notices_during_checkin = EE_Error::get_raw_notices();
150
-        if (! empty($notices_during_checkin['errors'])) {
151
-            foreach ($notices_during_checkin['errors'] as $error_code => $error_message) {
152
-                $wp_error_response->add(
153
-                    sanitize_key($error_code),
154
-                    strip_tags($error_message)
155
-                );
156
-            }
157
-        }
158
-        return $wp_error_response;
159
-    }
160
-
161
-
162
-    /**
163
-     * Sends a response, but also makes sure to attach headers that
164
-     * are handy for debugging.
165
-     * Specifically, we assume folks will want to know what exactly was the DB query that got run,
166
-     * what exactly was the Models query that got run, what capabilities came into play, what fields were omitted from
167
-     * the response, others?
168
-     *
169
-     * @param array|WP_Error|Exception|RestException $response
170
-     * @return WP_REST_Response
171
-     */
172
-    public function sendResponse($response)
173
-    {
174
-        if ($response instanceof RestException) {
175
-            $response = new WP_Error($response->getStringCode(), $response->getMessage(), $response->getData());
176
-        }
177
-        if ($response instanceof Exception) {
178
-            $code = $response->getCode() ? $response->getCode() : 'error_occurred';
179
-            $response = new WP_Error($code, $response->getMessage());
180
-        }
181
-        if ($response instanceof WP_Error) {
182
-            $response = $this->addEeErrorsToResponse($response);
183
-            $rest_response = $this->createRestResponseFromWpError($response);
184
-        } else {
185
-            $rest_response = new WP_REST_Response($response, 200);
186
-        }
187
-        $headers = array();
188
-        if ($this->debug_mode && is_array($this->debug_info)) {
189
-            foreach ($this->debug_info as $debug_key => $debug_info) {
190
-                if (is_array($debug_info)) {
191
-                    $debug_info = wp_json_encode($debug_info);
192
-                }
193
-                $headers[ 'X-EE4-Debug-' . ucwords($debug_key) ] = $debug_info;
194
-            }
195
-        }
196
-        $headers = array_merge(
197
-            $headers,
198
-            $this->getResponseHeaders(),
199
-            $this->getHeadersFromEeNotices()
200
-        );
201
-        $rest_response->set_headers($headers);
202
-        return $rest_response;
203
-    }
204
-
205
-
206
-    /**
207
-     * Converts the \WP_Error into `WP_REST_Response.
208
-     * Mostly this is just a copy-and-paste from \WP_REST_Server::error_to_response
209
-     * (which is protected)
210
-     *
211
-     * @param WP_Error $wp_error
212
-     * @return WP_REST_Response
213
-     */
214
-    protected function createRestResponseFromWpError(WP_Error $wp_error)
215
-    {
216
-        $error_data = $wp_error->get_error_data();
217
-        if (is_array($error_data) && isset($error_data['status'])) {
218
-            $status = $error_data['status'];
219
-        } else {
220
-            $status = 500;
221
-        }
222
-        $errors = array();
223
-        foreach ((array) $wp_error->errors as $code => $messages) {
224
-            foreach ((array) $messages as $message) {
225
-                $errors[] = array(
226
-                    'code'    => $code,
227
-                    'message' => $message,
228
-                    'data'    => $wp_error->get_error_data($code),
229
-                );
230
-            }
231
-        }
232
-        $data = isset($errors[0]) ? $errors[0] : array();
233
-        if (count($errors) > 1) {
234
-            // Remove the primary error.
235
-            array_shift($errors);
236
-            $data['additional_errors'] = $errors;
237
-        }
238
-        return new WP_REST_Response($data, $status);
239
-    }
240
-
241
-
242
-    /**
243
-     * Array of headers derived from EE success, attention, and error messages
244
-     *
245
-     * @return array
246
-     */
247
-    protected function getHeadersFromEeNotices()
248
-    {
249
-        $headers = array();
250
-        $notices = EE_Error::get_raw_notices();
251
-        foreach ($notices as $notice_type => $sub_notices) {
252
-            if (! is_array($sub_notices)) {
253
-                continue;
254
-            }
255
-            foreach ($sub_notices as $notice_code => $sub_notice) {
256
-                $headers[ 'X-EE4-Notices-'
257
-                          . EEH_Inflector::humanize($notice_type)
258
-                          . '['
259
-                          . $notice_code
260
-                          . ']' ] = strip_tags($sub_notice);
261
-            }
262
-        }
263
-        return apply_filters(
264
-            'FHEE__EventEspresso\core\libraries\rest_api\controllers\Base___get_headers_from_ee_notices__return',
265
-            $headers,
266
-            $this->requested_version,
267
-            $notices
268
-        );
269
-    }
270
-
271
-
272
-    /**
273
-     * Finds which version of the API was requested given the route, and returns it.
274
-     * eg in a request to "mysite.com/wp-json/ee/v4.8.29/events/123" this would return
275
-     * "4.8.29".
276
-     * We should know hte requested version in this model though, so if no route is
277
-     * provided just use what we set earlier
278
-     *
279
-     * @param string $route
280
-     * @return string
281
-     */
282
-    public function getRequestedVersion($route = null)
283
-    {
284
-        if ($route === null) {
285
-            return $this->requested_version;
286
-        }
287
-        $matches = $this->parseRoute(
288
-            $route,
289
-            '~' . EED_Core_Rest_Api::ee_api_namespace_for_regex . '~',
290
-            array('version')
291
-        );
292
-        if (isset($matches['version'])) {
293
-            return $matches['version'];
294
-        } else {
295
-            return EED_Core_Rest_Api::latest_rest_api_version();
296
-        }
297
-    }
298
-
299
-
300
-    /**
301
-     * Applies the regex to the route, then creates an array using the values of
302
-     * $match_keys as keys (but ignores the full pattern match). Returns the array of matches.
303
-     * For example, if you call
304
-     * parse_route( '/ee/v4.8/events', '~\/ee\/v([^/]*)\/(.*)~', array( 'version', 'model' ) )
305
-     * it will return array( 'version' => '4.8', 'model' => 'events' )
306
-     *
307
-     * @param string $route
308
-     * @param string $regex
309
-     * @param array  $match_keys EXCLUDING matching the entire regex
310
-     * @return array where  $match_keys are the keys (the first value of $match_keys
311
-     *                           becomes the first key of the return value, etc. Eg passing in $match_keys of
312
-     *                           array( 'model', 'id' ), will, if the regex is successful, will return
313
-     *                           array( 'model' => 'foo', 'id' => 'bar' )
314
-     * @throws EE_Error if it couldn't be parsed
315
-     */
316
-    public function parseRoute($route, $regex, $match_keys)
317
-    {
318
-        $indexed_matches = array();
319
-        $success = preg_match($regex, $route, $matches);
320
-        if (is_array($matches)) {
321
-            // skip the overall regex match. Who cares
322
-            for ($i = 1; $i <= count($match_keys); $i++) {
323
-                if (! isset($matches[ $i ])) {
324
-                    $success = false;
325
-                } else {
326
-                    $indexed_matches[ $match_keys[ $i - 1 ] ] = $matches[ $i ];
327
-                }
328
-            }
329
-        }
330
-        if (! $success) {
331
-            throw new EE_Error(
332
-                __('We could not parse the URL. Please contact Event Espresso Support', 'event_espresso'),
333
-                'endpoint_parsing_error'
334
-            );
335
-        }
336
-        return $indexed_matches;
337
-    }
338
-
339
-
340
-    /**
341
-     * Gets the body's params (either from JSON or parsed body), which EXCLUDES the GET params and URL params
342
-     *
343
-     * @param \WP_REST_Request $request
344
-     * @return array
345
-     */
346
-    protected function getBodyParams(\WP_REST_Request $request)
347
-    {
348
-        // $request->get_params();
349
-        return array_merge(
350
-            (array) $request->get_body_params(),
351
-            (array) $request->get_json_params()
352
-        );
353
-        // return array_diff_key(
354
-        //    $request->get_params(),
355
-        //     $request->get_url_params(),
356
-        //     $request->get_query_params()
357
-        // );
358
-    }
25
+	/**
26
+	 * @deprecated use all-caps version
27
+	 */
28
+	// @codingStandardsIgnoreStart
29
+	const header_prefix_for_ee = 'X-EE-';
30
+	// @codingStandardsIgnoreEnd
31
+
32
+	const HEADER_PREFIX_FOR_EE = 'X-EE-';
33
+
34
+	/**
35
+	 * @deprecated use all-caps version instead
36
+	 */
37
+	// @codingStandardsIgnoreStart
38
+	const header_prefix_for_wp = 'X-WP-';
39
+	// @codingStandardsIgnoreEnd
40
+
41
+	const HEADER_PREFIX_FOR_WP = 'X-WP-';
42
+
43
+	/**
44
+	 * Contains debug info we'll send back in the response headers
45
+	 *
46
+	 * @var array
47
+	 */
48
+	protected $debug_info = array();
49
+
50
+	/**
51
+	 * Indicates whether or not the API is in debug mode
52
+	 *
53
+	 * @var boolean
54
+	 */
55
+	protected $debug_mode = false;
56
+
57
+	/**
58
+	 * Indicates the version that was requested
59
+	 *
60
+	 * @var string
61
+	 */
62
+	protected $requested_version;
63
+
64
+	/**
65
+	 * flat array of headers to send in the response
66
+	 *
67
+	 * @var array
68
+	 */
69
+	protected $response_headers = array();
70
+
71
+
72
+	public function __construct()
73
+	{
74
+		$this->debug_mode = EED_Core_Rest_Api::debugMode();
75
+		// we are handling a REST request. Don't show a fancy HTML error message is any error comes up
76
+		add_filter('FHEE__EE_Error__get_error__show_normal_exceptions', '__return_true');
77
+	}
78
+
79
+
80
+	/**
81
+	 * Sets the version the user requested
82
+	 *
83
+	 * @param string $version eg '4.8'
84
+	 */
85
+	public function setRequestedVersion($version)
86
+	{
87
+		$this->requested_version = $version;
88
+	}
89
+
90
+
91
+	/**
92
+	 * Sets some debug info that we'll send back in headers
93
+	 *
94
+	 * @param string       $key
95
+	 * @param string|array $info
96
+	 */
97
+	protected function setDebugInfo($key, $info)
98
+	{
99
+		$this->debug_info[ $key ] = $info;
100
+	}
101
+
102
+
103
+	/**
104
+	 * Sets headers for the response
105
+	 *
106
+	 * @param string       $header_key    , excluding the "X-EE-" part
107
+	 * @param array|string $value         if an array, multiple headers will be added, one
108
+	 *                                    for each key in the array
109
+	 * @param boolean      $use_ee_prefix whether to use the EE prefix on the header, or fallback to
110
+	 *                                    the standard WP one
111
+	 */
112
+	protected function setResponseHeader($header_key, $value, $use_ee_prefix = true)
113
+	{
114
+		if (is_array($value)) {
115
+			foreach ($value as $value_key => $value_value) {
116
+				$this->setResponseHeader($header_key . '[' . $value_key . ']', $value_value);
117
+			}
118
+		} else {
119
+			$prefix = $use_ee_prefix ? Base::HEADER_PREFIX_FOR_EE : Base::HEADER_PREFIX_FOR_WP;
120
+			$this->response_headers[ $prefix . $header_key ] = $value;
121
+		}
122
+	}
123
+
124
+
125
+	/**
126
+	 * Returns a flat array of headers to be added to the response
127
+	 *
128
+	 * @return array
129
+	 */
130
+	protected function getResponseHeaders()
131
+	{
132
+		return apply_filters(
133
+			'FHEE__EventEspresso\core\libraries\rest_api\controllers\Base___get_response_headers',
134
+			$this->response_headers,
135
+			$this,
136
+			$this->requested_version
137
+		);
138
+	}
139
+
140
+
141
+	/**
142
+	 * Adds error notices from EE_Error onto the provided \WP_Error
143
+	 *
144
+	 * @param WP_Error $wp_error_response
145
+	 * @return WP_Error
146
+	 */
147
+	protected function addEeErrorsToResponse(WP_Error $wp_error_response)
148
+	{
149
+		$notices_during_checkin = EE_Error::get_raw_notices();
150
+		if (! empty($notices_during_checkin['errors'])) {
151
+			foreach ($notices_during_checkin['errors'] as $error_code => $error_message) {
152
+				$wp_error_response->add(
153
+					sanitize_key($error_code),
154
+					strip_tags($error_message)
155
+				);
156
+			}
157
+		}
158
+		return $wp_error_response;
159
+	}
160
+
161
+
162
+	/**
163
+	 * Sends a response, but also makes sure to attach headers that
164
+	 * are handy for debugging.
165
+	 * Specifically, we assume folks will want to know what exactly was the DB query that got run,
166
+	 * what exactly was the Models query that got run, what capabilities came into play, what fields were omitted from
167
+	 * the response, others?
168
+	 *
169
+	 * @param array|WP_Error|Exception|RestException $response
170
+	 * @return WP_REST_Response
171
+	 */
172
+	public function sendResponse($response)
173
+	{
174
+		if ($response instanceof RestException) {
175
+			$response = new WP_Error($response->getStringCode(), $response->getMessage(), $response->getData());
176
+		}
177
+		if ($response instanceof Exception) {
178
+			$code = $response->getCode() ? $response->getCode() : 'error_occurred';
179
+			$response = new WP_Error($code, $response->getMessage());
180
+		}
181
+		if ($response instanceof WP_Error) {
182
+			$response = $this->addEeErrorsToResponse($response);
183
+			$rest_response = $this->createRestResponseFromWpError($response);
184
+		} else {
185
+			$rest_response = new WP_REST_Response($response, 200);
186
+		}
187
+		$headers = array();
188
+		if ($this->debug_mode && is_array($this->debug_info)) {
189
+			foreach ($this->debug_info as $debug_key => $debug_info) {
190
+				if (is_array($debug_info)) {
191
+					$debug_info = wp_json_encode($debug_info);
192
+				}
193
+				$headers[ 'X-EE4-Debug-' . ucwords($debug_key) ] = $debug_info;
194
+			}
195
+		}
196
+		$headers = array_merge(
197
+			$headers,
198
+			$this->getResponseHeaders(),
199
+			$this->getHeadersFromEeNotices()
200
+		);
201
+		$rest_response->set_headers($headers);
202
+		return $rest_response;
203
+	}
204
+
205
+
206
+	/**
207
+	 * Converts the \WP_Error into `WP_REST_Response.
208
+	 * Mostly this is just a copy-and-paste from \WP_REST_Server::error_to_response
209
+	 * (which is protected)
210
+	 *
211
+	 * @param WP_Error $wp_error
212
+	 * @return WP_REST_Response
213
+	 */
214
+	protected function createRestResponseFromWpError(WP_Error $wp_error)
215
+	{
216
+		$error_data = $wp_error->get_error_data();
217
+		if (is_array($error_data) && isset($error_data['status'])) {
218
+			$status = $error_data['status'];
219
+		} else {
220
+			$status = 500;
221
+		}
222
+		$errors = array();
223
+		foreach ((array) $wp_error->errors as $code => $messages) {
224
+			foreach ((array) $messages as $message) {
225
+				$errors[] = array(
226
+					'code'    => $code,
227
+					'message' => $message,
228
+					'data'    => $wp_error->get_error_data($code),
229
+				);
230
+			}
231
+		}
232
+		$data = isset($errors[0]) ? $errors[0] : array();
233
+		if (count($errors) > 1) {
234
+			// Remove the primary error.
235
+			array_shift($errors);
236
+			$data['additional_errors'] = $errors;
237
+		}
238
+		return new WP_REST_Response($data, $status);
239
+	}
240
+
241
+
242
+	/**
243
+	 * Array of headers derived from EE success, attention, and error messages
244
+	 *
245
+	 * @return array
246
+	 */
247
+	protected function getHeadersFromEeNotices()
248
+	{
249
+		$headers = array();
250
+		$notices = EE_Error::get_raw_notices();
251
+		foreach ($notices as $notice_type => $sub_notices) {
252
+			if (! is_array($sub_notices)) {
253
+				continue;
254
+			}
255
+			foreach ($sub_notices as $notice_code => $sub_notice) {
256
+				$headers[ 'X-EE4-Notices-'
257
+						  . EEH_Inflector::humanize($notice_type)
258
+						  . '['
259
+						  . $notice_code
260
+						  . ']' ] = strip_tags($sub_notice);
261
+			}
262
+		}
263
+		return apply_filters(
264
+			'FHEE__EventEspresso\core\libraries\rest_api\controllers\Base___get_headers_from_ee_notices__return',
265
+			$headers,
266
+			$this->requested_version,
267
+			$notices
268
+		);
269
+	}
270
+
271
+
272
+	/**
273
+	 * Finds which version of the API was requested given the route, and returns it.
274
+	 * eg in a request to "mysite.com/wp-json/ee/v4.8.29/events/123" this would return
275
+	 * "4.8.29".
276
+	 * We should know hte requested version in this model though, so if no route is
277
+	 * provided just use what we set earlier
278
+	 *
279
+	 * @param string $route
280
+	 * @return string
281
+	 */
282
+	public function getRequestedVersion($route = null)
283
+	{
284
+		if ($route === null) {
285
+			return $this->requested_version;
286
+		}
287
+		$matches = $this->parseRoute(
288
+			$route,
289
+			'~' . EED_Core_Rest_Api::ee_api_namespace_for_regex . '~',
290
+			array('version')
291
+		);
292
+		if (isset($matches['version'])) {
293
+			return $matches['version'];
294
+		} else {
295
+			return EED_Core_Rest_Api::latest_rest_api_version();
296
+		}
297
+	}
298
+
299
+
300
+	/**
301
+	 * Applies the regex to the route, then creates an array using the values of
302
+	 * $match_keys as keys (but ignores the full pattern match). Returns the array of matches.
303
+	 * For example, if you call
304
+	 * parse_route( '/ee/v4.8/events', '~\/ee\/v([^/]*)\/(.*)~', array( 'version', 'model' ) )
305
+	 * it will return array( 'version' => '4.8', 'model' => 'events' )
306
+	 *
307
+	 * @param string $route
308
+	 * @param string $regex
309
+	 * @param array  $match_keys EXCLUDING matching the entire regex
310
+	 * @return array where  $match_keys are the keys (the first value of $match_keys
311
+	 *                           becomes the first key of the return value, etc. Eg passing in $match_keys of
312
+	 *                           array( 'model', 'id' ), will, if the regex is successful, will return
313
+	 *                           array( 'model' => 'foo', 'id' => 'bar' )
314
+	 * @throws EE_Error if it couldn't be parsed
315
+	 */
316
+	public function parseRoute($route, $regex, $match_keys)
317
+	{
318
+		$indexed_matches = array();
319
+		$success = preg_match($regex, $route, $matches);
320
+		if (is_array($matches)) {
321
+			// skip the overall regex match. Who cares
322
+			for ($i = 1; $i <= count($match_keys); $i++) {
323
+				if (! isset($matches[ $i ])) {
324
+					$success = false;
325
+				} else {
326
+					$indexed_matches[ $match_keys[ $i - 1 ] ] = $matches[ $i ];
327
+				}
328
+			}
329
+		}
330
+		if (! $success) {
331
+			throw new EE_Error(
332
+				__('We could not parse the URL. Please contact Event Espresso Support', 'event_espresso'),
333
+				'endpoint_parsing_error'
334
+			);
335
+		}
336
+		return $indexed_matches;
337
+	}
338
+
339
+
340
+	/**
341
+	 * Gets the body's params (either from JSON or parsed body), which EXCLUDES the GET params and URL params
342
+	 *
343
+	 * @param \WP_REST_Request $request
344
+	 * @return array
345
+	 */
346
+	protected function getBodyParams(\WP_REST_Request $request)
347
+	{
348
+		// $request->get_params();
349
+		return array_merge(
350
+			(array) $request->get_body_params(),
351
+			(array) $request->get_json_params()
352
+		);
353
+		// return array_diff_key(
354
+		//    $request->get_params(),
355
+		//     $request->get_url_params(),
356
+		//     $request->get_query_params()
357
+		// );
358
+	}
359 359
 }
Please login to merge, or discard this patch.
core/libraries/rest_api/controllers/config/Read.php 1 patch
Indentation   +77 added lines, -77 removed lines patch added patch discarded remove patch
@@ -20,85 +20,85 @@
 block discarded – undo
20 20
 class Read
21 21
 {
22 22
 
23
-    /**
24
-     * @param WP_REST_Request $request
25
-     * @param string          $version
26
-     * @return EE_Config|WP_Error
27
-     */
28
-    public static function handleRequest(WP_REST_Request $request, $version)
29
-    {
30
-        $cap = EE_Restriction_Generator_Base::get_default_restrictions_cap();
31
-        if (EE_Capabilities::instance()->current_user_can($cap, 'read_over_api')) {
32
-            return EE_Config::instance();
33
-        } else {
34
-            return new WP_Error(
35
-                'cannot_read_config',
36
-                sprintf(
37
-                    __(
38
-                        'You do not have the necessary capabilities (%s) to read Event Espresso Configuration data',
39
-                        'event_espresso'
40
-                    ),
41
-                    $cap
42
-                ),
43
-                array('status' => 403)
44
-            );
45
-        }
46
-    }
23
+	/**
24
+	 * @param WP_REST_Request $request
25
+	 * @param string          $version
26
+	 * @return EE_Config|WP_Error
27
+	 */
28
+	public static function handleRequest(WP_REST_Request $request, $version)
29
+	{
30
+		$cap = EE_Restriction_Generator_Base::get_default_restrictions_cap();
31
+		if (EE_Capabilities::instance()->current_user_can($cap, 'read_over_api')) {
32
+			return EE_Config::instance();
33
+		} else {
34
+			return new WP_Error(
35
+				'cannot_read_config',
36
+				sprintf(
37
+					__(
38
+						'You do not have the necessary capabilities (%s) to read Event Espresso Configuration data',
39
+						'event_espresso'
40
+					),
41
+					$cap
42
+				),
43
+				array('status' => 403)
44
+			);
45
+		}
46
+	}
47 47
 
48 48
 
49
-    /**
50
-     * Handles the request for public site info
51
-     *
52
-     * @global                 $wp_json_basic_auth_success       boolean set by the basic auth plugin, indicates if the
53
-     *                                                           current user could be authenticated using basic auth
54
-     *                                                           data
55
-     * @global                 $wp_json_basic_auth_received_data boolean set by the basic auth plugin, indicates if
56
-     *                                                           basic auth data was somehow received
57
-     * @param WP_REST_Request  $request
58
-     * @param string           $version
59
-     * @return array|WP_Error
60
-     */
61
-    public static function handleRequestSiteInfo(WP_REST_Request $request, $version)
62
-    {
63
-        global $wp_json_basic_auth_success, $wp_json_basic_auth_received_data;
64
-        $insecure_usage_of_basic_auth = apply_filters(
65
-        // @codingStandardsIgnoreStart
66
-            'EventEspresso__core__libraries__rest_api__controllers__config__handle_request_site_info__insecure_usage_of_basic_auth',
67
-            // @codingStandardsIgnoreEnd
68
-            $wp_json_basic_auth_success && ! is_ssl(),
69
-            $request
70
-        );
71
-        if ($insecure_usage_of_basic_auth) {
72
-            $warning = sprintf(
73
-                esc_html__(
74
-                // @codingStandardsIgnoreStart
75
-                    'Notice: We strongly recommend installing an SSL Certificate on your website to keep your data secure. %1$sPlease see our recommendations.%2$s',
76
-                    // @codingStandardsIgnoreEnd
77
-                    'event_espresso'
78
-                ),
79
-                '<a href="https://eventespresso.com/wiki/rest-api-security-recommendations/">',
80
-                '</a>'
81
-            );
82
-        } else {
83
-            $warning = '';
84
-        }
85
-        return apply_filters(
86
-            'FHEE__EventEspresso_core_libraries_rest_api_controllers_config__handleRequestSiteInfo__return_val',
87
-            array(
88
-                'default_timezone' => array(
89
-                    'pretty' => EEH_DTT_Helper::get_timezone_string_for_display(),
90
-                    'string' => get_option('timezone_string'),
91
-                    'offset' => EEH_DTT_Helper::get_site_timezone_gmt_offset(),
92
-                ),
93
-                'default_currency' => EE_Config::instance()->currency,
94
-                'authentication'   => array(
95
-                    'received_basic_auth_data'     => (bool) $wp_json_basic_auth_received_data,
96
-                    'insecure_usage_of_basic_auth' => (bool) $insecure_usage_of_basic_auth,
97
-                    'warning'                      => $warning,
98
-                ),
99
-            )
100
-        );
101
-    }
49
+	/**
50
+	 * Handles the request for public site info
51
+	 *
52
+	 * @global                 $wp_json_basic_auth_success       boolean set by the basic auth plugin, indicates if the
53
+	 *                                                           current user could be authenticated using basic auth
54
+	 *                                                           data
55
+	 * @global                 $wp_json_basic_auth_received_data boolean set by the basic auth plugin, indicates if
56
+	 *                                                           basic auth data was somehow received
57
+	 * @param WP_REST_Request  $request
58
+	 * @param string           $version
59
+	 * @return array|WP_Error
60
+	 */
61
+	public static function handleRequestSiteInfo(WP_REST_Request $request, $version)
62
+	{
63
+		global $wp_json_basic_auth_success, $wp_json_basic_auth_received_data;
64
+		$insecure_usage_of_basic_auth = apply_filters(
65
+		// @codingStandardsIgnoreStart
66
+			'EventEspresso__core__libraries__rest_api__controllers__config__handle_request_site_info__insecure_usage_of_basic_auth',
67
+			// @codingStandardsIgnoreEnd
68
+			$wp_json_basic_auth_success && ! is_ssl(),
69
+			$request
70
+		);
71
+		if ($insecure_usage_of_basic_auth) {
72
+			$warning = sprintf(
73
+				esc_html__(
74
+				// @codingStandardsIgnoreStart
75
+					'Notice: We strongly recommend installing an SSL Certificate on your website to keep your data secure. %1$sPlease see our recommendations.%2$s',
76
+					// @codingStandardsIgnoreEnd
77
+					'event_espresso'
78
+				),
79
+				'<a href="https://eventespresso.com/wiki/rest-api-security-recommendations/">',
80
+				'</a>'
81
+			);
82
+		} else {
83
+			$warning = '';
84
+		}
85
+		return apply_filters(
86
+			'FHEE__EventEspresso_core_libraries_rest_api_controllers_config__handleRequestSiteInfo__return_val',
87
+			array(
88
+				'default_timezone' => array(
89
+					'pretty' => EEH_DTT_Helper::get_timezone_string_for_display(),
90
+					'string' => get_option('timezone_string'),
91
+					'offset' => EEH_DTT_Helper::get_site_timezone_gmt_offset(),
92
+				),
93
+				'default_currency' => EE_Config::instance()->currency,
94
+				'authentication'   => array(
95
+					'received_basic_auth_data'     => (bool) $wp_json_basic_auth_received_data,
96
+					'insecure_usage_of_basic_auth' => (bool) $insecure_usage_of_basic_auth,
97
+					'warning'                      => $warning,
98
+				),
99
+			)
100
+		);
101
+	}
102 102
 }
103 103
 
104 104
 // End of file Read.php
Please login to merge, or discard this patch.
core/libraries/rest_api/controllers/model/Meta.php 2 patches
Indentation   +109 added lines, -109 removed lines patch added patch discarded remove patch
@@ -23,122 +23,122 @@
 block discarded – undo
23 23
 {
24 24
 
25 25
 
26
-    /**
27
-     * @param \WP_REST_Request $request
28
-     * @param string           $version
29
-     * @return array|\WP_REST_Response
30
-     */
31
-    public static function handleRequestModelsMeta(\WP_REST_Request $request, $version)
32
-    {
33
-        $controller = new Meta();
34
-        try {
35
-            $controller->setRequestedVersion($version);
36
-            return $controller->sendResponse($controller->getModelsMetadataEntity());
37
-        } catch (Exception $e) {
38
-            return $controller->sendResponse($e);
39
-        }
40
-    }
26
+	/**
27
+	 * @param \WP_REST_Request $request
28
+	 * @param string           $version
29
+	 * @return array|\WP_REST_Response
30
+	 */
31
+	public static function handleRequestModelsMeta(\WP_REST_Request $request, $version)
32
+	{
33
+		$controller = new Meta();
34
+		try {
35
+			$controller->setRequestedVersion($version);
36
+			return $controller->sendResponse($controller->getModelsMetadataEntity());
37
+		} catch (Exception $e) {
38
+			return $controller->sendResponse($e);
39
+		}
40
+	}
41 41
 
42 42
 
43
-    /*
43
+	/*
44 44
      * Gets the model metadata resource entity
45 45
      * @return array for JSON response, describing all the models available in teh requested version
46 46
      */
47
-    protected function getModelsMetadataEntity()
48
-    {
49
-        $response = array();
50
-        foreach ($this->getModelVersionInfo()->modelsForRequestedVersion() as $model_name => $model_classname) {
51
-            $model = $this->getModelVersionInfo()->loadModel($model_name);
52
-            $fields_json = array();
53
-            foreach ($this->getModelVersionInfo()->fieldsOnModelInThisVersion($model) as $field_name => $field_obj) {
54
-                if ($this->getModelVersionInfo()->fieldIsIgnored($field_obj)) {
55
-                    continue;
56
-                }
57
-                if ($field_obj instanceof EE_Boolean_Field) {
58
-                    $datatype = 'Boolean';
59
-                } elseif ($field_obj->get_wpdb_data_type() == '%d') {
60
-                    $datatype = 'Number';
61
-                } elseif ($field_name instanceof EE_Serialized_Text_Field) {
62
-                    $datatype = 'Object';
63
-                } else {
64
-                    $datatype = 'String';
65
-                }
66
-                $default_value = ModelDataTranslator::prepareFieldValueForJson(
67
-                    $field_obj,
68
-                    $field_obj->get_default_value(),
69
-                    $this->getModelVersionInfo()->requestedVersion()
70
-                );
71
-                $field_json = array(
72
-                    'name'                => $field_name,
73
-                    'nicename'            => wp_specialchars_decode($field_obj->get_nicename(), ENT_QUOTES),
74
-                    'has_rendered_format' => $this->getModelVersionInfo()->fieldHasRenderedFormat($field_obj),
75
-                    'has_pretty_format'   => $this->getModelVersionInfo()->fieldHasPrettyFormat($field_obj),
76
-                    'type'                => str_replace('EE_', '', get_class($field_obj)),
77
-                    'datatype'            => $datatype,
78
-                    'nullable'            => $field_obj->is_nullable(),
79
-                    'default'             => $default_value,
80
-                    'table_alias'         => $field_obj->get_table_alias(),
81
-                    'table_column'        => $field_obj->get_table_column(),
82
-                );
83
-                $fields_json[ $field_json['name'] ] = $field_json;
84
-            }
85
-            $fields_json = array_merge(
86
-                $fields_json,
87
-                $this->getModelVersionInfo()->extraResourcePropertiesForModel($model)
88
-            );
89
-            $response[ $model_name ]['fields'] = apply_filters(
90
-                'FHEE__Meta__handle_request_models_meta__fields',
91
-                $fields_json,
92
-                $model
93
-            );
94
-            $relations_json = array();
95
-            foreach ($model->relation_settings() as $relation_name => $relation_obj) {
96
-                $relation_json = array(
97
-                    'name'   => $relation_name,
98
-                    'type'   => str_replace('EE_', '', get_class($relation_obj)),
99
-                    'single' => $relation_obj instanceof \EE_Belongs_To_Relation ? true : false,
100
-                );
101
-                $relations_json[ $relation_name ] = $relation_json;
102
-            }
103
-            $response[ $model_name ]['relations'] = apply_filters(
104
-                'FHEE__Meta__handle_request_models_meta__relations',
105
-                $relations_json,
106
-                $model
107
-            );
108
-        }
109
-        return $response;
110
-    }
47
+	protected function getModelsMetadataEntity()
48
+	{
49
+		$response = array();
50
+		foreach ($this->getModelVersionInfo()->modelsForRequestedVersion() as $model_name => $model_classname) {
51
+			$model = $this->getModelVersionInfo()->loadModel($model_name);
52
+			$fields_json = array();
53
+			foreach ($this->getModelVersionInfo()->fieldsOnModelInThisVersion($model) as $field_name => $field_obj) {
54
+				if ($this->getModelVersionInfo()->fieldIsIgnored($field_obj)) {
55
+					continue;
56
+				}
57
+				if ($field_obj instanceof EE_Boolean_Field) {
58
+					$datatype = 'Boolean';
59
+				} elseif ($field_obj->get_wpdb_data_type() == '%d') {
60
+					$datatype = 'Number';
61
+				} elseif ($field_name instanceof EE_Serialized_Text_Field) {
62
+					$datatype = 'Object';
63
+				} else {
64
+					$datatype = 'String';
65
+				}
66
+				$default_value = ModelDataTranslator::prepareFieldValueForJson(
67
+					$field_obj,
68
+					$field_obj->get_default_value(),
69
+					$this->getModelVersionInfo()->requestedVersion()
70
+				);
71
+				$field_json = array(
72
+					'name'                => $field_name,
73
+					'nicename'            => wp_specialchars_decode($field_obj->get_nicename(), ENT_QUOTES),
74
+					'has_rendered_format' => $this->getModelVersionInfo()->fieldHasRenderedFormat($field_obj),
75
+					'has_pretty_format'   => $this->getModelVersionInfo()->fieldHasPrettyFormat($field_obj),
76
+					'type'                => str_replace('EE_', '', get_class($field_obj)),
77
+					'datatype'            => $datatype,
78
+					'nullable'            => $field_obj->is_nullable(),
79
+					'default'             => $default_value,
80
+					'table_alias'         => $field_obj->get_table_alias(),
81
+					'table_column'        => $field_obj->get_table_column(),
82
+				);
83
+				$fields_json[ $field_json['name'] ] = $field_json;
84
+			}
85
+			$fields_json = array_merge(
86
+				$fields_json,
87
+				$this->getModelVersionInfo()->extraResourcePropertiesForModel($model)
88
+			);
89
+			$response[ $model_name ]['fields'] = apply_filters(
90
+				'FHEE__Meta__handle_request_models_meta__fields',
91
+				$fields_json,
92
+				$model
93
+			);
94
+			$relations_json = array();
95
+			foreach ($model->relation_settings() as $relation_name => $relation_obj) {
96
+				$relation_json = array(
97
+					'name'   => $relation_name,
98
+					'type'   => str_replace('EE_', '', get_class($relation_obj)),
99
+					'single' => $relation_obj instanceof \EE_Belongs_To_Relation ? true : false,
100
+				);
101
+				$relations_json[ $relation_name ] = $relation_json;
102
+			}
103
+			$response[ $model_name ]['relations'] = apply_filters(
104
+				'FHEE__Meta__handle_request_models_meta__relations',
105
+				$relations_json,
106
+				$model
107
+			);
108
+		}
109
+		return $response;
110
+	}
111 111
 
112 112
 
113
-    /**
114
-     * Adds EE metadata to the index
115
-     *
116
-     * @param \WP_REST_Response $rest_response_obj
117
-     * @return \WP_REST_Response
118
-     */
119
-    public static function filterEeMetadataIntoIndex(\WP_REST_Response $rest_response_obj)
120
-    {
121
-        $response_data = $rest_response_obj->get_data();
122
-        $addons = array();
123
-        foreach (EE_Registry::instance()->addons as $addon) {
124
-            $addon_json = array(
125
-                'name'    => $addon->name(),
126
-                'version' => $addon->version(),
127
-            );
128
-            $addons[ $addon_json['name'] ] = $addon_json;
129
-        }
130
-        $response_data['ee'] = array(
131
-            'version'              => EEM_System_Status::instance()->get_ee_version(),
132
-            // @codingStandardsIgnoreStart
133
-            'documentation_url'    => 'https://github.com/eventespresso/event-espresso-core/tree/master/docs/C--REST-API',
134
-            // @codingStandardsIgnoreEnd
135
-            'addons'               => $addons,
136
-            'maintenance_mode'     => EE_Maintenance_Mode::instance()->real_level(),
137
-            'served_core_versions' => array_keys(EED_Core_Rest_Api::versions_served()),
138
-        );
139
-        $rest_response_obj->set_data($response_data);
140
-        return $rest_response_obj;
141
-    }
113
+	/**
114
+	 * Adds EE metadata to the index
115
+	 *
116
+	 * @param \WP_REST_Response $rest_response_obj
117
+	 * @return \WP_REST_Response
118
+	 */
119
+	public static function filterEeMetadataIntoIndex(\WP_REST_Response $rest_response_obj)
120
+	{
121
+		$response_data = $rest_response_obj->get_data();
122
+		$addons = array();
123
+		foreach (EE_Registry::instance()->addons as $addon) {
124
+			$addon_json = array(
125
+				'name'    => $addon->name(),
126
+				'version' => $addon->version(),
127
+			);
128
+			$addons[ $addon_json['name'] ] = $addon_json;
129
+		}
130
+		$response_data['ee'] = array(
131
+			'version'              => EEM_System_Status::instance()->get_ee_version(),
132
+			// @codingStandardsIgnoreStart
133
+			'documentation_url'    => 'https://github.com/eventespresso/event-espresso-core/tree/master/docs/C--REST-API',
134
+			// @codingStandardsIgnoreEnd
135
+			'addons'               => $addons,
136
+			'maintenance_mode'     => EE_Maintenance_Mode::instance()->real_level(),
137
+			'served_core_versions' => array_keys(EED_Core_Rest_Api::versions_served()),
138
+		);
139
+		$rest_response_obj->set_data($response_data);
140
+		return $rest_response_obj;
141
+	}
142 142
 }
143 143
 
144 144
 
Please login to merge, or discard this patch.
Spacing   +5 added lines, -5 removed lines patch added patch discarded remove patch
@@ -80,13 +80,13 @@  discard block
 block discarded – undo
80 80
                     'table_alias'         => $field_obj->get_table_alias(),
81 81
                     'table_column'        => $field_obj->get_table_column(),
82 82
                 );
83
-                $fields_json[ $field_json['name'] ] = $field_json;
83
+                $fields_json[$field_json['name']] = $field_json;
84 84
             }
85 85
             $fields_json = array_merge(
86 86
                 $fields_json,
87 87
                 $this->getModelVersionInfo()->extraResourcePropertiesForModel($model)
88 88
             );
89
-            $response[ $model_name ]['fields'] = apply_filters(
89
+            $response[$model_name]['fields'] = apply_filters(
90 90
                 'FHEE__Meta__handle_request_models_meta__fields',
91 91
                 $fields_json,
92 92
                 $model
@@ -98,9 +98,9 @@  discard block
 block discarded – undo
98 98
                     'type'   => str_replace('EE_', '', get_class($relation_obj)),
99 99
                     'single' => $relation_obj instanceof \EE_Belongs_To_Relation ? true : false,
100 100
                 );
101
-                $relations_json[ $relation_name ] = $relation_json;
101
+                $relations_json[$relation_name] = $relation_json;
102 102
             }
103
-            $response[ $model_name ]['relations'] = apply_filters(
103
+            $response[$model_name]['relations'] = apply_filters(
104 104
                 'FHEE__Meta__handle_request_models_meta__relations',
105 105
                 $relations_json,
106 106
                 $model
@@ -125,7 +125,7 @@  discard block
 block discarded – undo
125 125
                 'name'    => $addon->name(),
126 126
                 'version' => $addon->version(),
127 127
             );
128
-            $addons[ $addon_json['name'] ] = $addon_json;
128
+            $addons[$addon_json['name']] = $addon_json;
129 129
         }
130 130
         $response_data['ee'] = array(
131 131
             'version'              => EEM_System_Status::instance()->get_ee_version(),
Please login to merge, or discard this patch.
core/libraries/rest_api/changes/ChangesInBase.php 2 patches
Indentation   +64 added lines, -64 removed lines patch added patch discarded remove patch
@@ -35,74 +35,74 @@
 block discarded – undo
35 35
 abstract class ChangesInBase
36 36
 {
37 37
 
38
-    /**
39
-     * The version that these changes happened
40
-     *
41
-     * @var string
42
-     */
43
-    protected $version = null;
38
+	/**
39
+	 * The version that these changes happened
40
+	 *
41
+	 * @var string
42
+	 */
43
+	protected $version = null;
44 44
 
45 45
 
46
-    /**
47
-     * Called when an EE4 REST API request is made to an earlier version than
48
-     * what is indicated in this class' name.
49
-     * Uses WordPress' add_filter and add_action to modify the EE4 REST API's response
50
-     * so that regardless of what version of EE4 core is running, API clients
51
-     * will have a consistent response
52
-     *
53
-     * @return void
54
-     */
55
-    abstract public function setHooks();
46
+	/**
47
+	 * Called when an EE4 REST API request is made to an earlier version than
48
+	 * what is indicated in this class' name.
49
+	 * Uses WordPress' add_filter and add_action to modify the EE4 REST API's response
50
+	 * so that regardless of what version of EE4 core is running, API clients
51
+	 * will have a consistent response
52
+	 *
53
+	 * @return void
54
+	 */
55
+	abstract public function setHooks();
56 56
 
57 57
 
58
-    /**
59
-     * Returns whether or not this class' name indicates its hooks should
60
-     * apply when a request comes in for $requested_version. A class can use
61
-     * other conditions when determining whether to perform their callbacks or not,
62
-     * but this will typically be enough
63
-     *
64
-     * @param string $requested_version eg "4.8.33"
65
-     * @return boolean true: this class' name indicates its filters and actions
66
-     *                                  should take effect. False: this class' name indicates it shouldn't do anything
67
-     */
68
-    public function appliesToVersion($requested_version)
69
-    {
70
-        if ($this->version() > $requested_version) {
71
-            return true;
72
-        }
73
-        return false;
74
-    }
58
+	/**
59
+	 * Returns whether or not this class' name indicates its hooks should
60
+	 * apply when a request comes in for $requested_version. A class can use
61
+	 * other conditions when determining whether to perform their callbacks or not,
62
+	 * but this will typically be enough
63
+	 *
64
+	 * @param string $requested_version eg "4.8.33"
65
+	 * @return boolean true: this class' name indicates its filters and actions
66
+	 *                                  should take effect. False: this class' name indicates it shouldn't do anything
67
+	 */
68
+	public function appliesToVersion($requested_version)
69
+	{
70
+		if ($this->version() > $requested_version) {
71
+			return true;
72
+		}
73
+		return false;
74
+	}
75 75
 
76 76
 
77
-    /**
78
-     * Gets the EE core version when this changes were made to the rest api.
79
-     * Any requests to earlier versions should have modifications made to them
80
-     * by the callbacks of this class.
81
-     *
82
-     * @return string eg "4.8.33"
83
-     * @throws EE_Error
84
-     */
85
-    public function version()
86
-    {
87
-        if ($this->version === null) {
88
-            $matches = array();
89
-            $regex = '~ChangesIn(\d)(\d\d)(\d\d)$~';
90
-            $success = preg_match(
91
-                $regex,
92
-                get_class($this),
93
-                $matches
94
-            );
95
-            if (! $success) {
96
-                throw new EE_Error(
97
-                    sprintf(
98
-                        __('The class %1$s was misnamed. It name should match the regex "%2$s"', 'event_espresso'),
99
-                        get_class($this),
100
-                        $regex
101
-                    )
102
-                );
103
-            }
104
-            $this->version = (int) $matches[1] . '.' . (int) $matches[2] . '.' . (int) $matches[3];
105
-        }
106
-        return $this->version;
107
-    }
77
+	/**
78
+	 * Gets the EE core version when this changes were made to the rest api.
79
+	 * Any requests to earlier versions should have modifications made to them
80
+	 * by the callbacks of this class.
81
+	 *
82
+	 * @return string eg "4.8.33"
83
+	 * @throws EE_Error
84
+	 */
85
+	public function version()
86
+	{
87
+		if ($this->version === null) {
88
+			$matches = array();
89
+			$regex = '~ChangesIn(\d)(\d\d)(\d\d)$~';
90
+			$success = preg_match(
91
+				$regex,
92
+				get_class($this),
93
+				$matches
94
+			);
95
+			if (! $success) {
96
+				throw new EE_Error(
97
+					sprintf(
98
+						__('The class %1$s was misnamed. It name should match the regex "%2$s"', 'event_espresso'),
99
+						get_class($this),
100
+						$regex
101
+					)
102
+				);
103
+			}
104
+			$this->version = (int) $matches[1] . '.' . (int) $matches[2] . '.' . (int) $matches[3];
105
+		}
106
+		return $this->version;
107
+	}
108 108
 }
Please login to merge, or discard this patch.
Spacing   +2 added lines, -2 removed lines patch added patch discarded remove patch
@@ -92,7 +92,7 @@  discard block
 block discarded – undo
92 92
                 get_class($this),
93 93
                 $matches
94 94
             );
95
-            if (! $success) {
95
+            if ( ! $success) {
96 96
                 throw new EE_Error(
97 97
                     sprintf(
98 98
                         __('The class %1$s was misnamed. It name should match the regex "%2$s"', 'event_espresso'),
@@ -101,7 +101,7 @@  discard block
 block discarded – undo
101 101
                     )
102 102
                 );
103 103
             }
104
-            $this->version = (int) $matches[1] . '.' . (int) $matches[2] . '.' . (int) $matches[3];
104
+            $this->version = (int) $matches[1].'.'.(int) $matches[2].'.'.(int) $matches[3];
105 105
         }
106 106
         return $this->version;
107 107
     }
Please login to merge, or discard this patch.
core/libraries/rest_api/changes/ChangesIn40836.php 2 patches
Indentation   +160 added lines, -160 removed lines patch added patch discarded remove patch
@@ -14,174 +14,174 @@
 block discarded – undo
14 14
 class ChangesIn40836 extends ChangesInBase
15 15
 {
16 16
 
17
-    /**
18
-     * Adds hooks so requests to 4.8.29 don't have the checkin endpoints
19
-     */
20
-    public function setHooks()
21
-    {
22
-        // set a hook to remove the "calculate" query param
23
-        add_filter(
24
-            'FHEE__EED_Core_Rest_Api___get_response_selection_query_params',
25
-            array($this, 'removeCalculateQueryParam'),
26
-            10,
27
-            3
28
-        );
29
-        // don't add the _calculated_fields either
30
-        add_filter(
31
-            'FHEE__Read__create_entity_from_wpdb_results__entity_before_inaccessible_field_removal',
32
-            array($this, 'removeCalculatedFieldsFromResponse'),
33
-            10,
34
-            5
35
-        );
36
-        // and also don't add the count headers
37
-        add_filter(
38
-            'FHEE__EventEspresso\core\libraries\rest_api\controllers\Base___get_response_headers',
39
-            array($this, 'removeHeadersNewInThisVersion'),
40
-            10,
41
-            3
42
-        );
43
-        // remove the old featured_image part of the response...
44
-        add_filter(
45
-            'FHEE__Read__create_entity_from_wpdb_results__entity_before_including_requested_models',
46
-            array($this, 'addOldFeaturedImagePartOfCptEntities'),
47
-            10,
48
-            5
49
-        );
50
-        // assuming ticket 9425's change gets pushed with 9406, we don't need to
51
-        // remove it from the calculated fields on older requests (because this will
52
-        // be the first version with calculated fields)
53
-        // before this, infinity was -1, now it's null
54
-        add_filter(
55
-            'FHEE__EventEspresso\core\libraries\rest_api\Model_Data_Translator__prepare_field_for_rest_api',
56
-            array($this, 'useNegativeOneForInfinityBeforeThisVersion'),
57
-            10,
58
-            4
59
-        );
60
-    }
17
+	/**
18
+	 * Adds hooks so requests to 4.8.29 don't have the checkin endpoints
19
+	 */
20
+	public function setHooks()
21
+	{
22
+		// set a hook to remove the "calculate" query param
23
+		add_filter(
24
+			'FHEE__EED_Core_Rest_Api___get_response_selection_query_params',
25
+			array($this, 'removeCalculateQueryParam'),
26
+			10,
27
+			3
28
+		);
29
+		// don't add the _calculated_fields either
30
+		add_filter(
31
+			'FHEE__Read__create_entity_from_wpdb_results__entity_before_inaccessible_field_removal',
32
+			array($this, 'removeCalculatedFieldsFromResponse'),
33
+			10,
34
+			5
35
+		);
36
+		// and also don't add the count headers
37
+		add_filter(
38
+			'FHEE__EventEspresso\core\libraries\rest_api\controllers\Base___get_response_headers',
39
+			array($this, 'removeHeadersNewInThisVersion'),
40
+			10,
41
+			3
42
+		);
43
+		// remove the old featured_image part of the response...
44
+		add_filter(
45
+			'FHEE__Read__create_entity_from_wpdb_results__entity_before_including_requested_models',
46
+			array($this, 'addOldFeaturedImagePartOfCptEntities'),
47
+			10,
48
+			5
49
+		);
50
+		// assuming ticket 9425's change gets pushed with 9406, we don't need to
51
+		// remove it from the calculated fields on older requests (because this will
52
+		// be the first version with calculated fields)
53
+		// before this, infinity was -1, now it's null
54
+		add_filter(
55
+			'FHEE__EventEspresso\core\libraries\rest_api\Model_Data_Translator__prepare_field_for_rest_api',
56
+			array($this, 'useNegativeOneForInfinityBeforeThisVersion'),
57
+			10,
58
+			4
59
+		);
60
+	}
61 61
 
62 62
 
63
-    /**
64
-     * Don't show "calculate" as an query param option in the index
65
-     *
66
-     * @param array    $query_params
67
-     * @param EEM_Base $model
68
-     * @param string   $version
69
-     * @return array
70
-     */
71
-    public function removeCalculateQueryParam($query_params, EEM_Base $model, $version)
72
-    {
73
-        if ($this->appliesToVersion($version)) {
74
-            unset($query_params['calculate']);
75
-        }
76
-        return $query_params;
77
-    }
63
+	/**
64
+	 * Don't show "calculate" as an query param option in the index
65
+	 *
66
+	 * @param array    $query_params
67
+	 * @param EEM_Base $model
68
+	 * @param string   $version
69
+	 * @return array
70
+	 */
71
+	public function removeCalculateQueryParam($query_params, EEM_Base $model, $version)
72
+	{
73
+		if ($this->appliesToVersion($version)) {
74
+			unset($query_params['calculate']);
75
+		}
76
+		return $query_params;
77
+	}
78 78
 
79 79
 
80
-    /**
81
-     * Removes the "_calculate_fields" part of entity responses before 4.8.36
82
-     *
83
-     * @param array           $entity_response_array
84
-     * @param EEM_Base        $model
85
-     * @param string          $request_context
86
-     * @param WP_REST_Request $request
87
-     * @param Read            $controller
88
-     * @return array
89
-     */
90
-    public function removeCalculatedFieldsFromResponse(
91
-        $entity_response_array,
92
-        EEM_Base $model,
93
-        $request_context,
94
-        WP_REST_Request $request,
95
-        Read $controller
96
-    ) {
97
-        if ($this->appliesToVersion($controller->getModelVersionInfo()->requestedVersion())) {
98
-            unset($entity_response_array['_calculated_fields']);
99
-        }
100
-        return $entity_response_array;
101
-    }
80
+	/**
81
+	 * Removes the "_calculate_fields" part of entity responses before 4.8.36
82
+	 *
83
+	 * @param array           $entity_response_array
84
+	 * @param EEM_Base        $model
85
+	 * @param string          $request_context
86
+	 * @param WP_REST_Request $request
87
+	 * @param Read            $controller
88
+	 * @return array
89
+	 */
90
+	public function removeCalculatedFieldsFromResponse(
91
+		$entity_response_array,
92
+		EEM_Base $model,
93
+		$request_context,
94
+		WP_REST_Request $request,
95
+		Read $controller
96
+	) {
97
+		if ($this->appliesToVersion($controller->getModelVersionInfo()->requestedVersion())) {
98
+			unset($entity_response_array['_calculated_fields']);
99
+		}
100
+		return $entity_response_array;
101
+	}
102 102
 
103 103
 
104
-    /**
105
-     * Removes the new headers for requests before 4.8.36
106
-     *
107
-     * @param array           $headers
108
-     * @param Controller_Base $controller
109
-     * @param string          $version
110
-     * @return array
111
-     */
112
-    public function removeHeadersNewInThisVersion(
113
-        $headers,
114
-        Controller_Base $controller,
115
-        $version
116
-    ) {
117
-        if ($this->appliesToVersion($version)) {
118
-            $headers = array_diff_key(
119
-                $headers,
120
-                array_flip(
121
-                    array(
122
-                        Base::HEADER_PREFIX_FOR_WP . 'Total',
123
-                        Base::HEADER_PREFIX_FOR_WP . 'TotalPages',
124
-                        Base::HEADER_PREFIX_FOR_WP . 'PageSize',
125
-                    )
126
-                )
127
-            );
128
-        }
129
-        return $headers;
130
-    }
104
+	/**
105
+	 * Removes the new headers for requests before 4.8.36
106
+	 *
107
+	 * @param array           $headers
108
+	 * @param Controller_Base $controller
109
+	 * @param string          $version
110
+	 * @return array
111
+	 */
112
+	public function removeHeadersNewInThisVersion(
113
+		$headers,
114
+		Controller_Base $controller,
115
+		$version
116
+	) {
117
+		if ($this->appliesToVersion($version)) {
118
+			$headers = array_diff_key(
119
+				$headers,
120
+				array_flip(
121
+					array(
122
+						Base::HEADER_PREFIX_FOR_WP . 'Total',
123
+						Base::HEADER_PREFIX_FOR_WP . 'TotalPages',
124
+						Base::HEADER_PREFIX_FOR_WP . 'PageSize',
125
+					)
126
+				)
127
+			);
128
+		}
129
+		return $headers;
130
+	}
131 131
 
132 132
 
133
-    /**
134
-     * Puts the 'featured_image_url' back in for responses before 4.8.36.
135
-     *
136
-     * @param array           $entity_response_array
137
-     * @param EEM_Base        $model
138
-     * @param string          $request_context
139
-     * @param WP_REST_Request $request
140
-     * @param Read            $controller
141
-     * @return array
142
-     */
143
-    public function addOldFeaturedImagePartOfCptEntities(
144
-        $entity_response_array,
145
-        EEM_Base $model,
146
-        $request_context,
147
-        WP_REST_Request $request,
148
-        Read $controller
149
-    ) {
150
-        if ($this->appliesToVersion($controller->getModelVersionInfo()->requestedVersion())
151
-            && $model instanceof \EEM_CPT_Base
152
-        ) {
153
-            $attachment = wp_get_attachment_image_src(
154
-                get_post_thumbnail_id($entity_response_array[ $model->primary_key_name() ]),
155
-                'full'
156
-            );
157
-            $entity_response_array['featured_image_url'] = ! empty($attachment) ? $attachment[0] : null;
158
-        }
159
-        return $entity_response_array;
160
-    }
133
+	/**
134
+	 * Puts the 'featured_image_url' back in for responses before 4.8.36.
135
+	 *
136
+	 * @param array           $entity_response_array
137
+	 * @param EEM_Base        $model
138
+	 * @param string          $request_context
139
+	 * @param WP_REST_Request $request
140
+	 * @param Read            $controller
141
+	 * @return array
142
+	 */
143
+	public function addOldFeaturedImagePartOfCptEntities(
144
+		$entity_response_array,
145
+		EEM_Base $model,
146
+		$request_context,
147
+		WP_REST_Request $request,
148
+		Read $controller
149
+	) {
150
+		if ($this->appliesToVersion($controller->getModelVersionInfo()->requestedVersion())
151
+			&& $model instanceof \EEM_CPT_Base
152
+		) {
153
+			$attachment = wp_get_attachment_image_src(
154
+				get_post_thumbnail_id($entity_response_array[ $model->primary_key_name() ]),
155
+				'full'
156
+			);
157
+			$entity_response_array['featured_image_url'] = ! empty($attachment) ? $attachment[0] : null;
158
+		}
159
+		return $entity_response_array;
160
+	}
161 161
 
162 162
 
163
-    /**
164
-     * If the value was infinity, we now use null in our JSON responses,
165
-     * but before this version we used -1.
166
-     *
167
-     * @param mixed                $new_value
168
-     * @param \EE_Model_Field_Base $field_obj
169
-     * @param mixed                $original_value
170
-     * @param string               $requested_value
171
-     * @return mixed
172
-     */
173
-    public function useNegativeOneForInfinityBeforeThisVersion(
174
-        $new_value,
175
-        $field_obj,
176
-        $original_value,
177
-        $requested_value
178
-    ) {
179
-        if ($this->appliesToVersion($requested_value)
180
-            && $original_value === EE_INF
181
-        ) {
182
-            // return the old representation of infinity in the JSON
183
-            return -1;
184
-        }
185
-        return $new_value;
186
-    }
163
+	/**
164
+	 * If the value was infinity, we now use null in our JSON responses,
165
+	 * but before this version we used -1.
166
+	 *
167
+	 * @param mixed                $new_value
168
+	 * @param \EE_Model_Field_Base $field_obj
169
+	 * @param mixed                $original_value
170
+	 * @param string               $requested_value
171
+	 * @return mixed
172
+	 */
173
+	public function useNegativeOneForInfinityBeforeThisVersion(
174
+		$new_value,
175
+		$field_obj,
176
+		$original_value,
177
+		$requested_value
178
+	) {
179
+		if ($this->appliesToVersion($requested_value)
180
+			&& $original_value === EE_INF
181
+		) {
182
+			// return the old representation of infinity in the JSON
183
+			return -1;
184
+		}
185
+		return $new_value;
186
+	}
187 187
 }
Please login to merge, or discard this patch.
Spacing   +4 added lines, -4 removed lines patch added patch discarded remove patch
@@ -119,9 +119,9 @@  discard block
 block discarded – undo
119 119
                 $headers,
120 120
                 array_flip(
121 121
                     array(
122
-                        Base::HEADER_PREFIX_FOR_WP . 'Total',
123
-                        Base::HEADER_PREFIX_FOR_WP . 'TotalPages',
124
-                        Base::HEADER_PREFIX_FOR_WP . 'PageSize',
122
+                        Base::HEADER_PREFIX_FOR_WP.'Total',
123
+                        Base::HEADER_PREFIX_FOR_WP.'TotalPages',
124
+                        Base::HEADER_PREFIX_FOR_WP.'PageSize',
125 125
                     )
126 126
                 )
127 127
             );
@@ -151,7 +151,7 @@  discard block
 block discarded – undo
151 151
             && $model instanceof \EEM_CPT_Base
152 152
         ) {
153 153
             $attachment = wp_get_attachment_image_src(
154
-                get_post_thumbnail_id($entity_response_array[ $model->primary_key_name() ]),
154
+                get_post_thumbnail_id($entity_response_array[$model->primary_key_name()]),
155 155
                 'full'
156 156
             );
157 157
             $entity_response_array['featured_image_url'] = ! empty($attachment) ? $attachment[0] : null;
Please login to merge, or discard this patch.
core/libraries/rest_api/ModelVersionInfo.php 2 patches
Spacing   +12 added lines, -12 removed lines patch added patch discarded remove patch
@@ -114,10 +114,10 @@  discard block
 block discarded – undo
114 114
         foreach ($this->resource_changes as $version => $model_classnames) {
115 115
             foreach ($model_classnames as $model_classname => $extra_fields) {
116 116
                 foreach ($extra_fields as $fieldname => $field_data) {
117
-                    $this->resource_changes[ $model_classname ][ $fieldname ]['name'] = $fieldname;
117
+                    $this->resource_changes[$model_classname][$fieldname]['name'] = $fieldname;
118 118
                     foreach ($defaults as $attribute => $default_value) {
119
-                        if (! isset($this->resource_changes[ $model_classname ][ $fieldname ][ $attribute ])) {
120
-                            $this->resource_changes[ $model_classname ][ $fieldname ][ $attribute ] = $default_value;
119
+                        if ( ! isset($this->resource_changes[$model_classname][$fieldname][$attribute])) {
120
+                            $this->resource_changes[$model_classname][$fieldname][$attribute] = $default_value;
121 121
                         }
122 122
                     }
123 123
                 }
@@ -139,7 +139,7 @@  discard block
 block discarded – undo
139 139
             $model_changes = array();
140 140
             foreach ($this->modelChanges() as $version => $models_changed_in_version) {
141 141
                 if ($version <= EED_Core_Rest_Api::core_version() && $version > $this->requestedVersion()) {
142
-                    $model_changes[ $version ] = $models_changed_in_version;
142
+                    $model_changes[$version] = $models_changed_in_version;
143 143
                 }
144 144
             }
145 145
             $this->cached_model_changes_between_requested_version_and_current = $model_changes;
@@ -161,7 +161,7 @@  discard block
 block discarded – undo
161 161
             $resource_changes = array();
162 162
             foreach ($this->resourceChanges() as $version => $model_classnames) {
163 163
                 if ($version <= EED_Core_Rest_Api::core_version() && $version > $this->requestedVersion()) {
164
-                    $resource_changes[ $version ] = $model_classnames;
164
+                    $resource_changes[$version] = $model_classnames;
165 165
                 }
166 166
             }
167 167
             $this->cached_resource_changes_between_requested_version_and_current = $resource_changes;
@@ -212,7 +212,7 @@  discard block
 block discarded – undo
212 212
             foreach ($this->modelChangesBetweenRequestedVersionAndCurrent() as $version => $models_changed) {
213 213
                 foreach ($models_changed as $model_name => $new_indicator_or_fields_added) {
214 214
                     if ($new_indicator_or_fields_added === ModelVersionInfo::MODEL_ADDED) {
215
-                        unset($all_models_in_current_version[ $model_name ]);
215
+                        unset($all_models_in_current_version[$model_name]);
216 216
                     }
217 217
                 }
218 218
             }
@@ -237,7 +237,7 @@  discard block
 block discarded – undo
237 237
     public function isModelNameInThisVersion($model_name)
238 238
     {
239 239
         $model_names = $this->modelsForRequestedVersion();
240
-        if (isset($model_names[ $model_name ])) {
240
+        if (isset($model_names[$model_name])) {
241 241
             return true;
242 242
         } else {
243 243
             return false;
@@ -280,19 +280,19 @@  discard block
 block discarded – undo
280 280
      */
281 281
     public function fieldsOnModelInThisVersion($model)
282 282
     {
283
-        if (! isset($this->cached_fields_on_models[ $model->get_this_model_name() ])) {
283
+        if ( ! isset($this->cached_fields_on_models[$model->get_this_model_name()])) {
284 284
             // get all model changes between the requested version and current core version
285 285
             $changes = $this->modelChangesBetweenRequestedVersionAndCurrent();
286 286
             // fetch all fields currently on this model
287 287
             $current_fields = $model->field_settings();
288 288
             // remove all fields that have been added since
289 289
             foreach ($changes as $version => $changes_in_version) {
290
-                if (isset($changes_in_version[ $model->get_this_model_name() ])
291
-                    && $changes_in_version[ $model->get_this_model_name() ] !== ModelVersionInfo::MODEL_ADDED
290
+                if (isset($changes_in_version[$model->get_this_model_name()])
291
+                    && $changes_in_version[$model->get_this_model_name()] !== ModelVersionInfo::MODEL_ADDED
292 292
                 ) {
293 293
                     $current_fields = array_diff_key(
294 294
                         $current_fields,
295
-                        array_flip($changes_in_version[ $model->get_this_model_name() ])
295
+                        array_flip($changes_in_version[$model->get_this_model_name()])
296 296
                     );
297 297
                 }
298 298
             }
@@ -447,7 +447,7 @@  discard block
 block discarded – undo
447 447
         $relations = array();
448 448
         foreach ($model->relation_settings() as $relation_name => $relation_obj) {
449 449
             if ($this->isModelNameInThisVersion($relation_name)) {
450
-                $relations[ $relation_name ] = $relation_obj;
450
+                $relations[$relation_name] = $relation_obj;
451 451
             }
452 452
         }
453 453
         // filter the results, but use the old filter name
Please login to merge, or discard this patch.
Indentation   +436 added lines, -436 removed lines patch added patch discarded remove patch
@@ -21,440 +21,440 @@
 block discarded – undo
21 21
 class ModelVersionInfo
22 22
 {
23 23
 
24
-    /**
25
-     * Constant used in the $_model_changes array to indicate that a model
26
-     * was completely new in this version
27
-     */
28
-    const MODEL_ADDED = 'model_added_in_this_version';
29
-
30
-    /**
31
-     * Top-level keys are versions (major and minor version numbers, eg "4.6")
32
-     * next-level keys are model names (eg "Event") that underwent some change in that version
33
-     * and the value is either Model_Version_Info::model_added (indicating the model is completely NEW in this version),
34
-     * or it's an array where the values are model field names,
35
-     * or API resource properties (ie, non-model fields that appear in REST API results)
36
-     * If a version is missing then we don't know anything about what changes it introduced from the previous version
37
-     *
38
-     * @var array
39
-     */
40
-    protected $model_changes = array();
41
-
42
-    /**
43
-     * top-level keys are version numbers,
44
-     * next-level keys are model CLASSNAMES (even parent classnames),
45
-     * and next-level keys are extra resource properties to attach to those models' resources,
46
-     * and next-level key-value pairs, where the keys are:
47
-     * 'raw', 'type', 'nullable', 'table_alias', 'table_column',  'always_available'
48
-     *
49
-     * @var array
50
-     */
51
-    protected $resource_changes = array();
52
-
53
-    /**
54
-     * @var string indicating what version of the API was requested
55
-     * (eg although core might be at version 4.8.11, they may have sent a request
56
-     * for 4.6)
57
-     */
58
-    protected $requested_version = null;
59
-
60
-    /**
61
-     * Keys are model names, values are their classnames.
62
-     * We cache this so we only need to calculate this once per request
63
-     *
64
-     * @var array
65
-     */
66
-    protected $cached_models_for_requested_version = null;
67
-
68
-    /**
69
-     * @var array
70
-     */
71
-    protected $cached_model_changes_between_requested_version_and_current = null;
72
-
73
-    /**
74
-     * @var array
75
-     */
76
-    protected $cached_resource_changes_between_requested_version_and_current = null;
77
-
78
-    /**
79
-     * 2d array where top-level keys are model names, 2nd-level keys are field names
80
-     * and values are the actual field objects
81
-     *
82
-     * @var array
83
-     */
84
-    protected $cached_fields_on_models = array();
85
-
86
-
87
-    /**
88
-     * Model_Version_Info constructor.
89
-     *
90
-     * @param string $requested_version
91
-     */
92
-    public function __construct($requested_version)
93
-    {
94
-        $this->requested_version = (string) $requested_version;
95
-        $this->model_changes = array(
96
-            '4.8.29' => array(
97
-                // first version where the REST API is in EE core, so no need
98
-                // to specify how its different from the previous
99
-            ),
100
-        );
101
-        // setup data for "extra" fields added onto resources which don't actually exist on models
102
-        $this->resource_changes = apply_filters(
103
-            'FHEE__Model_Version_Info___construct__extra_resource_properties_for_models',
104
-            array()
105
-        );
106
-        $defaults = array(
107
-            'raw'              => false,
108
-            'type'             => 'N/A',
109
-            'nullable'         => true,
110
-            'table_alias'      => 'N/A',
111
-            'table_column'     => 'N/A',
112
-            'always_available' => true,
113
-        );
114
-        foreach ($this->resource_changes as $version => $model_classnames) {
115
-            foreach ($model_classnames as $model_classname => $extra_fields) {
116
-                foreach ($extra_fields as $fieldname => $field_data) {
117
-                    $this->resource_changes[ $model_classname ][ $fieldname ]['name'] = $fieldname;
118
-                    foreach ($defaults as $attribute => $default_value) {
119
-                        if (! isset($this->resource_changes[ $model_classname ][ $fieldname ][ $attribute ])) {
120
-                            $this->resource_changes[ $model_classname ][ $fieldname ][ $attribute ] = $default_value;
121
-                        }
122
-                    }
123
-                }
124
-            }
125
-        }
126
-    }
127
-
128
-
129
-    /**
130
-     * Returns a slice of Model_Version_Info::model_changes()'s array
131
-     * indicating exactly what changes happened between the current core version,
132
-     * and the version requested
133
-     *
134
-     * @return array
135
-     */
136
-    public function modelChangesBetweenRequestedVersionAndCurrent()
137
-    {
138
-        if ($this->cached_model_changes_between_requested_version_and_current === null) {
139
-            $model_changes = array();
140
-            foreach ($this->modelChanges() as $version => $models_changed_in_version) {
141
-                if ($version <= EED_Core_Rest_Api::core_version() && $version > $this->requestedVersion()) {
142
-                    $model_changes[ $version ] = $models_changed_in_version;
143
-                }
144
-            }
145
-            $this->cached_model_changes_between_requested_version_and_current = $model_changes;
146
-        }
147
-        return $this->cached_model_changes_between_requested_version_and_current;
148
-    }
149
-
150
-
151
-    /**
152
-     * Returns a slice of Model_Version_Info::model_changes()'s array
153
-     * indicating exactly what changes happened between the current core version,
154
-     * and the version requested
155
-     *
156
-     * @return array
157
-     */
158
-    public function resourceChangesBetweenRequestedVersionAndCurrent()
159
-    {
160
-        if ($this->cached_resource_changes_between_requested_version_and_current === null) {
161
-            $resource_changes = array();
162
-            foreach ($this->resourceChanges() as $version => $model_classnames) {
163
-                if ($version <= EED_Core_Rest_Api::core_version() && $version > $this->requestedVersion()) {
164
-                    $resource_changes[ $version ] = $model_classnames;
165
-                }
166
-            }
167
-            $this->cached_resource_changes_between_requested_version_and_current = $resource_changes;
168
-        }
169
-        return $this->cached_resource_changes_between_requested_version_and_current;
170
-    }
171
-
172
-
173
-    /**
174
-     * If a request was sent to 'wp-json/ee/v4.7/events' this would be '4.7'
175
-     *
176
-     * @return string like '4.6'
177
-     */
178
-    public function requestedVersion()
179
-    {
180
-        return $this->requested_version;
181
-    }
182
-
183
-
184
-    /**
185
-     * Returns an array describing how the models have changed in each version of core
186
-     * that supports the API (starting at 4.6)
187
-     * Top-level keys are versions (major and minor version numbers, eg "4.6")
188
-     * next-level keys are model names (eg "Event") that underwent some change in that version
189
-     * and the value is either NULL (indicating the model is completely NEW in this version),
190
-     * or it's an array where fields are value names.
191
-     * If a version is missing then we don't know anything about what changes it introduced from the previous version
192
-     *
193
-     * @return array
194
-     */
195
-    public function modelChanges()
196
-    {
197
-        return $this->model_changes;
198
-    }
199
-
200
-
201
-    /**
202
-     * Takes into account the requested version, and the current version, and
203
-     * what changed between the two, and tries to return.
204
-     * Analogous to EE_Registry::instance()->non_abstract_db_models
205
-     *
206
-     * @return array keys are model names, values are their classname
207
-     */
208
-    public function modelsForRequestedVersion()
209
-    {
210
-        if ($this->cached_models_for_requested_version === null) {
211
-            $all_models_in_current_version = EE_Registry::instance()->non_abstract_db_models;
212
-            foreach ($this->modelChangesBetweenRequestedVersionAndCurrent() as $version => $models_changed) {
213
-                foreach ($models_changed as $model_name => $new_indicator_or_fields_added) {
214
-                    if ($new_indicator_or_fields_added === ModelVersionInfo::MODEL_ADDED) {
215
-                        unset($all_models_in_current_version[ $model_name ]);
216
-                    }
217
-                }
218
-            }
219
-            $this->cached_models_for_requested_version = apply_filters(
220
-                'FHEE__EventEspresso_core_libraries_rest_api__models_for_requested_version',
221
-                $all_models_in_current_version,
222
-                $this
223
-            );
224
-        }
225
-        return $this->cached_models_for_requested_version;
226
-    }
227
-
228
-
229
-    /**
230
-     * Determines if this is a valid model name in the requested version.
231
-     * Similar to EE_Registry::instance()->is_model_name(), but takes the requested
232
-     * version's models into account
233
-     *
234
-     * @param string $model_name eg 'Event'
235
-     * @return boolean
236
-     */
237
-    public function isModelNameInThisVersion($model_name)
238
-    {
239
-        $model_names = $this->modelsForRequestedVersion();
240
-        if (isset($model_names[ $model_name ])) {
241
-            return true;
242
-        } else {
243
-            return false;
244
-        }
245
-    }
246
-
247
-
248
-    /**
249
-     * Wrapper for EE_Registry::instance()->load_model(), but takes the requested
250
-     * version's models into account
251
-     *
252
-     * @param string $model_name
253
-     * @return \EEM_Base
254
-     * @throws \EE_Error
255
-     */
256
-    public function loadModel($model_name)
257
-    {
258
-        if ($this->isModelNameInThisVersion($model_name)) {
259
-            return EE_Registry::instance()->load_model($model_name);
260
-        } else {
261
-            throw new \EE_Error(
262
-                sprintf(
263
-                    __(
264
-                        'Cannot load model "%1$s" because it does not exist in version %2$s of Event Espresso',
265
-                        'event_espresso'
266
-                    ),
267
-                    $model_name,
268
-                    $this->requestedVersion()
269
-                )
270
-            );
271
-        }
272
-    }
273
-
274
-
275
-    /**
276
-     * Gets all the fields that should exist on this model right now
277
-     *
278
-     * @param \EEM_Base $model
279
-     * @return array|\EE_Model_Field_Base[]
280
-     */
281
-    public function fieldsOnModelInThisVersion($model)
282
-    {
283
-        if (! isset($this->cached_fields_on_models[ $model->get_this_model_name() ])) {
284
-            // get all model changes between the requested version and current core version
285
-            $changes = $this->modelChangesBetweenRequestedVersionAndCurrent();
286
-            // fetch all fields currently on this model
287
-            $current_fields = $model->field_settings();
288
-            // remove all fields that have been added since
289
-            foreach ($changes as $version => $changes_in_version) {
290
-                if (isset($changes_in_version[ $model->get_this_model_name() ])
291
-                    && $changes_in_version[ $model->get_this_model_name() ] !== ModelVersionInfo::MODEL_ADDED
292
-                ) {
293
-                    $current_fields = array_diff_key(
294
-                        $current_fields,
295
-                        array_flip($changes_in_version[ $model->get_this_model_name() ])
296
-                    );
297
-                }
298
-            }
299
-            $this->cached_fields_on_models = $current_fields;
300
-        }
301
-        return $this->cached_fields_on_models;
302
-    }
303
-
304
-
305
-    /**
306
-     * Determines if $object is of one of the classes of $classes. Similar to
307
-     * in_array(), except this checks if $object is a subclass of the classnames provided
308
-     * in $classnames
309
-     *
310
-     * @param object $object
311
-     * @param array  $classnames
312
-     * @return boolean
313
-     */
314
-    public function isSubclassOfOne($object, $classnames)
315
-    {
316
-        foreach ($classnames as $classname) {
317
-            if (is_a($object, $classname)) {
318
-                return true;
319
-            }
320
-        }
321
-        return false;
322
-    }
323
-
324
-
325
-    /**
326
-     * Returns the list of model field classes that that the API basically ignores
327
-     *
328
-     * @return array
329
-     */
330
-    public function fieldsIgnored()
331
-    {
332
-        return apply_filters(
333
-            'FHEE__Controller_Model_Read_fields_ignored',
334
-            array()
335
-        );
336
-    }
337
-
338
-
339
-    /**
340
-     * If this field one that should be ignored by the API?
341
-     *
342
-     * @param EE_Model_Field_Base
343
-     * @return boolean
344
-     */
345
-    public function fieldIsIgnored($field_obj)
346
-    {
347
-        return $this->isSubclassOfOne($field_obj, $this->fieldsIgnored());
348
-    }
349
-
350
-
351
-    /**
352
-     * Returns the list of model field classes that have a "raw" and non-raw formats.
353
-     * Normally the "raw" versions are only accessible to those who can edit them.
354
-     *
355
-     * @return array an array of EE_Model_Field_Base child classnames
356
-     */
357
-    public function fieldsThatHaveRenderedFormat()
358
-    {
359
-        return apply_filters(
360
-            'FHEE__Controller_Model_Read__fields_raw',
361
-            array('EE_Post_Content_Field', 'EE_Full_HTML_Field')
362
-        );
363
-    }
364
-
365
-
366
-    /**
367
-     * If this field one that has a raw format
368
-     *
369
-     * @param EE_Model_Field_Base
370
-     * @return boolean
371
-     */
372
-    public function fieldHasRenderedFormat($field_obj)
373
-    {
374
-        return $this->isSubclassOfOne($field_obj, $this->fieldsThatHaveRenderedFormat());
375
-    }
376
-
377
-
378
-    /**
379
-     * Returns the list of model field classes that have a "_pretty" and non-pretty versions.
380
-     * The pretty version of the field is NOT query-able or editable, but requires no extra permissions
381
-     * to view
382
-     *
383
-     * @return array an array of EE_Model_Field_Base child classnames
384
-     */
385
-    public function fieldsThatHavePrettyFormat()
386
-    {
387
-        return apply_filters(
388
-            'FHEE__Controller_Model_Read__fields_pretty',
389
-            array('EE_Enum_Integer_Field', 'EE_Enum_Text_Field', 'EE_Money_Field')
390
-        );
391
-    }
392
-
393
-
394
-    /**
395
-     * If this field one that has a pretty equivalent
396
-     *
397
-     * @param EE_Model_Field_Base
398
-     * @return boolean
399
-     */
400
-    public function fieldHasPrettyFormat($field_obj)
401
-    {
402
-        return $this->isSubclassOfOne($field_obj, $this->fieldsThatHavePrettyFormat());
403
-    }
404
-
405
-
406
-    /**
407
-     * Returns an array describing what extra API resource properties have been added through the versions
408
-     *
409
-     * @return array @see $this->_extra_resource_properties_for_models
410
-     */
411
-    public function resourceChanges()
412
-    {
413
-        return $this->resource_changes;
414
-    }
415
-
416
-
417
-    /**
418
-     * Returns an array where keys are extra resource properties in this version of the API,
419
-     * and values are key-value pairs describing the new properties. @see Model_Version::_resource_changes
420
-     *
421
-     * @param \EEM_Base $model
422
-     * @return array
423
-     */
424
-    public function extraResourcePropertiesForModel($model)
425
-    {
426
-        $extra_properties = array();
427
-        foreach ($this->resourceChangesBetweenRequestedVersionAndCurrent() as $version => $model_classnames) {
428
-            foreach ($model_classnames as $model_classname => $properties_added_in_this_version) {
429
-                if (is_subclass_of($model, $model_classname)) {
430
-                    $extra_properties = array_merge($extra_properties, $properties_added_in_this_version);
431
-                }
432
-            }
433
-        }
434
-        return $extra_properties;
435
-    }
436
-
437
-
438
-    /**
439
-     * Gets all the related models for the specified model. It's good to use this
440
-     * in case this model didn't exist for this version or something
441
-     *
442
-     * @param \EEM_Base $model
443
-     * @return \EE_Model_Relation_Base[]
444
-     */
445
-    public function relationSettings(\EEM_Base $model)
446
-    {
447
-        $relations = array();
448
-        foreach ($model->relation_settings() as $relation_name => $relation_obj) {
449
-            if ($this->isModelNameInThisVersion($relation_name)) {
450
-                $relations[ $relation_name ] = $relation_obj;
451
-            }
452
-        }
453
-        // filter the results, but use the old filter name
454
-        return apply_filters(
455
-            'FHEE__Read__create_entity_from_wpdb_result__related_models_to_include',
456
-            $relations,
457
-            $model
458
-        );
459
-    }
24
+	/**
25
+	 * Constant used in the $_model_changes array to indicate that a model
26
+	 * was completely new in this version
27
+	 */
28
+	const MODEL_ADDED = 'model_added_in_this_version';
29
+
30
+	/**
31
+	 * Top-level keys are versions (major and minor version numbers, eg "4.6")
32
+	 * next-level keys are model names (eg "Event") that underwent some change in that version
33
+	 * and the value is either Model_Version_Info::model_added (indicating the model is completely NEW in this version),
34
+	 * or it's an array where the values are model field names,
35
+	 * or API resource properties (ie, non-model fields that appear in REST API results)
36
+	 * If a version is missing then we don't know anything about what changes it introduced from the previous version
37
+	 *
38
+	 * @var array
39
+	 */
40
+	protected $model_changes = array();
41
+
42
+	/**
43
+	 * top-level keys are version numbers,
44
+	 * next-level keys are model CLASSNAMES (even parent classnames),
45
+	 * and next-level keys are extra resource properties to attach to those models' resources,
46
+	 * and next-level key-value pairs, where the keys are:
47
+	 * 'raw', 'type', 'nullable', 'table_alias', 'table_column',  'always_available'
48
+	 *
49
+	 * @var array
50
+	 */
51
+	protected $resource_changes = array();
52
+
53
+	/**
54
+	 * @var string indicating what version of the API was requested
55
+	 * (eg although core might be at version 4.8.11, they may have sent a request
56
+	 * for 4.6)
57
+	 */
58
+	protected $requested_version = null;
59
+
60
+	/**
61
+	 * Keys are model names, values are their classnames.
62
+	 * We cache this so we only need to calculate this once per request
63
+	 *
64
+	 * @var array
65
+	 */
66
+	protected $cached_models_for_requested_version = null;
67
+
68
+	/**
69
+	 * @var array
70
+	 */
71
+	protected $cached_model_changes_between_requested_version_and_current = null;
72
+
73
+	/**
74
+	 * @var array
75
+	 */
76
+	protected $cached_resource_changes_between_requested_version_and_current = null;
77
+
78
+	/**
79
+	 * 2d array where top-level keys are model names, 2nd-level keys are field names
80
+	 * and values are the actual field objects
81
+	 *
82
+	 * @var array
83
+	 */
84
+	protected $cached_fields_on_models = array();
85
+
86
+
87
+	/**
88
+	 * Model_Version_Info constructor.
89
+	 *
90
+	 * @param string $requested_version
91
+	 */
92
+	public function __construct($requested_version)
93
+	{
94
+		$this->requested_version = (string) $requested_version;
95
+		$this->model_changes = array(
96
+			'4.8.29' => array(
97
+				// first version where the REST API is in EE core, so no need
98
+				// to specify how its different from the previous
99
+			),
100
+		);
101
+		// setup data for "extra" fields added onto resources which don't actually exist on models
102
+		$this->resource_changes = apply_filters(
103
+			'FHEE__Model_Version_Info___construct__extra_resource_properties_for_models',
104
+			array()
105
+		);
106
+		$defaults = array(
107
+			'raw'              => false,
108
+			'type'             => 'N/A',
109
+			'nullable'         => true,
110
+			'table_alias'      => 'N/A',
111
+			'table_column'     => 'N/A',
112
+			'always_available' => true,
113
+		);
114
+		foreach ($this->resource_changes as $version => $model_classnames) {
115
+			foreach ($model_classnames as $model_classname => $extra_fields) {
116
+				foreach ($extra_fields as $fieldname => $field_data) {
117
+					$this->resource_changes[ $model_classname ][ $fieldname ]['name'] = $fieldname;
118
+					foreach ($defaults as $attribute => $default_value) {
119
+						if (! isset($this->resource_changes[ $model_classname ][ $fieldname ][ $attribute ])) {
120
+							$this->resource_changes[ $model_classname ][ $fieldname ][ $attribute ] = $default_value;
121
+						}
122
+					}
123
+				}
124
+			}
125
+		}
126
+	}
127
+
128
+
129
+	/**
130
+	 * Returns a slice of Model_Version_Info::model_changes()'s array
131
+	 * indicating exactly what changes happened between the current core version,
132
+	 * and the version requested
133
+	 *
134
+	 * @return array
135
+	 */
136
+	public function modelChangesBetweenRequestedVersionAndCurrent()
137
+	{
138
+		if ($this->cached_model_changes_between_requested_version_and_current === null) {
139
+			$model_changes = array();
140
+			foreach ($this->modelChanges() as $version => $models_changed_in_version) {
141
+				if ($version <= EED_Core_Rest_Api::core_version() && $version > $this->requestedVersion()) {
142
+					$model_changes[ $version ] = $models_changed_in_version;
143
+				}
144
+			}
145
+			$this->cached_model_changes_between_requested_version_and_current = $model_changes;
146
+		}
147
+		return $this->cached_model_changes_between_requested_version_and_current;
148
+	}
149
+
150
+
151
+	/**
152
+	 * Returns a slice of Model_Version_Info::model_changes()'s array
153
+	 * indicating exactly what changes happened between the current core version,
154
+	 * and the version requested
155
+	 *
156
+	 * @return array
157
+	 */
158
+	public function resourceChangesBetweenRequestedVersionAndCurrent()
159
+	{
160
+		if ($this->cached_resource_changes_between_requested_version_and_current === null) {
161
+			$resource_changes = array();
162
+			foreach ($this->resourceChanges() as $version => $model_classnames) {
163
+				if ($version <= EED_Core_Rest_Api::core_version() && $version > $this->requestedVersion()) {
164
+					$resource_changes[ $version ] = $model_classnames;
165
+				}
166
+			}
167
+			$this->cached_resource_changes_between_requested_version_and_current = $resource_changes;
168
+		}
169
+		return $this->cached_resource_changes_between_requested_version_and_current;
170
+	}
171
+
172
+
173
+	/**
174
+	 * If a request was sent to 'wp-json/ee/v4.7/events' this would be '4.7'
175
+	 *
176
+	 * @return string like '4.6'
177
+	 */
178
+	public function requestedVersion()
179
+	{
180
+		return $this->requested_version;
181
+	}
182
+
183
+
184
+	/**
185
+	 * Returns an array describing how the models have changed in each version of core
186
+	 * that supports the API (starting at 4.6)
187
+	 * Top-level keys are versions (major and minor version numbers, eg "4.6")
188
+	 * next-level keys are model names (eg "Event") that underwent some change in that version
189
+	 * and the value is either NULL (indicating the model is completely NEW in this version),
190
+	 * or it's an array where fields are value names.
191
+	 * If a version is missing then we don't know anything about what changes it introduced from the previous version
192
+	 *
193
+	 * @return array
194
+	 */
195
+	public function modelChanges()
196
+	{
197
+		return $this->model_changes;
198
+	}
199
+
200
+
201
+	/**
202
+	 * Takes into account the requested version, and the current version, and
203
+	 * what changed between the two, and tries to return.
204
+	 * Analogous to EE_Registry::instance()->non_abstract_db_models
205
+	 *
206
+	 * @return array keys are model names, values are their classname
207
+	 */
208
+	public function modelsForRequestedVersion()
209
+	{
210
+		if ($this->cached_models_for_requested_version === null) {
211
+			$all_models_in_current_version = EE_Registry::instance()->non_abstract_db_models;
212
+			foreach ($this->modelChangesBetweenRequestedVersionAndCurrent() as $version => $models_changed) {
213
+				foreach ($models_changed as $model_name => $new_indicator_or_fields_added) {
214
+					if ($new_indicator_or_fields_added === ModelVersionInfo::MODEL_ADDED) {
215
+						unset($all_models_in_current_version[ $model_name ]);
216
+					}
217
+				}
218
+			}
219
+			$this->cached_models_for_requested_version = apply_filters(
220
+				'FHEE__EventEspresso_core_libraries_rest_api__models_for_requested_version',
221
+				$all_models_in_current_version,
222
+				$this
223
+			);
224
+		}
225
+		return $this->cached_models_for_requested_version;
226
+	}
227
+
228
+
229
+	/**
230
+	 * Determines if this is a valid model name in the requested version.
231
+	 * Similar to EE_Registry::instance()->is_model_name(), but takes the requested
232
+	 * version's models into account
233
+	 *
234
+	 * @param string $model_name eg 'Event'
235
+	 * @return boolean
236
+	 */
237
+	public function isModelNameInThisVersion($model_name)
238
+	{
239
+		$model_names = $this->modelsForRequestedVersion();
240
+		if (isset($model_names[ $model_name ])) {
241
+			return true;
242
+		} else {
243
+			return false;
244
+		}
245
+	}
246
+
247
+
248
+	/**
249
+	 * Wrapper for EE_Registry::instance()->load_model(), but takes the requested
250
+	 * version's models into account
251
+	 *
252
+	 * @param string $model_name
253
+	 * @return \EEM_Base
254
+	 * @throws \EE_Error
255
+	 */
256
+	public function loadModel($model_name)
257
+	{
258
+		if ($this->isModelNameInThisVersion($model_name)) {
259
+			return EE_Registry::instance()->load_model($model_name);
260
+		} else {
261
+			throw new \EE_Error(
262
+				sprintf(
263
+					__(
264
+						'Cannot load model "%1$s" because it does not exist in version %2$s of Event Espresso',
265
+						'event_espresso'
266
+					),
267
+					$model_name,
268
+					$this->requestedVersion()
269
+				)
270
+			);
271
+		}
272
+	}
273
+
274
+
275
+	/**
276
+	 * Gets all the fields that should exist on this model right now
277
+	 *
278
+	 * @param \EEM_Base $model
279
+	 * @return array|\EE_Model_Field_Base[]
280
+	 */
281
+	public function fieldsOnModelInThisVersion($model)
282
+	{
283
+		if (! isset($this->cached_fields_on_models[ $model->get_this_model_name() ])) {
284
+			// get all model changes between the requested version and current core version
285
+			$changes = $this->modelChangesBetweenRequestedVersionAndCurrent();
286
+			// fetch all fields currently on this model
287
+			$current_fields = $model->field_settings();
288
+			// remove all fields that have been added since
289
+			foreach ($changes as $version => $changes_in_version) {
290
+				if (isset($changes_in_version[ $model->get_this_model_name() ])
291
+					&& $changes_in_version[ $model->get_this_model_name() ] !== ModelVersionInfo::MODEL_ADDED
292
+				) {
293
+					$current_fields = array_diff_key(
294
+						$current_fields,
295
+						array_flip($changes_in_version[ $model->get_this_model_name() ])
296
+					);
297
+				}
298
+			}
299
+			$this->cached_fields_on_models = $current_fields;
300
+		}
301
+		return $this->cached_fields_on_models;
302
+	}
303
+
304
+
305
+	/**
306
+	 * Determines if $object is of one of the classes of $classes. Similar to
307
+	 * in_array(), except this checks if $object is a subclass of the classnames provided
308
+	 * in $classnames
309
+	 *
310
+	 * @param object $object
311
+	 * @param array  $classnames
312
+	 * @return boolean
313
+	 */
314
+	public function isSubclassOfOne($object, $classnames)
315
+	{
316
+		foreach ($classnames as $classname) {
317
+			if (is_a($object, $classname)) {
318
+				return true;
319
+			}
320
+		}
321
+		return false;
322
+	}
323
+
324
+
325
+	/**
326
+	 * Returns the list of model field classes that that the API basically ignores
327
+	 *
328
+	 * @return array
329
+	 */
330
+	public function fieldsIgnored()
331
+	{
332
+		return apply_filters(
333
+			'FHEE__Controller_Model_Read_fields_ignored',
334
+			array()
335
+		);
336
+	}
337
+
338
+
339
+	/**
340
+	 * If this field one that should be ignored by the API?
341
+	 *
342
+	 * @param EE_Model_Field_Base
343
+	 * @return boolean
344
+	 */
345
+	public function fieldIsIgnored($field_obj)
346
+	{
347
+		return $this->isSubclassOfOne($field_obj, $this->fieldsIgnored());
348
+	}
349
+
350
+
351
+	/**
352
+	 * Returns the list of model field classes that have a "raw" and non-raw formats.
353
+	 * Normally the "raw" versions are only accessible to those who can edit them.
354
+	 *
355
+	 * @return array an array of EE_Model_Field_Base child classnames
356
+	 */
357
+	public function fieldsThatHaveRenderedFormat()
358
+	{
359
+		return apply_filters(
360
+			'FHEE__Controller_Model_Read__fields_raw',
361
+			array('EE_Post_Content_Field', 'EE_Full_HTML_Field')
362
+		);
363
+	}
364
+
365
+
366
+	/**
367
+	 * If this field one that has a raw format
368
+	 *
369
+	 * @param EE_Model_Field_Base
370
+	 * @return boolean
371
+	 */
372
+	public function fieldHasRenderedFormat($field_obj)
373
+	{
374
+		return $this->isSubclassOfOne($field_obj, $this->fieldsThatHaveRenderedFormat());
375
+	}
376
+
377
+
378
+	/**
379
+	 * Returns the list of model field classes that have a "_pretty" and non-pretty versions.
380
+	 * The pretty version of the field is NOT query-able or editable, but requires no extra permissions
381
+	 * to view
382
+	 *
383
+	 * @return array an array of EE_Model_Field_Base child classnames
384
+	 */
385
+	public function fieldsThatHavePrettyFormat()
386
+	{
387
+		return apply_filters(
388
+			'FHEE__Controller_Model_Read__fields_pretty',
389
+			array('EE_Enum_Integer_Field', 'EE_Enum_Text_Field', 'EE_Money_Field')
390
+		);
391
+	}
392
+
393
+
394
+	/**
395
+	 * If this field one that has a pretty equivalent
396
+	 *
397
+	 * @param EE_Model_Field_Base
398
+	 * @return boolean
399
+	 */
400
+	public function fieldHasPrettyFormat($field_obj)
401
+	{
402
+		return $this->isSubclassOfOne($field_obj, $this->fieldsThatHavePrettyFormat());
403
+	}
404
+
405
+
406
+	/**
407
+	 * Returns an array describing what extra API resource properties have been added through the versions
408
+	 *
409
+	 * @return array @see $this->_extra_resource_properties_for_models
410
+	 */
411
+	public function resourceChanges()
412
+	{
413
+		return $this->resource_changes;
414
+	}
415
+
416
+
417
+	/**
418
+	 * Returns an array where keys are extra resource properties in this version of the API,
419
+	 * and values are key-value pairs describing the new properties. @see Model_Version::_resource_changes
420
+	 *
421
+	 * @param \EEM_Base $model
422
+	 * @return array
423
+	 */
424
+	public function extraResourcePropertiesForModel($model)
425
+	{
426
+		$extra_properties = array();
427
+		foreach ($this->resourceChangesBetweenRequestedVersionAndCurrent() as $version => $model_classnames) {
428
+			foreach ($model_classnames as $model_classname => $properties_added_in_this_version) {
429
+				if (is_subclass_of($model, $model_classname)) {
430
+					$extra_properties = array_merge($extra_properties, $properties_added_in_this_version);
431
+				}
432
+			}
433
+		}
434
+		return $extra_properties;
435
+	}
436
+
437
+
438
+	/**
439
+	 * Gets all the related models for the specified model. It's good to use this
440
+	 * in case this model didn't exist for this version or something
441
+	 *
442
+	 * @param \EEM_Base $model
443
+	 * @return \EE_Model_Relation_Base[]
444
+	 */
445
+	public function relationSettings(\EEM_Base $model)
446
+	{
447
+		$relations = array();
448
+		foreach ($model->relation_settings() as $relation_name => $relation_obj) {
449
+			if ($this->isModelNameInThisVersion($relation_name)) {
450
+				$relations[ $relation_name ] = $relation_obj;
451
+			}
452
+		}
453
+		// filter the results, but use the old filter name
454
+		return apply_filters(
455
+			'FHEE__Read__create_entity_from_wpdb_result__related_models_to_include',
456
+			$relations,
457
+			$model
458
+		);
459
+	}
460 460
 }
Please login to merge, or discard this patch.
core/libraries/batch/JobHandlers/AttendeesReport.php 2 patches
Indentation   +96 added lines, -96 removed lines patch added patch discarded remove patch
@@ -19,106 +19,106 @@
 block discarded – undo
19 19
 class AttendeesReport extends JobHandlerFile
20 20
 {
21 21
 
22
-    // phpcs:disable PSR1.Methods.CamelCapsMethodName.NotCamelCaps
23
-    public function create_job(JobParameters $job_parameters)
24
-    {
25
-        if (! \EE_Capabilities::instance()->current_user_can('ee_read_contacts', 'generating_report')) {
26
-            throw new BatchRequestException(
27
-                __('You do not have permission to view contacts', 'event_espresso')
28
-            );
29
-        }
30
-        $filepath = $this->create_file_from_job_with_name(
31
-            $job_parameters->job_id(),
32
-            __('contact-list-report.csv', 'event_espresso')
33
-        );
34
-        $job_parameters->add_extra_data('filepath', $filepath);
35
-        $job_parameters->set_job_size($this->count_units_to_process());
36
-        // we should also set the header columns
37
-        $csv_data_for_row = $this->get_csv_data(0, 1);
38
-        \EEH_Export::write_data_array_to_csv($filepath, $csv_data_for_row, true);
39
-        // if we actually processed a row there, record it
40
-        if ($job_parameters->job_size()) {
41
-            $job_parameters->mark_processed(1);
42
-        }
43
-        return new JobStepResponse(
44
-            $job_parameters,
45
-            __('Contacts report started successfully...', 'event_espresso')
46
-        );
47
-    }
22
+	// phpcs:disable PSR1.Methods.CamelCapsMethodName.NotCamelCaps
23
+	public function create_job(JobParameters $job_parameters)
24
+	{
25
+		if (! \EE_Capabilities::instance()->current_user_can('ee_read_contacts', 'generating_report')) {
26
+			throw new BatchRequestException(
27
+				__('You do not have permission to view contacts', 'event_espresso')
28
+			);
29
+		}
30
+		$filepath = $this->create_file_from_job_with_name(
31
+			$job_parameters->job_id(),
32
+			__('contact-list-report.csv', 'event_espresso')
33
+		);
34
+		$job_parameters->add_extra_data('filepath', $filepath);
35
+		$job_parameters->set_job_size($this->count_units_to_process());
36
+		// we should also set the header columns
37
+		$csv_data_for_row = $this->get_csv_data(0, 1);
38
+		\EEH_Export::write_data_array_to_csv($filepath, $csv_data_for_row, true);
39
+		// if we actually processed a row there, record it
40
+		if ($job_parameters->job_size()) {
41
+			$job_parameters->mark_processed(1);
42
+		}
43
+		return new JobStepResponse(
44
+			$job_parameters,
45
+			__('Contacts report started successfully...', 'event_espresso')
46
+		);
47
+	}
48 48
 
49 49
 
50
-    public function continue_job(JobParameters $job_parameters, $batch_size = 50)
51
-    {
52
-        $csv_data = $this->get_csv_data($job_parameters->units_processed(), $batch_size);
53
-        \EEH_Export::write_data_array_to_csv(
54
-            $job_parameters->extra_datum('filepath'),
55
-            $csv_data,
56
-            false
57
-        );
58
-        $units_processed = count($csv_data);
59
-        $job_parameters->mark_processed($units_processed);
60
-        $extra_response_data = array(
61
-            'file_url' => '',
62
-        );
63
-        if ($units_processed < $batch_size) {
64
-            $job_parameters->set_status(JobParameters::status_complete);
65
-            $extra_response_data['file_url'] = $this->get_url_to_file($job_parameters->extra_datum('filepath'));
66
-        }
67
-        return new JobStepResponse(
68
-            $job_parameters,
69
-            sprintf(
70
-                __('Wrote %1$s rows to report CSV file...', 'event_espresso'),
71
-                count($csv_data)
72
-            ),
73
-            $extra_response_data
74
-        );
75
-    }
50
+	public function continue_job(JobParameters $job_parameters, $batch_size = 50)
51
+	{
52
+		$csv_data = $this->get_csv_data($job_parameters->units_processed(), $batch_size);
53
+		\EEH_Export::write_data_array_to_csv(
54
+			$job_parameters->extra_datum('filepath'),
55
+			$csv_data,
56
+			false
57
+		);
58
+		$units_processed = count($csv_data);
59
+		$job_parameters->mark_processed($units_processed);
60
+		$extra_response_data = array(
61
+			'file_url' => '',
62
+		);
63
+		if ($units_processed < $batch_size) {
64
+			$job_parameters->set_status(JobParameters::status_complete);
65
+			$extra_response_data['file_url'] = $this->get_url_to_file($job_parameters->extra_datum('filepath'));
66
+		}
67
+		return new JobStepResponse(
68
+			$job_parameters,
69
+			sprintf(
70
+				__('Wrote %1$s rows to report CSV file...', 'event_espresso'),
71
+				count($csv_data)
72
+			),
73
+			$extra_response_data
74
+		);
75
+	}
76 76
 
77 77
 
78
-    public function cleanup_job(JobParameters $job_parameters)
79
-    {
80
-        $this->_file_helper->delete(
81
-            \EEH_File::remove_filename_from_filepath($job_parameters->extra_datum('filepath')),
82
-            true,
83
-            'd'
84
-        );
85
-        return new JobStepResponse($job_parameters, __('Cleaned up temporary file', 'event_espresso'));
86
-    }
78
+	public function cleanup_job(JobParameters $job_parameters)
79
+	{
80
+		$this->_file_helper->delete(
81
+			\EEH_File::remove_filename_from_filepath($job_parameters->extra_datum('filepath')),
82
+			true,
83
+			'd'
84
+		);
85
+		return new JobStepResponse($job_parameters, __('Cleaned up temporary file', 'event_espresso'));
86
+	}
87 87
 
88
-    public function count_units_to_process()
89
-    {
90
-        return \EEM_Attendee::instance()->count(array('caps' => \EEM_Base::caps_read_admin));
91
-    }
88
+	public function count_units_to_process()
89
+	{
90
+		return \EEM_Attendee::instance()->count(array('caps' => \EEM_Base::caps_read_admin));
91
+	}
92 92
 
93
-    public function get_csv_data($offset, $limit)
94
-    {
95
-        $attendee_rows = \EEM_Attendee::instance()->get_all_wpdb_results(
96
-            array(
97
-                'limit'      => array($offset, $limit),
98
-                'force_join' => array('State', 'Country'),
99
-                'caps'       => \EEM_Base::caps_read_admin,
100
-            )
101
-        );
102
-        $csv_data = array();
103
-        foreach ($attendee_rows as $attendee_row) {
104
-            $csv_row = array();
105
-            foreach (\EEM_Attendee::instance()->field_settings() as $field_name => $field_obj) {
106
-                if ($field_name == 'STA_ID') {
107
-                    $state_name_field = \EEM_State::instance()->field_settings_for('STA_name');
108
-                    $csv_row[ __('State', 'event_espresso') ] = $attendee_row[ $state_name_field->get_qualified_column() ];
109
-                } elseif ($field_name == 'CNT_ISO') {
110
-                    $country_name_field = \EEM_Country::instance()->field_settings_for('CNT_name');
111
-                    $csv_row[ __('Country', 'event_espresso') ] = $attendee_row[ $country_name_field->get_qualified_column() ];
112
-                } else {
113
-                    $csv_row[ wp_specialchars_decode($field_obj->get_nicename(), ENT_QUOTES) ] = $attendee_row[ $field_obj->get_qualified_column() ];
114
-                }
115
-            }
116
-            $csv_data[] = apply_filters(
117
-                'FHEE___EventEspresso_core_libraries_batch_JobHandlers_AttendeesReport__get_csv_data__row',
118
-                $csv_row,
119
-                $attendee_row
120
-            );
121
-        }
122
-        return $csv_data;
123
-    }
93
+	public function get_csv_data($offset, $limit)
94
+	{
95
+		$attendee_rows = \EEM_Attendee::instance()->get_all_wpdb_results(
96
+			array(
97
+				'limit'      => array($offset, $limit),
98
+				'force_join' => array('State', 'Country'),
99
+				'caps'       => \EEM_Base::caps_read_admin,
100
+			)
101
+		);
102
+		$csv_data = array();
103
+		foreach ($attendee_rows as $attendee_row) {
104
+			$csv_row = array();
105
+			foreach (\EEM_Attendee::instance()->field_settings() as $field_name => $field_obj) {
106
+				if ($field_name == 'STA_ID') {
107
+					$state_name_field = \EEM_State::instance()->field_settings_for('STA_name');
108
+					$csv_row[ __('State', 'event_espresso') ] = $attendee_row[ $state_name_field->get_qualified_column() ];
109
+				} elseif ($field_name == 'CNT_ISO') {
110
+					$country_name_field = \EEM_Country::instance()->field_settings_for('CNT_name');
111
+					$csv_row[ __('Country', 'event_espresso') ] = $attendee_row[ $country_name_field->get_qualified_column() ];
112
+				} else {
113
+					$csv_row[ wp_specialchars_decode($field_obj->get_nicename(), ENT_QUOTES) ] = $attendee_row[ $field_obj->get_qualified_column() ];
114
+				}
115
+			}
116
+			$csv_data[] = apply_filters(
117
+				'FHEE___EventEspresso_core_libraries_batch_JobHandlers_AttendeesReport__get_csv_data__row',
118
+				$csv_row,
119
+				$attendee_row
120
+			);
121
+		}
122
+		return $csv_data;
123
+	}
124 124
 }
Please login to merge, or discard this patch.
Spacing   +4 added lines, -4 removed lines patch added patch discarded remove patch
@@ -22,7 +22,7 @@  discard block
 block discarded – undo
22 22
     // phpcs:disable PSR1.Methods.CamelCapsMethodName.NotCamelCaps
23 23
     public function create_job(JobParameters $job_parameters)
24 24
     {
25
-        if (! \EE_Capabilities::instance()->current_user_can('ee_read_contacts', 'generating_report')) {
25
+        if ( ! \EE_Capabilities::instance()->current_user_can('ee_read_contacts', 'generating_report')) {
26 26
             throw new BatchRequestException(
27 27
                 __('You do not have permission to view contacts', 'event_espresso')
28 28
             );
@@ -105,12 +105,12 @@  discard block
 block discarded – undo
105 105
             foreach (\EEM_Attendee::instance()->field_settings() as $field_name => $field_obj) {
106 106
                 if ($field_name == 'STA_ID') {
107 107
                     $state_name_field = \EEM_State::instance()->field_settings_for('STA_name');
108
-                    $csv_row[ __('State', 'event_espresso') ] = $attendee_row[ $state_name_field->get_qualified_column() ];
108
+                    $csv_row[__('State', 'event_espresso')] = $attendee_row[$state_name_field->get_qualified_column()];
109 109
                 } elseif ($field_name == 'CNT_ISO') {
110 110
                     $country_name_field = \EEM_Country::instance()->field_settings_for('CNT_name');
111
-                    $csv_row[ __('Country', 'event_espresso') ] = $attendee_row[ $country_name_field->get_qualified_column() ];
111
+                    $csv_row[__('Country', 'event_espresso')] = $attendee_row[$country_name_field->get_qualified_column()];
112 112
                 } else {
113
-                    $csv_row[ wp_specialchars_decode($field_obj->get_nicename(), ENT_QUOTES) ] = $attendee_row[ $field_obj->get_qualified_column() ];
113
+                    $csv_row[wp_specialchars_decode($field_obj->get_nicename(), ENT_QUOTES)] = $attendee_row[$field_obj->get_qualified_column()];
114 114
                 }
115 115
             }
116 116
             $csv_data[] = apply_filters(
Please login to merge, or discard this patch.
core/libraries/batch/JobHandlers/DatetimeOffsetFix.php 2 patches
Indentation   +467 added lines, -467 removed lines patch added patch discarded remove patch
@@ -24,471 +24,471 @@
 block discarded – undo
24 24
 class DatetimeOffsetFix extends JobHandler
25 25
 {
26 26
 
27
-    /**
28
-     * Key for the option used to track which models have been processed when doing the batches.
29
-     */
30
-    const MODELS_TO_PROCESS_OPTION_KEY = 'ee_models_processed_for_datetime_offset_fix';
31
-
32
-
33
-    const COUNT_OF_MODELS_PROCESSED = 'ee_count_of_ee_models_processed_for_datetime_offset_fixed';
34
-
35
-    /**
36
-     * Key for the option used to track what the current offset is that will be applied when this tool is executed.
37
-     */
38
-    const OFFSET_TO_APPLY_OPTION_KEY = 'ee_datetime_offset_fix_offset_to_apply';
39
-
40
-
41
-    const OPTION_KEY_OFFSET_RANGE_START_DATE = 'ee_datetime_offset_start_date_range';
42
-
43
-
44
-    const OPTION_KEY_OFFSET_RANGE_END_DATE = 'ee_datetime_offset_end_date_range';
45
-
46
-
47
-    /**
48
-     * String labelling the datetime offset fix type for change-log entries.
49
-     */
50
-    const DATETIME_OFFSET_FIX_CHANGELOG_TYPE = 'datetime_offset_fix';
51
-
52
-
53
-    /**
54
-     * String labelling a datetime offset fix error for change-log entries.
55
-     */
56
-    const DATETIME_OFFSET_FIX_CHANGELOG_ERROR_TYPE = 'datetime_offset_fix_error';
57
-
58
-    /**
59
-     * @var EEM_Base[]
60
-     */
61
-    protected $models_with_datetime_fields = array();
62
-
63
-    // phpcs:disable PSR1.Methods.CamelCapsMethodName.NotCamelCaps
64
-
65
-    /**
66
-     * Performs any necessary setup for starting the job. This is also a good
67
-     * place to setup the $job_arguments which will be used for subsequent HTTP requests
68
-     * when continue_job will be called
69
-     *
70
-     * @param JobParameters $job_parameters
71
-     * @return JobStepResponse
72
-     * @throws EE_Error
73
-     * @throws InvalidArgumentException
74
-     * @throws InvalidDataTypeException
75
-     * @throws InvalidInterfaceException
76
-     */
77
-    public function create_job(JobParameters $job_parameters)
78
-    {
79
-        $models_with_datetime_fields = $this->getModelsWithDatetimeFields();
80
-        // we'll be doing each model as a batch.
81
-        $job_parameters->set_job_size(count($models_with_datetime_fields));
82
-        return new JobStepResponse(
83
-            $job_parameters,
84
-            esc_html__('Starting Datetime Offset Fix', 'event_espresso')
85
-        );
86
-    }
87
-
88
-    /**
89
-     * Performs another step of the job
90
-     *
91
-     * @param JobParameters $job_parameters
92
-     * @param int           $batch_size
93
-     * @return JobStepResponse
94
-     * @throws EE_Error
95
-     * @throws InvalidArgumentException
96
-     * @throws InvalidDataTypeException
97
-     * @throws InvalidInterfaceException
98
-     */
99
-    public function continue_job(JobParameters $job_parameters, $batch_size = 50)
100
-    {
101
-        $models_to_process = $this->getModelsWithDatetimeFields();
102
-        // let's pop off the a model and do the query to apply the offset.
103
-        $model_to_process = array_pop($models_to_process);
104
-        // update our record
105
-        $this->setModelsToProcess($models_to_process);
106
-        $this->processModel($model_to_process);
107
-        $this->updateCountOfModelsProcessed();
108
-        $job_parameters->set_units_processed($this->getCountOfModelsProcessed());
109
-        if (count($models_to_process) > 0) {
110
-            $job_parameters->set_status(JobParameters::status_continue);
111
-        } else {
112
-            $job_parameters->set_status(JobParameters::status_complete);
113
-        }
114
-        return new JobStepResponse(
115
-            $job_parameters,
116
-            sprintf(
117
-                esc_html__('Updated the offset for all datetime fields on the %s model.', 'event_espresso'),
118
-                $model_to_process
119
-            )
120
-        );
121
-    }
122
-
123
-    /**
124
-     * Performs any clean-up logic when we know the job is completed
125
-     *
126
-     * @param JobParameters $job_parameters
127
-     * @return JobStepResponse
128
-     * @throws BatchRequestException
129
-     */
130
-    public function cleanup_job(JobParameters $job_parameters)
131
-    {
132
-        // delete important saved options.
133
-        delete_option(self::MODELS_TO_PROCESS_OPTION_KEY);
134
-        delete_option(self::COUNT_OF_MODELS_PROCESSED);
135
-        delete_option(self::OPTION_KEY_OFFSET_RANGE_START_DATE);
136
-        delete_option(self::OPTION_KEY_OFFSET_RANGE_END_DATE);
137
-        return new JobStepResponse($job_parameters, esc_html__(
138
-            'Offset has been applied to all affected fields.',
139
-            'event_espresso'
140
-        ));
141
-    }
142
-
143
-
144
-    /**
145
-     * Contains the logic for processing a model and applying the datetime offset to affected fields on that model.
146
-     *
147
-     * @param string $model_class_name
148
-     * @throws EE_Error
149
-     */
150
-    protected function processModel($model_class_name)
151
-    {
152
-        global $wpdb;
153
-        /** @var EEM_Base $model */
154
-        $model = $model_class_name::instance();
155
-        $original_offset = self::getOffset();
156
-        $start_date_range = self::getStartDateRange();
157
-        $end_date_range = self::getEndDateRange();
158
-        $sql_date_function = $original_offset > 0 ? 'DATE_ADD' : 'DATE_SUB';
159
-        $offset = abs($original_offset) * 60;
160
-        $date_ranges = array();
161
-        // since some affected models might have two tables, we have to get our tables and set up a query for each table.
162
-        foreach ($model->get_tables() as $table) {
163
-            $query = 'UPDATE ' . $table->get_table_name();
164
-            $fields_affected = array();
165
-            $inner_query = array();
166
-            foreach ($model->_get_fields_for_table($table->get_table_alias()) as $model_field) {
167
-                if ($model_field instanceof EE_Datetime_Field) {
168
-                    $inner_query[ $model_field->get_table_column() ] = $model_field->get_table_column() . ' = '
169
-                                                                       . $sql_date_function . '('
170
-                                                                       . $model_field->get_table_column()
171
-                                                                       . ", INTERVAL {$offset} MINUTE)";
172
-                    $fields_affected[] = $model_field;
173
-                }
174
-            }
175
-            if (! $fields_affected) {
176
-                continue;
177
-            }
178
-            // do we do one query per column/field or one query for all fields on the model? It all depends on whether
179
-            // there is a date range applied or not.
180
-            if ($start_date_range instanceof DbSafeDateTime || $end_date_range instanceof DbSafeDateTime) {
181
-                $result = $this->doQueryForEachField($query, $inner_query, $start_date_range, $end_date_range);
182
-            } else {
183
-                $result = $this->doQueryForAllFields($query, $inner_query);
184
-            }
185
-
186
-            // record appropriate logs for the query
187
-            switch (true) {
188
-                case $result === false:
189
-                    // record error.
190
-                    $error_message = $wpdb->last_error;
191
-                    // handle the edgecases where last_error might be empty.
192
-                    if (! $error_message) {
193
-                        $error_message = esc_html__('Unknown mysql error occured.', 'event_espresso');
194
-                    }
195
-                    $this->recordChangeLog($model, $original_offset, $table, $fields_affected, $error_message);
196
-                    break;
197
-                case is_array($result) && ! empty($result):
198
-                    foreach ($result as $field_name => $error_message) {
199
-                        $this->recordChangeLog($model, $original_offset, $table, array($field_name), $error_message);
200
-                    }
201
-                    break;
202
-                default:
203
-                    $this->recordChangeLog($model, $original_offset, $table, $fields_affected);
204
-            }
205
-        }
206
-    }
207
-
208
-
209
-    /**
210
-     * Does the query on each $inner_query individually.
211
-     *
212
-     * @param string              $query
213
-     * @param array               $inner_query
214
-     * @param DbSafeDateTime|null $start_date_range
215
-     * @param DbSafeDateTime|null $end_date_range
216
-     * @return array  An array of any errors encountered and the fields they were for.
217
-     */
218
-    private function doQueryForEachField($query, array $inner_query, $start_date_range, $end_date_range)
219
-    {
220
-        global $wpdb;
221
-        $errors = array();
222
-        foreach ($inner_query as $field_name => $field_query) {
223
-            $query_to_run = $query;
224
-            $where_conditions = array();
225
-            $query_to_run .= ' SET ' . $field_query;
226
-            if ($start_date_range instanceof DbSafeDateTime) {
227
-                $start_date = $start_date_range->format(EE_Datetime_Field::mysql_timestamp_format);
228
-                $where_conditions[] = "{$field_name} > '{$start_date}'";
229
-            }
230
-            if ($end_date_range instanceof DbSafeDateTime) {
231
-                $end_date = $end_date_range->format(EE_Datetime_Field::mysql_timestamp_format);
232
-                $where_conditions[] = "{$field_name} < '{$end_date}'";
233
-            }
234
-            if ($where_conditions) {
235
-                $query_to_run .= ' WHERE ' . implode(' AND ', $where_conditions);
236
-            }
237
-            $result = $wpdb->query($query_to_run);
238
-            if ($result === false) {
239
-                // record error.
240
-                $error_message = $wpdb->last_error;
241
-                // handle the edgecases where last_error might be empty.
242
-                if (! $error_message) {
243
-                    $error_message = esc_html__('Unknown mysql error occured.', 'event_espresso');
244
-                }
245
-                $errors[ $field_name ] = $error_message;
246
-            }
247
-        }
248
-        return $errors;
249
-    }
250
-
251
-
252
-    /**
253
-     * Performs the query for all fields within the inner_query
254
-     *
255
-     * @param string $query
256
-     * @param array  $inner_query
257
-     * @return false|int
258
-     */
259
-    private function doQueryForAllFields($query, array $inner_query)
260
-    {
261
-        global $wpdb;
262
-        $query .= ' SET ' . implode(',', $inner_query);
263
-        return $wpdb->query($query);
264
-    }
265
-
266
-
267
-    /**
268
-     * Records a changelog entry using the given information.
269
-     *
270
-     * @param EEM_Base              $model
271
-     * @param float                 $offset
272
-     * @param EE_Table_Base         $table
273
-     * @param EE_Model_Field_Base[] $model_fields_affected
274
-     * @param string                $error_message If present then there was an error so let's record that instead.
275
-     * @throws EE_Error
276
-     */
277
-    private function recordChangeLog(
278
-        EEM_Base $model,
279
-        $offset,
280
-        EE_Table_Base $table,
281
-        $model_fields_affected,
282
-        $error_message = ''
283
-    ) {
284
-        // setup $fields list.
285
-        $fields = array();
286
-        /** @var EE_Datetime_Field $model_field */
287
-        foreach ($model_fields_affected as $model_field) {
288
-            if (! $model_field instanceof EE_Datetime_Field) {
289
-                continue;
290
-            }
291
-            $fields[] = $model_field->get_name();
292
-        }
293
-        // setup the message for the changelog entry.
294
-        $message = $error_message
295
-            ? sprintf(
296
-                esc_html__(
297
-                    'The %1$s table for the %2$s model did not have the offset of %3$f applied to its fields (%4$s), because of the following error:%5$s',
298
-                    'event_espresso'
299
-                ),
300
-                $table->get_table_name(),
301
-                $model->get_this_model_name(),
302
-                $offset,
303
-                implode(',', $fields),
304
-                $error_message
305
-            )
306
-            : sprintf(
307
-                esc_html__(
308
-                    'The %1$s table for the %2$s model has had the offset of %3$f applied to its following fields: %4$s',
309
-                    'event_espresso'
310
-                ),
311
-                $table->get_table_name(),
312
-                $model->get_this_model_name(),
313
-                $offset,
314
-                implode(',', $fields)
315
-            );
316
-        // write to the log
317
-        $changelog = EE_Change_Log::new_instance(array(
318
-            'LOG_type'    => $error_message
319
-                ? self::DATETIME_OFFSET_FIX_CHANGELOG_ERROR_TYPE
320
-                : self::DATETIME_OFFSET_FIX_CHANGELOG_TYPE,
321
-            'LOG_message' => $message,
322
-        ));
323
-        $changelog->save();
324
-    }
325
-
326
-
327
-    /**
328
-     * Returns an array of models that have datetime fields.
329
-     * This array is added to a short lived transient cache to keep having to build this list to a minimum.
330
-     *
331
-     * @return array an array of model class names.
332
-     * @throws EE_Error
333
-     * @throws InvalidDataTypeException
334
-     * @throws InvalidInterfaceException
335
-     * @throws InvalidArgumentException
336
-     */
337
-    private function getModelsWithDatetimeFields()
338
-    {
339
-        $this->getModelsToProcess();
340
-        if (! empty($this->models_with_datetime_fields)) {
341
-            return $this->models_with_datetime_fields;
342
-        }
343
-
344
-        $all_non_abstract_models = EE_Registry::instance()->non_abstract_db_models;
345
-        foreach ($all_non_abstract_models as $non_abstract_model) {
346
-            // get model instance
347
-            /** @var EEM_Base $non_abstract_model */
348
-            $non_abstract_model = $non_abstract_model::instance();
349
-            if ($non_abstract_model->get_a_field_of_type('EE_Datetime_Field') instanceof EE_Datetime_Field) {
350
-                $this->models_with_datetime_fields[] = get_class($non_abstract_model);
351
-            }
352
-        }
353
-        $this->setModelsToProcess($this->models_with_datetime_fields);
354
-        return $this->models_with_datetime_fields;
355
-    }
356
-
357
-
358
-    /**
359
-     * This simply records the models that have been processed with our tracking option.
360
-     *
361
-     * @param array $models_to_set array of model class names.
362
-     */
363
-    private function setModelsToProcess($models_to_set)
364
-    {
365
-        update_option(self::MODELS_TO_PROCESS_OPTION_KEY, $models_to_set);
366
-    }
367
-
368
-
369
-    /**
370
-     * Used to keep track of how many models have been processed for the batch
371
-     *
372
-     * @param $count
373
-     */
374
-    private function updateCountOfModelsProcessed($count = 1)
375
-    {
376
-        $count = $this->getCountOfModelsProcessed() + (int) $count;
377
-        update_option(self::COUNT_OF_MODELS_PROCESSED, $count);
378
-    }
379
-
380
-
381
-    /**
382
-     * Retrieve the tracked number of models processed between requests.
383
-     *
384
-     * @return int
385
-     */
386
-    private function getCountOfModelsProcessed()
387
-    {
388
-        return (int) get_option(self::COUNT_OF_MODELS_PROCESSED, 0);
389
-    }
390
-
391
-
392
-    /**
393
-     * Returns the models that are left to process.
394
-     *
395
-     * @return array  an array of model class names.
396
-     */
397
-    private function getModelsToProcess()
398
-    {
399
-        if (empty($this->models_with_datetime_fields)) {
400
-            $this->models_with_datetime_fields = get_option(self::MODELS_TO_PROCESS_OPTION_KEY, array());
401
-        }
402
-        return $this->models_with_datetime_fields;
403
-    }
404
-
405
-
406
-    /**
407
-     * Used to record the offset that will be applied to dates and times for EE_Datetime_Field columns.
408
-     *
409
-     * @param float $offset
410
-     */
411
-    public static function updateOffset($offset)
412
-    {
413
-        update_option(self::OFFSET_TO_APPLY_OPTION_KEY, $offset);
414
-    }
415
-
416
-
417
-    /**
418
-     * Used to retrieve the saved offset that will be applied to dates and times for EE_Datetime_Field columns.
419
-     *
420
-     * @return float
421
-     */
422
-    public static function getOffset()
423
-    {
424
-        return (float) get_option(self::OFFSET_TO_APPLY_OPTION_KEY, 0);
425
-    }
426
-
427
-
428
-    /**
429
-     * Used to set the saved offset range start date.
430
-     *
431
-     * @param DbSafeDateTime|null $start_date
432
-     */
433
-    public static function updateStartDateRange(DbSafeDateTime $start_date = null)
434
-    {
435
-        $date_to_save = $start_date instanceof DbSafeDateTime
436
-            ? $start_date->format('U')
437
-            : '';
438
-        update_option(self::OPTION_KEY_OFFSET_RANGE_START_DATE, $date_to_save);
439
-    }
440
-
441
-
442
-    /**
443
-     * Used to get the saved offset range start date.
444
-     *
445
-     * @return DbSafeDateTime|null
446
-     */
447
-    public static function getStartDateRange()
448
-    {
449
-        $start_date = get_option(self::OPTION_KEY_OFFSET_RANGE_START_DATE, null);
450
-        try {
451
-            $datetime = DateTime::createFromFormat('U', $start_date, new DateTimeZone('UTC'));
452
-            $start_date = $datetime instanceof DateTime
453
-                ? DbSafeDateTime::createFromDateTime($datetime)
454
-                : null;
455
-        } catch (Exception $e) {
456
-            $start_date = null;
457
-        }
458
-        return $start_date;
459
-    }
460
-
461
-
462
-    /**
463
-     * Used to set the saved offset range end date.
464
-     *
465
-     * @param DbSafeDateTime|null $end_date
466
-     */
467
-    public static function updateEndDateRange(DbSafeDateTime $end_date = null)
468
-    {
469
-        $date_to_save = $end_date instanceof DbSafeDateTime
470
-            ? $end_date->format('U')
471
-            : '';
472
-        update_option(self::OPTION_KEY_OFFSET_RANGE_END_DATE, $date_to_save);
473
-    }
474
-
475
-
476
-    /**
477
-     * Used to get the saved offset range end date.
478
-     *
479
-     * @return DbSafeDateTime|null
480
-     */
481
-    public static function getEndDateRange()
482
-    {
483
-        $end_date = get_option(self::OPTION_KEY_OFFSET_RANGE_END_DATE, null);
484
-        try {
485
-            $datetime = DateTime::createFromFormat('U', $end_date, new DateTimeZone('UTC'));
486
-            $end_date = $datetime instanceof Datetime
487
-                ? DbSafeDateTime::createFromDateTime($datetime)
488
-                : null;
489
-        } catch (Exception $e) {
490
-            $end_date = null;
491
-        }
492
-        return $end_date;
493
-    }
27
+	/**
28
+	 * Key for the option used to track which models have been processed when doing the batches.
29
+	 */
30
+	const MODELS_TO_PROCESS_OPTION_KEY = 'ee_models_processed_for_datetime_offset_fix';
31
+
32
+
33
+	const COUNT_OF_MODELS_PROCESSED = 'ee_count_of_ee_models_processed_for_datetime_offset_fixed';
34
+
35
+	/**
36
+	 * Key for the option used to track what the current offset is that will be applied when this tool is executed.
37
+	 */
38
+	const OFFSET_TO_APPLY_OPTION_KEY = 'ee_datetime_offset_fix_offset_to_apply';
39
+
40
+
41
+	const OPTION_KEY_OFFSET_RANGE_START_DATE = 'ee_datetime_offset_start_date_range';
42
+
43
+
44
+	const OPTION_KEY_OFFSET_RANGE_END_DATE = 'ee_datetime_offset_end_date_range';
45
+
46
+
47
+	/**
48
+	 * String labelling the datetime offset fix type for change-log entries.
49
+	 */
50
+	const DATETIME_OFFSET_FIX_CHANGELOG_TYPE = 'datetime_offset_fix';
51
+
52
+
53
+	/**
54
+	 * String labelling a datetime offset fix error for change-log entries.
55
+	 */
56
+	const DATETIME_OFFSET_FIX_CHANGELOG_ERROR_TYPE = 'datetime_offset_fix_error';
57
+
58
+	/**
59
+	 * @var EEM_Base[]
60
+	 */
61
+	protected $models_with_datetime_fields = array();
62
+
63
+	// phpcs:disable PSR1.Methods.CamelCapsMethodName.NotCamelCaps
64
+
65
+	/**
66
+	 * Performs any necessary setup for starting the job. This is also a good
67
+	 * place to setup the $job_arguments which will be used for subsequent HTTP requests
68
+	 * when continue_job will be called
69
+	 *
70
+	 * @param JobParameters $job_parameters
71
+	 * @return JobStepResponse
72
+	 * @throws EE_Error
73
+	 * @throws InvalidArgumentException
74
+	 * @throws InvalidDataTypeException
75
+	 * @throws InvalidInterfaceException
76
+	 */
77
+	public function create_job(JobParameters $job_parameters)
78
+	{
79
+		$models_with_datetime_fields = $this->getModelsWithDatetimeFields();
80
+		// we'll be doing each model as a batch.
81
+		$job_parameters->set_job_size(count($models_with_datetime_fields));
82
+		return new JobStepResponse(
83
+			$job_parameters,
84
+			esc_html__('Starting Datetime Offset Fix', 'event_espresso')
85
+		);
86
+	}
87
+
88
+	/**
89
+	 * Performs another step of the job
90
+	 *
91
+	 * @param JobParameters $job_parameters
92
+	 * @param int           $batch_size
93
+	 * @return JobStepResponse
94
+	 * @throws EE_Error
95
+	 * @throws InvalidArgumentException
96
+	 * @throws InvalidDataTypeException
97
+	 * @throws InvalidInterfaceException
98
+	 */
99
+	public function continue_job(JobParameters $job_parameters, $batch_size = 50)
100
+	{
101
+		$models_to_process = $this->getModelsWithDatetimeFields();
102
+		// let's pop off the a model and do the query to apply the offset.
103
+		$model_to_process = array_pop($models_to_process);
104
+		// update our record
105
+		$this->setModelsToProcess($models_to_process);
106
+		$this->processModel($model_to_process);
107
+		$this->updateCountOfModelsProcessed();
108
+		$job_parameters->set_units_processed($this->getCountOfModelsProcessed());
109
+		if (count($models_to_process) > 0) {
110
+			$job_parameters->set_status(JobParameters::status_continue);
111
+		} else {
112
+			$job_parameters->set_status(JobParameters::status_complete);
113
+		}
114
+		return new JobStepResponse(
115
+			$job_parameters,
116
+			sprintf(
117
+				esc_html__('Updated the offset for all datetime fields on the %s model.', 'event_espresso'),
118
+				$model_to_process
119
+			)
120
+		);
121
+	}
122
+
123
+	/**
124
+	 * Performs any clean-up logic when we know the job is completed
125
+	 *
126
+	 * @param JobParameters $job_parameters
127
+	 * @return JobStepResponse
128
+	 * @throws BatchRequestException
129
+	 */
130
+	public function cleanup_job(JobParameters $job_parameters)
131
+	{
132
+		// delete important saved options.
133
+		delete_option(self::MODELS_TO_PROCESS_OPTION_KEY);
134
+		delete_option(self::COUNT_OF_MODELS_PROCESSED);
135
+		delete_option(self::OPTION_KEY_OFFSET_RANGE_START_DATE);
136
+		delete_option(self::OPTION_KEY_OFFSET_RANGE_END_DATE);
137
+		return new JobStepResponse($job_parameters, esc_html__(
138
+			'Offset has been applied to all affected fields.',
139
+			'event_espresso'
140
+		));
141
+	}
142
+
143
+
144
+	/**
145
+	 * Contains the logic for processing a model and applying the datetime offset to affected fields on that model.
146
+	 *
147
+	 * @param string $model_class_name
148
+	 * @throws EE_Error
149
+	 */
150
+	protected function processModel($model_class_name)
151
+	{
152
+		global $wpdb;
153
+		/** @var EEM_Base $model */
154
+		$model = $model_class_name::instance();
155
+		$original_offset = self::getOffset();
156
+		$start_date_range = self::getStartDateRange();
157
+		$end_date_range = self::getEndDateRange();
158
+		$sql_date_function = $original_offset > 0 ? 'DATE_ADD' : 'DATE_SUB';
159
+		$offset = abs($original_offset) * 60;
160
+		$date_ranges = array();
161
+		// since some affected models might have two tables, we have to get our tables and set up a query for each table.
162
+		foreach ($model->get_tables() as $table) {
163
+			$query = 'UPDATE ' . $table->get_table_name();
164
+			$fields_affected = array();
165
+			$inner_query = array();
166
+			foreach ($model->_get_fields_for_table($table->get_table_alias()) as $model_field) {
167
+				if ($model_field instanceof EE_Datetime_Field) {
168
+					$inner_query[ $model_field->get_table_column() ] = $model_field->get_table_column() . ' = '
169
+																	   . $sql_date_function . '('
170
+																	   . $model_field->get_table_column()
171
+																	   . ", INTERVAL {$offset} MINUTE)";
172
+					$fields_affected[] = $model_field;
173
+				}
174
+			}
175
+			if (! $fields_affected) {
176
+				continue;
177
+			}
178
+			// do we do one query per column/field or one query for all fields on the model? It all depends on whether
179
+			// there is a date range applied or not.
180
+			if ($start_date_range instanceof DbSafeDateTime || $end_date_range instanceof DbSafeDateTime) {
181
+				$result = $this->doQueryForEachField($query, $inner_query, $start_date_range, $end_date_range);
182
+			} else {
183
+				$result = $this->doQueryForAllFields($query, $inner_query);
184
+			}
185
+
186
+			// record appropriate logs for the query
187
+			switch (true) {
188
+				case $result === false:
189
+					// record error.
190
+					$error_message = $wpdb->last_error;
191
+					// handle the edgecases where last_error might be empty.
192
+					if (! $error_message) {
193
+						$error_message = esc_html__('Unknown mysql error occured.', 'event_espresso');
194
+					}
195
+					$this->recordChangeLog($model, $original_offset, $table, $fields_affected, $error_message);
196
+					break;
197
+				case is_array($result) && ! empty($result):
198
+					foreach ($result as $field_name => $error_message) {
199
+						$this->recordChangeLog($model, $original_offset, $table, array($field_name), $error_message);
200
+					}
201
+					break;
202
+				default:
203
+					$this->recordChangeLog($model, $original_offset, $table, $fields_affected);
204
+			}
205
+		}
206
+	}
207
+
208
+
209
+	/**
210
+	 * Does the query on each $inner_query individually.
211
+	 *
212
+	 * @param string              $query
213
+	 * @param array               $inner_query
214
+	 * @param DbSafeDateTime|null $start_date_range
215
+	 * @param DbSafeDateTime|null $end_date_range
216
+	 * @return array  An array of any errors encountered and the fields they were for.
217
+	 */
218
+	private function doQueryForEachField($query, array $inner_query, $start_date_range, $end_date_range)
219
+	{
220
+		global $wpdb;
221
+		$errors = array();
222
+		foreach ($inner_query as $field_name => $field_query) {
223
+			$query_to_run = $query;
224
+			$where_conditions = array();
225
+			$query_to_run .= ' SET ' . $field_query;
226
+			if ($start_date_range instanceof DbSafeDateTime) {
227
+				$start_date = $start_date_range->format(EE_Datetime_Field::mysql_timestamp_format);
228
+				$where_conditions[] = "{$field_name} > '{$start_date}'";
229
+			}
230
+			if ($end_date_range instanceof DbSafeDateTime) {
231
+				$end_date = $end_date_range->format(EE_Datetime_Field::mysql_timestamp_format);
232
+				$where_conditions[] = "{$field_name} < '{$end_date}'";
233
+			}
234
+			if ($where_conditions) {
235
+				$query_to_run .= ' WHERE ' . implode(' AND ', $where_conditions);
236
+			}
237
+			$result = $wpdb->query($query_to_run);
238
+			if ($result === false) {
239
+				// record error.
240
+				$error_message = $wpdb->last_error;
241
+				// handle the edgecases where last_error might be empty.
242
+				if (! $error_message) {
243
+					$error_message = esc_html__('Unknown mysql error occured.', 'event_espresso');
244
+				}
245
+				$errors[ $field_name ] = $error_message;
246
+			}
247
+		}
248
+		return $errors;
249
+	}
250
+
251
+
252
+	/**
253
+	 * Performs the query for all fields within the inner_query
254
+	 *
255
+	 * @param string $query
256
+	 * @param array  $inner_query
257
+	 * @return false|int
258
+	 */
259
+	private function doQueryForAllFields($query, array $inner_query)
260
+	{
261
+		global $wpdb;
262
+		$query .= ' SET ' . implode(',', $inner_query);
263
+		return $wpdb->query($query);
264
+	}
265
+
266
+
267
+	/**
268
+	 * Records a changelog entry using the given information.
269
+	 *
270
+	 * @param EEM_Base              $model
271
+	 * @param float                 $offset
272
+	 * @param EE_Table_Base         $table
273
+	 * @param EE_Model_Field_Base[] $model_fields_affected
274
+	 * @param string                $error_message If present then there was an error so let's record that instead.
275
+	 * @throws EE_Error
276
+	 */
277
+	private function recordChangeLog(
278
+		EEM_Base $model,
279
+		$offset,
280
+		EE_Table_Base $table,
281
+		$model_fields_affected,
282
+		$error_message = ''
283
+	) {
284
+		// setup $fields list.
285
+		$fields = array();
286
+		/** @var EE_Datetime_Field $model_field */
287
+		foreach ($model_fields_affected as $model_field) {
288
+			if (! $model_field instanceof EE_Datetime_Field) {
289
+				continue;
290
+			}
291
+			$fields[] = $model_field->get_name();
292
+		}
293
+		// setup the message for the changelog entry.
294
+		$message = $error_message
295
+			? sprintf(
296
+				esc_html__(
297
+					'The %1$s table for the %2$s model did not have the offset of %3$f applied to its fields (%4$s), because of the following error:%5$s',
298
+					'event_espresso'
299
+				),
300
+				$table->get_table_name(),
301
+				$model->get_this_model_name(),
302
+				$offset,
303
+				implode(',', $fields),
304
+				$error_message
305
+			)
306
+			: sprintf(
307
+				esc_html__(
308
+					'The %1$s table for the %2$s model has had the offset of %3$f applied to its following fields: %4$s',
309
+					'event_espresso'
310
+				),
311
+				$table->get_table_name(),
312
+				$model->get_this_model_name(),
313
+				$offset,
314
+				implode(',', $fields)
315
+			);
316
+		// write to the log
317
+		$changelog = EE_Change_Log::new_instance(array(
318
+			'LOG_type'    => $error_message
319
+				? self::DATETIME_OFFSET_FIX_CHANGELOG_ERROR_TYPE
320
+				: self::DATETIME_OFFSET_FIX_CHANGELOG_TYPE,
321
+			'LOG_message' => $message,
322
+		));
323
+		$changelog->save();
324
+	}
325
+
326
+
327
+	/**
328
+	 * Returns an array of models that have datetime fields.
329
+	 * This array is added to a short lived transient cache to keep having to build this list to a minimum.
330
+	 *
331
+	 * @return array an array of model class names.
332
+	 * @throws EE_Error
333
+	 * @throws InvalidDataTypeException
334
+	 * @throws InvalidInterfaceException
335
+	 * @throws InvalidArgumentException
336
+	 */
337
+	private function getModelsWithDatetimeFields()
338
+	{
339
+		$this->getModelsToProcess();
340
+		if (! empty($this->models_with_datetime_fields)) {
341
+			return $this->models_with_datetime_fields;
342
+		}
343
+
344
+		$all_non_abstract_models = EE_Registry::instance()->non_abstract_db_models;
345
+		foreach ($all_non_abstract_models as $non_abstract_model) {
346
+			// get model instance
347
+			/** @var EEM_Base $non_abstract_model */
348
+			$non_abstract_model = $non_abstract_model::instance();
349
+			if ($non_abstract_model->get_a_field_of_type('EE_Datetime_Field') instanceof EE_Datetime_Field) {
350
+				$this->models_with_datetime_fields[] = get_class($non_abstract_model);
351
+			}
352
+		}
353
+		$this->setModelsToProcess($this->models_with_datetime_fields);
354
+		return $this->models_with_datetime_fields;
355
+	}
356
+
357
+
358
+	/**
359
+	 * This simply records the models that have been processed with our tracking option.
360
+	 *
361
+	 * @param array $models_to_set array of model class names.
362
+	 */
363
+	private function setModelsToProcess($models_to_set)
364
+	{
365
+		update_option(self::MODELS_TO_PROCESS_OPTION_KEY, $models_to_set);
366
+	}
367
+
368
+
369
+	/**
370
+	 * Used to keep track of how many models have been processed for the batch
371
+	 *
372
+	 * @param $count
373
+	 */
374
+	private function updateCountOfModelsProcessed($count = 1)
375
+	{
376
+		$count = $this->getCountOfModelsProcessed() + (int) $count;
377
+		update_option(self::COUNT_OF_MODELS_PROCESSED, $count);
378
+	}
379
+
380
+
381
+	/**
382
+	 * Retrieve the tracked number of models processed between requests.
383
+	 *
384
+	 * @return int
385
+	 */
386
+	private function getCountOfModelsProcessed()
387
+	{
388
+		return (int) get_option(self::COUNT_OF_MODELS_PROCESSED, 0);
389
+	}
390
+
391
+
392
+	/**
393
+	 * Returns the models that are left to process.
394
+	 *
395
+	 * @return array  an array of model class names.
396
+	 */
397
+	private function getModelsToProcess()
398
+	{
399
+		if (empty($this->models_with_datetime_fields)) {
400
+			$this->models_with_datetime_fields = get_option(self::MODELS_TO_PROCESS_OPTION_KEY, array());
401
+		}
402
+		return $this->models_with_datetime_fields;
403
+	}
404
+
405
+
406
+	/**
407
+	 * Used to record the offset that will be applied to dates and times for EE_Datetime_Field columns.
408
+	 *
409
+	 * @param float $offset
410
+	 */
411
+	public static function updateOffset($offset)
412
+	{
413
+		update_option(self::OFFSET_TO_APPLY_OPTION_KEY, $offset);
414
+	}
415
+
416
+
417
+	/**
418
+	 * Used to retrieve the saved offset that will be applied to dates and times for EE_Datetime_Field columns.
419
+	 *
420
+	 * @return float
421
+	 */
422
+	public static function getOffset()
423
+	{
424
+		return (float) get_option(self::OFFSET_TO_APPLY_OPTION_KEY, 0);
425
+	}
426
+
427
+
428
+	/**
429
+	 * Used to set the saved offset range start date.
430
+	 *
431
+	 * @param DbSafeDateTime|null $start_date
432
+	 */
433
+	public static function updateStartDateRange(DbSafeDateTime $start_date = null)
434
+	{
435
+		$date_to_save = $start_date instanceof DbSafeDateTime
436
+			? $start_date->format('U')
437
+			: '';
438
+		update_option(self::OPTION_KEY_OFFSET_RANGE_START_DATE, $date_to_save);
439
+	}
440
+
441
+
442
+	/**
443
+	 * Used to get the saved offset range start date.
444
+	 *
445
+	 * @return DbSafeDateTime|null
446
+	 */
447
+	public static function getStartDateRange()
448
+	{
449
+		$start_date = get_option(self::OPTION_KEY_OFFSET_RANGE_START_DATE, null);
450
+		try {
451
+			$datetime = DateTime::createFromFormat('U', $start_date, new DateTimeZone('UTC'));
452
+			$start_date = $datetime instanceof DateTime
453
+				? DbSafeDateTime::createFromDateTime($datetime)
454
+				: null;
455
+		} catch (Exception $e) {
456
+			$start_date = null;
457
+		}
458
+		return $start_date;
459
+	}
460
+
461
+
462
+	/**
463
+	 * Used to set the saved offset range end date.
464
+	 *
465
+	 * @param DbSafeDateTime|null $end_date
466
+	 */
467
+	public static function updateEndDateRange(DbSafeDateTime $end_date = null)
468
+	{
469
+		$date_to_save = $end_date instanceof DbSafeDateTime
470
+			? $end_date->format('U')
471
+			: '';
472
+		update_option(self::OPTION_KEY_OFFSET_RANGE_END_DATE, $date_to_save);
473
+	}
474
+
475
+
476
+	/**
477
+	 * Used to get the saved offset range end date.
478
+	 *
479
+	 * @return DbSafeDateTime|null
480
+	 */
481
+	public static function getEndDateRange()
482
+	{
483
+		$end_date = get_option(self::OPTION_KEY_OFFSET_RANGE_END_DATE, null);
484
+		try {
485
+			$datetime = DateTime::createFromFormat('U', $end_date, new DateTimeZone('UTC'));
486
+			$end_date = $datetime instanceof Datetime
487
+				? DbSafeDateTime::createFromDateTime($datetime)
488
+				: null;
489
+		} catch (Exception $e) {
490
+			$end_date = null;
491
+		}
492
+		return $end_date;
493
+	}
494 494
 }
Please login to merge, or discard this patch.
Spacing   +12 added lines, -12 removed lines patch added patch discarded remove patch
@@ -160,19 +160,19 @@  discard block
 block discarded – undo
160 160
         $date_ranges = array();
161 161
         // since some affected models might have two tables, we have to get our tables and set up a query for each table.
162 162
         foreach ($model->get_tables() as $table) {
163
-            $query = 'UPDATE ' . $table->get_table_name();
163
+            $query = 'UPDATE '.$table->get_table_name();
164 164
             $fields_affected = array();
165 165
             $inner_query = array();
166 166
             foreach ($model->_get_fields_for_table($table->get_table_alias()) as $model_field) {
167 167
                 if ($model_field instanceof EE_Datetime_Field) {
168
-                    $inner_query[ $model_field->get_table_column() ] = $model_field->get_table_column() . ' = '
169
-                                                                       . $sql_date_function . '('
168
+                    $inner_query[$model_field->get_table_column()] = $model_field->get_table_column().' = '
169
+                                                                       . $sql_date_function.'('
170 170
                                                                        . $model_field->get_table_column()
171 171
                                                                        . ", INTERVAL {$offset} MINUTE)";
172 172
                     $fields_affected[] = $model_field;
173 173
                 }
174 174
             }
175
-            if (! $fields_affected) {
175
+            if ( ! $fields_affected) {
176 176
                 continue;
177 177
             }
178 178
             // do we do one query per column/field or one query for all fields on the model? It all depends on whether
@@ -189,7 +189,7 @@  discard block
 block discarded – undo
189 189
                     // record error.
190 190
                     $error_message = $wpdb->last_error;
191 191
                     // handle the edgecases where last_error might be empty.
192
-                    if (! $error_message) {
192
+                    if ( ! $error_message) {
193 193
                         $error_message = esc_html__('Unknown mysql error occured.', 'event_espresso');
194 194
                     }
195 195
                     $this->recordChangeLog($model, $original_offset, $table, $fields_affected, $error_message);
@@ -222,7 +222,7 @@  discard block
 block discarded – undo
222 222
         foreach ($inner_query as $field_name => $field_query) {
223 223
             $query_to_run = $query;
224 224
             $where_conditions = array();
225
-            $query_to_run .= ' SET ' . $field_query;
225
+            $query_to_run .= ' SET '.$field_query;
226 226
             if ($start_date_range instanceof DbSafeDateTime) {
227 227
                 $start_date = $start_date_range->format(EE_Datetime_Field::mysql_timestamp_format);
228 228
                 $where_conditions[] = "{$field_name} > '{$start_date}'";
@@ -232,17 +232,17 @@  discard block
 block discarded – undo
232 232
                 $where_conditions[] = "{$field_name} < '{$end_date}'";
233 233
             }
234 234
             if ($where_conditions) {
235
-                $query_to_run .= ' WHERE ' . implode(' AND ', $where_conditions);
235
+                $query_to_run .= ' WHERE '.implode(' AND ', $where_conditions);
236 236
             }
237 237
             $result = $wpdb->query($query_to_run);
238 238
             if ($result === false) {
239 239
                 // record error.
240 240
                 $error_message = $wpdb->last_error;
241 241
                 // handle the edgecases where last_error might be empty.
242
-                if (! $error_message) {
242
+                if ( ! $error_message) {
243 243
                     $error_message = esc_html__('Unknown mysql error occured.', 'event_espresso');
244 244
                 }
245
-                $errors[ $field_name ] = $error_message;
245
+                $errors[$field_name] = $error_message;
246 246
             }
247 247
         }
248 248
         return $errors;
@@ -259,7 +259,7 @@  discard block
 block discarded – undo
259 259
     private function doQueryForAllFields($query, array $inner_query)
260 260
     {
261 261
         global $wpdb;
262
-        $query .= ' SET ' . implode(',', $inner_query);
262
+        $query .= ' SET '.implode(',', $inner_query);
263 263
         return $wpdb->query($query);
264 264
     }
265 265
 
@@ -285,7 +285,7 @@  discard block
 block discarded – undo
285 285
         $fields = array();
286 286
         /** @var EE_Datetime_Field $model_field */
287 287
         foreach ($model_fields_affected as $model_field) {
288
-            if (! $model_field instanceof EE_Datetime_Field) {
288
+            if ( ! $model_field instanceof EE_Datetime_Field) {
289 289
                 continue;
290 290
             }
291 291
             $fields[] = $model_field->get_name();
@@ -337,7 +337,7 @@  discard block
 block discarded – undo
337 337
     private function getModelsWithDatetimeFields()
338 338
     {
339 339
         $this->getModelsToProcess();
340
-        if (! empty($this->models_with_datetime_fields)) {
340
+        if ( ! empty($this->models_with_datetime_fields)) {
341 341
             return $this->models_with_datetime_fields;
342 342
         }
343 343
 
Please login to merge, or discard this patch.
core/libraries/batch/Helpers/JobParameters.php 2 patches
Indentation   +392 added lines, -392 removed lines patch added patch discarded remove patch
@@ -14,396 +14,396 @@
 block discarded – undo
14 14
  */
15 15
 class JobParameters
16 16
 {
17
-    // phpcs:disable Generic.NamingConventions.UpperCaseConstantName.ClassConstantNotUpperCase
18
-    // phpcs:disable PSR1.Methods.CamelCapsMethodName.NotCamelCaps
19
-    // phpcs:disable PSR2.Classes.PropertyDeclaration.Underscore
20
-    /**
21
-     * status indicating the job should continue
22
-     */
23
-    const status_continue = 'continue';
24
-
25
-    /**
26
-     * status indicated the job has been completed successfully and should be cleaned up next
27
-     */
28
-    const status_complete = 'complete';
29
-
30
-    /**
31
-     * status indicating there was an error and the job should be cleaned up
32
-     */
33
-    const status_error = 'error';
34
-
35
-    /**
36
-     * status indicating the job has been cleaned up, and so this is probably the last
37
-     * time you'll see this job
38
-     */
39
-    const status_cleaned_up = 'cleaned_up';
40
-
41
-    const wp_option_prefix = 'ee_job_parameters_';
42
-
43
-
44
-    /**
45
-     * String uniquely identifying the job
46
-     *
47
-     * @var string
48
-     */
49
-    protected $_job_id;
50
-
51
-    /**
52
-     * @var string
53
-     */
54
-    protected $_classname;
55
-
56
-    /**
57
-     * @var array
58
-     */
59
-    protected $_request_data;
60
-
61
-    /**
62
-     * Array of any extra data we want to remember about this request, that
63
-     * wasn't necessarily past in with the request data
64
-     *
65
-     * @var array
66
-     */
67
-    protected $_extra_data;
68
-
69
-    /**
70
-     * Estimate of how many units HAVE been processed
71
-     *
72
-     * @var int
73
-     */
74
-    protected $_units_processed = 0;
75
-
76
-    /**
77
-     * @var string
78
-     */
79
-    protected $_status;
80
-
81
-    /**
82
-     * The size of the total job in whatever units you want.
83
-     * If you can't provide an estimate leave as 0.
84
-     * Once _units_processed equals _job_size, we should be done
85
-     *
86
-     * @var int
87
-     */
88
-    protected $_job_size = 0;
89
-
90
-
91
-    /**
92
-     * @param string $job_id
93
-     * @param string $classname
94
-     * @param array  $request_data
95
-     * @param array  $extra_data
96
-     */
97
-    public function __construct($job_id, $classname, $request_data, $extra_data = array())
98
-    {
99
-        $this->set_job_id($job_id);
100
-        $this->set_classname($classname);
101
-        $this->set_request_data($request_data);
102
-        $this->set_extra_data($extra_data);
103
-        $this->set_status(JobParameters::status_continue);
104
-    }
105
-
106
-
107
-    /**
108
-     * Returns the array of strings of valid stati
109
-     *
110
-     * @return array
111
-     */
112
-    public static function valid_stati()
113
-    {
114
-        return array(
115
-            JobParameters::status_complete,
116
-            JobParameters::status_continue,
117
-            JobParameters::status_error,
118
-            JobParameters::status_cleaned_up,
119
-        );
120
-    }
121
-
122
-
123
-    /**
124
-     * Saves this option to the database (wordpress options table)
125
-     *
126
-     * @param boolean $first
127
-     * @return boolean success
128
-     */
129
-    public function save($first = false)
130
-    {
131
-        $object_vars = get_object_vars($this);
132
-        if ($first) {
133
-            return add_option($this->option_name(), $object_vars, null, 'no');
134
-        } else {
135
-            return update_option($this->option_name(), $object_vars);
136
-        }
137
-    }
138
-
139
-
140
-    /**
141
-     * Deletes the job from teh database, although this object is still usable
142
-     * for the rest of the request
143
-     *
144
-     * @return boolean
145
-     */
146
-    public function delete()
147
-    {
148
-        return delete_option($this->option_name());
149
-    }
150
-
151
-
152
-    /**
153
-     * Loads the specified job from the database
154
-     *
155
-     * @param string $job_id
156
-     * @return JobParameters
157
-     * @throws BatchRequestException
158
-     */
159
-    public static function load($job_id)
160
-    {
161
-        $job_parameter_vars = get_option(JobParameters::wp_option_prefix . $job_id);
162
-        if (! is_array($job_parameter_vars) ||
163
-            ! isset($job_parameter_vars['_classname']) ||
164
-            ! isset($job_parameter_vars['_request_data'])
165
-        ) {
166
-            throw new BatchRequestException(
167
-                sprintf(
168
-                    __(
169
-                        'Could not retrieve job %1$s from the Wordpress options table, and so the job could not continue. The wordpress option was %2$s',
170
-                        'event_espresso'
171
-                    ),
172
-                    $job_id,
173
-                    get_option(JobParameters::wp_option_prefix . $job_id)
174
-                )
175
-            );
176
-        }
177
-        $job_parameters = new JobParameters(
178
-            $job_id,
179
-            $job_parameter_vars['_classname'],
180
-            $job_parameter_vars['_request_data']
181
-        );
182
-        foreach ($job_parameter_vars as $key => $value) {
183
-            $job_parameters->{$key} = $value;
184
-        }
185
-        return $job_parameters;
186
-    }
187
-
188
-
189
-    /**
190
-     * Gets the job's unique string
191
-     *
192
-     * @return string
193
-     */
194
-    public function job_id()
195
-    {
196
-        return $this->_job_id;
197
-    }
198
-
199
-
200
-    /**
201
-     * Gets the classname that should run this job
202
-     *
203
-     * @return string
204
-     */
205
-    public function classname()
206
-    {
207
-        return $this->_classname;
208
-    }
209
-
210
-
211
-    /**
212
-     * Gets the original array of $_REQUEST data for this job
213
-     *
214
-     * @return array
215
-     */
216
-    public function request_data()
217
-    {
218
-        return $this->_request_data;
219
-    }
220
-
221
-
222
-    /**
223
-     * Gets a single item from the request data
224
-     *
225
-     * @param string       $key
226
-     * @param string|array $default
227
-     * @return string|array
228
-     */
229
-    public function request_datum($key, $default = '')
230
-    {
231
-        if (isset($this->_request_data[ $key ])) {
232
-            return $this->_request_data[ $key ];
233
-        } else {
234
-            return $default;
235
-        }
236
-    }
237
-
238
-
239
-    /**
240
-     * Gets a single item from the extra data
241
-     *
242
-     * @param string       $key
243
-     * @param string|array $default
244
-     * @return string|array
245
-     */
246
-    public function extra_datum($key, $default = '')
247
-    {
248
-        if (isset($this->_extra_data[ $key ])) {
249
-            return $this->_extra_data[ $key ];
250
-        } else {
251
-            return $default;
252
-        }
253
-    }
254
-
255
-
256
-    /**
257
-     * Adds an extra piece of extra data that we're going to want later during the job
258
-     *
259
-     * @param string                $key
260
-     * @param string|int|array|null $value almost any extra data you want to store
261
-     */
262
-    public function add_extra_data($key, $value)
263
-    {
264
-        $this->_extra_data[ $key ] = $value;
265
-    }
266
-
267
-
268
-    /**
269
-     * Array of any extra data we want to store
270
-     *
271
-     * @return array
272
-     */
273
-    public function extra_data()
274
-    {
275
-        return $this->_extra_data;
276
-    }
277
-
278
-
279
-    /**
280
-     * Returns the job size, in whatever units you want
281
-     *
282
-     * @return int
283
-     */
284
-    public function job_size()
285
-    {
286
-        return $this->_job_size;
287
-    }
288
-
289
-
290
-    /**
291
-     * Sets the job size. You decide what units to use
292
-     *
293
-     * @param int $size
294
-     */
295
-    public function set_job_size($size)
296
-    {
297
-        $this->_job_size = $size;
298
-    }
299
-
300
-
301
-    /**
302
-     * The number of "units" processed, in the same units as the "job size"
303
-     *
304
-     * @return int
305
-     */
306
-    public function units_processed()
307
-    {
308
-        return $this->_units_processed;
309
-    }
310
-
311
-
312
-    /**
313
-     * Marks more units as processed
314
-     *
315
-     * @param int $newly_processed
316
-     * @return int updated units processed
317
-     */
318
-    public function mark_processed($newly_processed)
319
-    {
320
-        $this->_units_processed += $newly_processed;
321
-        return $this->_units_processed;
322
-    }
323
-
324
-
325
-    /**
326
-     * Sets the total count of units processed. You might prefer to use mark_processed
327
-     *
328
-     * @param int $total_units_processed
329
-     */
330
-    public function set_units_processed($total_units_processed)
331
-    {
332
-        $this->_units_processed = $total_units_processed;
333
-    }
334
-
335
-
336
-    /**
337
-     * Sets the job's ID
338
-     *
339
-     * @param string $job_id
340
-     */
341
-    public function set_job_id($job_id)
342
-    {
343
-        $this->_job_id = $job_id;
344
-    }
345
-
346
-
347
-    /**
348
-     * sets the classname
349
-     *
350
-     * @param string $classname
351
-     */
352
-    public function set_classname($classname)
353
-    {
354
-        $this->_classname = $classname;
355
-    }
356
-
357
-
358
-    /**
359
-     * Sets the request data
360
-     *
361
-     * @param array $request_data
362
-     */
363
-    public function set_request_data($request_data)
364
-    {
365
-        $this->_request_data = $request_data;
366
-    }
367
-
368
-
369
-    /**
370
-     * Sets the array of extra data we want to store on this request
371
-     *
372
-     * @param array $extra_data
373
-     */
374
-    public function set_extra_data($extra_data)
375
-    {
376
-        $this->_extra_data = $extra_data;
377
-    }
378
-
379
-
380
-    /**
381
-     * Gets the name of the wordpress option that should store these job parameters
382
-     *
383
-     * @return string
384
-     */
385
-    public function option_name()
386
-    {
387
-        return JobParameters::wp_option_prefix . $this->job_id();
388
-    }
389
-
390
-
391
-    /**
392
-     * Gets the job\s current status. One of JobParameters::valid_stati();
393
-     *
394
-     * @return string
395
-     */
396
-    public function status()
397
-    {
398
-        return $this->_status;
399
-    }
400
-
401
-
402
-    /**
403
-     * @param string $status on eof JobParameters::valid_stati()
404
-     */
405
-    public function set_status($status)
406
-    {
407
-        $this->_status = $status;
408
-    }
17
+	// phpcs:disable Generic.NamingConventions.UpperCaseConstantName.ClassConstantNotUpperCase
18
+	// phpcs:disable PSR1.Methods.CamelCapsMethodName.NotCamelCaps
19
+	// phpcs:disable PSR2.Classes.PropertyDeclaration.Underscore
20
+	/**
21
+	 * status indicating the job should continue
22
+	 */
23
+	const status_continue = 'continue';
24
+
25
+	/**
26
+	 * status indicated the job has been completed successfully and should be cleaned up next
27
+	 */
28
+	const status_complete = 'complete';
29
+
30
+	/**
31
+	 * status indicating there was an error and the job should be cleaned up
32
+	 */
33
+	const status_error = 'error';
34
+
35
+	/**
36
+	 * status indicating the job has been cleaned up, and so this is probably the last
37
+	 * time you'll see this job
38
+	 */
39
+	const status_cleaned_up = 'cleaned_up';
40
+
41
+	const wp_option_prefix = 'ee_job_parameters_';
42
+
43
+
44
+	/**
45
+	 * String uniquely identifying the job
46
+	 *
47
+	 * @var string
48
+	 */
49
+	protected $_job_id;
50
+
51
+	/**
52
+	 * @var string
53
+	 */
54
+	protected $_classname;
55
+
56
+	/**
57
+	 * @var array
58
+	 */
59
+	protected $_request_data;
60
+
61
+	/**
62
+	 * Array of any extra data we want to remember about this request, that
63
+	 * wasn't necessarily past in with the request data
64
+	 *
65
+	 * @var array
66
+	 */
67
+	protected $_extra_data;
68
+
69
+	/**
70
+	 * Estimate of how many units HAVE been processed
71
+	 *
72
+	 * @var int
73
+	 */
74
+	protected $_units_processed = 0;
75
+
76
+	/**
77
+	 * @var string
78
+	 */
79
+	protected $_status;
80
+
81
+	/**
82
+	 * The size of the total job in whatever units you want.
83
+	 * If you can't provide an estimate leave as 0.
84
+	 * Once _units_processed equals _job_size, we should be done
85
+	 *
86
+	 * @var int
87
+	 */
88
+	protected $_job_size = 0;
89
+
90
+
91
+	/**
92
+	 * @param string $job_id
93
+	 * @param string $classname
94
+	 * @param array  $request_data
95
+	 * @param array  $extra_data
96
+	 */
97
+	public function __construct($job_id, $classname, $request_data, $extra_data = array())
98
+	{
99
+		$this->set_job_id($job_id);
100
+		$this->set_classname($classname);
101
+		$this->set_request_data($request_data);
102
+		$this->set_extra_data($extra_data);
103
+		$this->set_status(JobParameters::status_continue);
104
+	}
105
+
106
+
107
+	/**
108
+	 * Returns the array of strings of valid stati
109
+	 *
110
+	 * @return array
111
+	 */
112
+	public static function valid_stati()
113
+	{
114
+		return array(
115
+			JobParameters::status_complete,
116
+			JobParameters::status_continue,
117
+			JobParameters::status_error,
118
+			JobParameters::status_cleaned_up,
119
+		);
120
+	}
121
+
122
+
123
+	/**
124
+	 * Saves this option to the database (wordpress options table)
125
+	 *
126
+	 * @param boolean $first
127
+	 * @return boolean success
128
+	 */
129
+	public function save($first = false)
130
+	{
131
+		$object_vars = get_object_vars($this);
132
+		if ($first) {
133
+			return add_option($this->option_name(), $object_vars, null, 'no');
134
+		} else {
135
+			return update_option($this->option_name(), $object_vars);
136
+		}
137
+	}
138
+
139
+
140
+	/**
141
+	 * Deletes the job from teh database, although this object is still usable
142
+	 * for the rest of the request
143
+	 *
144
+	 * @return boolean
145
+	 */
146
+	public function delete()
147
+	{
148
+		return delete_option($this->option_name());
149
+	}
150
+
151
+
152
+	/**
153
+	 * Loads the specified job from the database
154
+	 *
155
+	 * @param string $job_id
156
+	 * @return JobParameters
157
+	 * @throws BatchRequestException
158
+	 */
159
+	public static function load($job_id)
160
+	{
161
+		$job_parameter_vars = get_option(JobParameters::wp_option_prefix . $job_id);
162
+		if (! is_array($job_parameter_vars) ||
163
+			! isset($job_parameter_vars['_classname']) ||
164
+			! isset($job_parameter_vars['_request_data'])
165
+		) {
166
+			throw new BatchRequestException(
167
+				sprintf(
168
+					__(
169
+						'Could not retrieve job %1$s from the Wordpress options table, and so the job could not continue. The wordpress option was %2$s',
170
+						'event_espresso'
171
+					),
172
+					$job_id,
173
+					get_option(JobParameters::wp_option_prefix . $job_id)
174
+				)
175
+			);
176
+		}
177
+		$job_parameters = new JobParameters(
178
+			$job_id,
179
+			$job_parameter_vars['_classname'],
180
+			$job_parameter_vars['_request_data']
181
+		);
182
+		foreach ($job_parameter_vars as $key => $value) {
183
+			$job_parameters->{$key} = $value;
184
+		}
185
+		return $job_parameters;
186
+	}
187
+
188
+
189
+	/**
190
+	 * Gets the job's unique string
191
+	 *
192
+	 * @return string
193
+	 */
194
+	public function job_id()
195
+	{
196
+		return $this->_job_id;
197
+	}
198
+
199
+
200
+	/**
201
+	 * Gets the classname that should run this job
202
+	 *
203
+	 * @return string
204
+	 */
205
+	public function classname()
206
+	{
207
+		return $this->_classname;
208
+	}
209
+
210
+
211
+	/**
212
+	 * Gets the original array of $_REQUEST data for this job
213
+	 *
214
+	 * @return array
215
+	 */
216
+	public function request_data()
217
+	{
218
+		return $this->_request_data;
219
+	}
220
+
221
+
222
+	/**
223
+	 * Gets a single item from the request data
224
+	 *
225
+	 * @param string       $key
226
+	 * @param string|array $default
227
+	 * @return string|array
228
+	 */
229
+	public function request_datum($key, $default = '')
230
+	{
231
+		if (isset($this->_request_data[ $key ])) {
232
+			return $this->_request_data[ $key ];
233
+		} else {
234
+			return $default;
235
+		}
236
+	}
237
+
238
+
239
+	/**
240
+	 * Gets a single item from the extra data
241
+	 *
242
+	 * @param string       $key
243
+	 * @param string|array $default
244
+	 * @return string|array
245
+	 */
246
+	public function extra_datum($key, $default = '')
247
+	{
248
+		if (isset($this->_extra_data[ $key ])) {
249
+			return $this->_extra_data[ $key ];
250
+		} else {
251
+			return $default;
252
+		}
253
+	}
254
+
255
+
256
+	/**
257
+	 * Adds an extra piece of extra data that we're going to want later during the job
258
+	 *
259
+	 * @param string                $key
260
+	 * @param string|int|array|null $value almost any extra data you want to store
261
+	 */
262
+	public function add_extra_data($key, $value)
263
+	{
264
+		$this->_extra_data[ $key ] = $value;
265
+	}
266
+
267
+
268
+	/**
269
+	 * Array of any extra data we want to store
270
+	 *
271
+	 * @return array
272
+	 */
273
+	public function extra_data()
274
+	{
275
+		return $this->_extra_data;
276
+	}
277
+
278
+
279
+	/**
280
+	 * Returns the job size, in whatever units you want
281
+	 *
282
+	 * @return int
283
+	 */
284
+	public function job_size()
285
+	{
286
+		return $this->_job_size;
287
+	}
288
+
289
+
290
+	/**
291
+	 * Sets the job size. You decide what units to use
292
+	 *
293
+	 * @param int $size
294
+	 */
295
+	public function set_job_size($size)
296
+	{
297
+		$this->_job_size = $size;
298
+	}
299
+
300
+
301
+	/**
302
+	 * The number of "units" processed, in the same units as the "job size"
303
+	 *
304
+	 * @return int
305
+	 */
306
+	public function units_processed()
307
+	{
308
+		return $this->_units_processed;
309
+	}
310
+
311
+
312
+	/**
313
+	 * Marks more units as processed
314
+	 *
315
+	 * @param int $newly_processed
316
+	 * @return int updated units processed
317
+	 */
318
+	public function mark_processed($newly_processed)
319
+	{
320
+		$this->_units_processed += $newly_processed;
321
+		return $this->_units_processed;
322
+	}
323
+
324
+
325
+	/**
326
+	 * Sets the total count of units processed. You might prefer to use mark_processed
327
+	 *
328
+	 * @param int $total_units_processed
329
+	 */
330
+	public function set_units_processed($total_units_processed)
331
+	{
332
+		$this->_units_processed = $total_units_processed;
333
+	}
334
+
335
+
336
+	/**
337
+	 * Sets the job's ID
338
+	 *
339
+	 * @param string $job_id
340
+	 */
341
+	public function set_job_id($job_id)
342
+	{
343
+		$this->_job_id = $job_id;
344
+	}
345
+
346
+
347
+	/**
348
+	 * sets the classname
349
+	 *
350
+	 * @param string $classname
351
+	 */
352
+	public function set_classname($classname)
353
+	{
354
+		$this->_classname = $classname;
355
+	}
356
+
357
+
358
+	/**
359
+	 * Sets the request data
360
+	 *
361
+	 * @param array $request_data
362
+	 */
363
+	public function set_request_data($request_data)
364
+	{
365
+		$this->_request_data = $request_data;
366
+	}
367
+
368
+
369
+	/**
370
+	 * Sets the array of extra data we want to store on this request
371
+	 *
372
+	 * @param array $extra_data
373
+	 */
374
+	public function set_extra_data($extra_data)
375
+	{
376
+		$this->_extra_data = $extra_data;
377
+	}
378
+
379
+
380
+	/**
381
+	 * Gets the name of the wordpress option that should store these job parameters
382
+	 *
383
+	 * @return string
384
+	 */
385
+	public function option_name()
386
+	{
387
+		return JobParameters::wp_option_prefix . $this->job_id();
388
+	}
389
+
390
+
391
+	/**
392
+	 * Gets the job\s current status. One of JobParameters::valid_stati();
393
+	 *
394
+	 * @return string
395
+	 */
396
+	public function status()
397
+	{
398
+		return $this->_status;
399
+	}
400
+
401
+
402
+	/**
403
+	 * @param string $status on eof JobParameters::valid_stati()
404
+	 */
405
+	public function set_status($status)
406
+	{
407
+		$this->_status = $status;
408
+	}
409 409
 }
Please login to merge, or discard this patch.
Spacing   +9 added lines, -9 removed lines patch added patch discarded remove patch
@@ -158,8 +158,8 @@  discard block
 block discarded – undo
158 158
      */
159 159
     public static function load($job_id)
160 160
     {
161
-        $job_parameter_vars = get_option(JobParameters::wp_option_prefix . $job_id);
162
-        if (! is_array($job_parameter_vars) ||
161
+        $job_parameter_vars = get_option(JobParameters::wp_option_prefix.$job_id);
162
+        if ( ! is_array($job_parameter_vars) ||
163 163
             ! isset($job_parameter_vars['_classname']) ||
164 164
             ! isset($job_parameter_vars['_request_data'])
165 165
         ) {
@@ -170,7 +170,7 @@  discard block
 block discarded – undo
170 170
                         'event_espresso'
171 171
                     ),
172 172
                     $job_id,
173
-                    get_option(JobParameters::wp_option_prefix . $job_id)
173
+                    get_option(JobParameters::wp_option_prefix.$job_id)
174 174
                 )
175 175
             );
176 176
         }
@@ -228,8 +228,8 @@  discard block
 block discarded – undo
228 228
      */
229 229
     public function request_datum($key, $default = '')
230 230
     {
231
-        if (isset($this->_request_data[ $key ])) {
232
-            return $this->_request_data[ $key ];
231
+        if (isset($this->_request_data[$key])) {
232
+            return $this->_request_data[$key];
233 233
         } else {
234 234
             return $default;
235 235
         }
@@ -245,8 +245,8 @@  discard block
 block discarded – undo
245 245
      */
246 246
     public function extra_datum($key, $default = '')
247 247
     {
248
-        if (isset($this->_extra_data[ $key ])) {
249
-            return $this->_extra_data[ $key ];
248
+        if (isset($this->_extra_data[$key])) {
249
+            return $this->_extra_data[$key];
250 250
         } else {
251 251
             return $default;
252 252
         }
@@ -261,7 +261,7 @@  discard block
 block discarded – undo
261 261
      */
262 262
     public function add_extra_data($key, $value)
263 263
     {
264
-        $this->_extra_data[ $key ] = $value;
264
+        $this->_extra_data[$key] = $value;
265 265
     }
266 266
 
267 267
 
@@ -384,7 +384,7 @@  discard block
 block discarded – undo
384 384
      */
385 385
     public function option_name()
386 386
     {
387
-        return JobParameters::wp_option_prefix . $this->job_id();
387
+        return JobParameters::wp_option_prefix.$this->job_id();
388 388
     }
389 389
 
390 390
 
Please login to merge, or discard this patch.