Completed
Branch BUG-10381-asset-loading (361215)
by
unknown
158:58 queued 146:07
created
messages/data_class/EE_Messages_Registrations_incoming_data.class.php 2 patches
Indentation   +114 added lines, -114 removed lines patch added patch discarded remove patch
@@ -1,6 +1,6 @@  discard block
 block discarded – undo
1 1
 <?php
2 2
 if (! defined('EVENT_ESPRESSO_VERSION')) {
3
-    exit('No direct script access allowed');
3
+	exit('No direct script access allowed');
4 4
 }
5 5
 
6 6
 /**
@@ -16,117 +16,117 @@  discard block
 block discarded – undo
16 16
 {
17 17
 
18 18
 
19
-    /**
20
-     * Constructor.
21
-     *
22
-     * @param  EE_Registration[] $data expecting an array of EE_Registration objects.
23
-     * @throws EE_Error
24
-     * @access protected
25
-     */
26
-    public function __construct($data = array())
27
-    {
28
-
29
-        //validate that the first element in the array is an EE_Registration object.
30
-        if (! reset($data) instanceof EE_Registration) {
31
-            throw new EE_Error(__('The EE_Message_Registrations_incoming_data class expects an array of EE_Registration objects.',
32
-                'event_espresso'));
33
-        }
34
-        parent::__construct($data);
35
-    }
36
-
37
-
38
-    /**
39
-     * setup the data.
40
-     * Sets up the expected data object for the messages prep using incoming registration objects.
41
-     *
42
-     * @return void
43
-     * @access protected
44
-     */
45
-    protected function _setup_data()
46
-    {
47
-        //we'll loop through each contact and setup the data needed.  Note that many properties will just be set as empty
48
-        //because this data handler is for a very specific set of data (i.e. just what's related to the registration).
49
-
50
-        $this->reg_objs = $this->data();
51
-        $this->txn      = $this->_maybe_get_transaction();
52
-        $this->_assemble_data();
53
-    }
54
-
55
-
56
-    /**
57
-     * If the incoming registrations all share the same transaction then this will return the transaction object shared
58
-     * among the registrations. Otherwise the transaction object is set to null because its intended to only represent
59
-     * one transaction.
60
-     *
61
-     * @return EE_Transaction|null
62
-     */
63
-    protected function _maybe_get_transaction()
64
-    {
65
-        $transactions = array();
66
-        foreach ($this->reg_objs as $registration) {
67
-            if ($registration instanceof EE_Registration) {
68
-                $transaction = $registration->transaction();
69
-                if ($transaction instanceof EE_Transaction) {
70
-                    $transactions[$transaction->ID()] = $transaction;
71
-                }
72
-            }
73
-        }
74
-        return count($transactions) === 1 ? reset($transactions) : null;
75
-    }
76
-
77
-
78
-    /**
79
-     * Returns database safe representation of the data later used to when instantiating this object.
80
-     *
81
-     * @param array $registrations The incoming data to be prepped.
82
-     * @return EE_Registration[]   The data being prepared for the db
83
-     */
84
-    static public function convert_data_for_persistent_storage($registrations)
85
-    {
86
-        if (
87
-            ! is_array($registrations)
88
-            || ! reset($registrations) instanceof EE_Registration
89
-        ) {
90
-            return array();
91
-        }
92
-
93
-        $registration_ids = array();
94
-
95
-        $registration_ids = array_filter(
96
-            array_map(
97
-                function ($registration) {
98
-                    if ($registration instanceof EE_Registration) {
99
-                        return $registration->ID();
100
-                    }
101
-                    return false;
102
-                },
103
-                $registrations
104
-            )
105
-        );
106
-
107
-        return $registration_ids;
108
-    }
109
-
110
-
111
-    /**
112
-     * Data that has been stored in persistent storage that was prepped by _convert_data_for_persistent_storage
113
-     * can be sent into this method and converted back into the format used for instantiating with this data handler.
114
-     *
115
-     * @param array $data
116
-     * @return EE_Registration[]
117
-     */
118
-    static public function convert_data_from_persistent_storage($data)
119
-    {
120
-        //since this was added later, we need to account of possible back compat issues where data already queued for generation
121
-        //is in the old format, which is an array of EE_Registration objects.  So if that's the case, then let's just return them
122
-        //@see https://events.codebasehq.com/projects/event-espresso/tickets/10127
123
-        if (is_array($data) && reset($data) instanceof EE_Registration) {
124
-            return $data;
125
-        }
126
-
127
-        $registrations = is_array($data)
128
-            ? EEM_Registration::instance()->get_all(array(array('REG_ID' => array('IN', $data))))
129
-            : array();
130
-        return $registrations;
131
-    }
19
+	/**
20
+	 * Constructor.
21
+	 *
22
+	 * @param  EE_Registration[] $data expecting an array of EE_Registration objects.
23
+	 * @throws EE_Error
24
+	 * @access protected
25
+	 */
26
+	public function __construct($data = array())
27
+	{
28
+
29
+		//validate that the first element in the array is an EE_Registration object.
30
+		if (! reset($data) instanceof EE_Registration) {
31
+			throw new EE_Error(__('The EE_Message_Registrations_incoming_data class expects an array of EE_Registration objects.',
32
+				'event_espresso'));
33
+		}
34
+		parent::__construct($data);
35
+	}
36
+
37
+
38
+	/**
39
+	 * setup the data.
40
+	 * Sets up the expected data object for the messages prep using incoming registration objects.
41
+	 *
42
+	 * @return void
43
+	 * @access protected
44
+	 */
45
+	protected function _setup_data()
46
+	{
47
+		//we'll loop through each contact and setup the data needed.  Note that many properties will just be set as empty
48
+		//because this data handler is for a very specific set of data (i.e. just what's related to the registration).
49
+
50
+		$this->reg_objs = $this->data();
51
+		$this->txn      = $this->_maybe_get_transaction();
52
+		$this->_assemble_data();
53
+	}
54
+
55
+
56
+	/**
57
+	 * If the incoming registrations all share the same transaction then this will return the transaction object shared
58
+	 * among the registrations. Otherwise the transaction object is set to null because its intended to only represent
59
+	 * one transaction.
60
+	 *
61
+	 * @return EE_Transaction|null
62
+	 */
63
+	protected function _maybe_get_transaction()
64
+	{
65
+		$transactions = array();
66
+		foreach ($this->reg_objs as $registration) {
67
+			if ($registration instanceof EE_Registration) {
68
+				$transaction = $registration->transaction();
69
+				if ($transaction instanceof EE_Transaction) {
70
+					$transactions[$transaction->ID()] = $transaction;
71
+				}
72
+			}
73
+		}
74
+		return count($transactions) === 1 ? reset($transactions) : null;
75
+	}
76
+
77
+
78
+	/**
79
+	 * Returns database safe representation of the data later used to when instantiating this object.
80
+	 *
81
+	 * @param array $registrations The incoming data to be prepped.
82
+	 * @return EE_Registration[]   The data being prepared for the db
83
+	 */
84
+	static public function convert_data_for_persistent_storage($registrations)
85
+	{
86
+		if (
87
+			! is_array($registrations)
88
+			|| ! reset($registrations) instanceof EE_Registration
89
+		) {
90
+			return array();
91
+		}
92
+
93
+		$registration_ids = array();
94
+
95
+		$registration_ids = array_filter(
96
+			array_map(
97
+				function ($registration) {
98
+					if ($registration instanceof EE_Registration) {
99
+						return $registration->ID();
100
+					}
101
+					return false;
102
+				},
103
+				$registrations
104
+			)
105
+		);
106
+
107
+		return $registration_ids;
108
+	}
109
+
110
+
111
+	/**
112
+	 * Data that has been stored in persistent storage that was prepped by _convert_data_for_persistent_storage
113
+	 * can be sent into this method and converted back into the format used for instantiating with this data handler.
114
+	 *
115
+	 * @param array $data
116
+	 * @return EE_Registration[]
117
+	 */
118
+	static public function convert_data_from_persistent_storage($data)
119
+	{
120
+		//since this was added later, we need to account of possible back compat issues where data already queued for generation
121
+		//is in the old format, which is an array of EE_Registration objects.  So if that's the case, then let's just return them
122
+		//@see https://events.codebasehq.com/projects/event-espresso/tickets/10127
123
+		if (is_array($data) && reset($data) instanceof EE_Registration) {
124
+			return $data;
125
+		}
126
+
127
+		$registrations = is_array($data)
128
+			? EEM_Registration::instance()->get_all(array(array('REG_ID' => array('IN', $data))))
129
+			: array();
130
+		return $registrations;
131
+	}
132 132
 }
Please login to merge, or discard this patch.
Spacing   +3 added lines, -3 removed lines patch added patch discarded remove patch
@@ -1,5 +1,5 @@  discard block
 block discarded – undo
1 1
 <?php
2
-if (! defined('EVENT_ESPRESSO_VERSION')) {
2
+if ( ! defined('EVENT_ESPRESSO_VERSION')) {
3 3
     exit('No direct script access allowed');
4 4
 }
5 5
 
@@ -27,7 +27,7 @@  discard block
 block discarded – undo
27 27
     {
28 28
 
29 29
         //validate that the first element in the array is an EE_Registration object.
30
-        if (! reset($data) instanceof EE_Registration) {
30
+        if ( ! reset($data) instanceof EE_Registration) {
31 31
             throw new EE_Error(__('The EE_Message_Registrations_incoming_data class expects an array of EE_Registration objects.',
32 32
                 'event_espresso'));
33 33
         }
@@ -94,7 +94,7 @@  discard block
 block discarded – undo
94 94
 
95 95
         $registration_ids = array_filter(
96 96
             array_map(
97
-                function ($registration) {
97
+                function($registration) {
98 98
                     if ($registration instanceof EE_Registration) {
99 99
                         return $registration->ID();
100 100
                     }
Please login to merge, or discard this patch.
core/libraries/plugin_api/EE_Register_Addon.lib.php 2 patches
Indentation   +639 added lines, -639 removed lines patch added patch discarded remove patch
@@ -48,7 +48,7 @@  discard block
 block discarded – undo
48 48
 	protected static $_incompatible_addons = array(
49 49
 		'Multi_Event_Registration' => '2.0.11.rc.002',
50 50
 		'Promotions' => '1.0.0.rc.084',
51
-    );
51
+	);
52 52
 
53 53
 
54 54
 
@@ -219,660 +219,660 @@  discard block
 block discarded – undo
219 219
 	 */
220 220
 	public static function register( $addon_name = '', $setup_args = array() ) {
221 221
 		// required fields MUST be present, so let's make sure they are.
222
-        \EE_Register_Addon::_verify_parameters($addon_name, $setup_args);
223
-        // get class name for addon
222
+		\EE_Register_Addon::_verify_parameters($addon_name, $setup_args);
223
+		// get class name for addon
224 224
 		$class_name = \EE_Register_Addon::_parse_class_name($addon_name, $setup_args);
225 225
 		//setup $_settings array from incoming values.
226
-        $addon_settings = \EE_Register_Addon::_get_addon_settings($class_name, $setup_args);
227
-        // setup PUE
228
-        \EE_Register_Addon::_parse_pue_options($addon_name, $class_name, $setup_args);
229
-        // does this addon work with this version of core or WordPress ?
230
-        if ( ! \EE_Register_Addon::_addon_is_compatible($addon_name, $addon_settings) ) {
231
-            return;
226
+		$addon_settings = \EE_Register_Addon::_get_addon_settings($class_name, $setup_args);
227
+		// setup PUE
228
+		\EE_Register_Addon::_parse_pue_options($addon_name, $class_name, $setup_args);
229
+		// does this addon work with this version of core or WordPress ?
230
+		if ( ! \EE_Register_Addon::_addon_is_compatible($addon_name, $addon_settings) ) {
231
+			return;
232 232
 		}
233 233
 		// register namespaces
234
-        \EE_Register_Addon::_setup_namespaces($addon_settings);
235
-        // check if this is an activation request
236
-        if ( \EE_Register_Addon::_addon_activation($addon_name, $addon_settings)) {
237
-            // dont bother setting up the rest of the addon atm
238
-            return;
239
-        }
240
-        // we need cars
241
-        \EE_Register_Addon::_setup_autoloaders($addon_name);
242
-        // register new models and extensions
243
-        \EE_Register_Addon::_register_models_and_extensions($addon_name);
244
-        // setup DMS
245
-        \EE_Register_Addon::_register_data_migration_scripts($addon_name);
246
-        // if config_class is present let's register config.
247
-        \EE_Register_Addon::_register_config($addon_name);
248
-        // register admin pages
249
-        \EE_Register_Addon::_register_admin_pages($addon_name);
250
-        // add to list of modules to be registered
251
-        \EE_Register_Addon::_register_modules($addon_name);
252
-        // add to list of shortcodes to be registered
253
-        \EE_Register_Addon::_register_shortcodes($addon_name);
254
-        // add to list of widgets to be registered
255
-        \EE_Register_Addon::_register_widgets($addon_name);
256
-        // register capability related stuff.
257
-        \EE_Register_Addon::_register_capabilities($addon_name);
258
-        // any message type to register?
259
-        \EE_Register_Addon::_register_message_types($addon_name);
234
+		\EE_Register_Addon::_setup_namespaces($addon_settings);
235
+		// check if this is an activation request
236
+		if ( \EE_Register_Addon::_addon_activation($addon_name, $addon_settings)) {
237
+			// dont bother setting up the rest of the addon atm
238
+			return;
239
+		}
240
+		// we need cars
241
+		\EE_Register_Addon::_setup_autoloaders($addon_name);
242
+		// register new models and extensions
243
+		\EE_Register_Addon::_register_models_and_extensions($addon_name);
244
+		// setup DMS
245
+		\EE_Register_Addon::_register_data_migration_scripts($addon_name);
246
+		// if config_class is present let's register config.
247
+		\EE_Register_Addon::_register_config($addon_name);
248
+		// register admin pages
249
+		\EE_Register_Addon::_register_admin_pages($addon_name);
250
+		// add to list of modules to be registered
251
+		\EE_Register_Addon::_register_modules($addon_name);
252
+		// add to list of shortcodes to be registered
253
+		\EE_Register_Addon::_register_shortcodes($addon_name);
254
+		// add to list of widgets to be registered
255
+		\EE_Register_Addon::_register_widgets($addon_name);
256
+		// register capability related stuff.
257
+		\EE_Register_Addon::_register_capabilities($addon_name);
258
+		// any message type to register?
259
+		\EE_Register_Addon::_register_message_types($addon_name);
260 260
 		// any custom post type/ custom capabilities or default terms to register
261
-        \EE_Register_Addon::_register_custom_post_types($addon_name);
262
-        // and any payment methods
263
-        \EE_Register_Addon::_register_payment_methods($addon_name);
261
+		\EE_Register_Addon::_register_custom_post_types($addon_name);
262
+		// and any payment methods
263
+		\EE_Register_Addon::_register_payment_methods($addon_name);
264 264
 		// load and instantiate main addon class
265
-        $addon = \EE_Register_Addon::_load_and_init_addon_class($addon_name);
266
-        $addon->after_registration();
267
-    }
268
-
269
-
270
-
271
-    /**
272
-     * @param string $addon_name
273
-     * @param array  $setup_args
274
-     * @return void
275
-     * @throws \EE_Error
276
-     */
277
-    private static function _verify_parameters($addon_name, array $setup_args)
278
-    {
279
-        // required fields MUST be present, so let's make sure they are.
280
-        if (empty($addon_name) || ! is_array($setup_args)) {
281
-            throw new EE_Error(
282
-                __(
283
-                    'In order to register an EE_Addon with EE_Register_Addon::register(), you must include the "addon_name" (the name of the addon), and an array of arguments.',
284
-                    'event_espresso'
285
-                )
286
-            );
287
-        }
288
-        if ( ! isset($setup_args['main_file_path']) || empty($setup_args['main_file_path'])) {
289
-            throw new EE_Error(
290
-                sprintf(
291
-                    __(
292
-                        'When registering an addon, you didn\'t provide the "main_file_path", which is the full path to the main file loaded directly by Wordpress. You only provided %s',
293
-                        'event_espresso'
294
-                    ),
295
-                    implode(',', array_keys($setup_args))
296
-                )
297
-            );
298
-        }
299
-        // check that addon has not already been registered with that name
300
-        if (isset(self::$_settings[$addon_name]) && ! did_action('activate_plugin')) {
301
-            throw new EE_Error(
302
-                sprintf(
303
-                    __(
304
-                        'An EE_Addon with the name "%s" has already been registered and each EE_Addon requires a unique name.',
305
-                        'event_espresso'
306
-                    ),
307
-                    $addon_name
308
-                )
309
-            );
310
-        }
265
+		$addon = \EE_Register_Addon::_load_and_init_addon_class($addon_name);
266
+		$addon->after_registration();
267
+	}
268
+
269
+
270
+
271
+	/**
272
+	 * @param string $addon_name
273
+	 * @param array  $setup_args
274
+	 * @return void
275
+	 * @throws \EE_Error
276
+	 */
277
+	private static function _verify_parameters($addon_name, array $setup_args)
278
+	{
279
+		// required fields MUST be present, so let's make sure they are.
280
+		if (empty($addon_name) || ! is_array($setup_args)) {
281
+			throw new EE_Error(
282
+				__(
283
+					'In order to register an EE_Addon with EE_Register_Addon::register(), you must include the "addon_name" (the name of the addon), and an array of arguments.',
284
+					'event_espresso'
285
+				)
286
+			);
287
+		}
288
+		if ( ! isset($setup_args['main_file_path']) || empty($setup_args['main_file_path'])) {
289
+			throw new EE_Error(
290
+				sprintf(
291
+					__(
292
+						'When registering an addon, you didn\'t provide the "main_file_path", which is the full path to the main file loaded directly by Wordpress. You only provided %s',
293
+						'event_espresso'
294
+					),
295
+					implode(',', array_keys($setup_args))
296
+				)
297
+			);
298
+		}
299
+		// check that addon has not already been registered with that name
300
+		if (isset(self::$_settings[$addon_name]) && ! did_action('activate_plugin')) {
301
+			throw new EE_Error(
302
+				sprintf(
303
+					__(
304
+						'An EE_Addon with the name "%s" has already been registered and each EE_Addon requires a unique name.',
305
+						'event_espresso'
306
+					),
307
+					$addon_name
308
+				)
309
+			);
310
+		}
311 311
 	}
312 312
 
313 313
 
314 314
 
315
-    /**
316
-     * @param string $addon_name
317
-     * @param array  $setup_args
318
-     * @return string
319
-     */
320
-    private static function _parse_class_name($addon_name, array $setup_args)
321
-    {
322
-        if (empty($setup_args['class_name'])) {
323
-            // generate one by first separating name with spaces
324
-            $class_name = str_replace(array('-', '_'), ' ', trim($addon_name));
325
-            //capitalize, then replace spaces with underscores
326
-            $class_name = str_replace(' ', '_', ucwords($class_name));
327
-        } else {
328
-            $class_name = $setup_args['class_name'];
329
-        }
330
-        return strpos($class_name, 'EE_') === 0 ? $class_name : 'EE_' . $class_name;
331
-    }
332
-
333
-
334
-
335
-    /**
336
-     * @param string $class_name
337
-     * @param array  $setup_args
338
-     * @return array
339
-     */
340
-    private static function _get_addon_settings($class_name, array $setup_args)
341
-    {
342
-        //setup $_settings array from incoming values.
343
-        $addon_settings = array(
344
-            // generated from the addon name, changes something like "calendar" to "EE_Calendar"
345
-            'class_name'            => $class_name,
346
-            // the addon slug for use in URLs, etc
347
-            'plugin_slug'           => isset($setup_args['plugin_slug'])
348
-                ? (string)$setup_args['plugin_slug']
349
-                : '',
350
-            // page slug to be used when generating the "Settings" link on the WP plugin page
351
-            'plugin_action_slug'    => isset($setup_args['plugin_action_slug'])
352
-                ? (string)$setup_args['plugin_action_slug']
353
-                : '',
354
-            // the "software" version for the addon
355
-            'version'               => isset($setup_args['version'])
356
-                ? (string)$setup_args['version']
357
-                : '',
358
-            // the minimum version of EE Core that the addon will work with
359
-            'min_core_version'      => isset($setup_args['min_core_version'])
360
-                ? (string)$setup_args['min_core_version']
361
-                : '',
362
-            // the minimum version of WordPress that the addon will work with
363
-            'min_wp_version'        => isset($setup_args['min_wp_version'])
364
-                ? (string)$setup_args['min_wp_version']
365
-                : EE_MIN_WP_VER_REQUIRED,
366
-            // full server path to main file (file loaded directly by WP)
367
-            'main_file_path'        => isset($setup_args['main_file_path'])
368
-                ? (string)$setup_args['main_file_path']
369
-                : '',
370
-            // path to folder containing files for integrating with the EE core admin and/or setting up EE admin pages
371
-            'admin_path'            => isset($setup_args['admin_path'])
372
-                ? (string)$setup_args['admin_path'] : '',
373
-            // a method to be called when the EE Admin is first invoked, can be used for hooking into any admin page
374
-            'admin_callback'        => isset($setup_args['admin_callback'])
375
-                ? (string)$setup_args['admin_callback']
376
-                : '',
377
-            // the section name for this addon's configuration settings section (defaults to "addons")
378
-            'config_section'        => isset($setup_args['config_section'])
379
-                ? (string)$setup_args['config_section']
380
-                : 'addons',
381
-            // the class name for this addon's configuration settings object
382
-            'config_class'          => isset($setup_args['config_class'])
383
-                ? (string)$setup_args['config_class'] : '',
384
-            //the name given to the config for this addons' configuration settings object (optional)
385
-            'config_name'           => isset($setup_args['config_name'])
386
-                ? (string)$setup_args['config_name'] : '',
387
-            // an array of "class names" => "full server paths" for any classes that might be invoked by the addon
388
-            'autoloader_paths'      => isset($setup_args['autoloader_paths'])
389
-                ? (array)$setup_args['autoloader_paths']
390
-                : array(),
391
-            // an array of  "full server paths" for any folders containing classes that might be invoked by the addon
392
-            'autoloader_folders'    => isset($setup_args['autoloader_folders'])
393
-                ? (array)$setup_args['autoloader_folders']
394
-                : array(),
395
-            // array of full server paths to any EE_DMS data migration scripts used by the addon
396
-            'dms_paths'             => isset($setup_args['dms_paths'])
397
-                ? (array)$setup_args['dms_paths']
398
-                : array(),
399
-            // array of full server paths to any EED_Modules used by the addon
400
-            'module_paths'          => isset($setup_args['module_paths'])
401
-                ? (array)$setup_args['module_paths']
402
-                : array(),
403
-            // array of full server paths to any EES_Shortcodes used by the addon
404
-            'shortcode_paths'       => isset($setup_args['shortcode_paths'])
405
-                ? (array)$setup_args['shortcode_paths']
406
-                : array(),
407
-            // array of full server paths to any WP_Widgets used by the addon
408
-            'widget_paths'          => isset($setup_args['widget_paths'])
409
-                ? (array)$setup_args['widget_paths']
410
-                : array(),
411
-            // array of PUE options used by the addon
412
-            'pue_options'           => isset($setup_args['pue_options'])
413
-                ? (array)$setup_args['pue_options']
414
-                : array(),
415
-            'message_types'         => isset($setup_args['message_types'])
416
-                ? (array)$setup_args['message_types']
417
-                : array(),
418
-            'capabilities'          => isset($setup_args['capabilities'])
419
-                ? (array)$setup_args['capabilities']
420
-                : array(),
421
-            'capability_maps'       => isset($setup_args['capability_maps'])
422
-                ? (array)$setup_args['capability_maps']
423
-                : array(),
424
-            'model_paths'           => isset($setup_args['model_paths'])
425
-                ? (array)$setup_args['model_paths']
426
-                : array(),
427
-            'class_paths'           => isset($setup_args['class_paths'])
428
-                ? (array)$setup_args['class_paths']
429
-                : array(),
430
-            'model_extension_paths' => isset($setup_args['model_extension_paths'])
431
-                ? (array)$setup_args['model_extension_paths']
432
-                : array(),
433
-            'class_extension_paths' => isset($setup_args['class_extension_paths'])
434
-                ? (array)$setup_args['class_extension_paths']
435
-                : array(),
436
-            'custom_post_types'     => isset($setup_args['custom_post_types'])
437
-                ? (array)$setup_args['custom_post_types']
438
-                : array(),
439
-            'custom_taxonomies'     => isset($setup_args['custom_taxonomies'])
440
-                ? (array)$setup_args['custom_taxonomies']
441
-                : array(),
442
-            'payment_method_paths'  => isset($setup_args['payment_method_paths'])
443
-                ? (array)$setup_args['payment_method_paths']
444
-                : array(),
445
-            'default_terms'         => isset($setup_args['default_terms'])
446
-                ? (array)$setup_args['default_terms']
447
-                : array(),
448
-            // if not empty, inserts a new table row after this plugin's row on the WP Plugins page
449
-            // that can be used for adding upgrading/marketing info
450
-            'plugins_page_row'      => isset($setup_args['plugins_page_row'])
451
-                ? $setup_args['plugins_page_row']
452
-                : '',
453
-            'namespace'             => isset(
454
-                $setup_args['namespace'],
455
-                $setup_args['namespace']['FQNS'],
456
-                $setup_args['namespace']['DIR']
457
-            )
458
-                ? (array)$setup_args['namespace']
459
-                : array(),
460
-        );
461
-        // if plugin_action_slug is NOT set, but an admin page path IS set,
462
-        // then let's just use the plugin_slug since that will be used for linking to the admin page
463
-        $addon_settings['plugin_action_slug'] = empty($addon_settings['plugin_action_slug'])
464
-                                                && ! empty($addon_settings['admin_path'])
465
-            ? $addon_settings['plugin_slug']
466
-            : $addon_settings['plugin_action_slug'];
467
-        // full server path to main file (file loaded directly by WP)
468
-        $addon_settings['plugin_basename'] = plugin_basename($addon_settings['main_file_path']);
469
-        return $addon_settings;
315
+	/**
316
+	 * @param string $addon_name
317
+	 * @param array  $setup_args
318
+	 * @return string
319
+	 */
320
+	private static function _parse_class_name($addon_name, array $setup_args)
321
+	{
322
+		if (empty($setup_args['class_name'])) {
323
+			// generate one by first separating name with spaces
324
+			$class_name = str_replace(array('-', '_'), ' ', trim($addon_name));
325
+			//capitalize, then replace spaces with underscores
326
+			$class_name = str_replace(' ', '_', ucwords($class_name));
327
+		} else {
328
+			$class_name = $setup_args['class_name'];
329
+		}
330
+		return strpos($class_name, 'EE_') === 0 ? $class_name : 'EE_' . $class_name;
470 331
 	}
471 332
 
472 333
 
473 334
 
474
-    /**
475
-     * @param string $addon_name
476
-     * @param array  $addon_settings
477
-     * @return boolean
478
-     */
335
+	/**
336
+	 * @param string $class_name
337
+	 * @param array  $setup_args
338
+	 * @return array
339
+	 */
340
+	private static function _get_addon_settings($class_name, array $setup_args)
341
+	{
342
+		//setup $_settings array from incoming values.
343
+		$addon_settings = array(
344
+			// generated from the addon name, changes something like "calendar" to "EE_Calendar"
345
+			'class_name'            => $class_name,
346
+			// the addon slug for use in URLs, etc
347
+			'plugin_slug'           => isset($setup_args['plugin_slug'])
348
+				? (string)$setup_args['plugin_slug']
349
+				: '',
350
+			// page slug to be used when generating the "Settings" link on the WP plugin page
351
+			'plugin_action_slug'    => isset($setup_args['plugin_action_slug'])
352
+				? (string)$setup_args['plugin_action_slug']
353
+				: '',
354
+			// the "software" version for the addon
355
+			'version'               => isset($setup_args['version'])
356
+				? (string)$setup_args['version']
357
+				: '',
358
+			// the minimum version of EE Core that the addon will work with
359
+			'min_core_version'      => isset($setup_args['min_core_version'])
360
+				? (string)$setup_args['min_core_version']
361
+				: '',
362
+			// the minimum version of WordPress that the addon will work with
363
+			'min_wp_version'        => isset($setup_args['min_wp_version'])
364
+				? (string)$setup_args['min_wp_version']
365
+				: EE_MIN_WP_VER_REQUIRED,
366
+			// full server path to main file (file loaded directly by WP)
367
+			'main_file_path'        => isset($setup_args['main_file_path'])
368
+				? (string)$setup_args['main_file_path']
369
+				: '',
370
+			// path to folder containing files for integrating with the EE core admin and/or setting up EE admin pages
371
+			'admin_path'            => isset($setup_args['admin_path'])
372
+				? (string)$setup_args['admin_path'] : '',
373
+			// a method to be called when the EE Admin is first invoked, can be used for hooking into any admin page
374
+			'admin_callback'        => isset($setup_args['admin_callback'])
375
+				? (string)$setup_args['admin_callback']
376
+				: '',
377
+			// the section name for this addon's configuration settings section (defaults to "addons")
378
+			'config_section'        => isset($setup_args['config_section'])
379
+				? (string)$setup_args['config_section']
380
+				: 'addons',
381
+			// the class name for this addon's configuration settings object
382
+			'config_class'          => isset($setup_args['config_class'])
383
+				? (string)$setup_args['config_class'] : '',
384
+			//the name given to the config for this addons' configuration settings object (optional)
385
+			'config_name'           => isset($setup_args['config_name'])
386
+				? (string)$setup_args['config_name'] : '',
387
+			// an array of "class names" => "full server paths" for any classes that might be invoked by the addon
388
+			'autoloader_paths'      => isset($setup_args['autoloader_paths'])
389
+				? (array)$setup_args['autoloader_paths']
390
+				: array(),
391
+			// an array of  "full server paths" for any folders containing classes that might be invoked by the addon
392
+			'autoloader_folders'    => isset($setup_args['autoloader_folders'])
393
+				? (array)$setup_args['autoloader_folders']
394
+				: array(),
395
+			// array of full server paths to any EE_DMS data migration scripts used by the addon
396
+			'dms_paths'             => isset($setup_args['dms_paths'])
397
+				? (array)$setup_args['dms_paths']
398
+				: array(),
399
+			// array of full server paths to any EED_Modules used by the addon
400
+			'module_paths'          => isset($setup_args['module_paths'])
401
+				? (array)$setup_args['module_paths']
402
+				: array(),
403
+			// array of full server paths to any EES_Shortcodes used by the addon
404
+			'shortcode_paths'       => isset($setup_args['shortcode_paths'])
405
+				? (array)$setup_args['shortcode_paths']
406
+				: array(),
407
+			// array of full server paths to any WP_Widgets used by the addon
408
+			'widget_paths'          => isset($setup_args['widget_paths'])
409
+				? (array)$setup_args['widget_paths']
410
+				: array(),
411
+			// array of PUE options used by the addon
412
+			'pue_options'           => isset($setup_args['pue_options'])
413
+				? (array)$setup_args['pue_options']
414
+				: array(),
415
+			'message_types'         => isset($setup_args['message_types'])
416
+				? (array)$setup_args['message_types']
417
+				: array(),
418
+			'capabilities'          => isset($setup_args['capabilities'])
419
+				? (array)$setup_args['capabilities']
420
+				: array(),
421
+			'capability_maps'       => isset($setup_args['capability_maps'])
422
+				? (array)$setup_args['capability_maps']
423
+				: array(),
424
+			'model_paths'           => isset($setup_args['model_paths'])
425
+				? (array)$setup_args['model_paths']
426
+				: array(),
427
+			'class_paths'           => isset($setup_args['class_paths'])
428
+				? (array)$setup_args['class_paths']
429
+				: array(),
430
+			'model_extension_paths' => isset($setup_args['model_extension_paths'])
431
+				? (array)$setup_args['model_extension_paths']
432
+				: array(),
433
+			'class_extension_paths' => isset($setup_args['class_extension_paths'])
434
+				? (array)$setup_args['class_extension_paths']
435
+				: array(),
436
+			'custom_post_types'     => isset($setup_args['custom_post_types'])
437
+				? (array)$setup_args['custom_post_types']
438
+				: array(),
439
+			'custom_taxonomies'     => isset($setup_args['custom_taxonomies'])
440
+				? (array)$setup_args['custom_taxonomies']
441
+				: array(),
442
+			'payment_method_paths'  => isset($setup_args['payment_method_paths'])
443
+				? (array)$setup_args['payment_method_paths']
444
+				: array(),
445
+			'default_terms'         => isset($setup_args['default_terms'])
446
+				? (array)$setup_args['default_terms']
447
+				: array(),
448
+			// if not empty, inserts a new table row after this plugin's row on the WP Plugins page
449
+			// that can be used for adding upgrading/marketing info
450
+			'plugins_page_row'      => isset($setup_args['plugins_page_row'])
451
+				? $setup_args['plugins_page_row']
452
+				: '',
453
+			'namespace'             => isset(
454
+				$setup_args['namespace'],
455
+				$setup_args['namespace']['FQNS'],
456
+				$setup_args['namespace']['DIR']
457
+			)
458
+				? (array)$setup_args['namespace']
459
+				: array(),
460
+		);
461
+		// if plugin_action_slug is NOT set, but an admin page path IS set,
462
+		// then let's just use the plugin_slug since that will be used for linking to the admin page
463
+		$addon_settings['plugin_action_slug'] = empty($addon_settings['plugin_action_slug'])
464
+												&& ! empty($addon_settings['admin_path'])
465
+			? $addon_settings['plugin_slug']
466
+			: $addon_settings['plugin_action_slug'];
467
+		// full server path to main file (file loaded directly by WP)
468
+		$addon_settings['plugin_basename'] = plugin_basename($addon_settings['main_file_path']);
469
+		return $addon_settings;
470
+	}
471
+
472
+
473
+
474
+	/**
475
+	 * @param string $addon_name
476
+	 * @param array  $addon_settings
477
+	 * @return boolean
478
+	 */
479 479
 	private static function _addon_is_compatible( $addon_name, array $addon_settings ) {
480
-        global $wp_version;
481
-        $incompatibility_message = '';
482
-        //check whether this addon version is compatible with EE core
483
-        if (
484
-            isset(EE_Register_Addon::$_incompatible_addons[$addon_name])
485
-            && ! self::_meets_min_core_version_requirement(
486
-                EE_Register_Addon::$_incompatible_addons[$addon_name],
487
-                $addon_settings['version']
488
-            )
489
-        ) {
490
-            $incompatibility_message = sprintf(
491
-                __(
492
-                    '%4$sIMPORTANT!%5$sThe Event Espresso "%1$s" addon is not compatible with this version of Event Espresso.%2$sPlease upgrade your "%1$s" addon to version %3$s or newer to resolve this issue.'
493
-                ),
494
-                $addon_name,
495
-                '<br />',
496
-                EE_Register_Addon::$_incompatible_addons[$addon_name],
497
-                '<span style="font-weight: bold; color: #D54E21;">',
498
-                '</span><br />'
499
-            );
500
-        } else if (
501
-            ! self::_meets_min_core_version_requirement($addon_settings['min_core_version'], espresso_version())
502
-        ) {
503
-            $incompatibility_message = sprintf(
504
-                __(
505
-                    '%5$sIMPORTANT!%6$sThe Event Espresso "%1$s" addon requires Event Espresso Core version "%2$s" or higher in order to run.%4$sYour version of Event Espresso Core is currently at "%3$s". Please upgrade Event Espresso Core first and then re-activate "%1$s".',
506
-                    'event_espresso'
507
-                ),
508
-                $addon_name,
509
-                self::_effective_version($addon_settings['min_core_version']),
510
-                self::_effective_version(espresso_version()),
511
-                '<br />',
512
-                '<span style="font-weight: bold; color: #D54E21;">',
513
-                '</span><br />'
514
-            );
515
-        } else if (version_compare($wp_version, $addon_settings['min_wp_version'], '<')) {
516
-            $incompatibility_message = sprintf(
517
-                __(
518
-                    '%4$sIMPORTANT!%5$sThe Event Espresso "%1$s" addon requires WordPress version "%2$s" or greater.%3$sPlease update your version of WordPress to use the "%1$s" addon and to keep your site secure.',
519
-                    'event_espresso'
520
-                ),
521
-                $addon_name,
522
-                $addon_settings['min_wp_version'],
523
-                '<br />',
524
-                '<span style="font-weight: bold; color: #D54E21;">',
525
-                '</span><br />'
526
-            );
527
-        }
528
-        if ( ! empty($incompatibility_message)) {
529
-            // remove 'activate' from the REQUEST
530
-            // so WP doesn't erroneously tell the user the plugin activated fine when it didn't
531
-            unset($_GET['activate'], $_REQUEST['activate']);
532
-            if (current_user_can('activate_plugins')) {
533
-                // show an error message indicating the plugin didn't activate properly
534
-                EE_Error::add_error($incompatibility_message, __FILE__, __FUNCTION__, __LINE__);
535
-            }
536
-            // BAIL FROM THE ADDON REGISTRATION PROCESS
537
-            return false;
538
-        }
539
-        // addon IS compatible
540
-        return true;
480
+		global $wp_version;
481
+		$incompatibility_message = '';
482
+		//check whether this addon version is compatible with EE core
483
+		if (
484
+			isset(EE_Register_Addon::$_incompatible_addons[$addon_name])
485
+			&& ! self::_meets_min_core_version_requirement(
486
+				EE_Register_Addon::$_incompatible_addons[$addon_name],
487
+				$addon_settings['version']
488
+			)
489
+		) {
490
+			$incompatibility_message = sprintf(
491
+				__(
492
+					'%4$sIMPORTANT!%5$sThe Event Espresso "%1$s" addon is not compatible with this version of Event Espresso.%2$sPlease upgrade your "%1$s" addon to version %3$s or newer to resolve this issue.'
493
+				),
494
+				$addon_name,
495
+				'<br />',
496
+				EE_Register_Addon::$_incompatible_addons[$addon_name],
497
+				'<span style="font-weight: bold; color: #D54E21;">',
498
+				'</span><br />'
499
+			);
500
+		} else if (
501
+			! self::_meets_min_core_version_requirement($addon_settings['min_core_version'], espresso_version())
502
+		) {
503
+			$incompatibility_message = sprintf(
504
+				__(
505
+					'%5$sIMPORTANT!%6$sThe Event Espresso "%1$s" addon requires Event Espresso Core version "%2$s" or higher in order to run.%4$sYour version of Event Espresso Core is currently at "%3$s". Please upgrade Event Espresso Core first and then re-activate "%1$s".',
506
+					'event_espresso'
507
+				),
508
+				$addon_name,
509
+				self::_effective_version($addon_settings['min_core_version']),
510
+				self::_effective_version(espresso_version()),
511
+				'<br />',
512
+				'<span style="font-weight: bold; color: #D54E21;">',
513
+				'</span><br />'
514
+			);
515
+		} else if (version_compare($wp_version, $addon_settings['min_wp_version'], '<')) {
516
+			$incompatibility_message = sprintf(
517
+				__(
518
+					'%4$sIMPORTANT!%5$sThe Event Espresso "%1$s" addon requires WordPress version "%2$s" or greater.%3$sPlease update your version of WordPress to use the "%1$s" addon and to keep your site secure.',
519
+					'event_espresso'
520
+				),
521
+				$addon_name,
522
+				$addon_settings['min_wp_version'],
523
+				'<br />',
524
+				'<span style="font-weight: bold; color: #D54E21;">',
525
+				'</span><br />'
526
+			);
527
+		}
528
+		if ( ! empty($incompatibility_message)) {
529
+			// remove 'activate' from the REQUEST
530
+			// so WP doesn't erroneously tell the user the plugin activated fine when it didn't
531
+			unset($_GET['activate'], $_REQUEST['activate']);
532
+			if (current_user_can('activate_plugins')) {
533
+				// show an error message indicating the plugin didn't activate properly
534
+				EE_Error::add_error($incompatibility_message, __FILE__, __FUNCTION__, __LINE__);
535
+			}
536
+			// BAIL FROM THE ADDON REGISTRATION PROCESS
537
+			return false;
538
+		}
539
+		// addon IS compatible
540
+		return true;
541 541
 	}
542 542
 
543 543
 
544 544
 
545
-    /**
546
-     * if plugin update engine is being used for auto-updates,
547
-     * then let's set that up now before going any further so that ALL addons can be updated
548
-     * (not needed if PUE is not being used)
549
-     *
550
-     * @param string $addon_name
551
-     * @param string $class_name
552
-     * @param array  $setup_args
553
-     * @return void
554
-     */
545
+	/**
546
+	 * if plugin update engine is being used for auto-updates,
547
+	 * then let's set that up now before going any further so that ALL addons can be updated
548
+	 * (not needed if PUE is not being used)
549
+	 *
550
+	 * @param string $addon_name
551
+	 * @param string $class_name
552
+	 * @param array  $setup_args
553
+	 * @return void
554
+	 */
555 555
 	private static function _parse_pue_options( $addon_name, $class_name, array $setup_args ) {
556
-        if ( ! empty($setup_args['pue_options'])) {
557
-            self::$_settings[$addon_name]['pue_options'] = array(
558
-                'pue_plugin_slug' => isset($setup_args['pue_options']['pue_plugin_slug'])
559
-                    ? (string)$setup_args['pue_options']['pue_plugin_slug']
560
-                    : 'espresso_' . strtolower($class_name),
561
-                'plugin_basename' => isset($setup_args['pue_options']['plugin_basename'])
562
-                    ? (string)$setup_args['pue_options']['plugin_basename']
563
-                    : plugin_basename($setup_args['main_file_path']),
564
-                'checkPeriod'     => isset($setup_args['pue_options']['checkPeriod'])
565
-                    ? (string)$setup_args['pue_options']['checkPeriod']
566
-                    : '24',
567
-                'use_wp_update'   => isset($setup_args['pue_options']['use_wp_update'])
568
-                    ? (string)$setup_args['pue_options']['use_wp_update']
569
-                    : false,
570
-            );
571
-            add_action(
572
-                'AHEE__EE_System__brew_espresso__after_pue_init',
573
-                array('EE_Register_Addon', 'load_pue_update')
574
-            );
575
-        }
556
+		if ( ! empty($setup_args['pue_options'])) {
557
+			self::$_settings[$addon_name]['pue_options'] = array(
558
+				'pue_plugin_slug' => isset($setup_args['pue_options']['pue_plugin_slug'])
559
+					? (string)$setup_args['pue_options']['pue_plugin_slug']
560
+					: 'espresso_' . strtolower($class_name),
561
+				'plugin_basename' => isset($setup_args['pue_options']['plugin_basename'])
562
+					? (string)$setup_args['pue_options']['plugin_basename']
563
+					: plugin_basename($setup_args['main_file_path']),
564
+				'checkPeriod'     => isset($setup_args['pue_options']['checkPeriod'])
565
+					? (string)$setup_args['pue_options']['checkPeriod']
566
+					: '24',
567
+				'use_wp_update'   => isset($setup_args['pue_options']['use_wp_update'])
568
+					? (string)$setup_args['pue_options']['use_wp_update']
569
+					: false,
570
+			);
571
+			add_action(
572
+				'AHEE__EE_System__brew_espresso__after_pue_init',
573
+				array('EE_Register_Addon', 'load_pue_update')
574
+			);
575
+		}
576 576
 	}
577 577
 
578 578
 
579 579
 
580
-    /**
581
-     * register namespaces right away before any other files or classes get loaded, but AFTER the version checks
582
-     *
583
-     * @param array $addon_settings
584
-     * @return void
585
-     */
586
-    private static function _setup_namespaces(array $addon_settings)
587
-    {
588
-        //
589
-        if (
590
-        isset(
591
-            $addon_settings['namespace'],
592
-            $addon_settings['namespace']['FQNS'],
593
-            $addon_settings['namespace']['DIR']
594
-        )
595
-        ) {
596
-            EE_Psr4AutoloaderInit::psr4_loader()->addNamespace(
597
-                $addon_settings['namespace']['FQNS'],
598
-                $addon_settings['namespace']['DIR']
599
-            );
600
-        }
601
-    }
602
-
603
-
604
-
605
-    /**
606
-     * @param string $addon_name
607
-     * @param array  $addon_settings
608
-     * @return bool
609
-     */
580
+	/**
581
+	 * register namespaces right away before any other files or classes get loaded, but AFTER the version checks
582
+	 *
583
+	 * @param array $addon_settings
584
+	 * @return void
585
+	 */
586
+	private static function _setup_namespaces(array $addon_settings)
587
+	{
588
+		//
589
+		if (
590
+		isset(
591
+			$addon_settings['namespace'],
592
+			$addon_settings['namespace']['FQNS'],
593
+			$addon_settings['namespace']['DIR']
594
+		)
595
+		) {
596
+			EE_Psr4AutoloaderInit::psr4_loader()->addNamespace(
597
+				$addon_settings['namespace']['FQNS'],
598
+				$addon_settings['namespace']['DIR']
599
+			);
600
+		}
601
+	}
602
+
603
+
604
+
605
+	/**
606
+	 * @param string $addon_name
607
+	 * @param array  $addon_settings
608
+	 * @return bool
609
+	 */
610 610
 	private static function _addon_activation( $addon_name, array $addon_settings ) {
611
-        // this is an activation request
612
-        if (did_action('activate_plugin')) {
613
-            //to find if THIS is the addon that was activated,
614
-            //just check if we have already registered it or not
615
-            //(as the newly-activated addon wasn't around the first time addons were registered)
616
-            if ( ! isset(self::$_settings[$addon_name])) {
617
-                self::$_settings[$addon_name] = $addon_settings;
618
-                $addon = self::_load_and_init_addon_class($addon_name);
619
-                $addon->set_activation_indicator_option();
620
-                // dont bother setting up the rest of the addon.
621
-                // we know it was just activated and the request will end soon
622
-            }
623
-            return true;
624
-        } else {
625
-            // make sure this was called in the right place!
626
-            if (
627
-                ! did_action('AHEE__EE_System__load_espresso_addons')
628
-                || did_action('AHEE__EE_System___detect_if_activation_or_upgrade__begin')
629
-            ) {
630
-                EE_Error::doing_it_wrong(
631
-                    __METHOD__,
632
-                    sprintf(
633
-                        __(
634
-                            'An attempt to register an EE_Addon named "%s" has failed because it was not registered at the correct time.  Please use the "AHEE__EE_System__load_espresso_addons" hook to register addons.',
635
-                            'event_espresso'
636
-                        ),
637
-                        $addon_name
638
-                    ),
639
-                    '4.3.0'
640
-                );
641
-            }
642
-            // make sure addon settings are set correctly without overwriting anything existing
643
-            if (isset(self::$_settings[$addon_name])) {
644
-                self::$_settings[$addon_name] += $addon_settings;
645
-            } else {
646
-                self::$_settings[$addon_name] = $addon_settings;
647
-            }
648
-        }
649
-        return false;
650
-    }
651
-
652
-
653
-
654
-    /**
655
-     * @param string $addon_name
656
-     * @return void
657
-     * @throws \EE_Error
658
-     */
659
-    private static function _setup_autoloaders($addon_name)
660
-    {
661
-        if ( ! empty(self::$_settings[$addon_name]['autoloader_paths'])) {
662
-            // setup autoloader for single file
663
-            EEH_Autoloader::instance()->register_autoloader(self::$_settings[$addon_name]['autoloader_paths']);
664
-        }
665
-        // setup autoloaders for folders
666
-        if ( ! empty(self::$_settings[$addon_name]['autoloader_folders'])) {
667
-            foreach ((array)self::$_settings[$addon_name]['autoloader_folders'] as $autoloader_folder) {
668
-                EEH_Autoloader::register_autoloaders_for_each_file_in_folder($autoloader_folder);
669
-            }
670
-        }
671
-    }
672
-
673
-
674
-
675
-    /**
676
-     * register new models and extensions
677
-     *
678
-     * @param string $addon_name
679
-     * @return void
680
-     * @throws \EE_Error
681
-     */
611
+		// this is an activation request
612
+		if (did_action('activate_plugin')) {
613
+			//to find if THIS is the addon that was activated,
614
+			//just check if we have already registered it or not
615
+			//(as the newly-activated addon wasn't around the first time addons were registered)
616
+			if ( ! isset(self::$_settings[$addon_name])) {
617
+				self::$_settings[$addon_name] = $addon_settings;
618
+				$addon = self::_load_and_init_addon_class($addon_name);
619
+				$addon->set_activation_indicator_option();
620
+				// dont bother setting up the rest of the addon.
621
+				// we know it was just activated and the request will end soon
622
+			}
623
+			return true;
624
+		} else {
625
+			// make sure this was called in the right place!
626
+			if (
627
+				! did_action('AHEE__EE_System__load_espresso_addons')
628
+				|| did_action('AHEE__EE_System___detect_if_activation_or_upgrade__begin')
629
+			) {
630
+				EE_Error::doing_it_wrong(
631
+					__METHOD__,
632
+					sprintf(
633
+						__(
634
+							'An attempt to register an EE_Addon named "%s" has failed because it was not registered at the correct time.  Please use the "AHEE__EE_System__load_espresso_addons" hook to register addons.',
635
+							'event_espresso'
636
+						),
637
+						$addon_name
638
+					),
639
+					'4.3.0'
640
+				);
641
+			}
642
+			// make sure addon settings are set correctly without overwriting anything existing
643
+			if (isset(self::$_settings[$addon_name])) {
644
+				self::$_settings[$addon_name] += $addon_settings;
645
+			} else {
646
+				self::$_settings[$addon_name] = $addon_settings;
647
+			}
648
+		}
649
+		return false;
650
+	}
651
+
652
+
653
+
654
+	/**
655
+	 * @param string $addon_name
656
+	 * @return void
657
+	 * @throws \EE_Error
658
+	 */
659
+	private static function _setup_autoloaders($addon_name)
660
+	{
661
+		if ( ! empty(self::$_settings[$addon_name]['autoloader_paths'])) {
662
+			// setup autoloader for single file
663
+			EEH_Autoloader::instance()->register_autoloader(self::$_settings[$addon_name]['autoloader_paths']);
664
+		}
665
+		// setup autoloaders for folders
666
+		if ( ! empty(self::$_settings[$addon_name]['autoloader_folders'])) {
667
+			foreach ((array)self::$_settings[$addon_name]['autoloader_folders'] as $autoloader_folder) {
668
+				EEH_Autoloader::register_autoloaders_for_each_file_in_folder($autoloader_folder);
669
+			}
670
+		}
671
+	}
672
+
673
+
674
+
675
+	/**
676
+	 * register new models and extensions
677
+	 *
678
+	 * @param string $addon_name
679
+	 * @return void
680
+	 * @throws \EE_Error
681
+	 */
682 682
 	private static function _register_models_and_extensions( $addon_name ) {
683
-        // register new models
684
-        if (
685
-            ! empty(self::$_settings[$addon_name]['model_paths'])
686
-            || ! empty(self::$_settings[$addon_name]['class_paths'])
687
-        ) {
688
-            EE_Register_Model::register(
689
-                $addon_name,
690
-                array(
691
-                    'model_paths' => self::$_settings[$addon_name]['model_paths'],
692
-                    'class_paths' => self::$_settings[$addon_name]['class_paths'],
693
-                )
694
-            );
695
-        }
696
-        // register model extensions
697
-        if (
698
-            ! empty(self::$_settings[$addon_name]['model_extension_paths'])
699
-            || ! empty(self::$_settings[$addon_name]['class_extension_paths'])
700
-        ) {
701
-            EE_Register_Model_Extensions::register(
702
-                $addon_name,
703
-                array(
704
-                    'model_extension_paths' => self::$_settings[$addon_name]['model_extension_paths'],
705
-                    'class_extension_paths' => self::$_settings[$addon_name]['class_extension_paths'],
706
-                )
707
-            );
708
-        }
709
-    }
710
-
711
-
712
-
713
-    /**
714
-     * @param string $addon_name
715
-     * @return void
716
-     * @throws \EE_Error
717
-     */
683
+		// register new models
684
+		if (
685
+			! empty(self::$_settings[$addon_name]['model_paths'])
686
+			|| ! empty(self::$_settings[$addon_name]['class_paths'])
687
+		) {
688
+			EE_Register_Model::register(
689
+				$addon_name,
690
+				array(
691
+					'model_paths' => self::$_settings[$addon_name]['model_paths'],
692
+					'class_paths' => self::$_settings[$addon_name]['class_paths'],
693
+				)
694
+			);
695
+		}
696
+		// register model extensions
697
+		if (
698
+			! empty(self::$_settings[$addon_name]['model_extension_paths'])
699
+			|| ! empty(self::$_settings[$addon_name]['class_extension_paths'])
700
+		) {
701
+			EE_Register_Model_Extensions::register(
702
+				$addon_name,
703
+				array(
704
+					'model_extension_paths' => self::$_settings[$addon_name]['model_extension_paths'],
705
+					'class_extension_paths' => self::$_settings[$addon_name]['class_extension_paths'],
706
+				)
707
+			);
708
+		}
709
+	}
710
+
711
+
712
+
713
+	/**
714
+	 * @param string $addon_name
715
+	 * @return void
716
+	 * @throws \EE_Error
717
+	 */
718 718
 	private static function _register_data_migration_scripts( $addon_name ) {
719
-        // setup DMS
720
-        if ( ! empty(self::$_settings[$addon_name]['dms_paths'])) {
721
-            EE_Register_Data_Migration_Scripts::register(
722
-                $addon_name,
723
-                array('dms_paths' => self::$_settings[$addon_name]['dms_paths'])
724
-            );
725
-        }
726
-    }
727
-
728
-
729
-    /**
730
-     * @param string $addon_name
731
-     * @return void
732
-     * @throws \EE_Error
733
-     */
719
+		// setup DMS
720
+		if ( ! empty(self::$_settings[$addon_name]['dms_paths'])) {
721
+			EE_Register_Data_Migration_Scripts::register(
722
+				$addon_name,
723
+				array('dms_paths' => self::$_settings[$addon_name]['dms_paths'])
724
+			);
725
+		}
726
+	}
727
+
728
+
729
+	/**
730
+	 * @param string $addon_name
731
+	 * @return void
732
+	 * @throws \EE_Error
733
+	 */
734 734
 	private static function _register_config( $addon_name ) {
735
-        // if config_class is present let's register config.
736
-        if ( ! empty(self::$_settings[$addon_name]['config_class'])) {
737
-            EE_Register_Config::register(
738
-                self::$_settings[$addon_name]['config_class'],
739
-                array(
740
-                    'config_section' => self::$_settings[$addon_name]['config_section'],
741
-                    'config_name'    => self::$_settings[$addon_name]['config_name'],
742
-                )
743
-            );
744
-        }
745
-    }
746
-
747
-
748
-    /**
749
-     * @param string $addon_name
750
-     * @return void
751
-     * @throws \EE_Error
752
-     */
735
+		// if config_class is present let's register config.
736
+		if ( ! empty(self::$_settings[$addon_name]['config_class'])) {
737
+			EE_Register_Config::register(
738
+				self::$_settings[$addon_name]['config_class'],
739
+				array(
740
+					'config_section' => self::$_settings[$addon_name]['config_section'],
741
+					'config_name'    => self::$_settings[$addon_name]['config_name'],
742
+				)
743
+			);
744
+		}
745
+	}
746
+
747
+
748
+	/**
749
+	 * @param string $addon_name
750
+	 * @return void
751
+	 * @throws \EE_Error
752
+	 */
753 753
 	private static function _register_admin_pages( $addon_name ) {
754
-        if ( ! empty(self::$_settings[$addon_name]['admin_path'])) {
755
-            EE_Register_Admin_Page::register(
756
-                $addon_name,
757
-                array('page_path' => self::$_settings[$addon_name]['admin_path'])
758
-            );
759
-        }
760
-    }
761
-
762
-
763
-    /**
764
-     * @param string $addon_name
765
-     * @return void
766
-     * @throws \EE_Error
767
-     */
754
+		if ( ! empty(self::$_settings[$addon_name]['admin_path'])) {
755
+			EE_Register_Admin_Page::register(
756
+				$addon_name,
757
+				array('page_path' => self::$_settings[$addon_name]['admin_path'])
758
+			);
759
+		}
760
+	}
761
+
762
+
763
+	/**
764
+	 * @param string $addon_name
765
+	 * @return void
766
+	 * @throws \EE_Error
767
+	 */
768 768
 	private static function _register_modules( $addon_name ) {
769
-        if ( ! empty(self::$_settings[$addon_name]['module_paths'])) {
770
-            EE_Register_Module::register(
771
-                $addon_name,
772
-                array('module_paths' => self::$_settings[$addon_name]['module_paths'])
773
-            );
774
-        }
775
-    }
776
-
777
-
778
-    /**
779
-     * @param string $addon_name
780
-     * @return void
781
-     * @throws \EE_Error
782
-     */
769
+		if ( ! empty(self::$_settings[$addon_name]['module_paths'])) {
770
+			EE_Register_Module::register(
771
+				$addon_name,
772
+				array('module_paths' => self::$_settings[$addon_name]['module_paths'])
773
+			);
774
+		}
775
+	}
776
+
777
+
778
+	/**
779
+	 * @param string $addon_name
780
+	 * @return void
781
+	 * @throws \EE_Error
782
+	 */
783 783
 	private static function _register_shortcodes( $addon_name ) {
784
-        if ( ! empty(self::$_settings[$addon_name]['shortcode_paths'])) {
785
-            EE_Register_Shortcode::register(
786
-                $addon_name,
787
-                array('shortcode_paths' => self::$_settings[$addon_name]['shortcode_paths'])
788
-            );
789
-        }
790
-    }
791
-
792
-
793
-    /**
794
-     * @param string $addon_name
795
-     * @return void
796
-     * @throws \EE_Error
797
-     */
784
+		if ( ! empty(self::$_settings[$addon_name]['shortcode_paths'])) {
785
+			EE_Register_Shortcode::register(
786
+				$addon_name,
787
+				array('shortcode_paths' => self::$_settings[$addon_name]['shortcode_paths'])
788
+			);
789
+		}
790
+	}
791
+
792
+
793
+	/**
794
+	 * @param string $addon_name
795
+	 * @return void
796
+	 * @throws \EE_Error
797
+	 */
798 798
 	private static function _register_widgets( $addon_name ) {
799
-        if ( ! empty(self::$_settings[$addon_name]['widget_paths'])) {
800
-            EE_Register_Widget::register(
801
-                $addon_name,
802
-                array('widget_paths' => self::$_settings[$addon_name]['widget_paths'])
803
-            );
804
-        }
805
-    }
806
-
807
-
808
-    /**
809
-     * @param string $addon_name
810
-     * @return void
811
-     * @throws \EE_Error
812
-     */
799
+		if ( ! empty(self::$_settings[$addon_name]['widget_paths'])) {
800
+			EE_Register_Widget::register(
801
+				$addon_name,
802
+				array('widget_paths' => self::$_settings[$addon_name]['widget_paths'])
803
+			);
804
+		}
805
+	}
806
+
807
+
808
+	/**
809
+	 * @param string $addon_name
810
+	 * @return void
811
+	 * @throws \EE_Error
812
+	 */
813 813
 	private static function _register_capabilities( $addon_name ) {
814
-        if ( ! empty(self::$_settings[$addon_name]['capabilities'])) {
815
-            EE_Register_Capabilities::register(
816
-                $addon_name,
817
-                array(
818
-                    'capabilities'    => self::$_settings[$addon_name]['capabilities'],
819
-                    'capability_maps' => self::$_settings[$addon_name]['capability_maps'],
820
-                )
821
-            );
822
-        }
823
-    }
824
-
825
-
826
-    /**
827
-     * @param string $addon_name
828
-     * @return void
829
-     * @throws \EE_Error
830
-     */
814
+		if ( ! empty(self::$_settings[$addon_name]['capabilities'])) {
815
+			EE_Register_Capabilities::register(
816
+				$addon_name,
817
+				array(
818
+					'capabilities'    => self::$_settings[$addon_name]['capabilities'],
819
+					'capability_maps' => self::$_settings[$addon_name]['capability_maps'],
820
+				)
821
+			);
822
+		}
823
+	}
824
+
825
+
826
+	/**
827
+	 * @param string $addon_name
828
+	 * @return void
829
+	 * @throws \EE_Error
830
+	 */
831 831
 	private static function _register_message_types( $addon_name ) {
832
-        if ( ! empty(self::$_settings[$addon_name]['message_types'])) {
833
-            add_action(
834
-                'EE_Brewing_Regular___messages_caf',
835
-                array('EE_Register_Addon', 'register_message_types')
836
-            );
837
-        }
838
-    }
839
-
840
-
841
-    /**
842
-     * @param string $addon_name
843
-     * @return void
844
-     * @throws \EE_Error
845
-     */
832
+		if ( ! empty(self::$_settings[$addon_name]['message_types'])) {
833
+			add_action(
834
+				'EE_Brewing_Regular___messages_caf',
835
+				array('EE_Register_Addon', 'register_message_types')
836
+			);
837
+		}
838
+	}
839
+
840
+
841
+	/**
842
+	 * @param string $addon_name
843
+	 * @return void
844
+	 * @throws \EE_Error
845
+	 */
846 846
 	private static function _register_custom_post_types( $addon_name ) {
847
-        if (
848
-            ! empty(self::$_settings[$addon_name]['custom_post_types'])
849
-            || ! empty(self::$_settings[$addon_name]['custom_taxonomies'])
850
-        ) {
851
-            EE_Register_CPT::register(
852
-                $addon_name,
853
-                array(
854
-                    'cpts'          => self::$_settings[$addon_name]['custom_post_types'],
855
-                    'cts'           => self::$_settings[$addon_name]['custom_taxonomies'],
856
-                    'default_terms' => self::$_settings[$addon_name]['default_terms'],
857
-                )
858
-            );
859
-        }
860
-    }
861
-
862
-
863
-    /**
864
-     * @param string $addon_name
865
-     * @return void
866
-     * @throws \EE_Error
867
-     */
847
+		if (
848
+			! empty(self::$_settings[$addon_name]['custom_post_types'])
849
+			|| ! empty(self::$_settings[$addon_name]['custom_taxonomies'])
850
+		) {
851
+			EE_Register_CPT::register(
852
+				$addon_name,
853
+				array(
854
+					'cpts'          => self::$_settings[$addon_name]['custom_post_types'],
855
+					'cts'           => self::$_settings[$addon_name]['custom_taxonomies'],
856
+					'default_terms' => self::$_settings[$addon_name]['default_terms'],
857
+				)
858
+			);
859
+		}
860
+	}
861
+
862
+
863
+	/**
864
+	 * @param string $addon_name
865
+	 * @return void
866
+	 * @throws \EE_Error
867
+	 */
868 868
 	private static function _register_payment_methods( $addon_name ) {
869
-        if ( ! empty(self::$_settings[$addon_name]['payment_method_paths'])) {
870
-            EE_Register_Payment_Method::register(
871
-                $addon_name,
872
-                array('payment_method_paths' => self::$_settings[$addon_name]['payment_method_paths'])
873
-            );
874
-        }
875
-    }
869
+		if ( ! empty(self::$_settings[$addon_name]['payment_method_paths'])) {
870
+			EE_Register_Payment_Method::register(
871
+				$addon_name,
872
+				array('payment_method_paths' => self::$_settings[$addon_name]['payment_method_paths'])
873
+			);
874
+		}
875
+	}
876 876
 
877 877
 
878 878
 
@@ -901,14 +901,14 @@  discard block
 block discarded – undo
901 901
 		//unfortunately this can't be hooked in upon construction, because we don't have
902 902
 		//the plugin mainfile's path upon construction.
903 903
 		register_deactivation_hook( $addon->get_main_plugin_file(), array( $addon, 'deactivation' ) );
904
-        // call any additional admin_callback functions during load_admin_controller hook
905
-        if ( ! empty(self::$_settings[$addon_name]['admin_callback'])) {
906
-            add_action(
907
-                'AHEE__EE_System__load_controllers__load_admin_controllers',
908
-                array($addon, self::$_settings[$addon_name]['admin_callback'])
909
-            );
910
-        }
911
-        return $addon;
904
+		// call any additional admin_callback functions during load_admin_controller hook
905
+		if ( ! empty(self::$_settings[$addon_name]['admin_callback'])) {
906
+			add_action(
907
+				'AHEE__EE_System__load_controllers__load_admin_controllers',
908
+				array($addon, self::$_settings[$addon_name]['admin_callback'])
909
+			);
910
+		}
911
+		return $addon;
912 912
 	}
913 913
 
914 914
 
@@ -924,7 +924,7 @@  discard block
 block discarded – undo
924 924
 		// cycle thru settings
925 925
 		foreach ( self::$_settings as $settings ) {
926 926
 			if ( ! empty( $settings['pue_options'] ) ) {
927
-                // initiate the class and start the plugin update engine!
927
+				// initiate the class and start the plugin update engine!
928 928
 				new PluginUpdateEngineChecker(
929 929
 				// host file URL
930 930
 					'https://eventespresso.com',
@@ -960,11 +960,11 @@  discard block
 block discarded – undo
960 960
 	 */
961 961
 	public static function register_message_types() {
962 962
 		foreach ( self::$_settings as $addon_name => $settings ) {
963
-		    if ( ! empty($settings['message_types'])) {
964
-                foreach ((array)$settings['message_types'] as $message_type => $message_type_settings) {
965
-                    EE_Register_Message_Type::register($message_type, $message_type_settings);
966
-                }
967
-            }
963
+			if ( ! empty($settings['message_types'])) {
964
+				foreach ((array)$settings['message_types'] as $message_type => $message_type_settings) {
965
+					EE_Register_Message_Type::register($message_type, $message_type_settings);
966
+				}
967
+			}
968 968
 		}
969 969
 	}
970 970
 
@@ -980,7 +980,7 @@  discard block
 block discarded – undo
980 980
 	 */
981 981
 	public static function deregister( $addon_name = null ) {
982 982
 		if ( isset( self::$_settings[ $addon_name ] ) ) {
983
-		    do_action('AHEE__EE_Register_Addon__deregister__before', $addon_name);
983
+			do_action('AHEE__EE_Register_Addon__deregister__before', $addon_name);
984 984
 			$class_name = self::$_settings[ $addon_name ]['class_name'];
985 985
 			if ( ! empty( self::$_settings[ $addon_name ]['dms_paths'] ) ) {
986 986
 				// setup DMS
@@ -1007,15 +1007,15 @@  discard block
 block discarded – undo
1007 1007
 				EE_Register_Widget::deregister( $addon_name );
1008 1008
 			}
1009 1009
 			if ( ! empty( self::$_settings[ $addon_name ]['model_paths'] )
1010
-			     ||
1011
-			     ! empty( self::$_settings[ $addon_name ]['class_paths'] )
1010
+				 ||
1011
+				 ! empty( self::$_settings[ $addon_name ]['class_paths'] )
1012 1012
 			) {
1013 1013
 				// add to list of shortcodes to be registered
1014 1014
 				EE_Register_Model::deregister( $addon_name );
1015 1015
 			}
1016 1016
 			if ( ! empty( self::$_settings[ $addon_name ]['model_extension_paths'] )
1017
-			     ||
1018
-			     ! empty( self::$_settings[ $addon_name ]['class_extension_paths'] )
1017
+				 ||
1018
+				 ! empty( self::$_settings[ $addon_name ]['class_extension_paths'] )
1019 1019
 			) {
1020 1020
 				// add to list of shortcodes to be registered
1021 1021
 				EE_Register_Model_Extensions::deregister( $addon_name );
@@ -1046,7 +1046,7 @@  discard block
 block discarded – undo
1046 1046
 				array( EE_Registry::instance()->addons->{$class_name}, 'initialize_db_if_no_migrations_required' )
1047 1047
 			);
1048 1048
 			unset( EE_Registry::instance()->addons->{$class_name}, self::$_settings[ $addon_name ] );
1049
-            do_action('AHEE__EE_Register_Addon__deregister__after', $addon_name);
1049
+			do_action('AHEE__EE_Register_Addon__deregister__after', $addon_name);
1050 1050
 		}
1051 1051
 	}
1052 1052
 
Please login to merge, or discard this patch.
Spacing   +119 added lines, -119 removed lines patch added patch discarded remove patch
@@ -1,5 +1,5 @@  discard block
 block discarded – undo
1
-<?php if ( ! defined( 'EVENT_ESPRESSO_VERSION' ) ) {
2
-	exit( 'No direct script access allowed' );
1
+<?php if ( ! defined('EVENT_ESPRESSO_VERSION')) {
2
+	exit('No direct script access allowed');
3 3
 }
4 4
 
5 5
 
@@ -61,23 +61,23 @@  discard block
 block discarded – undo
61 61
 	 * @param string $min_core_version
62 62
 	 * @return string always like '4.3.0.rc.000'
63 63
 	 */
64
-	protected static function _effective_version( $min_core_version ) {
64
+	protected static function _effective_version($min_core_version) {
65 65
 		// versions: 4 . 3 . 1 . p . 123
66 66
 		// offsets:    0 . 1 . 2 . 3 . 4
67
-		$version_parts = explode( '.', $min_core_version );
67
+		$version_parts = explode('.', $min_core_version);
68 68
 		//check they specified the micro version (after 2nd period)
69
-		if ( ! isset( $version_parts[2] ) ) {
69
+		if ( ! isset($version_parts[2])) {
70 70
 			$version_parts[2] = '0';
71 71
 		}
72 72
 		//if they didn't specify the 'p', or 'rc' part. Just assume the lowest possible
73 73
 		//soon we can assume that's 'rc', but this current version is 'alpha'
74
-		if ( ! isset( $version_parts[3] ) ) {
74
+		if ( ! isset($version_parts[3])) {
75 75
 			$version_parts[3] = 'dev';
76 76
 		}
77
-		if ( ! isset( $version_parts[4] ) ) {
77
+		if ( ! isset($version_parts[4])) {
78 78
 			$version_parts[4] = '000';
79 79
 		}
80
-		return implode( '.', $version_parts );
80
+		return implode('.', $version_parts);
81 81
 	}
82 82
 
83 83
 
@@ -94,8 +94,8 @@  discard block
 block discarded – undo
94 94
 		$actual_core_version = EVENT_ESPRESSO_VERSION
95 95
 	) {
96 96
 		return version_compare(
97
-			self::_effective_version( $actual_core_version ),
98
-			self::_effective_version( $min_core_version ),
97
+			self::_effective_version($actual_core_version),
98
+			self::_effective_version($min_core_version),
99 99
 			'>='
100 100
 		);
101 101
 	}
@@ -217,7 +217,7 @@  discard block
 block discarded – undo
217 217
 	 * @throws EE_Error
218 218
 	 * @return void
219 219
 	 */
220
-	public static function register( $addon_name = '', $setup_args = array() ) {
220
+	public static function register($addon_name = '', $setup_args = array()) {
221 221
 		// required fields MUST be present, so let's make sure they are.
222 222
         \EE_Register_Addon::_verify_parameters($addon_name, $setup_args);
223 223
         // get class name for addon
@@ -227,13 +227,13 @@  discard block
 block discarded – undo
227 227
         // setup PUE
228 228
         \EE_Register_Addon::_parse_pue_options($addon_name, $class_name, $setup_args);
229 229
         // does this addon work with this version of core or WordPress ?
230
-        if ( ! \EE_Register_Addon::_addon_is_compatible($addon_name, $addon_settings) ) {
230
+        if ( ! \EE_Register_Addon::_addon_is_compatible($addon_name, $addon_settings)) {
231 231
             return;
232 232
 		}
233 233
 		// register namespaces
234 234
         \EE_Register_Addon::_setup_namespaces($addon_settings);
235 235
         // check if this is an activation request
236
-        if ( \EE_Register_Addon::_addon_activation($addon_name, $addon_settings)) {
236
+        if (\EE_Register_Addon::_addon_activation($addon_name, $addon_settings)) {
237 237
             // dont bother setting up the rest of the addon atm
238 238
             return;
239 239
         }
@@ -327,7 +327,7 @@  discard block
 block discarded – undo
327 327
         } else {
328 328
             $class_name = $setup_args['class_name'];
329 329
         }
330
-        return strpos($class_name, 'EE_') === 0 ? $class_name : 'EE_' . $class_name;
330
+        return strpos($class_name, 'EE_') === 0 ? $class_name : 'EE_'.$class_name;
331 331
     }
332 332
 
333 333
 
@@ -345,105 +345,105 @@  discard block
 block discarded – undo
345 345
             'class_name'            => $class_name,
346 346
             // the addon slug for use in URLs, etc
347 347
             'plugin_slug'           => isset($setup_args['plugin_slug'])
348
-                ? (string)$setup_args['plugin_slug']
348
+                ? (string) $setup_args['plugin_slug']
349 349
                 : '',
350 350
             // page slug to be used when generating the "Settings" link on the WP plugin page
351 351
             'plugin_action_slug'    => isset($setup_args['plugin_action_slug'])
352
-                ? (string)$setup_args['plugin_action_slug']
352
+                ? (string) $setup_args['plugin_action_slug']
353 353
                 : '',
354 354
             // the "software" version for the addon
355 355
             'version'               => isset($setup_args['version'])
356
-                ? (string)$setup_args['version']
356
+                ? (string) $setup_args['version']
357 357
                 : '',
358 358
             // the minimum version of EE Core that the addon will work with
359 359
             'min_core_version'      => isset($setup_args['min_core_version'])
360
-                ? (string)$setup_args['min_core_version']
360
+                ? (string) $setup_args['min_core_version']
361 361
                 : '',
362 362
             // the minimum version of WordPress that the addon will work with
363 363
             'min_wp_version'        => isset($setup_args['min_wp_version'])
364
-                ? (string)$setup_args['min_wp_version']
364
+                ? (string) $setup_args['min_wp_version']
365 365
                 : EE_MIN_WP_VER_REQUIRED,
366 366
             // full server path to main file (file loaded directly by WP)
367 367
             'main_file_path'        => isset($setup_args['main_file_path'])
368
-                ? (string)$setup_args['main_file_path']
368
+                ? (string) $setup_args['main_file_path']
369 369
                 : '',
370 370
             // path to folder containing files for integrating with the EE core admin and/or setting up EE admin pages
371 371
             'admin_path'            => isset($setup_args['admin_path'])
372
-                ? (string)$setup_args['admin_path'] : '',
372
+                ? (string) $setup_args['admin_path'] : '',
373 373
             // a method to be called when the EE Admin is first invoked, can be used for hooking into any admin page
374 374
             'admin_callback'        => isset($setup_args['admin_callback'])
375
-                ? (string)$setup_args['admin_callback']
375
+                ? (string) $setup_args['admin_callback']
376 376
                 : '',
377 377
             // the section name for this addon's configuration settings section (defaults to "addons")
378 378
             'config_section'        => isset($setup_args['config_section'])
379
-                ? (string)$setup_args['config_section']
379
+                ? (string) $setup_args['config_section']
380 380
                 : 'addons',
381 381
             // the class name for this addon's configuration settings object
382 382
             'config_class'          => isset($setup_args['config_class'])
383
-                ? (string)$setup_args['config_class'] : '',
383
+                ? (string) $setup_args['config_class'] : '',
384 384
             //the name given to the config for this addons' configuration settings object (optional)
385 385
             'config_name'           => isset($setup_args['config_name'])
386
-                ? (string)$setup_args['config_name'] : '',
386
+                ? (string) $setup_args['config_name'] : '',
387 387
             // an array of "class names" => "full server paths" for any classes that might be invoked by the addon
388 388
             'autoloader_paths'      => isset($setup_args['autoloader_paths'])
389
-                ? (array)$setup_args['autoloader_paths']
389
+                ? (array) $setup_args['autoloader_paths']
390 390
                 : array(),
391 391
             // an array of  "full server paths" for any folders containing classes that might be invoked by the addon
392 392
             'autoloader_folders'    => isset($setup_args['autoloader_folders'])
393
-                ? (array)$setup_args['autoloader_folders']
393
+                ? (array) $setup_args['autoloader_folders']
394 394
                 : array(),
395 395
             // array of full server paths to any EE_DMS data migration scripts used by the addon
396 396
             'dms_paths'             => isset($setup_args['dms_paths'])
397
-                ? (array)$setup_args['dms_paths']
397
+                ? (array) $setup_args['dms_paths']
398 398
                 : array(),
399 399
             // array of full server paths to any EED_Modules used by the addon
400 400
             'module_paths'          => isset($setup_args['module_paths'])
401
-                ? (array)$setup_args['module_paths']
401
+                ? (array) $setup_args['module_paths']
402 402
                 : array(),
403 403
             // array of full server paths to any EES_Shortcodes used by the addon
404 404
             'shortcode_paths'       => isset($setup_args['shortcode_paths'])
405
-                ? (array)$setup_args['shortcode_paths']
405
+                ? (array) $setup_args['shortcode_paths']
406 406
                 : array(),
407 407
             // array of full server paths to any WP_Widgets used by the addon
408 408
             'widget_paths'          => isset($setup_args['widget_paths'])
409
-                ? (array)$setup_args['widget_paths']
409
+                ? (array) $setup_args['widget_paths']
410 410
                 : array(),
411 411
             // array of PUE options used by the addon
412 412
             'pue_options'           => isset($setup_args['pue_options'])
413
-                ? (array)$setup_args['pue_options']
413
+                ? (array) $setup_args['pue_options']
414 414
                 : array(),
415 415
             'message_types'         => isset($setup_args['message_types'])
416
-                ? (array)$setup_args['message_types']
416
+                ? (array) $setup_args['message_types']
417 417
                 : array(),
418 418
             'capabilities'          => isset($setup_args['capabilities'])
419
-                ? (array)$setup_args['capabilities']
419
+                ? (array) $setup_args['capabilities']
420 420
                 : array(),
421 421
             'capability_maps'       => isset($setup_args['capability_maps'])
422
-                ? (array)$setup_args['capability_maps']
422
+                ? (array) $setup_args['capability_maps']
423 423
                 : array(),
424 424
             'model_paths'           => isset($setup_args['model_paths'])
425
-                ? (array)$setup_args['model_paths']
425
+                ? (array) $setup_args['model_paths']
426 426
                 : array(),
427 427
             'class_paths'           => isset($setup_args['class_paths'])
428
-                ? (array)$setup_args['class_paths']
428
+                ? (array) $setup_args['class_paths']
429 429
                 : array(),
430 430
             'model_extension_paths' => isset($setup_args['model_extension_paths'])
431
-                ? (array)$setup_args['model_extension_paths']
431
+                ? (array) $setup_args['model_extension_paths']
432 432
                 : array(),
433 433
             'class_extension_paths' => isset($setup_args['class_extension_paths'])
434
-                ? (array)$setup_args['class_extension_paths']
434
+                ? (array) $setup_args['class_extension_paths']
435 435
                 : array(),
436 436
             'custom_post_types'     => isset($setup_args['custom_post_types'])
437
-                ? (array)$setup_args['custom_post_types']
437
+                ? (array) $setup_args['custom_post_types']
438 438
                 : array(),
439 439
             'custom_taxonomies'     => isset($setup_args['custom_taxonomies'])
440
-                ? (array)$setup_args['custom_taxonomies']
440
+                ? (array) $setup_args['custom_taxonomies']
441 441
                 : array(),
442 442
             'payment_method_paths'  => isset($setup_args['payment_method_paths'])
443
-                ? (array)$setup_args['payment_method_paths']
443
+                ? (array) $setup_args['payment_method_paths']
444 444
                 : array(),
445 445
             'default_terms'         => isset($setup_args['default_terms'])
446
-                ? (array)$setup_args['default_terms']
446
+                ? (array) $setup_args['default_terms']
447 447
                 : array(),
448 448
             // if not empty, inserts a new table row after this plugin's row on the WP Plugins page
449 449
             // that can be used for adding upgrading/marketing info
@@ -455,7 +455,7 @@  discard block
 block discarded – undo
455 455
                 $setup_args['namespace']['FQNS'],
456 456
                 $setup_args['namespace']['DIR']
457 457
             )
458
-                ? (array)$setup_args['namespace']
458
+                ? (array) $setup_args['namespace']
459 459
                 : array(),
460 460
         );
461 461
         // if plugin_action_slug is NOT set, but an admin page path IS set,
@@ -476,7 +476,7 @@  discard block
 block discarded – undo
476 476
      * @param array  $addon_settings
477 477
      * @return boolean
478 478
      */
479
-	private static function _addon_is_compatible( $addon_name, array $addon_settings ) {
479
+	private static function _addon_is_compatible($addon_name, array $addon_settings) {
480 480
         global $wp_version;
481 481
         $incompatibility_message = '';
482 482
         //check whether this addon version is compatible with EE core
@@ -552,20 +552,20 @@  discard block
 block discarded – undo
552 552
      * @param array  $setup_args
553 553
      * @return void
554 554
      */
555
-	private static function _parse_pue_options( $addon_name, $class_name, array $setup_args ) {
555
+	private static function _parse_pue_options($addon_name, $class_name, array $setup_args) {
556 556
         if ( ! empty($setup_args['pue_options'])) {
557 557
             self::$_settings[$addon_name]['pue_options'] = array(
558 558
                 'pue_plugin_slug' => isset($setup_args['pue_options']['pue_plugin_slug'])
559
-                    ? (string)$setup_args['pue_options']['pue_plugin_slug']
560
-                    : 'espresso_' . strtolower($class_name),
559
+                    ? (string) $setup_args['pue_options']['pue_plugin_slug']
560
+                    : 'espresso_'.strtolower($class_name),
561 561
                 'plugin_basename' => isset($setup_args['pue_options']['plugin_basename'])
562
-                    ? (string)$setup_args['pue_options']['plugin_basename']
562
+                    ? (string) $setup_args['pue_options']['plugin_basename']
563 563
                     : plugin_basename($setup_args['main_file_path']),
564 564
                 'checkPeriod'     => isset($setup_args['pue_options']['checkPeriod'])
565
-                    ? (string)$setup_args['pue_options']['checkPeriod']
565
+                    ? (string) $setup_args['pue_options']['checkPeriod']
566 566
                     : '24',
567 567
                 'use_wp_update'   => isset($setup_args['pue_options']['use_wp_update'])
568
-                    ? (string)$setup_args['pue_options']['use_wp_update']
568
+                    ? (string) $setup_args['pue_options']['use_wp_update']
569 569
                     : false,
570 570
             );
571 571
             add_action(
@@ -607,7 +607,7 @@  discard block
 block discarded – undo
607 607
      * @param array  $addon_settings
608 608
      * @return bool
609 609
      */
610
-	private static function _addon_activation( $addon_name, array $addon_settings ) {
610
+	private static function _addon_activation($addon_name, array $addon_settings) {
611 611
         // this is an activation request
612 612
         if (did_action('activate_plugin')) {
613 613
             //to find if THIS is the addon that was activated,
@@ -664,7 +664,7 @@  discard block
 block discarded – undo
664 664
         }
665 665
         // setup autoloaders for folders
666 666
         if ( ! empty(self::$_settings[$addon_name]['autoloader_folders'])) {
667
-            foreach ((array)self::$_settings[$addon_name]['autoloader_folders'] as $autoloader_folder) {
667
+            foreach ((array) self::$_settings[$addon_name]['autoloader_folders'] as $autoloader_folder) {
668 668
                 EEH_Autoloader::register_autoloaders_for_each_file_in_folder($autoloader_folder);
669 669
             }
670 670
         }
@@ -679,7 +679,7 @@  discard block
 block discarded – undo
679 679
      * @return void
680 680
      * @throws \EE_Error
681 681
      */
682
-	private static function _register_models_and_extensions( $addon_name ) {
682
+	private static function _register_models_and_extensions($addon_name) {
683 683
         // register new models
684 684
         if (
685 685
             ! empty(self::$_settings[$addon_name]['model_paths'])
@@ -715,7 +715,7 @@  discard block
 block discarded – undo
715 715
      * @return void
716 716
      * @throws \EE_Error
717 717
      */
718
-	private static function _register_data_migration_scripts( $addon_name ) {
718
+	private static function _register_data_migration_scripts($addon_name) {
719 719
         // setup DMS
720 720
         if ( ! empty(self::$_settings[$addon_name]['dms_paths'])) {
721 721
             EE_Register_Data_Migration_Scripts::register(
@@ -731,7 +731,7 @@  discard block
 block discarded – undo
731 731
      * @return void
732 732
      * @throws \EE_Error
733 733
      */
734
-	private static function _register_config( $addon_name ) {
734
+	private static function _register_config($addon_name) {
735 735
         // if config_class is present let's register config.
736 736
         if ( ! empty(self::$_settings[$addon_name]['config_class'])) {
737 737
             EE_Register_Config::register(
@@ -750,7 +750,7 @@  discard block
 block discarded – undo
750 750
      * @return void
751 751
      * @throws \EE_Error
752 752
      */
753
-	private static function _register_admin_pages( $addon_name ) {
753
+	private static function _register_admin_pages($addon_name) {
754 754
         if ( ! empty(self::$_settings[$addon_name]['admin_path'])) {
755 755
             EE_Register_Admin_Page::register(
756 756
                 $addon_name,
@@ -765,7 +765,7 @@  discard block
 block discarded – undo
765 765
      * @return void
766 766
      * @throws \EE_Error
767 767
      */
768
-	private static function _register_modules( $addon_name ) {
768
+	private static function _register_modules($addon_name) {
769 769
         if ( ! empty(self::$_settings[$addon_name]['module_paths'])) {
770 770
             EE_Register_Module::register(
771 771
                 $addon_name,
@@ -780,7 +780,7 @@  discard block
 block discarded – undo
780 780
      * @return void
781 781
      * @throws \EE_Error
782 782
      */
783
-	private static function _register_shortcodes( $addon_name ) {
783
+	private static function _register_shortcodes($addon_name) {
784 784
         if ( ! empty(self::$_settings[$addon_name]['shortcode_paths'])) {
785 785
             EE_Register_Shortcode::register(
786 786
                 $addon_name,
@@ -795,7 +795,7 @@  discard block
 block discarded – undo
795 795
      * @return void
796 796
      * @throws \EE_Error
797 797
      */
798
-	private static function _register_widgets( $addon_name ) {
798
+	private static function _register_widgets($addon_name) {
799 799
         if ( ! empty(self::$_settings[$addon_name]['widget_paths'])) {
800 800
             EE_Register_Widget::register(
801 801
                 $addon_name,
@@ -810,7 +810,7 @@  discard block
 block discarded – undo
810 810
      * @return void
811 811
      * @throws \EE_Error
812 812
      */
813
-	private static function _register_capabilities( $addon_name ) {
813
+	private static function _register_capabilities($addon_name) {
814 814
         if ( ! empty(self::$_settings[$addon_name]['capabilities'])) {
815 815
             EE_Register_Capabilities::register(
816 816
                 $addon_name,
@@ -828,7 +828,7 @@  discard block
 block discarded – undo
828 828
      * @return void
829 829
      * @throws \EE_Error
830 830
      */
831
-	private static function _register_message_types( $addon_name ) {
831
+	private static function _register_message_types($addon_name) {
832 832
         if ( ! empty(self::$_settings[$addon_name]['message_types'])) {
833 833
             add_action(
834 834
                 'EE_Brewing_Regular___messages_caf',
@@ -843,7 +843,7 @@  discard block
 block discarded – undo
843 843
      * @return void
844 844
      * @throws \EE_Error
845 845
      */
846
-	private static function _register_custom_post_types( $addon_name ) {
846
+	private static function _register_custom_post_types($addon_name) {
847 847
         if (
848 848
             ! empty(self::$_settings[$addon_name]['custom_post_types'])
849 849
             || ! empty(self::$_settings[$addon_name]['custom_taxonomies'])
@@ -865,7 +865,7 @@  discard block
 block discarded – undo
865 865
      * @return void
866 866
      * @throws \EE_Error
867 867
      */
868
-	private static function _register_payment_methods( $addon_name ) {
868
+	private static function _register_payment_methods($addon_name) {
869 869
         if ( ! empty(self::$_settings[$addon_name]['payment_method_paths'])) {
870 870
             EE_Register_Payment_Method::register(
871 871
                 $addon_name,
@@ -882,25 +882,25 @@  discard block
 block discarded – undo
882 882
 	 * @param string $addon_name
883 883
 	 * @return EE_Addon
884 884
 	 */
885
-	private static function _load_and_init_addon_class( $addon_name ) {
885
+	private static function _load_and_init_addon_class($addon_name) {
886 886
 		$addon = EE_Registry::instance()->load_addon(
887
-			dirname( self::$_settings[ $addon_name ]['main_file_path'] ),
888
-			self::$_settings[ $addon_name ]['class_name']
887
+			dirname(self::$_settings[$addon_name]['main_file_path']),
888
+			self::$_settings[$addon_name]['class_name']
889 889
 		);
890
-		$addon->set_name( $addon_name );
891
-		$addon->set_plugin_slug( self::$_settings[ $addon_name ]['plugin_slug'] );
892
-		$addon->set_plugin_basename( self::$_settings[ $addon_name ]['plugin_basename'] );
893
-		$addon->set_main_plugin_file( self::$_settings[ $addon_name ]['main_file_path'] );
894
-		$addon->set_plugin_action_slug( self::$_settings[ $addon_name ]['plugin_action_slug'] );
895
-		$addon->set_plugins_page_row( self::$_settings[ $addon_name ]['plugins_page_row'] );
896
-		$addon->set_version( self::$_settings[ $addon_name ]['version'] );
897
-		$addon->set_min_core_version( self::_effective_version( self::$_settings[ $addon_name ]['min_core_version'] ) );
898
-		$addon->set_config_section( self::$_settings[ $addon_name ]['config_section'] );
899
-		$addon->set_config_class( self::$_settings[ $addon_name ]['config_class'] );
900
-		$addon->set_config_name( self::$_settings[ $addon_name ]['config_name'] );
890
+		$addon->set_name($addon_name);
891
+		$addon->set_plugin_slug(self::$_settings[$addon_name]['plugin_slug']);
892
+		$addon->set_plugin_basename(self::$_settings[$addon_name]['plugin_basename']);
893
+		$addon->set_main_plugin_file(self::$_settings[$addon_name]['main_file_path']);
894
+		$addon->set_plugin_action_slug(self::$_settings[$addon_name]['plugin_action_slug']);
895
+		$addon->set_plugins_page_row(self::$_settings[$addon_name]['plugins_page_row']);
896
+		$addon->set_version(self::$_settings[$addon_name]['version']);
897
+		$addon->set_min_core_version(self::_effective_version(self::$_settings[$addon_name]['min_core_version']));
898
+		$addon->set_config_section(self::$_settings[$addon_name]['config_section']);
899
+		$addon->set_config_class(self::$_settings[$addon_name]['config_class']);
900
+		$addon->set_config_name(self::$_settings[$addon_name]['config_name']);
901 901
 		//unfortunately this can't be hooked in upon construction, because we don't have
902 902
 		//the plugin mainfile's path upon construction.
903
-		register_deactivation_hook( $addon->get_main_plugin_file(), array( $addon, 'deactivation' ) );
903
+		register_deactivation_hook($addon->get_main_plugin_file(), array($addon, 'deactivation'));
904 904
         // call any additional admin_callback functions during load_admin_controller hook
905 905
         if ( ! empty(self::$_settings[$addon_name]['admin_callback'])) {
906 906
             add_action(
@@ -920,18 +920,18 @@  discard block
 block discarded – undo
920 920
 	 */
921 921
 	public static function load_pue_update() {
922 922
 		// load PUE client
923
-		require_once EE_THIRD_PARTY . 'pue' . DS . 'pue-client.php';
923
+		require_once EE_THIRD_PARTY.'pue'.DS.'pue-client.php';
924 924
 		// cycle thru settings
925
-		foreach ( self::$_settings as $settings ) {
926
-			if ( ! empty( $settings['pue_options'] ) ) {
925
+		foreach (self::$_settings as $settings) {
926
+			if ( ! empty($settings['pue_options'])) {
927 927
                 // initiate the class and start the plugin update engine!
928 928
 				new PluginUpdateEngineChecker(
929 929
 				// host file URL
930 930
 					'https://eventespresso.com',
931 931
 					// plugin slug(s)
932 932
 					array(
933
-						'premium'    => array( 'p' => $settings['pue_options']['pue_plugin_slug'] ),
934
-						'prerelease' => array( 'beta' => $settings['pue_options']['pue_plugin_slug'] . '-pr' ),
933
+						'premium'    => array('p' => $settings['pue_options']['pue_plugin_slug']),
934
+						'prerelease' => array('beta' => $settings['pue_options']['pue_plugin_slug'].'-pr'),
935 935
 					),
936 936
 					// options
937 937
 					array(
@@ -959,9 +959,9 @@  discard block
 block discarded – undo
959 959
 	 * @throws \EE_Error
960 960
 	 */
961 961
 	public static function register_message_types() {
962
-		foreach ( self::$_settings as $addon_name => $settings ) {
962
+		foreach (self::$_settings as $addon_name => $settings) {
963 963
 		    if ( ! empty($settings['message_types'])) {
964
-                foreach ((array)$settings['message_types'] as $message_type => $message_type_settings) {
964
+                foreach ((array) $settings['message_types'] as $message_type => $message_type_settings) {
965 965
                     EE_Register_Message_Type::register($message_type, $message_type_settings);
966 966
                 }
967 967
             }
@@ -978,74 +978,74 @@  discard block
 block discarded – undo
978 978
 	 * @throws EE_Error
979 979
 	 * @return void
980 980
 	 */
981
-	public static function deregister( $addon_name = null ) {
982
-		if ( isset( self::$_settings[ $addon_name ] ) ) {
981
+	public static function deregister($addon_name = null) {
982
+		if (isset(self::$_settings[$addon_name])) {
983 983
 		    do_action('AHEE__EE_Register_Addon__deregister__before', $addon_name);
984
-			$class_name = self::$_settings[ $addon_name ]['class_name'];
985
-			if ( ! empty( self::$_settings[ $addon_name ]['dms_paths'] ) ) {
984
+			$class_name = self::$_settings[$addon_name]['class_name'];
985
+			if ( ! empty(self::$_settings[$addon_name]['dms_paths'])) {
986 986
 				// setup DMS
987
-				EE_Register_Data_Migration_Scripts::deregister( $addon_name );
987
+				EE_Register_Data_Migration_Scripts::deregister($addon_name);
988 988
 			}
989
-			if ( ! empty( self::$_settings[ $addon_name ]['admin_path'] ) ) {
989
+			if ( ! empty(self::$_settings[$addon_name]['admin_path'])) {
990 990
 				// register admin page
991
-				EE_Register_Admin_Page::deregister( $addon_name );
991
+				EE_Register_Admin_Page::deregister($addon_name);
992 992
 			}
993
-			if ( ! empty( self::$_settings[ $addon_name ]['module_paths'] ) ) {
993
+			if ( ! empty(self::$_settings[$addon_name]['module_paths'])) {
994 994
 				// add to list of modules to be registered
995
-				EE_Register_Module::deregister( $addon_name );
995
+				EE_Register_Module::deregister($addon_name);
996 996
 			}
997
-			if ( ! empty( self::$_settings[ $addon_name ]['shortcode_paths'] ) ) {
997
+			if ( ! empty(self::$_settings[$addon_name]['shortcode_paths'])) {
998 998
 				// add to list of shortcodes to be registered
999
-				EE_Register_Shortcode::deregister( $addon_name );
999
+				EE_Register_Shortcode::deregister($addon_name);
1000 1000
 			}
1001
-			if ( ! empty( self::$_settings[ $addon_name ]['config_class'] ) ) {
1001
+			if ( ! empty(self::$_settings[$addon_name]['config_class'])) {
1002 1002
 				// if config_class present let's register config.
1003
-				EE_Register_Config::deregister( self::$_settings[ $addon_name ]['config_class'] );
1003
+				EE_Register_Config::deregister(self::$_settings[$addon_name]['config_class']);
1004 1004
 			}
1005
-			if ( ! empty( self::$_settings[ $addon_name ]['widget_paths'] ) ) {
1005
+			if ( ! empty(self::$_settings[$addon_name]['widget_paths'])) {
1006 1006
 				// add to list of widgets to be registered
1007
-				EE_Register_Widget::deregister( $addon_name );
1007
+				EE_Register_Widget::deregister($addon_name);
1008 1008
 			}
1009
-			if ( ! empty( self::$_settings[ $addon_name ]['model_paths'] )
1009
+			if ( ! empty(self::$_settings[$addon_name]['model_paths'])
1010 1010
 			     ||
1011
-			     ! empty( self::$_settings[ $addon_name ]['class_paths'] )
1011
+			     ! empty(self::$_settings[$addon_name]['class_paths'])
1012 1012
 			) {
1013 1013
 				// add to list of shortcodes to be registered
1014
-				EE_Register_Model::deregister( $addon_name );
1014
+				EE_Register_Model::deregister($addon_name);
1015 1015
 			}
1016
-			if ( ! empty( self::$_settings[ $addon_name ]['model_extension_paths'] )
1016
+			if ( ! empty(self::$_settings[$addon_name]['model_extension_paths'])
1017 1017
 			     ||
1018
-			     ! empty( self::$_settings[ $addon_name ]['class_extension_paths'] )
1018
+			     ! empty(self::$_settings[$addon_name]['class_extension_paths'])
1019 1019
 			) {
1020 1020
 				// add to list of shortcodes to be registered
1021
-				EE_Register_Model_Extensions::deregister( $addon_name );
1021
+				EE_Register_Model_Extensions::deregister($addon_name);
1022 1022
 			}
1023
-			if ( ! empty( self::$_settings[ $addon_name ]['message_types'] ) ) {
1024
-				foreach ((array)self::$_settings[ $addon_name ]['message_types'] as $message_type => $message_type_settings )
1023
+			if ( ! empty(self::$_settings[$addon_name]['message_types'])) {
1024
+				foreach ((array) self::$_settings[$addon_name]['message_types'] as $message_type => $message_type_settings)
1025 1025
 				{
1026
-					EE_Register_Message_Type::deregister( $message_type );
1026
+					EE_Register_Message_Type::deregister($message_type);
1027 1027
 				}
1028 1028
 			}
1029 1029
 			//deregister capabilities for addon
1030 1030
 			if (
1031
-				! empty( self::$_settings[ $addon_name ]['capabilities'] )
1032
-				|| ! empty( self::$_settings[ $addon_name ]['capability_maps'] )
1031
+				! empty(self::$_settings[$addon_name]['capabilities'])
1032
+				|| ! empty(self::$_settings[$addon_name]['capability_maps'])
1033 1033
 			) {
1034
-				EE_Register_Capabilities::deregister( $addon_name );
1034
+				EE_Register_Capabilities::deregister($addon_name);
1035 1035
 			}
1036 1036
 			//deregister custom_post_types for addon
1037
-			if ( ! empty( self::$_settings[ $addon_name ]['custom_post_types'] ) ) {
1038
-				EE_Register_CPT::deregister( $addon_name );
1037
+			if ( ! empty(self::$_settings[$addon_name]['custom_post_types'])) {
1038
+				EE_Register_CPT::deregister($addon_name);
1039 1039
 			}
1040 1040
 			remove_action(
1041
-				'deactivate_' . EE_Registry::instance()->addons->{$class_name}->get_main_plugin_file_basename(),
1042
-				array( EE_Registry::instance()->addons->{$class_name}, 'deactivation' )
1041
+				'deactivate_'.EE_Registry::instance()->addons->{$class_name}->get_main_plugin_file_basename(),
1042
+				array(EE_Registry::instance()->addons->{$class_name}, 'deactivation')
1043 1043
 			);
1044 1044
 			remove_action(
1045 1045
 				'AHEE__EE_System__perform_activations_upgrades_and_migrations',
1046
-				array( EE_Registry::instance()->addons->{$class_name}, 'initialize_db_if_no_migrations_required' )
1046
+				array(EE_Registry::instance()->addons->{$class_name}, 'initialize_db_if_no_migrations_required')
1047 1047
 			);
1048
-			unset( EE_Registry::instance()->addons->{$class_name}, self::$_settings[ $addon_name ] );
1048
+			unset(EE_Registry::instance()->addons->{$class_name}, self::$_settings[$addon_name]);
1049 1049
             do_action('AHEE__EE_Register_Addon__deregister__after', $addon_name);
1050 1050
 		}
1051 1051
 	}
Please login to merge, or discard this patch.
core/helpers/EEH_Parse_Shortcodes.helper.php 2 patches
Spacing   +6 added lines, -6 removed lines patch added patch discarded remove patch
@@ -1,6 +1,6 @@  discard block
 block discarded – undo
1 1
 <?php
2 2
 
3
-if (! defined('EVENT_ESPRESSO_VERSION')) {
3
+if ( ! defined('EVENT_ESPRESSO_VERSION')) {
4 4
     exit('NO direct script access allowed');
5 5
 }
6 6
 
@@ -186,7 +186,7 @@  discard block
 block discarded – undo
186 186
     {
187 187
         //now let's get a list of shortcodes that are found in the given template
188 188
         preg_match_all('/(\[.+?\])/', $this->_template, $matches);
189
-        $shortcodes = (array)$matches[0]; //this should be an array of shortcodes in the template string.
189
+        $shortcodes = (array) $matches[0]; //this should be an array of shortcodes in the template string.
190 190
 
191 191
         $matched_code = array();
192 192
         $sc_values    = array();
@@ -220,14 +220,14 @@  discard block
 block discarded – undo
220 220
                 if ($sc_obj instanceof EE_Shortcodes) {
221 221
                     //we need to setup any dynamic shortcodes so that they work with the array_key_exists
222 222
                     preg_match_all('/(\[[A-Za-z0-9\_]+_\*)/', $shortcode, $matches);
223
-                    $sc_to_verify = ! empty($matches[0]) ? $matches[0][0] . ']' : $shortcode;
223
+                    $sc_to_verify = ! empty($matches[0]) ? $matches[0][0].']' : $shortcode;
224 224
 
225
-                    if (! array_key_exists($sc_to_verify, $sc_obj->get_shortcodes())) {
225
+                    if ( ! array_key_exists($sc_to_verify, $sc_obj->get_shortcodes())) {
226 226
                         continue; //the given shortcode isn't in this object
227 227
                     }
228 228
 
229 229
                     //if this isn't  a "list" type shortcode then we'll send along the data vanilla instead of in an array.
230
-                    if (! in_array($sc_to_verify, $list_type_shortcodes)) {
230
+                    if ( ! in_array($sc_to_verify, $list_type_shortcodes)) {
231 231
                         $data_send = ! is_object($this->_data) && isset($this->_data['data']) ? $this->_data['data'] : $this->_data;
232 232
                     } else {
233 233
                         $data_send = $this->_data;
@@ -261,7 +261,7 @@  discard block
 block discarded – undo
261 261
         foreach ($valid_shortcodes as $shortcode_ref) {
262 262
             $ref       = ucwords(str_replace('_', ' ', $shortcode_ref));
263 263
             $ref       = str_replace(' ', '_', $ref);
264
-            $classname = 'EE_' . $ref . '_Shortcodes';
264
+            $classname = 'EE_'.$ref.'_Shortcodes';
265 265
             if (class_exists($classname)) {
266 266
                 $this->_shortcode_objs[] = new $classname;
267 267
             }
Please login to merge, or discard this patch.
Indentation   +264 added lines, -264 removed lines patch added patch discarded remove patch
@@ -1,7 +1,7 @@  discard block
 block discarded – undo
1 1
 <?php
2 2
 
3 3
 if (! defined('EVENT_ESPRESSO_VERSION')) {
4
-    exit('NO direct script access allowed');
4
+	exit('NO direct script access allowed');
5 5
 }
6 6
 
7 7
 /**
@@ -26,269 +26,269 @@  discard block
 block discarded – undo
26 26
 {
27 27
 
28 28
 
29
-    /**
30
-     * holds the template
31
-     *
32
-     * @access private
33
-     * @var mixed (string|array)
34
-     */
35
-    private $_template;
36
-
37
-
38
-    /**
39
-     * holds the incoming data object
40
-     *
41
-     * @access private
42
-     * @var object
43
-     */
44
-    private $_data;
45
-
46
-
47
-    /**
48
-     * will hold an array of EE_Shortcodes library objects.
49
-     *
50
-     * @access private
51
-     * @var EE_Shortcodes[]
52
-     */
53
-    private $_shortcode_objs = array();
54
-
55
-
56
-    public function __construct()
57
-    {
58
-    }
59
-
60
-
61
-    /**
62
-     * This kicks off the parsing of shortcodes in message templates
63
-     *
64
-     * @param  string                $template         This is the incoming string to be parsed
65
-     * @param  EE_Messages_Addressee $data             This is the incoming data object
66
-     * @param  array                 $valid_shortcodes An array of strings that correspond to EE_Shortcode libraries
67
-     * @param EE_message_type        $message_type     The message type that called the parser
68
-     * @param EE_messenger           $messenger        The active messenger for this parsing session.
69
-     * @param EE_Message             $message
70
-     * @return string                   The parsed template string
71
-     */
72
-    public function parse_message_template(
73
-        $template,
74
-        EE_Messages_Addressee $data,
75
-        $valid_shortcodes,
76
-        EE_message_type $message_type,
77
-        EE_messenger $messenger,
78
-        EE_Message $message
79
-    ) {
80
-        $extra_data = array(
81
-            'messenger'    => $messenger,
82
-            'message_type' => $message_type,
83
-            'message'      => $message,
84
-        );
85
-        $this->_init_data($template, $data, $valid_shortcodes, $extra_data);
86
-        $this->_template = is_array($template) ? $template['main'] : $template;
87
-        return $this->_parse_message_template();
88
-    }
89
-
90
-
91
-    public function parse_attendee_list_template(
92
-        $template,
93
-        EE_Registration $registration,
94
-        $valid_shortcodes,
95
-        $extra_data = array()
96
-    ) {
97
-        $this->_init_data($template, $registration, $valid_shortcodes, $extra_data);
98
-        $this->_template = is_array($template) ? $template['attendee_list'] : $template;
99
-        return $this->_parse_message_template();
100
-    }
101
-
102
-    public function parse_event_list_template($template, EE_Event $event, $valid_shortcodes, $extra_data = array())
103
-    {
104
-        $this->_init_data($template, $event, $valid_shortcodes, $extra_data);
105
-        $this->_template = is_array($template) ? $template['event_list'] : $template;
106
-        return $this->_parse_message_template();
107
-    }
108
-
109
-
110
-    public function parse_ticket_list_template($template, EE_Ticket $ticket, $valid_shortcodes, $extra_data = array())
111
-    {
112
-        $this->_init_data($template, $ticket, $valid_shortcodes, $extra_data);
113
-        $this->_template = is_array($template) ? $template['ticket_list'] : $template;
114
-        return $this->_parse_message_template();
115
-    }
116
-
117
-
118
-    public function parse_line_item_list_template(
119
-        $template,
120
-        EE_Line_Item $line_item,
121
-        $valid_shortcodes,
122
-        $extra_data = array()
123
-    ) {
124
-        $this->_init_data($template, $line_item, $valid_shortcodes, $extra_data);
125
-        $this->_template = is_array($template) ? $template['ticket_line_item_no_pms'] : $template;
126
-        return $this->_parse_message_template();
127
-    }
128
-
129
-
130
-    public function parse_payment_list_template(
131
-        $template,
132
-        EE_Payment $payment_item,
133
-        $valid_shortcodes,
134
-        $extra_data = array()
135
-    ) {
136
-        $this->_init_data($template, $payment_item, $valid_shortcodes, $extra_data);
137
-        $this->_template = is_array($template) ? $template['payment_list'] : $template;
138
-        return $this->_parse_message_template();
139
-    }
140
-
141
-
142
-    public function parse_datetime_list_template(
143
-        $template,
144
-        EE_Datetime $datetime,
145
-        $valid_shortcodes,
146
-        $extra_data = array()
147
-    ) {
148
-        $this->_init_data($template, $datetime, $valid_shortcodes, $extra_data);
149
-        $this->_template = is_array($template) ? $template['datetime_list'] : $template;
150
-        return $this->_parse_message_template();
151
-    }
152
-
153
-
154
-    public function parse_question_list_template($template, EE_Answer $answer, $valid_shortcodes, $extra_data = array())
155
-    {
156
-        $this->_init_data($template, $answer, $valid_shortcodes, $extra_data);
157
-        $this->_template = is_array($template) ? $template['question_list'] : $template;
158
-        return $this->_parse_message_template();
159
-    }
160
-
161
-
162
-    private function _init_data($template, $data, $valid_shortcodes, $extra_data = array())
163
-    {
164
-        $this->_reset_props();
165
-        $this->_data['template']   = $template;
166
-        $this->_data['data']       = $data;
167
-        $this->_data['extra_data'] = $extra_data;
168
-        $this->_set_shortcodes($valid_shortcodes);
169
-    }
170
-
171
-
172
-    private function _reset_props()
173
-    {
174
-        $this->_template       = $this->_data = null;
175
-        $this->_shortcode_objs = array();
176
-    }
177
-
178
-
179
-    /**
180
-     * takes the given template and parses it with the $_shortcodes property
181
-     *
182
-     * @access private
183
-     * @return string
184
-     */
185
-    private function _parse_message_template()
186
-    {
187
-        //now let's get a list of shortcodes that are found in the given template
188
-        preg_match_all('/(\[.+?\])/', $this->_template, $matches);
189
-        $shortcodes = (array)$matches[0]; //this should be an array of shortcodes in the template string.
190
-
191
-        $matched_code = array();
192
-        $sc_values    = array();
193
-
194
-        $list_type_shortcodes = array(
195
-            '[ATTENDEE_LIST]',
196
-            '[EVENT_LIST]',
197
-            '[TICKET_LIST]',
198
-            '[DATETIME_LIST]',
199
-            '[QUESTION_LIST]',
200
-            '[RECIPIENT_QUESTION_LIST]',
201
-            '[PRIMARY_REGISTRANT_QUESTION_LIST]',
202
-            '[RECIPIENT_TICKET_LIST]',
203
-            '[PRIMARY_REGISTRANT_TICKET_LIST]',
204
-            '[RECIPIENT_DATETIME_LIST]',
205
-            '[PRIMARY_REGISTRANT_DATETIME_LIST]',
206
-            '[TICKET_LINE_ITEM_LIST]',
207
-            '[TAX_LINE_ITEM_LIST]',
208
-            '[ADDITIONAL_LINE_ITEM_LIST]',
209
-            '[PRICE_MODIFIER_LINE_ITEM_LIST]',
210
-            '[PAYMENT_LIST_*]',
211
-        );
212
-
213
-        $list_type_shortcodes = apply_filters('FHEE__EEH_Parse_Shortcodes___parse_message_template__list_type_shortcodes',
214
-            $list_type_shortcodes);
215
-
216
-        //now lets go ahead and loop through our parsers for each shortcode and setup the values
217
-        foreach ($shortcodes as $shortcode) {
218
-
219
-            foreach ($this->_shortcode_objs as $sc_obj) {
220
-                if ($sc_obj instanceof EE_Shortcodes) {
221
-                    //we need to setup any dynamic shortcodes so that they work with the array_key_exists
222
-                    preg_match_all('/(\[[A-Za-z0-9\_]+_\*)/', $shortcode, $matches);
223
-                    $sc_to_verify = ! empty($matches[0]) ? $matches[0][0] . ']' : $shortcode;
224
-
225
-                    if (! array_key_exists($sc_to_verify, $sc_obj->get_shortcodes())) {
226
-                        continue; //the given shortcode isn't in this object
227
-                    }
228
-
229
-                    //if this isn't  a "list" type shortcode then we'll send along the data vanilla instead of in an array.
230
-                    if (! in_array($sc_to_verify, $list_type_shortcodes)) {
231
-                        $data_send = ! is_object($this->_data) && isset($this->_data['data']) ? $this->_data['data'] : $this->_data;
232
-                    } else {
233
-                        $data_send = $this->_data;
234
-                    }
235
-
236
-                    //is this a conditional type shortcode?  If it is then we actually parse the template here.
237
-                    if ($this->_is_conditional_shortcode($shortcode)) {
238
-                        //most shortcode parsers are not going to have a match for this shortcode and will return an
239
-                        //empty string so we need to make sure that we're only replacing the template when there is a non empty string.
240
-                        $parsed = $sc_obj->parser($shortcode, $data_send, $this->_data['extra_data']);
241
-                        if ($parsed) {
242
-                            $this->_template = $parsed;
243
-                        }
244
-                    }
245
-
246
-                    $parsed = $sc_obj->parser($shortcode, $data_send, $this->_data['extra_data']);
247
-
248
-                    $matched_code[] = $shortcode;
249
-                    $sc_values[]    = $parsed;
250
-                }
251
-            }
252
-        }
253
-
254
-        //now we've got parsed values for all the shortcodes in the template so we can go ahead and swap the shortcodes out.
255
-        $parsed = str_replace(array_values($matched_code), array_values($sc_values), $this->_template);
256
-        return $parsed;
257
-    }
258
-
259
-
260
-    /**
261
-     * Simply returns whether the given shortcode matches the structure for a conditional shortcode.
262
-     *
263
-     * Does it match this format: `[IF_`
264
-     *
265
-     * @param $shortcode
266
-     */
267
-    protected function _is_conditional_shortcode($shortcode)
268
-    {
269
-        return strpos($shortcode, '[IF_') === 0;
270
-    }
271
-
272
-
273
-    /**
274
-     * This sets the shortcodes property from the incoming array of valid shortcodes that corresponds to names of
275
-     * various EE_Shortcode library objects
276
-     *
277
-     * @access private
278
-     * @param array $valid_shortcodes an array of strings corresponding to EE_Shortcode Library objects
279
-     * @return void
280
-     */
281
-    private function _set_shortcodes($valid_shortcodes)
282
-    {
283
-        foreach ($valid_shortcodes as $shortcode_ref) {
284
-            $ref       = ucwords(str_replace('_', ' ', $shortcode_ref));
285
-            $ref       = str_replace(' ', '_', $ref);
286
-            $classname = 'EE_' . $ref . '_Shortcodes';
287
-            if (class_exists($classname)) {
288
-                $this->_shortcode_objs[] = new $classname;
289
-            }
290
-        }
291
-    }
29
+	/**
30
+	 * holds the template
31
+	 *
32
+	 * @access private
33
+	 * @var mixed (string|array)
34
+	 */
35
+	private $_template;
36
+
37
+
38
+	/**
39
+	 * holds the incoming data object
40
+	 *
41
+	 * @access private
42
+	 * @var object
43
+	 */
44
+	private $_data;
45
+
46
+
47
+	/**
48
+	 * will hold an array of EE_Shortcodes library objects.
49
+	 *
50
+	 * @access private
51
+	 * @var EE_Shortcodes[]
52
+	 */
53
+	private $_shortcode_objs = array();
54
+
55
+
56
+	public function __construct()
57
+	{
58
+	}
59
+
60
+
61
+	/**
62
+	 * This kicks off the parsing of shortcodes in message templates
63
+	 *
64
+	 * @param  string                $template         This is the incoming string to be parsed
65
+	 * @param  EE_Messages_Addressee $data             This is the incoming data object
66
+	 * @param  array                 $valid_shortcodes An array of strings that correspond to EE_Shortcode libraries
67
+	 * @param EE_message_type        $message_type     The message type that called the parser
68
+	 * @param EE_messenger           $messenger        The active messenger for this parsing session.
69
+	 * @param EE_Message             $message
70
+	 * @return string                   The parsed template string
71
+	 */
72
+	public function parse_message_template(
73
+		$template,
74
+		EE_Messages_Addressee $data,
75
+		$valid_shortcodes,
76
+		EE_message_type $message_type,
77
+		EE_messenger $messenger,
78
+		EE_Message $message
79
+	) {
80
+		$extra_data = array(
81
+			'messenger'    => $messenger,
82
+			'message_type' => $message_type,
83
+			'message'      => $message,
84
+		);
85
+		$this->_init_data($template, $data, $valid_shortcodes, $extra_data);
86
+		$this->_template = is_array($template) ? $template['main'] : $template;
87
+		return $this->_parse_message_template();
88
+	}
89
+
90
+
91
+	public function parse_attendee_list_template(
92
+		$template,
93
+		EE_Registration $registration,
94
+		$valid_shortcodes,
95
+		$extra_data = array()
96
+	) {
97
+		$this->_init_data($template, $registration, $valid_shortcodes, $extra_data);
98
+		$this->_template = is_array($template) ? $template['attendee_list'] : $template;
99
+		return $this->_parse_message_template();
100
+	}
101
+
102
+	public function parse_event_list_template($template, EE_Event $event, $valid_shortcodes, $extra_data = array())
103
+	{
104
+		$this->_init_data($template, $event, $valid_shortcodes, $extra_data);
105
+		$this->_template = is_array($template) ? $template['event_list'] : $template;
106
+		return $this->_parse_message_template();
107
+	}
108
+
109
+
110
+	public function parse_ticket_list_template($template, EE_Ticket $ticket, $valid_shortcodes, $extra_data = array())
111
+	{
112
+		$this->_init_data($template, $ticket, $valid_shortcodes, $extra_data);
113
+		$this->_template = is_array($template) ? $template['ticket_list'] : $template;
114
+		return $this->_parse_message_template();
115
+	}
116
+
117
+
118
+	public function parse_line_item_list_template(
119
+		$template,
120
+		EE_Line_Item $line_item,
121
+		$valid_shortcodes,
122
+		$extra_data = array()
123
+	) {
124
+		$this->_init_data($template, $line_item, $valid_shortcodes, $extra_data);
125
+		$this->_template = is_array($template) ? $template['ticket_line_item_no_pms'] : $template;
126
+		return $this->_parse_message_template();
127
+	}
128
+
129
+
130
+	public function parse_payment_list_template(
131
+		$template,
132
+		EE_Payment $payment_item,
133
+		$valid_shortcodes,
134
+		$extra_data = array()
135
+	) {
136
+		$this->_init_data($template, $payment_item, $valid_shortcodes, $extra_data);
137
+		$this->_template = is_array($template) ? $template['payment_list'] : $template;
138
+		return $this->_parse_message_template();
139
+	}
140
+
141
+
142
+	public function parse_datetime_list_template(
143
+		$template,
144
+		EE_Datetime $datetime,
145
+		$valid_shortcodes,
146
+		$extra_data = array()
147
+	) {
148
+		$this->_init_data($template, $datetime, $valid_shortcodes, $extra_data);
149
+		$this->_template = is_array($template) ? $template['datetime_list'] : $template;
150
+		return $this->_parse_message_template();
151
+	}
152
+
153
+
154
+	public function parse_question_list_template($template, EE_Answer $answer, $valid_shortcodes, $extra_data = array())
155
+	{
156
+		$this->_init_data($template, $answer, $valid_shortcodes, $extra_data);
157
+		$this->_template = is_array($template) ? $template['question_list'] : $template;
158
+		return $this->_parse_message_template();
159
+	}
160
+
161
+
162
+	private function _init_data($template, $data, $valid_shortcodes, $extra_data = array())
163
+	{
164
+		$this->_reset_props();
165
+		$this->_data['template']   = $template;
166
+		$this->_data['data']       = $data;
167
+		$this->_data['extra_data'] = $extra_data;
168
+		$this->_set_shortcodes($valid_shortcodes);
169
+	}
170
+
171
+
172
+	private function _reset_props()
173
+	{
174
+		$this->_template       = $this->_data = null;
175
+		$this->_shortcode_objs = array();
176
+	}
177
+
178
+
179
+	/**
180
+	 * takes the given template and parses it with the $_shortcodes property
181
+	 *
182
+	 * @access private
183
+	 * @return string
184
+	 */
185
+	private function _parse_message_template()
186
+	{
187
+		//now let's get a list of shortcodes that are found in the given template
188
+		preg_match_all('/(\[.+?\])/', $this->_template, $matches);
189
+		$shortcodes = (array)$matches[0]; //this should be an array of shortcodes in the template string.
190
+
191
+		$matched_code = array();
192
+		$sc_values    = array();
193
+
194
+		$list_type_shortcodes = array(
195
+			'[ATTENDEE_LIST]',
196
+			'[EVENT_LIST]',
197
+			'[TICKET_LIST]',
198
+			'[DATETIME_LIST]',
199
+			'[QUESTION_LIST]',
200
+			'[RECIPIENT_QUESTION_LIST]',
201
+			'[PRIMARY_REGISTRANT_QUESTION_LIST]',
202
+			'[RECIPIENT_TICKET_LIST]',
203
+			'[PRIMARY_REGISTRANT_TICKET_LIST]',
204
+			'[RECIPIENT_DATETIME_LIST]',
205
+			'[PRIMARY_REGISTRANT_DATETIME_LIST]',
206
+			'[TICKET_LINE_ITEM_LIST]',
207
+			'[TAX_LINE_ITEM_LIST]',
208
+			'[ADDITIONAL_LINE_ITEM_LIST]',
209
+			'[PRICE_MODIFIER_LINE_ITEM_LIST]',
210
+			'[PAYMENT_LIST_*]',
211
+		);
212
+
213
+		$list_type_shortcodes = apply_filters('FHEE__EEH_Parse_Shortcodes___parse_message_template__list_type_shortcodes',
214
+			$list_type_shortcodes);
215
+
216
+		//now lets go ahead and loop through our parsers for each shortcode and setup the values
217
+		foreach ($shortcodes as $shortcode) {
218
+
219
+			foreach ($this->_shortcode_objs as $sc_obj) {
220
+				if ($sc_obj instanceof EE_Shortcodes) {
221
+					//we need to setup any dynamic shortcodes so that they work with the array_key_exists
222
+					preg_match_all('/(\[[A-Za-z0-9\_]+_\*)/', $shortcode, $matches);
223
+					$sc_to_verify = ! empty($matches[0]) ? $matches[0][0] . ']' : $shortcode;
224
+
225
+					if (! array_key_exists($sc_to_verify, $sc_obj->get_shortcodes())) {
226
+						continue; //the given shortcode isn't in this object
227
+					}
228
+
229
+					//if this isn't  a "list" type shortcode then we'll send along the data vanilla instead of in an array.
230
+					if (! in_array($sc_to_verify, $list_type_shortcodes)) {
231
+						$data_send = ! is_object($this->_data) && isset($this->_data['data']) ? $this->_data['data'] : $this->_data;
232
+					} else {
233
+						$data_send = $this->_data;
234
+					}
235
+
236
+					//is this a conditional type shortcode?  If it is then we actually parse the template here.
237
+					if ($this->_is_conditional_shortcode($shortcode)) {
238
+						//most shortcode parsers are not going to have a match for this shortcode and will return an
239
+						//empty string so we need to make sure that we're only replacing the template when there is a non empty string.
240
+						$parsed = $sc_obj->parser($shortcode, $data_send, $this->_data['extra_data']);
241
+						if ($parsed) {
242
+							$this->_template = $parsed;
243
+						}
244
+					}
245
+
246
+					$parsed = $sc_obj->parser($shortcode, $data_send, $this->_data['extra_data']);
247
+
248
+					$matched_code[] = $shortcode;
249
+					$sc_values[]    = $parsed;
250
+				}
251
+			}
252
+		}
253
+
254
+		//now we've got parsed values for all the shortcodes in the template so we can go ahead and swap the shortcodes out.
255
+		$parsed = str_replace(array_values($matched_code), array_values($sc_values), $this->_template);
256
+		return $parsed;
257
+	}
258
+
259
+
260
+	/**
261
+	 * Simply returns whether the given shortcode matches the structure for a conditional shortcode.
262
+	 *
263
+	 * Does it match this format: `[IF_`
264
+	 *
265
+	 * @param $shortcode
266
+	 */
267
+	protected function _is_conditional_shortcode($shortcode)
268
+	{
269
+		return strpos($shortcode, '[IF_') === 0;
270
+	}
271
+
272
+
273
+	/**
274
+	 * This sets the shortcodes property from the incoming array of valid shortcodes that corresponds to names of
275
+	 * various EE_Shortcode library objects
276
+	 *
277
+	 * @access private
278
+	 * @param array $valid_shortcodes an array of strings corresponding to EE_Shortcode Library objects
279
+	 * @return void
280
+	 */
281
+	private function _set_shortcodes($valid_shortcodes)
282
+	{
283
+		foreach ($valid_shortcodes as $shortcode_ref) {
284
+			$ref       = ucwords(str_replace('_', ' ', $shortcode_ref));
285
+			$ref       = str_replace(' ', '_', $ref);
286
+			$classname = 'EE_' . $ref . '_Shortcodes';
287
+			if (class_exists($classname)) {
288
+				$this->_shortcode_objs[] = new $classname;
289
+			}
290
+		}
291
+	}
292 292
 
293 293
 
294 294
 } //end EEH_Parse_Shortcodes
Please login to merge, or discard this patch.
modules/core_rest_api/EED_Core_Rest_Api.module.php 1 patch
Indentation   +791 added lines, -791 removed lines patch added patch discarded remove patch
@@ -18,807 +18,807 @@
 block discarded – undo
18 18
 class EED_Core_Rest_Api extends \EED_Module
19 19
 {
20 20
 
21
-    const ee_api_namespace           = 'ee/v';
21
+	const ee_api_namespace           = 'ee/v';
22 22
 
23
-    const ee_api_namespace_for_regex = 'ee\/v([^/]*)\/';
23
+	const ee_api_namespace_for_regex = 'ee\/v([^/]*)\/';
24 24
 
25
-    const saved_routes_option_names  = 'ee_core_routes';
25
+	const saved_routes_option_names  = 'ee_core_routes';
26 26
 
27
-    /**
28
-     * string used in _links response bodies to make them globally unique.
29
-     *
30
-     * @see http://v2.wp-api.org/extending/linking/
31
-     */
32
-    const ee_api_link_namespace = 'https://api.eventespresso.com/';
27
+	/**
28
+	 * string used in _links response bodies to make them globally unique.
29
+	 *
30
+	 * @see http://v2.wp-api.org/extending/linking/
31
+	 */
32
+	const ee_api_link_namespace = 'https://api.eventespresso.com/';
33 33
 
34
-    /**
35
-     * @var Calculated_Model_Fields
36
-     */
37
-    protected static $_field_calculator = null;
34
+	/**
35
+	 * @var Calculated_Model_Fields
36
+	 */
37
+	protected static $_field_calculator = null;
38 38
 
39 39
 
40 40
 
41
-    /**
42
-     * @return EED_Core_Rest_Api
43
-     */
44
-    public static function instance()
45
-    {
46
-        self::$_field_calculator = new Calculated_Model_Fields();
47
-        return parent::get_instance(__CLASS__);
48
-    }
41
+	/**
42
+	 * @return EED_Core_Rest_Api
43
+	 */
44
+	public static function instance()
45
+	{
46
+		self::$_field_calculator = new Calculated_Model_Fields();
47
+		return parent::get_instance(__CLASS__);
48
+	}
49 49
 
50 50
 
51 51
 
52
-    /**
53
-     *    set_hooks - for hooking into EE Core, other modules, etc
54
-     *
55
-     * @access    public
56
-     * @return    void
57
-     */
58
-    public static function set_hooks()
59
-    {
60
-        self::set_hooks_both();
61
-    }
62
-
63
-
64
-
65
-    /**
66
-     *    set_hooks_admin - for hooking into EE Admin Core, other modules, etc
67
-     *
68
-     * @access    public
69
-     * @return    void
70
-     */
71
-    public static function set_hooks_admin()
72
-    {
73
-        self::set_hooks_both();
74
-    }
75
-
76
-
77
-
78
-    public static function set_hooks_both()
79
-    {
80
-        add_action('rest_api_init', array('EED_Core_Rest_Api', 'register_routes'), 10);
81
-        add_action('rest_api_init', array('EED_Core_Rest_Api', 'set_hooks_rest_api'), 5);
82
-        add_filter('rest_route_data', array('EED_Core_Rest_Api', 'hide_old_endpoints'), 10, 2);
83
-        add_filter('rest_index',
84
-            array('EventEspresso\core\libraries\rest_api\controllers\model\Meta', 'filter_ee_metadata_into_index'));
85
-        EED_Core_Rest_Api::invalidate_cached_route_data_on_version_change();
86
-    }
87
-
88
-
89
-
90
-    /**
91
-     * sets up hooks which only need to be included as part of REST API requests;
92
-     * other requests like to the frontend or admin etc don't need them
93
-     */
94
-    public static function set_hooks_rest_api()
95
-    {
96
-        //set hooks which account for changes made to the API
97
-        EED_Core_Rest_Api::_set_hooks_for_changes();
98
-    }
99
-
100
-
101
-
102
-    /**
103
-     * public wrapper of _set_hooks_for_changes.
104
-     * Loads all the hooks which make requests to old versions of the API
105
-     * appear the same as they always did
106
-     */
107
-    public static function set_hooks_for_changes()
108
-    {
109
-        self::_set_hooks_for_changes();
110
-    }
111
-
112
-
113
-
114
-
115
-
116
-
117
-
118
-    /**
119
-     * Loads all the hooks which make requests to old versions of the API
120
-     * appear the same as they always did
121
-     */
122
-    protected static function _set_hooks_for_changes()
123
-    {
124
-        $folder_contents = EEH_File::get_contents_of_folders(array(EE_LIBRARIES . 'rest_api' . DS . 'changes'), false);
125
-        foreach ($folder_contents as $classname_in_namespace => $filepath) {
126
-            //ignore the base parent class
127
-            if ($classname_in_namespace === 'Changes_In_Base') {
128
-                continue;
129
-            }
130
-            $full_classname = 'EventEspresso\core\libraries\rest_api\changes\\' . $classname_in_namespace;
131
-            if (class_exists($full_classname)) {
132
-                $instance_of_class = new $full_classname;
133
-                if ($instance_of_class instanceof Changes_In_Base) {
134
-                    $instance_of_class->set_hooks();
135
-                }
136
-            }
137
-        }
138
-    }
139
-
140
-
141
-
142
-    /**
143
-     * Filters the WP routes to add our EE-related ones. This takes a bit of time
144
-     * so we actually prefer to only do it when an EE plugin is activated or upgraded
145
-     */
146
-    public static function register_routes()
147
-    {
148
-        foreach (EED_Core_Rest_Api::get_ee_route_data() as $namespace => $relative_urls) {
149
-            foreach ($relative_urls as $endpoint => $routes) {
150
-                foreach ($routes as $route) {
151
-                    $route_args = array(
152
-                        array(
153
-                            'callback' => $route['callback'],
154
-                            'methods'  => $route['methods'],
155
-                            'args'     => isset($route['args']) ? $route['args'] : array(),
156
-                        )
157
-                    );
158
-                    if (isset($route['schema_callback'])) {
159
-                        $model_name = isset($route['schema_callback'][0])
160
-                            ? $route['schema_callback'][0]
161
-                            : '';
162
-                        $version = isset( $route['schema_callback'][1])
163
-                            ? $route['schema_callback'][1]
164
-                            : '';
165
-                        if (! empty($model_name) && ! empty($version)) {
166
-                            $route_args['schema'] = function () use ($model_name, $version) {
167
-                                return ModelRead::handle_schema_request(
168
-                                    $model_name,
169
-                                    $version
170
-                                );
171
-                            };
172
-                        }
173
-                    }
174
-                    register_rest_route(
175
-                        $namespace,
176
-                        $endpoint,
177
-                        $route_args
178
-                    );
179
-                }
180
-            }
181
-        }
182
-    }
183
-
184
-
185
-
186
-    /**
187
-     * Checks if there was a version change or something that merits invalidating the cached
188
-     * route data. If so, invalidates the cached route data so that it gets refreshed
189
-     * next time the WP API is used
190
-     */
191
-    public static function invalidate_cached_route_data_on_version_change()
192
-    {
193
-        if (EE_System::instance()->detect_req_type() != EE_System::req_type_normal) {
194
-            EED_Core_Rest_Api::invalidate_cached_route_data();
195
-        }
196
-        foreach (EE_Registry::instance()->addons as $addon) {
197
-            if ($addon instanceof EE_Addon && $addon->detect_req_type() != EE_System::req_type_normal) {
198
-                EED_Core_Rest_Api::invalidate_cached_route_data();
199
-            }
200
-        }
201
-    }
202
-
203
-
204
-
205
-    /**
206
-     * Removes the cached route data so it will get refreshed next time the WP API is used
207
-     */
208
-    public static function invalidate_cached_route_data()
209
-    {
210
-        //delete the saved EE REST API routes
211
-        foreach (EED_Core_Rest_Api::versions_served() as $version => $hidden) {
212
-            delete_option(EED_Core_Rest_Api::saved_routes_option_names . $version);
213
-        }
214
-    }
215
-
216
-
217
-
218
-    /**
219
-     * Gets the EE route data
220
-     *
221
-     * @return array top-level key is the namespace, next-level key is the route and its value is array{
222
-     * @type string|array $callback
223
-     * @type string       $methods
224
-     * @type boolean      $hidden_endpoint
225
-     * }
226
-     */
227
-    public static function get_ee_route_data()
228
-    {
229
-        $ee_routes = array();
230
-        foreach (self::versions_served() as $version => $hidden_endpoints) {
231
-            $ee_routes[self::ee_api_namespace . $version] = self::_get_ee_route_data_for_version($version,
232
-                $hidden_endpoints);
233
-        }
234
-        return $ee_routes;
235
-    }
236
-
237
-
238
-
239
-    /**
240
-     * Gets the EE route data from the wp options if it exists already,
241
-     * otherwise re-generates it and saves it to the option
242
-     *
243
-     * @param string  $version
244
-     * @param boolean $hidden_endpoints
245
-     * @return array
246
-     */
247
-    protected static function _get_ee_route_data_for_version($version, $hidden_endpoints = false)
248
-    {
249
-        $ee_routes = get_option(self::saved_routes_option_names . $version, null);
250
-        if ( ! $ee_routes || (defined('EE_REST_API_DEBUG_MODE') && EE_REST_API_DEBUG_MODE)) {
251
-            $ee_routes = self::_save_ee_route_data_for_version($version, $hidden_endpoints);
252
-        }
253
-        return $ee_routes;
254
-    }
255
-
256
-
257
-
258
-    /**
259
-     * Saves the EE REST API route data to a wp option and returns it
260
-     *
261
-     * @param string  $version
262
-     * @param boolean $hidden_endpoints
263
-     * @return mixed|null|void
264
-     */
265
-    protected static function _save_ee_route_data_for_version($version, $hidden_endpoints = false)
266
-    {
267
-        $instance = self::instance();
268
-        $routes = apply_filters(
269
-            'EED_Core_Rest_Api__save_ee_route_data_for_version__routes',
270
-            array_replace_recursive(
271
-                $instance->_get_config_route_data_for_version($version, $hidden_endpoints),
272
-                $instance->_get_meta_route_data_for_version($version, $hidden_endpoints),
273
-                $instance->_get_model_route_data_for_version($version, $hidden_endpoints),
274
-                $instance->_get_rpc_route_data_for_version($version, $hidden_endpoints)
275
-            )
276
-        );
277
-        $option_name = self::saved_routes_option_names . $version;
278
-        if (get_option($option_name)) {
279
-            update_option($option_name, $routes, true);
280
-        } else {
281
-            add_option($option_name, $routes, null, 'no');
282
-        }
283
-        return $routes;
284
-    }
285
-
286
-
287
-
288
-    /**
289
-     * Calculates all the EE routes and saves it to a wordpress option so we don't
290
-     * need to calculate it on every request
291
-     *
292
-     * @deprecated since version 4.9.1
293
-     * @return void
294
-     */
295
-    public static function save_ee_routes()
296
-    {
297
-        if (EE_Maintenance_Mode::instance()->models_can_query()) {
298
-            $instance = self::instance();
299
-            $routes = apply_filters(
300
-                'EED_Core_Rest_Api__save_ee_routes__routes',
301
-                array_replace_recursive(
302
-                    $instance->_register_config_routes(),
303
-                    $instance->_register_meta_routes(),
304
-                    $instance->_register_model_routes(),
305
-                    $instance->_register_rpc_routes()
306
-                )
307
-            );
308
-            update_option(self::saved_routes_option_names, $routes, true);
309
-        }
310
-    }
311
-
312
-
313
-
314
-    /**
315
-     * Gets all the route information relating to EE models
316
-     *
317
-     * @return array @see get_ee_route_data
318
-     * @deprecated since version 4.9.1
319
-     */
320
-    protected function _register_model_routes()
321
-    {
322
-        $model_routes = array();
323
-        foreach (self::versions_served() as $version => $hidden_endpoint) {
324
-            $model_routes[EED_Core_Rest_Api::ee_api_namespace
325
-                          . $version] = $this->_get_config_route_data_for_version($version, $hidden_endpoint);
326
-        }
327
-        return $model_routes;
328
-    }
329
-
330
-
331
-
332
-    /**
333
-     * Gets the route data for EE models in the specified version
334
-     *
335
-     * @param string  $version
336
-     * @param boolean $hidden_endpoint
337
-     * @return array
338
-     */
339
-    protected function _get_model_route_data_for_version($version, $hidden_endpoint = false)
340
-    {
341
-        $model_version_info = new Model_Version_Info($version);
342
-        $models_to_register = apply_filters(
343
-            'FHEE__EED_Core_REST_API___register_model_routes',
344
-            $model_version_info->models_for_requested_version()
345
-        );
346
-        //let's not bother having endpoints for extra metas
347
-        unset($models_to_register['Extra_Meta']);
348
-        unset($models_to_register['Extra_Join']);
349
-        $model_routes = array();
350
-        foreach ($models_to_register as $model_name => $model_classname) {
351
-            $model = \EE_Registry::instance()->load_model($model_name);
352
-
353
-            //if this isn't a valid model then let's skip iterate to the next item in the loop.
354
-            if (! $model instanceof EEM_Base) {
355
-                continue;
356
-            }
357
-
358
-            //yes we could just register one route for ALL models, but then they wouldn't show up in the index
359
-            $plural_model_route = EEH_Inflector::pluralize_and_lower($model_name);
360
-            $singular_model_route = $plural_model_route . '/(?P<id>\d+)';
361
-            $model_routes[$plural_model_route] = array(
362
-                array(
363
-                    'callback'        => array(
364
-                        'EventEspresso\core\libraries\rest_api\controllers\model\Read',
365
-                        'handle_request_get_all',
366
-                    ),
367
-                    'methods'         => WP_REST_Server::READABLE,
368
-                    'hidden_endpoint' => $hidden_endpoint,
369
-                    'args'            => $this->_get_read_query_params($model, $version),
370
-                    '_links'          => array(
371
-                        'self' => rest_url(EED_Core_Rest_Api::ee_api_namespace . $version . $singular_model_route),
372
-                    ),
373
-                    'schema_callback' => array($model_name, $version)
374
-                ),
375
-                //						array(
376
-                //							'callback' => array(
377
-                //								'EventEspresso\core\libraries\rest_api\controllers\model\Write',
378
-                //								'handle_request_create_one' ),
379
-                //							'methods' => WP_REST_Server::CREATABLE,
380
-                //							'hidden_endpoint' => $hidden_endpoint
381
-                //						)
382
-            );
383
-            $model_routes[$singular_model_route] = array(
384
-                array(
385
-                    'callback'        => array(
386
-                        'EventEspresso\core\libraries\rest_api\controllers\model\Read',
387
-                        'handle_request_get_one',
388
-                    ),
389
-                    'methods'         => WP_REST_Server::READABLE,
390
-                    'hidden_endpoint' => $hidden_endpoint,
391
-                    'args'            => $this->_get_response_selection_query_params($model, $version),
392
-                ),
393
-                //						array(
394
-                //							'callback' => array(
395
-                //								'EventEspresso\core\libraries\rest_api\controllers\model\Write',
396
-                //								'handle_request_edit_one' ),
397
-                //							'methods' => WP_REST_Server::EDITABLE,
398
-                //							'hidden_endpoint' => $hidden_endpoint
399
-                //							),
400
-            );
401
-            //@todo: also handle  DELETE for a single item
402
-            foreach ($model_version_info->relation_settings($model) as $relation_name => $relation_obj) {
403
-                $related_model_name_endpoint_part = ModelRead::get_related_entity_name(
404
-                    $relation_name,
405
-                    $relation_obj
406
-                );
407
-                $model_routes[$singular_model_route . '/' . $related_model_name_endpoint_part] = array(
408
-                    array(
409
-                        'callback'        => array(
410
-                            'EventEspresso\core\libraries\rest_api\controllers\model\Read',
411
-                            'handle_request_get_related',
412
-                        ),
413
-                        'methods'         => WP_REST_Server::READABLE,
414
-                        'hidden_endpoint' => $hidden_endpoint,
415
-                        'args'            => $this->_get_read_query_params($relation_obj->get_other_model(), $version),
416
-                    ),
417
-                    //							array(
418
-                    //								'callback' => array(
419
-                    //									'EventEspresso\core\libraries\rest_api\controllers\model\Write',
420
-                    //									'handle_request_create_or_update_related' ),
421
-                    //								'methods' => WP_REST_Server::EDITABLE,
422
-                    //								'hidden_endpoint' => $hidden_endpoint
423
-                    //							)
424
-                );
425
-                //@todo: handle delete related and possibly remove relation (not sure hwo to distinguish)
426
-            }
427
-        }
428
-        return $model_routes;
429
-    }
430
-
431
-
432
-
433
-    /**
434
-     * Adds all the RPC-style routes (remote procedure call-like routes, ie
435
-     * routes that don't conform to the traditional REST CRUD-style).
436
-     *
437
-     * @deprecated since 4.9.1
438
-     */
439
-    protected function _register_rpc_routes()
440
-    {
441
-        $routes = array();
442
-        foreach (self::versions_served() as $version => $hidden_endpoint) {
443
-            $routes[self::ee_api_namespace . $version] = $this->_get_rpc_route_data_for_version($version,
444
-                $hidden_endpoint);
445
-        }
446
-        return $routes;
447
-    }
448
-
449
-
450
-
451
-    /**
452
-     * @param string  $version
453
-     * @param boolean $hidden_endpoint
454
-     * @return array
455
-     */
456
-    protected function _get_rpc_route_data_for_version($version, $hidden_endpoint = false)
457
-    {
458
-        $this_versions_routes = array();
459
-        //checkin endpoint
460
-        $this_versions_routes['registrations/(?P<REG_ID>\d+)/toggle_checkin_for_datetime/(?P<DTT_ID>\d+)'] = array(
461
-            array(
462
-                'callback'        => array(
463
-                    'EventEspresso\core\libraries\rest_api\controllers\rpc\Checkin',
464
-                    'handle_request_toggle_checkin',
465
-                ),
466
-                'methods'         => WP_REST_Server::CREATABLE,
467
-                'hidden_endpoint' => $hidden_endpoint,
468
-                'args'            => array(
469
-                    'force' => array(
470
-                        'required'    => false,
471
-                        'default'     => false,
472
-                        'description' => __('Whether to force toggle checkin, or to verify the registration status and allowed ticket uses',
473
-                            'event_espresso'),
474
-                    ),
475
-                ),
476
-            ),
477
-        );
478
-        return apply_filters(
479
-            'FHEE__EED_Core_Rest_Api___register_rpc_routes__this_versions_routes',
480
-            $this_versions_routes,
481
-            $version,
482
-            $hidden_endpoint
483
-        );
484
-    }
485
-
486
-
487
-
488
-    /**
489
-     * Gets the query params that can be used when request one or many
490
-     *
491
-     * @param EEM_Base $model
492
-     * @param string   $version
493
-     * @return array
494
-     */
495
-    protected function _get_response_selection_query_params(\EEM_Base $model, $version)
496
-    {
497
-        return apply_filters(
498
-            'FHEE__EED_Core_Rest_Api___get_response_selection_query_params',
499
-            array(
500
-                'include'   => array(
501
-                    'required' => false,
502
-                    'default'  => '*',
503
-                ),
504
-                'calculate' => array(
505
-                    'required' => false,
506
-                    'default'  => '',
507
-                    'enum'     => self::$_field_calculator->retrieve_calculated_fields_for_model($model),
508
-                ),
509
-            ),
510
-            $model,
511
-            $version
512
-        );
513
-    }
514
-
515
-
516
-
517
-    /**
518
-     * Gets info about reading query params that are acceptable
519
-     *
520
-     * @param \EEM_Base $model eg 'Event' or 'Venue'
521
-     * @param  string   $version
522
-     * @return array    describing the args acceptable when querying this model
523
-     * @throws \EE_Error
524
-     */
525
-    protected function _get_read_query_params(\EEM_Base $model, $version)
526
-    {
527
-        $default_orderby = array();
528
-        foreach ($model->get_combined_primary_key_fields() as $key_field) {
529
-            $default_orderby[$key_field->get_name()] = 'ASC';
530
-        }
531
-        return array_merge(
532
-            $this->_get_response_selection_query_params($model, $version),
533
-            array(
534
-                'where'    => array(
535
-                    'required' => false,
536
-                    'default'  => array(),
537
-                ),
538
-                'limit'    => array(
539
-                    'required' => false,
540
-                    'default'  => EED_Core_Rest_Api::get_default_query_limit(),
541
-                ),
542
-                'order_by' => array(
543
-                    'required' => false,
544
-                    'default'  => $default_orderby,
545
-                ),
546
-                'group_by' => array(
547
-                    'required' => false,
548
-                    'default'  => null,
549
-                ),
550
-                'having'   => array(
551
-                    'required' => false,
552
-                    'default'  => null,
553
-                ),
554
-                'caps'     => array(
555
-                    'required' => false,
556
-                    'default'  => EEM_Base::caps_read,
557
-                ),
558
-            )
559
-        );
560
-    }
561
-
562
-
563
-
564
-    /**
565
-     * Gets routes for the config
566
-     *
567
-     * @return array @see _register_model_routes
568
-     * @deprecated since version 4.9.1
569
-     */
570
-    protected function _register_config_routes()
571
-    {
572
-        $config_routes = array();
573
-        foreach (self::versions_served() as $version => $hidden_endpoint) {
574
-            $config_routes[self::ee_api_namespace . $version] = $this->_get_config_route_data_for_version($version,
575
-                $hidden_endpoint);
576
-        }
577
-        return $config_routes;
578
-    }
579
-
580
-
581
-
582
-    /**
583
-     * Gets routes for the config for the specified version
584
-     *
585
-     * @param string  $version
586
-     * @param boolean $hidden_endpoint
587
-     * @return array
588
-     */
589
-    protected function _get_config_route_data_for_version($version, $hidden_endpoint)
590
-    {
591
-        return array(
592
-            'config'    => array(
593
-                array(
594
-                    'callback'        => array(
595
-                        'EventEspresso\core\libraries\rest_api\controllers\config\Read',
596
-                        'handle_request',
597
-                    ),
598
-                    'methods'         => WP_REST_Server::READABLE,
599
-                    'hidden_endpoint' => $hidden_endpoint,
600
-                ),
601
-            ),
602
-            'site_info' => array(
603
-                array(
604
-                    'callback'        => array(
605
-                        'EventEspresso\core\libraries\rest_api\controllers\config\Read',
606
-                        'handle_request_site_info',
607
-                    ),
608
-                    'methods'         => WP_REST_Server::READABLE,
609
-                    'hidden_endpoint' => $hidden_endpoint,
610
-                ),
611
-            ),
612
-        );
613
-    }
614
-
615
-
616
-
617
-    /**
618
-     * Gets the meta info routes
619
-     *
620
-     * @return array @see _register_model_routes
621
-     * @deprecated since version 4.9.1
622
-     */
623
-    protected function _register_meta_routes()
624
-    {
625
-        $meta_routes = array();
626
-        foreach (self::versions_served() as $version => $hidden_endpoint) {
627
-            $meta_routes[self::ee_api_namespace . $version] = $this->_get_meta_route_data_for_version($version,
628
-                $hidden_endpoint);
629
-        }
630
-        return $meta_routes;
631
-    }
632
-
633
-
634
-
635
-    /**
636
-     * @param string  $version
637
-     * @param boolean $hidden_endpoint
638
-     * @return array
639
-     */
640
-    protected function _get_meta_route_data_for_version($version, $hidden_endpoint = false)
641
-    {
642
-        return array(
643
-            'resources' => array(
644
-                array(
645
-                    'callback'        => array(
646
-                        'EventEspresso\core\libraries\rest_api\controllers\model\Meta',
647
-                        'handle_request_models_meta',
648
-                    ),
649
-                    'methods'         => WP_REST_Server::READABLE,
650
-                    'hidden_endpoint' => $hidden_endpoint,
651
-                ),
652
-            ),
653
-        );
654
-    }
655
-
656
-
657
-
658
-    /**
659
-     * Tries to hide old 4.6 endpoints from the
660
-     *
661
-     * @param array $route_data
662
-     * @return array
663
-     */
664
-    public static function hide_old_endpoints($route_data)
665
-    {
666
-        //allow API clients to override which endpoints get hidden, in case
667
-        //they want to discover particular endpoints
668
-        //also, we don't have access to the request so we have to just grab it from the superglobal
669
-        $force_show_ee_namespace = ltrim(
670
-            EEH_Array::is_set($_REQUEST, 'force_show_ee_namespace', ''),
671
-            '/'
672
-        );
673
-        foreach (EED_Core_Rest_Api::get_ee_route_data() as $namespace => $relative_urls) {
674
-            foreach ($relative_urls as $endpoint => $routes) {
675
-                foreach ($routes as $route) {
676
-                    //by default, hide "hidden_endpoint"s, unless the request indicates
677
-                    //to $force_show_ee_namespace, in which case only show that one
678
-                    //namespace's endpoints (and hide all others)
679
-                    if (($route['hidden_endpoint'] && $force_show_ee_namespace === '')
680
-                        || ($force_show_ee_namespace !== '' && $force_show_ee_namespace !== $namespace)
681
-                    ) {
682
-                        $full_route = '/' . ltrim($namespace, '/') . '/' . ltrim($endpoint, '/');
683
-                        unset($route_data[$full_route]);
684
-                    }
685
-                }
686
-            }
687
-        }
688
-        return $route_data;
689
-    }
690
-
691
-
692
-
693
-    /**
694
-     * Returns an array describing which versions of core support serving requests for.
695
-     * Keys are core versions' major and minor version, and values are the
696
-     * LOWEST requested version they can serve. Eg, 4.7 can serve requests for 4.6-like
697
-     * data by just removing a few models and fields from the responses. However, 4.15 might remove
698
-     * the answers table entirely, in which case it would be very difficult for
699
-     * it to serve 4.6-style responses.
700
-     * Versions of core that are missing from this array are unknowns.
701
-     * previous ver
702
-     *
703
-     * @return array
704
-     */
705
-    public static function version_compatibilities()
706
-    {
707
-        return apply_filters(
708
-            'FHEE__EED_Core_REST_API__version_compatibilities',
709
-            array(
710
-                '4.8.29' => '4.8.29',
711
-                '4.8.33' => '4.8.29',
712
-                '4.8.34' => '4.8.29',
713
-                '4.8.36' => '4.8.29',
714
-            )
715
-        );
716
-    }
717
-
718
-
719
-
720
-    /**
721
-     * Gets the latest API version served. Eg if there
722
-     * are two versions served of the API, 4.8.29 and 4.8.32, and
723
-     * we are on core version 4.8.34, it will return the string "4.8.32"
724
-     *
725
-     * @return string
726
-     */
727
-    public static function latest_rest_api_version()
728
-    {
729
-        $versions_served = \EED_Core_Rest_Api::versions_served();
730
-        $versions_served_keys = array_keys($versions_served);
731
-        return end($versions_served_keys);
732
-    }
733
-
734
-
735
-
736
-    /**
737
-     * Using EED_Core_Rest_Api::version_compatibilities(), determines what version of
738
-     * EE the API can serve requests for. Eg, if we are on 4.15 of core, and
739
-     * we can serve requests from 4.12 or later, this will return array( '4.12', '4.13', '4.14', '4.15' ).
740
-     * We also indicate whether or not this version should be put in the index or not
741
-     *
742
-     * @return array keys are API version numbers (just major and minor numbers), and values
743
-     * are whether or not they should be hidden
744
-     */
745
-    public static function versions_served()
746
-    {
747
-        $versions_served = array();
748
-        $possibly_served_versions = EED_Core_Rest_Api::version_compatibilities();
749
-        $lowest_compatible_version = end($possibly_served_versions);
750
-        reset($possibly_served_versions);
751
-        $versions_served_historically = array_keys($possibly_served_versions);
752
-        $latest_version = end($versions_served_historically);
753
-        reset($versions_served_historically);
754
-        //for each version of core we have ever served:
755
-        foreach ($versions_served_historically as $key_versioned_endpoint) {
756
-            //if it's not above the current core version, and it's compatible with the current version of core
757
-            if ($key_versioned_endpoint == $latest_version) {
758
-                //don't hide the latest version in the index
759
-                $versions_served[$key_versioned_endpoint] = false;
760
-            } else if (
761
-                $key_versioned_endpoint < EED_Core_Rest_Api::core_version()
762
-                && $key_versioned_endpoint >= $lowest_compatible_version
763
-            ) {
764
-                //include, but hide, previous versions which are still supported
765
-                $versions_served[$key_versioned_endpoint] = true;
766
-            } elseif (
767
-            apply_filters(
768
-                'FHEE__EED_Core_Rest_Api__versions_served__include_incompatible_versions',
769
-                false,
770
-                $possibly_served_versions
771
-            )
772
-            ) {
773
-                //if a version is no longer supported, don't include it in index or list of versions served
774
-                $versions_served[$key_versioned_endpoint] = true;
775
-            }
776
-        }
777
-        return $versions_served;
778
-    }
779
-
780
-
781
-
782
-    /**
783
-     * Gets the major and minor version of EE core's version string
784
-     *
785
-     * @return string
786
-     */
787
-    public static function core_version()
788
-    {
789
-        return apply_filters('FHEE__EED_Core_REST_API__core_version',
790
-            implode('.', array_slice(explode('.', espresso_version()), 0, 3)));
791
-    }
792
-
793
-
794
-
795
-    /**
796
-     * Gets the default limit that should be used when querying for resources
797
-     *
798
-     * @return int
799
-     */
800
-    public static function get_default_query_limit()
801
-    {
802
-        //we actually don't use a const because we want folks to always use
803
-        //this method, not the const directly
804
-        return apply_filters(
805
-            'FHEE__EED_Core_Rest_Api__get_default_query_limit',
806
-            50
807
-        );
808
-    }
809
-
810
-
811
-
812
-    /**
813
-     *    run - initial module setup
814
-     *
815
-     * @access    public
816
-     * @param  WP $WP
817
-     * @return    void
818
-     */
819
-    public function run($WP)
820
-    {
821
-    }
52
+	/**
53
+	 *    set_hooks - for hooking into EE Core, other modules, etc
54
+	 *
55
+	 * @access    public
56
+	 * @return    void
57
+	 */
58
+	public static function set_hooks()
59
+	{
60
+		self::set_hooks_both();
61
+	}
62
+
63
+
64
+
65
+	/**
66
+	 *    set_hooks_admin - for hooking into EE Admin Core, other modules, etc
67
+	 *
68
+	 * @access    public
69
+	 * @return    void
70
+	 */
71
+	public static function set_hooks_admin()
72
+	{
73
+		self::set_hooks_both();
74
+	}
75
+
76
+
77
+
78
+	public static function set_hooks_both()
79
+	{
80
+		add_action('rest_api_init', array('EED_Core_Rest_Api', 'register_routes'), 10);
81
+		add_action('rest_api_init', array('EED_Core_Rest_Api', 'set_hooks_rest_api'), 5);
82
+		add_filter('rest_route_data', array('EED_Core_Rest_Api', 'hide_old_endpoints'), 10, 2);
83
+		add_filter('rest_index',
84
+			array('EventEspresso\core\libraries\rest_api\controllers\model\Meta', 'filter_ee_metadata_into_index'));
85
+		EED_Core_Rest_Api::invalidate_cached_route_data_on_version_change();
86
+	}
87
+
88
+
89
+
90
+	/**
91
+	 * sets up hooks which only need to be included as part of REST API requests;
92
+	 * other requests like to the frontend or admin etc don't need them
93
+	 */
94
+	public static function set_hooks_rest_api()
95
+	{
96
+		//set hooks which account for changes made to the API
97
+		EED_Core_Rest_Api::_set_hooks_for_changes();
98
+	}
99
+
100
+
101
+
102
+	/**
103
+	 * public wrapper of _set_hooks_for_changes.
104
+	 * Loads all the hooks which make requests to old versions of the API
105
+	 * appear the same as they always did
106
+	 */
107
+	public static function set_hooks_for_changes()
108
+	{
109
+		self::_set_hooks_for_changes();
110
+	}
111
+
112
+
113
+
114
+
115
+
116
+
117
+
118
+	/**
119
+	 * Loads all the hooks which make requests to old versions of the API
120
+	 * appear the same as they always did
121
+	 */
122
+	protected static function _set_hooks_for_changes()
123
+	{
124
+		$folder_contents = EEH_File::get_contents_of_folders(array(EE_LIBRARIES . 'rest_api' . DS . 'changes'), false);
125
+		foreach ($folder_contents as $classname_in_namespace => $filepath) {
126
+			//ignore the base parent class
127
+			if ($classname_in_namespace === 'Changes_In_Base') {
128
+				continue;
129
+			}
130
+			$full_classname = 'EventEspresso\core\libraries\rest_api\changes\\' . $classname_in_namespace;
131
+			if (class_exists($full_classname)) {
132
+				$instance_of_class = new $full_classname;
133
+				if ($instance_of_class instanceof Changes_In_Base) {
134
+					$instance_of_class->set_hooks();
135
+				}
136
+			}
137
+		}
138
+	}
139
+
140
+
141
+
142
+	/**
143
+	 * Filters the WP routes to add our EE-related ones. This takes a bit of time
144
+	 * so we actually prefer to only do it when an EE plugin is activated or upgraded
145
+	 */
146
+	public static function register_routes()
147
+	{
148
+		foreach (EED_Core_Rest_Api::get_ee_route_data() as $namespace => $relative_urls) {
149
+			foreach ($relative_urls as $endpoint => $routes) {
150
+				foreach ($routes as $route) {
151
+					$route_args = array(
152
+						array(
153
+							'callback' => $route['callback'],
154
+							'methods'  => $route['methods'],
155
+							'args'     => isset($route['args']) ? $route['args'] : array(),
156
+						)
157
+					);
158
+					if (isset($route['schema_callback'])) {
159
+						$model_name = isset($route['schema_callback'][0])
160
+							? $route['schema_callback'][0]
161
+							: '';
162
+						$version = isset( $route['schema_callback'][1])
163
+							? $route['schema_callback'][1]
164
+							: '';
165
+						if (! empty($model_name) && ! empty($version)) {
166
+							$route_args['schema'] = function () use ($model_name, $version) {
167
+								return ModelRead::handle_schema_request(
168
+									$model_name,
169
+									$version
170
+								);
171
+							};
172
+						}
173
+					}
174
+					register_rest_route(
175
+						$namespace,
176
+						$endpoint,
177
+						$route_args
178
+					);
179
+				}
180
+			}
181
+		}
182
+	}
183
+
184
+
185
+
186
+	/**
187
+	 * Checks if there was a version change or something that merits invalidating the cached
188
+	 * route data. If so, invalidates the cached route data so that it gets refreshed
189
+	 * next time the WP API is used
190
+	 */
191
+	public static function invalidate_cached_route_data_on_version_change()
192
+	{
193
+		if (EE_System::instance()->detect_req_type() != EE_System::req_type_normal) {
194
+			EED_Core_Rest_Api::invalidate_cached_route_data();
195
+		}
196
+		foreach (EE_Registry::instance()->addons as $addon) {
197
+			if ($addon instanceof EE_Addon && $addon->detect_req_type() != EE_System::req_type_normal) {
198
+				EED_Core_Rest_Api::invalidate_cached_route_data();
199
+			}
200
+		}
201
+	}
202
+
203
+
204
+
205
+	/**
206
+	 * Removes the cached route data so it will get refreshed next time the WP API is used
207
+	 */
208
+	public static function invalidate_cached_route_data()
209
+	{
210
+		//delete the saved EE REST API routes
211
+		foreach (EED_Core_Rest_Api::versions_served() as $version => $hidden) {
212
+			delete_option(EED_Core_Rest_Api::saved_routes_option_names . $version);
213
+		}
214
+	}
215
+
216
+
217
+
218
+	/**
219
+	 * Gets the EE route data
220
+	 *
221
+	 * @return array top-level key is the namespace, next-level key is the route and its value is array{
222
+	 * @type string|array $callback
223
+	 * @type string       $methods
224
+	 * @type boolean      $hidden_endpoint
225
+	 * }
226
+	 */
227
+	public static function get_ee_route_data()
228
+	{
229
+		$ee_routes = array();
230
+		foreach (self::versions_served() as $version => $hidden_endpoints) {
231
+			$ee_routes[self::ee_api_namespace . $version] = self::_get_ee_route_data_for_version($version,
232
+				$hidden_endpoints);
233
+		}
234
+		return $ee_routes;
235
+	}
236
+
237
+
238
+
239
+	/**
240
+	 * Gets the EE route data from the wp options if it exists already,
241
+	 * otherwise re-generates it and saves it to the option
242
+	 *
243
+	 * @param string  $version
244
+	 * @param boolean $hidden_endpoints
245
+	 * @return array
246
+	 */
247
+	protected static function _get_ee_route_data_for_version($version, $hidden_endpoints = false)
248
+	{
249
+		$ee_routes = get_option(self::saved_routes_option_names . $version, null);
250
+		if ( ! $ee_routes || (defined('EE_REST_API_DEBUG_MODE') && EE_REST_API_DEBUG_MODE)) {
251
+			$ee_routes = self::_save_ee_route_data_for_version($version, $hidden_endpoints);
252
+		}
253
+		return $ee_routes;
254
+	}
255
+
256
+
257
+
258
+	/**
259
+	 * Saves the EE REST API route data to a wp option and returns it
260
+	 *
261
+	 * @param string  $version
262
+	 * @param boolean $hidden_endpoints
263
+	 * @return mixed|null|void
264
+	 */
265
+	protected static function _save_ee_route_data_for_version($version, $hidden_endpoints = false)
266
+	{
267
+		$instance = self::instance();
268
+		$routes = apply_filters(
269
+			'EED_Core_Rest_Api__save_ee_route_data_for_version__routes',
270
+			array_replace_recursive(
271
+				$instance->_get_config_route_data_for_version($version, $hidden_endpoints),
272
+				$instance->_get_meta_route_data_for_version($version, $hidden_endpoints),
273
+				$instance->_get_model_route_data_for_version($version, $hidden_endpoints),
274
+				$instance->_get_rpc_route_data_for_version($version, $hidden_endpoints)
275
+			)
276
+		);
277
+		$option_name = self::saved_routes_option_names . $version;
278
+		if (get_option($option_name)) {
279
+			update_option($option_name, $routes, true);
280
+		} else {
281
+			add_option($option_name, $routes, null, 'no');
282
+		}
283
+		return $routes;
284
+	}
285
+
286
+
287
+
288
+	/**
289
+	 * Calculates all the EE routes and saves it to a wordpress option so we don't
290
+	 * need to calculate it on every request
291
+	 *
292
+	 * @deprecated since version 4.9.1
293
+	 * @return void
294
+	 */
295
+	public static function save_ee_routes()
296
+	{
297
+		if (EE_Maintenance_Mode::instance()->models_can_query()) {
298
+			$instance = self::instance();
299
+			$routes = apply_filters(
300
+				'EED_Core_Rest_Api__save_ee_routes__routes',
301
+				array_replace_recursive(
302
+					$instance->_register_config_routes(),
303
+					$instance->_register_meta_routes(),
304
+					$instance->_register_model_routes(),
305
+					$instance->_register_rpc_routes()
306
+				)
307
+			);
308
+			update_option(self::saved_routes_option_names, $routes, true);
309
+		}
310
+	}
311
+
312
+
313
+
314
+	/**
315
+	 * Gets all the route information relating to EE models
316
+	 *
317
+	 * @return array @see get_ee_route_data
318
+	 * @deprecated since version 4.9.1
319
+	 */
320
+	protected function _register_model_routes()
321
+	{
322
+		$model_routes = array();
323
+		foreach (self::versions_served() as $version => $hidden_endpoint) {
324
+			$model_routes[EED_Core_Rest_Api::ee_api_namespace
325
+						  . $version] = $this->_get_config_route_data_for_version($version, $hidden_endpoint);
326
+		}
327
+		return $model_routes;
328
+	}
329
+
330
+
331
+
332
+	/**
333
+	 * Gets the route data for EE models in the specified version
334
+	 *
335
+	 * @param string  $version
336
+	 * @param boolean $hidden_endpoint
337
+	 * @return array
338
+	 */
339
+	protected function _get_model_route_data_for_version($version, $hidden_endpoint = false)
340
+	{
341
+		$model_version_info = new Model_Version_Info($version);
342
+		$models_to_register = apply_filters(
343
+			'FHEE__EED_Core_REST_API___register_model_routes',
344
+			$model_version_info->models_for_requested_version()
345
+		);
346
+		//let's not bother having endpoints for extra metas
347
+		unset($models_to_register['Extra_Meta']);
348
+		unset($models_to_register['Extra_Join']);
349
+		$model_routes = array();
350
+		foreach ($models_to_register as $model_name => $model_classname) {
351
+			$model = \EE_Registry::instance()->load_model($model_name);
352
+
353
+			//if this isn't a valid model then let's skip iterate to the next item in the loop.
354
+			if (! $model instanceof EEM_Base) {
355
+				continue;
356
+			}
357
+
358
+			//yes we could just register one route for ALL models, but then they wouldn't show up in the index
359
+			$plural_model_route = EEH_Inflector::pluralize_and_lower($model_name);
360
+			$singular_model_route = $plural_model_route . '/(?P<id>\d+)';
361
+			$model_routes[$plural_model_route] = array(
362
+				array(
363
+					'callback'        => array(
364
+						'EventEspresso\core\libraries\rest_api\controllers\model\Read',
365
+						'handle_request_get_all',
366
+					),
367
+					'methods'         => WP_REST_Server::READABLE,
368
+					'hidden_endpoint' => $hidden_endpoint,
369
+					'args'            => $this->_get_read_query_params($model, $version),
370
+					'_links'          => array(
371
+						'self' => rest_url(EED_Core_Rest_Api::ee_api_namespace . $version . $singular_model_route),
372
+					),
373
+					'schema_callback' => array($model_name, $version)
374
+				),
375
+				//						array(
376
+				//							'callback' => array(
377
+				//								'EventEspresso\core\libraries\rest_api\controllers\model\Write',
378
+				//								'handle_request_create_one' ),
379
+				//							'methods' => WP_REST_Server::CREATABLE,
380
+				//							'hidden_endpoint' => $hidden_endpoint
381
+				//						)
382
+			);
383
+			$model_routes[$singular_model_route] = array(
384
+				array(
385
+					'callback'        => array(
386
+						'EventEspresso\core\libraries\rest_api\controllers\model\Read',
387
+						'handle_request_get_one',
388
+					),
389
+					'methods'         => WP_REST_Server::READABLE,
390
+					'hidden_endpoint' => $hidden_endpoint,
391
+					'args'            => $this->_get_response_selection_query_params($model, $version),
392
+				),
393
+				//						array(
394
+				//							'callback' => array(
395
+				//								'EventEspresso\core\libraries\rest_api\controllers\model\Write',
396
+				//								'handle_request_edit_one' ),
397
+				//							'methods' => WP_REST_Server::EDITABLE,
398
+				//							'hidden_endpoint' => $hidden_endpoint
399
+				//							),
400
+			);
401
+			//@todo: also handle  DELETE for a single item
402
+			foreach ($model_version_info->relation_settings($model) as $relation_name => $relation_obj) {
403
+				$related_model_name_endpoint_part = ModelRead::get_related_entity_name(
404
+					$relation_name,
405
+					$relation_obj
406
+				);
407
+				$model_routes[$singular_model_route . '/' . $related_model_name_endpoint_part] = array(
408
+					array(
409
+						'callback'        => array(
410
+							'EventEspresso\core\libraries\rest_api\controllers\model\Read',
411
+							'handle_request_get_related',
412
+						),
413
+						'methods'         => WP_REST_Server::READABLE,
414
+						'hidden_endpoint' => $hidden_endpoint,
415
+						'args'            => $this->_get_read_query_params($relation_obj->get_other_model(), $version),
416
+					),
417
+					//							array(
418
+					//								'callback' => array(
419
+					//									'EventEspresso\core\libraries\rest_api\controllers\model\Write',
420
+					//									'handle_request_create_or_update_related' ),
421
+					//								'methods' => WP_REST_Server::EDITABLE,
422
+					//								'hidden_endpoint' => $hidden_endpoint
423
+					//							)
424
+				);
425
+				//@todo: handle delete related and possibly remove relation (not sure hwo to distinguish)
426
+			}
427
+		}
428
+		return $model_routes;
429
+	}
430
+
431
+
432
+
433
+	/**
434
+	 * Adds all the RPC-style routes (remote procedure call-like routes, ie
435
+	 * routes that don't conform to the traditional REST CRUD-style).
436
+	 *
437
+	 * @deprecated since 4.9.1
438
+	 */
439
+	protected function _register_rpc_routes()
440
+	{
441
+		$routes = array();
442
+		foreach (self::versions_served() as $version => $hidden_endpoint) {
443
+			$routes[self::ee_api_namespace . $version] = $this->_get_rpc_route_data_for_version($version,
444
+				$hidden_endpoint);
445
+		}
446
+		return $routes;
447
+	}
448
+
449
+
450
+
451
+	/**
452
+	 * @param string  $version
453
+	 * @param boolean $hidden_endpoint
454
+	 * @return array
455
+	 */
456
+	protected function _get_rpc_route_data_for_version($version, $hidden_endpoint = false)
457
+	{
458
+		$this_versions_routes = array();
459
+		//checkin endpoint
460
+		$this_versions_routes['registrations/(?P<REG_ID>\d+)/toggle_checkin_for_datetime/(?P<DTT_ID>\d+)'] = array(
461
+			array(
462
+				'callback'        => array(
463
+					'EventEspresso\core\libraries\rest_api\controllers\rpc\Checkin',
464
+					'handle_request_toggle_checkin',
465
+				),
466
+				'methods'         => WP_REST_Server::CREATABLE,
467
+				'hidden_endpoint' => $hidden_endpoint,
468
+				'args'            => array(
469
+					'force' => array(
470
+						'required'    => false,
471
+						'default'     => false,
472
+						'description' => __('Whether to force toggle checkin, or to verify the registration status and allowed ticket uses',
473
+							'event_espresso'),
474
+					),
475
+				),
476
+			),
477
+		);
478
+		return apply_filters(
479
+			'FHEE__EED_Core_Rest_Api___register_rpc_routes__this_versions_routes',
480
+			$this_versions_routes,
481
+			$version,
482
+			$hidden_endpoint
483
+		);
484
+	}
485
+
486
+
487
+
488
+	/**
489
+	 * Gets the query params that can be used when request one or many
490
+	 *
491
+	 * @param EEM_Base $model
492
+	 * @param string   $version
493
+	 * @return array
494
+	 */
495
+	protected function _get_response_selection_query_params(\EEM_Base $model, $version)
496
+	{
497
+		return apply_filters(
498
+			'FHEE__EED_Core_Rest_Api___get_response_selection_query_params',
499
+			array(
500
+				'include'   => array(
501
+					'required' => false,
502
+					'default'  => '*',
503
+				),
504
+				'calculate' => array(
505
+					'required' => false,
506
+					'default'  => '',
507
+					'enum'     => self::$_field_calculator->retrieve_calculated_fields_for_model($model),
508
+				),
509
+			),
510
+			$model,
511
+			$version
512
+		);
513
+	}
514
+
515
+
516
+
517
+	/**
518
+	 * Gets info about reading query params that are acceptable
519
+	 *
520
+	 * @param \EEM_Base $model eg 'Event' or 'Venue'
521
+	 * @param  string   $version
522
+	 * @return array    describing the args acceptable when querying this model
523
+	 * @throws \EE_Error
524
+	 */
525
+	protected function _get_read_query_params(\EEM_Base $model, $version)
526
+	{
527
+		$default_orderby = array();
528
+		foreach ($model->get_combined_primary_key_fields() as $key_field) {
529
+			$default_orderby[$key_field->get_name()] = 'ASC';
530
+		}
531
+		return array_merge(
532
+			$this->_get_response_selection_query_params($model, $version),
533
+			array(
534
+				'where'    => array(
535
+					'required' => false,
536
+					'default'  => array(),
537
+				),
538
+				'limit'    => array(
539
+					'required' => false,
540
+					'default'  => EED_Core_Rest_Api::get_default_query_limit(),
541
+				),
542
+				'order_by' => array(
543
+					'required' => false,
544
+					'default'  => $default_orderby,
545
+				),
546
+				'group_by' => array(
547
+					'required' => false,
548
+					'default'  => null,
549
+				),
550
+				'having'   => array(
551
+					'required' => false,
552
+					'default'  => null,
553
+				),
554
+				'caps'     => array(
555
+					'required' => false,
556
+					'default'  => EEM_Base::caps_read,
557
+				),
558
+			)
559
+		);
560
+	}
561
+
562
+
563
+
564
+	/**
565
+	 * Gets routes for the config
566
+	 *
567
+	 * @return array @see _register_model_routes
568
+	 * @deprecated since version 4.9.1
569
+	 */
570
+	protected function _register_config_routes()
571
+	{
572
+		$config_routes = array();
573
+		foreach (self::versions_served() as $version => $hidden_endpoint) {
574
+			$config_routes[self::ee_api_namespace . $version] = $this->_get_config_route_data_for_version($version,
575
+				$hidden_endpoint);
576
+		}
577
+		return $config_routes;
578
+	}
579
+
580
+
581
+
582
+	/**
583
+	 * Gets routes for the config for the specified version
584
+	 *
585
+	 * @param string  $version
586
+	 * @param boolean $hidden_endpoint
587
+	 * @return array
588
+	 */
589
+	protected function _get_config_route_data_for_version($version, $hidden_endpoint)
590
+	{
591
+		return array(
592
+			'config'    => array(
593
+				array(
594
+					'callback'        => array(
595
+						'EventEspresso\core\libraries\rest_api\controllers\config\Read',
596
+						'handle_request',
597
+					),
598
+					'methods'         => WP_REST_Server::READABLE,
599
+					'hidden_endpoint' => $hidden_endpoint,
600
+				),
601
+			),
602
+			'site_info' => array(
603
+				array(
604
+					'callback'        => array(
605
+						'EventEspresso\core\libraries\rest_api\controllers\config\Read',
606
+						'handle_request_site_info',
607
+					),
608
+					'methods'         => WP_REST_Server::READABLE,
609
+					'hidden_endpoint' => $hidden_endpoint,
610
+				),
611
+			),
612
+		);
613
+	}
614
+
615
+
616
+
617
+	/**
618
+	 * Gets the meta info routes
619
+	 *
620
+	 * @return array @see _register_model_routes
621
+	 * @deprecated since version 4.9.1
622
+	 */
623
+	protected function _register_meta_routes()
624
+	{
625
+		$meta_routes = array();
626
+		foreach (self::versions_served() as $version => $hidden_endpoint) {
627
+			$meta_routes[self::ee_api_namespace . $version] = $this->_get_meta_route_data_for_version($version,
628
+				$hidden_endpoint);
629
+		}
630
+		return $meta_routes;
631
+	}
632
+
633
+
634
+
635
+	/**
636
+	 * @param string  $version
637
+	 * @param boolean $hidden_endpoint
638
+	 * @return array
639
+	 */
640
+	protected function _get_meta_route_data_for_version($version, $hidden_endpoint = false)
641
+	{
642
+		return array(
643
+			'resources' => array(
644
+				array(
645
+					'callback'        => array(
646
+						'EventEspresso\core\libraries\rest_api\controllers\model\Meta',
647
+						'handle_request_models_meta',
648
+					),
649
+					'methods'         => WP_REST_Server::READABLE,
650
+					'hidden_endpoint' => $hidden_endpoint,
651
+				),
652
+			),
653
+		);
654
+	}
655
+
656
+
657
+
658
+	/**
659
+	 * Tries to hide old 4.6 endpoints from the
660
+	 *
661
+	 * @param array $route_data
662
+	 * @return array
663
+	 */
664
+	public static function hide_old_endpoints($route_data)
665
+	{
666
+		//allow API clients to override which endpoints get hidden, in case
667
+		//they want to discover particular endpoints
668
+		//also, we don't have access to the request so we have to just grab it from the superglobal
669
+		$force_show_ee_namespace = ltrim(
670
+			EEH_Array::is_set($_REQUEST, 'force_show_ee_namespace', ''),
671
+			'/'
672
+		);
673
+		foreach (EED_Core_Rest_Api::get_ee_route_data() as $namespace => $relative_urls) {
674
+			foreach ($relative_urls as $endpoint => $routes) {
675
+				foreach ($routes as $route) {
676
+					//by default, hide "hidden_endpoint"s, unless the request indicates
677
+					//to $force_show_ee_namespace, in which case only show that one
678
+					//namespace's endpoints (and hide all others)
679
+					if (($route['hidden_endpoint'] && $force_show_ee_namespace === '')
680
+						|| ($force_show_ee_namespace !== '' && $force_show_ee_namespace !== $namespace)
681
+					) {
682
+						$full_route = '/' . ltrim($namespace, '/') . '/' . ltrim($endpoint, '/');
683
+						unset($route_data[$full_route]);
684
+					}
685
+				}
686
+			}
687
+		}
688
+		return $route_data;
689
+	}
690
+
691
+
692
+
693
+	/**
694
+	 * Returns an array describing which versions of core support serving requests for.
695
+	 * Keys are core versions' major and minor version, and values are the
696
+	 * LOWEST requested version they can serve. Eg, 4.7 can serve requests for 4.6-like
697
+	 * data by just removing a few models and fields from the responses. However, 4.15 might remove
698
+	 * the answers table entirely, in which case it would be very difficult for
699
+	 * it to serve 4.6-style responses.
700
+	 * Versions of core that are missing from this array are unknowns.
701
+	 * previous ver
702
+	 *
703
+	 * @return array
704
+	 */
705
+	public static function version_compatibilities()
706
+	{
707
+		return apply_filters(
708
+			'FHEE__EED_Core_REST_API__version_compatibilities',
709
+			array(
710
+				'4.8.29' => '4.8.29',
711
+				'4.8.33' => '4.8.29',
712
+				'4.8.34' => '4.8.29',
713
+				'4.8.36' => '4.8.29',
714
+			)
715
+		);
716
+	}
717
+
718
+
719
+
720
+	/**
721
+	 * Gets the latest API version served. Eg if there
722
+	 * are two versions served of the API, 4.8.29 and 4.8.32, and
723
+	 * we are on core version 4.8.34, it will return the string "4.8.32"
724
+	 *
725
+	 * @return string
726
+	 */
727
+	public static function latest_rest_api_version()
728
+	{
729
+		$versions_served = \EED_Core_Rest_Api::versions_served();
730
+		$versions_served_keys = array_keys($versions_served);
731
+		return end($versions_served_keys);
732
+	}
733
+
734
+
735
+
736
+	/**
737
+	 * Using EED_Core_Rest_Api::version_compatibilities(), determines what version of
738
+	 * EE the API can serve requests for. Eg, if we are on 4.15 of core, and
739
+	 * we can serve requests from 4.12 or later, this will return array( '4.12', '4.13', '4.14', '4.15' ).
740
+	 * We also indicate whether or not this version should be put in the index or not
741
+	 *
742
+	 * @return array keys are API version numbers (just major and minor numbers), and values
743
+	 * are whether or not they should be hidden
744
+	 */
745
+	public static function versions_served()
746
+	{
747
+		$versions_served = array();
748
+		$possibly_served_versions = EED_Core_Rest_Api::version_compatibilities();
749
+		$lowest_compatible_version = end($possibly_served_versions);
750
+		reset($possibly_served_versions);
751
+		$versions_served_historically = array_keys($possibly_served_versions);
752
+		$latest_version = end($versions_served_historically);
753
+		reset($versions_served_historically);
754
+		//for each version of core we have ever served:
755
+		foreach ($versions_served_historically as $key_versioned_endpoint) {
756
+			//if it's not above the current core version, and it's compatible with the current version of core
757
+			if ($key_versioned_endpoint == $latest_version) {
758
+				//don't hide the latest version in the index
759
+				$versions_served[$key_versioned_endpoint] = false;
760
+			} else if (
761
+				$key_versioned_endpoint < EED_Core_Rest_Api::core_version()
762
+				&& $key_versioned_endpoint >= $lowest_compatible_version
763
+			) {
764
+				//include, but hide, previous versions which are still supported
765
+				$versions_served[$key_versioned_endpoint] = true;
766
+			} elseif (
767
+			apply_filters(
768
+				'FHEE__EED_Core_Rest_Api__versions_served__include_incompatible_versions',
769
+				false,
770
+				$possibly_served_versions
771
+			)
772
+			) {
773
+				//if a version is no longer supported, don't include it in index or list of versions served
774
+				$versions_served[$key_versioned_endpoint] = true;
775
+			}
776
+		}
777
+		return $versions_served;
778
+	}
779
+
780
+
781
+
782
+	/**
783
+	 * Gets the major and minor version of EE core's version string
784
+	 *
785
+	 * @return string
786
+	 */
787
+	public static function core_version()
788
+	{
789
+		return apply_filters('FHEE__EED_Core_REST_API__core_version',
790
+			implode('.', array_slice(explode('.', espresso_version()), 0, 3)));
791
+	}
792
+
793
+
794
+
795
+	/**
796
+	 * Gets the default limit that should be used when querying for resources
797
+	 *
798
+	 * @return int
799
+	 */
800
+	public static function get_default_query_limit()
801
+	{
802
+		//we actually don't use a const because we want folks to always use
803
+		//this method, not the const directly
804
+		return apply_filters(
805
+			'FHEE__EED_Core_Rest_Api__get_default_query_limit',
806
+			50
807
+		);
808
+	}
809
+
810
+
811
+
812
+	/**
813
+	 *    run - initial module setup
814
+	 *
815
+	 * @access    public
816
+	 * @param  WP $WP
817
+	 * @return    void
818
+	 */
819
+	public function run($WP)
820
+	{
821
+	}
822 822
 
823 823
 
824 824
 
Please login to merge, or discard this patch.
core/libraries/shortcodes/EE_Shortcodes.lib.php 3 patches
Doc Comments   +1 added lines, -1 removed lines patch added patch discarded remove patch
@@ -352,7 +352,7 @@
 block discarded – undo
352 352
      *
353 353
      * Note: regex comes in part from the WP `get_shortcode_regex` expression in \wp-includes\shortcodes.php
354 354
      *
355
-     * @param $shortcode
355
+     * @param string $shortcode
356 356
      * @since 4.9.32
357 357
      * @return string
358 358
      */
Please login to merge, or discard this patch.
Indentation   +427 added lines, -427 removed lines patch added patch discarded remove patch
@@ -1,7 +1,7 @@  discard block
 block discarded – undo
1 1
 <?php
2 2
 
3 3
 if (! defined('EVENT_ESPRESSO_VERSION')) {
4
-    exit('NO direct script access allowed');
4
+	exit('NO direct script access allowed');
5 5
 }
6 6
 
7 7
 /**
@@ -30,432 +30,432 @@  discard block
 block discarded – undo
30 30
 abstract class EE_Shortcodes extends EE_Base
31 31
 {
32 32
 
33
-    /**
34
-     * holds label for library
35
-     * This is used for referencing the library label
36
-     *
37
-     * @access public
38
-     * @var string
39
-     */
40
-    public $label;
41
-
42
-
43
-    /**
44
-     * This property is used for referencing a short description of the library
45
-     *
46
-     * @access public
47
-     * @var string
48
-     */
49
-    public $description;
50
-
51
-
52
-    /**
53
-     * This will hold an array of shortcodes with the key as the shortcode ([shortcode]) and the value as a
54
-     * label/description for the shortcode.
55
-     *
56
-     * @access protected
57
-     * @var array
58
-     */
59
-    protected $_shortcodes;
60
-
61
-
62
-    /**
63
-     * This will hold the incoming data item sent to the parser method
64
-     *
65
-     * @access protected
66
-     * @var mixed (array|object)
67
-     */
68
-    protected $_data;
69
-
70
-
71
-    /**
72
-     * some shortcodes may require extra data to parse.  This property is provided for that.
73
-     *
74
-     * @var array
75
-     */
76
-    protected $_extra_data;
77
-
78
-
79
-    /**
80
-     * EE_messenger used to generate the template being parsed.
81
-     *
82
-     * @since 4.5.0
83
-     * @var EE_messenger
84
-     */
85
-    protected $_messenger;
86
-
87
-
88
-    /**
89
-     * message type used to generate the template being parsed.
90
-     *
91
-     * @since 4.5.0
92
-     * @var EE_message_type
93
-     */
94
-    protected $_message_type;
95
-
96
-
97
-    /**
98
-     * context used for the template being parsed
99
-     *
100
-     * @since 4.5.0
101
-     * @var string
102
-     */
103
-    protected $_context;
104
-
105
-
106
-    /**
107
-     * Specific Message Template Group ID
108
-     *
109
-     * @since 4.5.0
110
-     * @var int
111
-     */
112
-    protected $_GRP_ID;
113
-
114
-
115
-    /**
116
-     * @since 4.9.0
117
-     * @type EE_Message
118
-     */
119
-    protected $_message;
120
-
121
-
122
-    /**
123
-     * This will hold an instance of the EEH_Parse_Shortcodes helper that will be used when handling list type
124
-     * shortcodes
125
-     *
126
-     * @var EEH_Parse_Shortcodes
127
-     */
128
-    protected $_shortcode_helper;
129
-
130
-
131
-    public function __construct()
132
-    {
133
-        $this->_set_defaults();
134
-        $this->_init_props();
135
-    }
136
-
137
-
138
-    /**
139
-     * This sets the defaults for the properties.  Child classes will override these properties in their _init_props
140
-     * method
141
-     */
142
-    private function _set_defaults()
143
-    {
144
-        $this->name        = $this->description = '';
145
-        $this->_shortcodes = array();
146
-        $this->_set_shortcode_helper();
147
-    }
148
-
149
-
150
-    /**
151
-     * loads an instance of the EE_Shortcode_Parser helper when requested
152
-     */
153
-    protected function _set_shortcode_helper()
154
-    {
155
-        //get shortcode_replace instance- set when _get_messages is called in child...
156
-        $this->_shortcode_helper = new EEH_Parse_Shortcodes();
157
-    }
158
-
159
-
160
-    public function get_shortcode_helper()
161
-    {
162
-        if (! $this->_shortcode_helper instanceof EEH_Parse_Shortcodes) {
163
-            $this->_set_shortcode_helper();
164
-        }
165
-        return $this->_shortcode_helper;
166
-    }
167
-
168
-
169
-    /**
170
-     * This is the public method for kicking of the parser included with each child.  It can be overridden by child
171
-     * classes if necessary (see EE_Questions_Answers for example)
172
-     *
173
-     * @param  string               $shortcode  incoming shortcode to be parsed
174
-     * @param  mixed (object|array) $data       incoming data to be be used for parsing
175
-     * @param  mixed (object|array) $extra_data extra incoming data (usually EE_Messages_Addressee)
176
-     * @return string            parsed shortcode.
177
-     */
178
-    public function parser($shortcode, $data, $extra_data = array())
179
-    {
180
-
181
-        //filter setup shortcodes
182
-        $this->_shortcodes = $this->get_shortcodes();
183
-
184
-        //we need to setup any dynamic shortcodes so that they work with the array_key_exists
185
-        $sc           = preg_match_all('/(\[[A-Za-z0-9\_]+_\*)/', $shortcode, $matches);
186
-        $sc_to_verify = ! empty($matches[0]) ? $matches[0][0] . ']' : $shortcode;
187
-
188
-        //first we want to make sure this is a valid shortcode
189
-        if (! array_key_exists($sc_to_verify, $this->_shortcodes)) {
190
-            return false;
191
-        } //get out, this parser doesn't handle the incoming shortcode.
192
-        $this->_data       = $data;
193
-        $this->_extra_data = $extra_data;
194
-        $this->_set_messages_properties();
195
-        $parsed = apply_filters('FHEE__' . get_class($this) . '__parser_after', $this->_parser($shortcode), $shortcode,
196
-            $data, $extra_data, $this);
197
-
198
-        //note the below filter applies to ALL shortcode parsers... be careful!
199
-        $parsed = apply_filters('FHEE__EE_Shortcodes__parser_after', $parsed, $shortcode, $data, $extra_data, $this);
200
-        return $parsed;
201
-    }
202
-
203
-
204
-    /**
205
-     * This method just returns the shortcodes in the $_shortcodes array property.
206
-     *
207
-     * @access public
208
-     * @return array array of shortcodes => description pairs
209
-     */
210
-    public function get_shortcodes()
211
-    {
212
-        $this->_shortcodes = apply_filters('FHEE__' . get_class($this) . '__shortcodes', $this->_shortcodes, $this);
213
-
214
-        //note the below filter applies to ALL shortcode parsers... be careful!
215
-        $this->_shortcodes = apply_filters('FHEE__EE_Shortcodes__shortcodes', $this->_shortcodes, $this);
216
-
217
-        return $this->_shortcodes;
218
-    }
219
-
220
-
221
-    /**
222
-     * Child classes use this method to set the $name, $description, and $_shortcodes properties.
223
-     *
224
-     * @abstract
225
-     * @access protected
226
-     * @return void
227
-     */
228
-    abstract protected function _init_props();
229
-
230
-
231
-    /**
232
-     * This method will give parsing instructions for each shortcode defined in the _shortcodes array.  Child methods
233
-     * will have to take care of handling.
234
-     *
235
-     * @abstract
236
-     * @access protected
237
-     * @param string               $shortcode the shortcode to be parsed.
238
-     * @param mixed (object|array) $data      incoming data for the parser.  The data could be either an object or
239
-     *                             array because there are some shortcodes that might be replaced by prepared data that
240
-     *                             has multiple items in a list (i.e. list of attendees in an event and we're showing
241
-     *                             fname/lname for each attendee).  In this case data will be in an array.  Otherwise
242
-     *                             the data shoudl be in a properly formatted object.  The
243
-     *                             EEH_Parse_Shortcodes.helper.php describes the data object we're expecting.
244
-     * @return string parsed shortcode
245
-     */
246
-    abstract protected function _parser($shortcode);
247
-
248
-
249
-    /**
250
-     * This just validates incoming data for list type shortcode parsers (and they call this method) to make sure it
251
-     * meets their requirements
252
-     *
253
-     * @return mixed (void|exception) If validation fails we'll throw an exception.
254
-     */
255
-    protected function _validate_list_requirements()
256
-    {
257
-
258
-        //first test to make sure we've got an array!
259
-        if (! is_array($this->_data)) {
260
-            throw new EE_Error(sprintf(__('Expecting an array for the data sent to %s. Instead it was %s',
261
-                'event_espresso'), get_class($this), gettype($this->_data)));
262
-        }
263
-
264
-        //next test to make sure we've got the required template in the index!
265
-        if (! isset($this->_data['template'])) {
266
-            throw new EE_Error(sprintf(__('The incoming data does not have the required template index in its array',
267
-                'event_espresso')));
268
-        }
269
-
270
-        //next test to make sure we've got got a data index in the incoming data array
271
-        if (! isset($this->_data['data'])) {
272
-            throw new EE_Error(__('The incoming data does not have the required data index in its array',
273
-                'event_espresso'));
274
-        }
275
-
276
-        //all is well let's make sure _extra_data always has the values needed.
277
-        //let's make sure that extra_data includes all templates (for later parsing if necessary)
278
-        if (empty($this->_extra_data) || (empty($this->_extra_data['data']) && empty($this->_extra_data['template']))) {
279
-            $this->_extra_data['data']     = $this->_data['data'];
280
-            $this->_extra_data['template'] = $this->_data['template'];
281
-        }
282
-
283
-    }
284
-
285
-
286
-    /**
287
-     * This returns any attributes that may be existing on an EE_Shortcode
288
-     *
289
-     * @since 4.5.0
290
-     * @param string $shortcode incoming shortcode
291
-     * @return array An array with the attributes
292
-     */
293
-    protected function _get_shortcode_attrs($shortcode)
294
-    {
295
-        //make sure the required wp helper function is present
296
-        //require the shortcode file if necessary
297
-        if (! function_exists('shortcode_parse_atts')) {
298
-            require_once(ABSPATH . WPINC . '/shortcodes.php');
299
-        }
300
-
301
-        //let's get any attributes that may be present and set the defaults.
302
-        $shortcode_to_parse = str_replace('[', '', str_replace(']', '', $shortcode));
303
-        return shortcode_parse_atts($shortcode_to_parse);
304
-    }
305
-
306
-
307
-    /**
308
-     * Conditional blocks are shortcode patterns with an opening conditional tag `[IF_*]` and a corresponding
309
-     * closing tag (eg `[/IF_*]`).  The content within the tags will be displayed/hidden depending on whatever conditions
310
-     * existed in the opening tag.  This method handles parsing the actual template to show/hide this conditional content.
311
-     *
312
-     * @since 4.9.32
313
-     *
314
-     * @param string $shortcode  This should be original shortcode as used in the template and passed to the parser.
315
-     * @param bool $show  true means the opening and closing tags are removed and the content is left showing, false
316
-     *                    means the opening and closing tags and the contained content are removed.
317
-     * @return string     The template for the shortcode is returned.
318
-     */
319
-    protected function _mutate_conditional_block_in_template($shortcode, $show = true)
320
-    {
321
-        //first let's get all the matches in the template for this particular shortcode.
322
-        preg_match_all('~' . $this->_get_conditional_block_regex($shortcode) . '~', $this->_data['template'], $matches);
323
-
324
-        if ($matches && is_array($matches[0]) && !empty($matches[0])) {
325
-            //we need to hide all instances of the matches
326
-            foreach ($matches[0] as $index => $content_to_show_or_hide) {
327
-                $content_to_show_or_hide = preg_quote($content_to_show_or_hide);
328
-                $replacement = $show ? $matches[4][$index] : '';
329
-                $this->_data['template'] = preg_replace(
330
-                    '~' . $content_to_show_or_hide . '~',
331
-                    $replacement,
332
-                    $this->_data['template']
333
-                );
334
-            }
335
-        }
336
-        //return $template
337
-        return $this->_data['template'];
338
-    }
339
-
340
-
341
-    /**
342
-     * This returns the regex pattern to use for conditional shortcodes parsing.
343
-     *
344
-     * Note: regex comes in part from the WP `get_shortcode_regex` expression in \wp-includes\shortcodes.php
345
-     *
346
-     * @param $shortcode
347
-     * @since 4.9.32
348
-     * @return string
349
-     */
350
-    private function _get_conditional_block_regex($shortcode)
351
-    {
352
-        //get just the shortcode tag for the match
353
-        preg_match('@\[([^<>&/\[\]\x00-\x20=]++)@', $shortcode, $shortcode_tag_matches);
354
-        if (empty($shortcode_tag_matches[1])) {
355
-            return $this->_data['template'];
356
-        }
357
-
358
-        $shortcode_tag = $shortcode_tag_matches[1];
359
-        //get attributes_part_of_tag
360
-        $attributes_part = preg_quote(str_replace(array($shortcode_tag,'[',']'), '', $shortcode));
361
-        //escape
362
-        $shortcode_tag = preg_quote($shortcode_tag);
363
-
364
-        return
365
-              '\['                                  //Opening Bracket
366
-            . "($shortcode_tag)$attributes_part"    //1: Shortcode Name
367
-            . '(?![\w-])'                           //Not followed by word character or hyphen
368
-            . '('                                   //2: Unroll the loop: Inside the opening shortcode tag
369
-            .   '[^\]\/]*'                          //Not a closing bracket or forward slash
370
-            .   '(?:'
371
-            .       '\/(?!\])'                      //A forward slash not followed by a closing bracket
372
-            .       '[^\]\/]*'                      //Not a closing bracket or forward slash.
373
-            .   ')*?'
374
-            . ')'
375
-            . '(?:'
376
-            .   '(\/)'                              //3. Self closing tag ...
377
-            .   '\]'                                // ... and closing bracket
378
-            . '|'
379
-            .   '\]'                                //Closing bracket
380
-            .   '(?:'
381
-            .       '('                             //4: Unroll the loop: Optionally, anything between the opening and closing brackets
382
-            .           '[^\[]*+'                   //Not an opening bracket
383
-            .           '(?:'
384
-            .               '\[(?!\/\1\])'          //An opening bracket not followed by the closing shortcode tag.
385
-            .               '[^\[]*+'               //Not an opening bracket
386
-            .           ')*+'
387
-            .       ')'
388
-            .       '\[\/\1\]'                      //Closing shortcode tag
389
-            .   ')?'
390
-            . ')';
391
-    }
392
-
393
-
394
-    /**
395
-     * This sets the properties related to the messages system
396
-     *
397
-     * @since 4.5.0
398
-     * @return void
399
-     */
400
-    protected function _set_messages_properties()
401
-    {
402
-        //should be in _extra_data
403
-        if (isset($this->_extra_data['messenger'])) {
404
-            $this->_messenger    = $this->_extra_data['messenger'];
405
-            $this->_message_type = $this->_extra_data['message_type'];
406
-            $this->_context      = $this->_extra_data['message'] instanceof EE_Message ? $this->_extra_data['message']->context() : '';
407
-            $this->_GRP_ID       = $this->_extra_data['message'] instanceof EE_Message ? $this->_extra_data['message']->GRP_ID() : 0;
408
-            $this->_message      = $this->_extra_data['message'] instanceof EE_Message ? $this->_extra_data['message'] : null;
409
-        }
410
-    }
411
-
412
-
413
-    /**
414
-     * This returns whatever the set message type object is that was set on this shortcode parser.
415
-     *
416
-     * @since 4.5.0
417
-     * @return EE_message_type
418
-     */
419
-    public function get_set_message_type()
420
-    {
421
-        return $this->_message_type;
422
-    }
423
-
424
-
425
-    /**
426
-     * This returns whatever the set messenger object is that was set on this shortcode parser
427
-     *
428
-     * @since 4.5.0
429
-     * @return EE_messenger
430
-     */
431
-    public function get_set_messenger()
432
-    {
433
-        return $this->_messenger;
434
-    }
435
-
436
-
437
-    /**
438
-     * This returns whatever the set context string is on this shortcode parser.
439
-     *
440
-     * @since 4.5.0
441
-     * @return string
442
-     */
443
-    public function get_set_context()
444
-    {
445
-        return $this->_context;
446
-    }
447
-
448
-
449
-    /**
450
-     * This returns whatever the set EE_Message object is on this shortcode.
451
-     *
452
-     * @since 4.9.0
453
-     * @return EE_Message
454
-     */
455
-    public function get_set_message()
456
-    {
457
-        return $this->_message;
458
-    }
33
+	/**
34
+	 * holds label for library
35
+	 * This is used for referencing the library label
36
+	 *
37
+	 * @access public
38
+	 * @var string
39
+	 */
40
+	public $label;
41
+
42
+
43
+	/**
44
+	 * This property is used for referencing a short description of the library
45
+	 *
46
+	 * @access public
47
+	 * @var string
48
+	 */
49
+	public $description;
50
+
51
+
52
+	/**
53
+	 * This will hold an array of shortcodes with the key as the shortcode ([shortcode]) and the value as a
54
+	 * label/description for the shortcode.
55
+	 *
56
+	 * @access protected
57
+	 * @var array
58
+	 */
59
+	protected $_shortcodes;
60
+
61
+
62
+	/**
63
+	 * This will hold the incoming data item sent to the parser method
64
+	 *
65
+	 * @access protected
66
+	 * @var mixed (array|object)
67
+	 */
68
+	protected $_data;
69
+
70
+
71
+	/**
72
+	 * some shortcodes may require extra data to parse.  This property is provided for that.
73
+	 *
74
+	 * @var array
75
+	 */
76
+	protected $_extra_data;
77
+
78
+
79
+	/**
80
+	 * EE_messenger used to generate the template being parsed.
81
+	 *
82
+	 * @since 4.5.0
83
+	 * @var EE_messenger
84
+	 */
85
+	protected $_messenger;
86
+
87
+
88
+	/**
89
+	 * message type used to generate the template being parsed.
90
+	 *
91
+	 * @since 4.5.0
92
+	 * @var EE_message_type
93
+	 */
94
+	protected $_message_type;
95
+
96
+
97
+	/**
98
+	 * context used for the template being parsed
99
+	 *
100
+	 * @since 4.5.0
101
+	 * @var string
102
+	 */
103
+	protected $_context;
104
+
105
+
106
+	/**
107
+	 * Specific Message Template Group ID
108
+	 *
109
+	 * @since 4.5.0
110
+	 * @var int
111
+	 */
112
+	protected $_GRP_ID;
113
+
114
+
115
+	/**
116
+	 * @since 4.9.0
117
+	 * @type EE_Message
118
+	 */
119
+	protected $_message;
120
+
121
+
122
+	/**
123
+	 * This will hold an instance of the EEH_Parse_Shortcodes helper that will be used when handling list type
124
+	 * shortcodes
125
+	 *
126
+	 * @var EEH_Parse_Shortcodes
127
+	 */
128
+	protected $_shortcode_helper;
129
+
130
+
131
+	public function __construct()
132
+	{
133
+		$this->_set_defaults();
134
+		$this->_init_props();
135
+	}
136
+
137
+
138
+	/**
139
+	 * This sets the defaults for the properties.  Child classes will override these properties in their _init_props
140
+	 * method
141
+	 */
142
+	private function _set_defaults()
143
+	{
144
+		$this->name        = $this->description = '';
145
+		$this->_shortcodes = array();
146
+		$this->_set_shortcode_helper();
147
+	}
148
+
149
+
150
+	/**
151
+	 * loads an instance of the EE_Shortcode_Parser helper when requested
152
+	 */
153
+	protected function _set_shortcode_helper()
154
+	{
155
+		//get shortcode_replace instance- set when _get_messages is called in child...
156
+		$this->_shortcode_helper = new EEH_Parse_Shortcodes();
157
+	}
158
+
159
+
160
+	public function get_shortcode_helper()
161
+	{
162
+		if (! $this->_shortcode_helper instanceof EEH_Parse_Shortcodes) {
163
+			$this->_set_shortcode_helper();
164
+		}
165
+		return $this->_shortcode_helper;
166
+	}
167
+
168
+
169
+	/**
170
+	 * This is the public method for kicking of the parser included with each child.  It can be overridden by child
171
+	 * classes if necessary (see EE_Questions_Answers for example)
172
+	 *
173
+	 * @param  string               $shortcode  incoming shortcode to be parsed
174
+	 * @param  mixed (object|array) $data       incoming data to be be used for parsing
175
+	 * @param  mixed (object|array) $extra_data extra incoming data (usually EE_Messages_Addressee)
176
+	 * @return string            parsed shortcode.
177
+	 */
178
+	public function parser($shortcode, $data, $extra_data = array())
179
+	{
180
+
181
+		//filter setup shortcodes
182
+		$this->_shortcodes = $this->get_shortcodes();
183
+
184
+		//we need to setup any dynamic shortcodes so that they work with the array_key_exists
185
+		$sc           = preg_match_all('/(\[[A-Za-z0-9\_]+_\*)/', $shortcode, $matches);
186
+		$sc_to_verify = ! empty($matches[0]) ? $matches[0][0] . ']' : $shortcode;
187
+
188
+		//first we want to make sure this is a valid shortcode
189
+		if (! array_key_exists($sc_to_verify, $this->_shortcodes)) {
190
+			return false;
191
+		} //get out, this parser doesn't handle the incoming shortcode.
192
+		$this->_data       = $data;
193
+		$this->_extra_data = $extra_data;
194
+		$this->_set_messages_properties();
195
+		$parsed = apply_filters('FHEE__' . get_class($this) . '__parser_after', $this->_parser($shortcode), $shortcode,
196
+			$data, $extra_data, $this);
197
+
198
+		//note the below filter applies to ALL shortcode parsers... be careful!
199
+		$parsed = apply_filters('FHEE__EE_Shortcodes__parser_after', $parsed, $shortcode, $data, $extra_data, $this);
200
+		return $parsed;
201
+	}
202
+
203
+
204
+	/**
205
+	 * This method just returns the shortcodes in the $_shortcodes array property.
206
+	 *
207
+	 * @access public
208
+	 * @return array array of shortcodes => description pairs
209
+	 */
210
+	public function get_shortcodes()
211
+	{
212
+		$this->_shortcodes = apply_filters('FHEE__' . get_class($this) . '__shortcodes', $this->_shortcodes, $this);
213
+
214
+		//note the below filter applies to ALL shortcode parsers... be careful!
215
+		$this->_shortcodes = apply_filters('FHEE__EE_Shortcodes__shortcodes', $this->_shortcodes, $this);
216
+
217
+		return $this->_shortcodes;
218
+	}
219
+
220
+
221
+	/**
222
+	 * Child classes use this method to set the $name, $description, and $_shortcodes properties.
223
+	 *
224
+	 * @abstract
225
+	 * @access protected
226
+	 * @return void
227
+	 */
228
+	abstract protected function _init_props();
229
+
230
+
231
+	/**
232
+	 * This method will give parsing instructions for each shortcode defined in the _shortcodes array.  Child methods
233
+	 * will have to take care of handling.
234
+	 *
235
+	 * @abstract
236
+	 * @access protected
237
+	 * @param string               $shortcode the shortcode to be parsed.
238
+	 * @param mixed (object|array) $data      incoming data for the parser.  The data could be either an object or
239
+	 *                             array because there are some shortcodes that might be replaced by prepared data that
240
+	 *                             has multiple items in a list (i.e. list of attendees in an event and we're showing
241
+	 *                             fname/lname for each attendee).  In this case data will be in an array.  Otherwise
242
+	 *                             the data shoudl be in a properly formatted object.  The
243
+	 *                             EEH_Parse_Shortcodes.helper.php describes the data object we're expecting.
244
+	 * @return string parsed shortcode
245
+	 */
246
+	abstract protected function _parser($shortcode);
247
+
248
+
249
+	/**
250
+	 * This just validates incoming data for list type shortcode parsers (and they call this method) to make sure it
251
+	 * meets their requirements
252
+	 *
253
+	 * @return mixed (void|exception) If validation fails we'll throw an exception.
254
+	 */
255
+	protected function _validate_list_requirements()
256
+	{
257
+
258
+		//first test to make sure we've got an array!
259
+		if (! is_array($this->_data)) {
260
+			throw new EE_Error(sprintf(__('Expecting an array for the data sent to %s. Instead it was %s',
261
+				'event_espresso'), get_class($this), gettype($this->_data)));
262
+		}
263
+
264
+		//next test to make sure we've got the required template in the index!
265
+		if (! isset($this->_data['template'])) {
266
+			throw new EE_Error(sprintf(__('The incoming data does not have the required template index in its array',
267
+				'event_espresso')));
268
+		}
269
+
270
+		//next test to make sure we've got got a data index in the incoming data array
271
+		if (! isset($this->_data['data'])) {
272
+			throw new EE_Error(__('The incoming data does not have the required data index in its array',
273
+				'event_espresso'));
274
+		}
275
+
276
+		//all is well let's make sure _extra_data always has the values needed.
277
+		//let's make sure that extra_data includes all templates (for later parsing if necessary)
278
+		if (empty($this->_extra_data) || (empty($this->_extra_data['data']) && empty($this->_extra_data['template']))) {
279
+			$this->_extra_data['data']     = $this->_data['data'];
280
+			$this->_extra_data['template'] = $this->_data['template'];
281
+		}
282
+
283
+	}
284
+
285
+
286
+	/**
287
+	 * This returns any attributes that may be existing on an EE_Shortcode
288
+	 *
289
+	 * @since 4.5.0
290
+	 * @param string $shortcode incoming shortcode
291
+	 * @return array An array with the attributes
292
+	 */
293
+	protected function _get_shortcode_attrs($shortcode)
294
+	{
295
+		//make sure the required wp helper function is present
296
+		//require the shortcode file if necessary
297
+		if (! function_exists('shortcode_parse_atts')) {
298
+			require_once(ABSPATH . WPINC . '/shortcodes.php');
299
+		}
300
+
301
+		//let's get any attributes that may be present and set the defaults.
302
+		$shortcode_to_parse = str_replace('[', '', str_replace(']', '', $shortcode));
303
+		return shortcode_parse_atts($shortcode_to_parse);
304
+	}
305
+
306
+
307
+	/**
308
+	 * Conditional blocks are shortcode patterns with an opening conditional tag `[IF_*]` and a corresponding
309
+	 * closing tag (eg `[/IF_*]`).  The content within the tags will be displayed/hidden depending on whatever conditions
310
+	 * existed in the opening tag.  This method handles parsing the actual template to show/hide this conditional content.
311
+	 *
312
+	 * @since 4.9.32
313
+	 *
314
+	 * @param string $shortcode  This should be original shortcode as used in the template and passed to the parser.
315
+	 * @param bool $show  true means the opening and closing tags are removed and the content is left showing, false
316
+	 *                    means the opening and closing tags and the contained content are removed.
317
+	 * @return string     The template for the shortcode is returned.
318
+	 */
319
+	protected function _mutate_conditional_block_in_template($shortcode, $show = true)
320
+	{
321
+		//first let's get all the matches in the template for this particular shortcode.
322
+		preg_match_all('~' . $this->_get_conditional_block_regex($shortcode) . '~', $this->_data['template'], $matches);
323
+
324
+		if ($matches && is_array($matches[0]) && !empty($matches[0])) {
325
+			//we need to hide all instances of the matches
326
+			foreach ($matches[0] as $index => $content_to_show_or_hide) {
327
+				$content_to_show_or_hide = preg_quote($content_to_show_or_hide);
328
+				$replacement = $show ? $matches[4][$index] : '';
329
+				$this->_data['template'] = preg_replace(
330
+					'~' . $content_to_show_or_hide . '~',
331
+					$replacement,
332
+					$this->_data['template']
333
+				);
334
+			}
335
+		}
336
+		//return $template
337
+		return $this->_data['template'];
338
+	}
339
+
340
+
341
+	/**
342
+	 * This returns the regex pattern to use for conditional shortcodes parsing.
343
+	 *
344
+	 * Note: regex comes in part from the WP `get_shortcode_regex` expression in \wp-includes\shortcodes.php
345
+	 *
346
+	 * @param $shortcode
347
+	 * @since 4.9.32
348
+	 * @return string
349
+	 */
350
+	private function _get_conditional_block_regex($shortcode)
351
+	{
352
+		//get just the shortcode tag for the match
353
+		preg_match('@\[([^<>&/\[\]\x00-\x20=]++)@', $shortcode, $shortcode_tag_matches);
354
+		if (empty($shortcode_tag_matches[1])) {
355
+			return $this->_data['template'];
356
+		}
357
+
358
+		$shortcode_tag = $shortcode_tag_matches[1];
359
+		//get attributes_part_of_tag
360
+		$attributes_part = preg_quote(str_replace(array($shortcode_tag,'[',']'), '', $shortcode));
361
+		//escape
362
+		$shortcode_tag = preg_quote($shortcode_tag);
363
+
364
+		return
365
+			  '\['                                  //Opening Bracket
366
+			. "($shortcode_tag)$attributes_part"    //1: Shortcode Name
367
+			. '(?![\w-])'                           //Not followed by word character or hyphen
368
+			. '('                                   //2: Unroll the loop: Inside the opening shortcode tag
369
+			.   '[^\]\/]*'                          //Not a closing bracket or forward slash
370
+			.   '(?:'
371
+			.       '\/(?!\])'                      //A forward slash not followed by a closing bracket
372
+			.       '[^\]\/]*'                      //Not a closing bracket or forward slash.
373
+			.   ')*?'
374
+			. ')'
375
+			. '(?:'
376
+			.   '(\/)'                              //3. Self closing tag ...
377
+			.   '\]'                                // ... and closing bracket
378
+			. '|'
379
+			.   '\]'                                //Closing bracket
380
+			.   '(?:'
381
+			.       '('                             //4: Unroll the loop: Optionally, anything between the opening and closing brackets
382
+			.           '[^\[]*+'                   //Not an opening bracket
383
+			.           '(?:'
384
+			.               '\[(?!\/\1\])'          //An opening bracket not followed by the closing shortcode tag.
385
+			.               '[^\[]*+'               //Not an opening bracket
386
+			.           ')*+'
387
+			.       ')'
388
+			.       '\[\/\1\]'                      //Closing shortcode tag
389
+			.   ')?'
390
+			. ')';
391
+	}
392
+
393
+
394
+	/**
395
+	 * This sets the properties related to the messages system
396
+	 *
397
+	 * @since 4.5.0
398
+	 * @return void
399
+	 */
400
+	protected function _set_messages_properties()
401
+	{
402
+		//should be in _extra_data
403
+		if (isset($this->_extra_data['messenger'])) {
404
+			$this->_messenger    = $this->_extra_data['messenger'];
405
+			$this->_message_type = $this->_extra_data['message_type'];
406
+			$this->_context      = $this->_extra_data['message'] instanceof EE_Message ? $this->_extra_data['message']->context() : '';
407
+			$this->_GRP_ID       = $this->_extra_data['message'] instanceof EE_Message ? $this->_extra_data['message']->GRP_ID() : 0;
408
+			$this->_message      = $this->_extra_data['message'] instanceof EE_Message ? $this->_extra_data['message'] : null;
409
+		}
410
+	}
411
+
412
+
413
+	/**
414
+	 * This returns whatever the set message type object is that was set on this shortcode parser.
415
+	 *
416
+	 * @since 4.5.0
417
+	 * @return EE_message_type
418
+	 */
419
+	public function get_set_message_type()
420
+	{
421
+		return $this->_message_type;
422
+	}
423
+
424
+
425
+	/**
426
+	 * This returns whatever the set messenger object is that was set on this shortcode parser
427
+	 *
428
+	 * @since 4.5.0
429
+	 * @return EE_messenger
430
+	 */
431
+	public function get_set_messenger()
432
+	{
433
+		return $this->_messenger;
434
+	}
435
+
436
+
437
+	/**
438
+	 * This returns whatever the set context string is on this shortcode parser.
439
+	 *
440
+	 * @since 4.5.0
441
+	 * @return string
442
+	 */
443
+	public function get_set_context()
444
+	{
445
+		return $this->_context;
446
+	}
447
+
448
+
449
+	/**
450
+	 * This returns whatever the set EE_Message object is on this shortcode.
451
+	 *
452
+	 * @since 4.9.0
453
+	 * @return EE_Message
454
+	 */
455
+	public function get_set_message()
456
+	{
457
+		return $this->_message;
458
+	}
459 459
 
460 460
 
461 461
 } //end EE_Shortcodes
Please login to merge, or discard this patch.
Spacing   +15 added lines, -15 removed lines patch added patch discarded remove patch
@@ -1,6 +1,6 @@  discard block
 block discarded – undo
1 1
 <?php
2 2
 
3
-if (! defined('EVENT_ESPRESSO_VERSION')) {
3
+if ( ! defined('EVENT_ESPRESSO_VERSION')) {
4 4
     exit('NO direct script access allowed');
5 5
 }
6 6
 
@@ -159,7 +159,7 @@  discard block
 block discarded – undo
159 159
 
160 160
     public function get_shortcode_helper()
161 161
     {
162
-        if (! $this->_shortcode_helper instanceof EEH_Parse_Shortcodes) {
162
+        if ( ! $this->_shortcode_helper instanceof EEH_Parse_Shortcodes) {
163 163
             $this->_set_shortcode_helper();
164 164
         }
165 165
         return $this->_shortcode_helper;
@@ -183,16 +183,16 @@  discard block
 block discarded – undo
183 183
 
184 184
         //we need to setup any dynamic shortcodes so that they work with the array_key_exists
185 185
         $sc           = preg_match_all('/(\[[A-Za-z0-9\_]+_\*)/', $shortcode, $matches);
186
-        $sc_to_verify = ! empty($matches[0]) ? $matches[0][0] . ']' : $shortcode;
186
+        $sc_to_verify = ! empty($matches[0]) ? $matches[0][0].']' : $shortcode;
187 187
 
188 188
         //first we want to make sure this is a valid shortcode
189
-        if (! array_key_exists($sc_to_verify, $this->_shortcodes)) {
189
+        if ( ! array_key_exists($sc_to_verify, $this->_shortcodes)) {
190 190
             return false;
191 191
         } //get out, this parser doesn't handle the incoming shortcode.
192 192
         $this->_data       = $data;
193 193
         $this->_extra_data = $extra_data;
194 194
         $this->_set_messages_properties();
195
-        $parsed = apply_filters('FHEE__' . get_class($this) . '__parser_after', $this->_parser($shortcode), $shortcode,
195
+        $parsed = apply_filters('FHEE__'.get_class($this).'__parser_after', $this->_parser($shortcode), $shortcode,
196 196
             $data, $extra_data, $this);
197 197
 
198 198
         //note the below filter applies to ALL shortcode parsers... be careful!
@@ -209,7 +209,7 @@  discard block
 block discarded – undo
209 209
      */
210 210
     public function get_shortcodes()
211 211
     {
212
-        $this->_shortcodes = apply_filters('FHEE__' . get_class($this) . '__shortcodes', $this->_shortcodes, $this);
212
+        $this->_shortcodes = apply_filters('FHEE__'.get_class($this).'__shortcodes', $this->_shortcodes, $this);
213 213
 
214 214
         //note the below filter applies to ALL shortcode parsers... be careful!
215 215
         $this->_shortcodes = apply_filters('FHEE__EE_Shortcodes__shortcodes', $this->_shortcodes, $this);
@@ -256,19 +256,19 @@  discard block
 block discarded – undo
256 256
     {
257 257
 
258 258
         //first test to make sure we've got an array!
259
-        if (! is_array($this->_data)) {
259
+        if ( ! is_array($this->_data)) {
260 260
             throw new EE_Error(sprintf(__('Expecting an array for the data sent to %s. Instead it was %s',
261 261
                 'event_espresso'), get_class($this), gettype($this->_data)));
262 262
         }
263 263
 
264 264
         //next test to make sure we've got the required template in the index!
265
-        if (! isset($this->_data['template'])) {
265
+        if ( ! isset($this->_data['template'])) {
266 266
             throw new EE_Error(sprintf(__('The incoming data does not have the required template index in its array',
267 267
                 'event_espresso')));
268 268
         }
269 269
 
270 270
         //next test to make sure we've got got a data index in the incoming data array
271
-        if (! isset($this->_data['data'])) {
271
+        if ( ! isset($this->_data['data'])) {
272 272
             throw new EE_Error(__('The incoming data does not have the required data index in its array',
273 273
                 'event_espresso'));
274 274
         }
@@ -294,8 +294,8 @@  discard block
 block discarded – undo
294 294
     {
295 295
         //make sure the required wp helper function is present
296 296
         //require the shortcode file if necessary
297
-        if (! function_exists('shortcode_parse_atts')) {
298
-            require_once(ABSPATH . WPINC . '/shortcodes.php');
297
+        if ( ! function_exists('shortcode_parse_atts')) {
298
+            require_once(ABSPATH.WPINC.'/shortcodes.php');
299 299
         }
300 300
 
301 301
         //let's get any attributes that may be present and set the defaults.
@@ -319,15 +319,15 @@  discard block
 block discarded – undo
319 319
     protected function _mutate_conditional_block_in_template($shortcode, $show = true)
320 320
     {
321 321
         //first let's get all the matches in the template for this particular shortcode.
322
-        preg_match_all('~' . $this->_get_conditional_block_regex($shortcode) . '~', $this->_data['template'], $matches);
322
+        preg_match_all('~'.$this->_get_conditional_block_regex($shortcode).'~', $this->_data['template'], $matches);
323 323
 
324
-        if ($matches && is_array($matches[0]) && !empty($matches[0])) {
324
+        if ($matches && is_array($matches[0]) && ! empty($matches[0])) {
325 325
             //we need to hide all instances of the matches
326 326
             foreach ($matches[0] as $index => $content_to_show_or_hide) {
327 327
                 $content_to_show_or_hide = preg_quote($content_to_show_or_hide);
328 328
                 $replacement = $show ? $matches[4][$index] : '';
329 329
                 $this->_data['template'] = preg_replace(
330
-                    '~' . $content_to_show_or_hide . '~',
330
+                    '~'.$content_to_show_or_hide.'~',
331 331
                     $replacement,
332 332
                     $this->_data['template']
333 333
                 );
@@ -357,7 +357,7 @@  discard block
 block discarded – undo
357 357
 
358 358
         $shortcode_tag = $shortcode_tag_matches[1];
359 359
         //get attributes_part_of_tag
360
-        $attributes_part = preg_quote(str_replace(array($shortcode_tag,'[',']'), '', $shortcode));
360
+        $attributes_part = preg_quote(str_replace(array($shortcode_tag, '[', ']'), '', $shortcode));
361 361
         //escape
362 362
         $shortcode_tag = preg_quote($shortcode_tag);
363 363
 
Please login to merge, or discard this patch.
espresso.php 1 patch
Indentation   +219 added lines, -219 removed lines patch added patch discarded remove patch
@@ -1,5 +1,5 @@  discard block
 block discarded – undo
1 1
 <?php if ( ! defined('ABSPATH')) {
2
-    exit('No direct script access allowed');
2
+	exit('No direct script access allowed');
3 3
 }
4 4
 /*
5 5
   Plugin Name:		Event Espresso
@@ -40,243 +40,243 @@  discard block
 block discarded – undo
40 40
  * @since            4.0
41 41
  */
42 42
 if (function_exists('espresso_version')) {
43
-    /**
44
-     *    espresso_duplicate_plugin_error
45
-     *    displays if more than one version of EE is activated at the same time
46
-     */
47
-    function espresso_duplicate_plugin_error()
48
-    {
49
-        ?>
43
+	/**
44
+	 *    espresso_duplicate_plugin_error
45
+	 *    displays if more than one version of EE is activated at the same time
46
+	 */
47
+	function espresso_duplicate_plugin_error()
48
+	{
49
+		?>
50 50
         <div class="error">
51 51
             <p>
52 52
                 <?php echo esc_html__(
53
-                        'Can not run multiple versions of Event Espresso! One version has been automatically deactivated. Please verify that you have the correct version you want still active.',
54
-                        'event_espresso'
55
-                ); ?>
53
+						'Can not run multiple versions of Event Espresso! One version has been automatically deactivated. Please verify that you have the correct version you want still active.',
54
+						'event_espresso'
55
+				); ?>
56 56
             </p>
57 57
         </div>
58 58
         <?php
59
-        espresso_deactivate_plugin(plugin_basename(__FILE__));
60
-    }
59
+		espresso_deactivate_plugin(plugin_basename(__FILE__));
60
+	}
61 61
 
62
-    add_action('admin_notices', 'espresso_duplicate_plugin_error', 1);
62
+	add_action('admin_notices', 'espresso_duplicate_plugin_error', 1);
63 63
 } else {
64
-    define('EE_MIN_PHP_VER_REQUIRED', '5.3.9');
65
-    if ( ! version_compare(PHP_VERSION, EE_MIN_PHP_VER_REQUIRED, '>=')) {
66
-        /**
67
-         * espresso_minimum_php_version_error
68
-         *
69
-         * @return void
70
-         */
71
-        function espresso_minimum_php_version_error()
72
-        {
73
-            ?>
64
+	define('EE_MIN_PHP_VER_REQUIRED', '5.3.9');
65
+	if ( ! version_compare(PHP_VERSION, EE_MIN_PHP_VER_REQUIRED, '>=')) {
66
+		/**
67
+		 * espresso_minimum_php_version_error
68
+		 *
69
+		 * @return void
70
+		 */
71
+		function espresso_minimum_php_version_error()
72
+		{
73
+			?>
74 74
             <div class="error">
75 75
                 <p>
76 76
                     <?php
77
-                    printf(
78
-                            esc_html__(
79
-                                    'We\'re sorry, but Event Espresso requires PHP version %1$s or greater in order to operate. You are currently running version %2$s.%3$sIn order to update your version of PHP, you will need to contact your current hosting provider.%3$sFor information on stable PHP versions, please go to %4$s.',
80
-                                    'event_espresso'
81
-                            ),
82
-                            EE_MIN_PHP_VER_REQUIRED,
83
-                            PHP_VERSION,
84
-                            '<br/>',
85
-                            '<a href="http://php.net/downloads.php">http://php.net/downloads.php</a>'
86
-                    );
87
-                    ?>
77
+					printf(
78
+							esc_html__(
79
+									'We\'re sorry, but Event Espresso requires PHP version %1$s or greater in order to operate. You are currently running version %2$s.%3$sIn order to update your version of PHP, you will need to contact your current hosting provider.%3$sFor information on stable PHP versions, please go to %4$s.',
80
+									'event_espresso'
81
+							),
82
+							EE_MIN_PHP_VER_REQUIRED,
83
+							PHP_VERSION,
84
+							'<br/>',
85
+							'<a href="http://php.net/downloads.php">http://php.net/downloads.php</a>'
86
+					);
87
+					?>
88 88
                 </p>
89 89
             </div>
90 90
             <?php
91
-            espresso_deactivate_plugin(plugin_basename(__FILE__));
92
-        }
91
+			espresso_deactivate_plugin(plugin_basename(__FILE__));
92
+		}
93 93
 
94
-        add_action('admin_notices', 'espresso_minimum_php_version_error', 1);
95
-    } else {
96
-        /**
97
-         * espresso_version
98
-         * Returns the plugin version
99
-         *
100
-         * @return string
101
-         */
102
-        function espresso_version()
103
-        {
104
-            return apply_filters('FHEE__espresso__espresso_version', '4.9.32.rc.029');
105
-        }
94
+		add_action('admin_notices', 'espresso_minimum_php_version_error', 1);
95
+	} else {
96
+		/**
97
+		 * espresso_version
98
+		 * Returns the plugin version
99
+		 *
100
+		 * @return string
101
+		 */
102
+		function espresso_version()
103
+		{
104
+			return apply_filters('FHEE__espresso__espresso_version', '4.9.32.rc.029');
105
+		}
106 106
 
107
-        // define versions
108
-        define('EVENT_ESPRESSO_VERSION', espresso_version());
109
-        define('EE_MIN_WP_VER_REQUIRED', '4.1');
110
-        define('EE_MIN_WP_VER_RECOMMENDED', '4.4.2');
111
-        define('EE_MIN_PHP_VER_RECOMMENDED', '5.4.44');
112
-        define('EVENT_ESPRESSO_MAIN_FILE', __FILE__);
113
-        //used to be DIRECTORY_SEPARATOR, but that caused issues on windows
114
-        if ( ! defined('DS')) {
115
-            define('DS', '/');
116
-        }
117
-        if ( ! defined('PS')) {
118
-            define('PS', PATH_SEPARATOR);
119
-        }
120
-        if ( ! defined('SP')) {
121
-            define('SP', ' ');
122
-        }
123
-        if ( ! defined('EENL')) {
124
-            define('EENL', "\n");
125
-        }
126
-        define('EE_SUPPORT_EMAIL', '[email protected]');
127
-        // define the plugin directory and URL
128
-        define('EE_PLUGIN_BASENAME', plugin_basename(EVENT_ESPRESSO_MAIN_FILE));
129
-        define('EE_PLUGIN_DIR_PATH', plugin_dir_path(EVENT_ESPRESSO_MAIN_FILE));
130
-        define('EE_PLUGIN_DIR_URL', plugin_dir_url(EVENT_ESPRESSO_MAIN_FILE));
131
-        // main root folder paths
132
-        define('EE_ADMIN_PAGES', EE_PLUGIN_DIR_PATH . 'admin_pages' . DS);
133
-        define('EE_CORE', EE_PLUGIN_DIR_PATH . 'core' . DS);
134
-        define('EE_MODULES', EE_PLUGIN_DIR_PATH . 'modules' . DS);
135
-        define('EE_PUBLIC', EE_PLUGIN_DIR_PATH . 'public' . DS);
136
-        define('EE_SHORTCODES', EE_PLUGIN_DIR_PATH . 'shortcodes' . DS);
137
-        define('EE_WIDGETS', EE_PLUGIN_DIR_PATH . 'widgets' . DS);
138
-        define('EE_PAYMENT_METHODS', EE_PLUGIN_DIR_PATH . 'payment_methods' . DS);
139
-        define('EE_CAFF_PATH', EE_PLUGIN_DIR_PATH . 'caffeinated' . DS);
140
-        // core system paths
141
-        define('EE_ADMIN', EE_CORE . 'admin' . DS);
142
-        define('EE_CPTS', EE_CORE . 'CPTs' . DS);
143
-        define('EE_CLASSES', EE_CORE . 'db_classes' . DS);
144
-        define('EE_INTERFACES', EE_CORE . 'interfaces' . DS);
145
-        define('EE_BUSINESS', EE_CORE . 'business' . DS);
146
-        define('EE_MODELS', EE_CORE . 'db_models' . DS);
147
-        define('EE_HELPERS', EE_CORE . 'helpers' . DS);
148
-        define('EE_LIBRARIES', EE_CORE . 'libraries' . DS);
149
-        define('EE_TEMPLATES', EE_CORE . 'templates' . DS);
150
-        define('EE_THIRD_PARTY', EE_CORE . 'third_party_libs' . DS);
151
-        define('EE_GLOBAL_ASSETS', EE_TEMPLATES . 'global_assets' . DS);
152
-        define('EE_FORM_SECTIONS', EE_LIBRARIES . 'form_sections' . DS);
153
-        // gateways
154
-        define('EE_GATEWAYS', EE_MODULES . 'gateways' . DS);
155
-        define('EE_GATEWAYS_URL', EE_PLUGIN_DIR_URL . 'modules' . DS . 'gateways' . DS);
156
-        // asset URL paths
157
-        define('EE_TEMPLATES_URL', EE_PLUGIN_DIR_URL . 'core' . DS . 'templates' . DS);
158
-        define('EE_GLOBAL_ASSETS_URL', EE_TEMPLATES_URL . 'global_assets' . DS);
159
-        define('EE_IMAGES_URL', EE_GLOBAL_ASSETS_URL . 'images' . DS);
160
-        define('EE_THIRD_PARTY_URL', EE_PLUGIN_DIR_URL . 'core' . DS . 'third_party_libs' . DS);
161
-        define('EE_HELPERS_ASSETS', EE_PLUGIN_DIR_URL . 'core/helpers/assets/');
162
-        define('EE_LIBRARIES_URL', EE_PLUGIN_DIR_URL . 'core/libraries/');
163
-        // define upload paths
164
-        $uploads = wp_upload_dir();
165
-        // define the uploads directory and URL
166
-        define('EVENT_ESPRESSO_UPLOAD_DIR', $uploads['basedir'] . DS . 'espresso' . DS);
167
-        define('EVENT_ESPRESSO_UPLOAD_URL', $uploads['baseurl'] . DS . 'espresso' . DS);
168
-        // define the templates directory and URL
169
-        define('EVENT_ESPRESSO_TEMPLATE_DIR', $uploads['basedir'] . DS . 'espresso' . DS . 'templates' . DS);
170
-        define('EVENT_ESPRESSO_TEMPLATE_URL', $uploads['baseurl'] . DS . 'espresso' . DS . 'templates' . DS);
171
-        // define the gateway directory and URL
172
-        define('EVENT_ESPRESSO_GATEWAY_DIR', $uploads['basedir'] . DS . 'espresso' . DS . 'gateways' . DS);
173
-        define('EVENT_ESPRESSO_GATEWAY_URL', $uploads['baseurl'] . DS . 'espresso' . DS . 'gateways' . DS);
174
-        // languages folder/path
175
-        define('EE_LANGUAGES_SAFE_LOC', '..' . DS . 'uploads' . DS . 'espresso' . DS . 'languages' . DS);
176
-        define('EE_LANGUAGES_SAFE_DIR', EVENT_ESPRESSO_UPLOAD_DIR . 'languages' . DS);
177
-        //check for dompdf fonts in uploads
178
-        if (file_exists(EVENT_ESPRESSO_UPLOAD_DIR . 'fonts' . DS)) {
179
-            define('DOMPDF_FONT_DIR', EVENT_ESPRESSO_UPLOAD_DIR . 'fonts' . DS);
180
-        }
181
-        //ajax constants
182
-        define(
183
-                'EE_FRONT_AJAX',
184
-                isset($_REQUEST['ee_front_ajax']) || isset($_REQUEST['data']['ee_front_ajax']) ? true : false
185
-        );
186
-        define(
187
-                'EE_ADMIN_AJAX',
188
-                isset($_REQUEST['ee_admin_ajax']) || isset($_REQUEST['data']['ee_admin_ajax']) ? true : false
189
-        );
190
-        //just a handy constant occasionally needed for finding values representing infinity in the DB
191
-        //you're better to use this than its straight value (currently -1) in case you ever
192
-        //want to change its default value! or find when -1 means infinity
193
-        define('EE_INF_IN_DB', -1);
194
-        define('EE_INF', INF > (float)PHP_INT_MAX ? INF : PHP_INT_MAX);
195
-        define('EE_DEBUG', false);
196
-        // for older WP versions
197
-        if ( ! defined('MONTH_IN_SECONDS')) {
198
-            define('MONTH_IN_SECONDS', DAY_IN_SECONDS * 30);
199
-        }
200
-        /**
201
-         *    espresso_plugin_activation
202
-         *    adds a wp-option to indicate that EE has been activated via the WP admin plugins page
203
-         */
204
-        function espresso_plugin_activation()
205
-        {
206
-            update_option('ee_espresso_activation', true);
207
-        }
107
+		// define versions
108
+		define('EVENT_ESPRESSO_VERSION', espresso_version());
109
+		define('EE_MIN_WP_VER_REQUIRED', '4.1');
110
+		define('EE_MIN_WP_VER_RECOMMENDED', '4.4.2');
111
+		define('EE_MIN_PHP_VER_RECOMMENDED', '5.4.44');
112
+		define('EVENT_ESPRESSO_MAIN_FILE', __FILE__);
113
+		//used to be DIRECTORY_SEPARATOR, but that caused issues on windows
114
+		if ( ! defined('DS')) {
115
+			define('DS', '/');
116
+		}
117
+		if ( ! defined('PS')) {
118
+			define('PS', PATH_SEPARATOR);
119
+		}
120
+		if ( ! defined('SP')) {
121
+			define('SP', ' ');
122
+		}
123
+		if ( ! defined('EENL')) {
124
+			define('EENL', "\n");
125
+		}
126
+		define('EE_SUPPORT_EMAIL', '[email protected]');
127
+		// define the plugin directory and URL
128
+		define('EE_PLUGIN_BASENAME', plugin_basename(EVENT_ESPRESSO_MAIN_FILE));
129
+		define('EE_PLUGIN_DIR_PATH', plugin_dir_path(EVENT_ESPRESSO_MAIN_FILE));
130
+		define('EE_PLUGIN_DIR_URL', plugin_dir_url(EVENT_ESPRESSO_MAIN_FILE));
131
+		// main root folder paths
132
+		define('EE_ADMIN_PAGES', EE_PLUGIN_DIR_PATH . 'admin_pages' . DS);
133
+		define('EE_CORE', EE_PLUGIN_DIR_PATH . 'core' . DS);
134
+		define('EE_MODULES', EE_PLUGIN_DIR_PATH . 'modules' . DS);
135
+		define('EE_PUBLIC', EE_PLUGIN_DIR_PATH . 'public' . DS);
136
+		define('EE_SHORTCODES', EE_PLUGIN_DIR_PATH . 'shortcodes' . DS);
137
+		define('EE_WIDGETS', EE_PLUGIN_DIR_PATH . 'widgets' . DS);
138
+		define('EE_PAYMENT_METHODS', EE_PLUGIN_DIR_PATH . 'payment_methods' . DS);
139
+		define('EE_CAFF_PATH', EE_PLUGIN_DIR_PATH . 'caffeinated' . DS);
140
+		// core system paths
141
+		define('EE_ADMIN', EE_CORE . 'admin' . DS);
142
+		define('EE_CPTS', EE_CORE . 'CPTs' . DS);
143
+		define('EE_CLASSES', EE_CORE . 'db_classes' . DS);
144
+		define('EE_INTERFACES', EE_CORE . 'interfaces' . DS);
145
+		define('EE_BUSINESS', EE_CORE . 'business' . DS);
146
+		define('EE_MODELS', EE_CORE . 'db_models' . DS);
147
+		define('EE_HELPERS', EE_CORE . 'helpers' . DS);
148
+		define('EE_LIBRARIES', EE_CORE . 'libraries' . DS);
149
+		define('EE_TEMPLATES', EE_CORE . 'templates' . DS);
150
+		define('EE_THIRD_PARTY', EE_CORE . 'third_party_libs' . DS);
151
+		define('EE_GLOBAL_ASSETS', EE_TEMPLATES . 'global_assets' . DS);
152
+		define('EE_FORM_SECTIONS', EE_LIBRARIES . 'form_sections' . DS);
153
+		// gateways
154
+		define('EE_GATEWAYS', EE_MODULES . 'gateways' . DS);
155
+		define('EE_GATEWAYS_URL', EE_PLUGIN_DIR_URL . 'modules' . DS . 'gateways' . DS);
156
+		// asset URL paths
157
+		define('EE_TEMPLATES_URL', EE_PLUGIN_DIR_URL . 'core' . DS . 'templates' . DS);
158
+		define('EE_GLOBAL_ASSETS_URL', EE_TEMPLATES_URL . 'global_assets' . DS);
159
+		define('EE_IMAGES_URL', EE_GLOBAL_ASSETS_URL . 'images' . DS);
160
+		define('EE_THIRD_PARTY_URL', EE_PLUGIN_DIR_URL . 'core' . DS . 'third_party_libs' . DS);
161
+		define('EE_HELPERS_ASSETS', EE_PLUGIN_DIR_URL . 'core/helpers/assets/');
162
+		define('EE_LIBRARIES_URL', EE_PLUGIN_DIR_URL . 'core/libraries/');
163
+		// define upload paths
164
+		$uploads = wp_upload_dir();
165
+		// define the uploads directory and URL
166
+		define('EVENT_ESPRESSO_UPLOAD_DIR', $uploads['basedir'] . DS . 'espresso' . DS);
167
+		define('EVENT_ESPRESSO_UPLOAD_URL', $uploads['baseurl'] . DS . 'espresso' . DS);
168
+		// define the templates directory and URL
169
+		define('EVENT_ESPRESSO_TEMPLATE_DIR', $uploads['basedir'] . DS . 'espresso' . DS . 'templates' . DS);
170
+		define('EVENT_ESPRESSO_TEMPLATE_URL', $uploads['baseurl'] . DS . 'espresso' . DS . 'templates' . DS);
171
+		// define the gateway directory and URL
172
+		define('EVENT_ESPRESSO_GATEWAY_DIR', $uploads['basedir'] . DS . 'espresso' . DS . 'gateways' . DS);
173
+		define('EVENT_ESPRESSO_GATEWAY_URL', $uploads['baseurl'] . DS . 'espresso' . DS . 'gateways' . DS);
174
+		// languages folder/path
175
+		define('EE_LANGUAGES_SAFE_LOC', '..' . DS . 'uploads' . DS . 'espresso' . DS . 'languages' . DS);
176
+		define('EE_LANGUAGES_SAFE_DIR', EVENT_ESPRESSO_UPLOAD_DIR . 'languages' . DS);
177
+		//check for dompdf fonts in uploads
178
+		if (file_exists(EVENT_ESPRESSO_UPLOAD_DIR . 'fonts' . DS)) {
179
+			define('DOMPDF_FONT_DIR', EVENT_ESPRESSO_UPLOAD_DIR . 'fonts' . DS);
180
+		}
181
+		//ajax constants
182
+		define(
183
+				'EE_FRONT_AJAX',
184
+				isset($_REQUEST['ee_front_ajax']) || isset($_REQUEST['data']['ee_front_ajax']) ? true : false
185
+		);
186
+		define(
187
+				'EE_ADMIN_AJAX',
188
+				isset($_REQUEST['ee_admin_ajax']) || isset($_REQUEST['data']['ee_admin_ajax']) ? true : false
189
+		);
190
+		//just a handy constant occasionally needed for finding values representing infinity in the DB
191
+		//you're better to use this than its straight value (currently -1) in case you ever
192
+		//want to change its default value! or find when -1 means infinity
193
+		define('EE_INF_IN_DB', -1);
194
+		define('EE_INF', INF > (float)PHP_INT_MAX ? INF : PHP_INT_MAX);
195
+		define('EE_DEBUG', false);
196
+		// for older WP versions
197
+		if ( ! defined('MONTH_IN_SECONDS')) {
198
+			define('MONTH_IN_SECONDS', DAY_IN_SECONDS * 30);
199
+		}
200
+		/**
201
+		 *    espresso_plugin_activation
202
+		 *    adds a wp-option to indicate that EE has been activated via the WP admin plugins page
203
+		 */
204
+		function espresso_plugin_activation()
205
+		{
206
+			update_option('ee_espresso_activation', true);
207
+		}
208 208
 
209
-        register_activation_hook(EVENT_ESPRESSO_MAIN_FILE, 'espresso_plugin_activation');
210
-        /**
211
-         *    espresso_load_error_handling
212
-         *    this function loads EE's class for handling exceptions and errors
213
-         */
214
-        function espresso_load_error_handling()
215
-        {
216
-            // load debugging tools
217
-            if (WP_DEBUG === true && is_readable(EE_HELPERS . 'EEH_Debug_Tools.helper.php')) {
218
-                require_once(EE_HELPERS . 'EEH_Debug_Tools.helper.php');
219
-                EEH_Debug_Tools::instance();
220
-            }
221
-            // load error handling
222
-            if (is_readable(EE_CORE . 'EE_Error.core.php')) {
223
-                require_once(EE_CORE . 'EE_Error.core.php');
224
-            } else {
225
-                wp_die(esc_html__('The EE_Error core class could not be loaded.', 'event_espresso'));
226
-            }
227
-        }
209
+		register_activation_hook(EVENT_ESPRESSO_MAIN_FILE, 'espresso_plugin_activation');
210
+		/**
211
+		 *    espresso_load_error_handling
212
+		 *    this function loads EE's class for handling exceptions and errors
213
+		 */
214
+		function espresso_load_error_handling()
215
+		{
216
+			// load debugging tools
217
+			if (WP_DEBUG === true && is_readable(EE_HELPERS . 'EEH_Debug_Tools.helper.php')) {
218
+				require_once(EE_HELPERS . 'EEH_Debug_Tools.helper.php');
219
+				EEH_Debug_Tools::instance();
220
+			}
221
+			// load error handling
222
+			if (is_readable(EE_CORE . 'EE_Error.core.php')) {
223
+				require_once(EE_CORE . 'EE_Error.core.php');
224
+			} else {
225
+				wp_die(esc_html__('The EE_Error core class could not be loaded.', 'event_espresso'));
226
+			}
227
+		}
228 228
 
229
-        /**
230
-         *    espresso_load_required
231
-         *    given a class name and path, this function will load that file or throw an exception
232
-         *
233
-         * @param    string $classname
234
-         * @param    string $full_path_to_file
235
-         * @throws    EE_Error
236
-         */
237
-        function espresso_load_required($classname, $full_path_to_file)
238
-        {
239
-            static $error_handling_loaded = false;
240
-            if ( ! $error_handling_loaded) {
241
-                espresso_load_error_handling();
242
-                $error_handling_loaded = true;
243
-            }
244
-            if (is_readable($full_path_to_file)) {
245
-                require_once($full_path_to_file);
246
-            } else {
247
-                throw new EE_Error (
248
-                        sprintf(
249
-                                esc_html__(
250
-                                        'The %s class file could not be located or is not readable due to file permissions.',
251
-                                        'event_espresso'
252
-                                ),
253
-                                $classname
254
-                        )
255
-                );
256
-            }
257
-        }
229
+		/**
230
+		 *    espresso_load_required
231
+		 *    given a class name and path, this function will load that file or throw an exception
232
+		 *
233
+		 * @param    string $classname
234
+		 * @param    string $full_path_to_file
235
+		 * @throws    EE_Error
236
+		 */
237
+		function espresso_load_required($classname, $full_path_to_file)
238
+		{
239
+			static $error_handling_loaded = false;
240
+			if ( ! $error_handling_loaded) {
241
+				espresso_load_error_handling();
242
+				$error_handling_loaded = true;
243
+			}
244
+			if (is_readable($full_path_to_file)) {
245
+				require_once($full_path_to_file);
246
+			} else {
247
+				throw new EE_Error (
248
+						sprintf(
249
+								esc_html__(
250
+										'The %s class file could not be located or is not readable due to file permissions.',
251
+										'event_espresso'
252
+								),
253
+								$classname
254
+						)
255
+				);
256
+			}
257
+		}
258 258
 
259
-        espresso_load_required('EEH_Base', EE_CORE . 'helpers' . DS . 'EEH_Base.helper.php');
260
-        espresso_load_required('EEH_File', EE_CORE . 'helpers' . DS . 'EEH_File.helper.php');
261
-        espresso_load_required('EE_Bootstrap', EE_CORE . 'EE_Bootstrap.core.php');
262
-        new EE_Bootstrap();
263
-    }
259
+		espresso_load_required('EEH_Base', EE_CORE . 'helpers' . DS . 'EEH_Base.helper.php');
260
+		espresso_load_required('EEH_File', EE_CORE . 'helpers' . DS . 'EEH_File.helper.php');
261
+		espresso_load_required('EE_Bootstrap', EE_CORE . 'EE_Bootstrap.core.php');
262
+		new EE_Bootstrap();
263
+	}
264 264
 }
265 265
 if ( ! function_exists('espresso_deactivate_plugin')) {
266
-    /**
267
-     *    deactivate_plugin
268
-     * usage:  espresso_deactivate_plugin( plugin_basename( __FILE__ ));
269
-     *
270
-     * @access public
271
-     * @param string $plugin_basename - the results of plugin_basename( __FILE__ ) for the plugin's main file
272
-     * @return    void
273
-     */
274
-    function espresso_deactivate_plugin($plugin_basename = '')
275
-    {
276
-        if ( ! function_exists('deactivate_plugins')) {
277
-            require_once(ABSPATH . 'wp-admin/includes/plugin.php');
278
-        }
279
-        unset($_GET['activate'], $_REQUEST['activate']);
280
-        deactivate_plugins($plugin_basename);
281
-    }
266
+	/**
267
+	 *    deactivate_plugin
268
+	 * usage:  espresso_deactivate_plugin( plugin_basename( __FILE__ ));
269
+	 *
270
+	 * @access public
271
+	 * @param string $plugin_basename - the results of plugin_basename( __FILE__ ) for the plugin's main file
272
+	 * @return    void
273
+	 */
274
+	function espresso_deactivate_plugin($plugin_basename = '')
275
+	{
276
+		if ( ! function_exists('deactivate_plugins')) {
277
+			require_once(ABSPATH . 'wp-admin/includes/plugin.php');
278
+		}
279
+		unset($_GET['activate'], $_REQUEST['activate']);
280
+		deactivate_plugins($plugin_basename);
281
+	}
282 282
 }
283 283
\ No newline at end of file
Please login to merge, or discard this patch.
core/services/cache/BasicCacheManager.php 1 patch
Indentation   +111 added lines, -111 removed lines patch added patch discarded remove patch
@@ -18,117 +18,117 @@
 block discarded – undo
18 18
 class BasicCacheManager implements CacheManagerInterface
19 19
 {
20 20
 
21
-    /**
22
-     * @type string
23
-     */
24
-    const CACHE_PREFIX = 'ee_cache_';
25
-
26
-    /**
27
-     * set to true to monitor when content is being served from cache or not
28
-     *
29
-     * @type boolean
30
-     */
31
-    const DEBUG = false;
32
-
33
-    /**
34
-     * @var CacheStorageInterface $cache_storage
35
-     */
36
-    private $cache_storage;
37
-
38
-
39
-
40
-    /**
41
-     * BasicCacheManager constructor.
42
-     *
43
-     * @param CacheStorageInterface $cache_storage [required]
44
-     */
45
-    public function __construct(CacheStorageInterface $cache_storage)
46
-    {
47
-        $this->cache_storage = $cache_storage;
48
-    }
49
-
50
-
51
-
52
-    /**
53
-     * returns a string that will be prepended to all cache identifiers
54
-     *
55
-     * @return string
56
-     */
57
-    public function cachePrefix()
58
-    {
59
-        return BasicCacheManager::CACHE_PREFIX;
60
-    }
61
-
62
-
63
-
64
-    /**
65
-     * @param string  $id_prefix [required] Prepended to all cache IDs. Can be helpful in finding specific cache types.
66
-     *                           May also be helpful to include an additional specific identifier,
67
-     *                           such as a post ID as part of the $id_prefix so that individual caches
68
-     *                           can be found and/or cleared. ex: "venue-28", or "shortcode-156".
69
-     *                           BasicCacheManager::CACHE_PREFIX will also be prepended to the cache id.
70
-     * @param string  $cache_id  [required] Additional identifying details that make this cache unique.
71
-     *                           It is advisable to use some of the actual data
72
-     *                           that is used to generate the content being cached,
73
-     *                           in order to guarantee that the cache id is unique for that content.
74
-     *                           The cache id will be md5'd before usage to make it more db friendly,
75
-     *                           and the entire cache id string will be truncated to 190 characters.
76
-     * @param Closure $callback  [required] since the point of caching is to avoid generating content when not
77
-     *                           necessary,
78
-     *                           we wrap our content creation in a Closure so that it is not executed until needed.
79
-     * @param int     $expiration
80
-     * @return Closure|mixed
81
-     */
82
-    public function get($id_prefix, $cache_id, Closure $callback, $expiration = HOUR_IN_SECONDS)
83
-    {
84
-        $content = '';
85
-        // how long should we cache this content for? 0 means no caching.
86
-        $expiration = absint(
87
-            apply_filters(
88
-                'FHEE__CacheManager__get__cache_expiration',
89
-                $expiration,
90
-                $id_prefix,
91
-                $cache_id
92
-            )
93
-        );
94
-        $cache_id = substr($this->cachePrefix() . $id_prefix . '-' . md5($cache_id), 0, 182);
95
-        // is caching enabled for this content ?
96
-        if ($expiration) {
97
-            $content = $this->cache_storage->get($cache_id);
98
-        }
99
-        // any existing content ?
100
-        if (empty($content)) {
101
-            // nope! let's generate some new stuff
102
-            $content = $callback();
103
-            // save the new content if caching is enabled
104
-            if ($expiration) {
105
-                if (BasicCacheManager::DEBUG) {
106
-                    \EEH_Debug_Tools::printr($cache_id, 'REFRESH CACHE', __FILE__, __LINE__);
107
-                }
108
-                $this->cache_storage->add($cache_id, $content, $expiration);
109
-            }
110
-        } else {
111
-            if (BasicCacheManager::DEBUG) {
112
-                \EEH_Debug_Tools::printr($cache_id, 'CACHED CONTENT', __FILE__, __LINE__);
113
-            }
114
-        }
115
-        return $content;
116
-    }
117
-
118
-
119
-
120
-    /**
121
-     * @param array|string $cache_id [required] Could be an ID prefix affecting many caches
122
-     *                               or a specific ID targeting a single cache item
123
-     * @return void
124
-     */
125
-    public function clear($cache_id)
126
-    {
127
-        // ensure incoming arg is in an array
128
-        $cache_id = is_array($cache_id) ? $cache_id : array($cache_id);
129
-        // delete corresponding transients for the supplied id prefix
130
-        $this->cache_storage->deleteMany($cache_id);
131
-    }
21
+	/**
22
+	 * @type string
23
+	 */
24
+	const CACHE_PREFIX = 'ee_cache_';
25
+
26
+	/**
27
+	 * set to true to monitor when content is being served from cache or not
28
+	 *
29
+	 * @type boolean
30
+	 */
31
+	const DEBUG = false;
32
+
33
+	/**
34
+	 * @var CacheStorageInterface $cache_storage
35
+	 */
36
+	private $cache_storage;
37
+
38
+
39
+
40
+	/**
41
+	 * BasicCacheManager constructor.
42
+	 *
43
+	 * @param CacheStorageInterface $cache_storage [required]
44
+	 */
45
+	public function __construct(CacheStorageInterface $cache_storage)
46
+	{
47
+		$this->cache_storage = $cache_storage;
48
+	}
49
+
50
+
51
+
52
+	/**
53
+	 * returns a string that will be prepended to all cache identifiers
54
+	 *
55
+	 * @return string
56
+	 */
57
+	public function cachePrefix()
58
+	{
59
+		return BasicCacheManager::CACHE_PREFIX;
60
+	}
61
+
62
+
63
+
64
+	/**
65
+	 * @param string  $id_prefix [required] Prepended to all cache IDs. Can be helpful in finding specific cache types.
66
+	 *                           May also be helpful to include an additional specific identifier,
67
+	 *                           such as a post ID as part of the $id_prefix so that individual caches
68
+	 *                           can be found and/or cleared. ex: "venue-28", or "shortcode-156".
69
+	 *                           BasicCacheManager::CACHE_PREFIX will also be prepended to the cache id.
70
+	 * @param string  $cache_id  [required] Additional identifying details that make this cache unique.
71
+	 *                           It is advisable to use some of the actual data
72
+	 *                           that is used to generate the content being cached,
73
+	 *                           in order to guarantee that the cache id is unique for that content.
74
+	 *                           The cache id will be md5'd before usage to make it more db friendly,
75
+	 *                           and the entire cache id string will be truncated to 190 characters.
76
+	 * @param Closure $callback  [required] since the point of caching is to avoid generating content when not
77
+	 *                           necessary,
78
+	 *                           we wrap our content creation in a Closure so that it is not executed until needed.
79
+	 * @param int     $expiration
80
+	 * @return Closure|mixed
81
+	 */
82
+	public function get($id_prefix, $cache_id, Closure $callback, $expiration = HOUR_IN_SECONDS)
83
+	{
84
+		$content = '';
85
+		// how long should we cache this content for? 0 means no caching.
86
+		$expiration = absint(
87
+			apply_filters(
88
+				'FHEE__CacheManager__get__cache_expiration',
89
+				$expiration,
90
+				$id_prefix,
91
+				$cache_id
92
+			)
93
+		);
94
+		$cache_id = substr($this->cachePrefix() . $id_prefix . '-' . md5($cache_id), 0, 182);
95
+		// is caching enabled for this content ?
96
+		if ($expiration) {
97
+			$content = $this->cache_storage->get($cache_id);
98
+		}
99
+		// any existing content ?
100
+		if (empty($content)) {
101
+			// nope! let's generate some new stuff
102
+			$content = $callback();
103
+			// save the new content if caching is enabled
104
+			if ($expiration) {
105
+				if (BasicCacheManager::DEBUG) {
106
+					\EEH_Debug_Tools::printr($cache_id, 'REFRESH CACHE', __FILE__, __LINE__);
107
+				}
108
+				$this->cache_storage->add($cache_id, $content, $expiration);
109
+			}
110
+		} else {
111
+			if (BasicCacheManager::DEBUG) {
112
+				\EEH_Debug_Tools::printr($cache_id, 'CACHED CONTENT', __FILE__, __LINE__);
113
+			}
114
+		}
115
+		return $content;
116
+	}
117
+
118
+
119
+
120
+	/**
121
+	 * @param array|string $cache_id [required] Could be an ID prefix affecting many caches
122
+	 *                               or a specific ID targeting a single cache item
123
+	 * @return void
124
+	 */
125
+	public function clear($cache_id)
126
+	{
127
+		// ensure incoming arg is in an array
128
+		$cache_id = is_array($cache_id) ? $cache_id : array($cache_id);
129
+		// delete corresponding transients for the supplied id prefix
130
+		$this->cache_storage->deleteMany($cache_id);
131
+	}
132 132
 
133 133
 
134 134
 
Please login to merge, or discard this patch.