Completed
Branch Gutenberg/master (eed722)
by
unknown
78:41 queued 66:19
created
core/libraries/plugin_api/EE_Register_Privacy_Policy.lib.php 2 patches
Indentation   +39 added lines, -39 removed lines patch added patch discarded remove patch
@@ -13,55 +13,55 @@
 block discarded – undo
13 13
 class EE_Register_Privacy_Policy implements EEI_Plugin_API
14 14
 {
15 15
 
16
-    /**
17
-     * FQCN for all privacy policy generators
18
-     *
19
-     * @var array keys are plugin_ids, and values are an array of FQCNs or FQCNs
20
-     */
21
-    protected static $privacy_policies = array();
16
+	/**
17
+	 * FQCN for all privacy policy generators
18
+	 *
19
+	 * @var array keys are plugin_ids, and values are an array of FQCNs or FQCNs
20
+	 */
21
+	protected static $privacy_policies = array();
22 22
 
23 23
 
24
-    /*
24
+	/*
25 25
      * @param string $plugin_id
26 26
      * @param array $FQNSs can be the fully qualified namespaces each containing only privacy policies,
27 27
      *              OR fully qualified class names of privacy policies
28 28
      */
29
-    public static function register($plugin_id = null, $FQCNs = array())
30
-    {
31
-        self::$privacy_policies[ $plugin_id ] = $FQCNs;
32
-        // add to list of modules to be registered
33
-        add_filter(
34
-            'FHEE__EventEspresso_core_services_privacy_policy_PrivacyPolicyManager__privacy_policies',
35
-            array('EE_Register_Privacy_Policy', 'addPrivacyPolicies')
36
-        );
37
-    }
29
+	public static function register($plugin_id = null, $FQCNs = array())
30
+	{
31
+		self::$privacy_policies[ $plugin_id ] = $FQCNs;
32
+		// add to list of modules to be registered
33
+		add_filter(
34
+			'FHEE__EventEspresso_core_services_privacy_policy_PrivacyPolicyManager__privacy_policies',
35
+			array('EE_Register_Privacy_Policy', 'addPrivacyPolicies')
36
+		);
37
+	}
38 38
 
39 39
 
40
-    /**
41
-     * @param null $ID
42
-     */
43
-    public static function deregister($ID = null)
44
-    {
45
-        unset(self::$privacy_policies[ $ID ]);
46
-    }
40
+	/**
41
+	 * @param null $ID
42
+	 */
43
+	public static function deregister($ID = null)
44
+	{
45
+		unset(self::$privacy_policies[ $ID ]);
46
+	}
47 47
 
48 48
 
49
-    /**
50
-     * Adds our privacy policiy generators registered by add-ons
51
-     *
52
-     * @param string[] $privacy_policies
53
-     * @return string[]
54
-     */
55
-    public static function addPrivacyPolicies(array $privacy_policies)
56
-    {
57
-        foreach (self::$privacy_policies as $privacy_policies_per_addon) {
58
-            $privacy_policies = array_merge(
59
-                $privacy_policies,
60
-                $privacy_policies_per_addon
61
-            );
62
-        }
63
-        return $privacy_policies;
64
-    }
49
+	/**
50
+	 * Adds our privacy policiy generators registered by add-ons
51
+	 *
52
+	 * @param string[] $privacy_policies
53
+	 * @return string[]
54
+	 */
55
+	public static function addPrivacyPolicies(array $privacy_policies)
56
+	{
57
+		foreach (self::$privacy_policies as $privacy_policies_per_addon) {
58
+			$privacy_policies = array_merge(
59
+				$privacy_policies,
60
+				$privacy_policies_per_addon
61
+			);
62
+		}
63
+		return $privacy_policies;
64
+	}
65 65
 }
66 66
 // End of file EE_Register_Privacy_Policy.lib.php
67 67
 // Location: ${NAMESPACE}/EE_Register_Privacy_Policy.lib.php
Please login to merge, or discard this patch.
Spacing   +2 added lines, -2 removed lines patch added patch discarded remove patch
@@ -28,7 +28,7 @@  discard block
 block discarded – undo
28 28
      */
29 29
     public static function register($plugin_id = null, $FQCNs = array())
30 30
     {
31
-        self::$privacy_policies[ $plugin_id ] = $FQCNs;
31
+        self::$privacy_policies[$plugin_id] = $FQCNs;
32 32
         // add to list of modules to be registered
33 33
         add_filter(
34 34
             'FHEE__EventEspresso_core_services_privacy_policy_PrivacyPolicyManager__privacy_policies',
@@ -42,7 +42,7 @@  discard block
 block discarded – undo
42 42
      */
43 43
     public static function deregister($ID = null)
44 44
     {
45
-        unset(self::$privacy_policies[ $ID ]);
45
+        unset(self::$privacy_policies[$ID]);
46 46
     }
47 47
 
48 48
 
Please login to merge, or discard this patch.
core/domain/services/admin/privacy/policy/privacy_policy.template.php 2 patches
Indentation   +76 added lines, -76 removed lines patch added patch discarded remove patch
@@ -7,10 +7,10 @@  discard block
 block discarded – undo
7 7
 ?>
8 8
 <h2><?php esc_html_e('Event Registration Data', 'event_espresso'); ?></h2>
9 9
 <p><?php
10
-    esc_html_e(
11
-        'We collect information about you during event registration. This information may include but is not limited to:',
12
-        'event_espresso'
13
-    ); ?></p>
10
+	esc_html_e(
11
+		'We collect information about you during event registration. This information may include but is not limited to:',
12
+		'event_espresso'
13
+	); ?></p>
14 14
 <ul>
15 15
     <li><?php esc_html_e('Your names', 'event_espresso'); ?></li>
16 16
     <li><?php esc_html_e('Billing address', 'event_espresso'); ?></li>
@@ -19,10 +19,10 @@  discard block
 block discarded – undo
19 19
     <li><?php esc_html_e('Phone number', 'event_espresso'); ?></li>
20 20
     <li><?php esc_html_e('Location and traffic data (including IP address and browser type)', 'event_espresso'); ?></li>
21 21
     <li><?php
22
-        esc_html_e(
23
-            'Any other details that might be requested from you for the purpose of processing your registration or ticket purchase',
24
-            'event_espresso'
25
-        ); ?></li>
22
+		esc_html_e(
23
+			'Any other details that might be requested from you for the purpose of processing your registration or ticket purchase',
24
+			'event_espresso'
25
+		); ?></li>
26 26
 </ul>
27 27
 
28 28
 <p><?php esc_html_e('Handling this data also allows us to:', 'event_espresso'); ?></p>
@@ -30,103 +30,103 @@  discard block
 block discarded – undo
30 30
     <li><?php esc_html_e('Send you important account/purchase/service information.', 'event_espresso'); ?></li>
31 31
     <li><?php esc_html_e('Respond to your queries, refund requests, or complaints.', 'event_espresso'); ?></li>
32 32
     <li><?php
33
-        esc_html_e(
34
-            'Process payments and prevent fraudulent transactions. We do this on the basis of our legitimate business interests.',
35
-            'event_espresso'
36
-        ); ?></li>
33
+		esc_html_e(
34
+			'Process payments and prevent fraudulent transactions. We do this on the basis of our legitimate business interests.',
35
+			'event_espresso'
36
+		); ?></li>
37 37
     <li><?php
38
-        esc_html_e(
39
-            'Set up and administer your account, provide technical and customer support, and to verify your identity.',
40
-            'event_espresso'
41
-        ); ?></li>
38
+		esc_html_e(
39
+			'Set up and administer your account, provide technical and customer support, and to verify your identity.',
40
+			'event_espresso'
41
+		); ?></li>
42 42
 </ul>
43 43
 
44 44
 <?php if (! empty($active_onsite_payment_methods) || ! empty($active_offsite_payment_methods)) { ?>
45 45
     <h2><?php esc_html_e('Billing Information', 'event_espresso'); ?> </h2>
46 46
     <?php
47 47
 // if onsite or offsite payment methods are active
48
-    if (! empty($active_onsite_payment_methods)) { ?>
48
+	if (! empty($active_onsite_payment_methods)) { ?>
49 49
         <p><?php
50
-            esc_html_e(
51
-                'In order to process payments, we collect billing information on-site. Sensitive billing information is not stored on our server, but may be handled while in-transit to the payment processing server.',
52
-                'event_espresso'
53
-            ); ?></p>
50
+			esc_html_e(
51
+				'In order to process payments, we collect billing information on-site. Sensitive billing information is not stored on our server, but may be handled while in-transit to the payment processing server.',
52
+				'event_espresso'
53
+			); ?></p>
54 54
         <p><?php
55
-            printf(
56
-                esc_html_x(
57
-                    'Please see the privacy policy of %1$s.',
58
-                    'Please see the privacy policy of PayPal Pro',
59
-                    'event_espresso'
60
-                ),
61
-                implode(
62
-                    ', ',
63
-                    array_merge(
64
-                        $active_onsite_payment_methods,
65
-                        $active_offsite_payment_methods
66
-                    )
67
-                )
68
-            ); ?></p>
55
+			printf(
56
+				esc_html_x(
57
+					'Please see the privacy policy of %1$s.',
58
+					'Please see the privacy policy of PayPal Pro',
59
+					'event_espresso'
60
+				),
61
+				implode(
62
+					', ',
63
+					array_merge(
64
+						$active_onsite_payment_methods,
65
+						$active_offsite_payment_methods
66
+					)
67
+				)
68
+			); ?></p>
69 69
         <p><?php
70
-            esc_html_e(
71
-                'Masked billing information may be stored on our servers (eg only the last 4 digits of credit card numbers are stored: **** **** **** 1234).',
72
-                'event_espresso'
73
-            ); ?></p>
70
+			esc_html_e(
71
+				'Masked billing information may be stored on our servers (eg only the last 4 digits of credit card numbers are stored: **** **** **** 1234).',
72
+				'event_espresso'
73
+			); ?></p>
74 74
     <?php } // IF OFFSITE PAYMENT METHOD ACTIVE
75
-    elseif (! empty($active_onsite_payment_methods)) { ?>
75
+	elseif (! empty($active_onsite_payment_methods)) { ?>
76 76
         <p><?php
77
-            printf(
78
-                esc_html_x(
79
-                    'Billing information is sent directly to the payment processor, and is not handled by our servers. Please see the privacy policy of %1$s.',
80
-                    'Billing information is sent directly to the payment processor, and is not handled by our servers. Please see the privacy policy of PayPal Pro.',
81
-                    'event_espresso'
82
-                ),
83
-                implode(', ', $active_offsite_payment_methods)
84
-            ); ?></p>
77
+			printf(
78
+				esc_html_x(
79
+					'Billing information is sent directly to the payment processor, and is not handled by our servers. Please see the privacy policy of %1$s.',
80
+					'Billing information is sent directly to the payment processor, and is not handled by our servers. Please see the privacy policy of PayPal Pro.',
81
+					'event_espresso'
82
+				),
83
+				implode(', ', $active_offsite_payment_methods)
84
+			); ?></p>
85 85
     <?php } ?>
86 86
     <h2><?php esc_html_e('Payment Logging', 'event_espresso'); ?></h2>
87 87
     <p><?php
88
-        esc_html_e(
89
-            'Site administrators may keep a log of communications with the payment processors in order to verify payments are being processed correctly. These logs are automatically deleted after a week.',
90
-            'event_espresso'
91
-        ); ?></p>
88
+		esc_html_e(
89
+			'Site administrators may keep a log of communications with the payment processors in order to verify payments are being processed correctly. These logs are automatically deleted after a week.',
90
+			'event_espresso'
91
+		); ?></p>
92 92
 <?php } ?>
93 93
 
94 94
 <h2><?php esc_html_e('Event Registration Cookies', 'event_espresso'); ?></h2>
95 95
 <p><?php
96
-    printf(
97
-        esc_html_x(
98
-            'When you begin registering for an event and select a ticket quantity, a cookie will be used to track your registration. This cookie lasts %1$s.',
99
-            'When you begin registering for an event and select a ticket quantity, a cookie will be used to track your registration. This cookie lasts 2 hours.',
100
-            'event_espresso'
101
-        ),
102
-        $session_lifespan
103
-    ); ?></p>
96
+	printf(
97
+		esc_html_x(
98
+			'When you begin registering for an event and select a ticket quantity, a cookie will be used to track your registration. This cookie lasts %1$s.',
99
+			'When you begin registering for an event and select a ticket quantity, a cookie will be used to track your registration. This cookie lasts 2 hours.',
100
+			'event_espresso'
101
+		),
102
+		$session_lifespan
103
+	); ?></p>
104 104
 
105 105
 <h2><?php esc_html_e('Email History Data', 'event_espresso'); ?></h2>
106 106
 <p><?php
107
-    esc_html_e(
108
-        'We keep a record of the emails sent to you. This is to ensure communication is successfully sent and its information is accurate.',
109
-        'event_espresso'
110
-    ); ?></p>
107
+	esc_html_e(
108
+		'We keep a record of the emails sent to you. This is to ensure communication is successfully sent and its information is accurate.',
109
+		'event_espresso'
110
+	); ?></p>
111 111
 
112 112
 <h2><?php esc_html_e('Event Check-In Record', 'event_espresso'); ?></h2>
113 113
 <p><?php
114
-    esc_html_e(
115
-        'When you attend an event, an event manager may record the time you check in or out of the event.',
116
-        'event_espresso'
117
-    ); ?></p>
114
+	esc_html_e(
115
+		'When you attend an event, an event manager may record the time you check in or out of the event.',
116
+		'event_espresso'
117
+	); ?></p>
118 118
 
119 119
 <h2><?php esc_html_e('Event Registration Data Retention', 'event_espresso'); ?></h2>
120 120
 <p><?php
121
-    esc_html_e(
122
-        'Personal data is stored at least until the date of the event, and may be kept indefinitely in case of future registrations.',
123
-        'event_espresso'
124
-    ); ?></p>
121
+	esc_html_e(
122
+		'Personal data is stored at least until the date of the event, and may be kept indefinitely in case of future registrations.',
123
+		'event_espresso'
124
+	); ?></p>
125 125
 
126 126
 <h2><?php esc_html_e('Event Registration Data Erasure and Export', 'event_espresso'); ?></h2>
127 127
 <p><?php
128
-    esc_html_e(
129
-        'You have the right to request your personal data be sent to you electronically, and the right to request your registration data be erased after the event. To do so, please contact the event manager or site administrator.',
130
-        'event_espresso'
131
-    ); ?></p>
128
+	esc_html_e(
129
+		'You have the right to request your personal data be sent to you electronically, and the right to request your registration data be erased after the event. To do so, please contact the event manager or site administrator.',
130
+		'event_espresso'
131
+	); ?></p>
132 132
 
Please login to merge, or discard this patch.
Spacing   +3 added lines, -3 removed lines patch added patch discarded remove patch
@@ -41,11 +41,11 @@  discard block
 block discarded – undo
41 41
         ); ?></li>
42 42
 </ul>
43 43
 
44
-<?php if (! empty($active_onsite_payment_methods) || ! empty($active_offsite_payment_methods)) { ?>
44
+<?php if ( ! empty($active_onsite_payment_methods) || ! empty($active_offsite_payment_methods)) { ?>
45 45
     <h2><?php esc_html_e('Billing Information', 'event_espresso'); ?> </h2>
46 46
     <?php
47 47
 // if onsite or offsite payment methods are active
48
-    if (! empty($active_onsite_payment_methods)) { ?>
48
+    if ( ! empty($active_onsite_payment_methods)) { ?>
49 49
         <p><?php
50 50
             esc_html_e(
51 51
                 'In order to process payments, we collect billing information on-site. Sensitive billing information is not stored on our server, but may be handled while in-transit to the payment processing server.',
@@ -72,7 +72,7 @@  discard block
 block discarded – undo
72 72
                 'event_espresso'
73 73
             ); ?></p>
74 74
     <?php } // IF OFFSITE PAYMENT METHOD ACTIVE
75
-    elseif (! empty($active_onsite_payment_methods)) { ?>
75
+    elseif ( ! empty($active_onsite_payment_methods)) { ?>
76 76
         <p><?php
77 77
             printf(
78 78
                 esc_html_x(
Please login to merge, or discard this patch.
core/services/privacy/policy/PrivacyPolicyManager.php 3 patches
Doc Comments   -1 removed lines patch added patch discarded remove patch
@@ -33,7 +33,6 @@
 block discarded – undo
33 33
     /**
34 34
      * For all the registered `PrivacyPolicyInterface`s, add their privacy policy content
35 35
      *
36
-     * @param WP_Post $post
37 36
      */
38 37
     public function addPrivacyPolicy()
39 38
     {
Please login to merge, or discard this patch.
Indentation   +54 added lines, -54 removed lines patch added patch discarded remove patch
@@ -24,64 +24,64 @@
 block discarded – undo
24 24
 class PrivacyPolicyManager
25 25
 {
26 26
 
27
-    public function __construct()
28
-    {
29
-        add_action('admin_init', array($this, 'addPrivacyPolicy'), 9);
30
-    }
27
+	public function __construct()
28
+	{
29
+		add_action('admin_init', array($this, 'addPrivacyPolicy'), 9);
30
+	}
31 31
 
32 32
 
33
-    /**
34
-     * For all the registered `PrivacyPolicyInterface`s, add their privacy policy content
35
-     *
36
-     * @param WP_Post $post
37
-     */
38
-    public function addPrivacyPolicy()
39
-    {
40
-        $policy_page_id = (int) get_option('wp_page_for_privacy_policy');
41
-        if (! $policy_page_id) {
42
-            return;
43
-        }
44
-        // load all the privacy policy stuff
45
-        // add post policy text
46
-        foreach ($this->loadPrivacyPolicyCollection() as $privacy_policy) {
47
-            wp_add_privacy_policy_content($privacy_policy->getName(), $privacy_policy->getContent());
48
-        }
49
-    }
33
+	/**
34
+	 * For all the registered `PrivacyPolicyInterface`s, add their privacy policy content
35
+	 *
36
+	 * @param WP_Post $post
37
+	 */
38
+	public function addPrivacyPolicy()
39
+	{
40
+		$policy_page_id = (int) get_option('wp_page_for_privacy_policy');
41
+		if (! $policy_page_id) {
42
+			return;
43
+		}
44
+		// load all the privacy policy stuff
45
+		// add post policy text
46
+		foreach ($this->loadPrivacyPolicyCollection() as $privacy_policy) {
47
+			wp_add_privacy_policy_content($privacy_policy->getName(), $privacy_policy->getContent());
48
+		}
49
+	}
50 50
 
51 51
 
52
-    /**
53
-     * @return CollectionInterface|PrivacyPolicyInterface[]
54
-     * @throws InvalidIdentifierException
55
-     * @throws InvalidInterfaceException
56
-     * @throws InvalidFilePathException
57
-     * @throws InvalidEntityException
58
-     * @throws InvalidDataTypeException
59
-     * @throws InvalidClassException
60
-     */
61
-    protected function loadPrivacyPolicyCollection()
62
-    {
63
-        $loader = new CollectionLoader(
64
-            new CollectionDetails(
65
-                // collection name
66
-                'privacy_policies',
67
-                // collection interface
68
-                'EventEspresso\core\services\privacy\policy\PrivacyPolicyInterface',
69
-                // FQCNs for classes to add (all classes within that namespace will be loaded)
70
-                apply_filters(
71
-                    'FHEE__EventEspresso_core_services_privacy_policy_PrivacyPolicyManager__privacy_policies',
72
-                    array('EventEspresso\core\domain\services\admin\privacy\policy\PrivacyPolicy')
73
-                ),
74
-                // filepaths to classes to add
75
-                array(),
76
-                // file mask to use if parsing folder for files to add
77
-                '',
78
-                // what to use as identifier for collection entities
79
-                // using CLASS NAME prevents duplicates (works like a singleton)
80
-                CollectionDetails::ID_CLASS_NAME
81
-            )
82
-        );
83
-        return $loader->getCollection();
84
-    }
52
+	/**
53
+	 * @return CollectionInterface|PrivacyPolicyInterface[]
54
+	 * @throws InvalidIdentifierException
55
+	 * @throws InvalidInterfaceException
56
+	 * @throws InvalidFilePathException
57
+	 * @throws InvalidEntityException
58
+	 * @throws InvalidDataTypeException
59
+	 * @throws InvalidClassException
60
+	 */
61
+	protected function loadPrivacyPolicyCollection()
62
+	{
63
+		$loader = new CollectionLoader(
64
+			new CollectionDetails(
65
+				// collection name
66
+				'privacy_policies',
67
+				// collection interface
68
+				'EventEspresso\core\services\privacy\policy\PrivacyPolicyInterface',
69
+				// FQCNs for classes to add (all classes within that namespace will be loaded)
70
+				apply_filters(
71
+					'FHEE__EventEspresso_core_services_privacy_policy_PrivacyPolicyManager__privacy_policies',
72
+					array('EventEspresso\core\domain\services\admin\privacy\policy\PrivacyPolicy')
73
+				),
74
+				// filepaths to classes to add
75
+				array(),
76
+				// file mask to use if parsing folder for files to add
77
+				'',
78
+				// what to use as identifier for collection entities
79
+				// using CLASS NAME prevents duplicates (works like a singleton)
80
+				CollectionDetails::ID_CLASS_NAME
81
+			)
82
+		);
83
+		return $loader->getCollection();
84
+	}
85 85
 }
86 86
 // End of file PrivacyPolicyManager.php
87 87
 // Location: EventEspresso\core\domain\services\admin/PrivacyPolicyManager.php
Please login to merge, or discard this patch.
Spacing   +1 added lines, -1 removed lines patch added patch discarded remove patch
@@ -38,7 +38,7 @@
 block discarded – undo
38 38
     public function addPrivacyPolicy()
39 39
     {
40 40
         $policy_page_id = (int) get_option('wp_page_for_privacy_policy');
41
-        if (! $policy_page_id) {
41
+        if ( ! $policy_page_id) {
42 42
             return;
43 43
         }
44 44
         // load all the privacy policy stuff
Please login to merge, or discard this patch.
core/domain/DomainBase.php 2 patches
Indentation   +160 added lines, -160 removed lines patch added patch discarded remove patch
@@ -16,168 +16,168 @@
 block discarded – undo
16 16
 abstract class DomainBase implements DomainInterface
17 17
 {
18 18
 
19
-    /**
20
-     * Equivalent to `__FILE__` for main plugin file.
21
-     *
22
-     * @var FilePath
23
-     */
24
-    private $plugin_file;
25
-
26
-    /**
27
-     * String indicating version for plugin
28
-     *
29
-     * @var string
30
-     */
31
-    private $version;
32
-
33
-    /**
34
-     * @var string $plugin_basename
35
-     */
36
-    private $plugin_basename;
37
-
38
-    /**
39
-     * @var string $plugin_path
40
-     */
41
-    private $plugin_path;
42
-
43
-    /**
44
-     * @var string $plugin_url
45
-     */
46
-    private $plugin_url;
47
-
48
-    /**
49
-     * @var string $asset_namespace
50
-     */
51
-    private $asset_namespace;
52
-
53
-
54
-
55
-    /**
56
-     * Initializes internal properties.
57
-     *
58
-     * @param FilePath $plugin_file
59
-     * @param Version  $version
60
-     */
61
-    public function __construct(FilePath $plugin_file, Version $version)
62
-    {
63
-        $this->plugin_file = $plugin_file;
64
-        $this->version = $version;
65
-        $this->plugin_basename = plugin_basename($this->pluginFile());
66
-        $this->plugin_path = plugin_dir_path($this->pluginFile());
67
-        $this->plugin_url = plugin_dir_url($this->pluginFile());
68
-        $this->setAssetNamespace();
69
-    }
70
-
71
-
72
-    /**
73
-     * @return string
74
-     */
75
-    public function pluginFile()
76
-    {
77
-        return (string) $this->plugin_file;
78
-    }
79
-
80
-
81
-
82
-    /**
83
-     * @return string
84
-     */
85
-    public function pluginBasename()
86
-    {
87
-        return $this->plugin_basename;
88
-    }
89
-
90
-
91
-
92
-    /**
93
-     * @return string
94
-     */
95
-    public function pluginPath()
96
-    {
97
-        return $this->plugin_path;
98
-    }
99
-
100
-
101
-
102
-    /**
103
-     * @return string
104
-     */
105
-    public function pluginUrl()
106
-    {
107
-        return $this->plugin_url;
108
-    }
109
-
110
-
111
-
112
-    /**
113
-     * @return string
114
-     */
115
-    public function version()
116
-    {
117
-        return (string) $this->version;
118
-    }
119
-
120
-
121
-
122
-    /**
123
-     * @return Version
124
-     */
125
-    public function versionValueObject()
126
-    {
127
-        return $this->version;
128
-    }
129
-
130
-
131
-    /**
132
-     * @return string
133
-     */
134
-    public function sourceAssetsPath()
135
-    {
136
-        return $this->pluginPath() . 'assets/src/';
137
-    }
138
-
139
-
140
-    /**
141
-     * @return string
142
-     */
143
-    public function sourceAssetsUrl()
144
-    {
145
-        return $this->pluginUrl() . 'assets/src/';
146
-    }
147
-
148
-
149
-    /**
150
-     * @return string
151
-     */
152
-    public function distributionAssetsPath()
153
-    {
154
-        return $this->pluginPath() . 'assets/dist/';
155
-    }
156
-
157
-
158
-    /**
159
-     * @return string
160
-     */
161
-    public function distributionAssetsUrl()
162
-    {
163
-        return $this->pluginUrl() . 'assets/dist/';
164
-    }
19
+	/**
20
+	 * Equivalent to `__FILE__` for main plugin file.
21
+	 *
22
+	 * @var FilePath
23
+	 */
24
+	private $plugin_file;
25
+
26
+	/**
27
+	 * String indicating version for plugin
28
+	 *
29
+	 * @var string
30
+	 */
31
+	private $version;
32
+
33
+	/**
34
+	 * @var string $plugin_basename
35
+	 */
36
+	private $plugin_basename;
37
+
38
+	/**
39
+	 * @var string $plugin_path
40
+	 */
41
+	private $plugin_path;
42
+
43
+	/**
44
+	 * @var string $plugin_url
45
+	 */
46
+	private $plugin_url;
47
+
48
+	/**
49
+	 * @var string $asset_namespace
50
+	 */
51
+	private $asset_namespace;
52
+
53
+
54
+
55
+	/**
56
+	 * Initializes internal properties.
57
+	 *
58
+	 * @param FilePath $plugin_file
59
+	 * @param Version  $version
60
+	 */
61
+	public function __construct(FilePath $plugin_file, Version $version)
62
+	{
63
+		$this->plugin_file = $plugin_file;
64
+		$this->version = $version;
65
+		$this->plugin_basename = plugin_basename($this->pluginFile());
66
+		$this->plugin_path = plugin_dir_path($this->pluginFile());
67
+		$this->plugin_url = plugin_dir_url($this->pluginFile());
68
+		$this->setAssetNamespace();
69
+	}
70
+
71
+
72
+	/**
73
+	 * @return string
74
+	 */
75
+	public function pluginFile()
76
+	{
77
+		return (string) $this->plugin_file;
78
+	}
79
+
80
+
81
+
82
+	/**
83
+	 * @return string
84
+	 */
85
+	public function pluginBasename()
86
+	{
87
+		return $this->plugin_basename;
88
+	}
89
+
90
+
91
+
92
+	/**
93
+	 * @return string
94
+	 */
95
+	public function pluginPath()
96
+	{
97
+		return $this->plugin_path;
98
+	}
99
+
100
+
101
+
102
+	/**
103
+	 * @return string
104
+	 */
105
+	public function pluginUrl()
106
+	{
107
+		return $this->plugin_url;
108
+	}
109
+
110
+
111
+
112
+	/**
113
+	 * @return string
114
+	 */
115
+	public function version()
116
+	{
117
+		return (string) $this->version;
118
+	}
119
+
120
+
121
+
122
+	/**
123
+	 * @return Version
124
+	 */
125
+	public function versionValueObject()
126
+	{
127
+		return $this->version;
128
+	}
129
+
130
+
131
+	/**
132
+	 * @return string
133
+	 */
134
+	public function sourceAssetsPath()
135
+	{
136
+		return $this->pluginPath() . 'assets/src/';
137
+	}
138
+
139
+
140
+	/**
141
+	 * @return string
142
+	 */
143
+	public function sourceAssetsUrl()
144
+	{
145
+		return $this->pluginUrl() . 'assets/src/';
146
+	}
147
+
148
+
149
+	/**
150
+	 * @return string
151
+	 */
152
+	public function distributionAssetsPath()
153
+	{
154
+		return $this->pluginPath() . 'assets/dist/';
155
+	}
156
+
157
+
158
+	/**
159
+	 * @return string
160
+	 */
161
+	public function distributionAssetsUrl()
162
+	{
163
+		return $this->pluginUrl() . 'assets/dist/';
164
+	}
165 165
 
166 166
 
167
-    /**
168
-     * @return string
169
-     */
170
-    public function assetNamespace()
171
-    {
172
-        return $this->asset_namespace;
173
-    }
167
+	/**
168
+	 * @return string
169
+	 */
170
+	public function assetNamespace()
171
+	{
172
+		return $this->asset_namespace;
173
+	}
174 174
 
175 175
 
176
-    /**
177
-     * @return void
178
-     */
179
-    private function setAssetNamespace()
180
-    {
181
-        $this->asset_namespace = sanitize_key($this->plugin_basename);
182
-    }
176
+	/**
177
+	 * @return void
178
+	 */
179
+	private function setAssetNamespace()
180
+	{
181
+		$this->asset_namespace = sanitize_key($this->plugin_basename);
182
+	}
183 183
 }
Please login to merge, or discard this patch.
Spacing   +4 added lines, -4 removed lines patch added patch discarded remove patch
@@ -133,7 +133,7 @@  discard block
 block discarded – undo
133 133
      */
134 134
     public function sourceAssetsPath()
135 135
     {
136
-        return $this->pluginPath() . 'assets/src/';
136
+        return $this->pluginPath().'assets/src/';
137 137
     }
138 138
 
139 139
 
@@ -142,7 +142,7 @@  discard block
 block discarded – undo
142 142
      */
143 143
     public function sourceAssetsUrl()
144 144
     {
145
-        return $this->pluginUrl() . 'assets/src/';
145
+        return $this->pluginUrl().'assets/src/';
146 146
     }
147 147
 
148 148
 
@@ -151,7 +151,7 @@  discard block
 block discarded – undo
151 151
      */
152 152
     public function distributionAssetsPath()
153 153
     {
154
-        return $this->pluginPath() . 'assets/dist/';
154
+        return $this->pluginPath().'assets/dist/';
155 155
     }
156 156
 
157 157
 
@@ -160,7 +160,7 @@  discard block
 block discarded – undo
160 160
      */
161 161
     public function distributionAssetsUrl()
162 162
     {
163
-        return $this->pluginUrl() . 'assets/dist/';
163
+        return $this->pluginUrl().'assets/dist/';
164 164
     }
165 165
 
166 166
 
Please login to merge, or discard this patch.
core/EE_Dependency_Map.core.php 1 patch
Indentation   +964 added lines, -964 removed lines patch added patch discarded remove patch
@@ -20,968 +20,968 @@
 block discarded – undo
20 20
 class EE_Dependency_Map
21 21
 {
22 22
 
23
-    /**
24
-     * This means that the requested class dependency is not present in the dependency map
25
-     */
26
-    const not_registered = 0;
27
-
28
-    /**
29
-     * This instructs class loaders to ALWAYS return a newly instantiated object for the requested class.
30
-     */
31
-    const load_new_object = 1;
32
-
33
-    /**
34
-     * This instructs class loaders to return a previously instantiated and cached object for the requested class.
35
-     * IF a previously instantiated object does not exist, a new one will be created and added to the cache.
36
-     */
37
-    const load_from_cache = 2;
38
-
39
-    /**
40
-     * When registering a dependency,
41
-     * this indicates to keep any existing dependencies that already exist,
42
-     * and simply discard any new dependencies declared in the incoming data
43
-     */
44
-    const KEEP_EXISTING_DEPENDENCIES = 0;
45
-
46
-    /**
47
-     * When registering a dependency,
48
-     * this indicates to overwrite any existing dependencies that already exist using the incoming data
49
-     */
50
-    const OVERWRITE_DEPENDENCIES = 1;
51
-
52
-
53
-    /**
54
-     * @type EE_Dependency_Map $_instance
55
-     */
56
-    protected static $_instance;
57
-
58
-    /**
59
-     * @var ClassInterfaceCache $class_cache
60
-     */
61
-    private $class_cache;
62
-
63
-    /**
64
-     * @type RequestInterface $request
65
-     */
66
-    protected $request;
67
-
68
-    /**
69
-     * @type LegacyRequestInterface $legacy_request
70
-     */
71
-    protected $legacy_request;
72
-
73
-    /**
74
-     * @type ResponseInterface $response
75
-     */
76
-    protected $response;
77
-
78
-    /**
79
-     * @type LoaderInterface $loader
80
-     */
81
-    protected $loader;
82
-
83
-    /**
84
-     * @type array $_dependency_map
85
-     */
86
-    protected $_dependency_map = array();
87
-
88
-    /**
89
-     * @type array $_class_loaders
90
-     */
91
-    protected $_class_loaders = array();
92
-
93
-
94
-    /**
95
-     * EE_Dependency_Map constructor.
96
-     *
97
-     * @param ClassInterfaceCache $class_cache
98
-     */
99
-    protected function __construct(ClassInterfaceCache $class_cache)
100
-    {
101
-        $this->class_cache = $class_cache;
102
-        do_action('EE_Dependency_Map____construct', $this);
103
-    }
104
-
105
-
106
-    /**
107
-     * @return void
108
-     */
109
-    public function initialize()
110
-    {
111
-        $this->_register_core_dependencies();
112
-        $this->_register_core_class_loaders();
113
-        $this->_register_core_aliases();
114
-    }
115
-
116
-
117
-    /**
118
-     * @singleton method used to instantiate class object
119
-     * @param ClassInterfaceCache|null $class_cache
120
-     * @return EE_Dependency_Map
121
-     */
122
-    public static function instance(ClassInterfaceCache $class_cache = null)
123
-    {
124
-        // check if class object is instantiated, and instantiated properly
125
-        if (! self::$_instance instanceof EE_Dependency_Map
126
-            && $class_cache instanceof ClassInterfaceCache
127
-        ) {
128
-            self::$_instance = new EE_Dependency_Map($class_cache);
129
-        }
130
-        return self::$_instance;
131
-    }
132
-
133
-
134
-    /**
135
-     * @param RequestInterface $request
136
-     */
137
-    public function setRequest(RequestInterface $request)
138
-    {
139
-        $this->request = $request;
140
-    }
141
-
142
-
143
-    /**
144
-     * @param LegacyRequestInterface $legacy_request
145
-     */
146
-    public function setLegacyRequest(LegacyRequestInterface $legacy_request)
147
-    {
148
-        $this->legacy_request = $legacy_request;
149
-    }
150
-
151
-
152
-    /**
153
-     * @param ResponseInterface $response
154
-     */
155
-    public function setResponse(ResponseInterface $response)
156
-    {
157
-        $this->response = $response;
158
-    }
159
-
160
-
161
-    /**
162
-     * @param LoaderInterface $loader
163
-     */
164
-    public function setLoader(LoaderInterface $loader)
165
-    {
166
-        $this->loader = $loader;
167
-    }
168
-
169
-
170
-    /**
171
-     * @param string $class
172
-     * @param array  $dependencies
173
-     * @param int    $overwrite
174
-     * @return bool
175
-     */
176
-    public static function register_dependencies(
177
-        $class,
178
-        array $dependencies,
179
-        $overwrite = EE_Dependency_Map::KEEP_EXISTING_DEPENDENCIES
180
-    ) {
181
-        return self::$_instance->registerDependencies($class, $dependencies, $overwrite);
182
-    }
183
-
184
-
185
-    /**
186
-     * Assigns an array of class names and corresponding load sources (new or cached)
187
-     * to the class specified by the first parameter.
188
-     * IMPORTANT !!!
189
-     * The order of elements in the incoming $dependencies array MUST match
190
-     * the order of the constructor parameters for the class in question.
191
-     * This is especially important when overriding any existing dependencies that are registered.
192
-     * the third parameter controls whether any duplicate dependencies are overwritten or not.
193
-     *
194
-     * @param string $class
195
-     * @param array  $dependencies
196
-     * @param int    $overwrite
197
-     * @return bool
198
-     */
199
-    public function registerDependencies(
200
-        $class,
201
-        array $dependencies,
202
-        $overwrite = EE_Dependency_Map::KEEP_EXISTING_DEPENDENCIES
203
-    ) {
204
-        $class = trim($class, '\\');
205
-        $registered = false;
206
-        if (empty(self::$_instance->_dependency_map[ $class ])) {
207
-            self::$_instance->_dependency_map[ $class ] = array();
208
-        }
209
-        // we need to make sure that any aliases used when registering a dependency
210
-        // get resolved to the correct class name
211
-        foreach ($dependencies as $dependency => $load_source) {
212
-            $alias = self::$_instance->getFqnForAlias($dependency);
213
-            if ($overwrite === EE_Dependency_Map::OVERWRITE_DEPENDENCIES
214
-                || ! isset(self::$_instance->_dependency_map[ $class ][ $alias ])
215
-            ) {
216
-                unset($dependencies[ $dependency ]);
217
-                $dependencies[ $alias ] = $load_source;
218
-                $registered = true;
219
-            }
220
-        }
221
-        // now add our two lists of dependencies together.
222
-        // using Union (+=) favours the arrays in precedence from left to right,
223
-        // so $dependencies is NOT overwritten because it is listed first
224
-        // ie: with A = B + C, entries in B take precedence over duplicate entries in C
225
-        // Union is way faster than array_merge() but should be used with caution...
226
-        // especially with numerically indexed arrays
227
-        $dependencies += self::$_instance->_dependency_map[ $class ];
228
-        // now we need to ensure that the resulting dependencies
229
-        // array only has the entries that are required for the class
230
-        // so first count how many dependencies were originally registered for the class
231
-        $dependency_count = count(self::$_instance->_dependency_map[ $class ]);
232
-        // if that count is non-zero (meaning dependencies were already registered)
233
-        self::$_instance->_dependency_map[ $class ] = $dependency_count
234
-            // then truncate the  final array to match that count
235
-            ? array_slice($dependencies, 0, $dependency_count)
236
-            // otherwise just take the incoming array because nothing previously existed
237
-            : $dependencies;
238
-        return $registered;
239
-    }
240
-
241
-
242
-    /**
243
-     * @param string $class_name
244
-     * @param string $loader
245
-     * @return bool
246
-     * @throws DomainException
247
-     */
248
-    public static function register_class_loader($class_name, $loader = 'load_core')
249
-    {
250
-        if (! $loader instanceof Closure && strpos($class_name, '\\') !== false) {
251
-            throw new DomainException(
252
-                esc_html__('Don\'t use class loaders for FQCNs.', 'event_espresso')
253
-            );
254
-        }
255
-        // check that loader is callable or method starts with "load_" and exists in EE_Registry
256
-        if (! is_callable($loader)
257
-            && (
258
-                strpos($loader, 'load_') !== 0
259
-                || ! method_exists('EE_Registry', $loader)
260
-            )
261
-        ) {
262
-            throw new DomainException(
263
-                sprintf(
264
-                    esc_html__(
265
-                        '"%1$s" is not a valid loader method on EE_Registry.',
266
-                        'event_espresso'
267
-                    ),
268
-                    $loader
269
-                )
270
-            );
271
-        }
272
-        $class_name = self::$_instance->getFqnForAlias($class_name);
273
-        if (! isset(self::$_instance->_class_loaders[ $class_name ])) {
274
-            self::$_instance->_class_loaders[ $class_name ] = $loader;
275
-            return true;
276
-        }
277
-        return false;
278
-    }
279
-
280
-
281
-    /**
282
-     * @return array
283
-     */
284
-    public function dependency_map()
285
-    {
286
-        return $this->_dependency_map;
287
-    }
288
-
289
-
290
-    /**
291
-     * returns TRUE if dependency map contains a listing for the provided class name
292
-     *
293
-     * @param string $class_name
294
-     * @return boolean
295
-     */
296
-    public function has($class_name = '')
297
-    {
298
-        // all legacy models have the same dependencies
299
-        if (strpos($class_name, 'EEM_') === 0) {
300
-            $class_name = 'LEGACY_MODELS';
301
-        }
302
-        return isset($this->_dependency_map[ $class_name ]) ? true : false;
303
-    }
304
-
305
-
306
-    /**
307
-     * returns TRUE if dependency map contains a listing for the provided class name AND dependency
308
-     *
309
-     * @param string $class_name
310
-     * @param string $dependency
311
-     * @return bool
312
-     */
313
-    public function has_dependency_for_class($class_name = '', $dependency = '')
314
-    {
315
-        // all legacy models have the same dependencies
316
-        if (strpos($class_name, 'EEM_') === 0) {
317
-            $class_name = 'LEGACY_MODELS';
318
-        }
319
-        $dependency = $this->getFqnForAlias($dependency, $class_name);
320
-        return isset($this->_dependency_map[ $class_name ][ $dependency ])
321
-            ? true
322
-            : false;
323
-    }
324
-
325
-
326
-    /**
327
-     * returns loading strategy for whether a previously cached dependency should be loaded or a new instance returned
328
-     *
329
-     * @param string $class_name
330
-     * @param string $dependency
331
-     * @return int
332
-     */
333
-    public function loading_strategy_for_class_dependency($class_name = '', $dependency = '')
334
-    {
335
-        // all legacy models have the same dependencies
336
-        if (strpos($class_name, 'EEM_') === 0) {
337
-            $class_name = 'LEGACY_MODELS';
338
-        }
339
-        $dependency = $this->getFqnForAlias($dependency);
340
-        return $this->has_dependency_for_class($class_name, $dependency)
341
-            ? $this->_dependency_map[ $class_name ][ $dependency ]
342
-            : EE_Dependency_Map::not_registered;
343
-    }
344
-
345
-
346
-    /**
347
-     * @param string $class_name
348
-     * @return string | Closure
349
-     */
350
-    public function class_loader($class_name)
351
-    {
352
-        // all legacy models use load_model()
353
-        if (strpos($class_name, 'EEM_') === 0) {
354
-            return 'load_model';
355
-        }
356
-        $class_name = $this->getFqnForAlias($class_name);
357
-        return isset($this->_class_loaders[ $class_name ]) ? $this->_class_loaders[ $class_name ] : '';
358
-    }
359
-
360
-
361
-    /**
362
-     * @return array
363
-     */
364
-    public function class_loaders()
365
-    {
366
-        return $this->_class_loaders;
367
-    }
368
-
369
-
370
-    /**
371
-     * adds an alias for a classname
372
-     *
373
-     * @param string $fqcn      the class name that should be used (concrete class to replace interface)
374
-     * @param string $alias     the class name that would be type hinted for (abstract parent or interface)
375
-     * @param string $for_class the class that has the dependency (is type hinting for the interface)
376
-     */
377
-    public function add_alias($fqcn, $alias, $for_class = '')
378
-    {
379
-        $this->class_cache->addAlias($fqcn, $alias, $for_class);
380
-    }
381
-
382
-
383
-    /**
384
-     * Returns TRUE if the provided fully qualified name IS an alias
385
-     * WHY?
386
-     * Because if a class is type hinting for a concretion,
387
-     * then why would we need to find another class to supply it?
388
-     * ie: if a class asks for `Fully/Qualified/Namespace/SpecificClassName`,
389
-     * then give it an instance of `Fully/Qualified/Namespace/SpecificClassName`.
390
-     * Don't go looking for some substitute.
391
-     * Whereas if a class is type hinting for an interface...
392
-     * then we need to find an actual class to use.
393
-     * So the interface IS the alias for some other FQN,
394
-     * and we need to find out if `Fully/Qualified/Namespace/SomeInterface`
395
-     * represents some other class.
396
-     *
397
-     * @param string $fqn
398
-     * @param string $for_class
399
-     * @return bool
400
-     */
401
-    public function isAlias($fqn = '', $for_class = '')
402
-    {
403
-        return $this->class_cache->isAlias($fqn, $for_class);
404
-    }
405
-
406
-
407
-    /**
408
-     * Returns a FQN for provided alias if one exists, otherwise returns the original $alias
409
-     * functions recursively, so that multiple aliases can be used to drill down to a FQN
410
-     *  for example:
411
-     *      if the following two entries were added to the _aliases array:
412
-     *          array(
413
-     *              'interface_alias'           => 'some\namespace\interface'
414
-     *              'some\namespace\interface'  => 'some\namespace\classname'
415
-     *          )
416
-     *      then one could use EE_Registry::instance()->create( 'interface_alias' )
417
-     *      to load an instance of 'some\namespace\classname'
418
-     *
419
-     * @param string $alias
420
-     * @param string $for_class
421
-     * @return string
422
-     */
423
-    public function getFqnForAlias($alias = '', $for_class = '')
424
-    {
425
-        return (string) $this->class_cache->getFqnForAlias($alias, $for_class);
426
-    }
427
-
428
-
429
-    /**
430
-     * Registers the core dependencies and whether a previously instantiated object should be loaded from the cache,
431
-     * if one exists, or whether a new object should be generated every time the requested class is loaded.
432
-     * This is done by using the following class constants:
433
-     *        EE_Dependency_Map::load_from_cache - loads previously instantiated object
434
-     *        EE_Dependency_Map::load_new_object - generates a new object every time
435
-     */
436
-    protected function _register_core_dependencies()
437
-    {
438
-        $this->_dependency_map = array(
439
-            'EE_Request_Handler'                                                                                          => array(
440
-                'EE_Request' => EE_Dependency_Map::load_from_cache,
441
-            ),
442
-            'EE_System'                                                                                                   => array(
443
-                'EE_Registry'                                 => EE_Dependency_Map::load_from_cache,
444
-                'EventEspresso\core\services\loaders\Loader'  => EE_Dependency_Map::load_from_cache,
445
-                'EventEspresso\core\services\request\Request' => EE_Dependency_Map::load_from_cache,
446
-                'EE_Maintenance_Mode'                         => EE_Dependency_Map::load_from_cache,
447
-            ),
448
-            'EE_Session'                                                                                                  => array(
449
-                'EventEspresso\core\services\cache\TransientCacheStorage'  => EE_Dependency_Map::load_from_cache,
450
-                'EventEspresso\core\domain\values\session\SessionLifespan' => EE_Dependency_Map::load_from_cache,
451
-                'EventEspresso\core\services\request\Request'              => EE_Dependency_Map::load_from_cache,
452
-                'EE_Encryption'                                            => EE_Dependency_Map::load_from_cache,
453
-            ),
454
-            'EE_Cart'                                                                                                     => array(
455
-                'EE_Session' => EE_Dependency_Map::load_from_cache,
456
-            ),
457
-            'EE_Front_Controller'                                                                                         => array(
458
-                'EE_Registry'              => EE_Dependency_Map::load_from_cache,
459
-                'EE_Request_Handler'       => EE_Dependency_Map::load_from_cache,
460
-                'EE_Module_Request_Router' => EE_Dependency_Map::load_from_cache,
461
-            ),
462
-            'EE_Messenger_Collection_Loader'                                                                              => array(
463
-                'EE_Messenger_Collection' => EE_Dependency_Map::load_new_object,
464
-            ),
465
-            'EE_Message_Type_Collection_Loader'                                                                           => array(
466
-                'EE_Message_Type_Collection' => EE_Dependency_Map::load_new_object,
467
-            ),
468
-            'EE_Message_Resource_Manager'                                                                                 => array(
469
-                'EE_Messenger_Collection_Loader'    => EE_Dependency_Map::load_new_object,
470
-                'EE_Message_Type_Collection_Loader' => EE_Dependency_Map::load_new_object,
471
-                'EEM_Message_Template_Group'        => EE_Dependency_Map::load_from_cache,
472
-            ),
473
-            'EE_Message_Factory'                                                                                          => array(
474
-                'EE_Message_Resource_Manager' => EE_Dependency_Map::load_from_cache,
475
-            ),
476
-            'EE_messages'                                                                                                 => array(
477
-                'EE_Message_Resource_Manager' => EE_Dependency_Map::load_from_cache,
478
-            ),
479
-            'EE_Messages_Generator'                                                                                       => array(
480
-                'EE_Messages_Queue'                    => EE_Dependency_Map::load_new_object,
481
-                'EE_Messages_Data_Handler_Collection'  => EE_Dependency_Map::load_new_object,
482
-                'EE_Message_Template_Group_Collection' => EE_Dependency_Map::load_new_object,
483
-                'EEH_Parse_Shortcodes'                 => EE_Dependency_Map::load_from_cache,
484
-            ),
485
-            'EE_Messages_Processor'                                                                                       => array(
486
-                'EE_Message_Resource_Manager' => EE_Dependency_Map::load_from_cache,
487
-            ),
488
-            'EE_Messages_Queue'                                                                                           => array(
489
-                'EE_Message_Repository' => EE_Dependency_Map::load_new_object,
490
-            ),
491
-            'EE_Messages_Template_Defaults'                                                                               => array(
492
-                'EEM_Message_Template_Group' => EE_Dependency_Map::load_from_cache,
493
-                'EEM_Message_Template'       => EE_Dependency_Map::load_from_cache,
494
-            ),
495
-            'EE_Message_To_Generate_From_Request'                                                                         => array(
496
-                'EE_Message_Resource_Manager' => EE_Dependency_Map::load_from_cache,
497
-                'EE_Request_Handler'          => EE_Dependency_Map::load_from_cache,
498
-            ),
499
-            'EventEspresso\core\services\commands\CommandBus'                                                             => array(
500
-                'EventEspresso\core\services\commands\CommandHandlerManager' => EE_Dependency_Map::load_from_cache,
501
-            ),
502
-            'EventEspresso\services\commands\CommandHandler'                                                              => array(
503
-                'EE_Registry'         => EE_Dependency_Map::load_from_cache,
504
-                'CommandBusInterface' => EE_Dependency_Map::load_from_cache,
505
-            ),
506
-            'EventEspresso\core\services\commands\CommandHandlerManager'                                                  => array(
507
-                'EventEspresso\core\services\loaders\Loader' => EE_Dependency_Map::load_from_cache,
508
-            ),
509
-            'EventEspresso\core\services\commands\CompositeCommandHandler'                                                => array(
510
-                'EventEspresso\core\services\commands\CommandBus'     => EE_Dependency_Map::load_from_cache,
511
-                'EventEspresso\core\services\commands\CommandFactory' => EE_Dependency_Map::load_from_cache,
512
-            ),
513
-            'EventEspresso\core\services\commands\CommandFactory'                                                         => array(
514
-                'EventEspresso\core\services\loaders\Loader' => EE_Dependency_Map::load_from_cache,
515
-            ),
516
-            'EventEspresso\core\services\commands\middleware\CapChecker'                                                  => array(
517
-                'EventEspresso\core\domain\services\capabilities\CapabilitiesChecker' => EE_Dependency_Map::load_from_cache,
518
-            ),
519
-            'EventEspresso\core\domain\services\capabilities\CapabilitiesChecker'                                         => array(
520
-                'EE_Capabilities' => EE_Dependency_Map::load_from_cache,
521
-            ),
522
-            'EventEspresso\core\domain\services\capabilities\RegistrationsCapChecker'                                     => array(
523
-                'EE_Capabilities' => EE_Dependency_Map::load_from_cache,
524
-            ),
525
-            'EventEspresso\core\services\commands\registration\CreateRegistrationCommandHandler'                          => array(
526
-                'EventEspresso\core\domain\services\registration\CreateRegistrationService' => EE_Dependency_Map::load_from_cache,
527
-            ),
528
-            'EventEspresso\core\services\commands\registration\CopyRegistrationDetailsCommandHandler'                     => array(
529
-                'EventEspresso\core\domain\services\registration\CopyRegistrationService' => EE_Dependency_Map::load_from_cache,
530
-            ),
531
-            'EventEspresso\core\services\commands\registration\CopyRegistrationPaymentsCommandHandler'                    => array(
532
-                'EventEspresso\core\domain\services\registration\CopyRegistrationService' => EE_Dependency_Map::load_from_cache,
533
-            ),
534
-            'EventEspresso\core\services\commands\registration\CancelRegistrationAndTicketLineItemCommandHandler'         => array(
535
-                'EventEspresso\core\domain\services\registration\CancelTicketLineItemService' => EE_Dependency_Map::load_from_cache,
536
-            ),
537
-            'EventEspresso\core\services\commands\registration\UpdateRegistrationAndTransactionAfterChangeCommandHandler' => array(
538
-                'EventEspresso\core\domain\services\registration\UpdateRegistrationService' => EE_Dependency_Map::load_from_cache,
539
-            ),
540
-            'EventEspresso\core\services\commands\ticket\CreateTicketLineItemCommandHandler'                              => array(
541
-                'EventEspresso\core\domain\services\ticket\CreateTicketLineItemService' => EE_Dependency_Map::load_from_cache,
542
-            ),
543
-            'EventEspresso\core\services\commands\ticket\CancelTicketLineItemCommandHandler'                              => array(
544
-                'EventEspresso\core\domain\services\ticket\CancelTicketLineItemService' => EE_Dependency_Map::load_from_cache,
545
-            ),
546
-            'EventEspresso\core\domain\services\registration\CancelRegistrationService'                                   => array(
547
-                'EventEspresso\core\domain\services\ticket\CancelTicketLineItemService' => EE_Dependency_Map::load_from_cache,
548
-            ),
549
-            'EventEspresso\core\services\commands\attendee\CreateAttendeeCommandHandler'                                  => array(
550
-                'EEM_Attendee' => EE_Dependency_Map::load_from_cache,
551
-            ),
552
-            'EventEspresso\core\services\database\TableManager'                                                           => array(
553
-                'EventEspresso\core\services\database\TableAnalysis' => EE_Dependency_Map::load_from_cache,
554
-            ),
555
-            'EE_Data_Migration_Class_Base'                                                                                => array(
556
-                'EventEspresso\core\services\database\TableAnalysis' => EE_Dependency_Map::load_from_cache,
557
-                'EventEspresso\core\services\database\TableManager'  => EE_Dependency_Map::load_from_cache,
558
-            ),
559
-            'EE_DMS_Core_4_1_0'                                                                                           => array(
560
-                'EventEspresso\core\services\database\TableAnalysis' => EE_Dependency_Map::load_from_cache,
561
-                'EventEspresso\core\services\database\TableManager'  => EE_Dependency_Map::load_from_cache,
562
-            ),
563
-            'EE_DMS_Core_4_2_0'                                                                                           => array(
564
-                'EventEspresso\core\services\database\TableAnalysis' => EE_Dependency_Map::load_from_cache,
565
-                'EventEspresso\core\services\database\TableManager'  => EE_Dependency_Map::load_from_cache,
566
-            ),
567
-            'EE_DMS_Core_4_3_0'                                                                                           => array(
568
-                'EventEspresso\core\services\database\TableAnalysis' => EE_Dependency_Map::load_from_cache,
569
-                'EventEspresso\core\services\database\TableManager'  => EE_Dependency_Map::load_from_cache,
570
-            ),
571
-            'EE_DMS_Core_4_4_0'                                                                                           => array(
572
-                'EventEspresso\core\services\database\TableAnalysis' => EE_Dependency_Map::load_from_cache,
573
-                'EventEspresso\core\services\database\TableManager'  => EE_Dependency_Map::load_from_cache,
574
-            ),
575
-            'EE_DMS_Core_4_5_0'                                                                                           => array(
576
-                'EventEspresso\core\services\database\TableAnalysis' => EE_Dependency_Map::load_from_cache,
577
-                'EventEspresso\core\services\database\TableManager'  => EE_Dependency_Map::load_from_cache,
578
-            ),
579
-            'EE_DMS_Core_4_6_0'                                                                                           => array(
580
-                'EventEspresso\core\services\database\TableAnalysis' => EE_Dependency_Map::load_from_cache,
581
-                'EventEspresso\core\services\database\TableManager'  => EE_Dependency_Map::load_from_cache,
582
-            ),
583
-            'EE_DMS_Core_4_7_0'                                                                                           => array(
584
-                'EventEspresso\core\services\database\TableAnalysis' => EE_Dependency_Map::load_from_cache,
585
-                'EventEspresso\core\services\database\TableManager'  => EE_Dependency_Map::load_from_cache,
586
-            ),
587
-            'EE_DMS_Core_4_8_0'                                                                                           => array(
588
-                'EventEspresso\core\services\database\TableAnalysis' => EE_Dependency_Map::load_from_cache,
589
-                'EventEspresso\core\services\database\TableManager'  => EE_Dependency_Map::load_from_cache,
590
-            ),
591
-            'EE_DMS_Core_4_9_0'                                                                                           => array(
592
-                'EventEspresso\core\services\database\TableAnalysis' => EE_Dependency_Map::load_from_cache,
593
-                'EventEspresso\core\services\database\TableManager'  => EE_Dependency_Map::load_from_cache,
594
-            ),
595
-            'EventEspresso\core\services\assets\I18nRegistry'                                                             => array(
596
-                array(),
597
-                'EventEspresso\core\domain\Domain' => EE_Dependency_Map::load_from_cache,
598
-            ),
599
-            'EventEspresso\core\services\assets\Registry'                                                                 => array(
600
-                'EventEspresso\core\services\assets\AssetCollection' => EE_Dependency_Map::load_from_cache,
601
-                'EventEspresso\core\services\assets\I18nRegistry'    => EE_Dependency_Map::load_from_cache,
602
-            ),
603
-            'EventEspresso\core\domain\entities\shortcodes\EspressoCancelled'                                             => array(
604
-                'EventEspresso\core\services\cache\PostRelatedCacheManager' => EE_Dependency_Map::load_from_cache,
605
-            ),
606
-            'EventEspresso\core\domain\entities\shortcodes\EspressoCheckout'                                              => array(
607
-                'EventEspresso\core\services\cache\PostRelatedCacheManager' => EE_Dependency_Map::load_from_cache,
608
-            ),
609
-            'EventEspresso\core\domain\entities\shortcodes\EspressoEventAttendees'                                        => array(
610
-                'EventEspresso\core\services\cache\PostRelatedCacheManager' => EE_Dependency_Map::load_from_cache,
611
-            ),
612
-            'EventEspresso\core\domain\entities\shortcodes\EspressoEvents'                                                => array(
613
-                'EventEspresso\core\services\cache\PostRelatedCacheManager' => EE_Dependency_Map::load_from_cache,
614
-            ),
615
-            'EventEspresso\core\domain\entities\shortcodes\EspressoThankYou'                                              => array(
616
-                'EventEspresso\core\services\cache\PostRelatedCacheManager' => EE_Dependency_Map::load_from_cache,
617
-            ),
618
-            'EventEspresso\core\domain\entities\shortcodes\EspressoTicketSelector'                                        => array(
619
-                'EventEspresso\core\services\cache\PostRelatedCacheManager' => EE_Dependency_Map::load_from_cache,
620
-            ),
621
-            'EventEspresso\core\domain\entities\shortcodes\EspressoTxnPage'                                               => array(
622
-                'EventEspresso\core\services\cache\PostRelatedCacheManager' => EE_Dependency_Map::load_from_cache,
623
-            ),
624
-            'EventEspresso\core\services\cache\BasicCacheManager'                                                         => array(
625
-                'EventEspresso\core\services\cache\TransientCacheStorage' => EE_Dependency_Map::load_from_cache,
626
-            ),
627
-            'EventEspresso\core\services\cache\PostRelatedCacheManager'                                                   => array(
628
-                'EventEspresso\core\services\cache\TransientCacheStorage' => EE_Dependency_Map::load_from_cache,
629
-            ),
630
-            'EventEspresso\core\domain\services\validation\email\EmailValidationService'                                  => array(
631
-                'EE_Registration_Config'                     => EE_Dependency_Map::load_from_cache,
632
-                'EventEspresso\core\services\loaders\Loader' => EE_Dependency_Map::load_from_cache,
633
-            ),
634
-            'EventEspresso\core\domain\values\EmailAddress'                                                               => array(
635
-                null,
636
-                'EventEspresso\core\domain\services\validation\email\EmailValidationService' => EE_Dependency_Map::load_from_cache,
637
-            ),
638
-            'EventEspresso\core\services\orm\ModelFieldFactory'                                                           => array(
639
-                'EventEspresso\core\services\loaders\Loader' => EE_Dependency_Map::load_from_cache,
640
-            ),
641
-            'LEGACY_MODELS'                                                                                               => array(
642
-                null,
643
-                'EventEspresso\core\services\database\ModelFieldFactory' => EE_Dependency_Map::load_from_cache,
644
-            ),
645
-            'EE_Module_Request_Router'                                                                                    => array(
646
-                'EE_Request' => EE_Dependency_Map::load_from_cache,
647
-            ),
648
-            'EE_Registration_Processor'                                                                                   => array(
649
-                'EE_Request' => EE_Dependency_Map::load_from_cache,
650
-            ),
651
-            'EventEspresso\core\services\notifications\PersistentAdminNoticeManager'                                      => array(
652
-                null,
653
-                'EventEspresso\core\domain\services\capabilities\CapabilitiesChecker' => EE_Dependency_Map::load_from_cache,
654
-                'EE_Request'                                                          => EE_Dependency_Map::load_from_cache,
655
-            ),
656
-            'EventEspresso\core\services\editor\EditorBlockRegistrationManager'      => array(
657
-                'EventEspresso\core\domain\entities\editor\EditorBlockCollection' => EE_Dependency_Map::load_from_cache,
658
-                'EE_Request'                                                      => EE_Dependency_Map::load_from_cache,
659
-                'EventEspresso\core\domain\Domain'                                => EE_Dependency_Map::load_from_cache,
660
-                'EventEspresso\core\services\assets\Registry' => EE_Dependency_Map::load_from_cache
661
-            ),
662
-            'EE_Admin_Transactions_List_Table'                                                                            => array(
663
-                null,
664
-                'EventEspresso\core\domain\values\session\SessionLifespan' => EE_Dependency_Map::load_from_cache,
665
-            ),
666
-            'EventEspresso\core\services\licensing\LicenseService'                                                        => array(
667
-                'EventEspresso\core\domain\services\pue\Stats'  => EE_Dependency_Map::load_from_cache,
668
-                'EventEspresso\core\domain\services\pue\Config' => EE_Dependency_Map::load_from_cache,
669
-            ),
670
-            'EventEspresso\core\domain\services\pue\Stats'                                                                => array(
671
-                'EventEspresso\core\domain\services\pue\Config'        => EE_Dependency_Map::load_from_cache,
672
-                'EE_Maintenance_Mode'                                  => EE_Dependency_Map::load_from_cache,
673
-                'EventEspresso\core\domain\services\pue\StatsGatherer' => EE_Dependency_Map::load_from_cache,
674
-            ),
675
-            'EventEspresso\core\domain\services\pue\Config'                                                               => array(
676
-                'EE_Network_Config' => EE_Dependency_Map::load_from_cache,
677
-                'EE_Config'         => EE_Dependency_Map::load_from_cache,
678
-            ),
679
-            'EventEspresso\core\domain\services\pue\StatsGatherer'                                                        => array(
680
-                'EEM_Payment_Method' => EE_Dependency_Map::load_from_cache,
681
-                'EEM_Event'          => EE_Dependency_Map::load_from_cache,
682
-                'EEM_Datetime'       => EE_Dependency_Map::load_from_cache,
683
-                'EEM_Ticket'         => EE_Dependency_Map::load_from_cache,
684
-                'EEM_Registration'   => EE_Dependency_Map::load_from_cache,
685
-                'EEM_Transaction'    => EE_Dependency_Map::load_from_cache,
686
-                'EE_Config'          => EE_Dependency_Map::load_from_cache,
687
-            ),
688
-            'EventEspresso\core\domain\services\admin\ExitModal'                                                          => array(
689
-                'EventEspresso\core\services\assets\Registry' => EE_Dependency_Map::load_from_cache,
690
-            ),
691
-            'EventEspresso\core\domain\services\admin\PluginUpsells'                                                      => array(
692
-                'EventEspresso\core\domain\Domain' => EE_Dependency_Map::load_from_cache,
693
-            ),
694
-            'EventEspresso\caffeinated\modules\recaptcha_invisible\InvisibleRecaptcha'                                    => array(
695
-                'EE_Registration_Config' => EE_Dependency_Map::load_from_cache,
696
-                'EE_Session'             => EE_Dependency_Map::load_from_cache,
697
-            ),
698
-            'EventEspresso\caffeinated\modules\recaptcha_invisible\RecaptchaAdminSettings'                                => array(
699
-                'EE_Registration_Config' => EE_Dependency_Map::load_from_cache,
700
-            ),
701
-            'EventEspresso\modules\ticket_selector\ProcessTicketSelector'                                                 => array(
702
-                'EE_Core_Config'                                                          => EE_Dependency_Map::load_from_cache,
703
-                'EventEspresso\core\services\request\Request'                             => EE_Dependency_Map::load_from_cache,
704
-                'EE_Session'                                                              => EE_Dependency_Map::load_from_cache,
705
-                'EEM_Ticket'                                                              => EE_Dependency_Map::load_from_cache,
706
-                'EventEspresso\modules\ticket_selector\TicketDatetimeAvailabilityTracker' => EE_Dependency_Map::load_from_cache,
707
-            ),
708
-            'EventEspresso\modules\ticket_selector\TicketDatetimeAvailabilityTracker'                                     => array(
709
-                'EEM_Datetime' => EE_Dependency_Map::load_from_cache,
710
-            ),
711
-            'EventEspresso\core\domain\entities\custom_post_types\CustomPostTypeDefinitions'                              => array(
712
-                'EE_Core_Config'                             => EE_Dependency_Map::load_from_cache,
713
-                'EventEspresso\core\services\loaders\Loader' => EE_Dependency_Map::load_from_cache,
714
-            ),
715
-            'EventEspresso\core\domain\services\custom_post_types\RegisterCustomPostTypes'                                => array(
716
-                'EventEspresso\core\domain\entities\custom_post_types\CustomPostTypeDefinitions' => EE_Dependency_Map::load_from_cache,
717
-            ),
718
-            'EventEspresso\core\domain\services\custom_post_types\RegisterCustomTaxonomies'                               => array(
719
-                'EventEspresso\core\domain\entities\custom_post_types\CustomTaxonomyDefinitions' => EE_Dependency_Map::load_from_cache,
720
-            ),
721
-            'EE_CPT_Strategy'                                                                                             => array(
722
-                'EventEspresso\core\domain\entities\custom_post_types\CustomPostTypeDefinitions' => EE_Dependency_Map::load_from_cache,
723
-                'EventEspresso\core\domain\entities\custom_post_types\CustomTaxonomyDefinitions' => EE_Dependency_Map::load_from_cache,
724
-            ),
725
-            'EventEspresso\core\services\loaders\ObjectIdentifier'                                                        => array(
726
-                'EventEspresso\core\services\loaders\ClassInterfaceCache' => EE_Dependency_Map::load_from_cache,
727
-            ),
728
-            'EventEspresso\core\domain\services\admin\privacy\policy\PrivacyPolicy' => array(
729
-                'EEM_Payment_Method' => EE_Dependency_Map::load_from_cache,
730
-                'EventEspresso\core\domain\values\session\SessionLifespan' => EE_Dependency_Map::load_from_cache
731
-            ),
732
-            'EventEspresso\core\domain\entities\editor\blocks\CoreBlocksAssetManager'                                     => array(
733
-                'EventEspresso\core\domain\Domain'            => EE_Dependency_Map::load_from_cache,
734
-                'EventEspresso\core\services\assets\Registry' => EE_Dependency_Map::load_from_cache,
735
-            ),
736
-            'EventEspresso\core\services\assets\AssetManager'                                                             => array(
737
-                'EventEspresso\core\domain\Domain'                   => EE_Dependency_Map::load_from_cache,
738
-                'EventEspresso\core\services\assets\AssetCollection' => EE_Dependency_Map::load_from_cache,
739
-                'EventEspresso\core\services\assets\Registry'        => EE_Dependency_Map::load_from_cache,
740
-            ),
741
-            'EventEspresso\core\domain\services\assets\CoreAssetManager'                                                  => array(
742
-                'EventEspresso\core\services\assets\AssetCollection' => EE_Dependency_Map::load_from_cache,
743
-                'EE_Currency_Config'                                 => EE_Dependency_Map::load_from_cache,
744
-                'EE_Template_Config'                                 => EE_Dependency_Map::load_from_cache,
745
-                'EventEspresso\core\domain\Domain'                   => EE_Dependency_Map::load_from_cache,
746
-                'EventEspresso\core\services\assets\Registry'        => EE_Dependency_Map::load_from_cache,
747
-            ),
748
-        );
749
-    }
750
-
751
-
752
-    /**
753
-     * Registers how core classes are loaded.
754
-     * This can either be done by simply providing the name of one of the EE_Registry loader methods such as:
755
-     *        'EE_Request_Handler' => 'load_core'
756
-     *        'EE_Messages_Queue'  => 'load_lib'
757
-     *        'EEH_Debug_Tools'    => 'load_helper'
758
-     * or, if greater control is required, by providing a custom closure. For example:
759
-     *        'Some_Class' => function () {
760
-     *            return new Some_Class();
761
-     *        },
762
-     * This is required for instantiating dependencies
763
-     * where an interface has been type hinted in a class constructor. For example:
764
-     *        'Required_Interface' => function () {
765
-     *            return new A_Class_That_Implements_Required_Interface();
766
-     *        },
767
-     */
768
-    protected function _register_core_class_loaders()
769
-    {
770
-        // for PHP5.3 compat, we need to register any properties called here in a variable because `$this` cannot
771
-        // be used in a closure.
772
-        $request = &$this->request;
773
-        $response = &$this->response;
774
-        $legacy_request = &$this->legacy_request;
775
-        // $loader = &$this->loader;
776
-        $this->_class_loaders = array(
777
-            // load_core
778
-            'EE_Capabilities'                              => 'load_core',
779
-            'EE_Encryption'                                => 'load_core',
780
-            'EE_Front_Controller'                          => 'load_core',
781
-            'EE_Module_Request_Router'                     => 'load_core',
782
-            'EE_Registry'                                  => 'load_core',
783
-            'EE_Request'                                   => function () use (&$legacy_request) {
784
-                return $legacy_request;
785
-            },
786
-            'EventEspresso\core\services\request\Request'  => function () use (&$request) {
787
-                return $request;
788
-            },
789
-            'EventEspresso\core\services\request\Response' => function () use (&$response) {
790
-                return $response;
791
-            },
792
-            'EE_Base'                                      => 'load_core',
793
-            'EE_Request_Handler'                           => 'load_core',
794
-            'EE_Session'                                   => 'load_core',
795
-            'EE_Cron_Tasks'                                => 'load_core',
796
-            'EE_System'                                    => 'load_core',
797
-            'EE_Maintenance_Mode'                          => 'load_core',
798
-            'EE_Register_CPTs'                             => 'load_core',
799
-            'EE_Admin'                                     => 'load_core',
800
-            'EE_CPT_Strategy'                              => 'load_core',
801
-            // load_lib
802
-            'EE_Message_Resource_Manager'                  => 'load_lib',
803
-            'EE_Message_Type_Collection'                   => 'load_lib',
804
-            'EE_Message_Type_Collection_Loader'            => 'load_lib',
805
-            'EE_Messenger_Collection'                      => 'load_lib',
806
-            'EE_Messenger_Collection_Loader'               => 'load_lib',
807
-            'EE_Messages_Processor'                        => 'load_lib',
808
-            'EE_Message_Repository'                        => 'load_lib',
809
-            'EE_Messages_Queue'                            => 'load_lib',
810
-            'EE_Messages_Data_Handler_Collection'          => 'load_lib',
811
-            'EE_Message_Template_Group_Collection'         => 'load_lib',
812
-            'EE_Payment_Method_Manager'                    => 'load_lib',
813
-            'EE_Messages_Generator'                        => function () {
814
-                return EE_Registry::instance()->load_lib(
815
-                    'Messages_Generator',
816
-                    array(),
817
-                    false,
818
-                    false
819
-                );
820
-            },
821
-            'EE_Messages_Template_Defaults'                => function ($arguments = array()) {
822
-                return EE_Registry::instance()->load_lib(
823
-                    'Messages_Template_Defaults',
824
-                    $arguments,
825
-                    false,
826
-                    false
827
-                );
828
-            },
829
-            // load_helper
830
-            'EEH_Parse_Shortcodes'                         => function () {
831
-                if (EE_Registry::instance()->load_helper('Parse_Shortcodes')) {
832
-                    return new EEH_Parse_Shortcodes();
833
-                }
834
-                return null;
835
-            },
836
-            'EE_Template_Config'                           => function () {
837
-                return EE_Config::instance()->template_settings;
838
-            },
839
-            'EE_Currency_Config'                           => function () {
840
-                return EE_Config::instance()->currency;
841
-            },
842
-            'EE_Registration_Config'                       => function () {
843
-                return EE_Config::instance()->registration;
844
-            },
845
-            'EE_Core_Config'                               => function () {
846
-                return EE_Config::instance()->core;
847
-            },
848
-            'EventEspresso\core\services\loaders\Loader'   => function () {
849
-                return LoaderFactory::getLoader();
850
-            },
851
-            'EE_Network_Config'                            => function () {
852
-                return EE_Network_Config::instance();
853
-            },
854
-            'EE_Config'                                    => function () {
855
-                return EE_Config::instance();
856
-            },
857
-            'EventEspresso\core\domain\Domain'             => function () {
858
-                return DomainFactory::getEventEspressoCoreDomain();
859
-            },
860
-        );
861
-    }
862
-
863
-
864
-    /**
865
-     * can be used for supplying alternate names for classes,
866
-     * or for connecting interface names to instantiable classes
867
-     */
868
-    protected function _register_core_aliases()
869
-    {
870
-        $aliases = array(
871
-            'CommandBusInterface'                                                          => 'EventEspresso\core\services\commands\CommandBusInterface',
872
-            'EventEspresso\core\services\commands\CommandBusInterface'                     => 'EventEspresso\core\services\commands\CommandBus',
873
-            'CommandHandlerManagerInterface'                                               => 'EventEspresso\core\services\commands\CommandHandlerManagerInterface',
874
-            'EventEspresso\core\services\commands\CommandHandlerManagerInterface'          => 'EventEspresso\core\services\commands\CommandHandlerManager',
875
-            'CapChecker'                                                                   => 'EventEspresso\core\services\commands\middleware\CapChecker',
876
-            'AddActionHook'                                                                => 'EventEspresso\core\services\commands\middleware\AddActionHook',
877
-            'CapabilitiesChecker'                                                          => 'EventEspresso\core\domain\services\capabilities\CapabilitiesChecker',
878
-            'CapabilitiesCheckerInterface'                                                 => 'EventEspresso\core\domain\services\capabilities\CapabilitiesCheckerInterface',
879
-            'EventEspresso\core\domain\services\capabilities\CapabilitiesCheckerInterface' => 'EventEspresso\core\domain\services\capabilities\CapabilitiesChecker',
880
-            'CreateRegistrationService'                                                    => 'EventEspresso\core\domain\services\registration\CreateRegistrationService',
881
-            'CreateRegistrationCommandHandler'                                             => 'EventEspresso\core\services\commands\registration\CreateRegistrationCommand',
882
-            'CopyRegistrationDetailsCommandHandler'                                        => 'EventEspresso\core\services\commands\registration\CopyRegistrationDetailsCommand',
883
-            'CopyRegistrationPaymentsCommandHandler'                                       => 'EventEspresso\core\services\commands\registration\CopyRegistrationPaymentsCommand',
884
-            'CancelRegistrationAndTicketLineItemCommandHandler'                            => 'EventEspresso\core\services\commands\registration\CancelRegistrationAndTicketLineItemCommandHandler',
885
-            'UpdateRegistrationAndTransactionAfterChangeCommandHandler'                    => 'EventEspresso\core\services\commands\registration\UpdateRegistrationAndTransactionAfterChangeCommandHandler',
886
-            'CreateTicketLineItemCommandHandler'                                           => 'EventEspresso\core\services\commands\ticket\CreateTicketLineItemCommand',
887
-            'CreateTransactionCommandHandler'                                              => 'EventEspresso\core\services\commands\transaction\CreateTransactionCommandHandler',
888
-            'CreateAttendeeCommandHandler'                                                 => 'EventEspresso\core\services\commands\attendee\CreateAttendeeCommandHandler',
889
-            'TableManager'                                                                 => 'EventEspresso\core\services\database\TableManager',
890
-            'TableAnalysis'                                                                => 'EventEspresso\core\services\database\TableAnalysis',
891
-            'EspressoShortcode'                                                            => 'EventEspresso\core\services\shortcodes\EspressoShortcode',
892
-            'ShortcodeInterface'                                                           => 'EventEspresso\core\services\shortcodes\ShortcodeInterface',
893
-            'EventEspresso\core\services\shortcodes\ShortcodeInterface'                    => 'EventEspresso\core\services\shortcodes\EspressoShortcode',
894
-            'EventEspresso\core\services\cache\CacheStorageInterface'                      => 'EventEspresso\core\services\cache\TransientCacheStorage',
895
-            'LoaderInterface'                                                              => 'EventEspresso\core\services\loaders\LoaderInterface',
896
-            'EventEspresso\core\services\loaders\LoaderInterface'                          => 'EventEspresso\core\services\loaders\Loader',
897
-            'CommandFactoryInterface'                                                      => 'EventEspresso\core\services\commands\CommandFactoryInterface',
898
-            'EventEspresso\core\services\commands\CommandFactoryInterface'                 => 'EventEspresso\core\services\commands\CommandFactory',
899
-            'EventEspresso\core\domain\services\session\SessionIdentifierInterface'        => 'EE_Session',
900
-            'EmailValidatorInterface'                                                      => 'EventEspresso\core\domain\services\validation\email\EmailValidatorInterface',
901
-            'EventEspresso\core\domain\services\validation\email\EmailValidatorInterface'  => 'EventEspresso\core\domain\services\validation\email\EmailValidationService',
902
-            'NoticeConverterInterface'                                                     => 'EventEspresso\core\services\notices\NoticeConverterInterface',
903
-            'EventEspresso\core\services\notices\NoticeConverterInterface'                 => 'EventEspresso\core\services\notices\ConvertNoticesToEeErrors',
904
-            'NoticesContainerInterface'                                                    => 'EventEspresso\core\services\notices\NoticesContainerInterface',
905
-            'EventEspresso\core\services\notices\NoticesContainerInterface'                => 'EventEspresso\core\services\notices\NoticesContainer',
906
-            'EventEspresso\core\services\request\RequestInterface'                         => 'EventEspresso\core\services\request\Request',
907
-            'EventEspresso\core\services\request\ResponseInterface'                        => 'EventEspresso\core\services\request\Response',
908
-            'EventEspresso\core\domain\DomainInterface'                                    => 'EventEspresso\core\domain\Domain',
909
-        );
910
-        foreach ($aliases as $alias => $fqn) {
911
-            if (is_array($fqn)) {
912
-                foreach ($fqn as $class => $for_class) {
913
-                    $this->class_cache->addAlias($class, $alias, $for_class);
914
-                }
915
-                continue;
916
-            }
917
-            $this->class_cache->addAlias($fqn, $alias);
918
-        }
919
-        if (! (defined('DOING_AJAX') && DOING_AJAX) && is_admin()) {
920
-            $this->class_cache->addAlias(
921
-                'EventEspresso\core\services\notices\ConvertNoticesToAdminNotices',
922
-                'EventEspresso\core\services\notices\NoticeConverterInterface'
923
-            );
924
-        }
925
-    }
926
-
927
-
928
-    /**
929
-     * This is used to reset the internal map and class_loaders to their original default state at the beginning of the
930
-     * request Primarily used by unit tests.
931
-     */
932
-    public function reset()
933
-    {
934
-        $this->_register_core_class_loaders();
935
-        $this->_register_core_dependencies();
936
-    }
937
-
938
-
939
-    /**
940
-     * PLZ NOTE: a better name for this method would be is_alias()
941
-     * because it returns TRUE if the provided fully qualified name IS an alias
942
-     * WHY?
943
-     * Because if a class is type hinting for a concretion,
944
-     * then why would we need to find another class to supply it?
945
-     * ie: if a class asks for `Fully/Qualified/Namespace/SpecificClassName`,
946
-     * then give it an instance of `Fully/Qualified/Namespace/SpecificClassName`.
947
-     * Don't go looking for some substitute.
948
-     * Whereas if a class is type hinting for an interface...
949
-     * then we need to find an actual class to use.
950
-     * So the interface IS the alias for some other FQN,
951
-     * and we need to find out if `Fully/Qualified/Namespace/SomeInterface`
952
-     * represents some other class.
953
-     *
954
-     * @deprecated $VID:$
955
-     * @param string $fqn
956
-     * @param string $for_class
957
-     * @return bool
958
-     */
959
-    public function has_alias($fqn = '', $for_class = '')
960
-    {
961
-        return $this->isAlias($fqn, $for_class);
962
-    }
963
-
964
-
965
-    /**
966
-     * PLZ NOTE: a better name for this method would be get_fqn_for_alias()
967
-     * because it returns a FQN for provided alias if one exists, otherwise returns the original $alias
968
-     * functions recursively, so that multiple aliases can be used to drill down to a FQN
969
-     *  for example:
970
-     *      if the following two entries were added to the _aliases array:
971
-     *          array(
972
-     *              'interface_alias'           => 'some\namespace\interface'
973
-     *              'some\namespace\interface'  => 'some\namespace\classname'
974
-     *          )
975
-     *      then one could use EE_Registry::instance()->create( 'interface_alias' )
976
-     *      to load an instance of 'some\namespace\classname'
977
-     *
978
-     * @deprecated $VID:$
979
-     * @param string $alias
980
-     * @param string $for_class
981
-     * @return string
982
-     */
983
-    public function get_alias($alias = '', $for_class = '')
984
-    {
985
-        return $this->getFqnForAlias($alias, $for_class);
986
-    }
23
+	/**
24
+	 * This means that the requested class dependency is not present in the dependency map
25
+	 */
26
+	const not_registered = 0;
27
+
28
+	/**
29
+	 * This instructs class loaders to ALWAYS return a newly instantiated object for the requested class.
30
+	 */
31
+	const load_new_object = 1;
32
+
33
+	/**
34
+	 * This instructs class loaders to return a previously instantiated and cached object for the requested class.
35
+	 * IF a previously instantiated object does not exist, a new one will be created and added to the cache.
36
+	 */
37
+	const load_from_cache = 2;
38
+
39
+	/**
40
+	 * When registering a dependency,
41
+	 * this indicates to keep any existing dependencies that already exist,
42
+	 * and simply discard any new dependencies declared in the incoming data
43
+	 */
44
+	const KEEP_EXISTING_DEPENDENCIES = 0;
45
+
46
+	/**
47
+	 * When registering a dependency,
48
+	 * this indicates to overwrite any existing dependencies that already exist using the incoming data
49
+	 */
50
+	const OVERWRITE_DEPENDENCIES = 1;
51
+
52
+
53
+	/**
54
+	 * @type EE_Dependency_Map $_instance
55
+	 */
56
+	protected static $_instance;
57
+
58
+	/**
59
+	 * @var ClassInterfaceCache $class_cache
60
+	 */
61
+	private $class_cache;
62
+
63
+	/**
64
+	 * @type RequestInterface $request
65
+	 */
66
+	protected $request;
67
+
68
+	/**
69
+	 * @type LegacyRequestInterface $legacy_request
70
+	 */
71
+	protected $legacy_request;
72
+
73
+	/**
74
+	 * @type ResponseInterface $response
75
+	 */
76
+	protected $response;
77
+
78
+	/**
79
+	 * @type LoaderInterface $loader
80
+	 */
81
+	protected $loader;
82
+
83
+	/**
84
+	 * @type array $_dependency_map
85
+	 */
86
+	protected $_dependency_map = array();
87
+
88
+	/**
89
+	 * @type array $_class_loaders
90
+	 */
91
+	protected $_class_loaders = array();
92
+
93
+
94
+	/**
95
+	 * EE_Dependency_Map constructor.
96
+	 *
97
+	 * @param ClassInterfaceCache $class_cache
98
+	 */
99
+	protected function __construct(ClassInterfaceCache $class_cache)
100
+	{
101
+		$this->class_cache = $class_cache;
102
+		do_action('EE_Dependency_Map____construct', $this);
103
+	}
104
+
105
+
106
+	/**
107
+	 * @return void
108
+	 */
109
+	public function initialize()
110
+	{
111
+		$this->_register_core_dependencies();
112
+		$this->_register_core_class_loaders();
113
+		$this->_register_core_aliases();
114
+	}
115
+
116
+
117
+	/**
118
+	 * @singleton method used to instantiate class object
119
+	 * @param ClassInterfaceCache|null $class_cache
120
+	 * @return EE_Dependency_Map
121
+	 */
122
+	public static function instance(ClassInterfaceCache $class_cache = null)
123
+	{
124
+		// check if class object is instantiated, and instantiated properly
125
+		if (! self::$_instance instanceof EE_Dependency_Map
126
+			&& $class_cache instanceof ClassInterfaceCache
127
+		) {
128
+			self::$_instance = new EE_Dependency_Map($class_cache);
129
+		}
130
+		return self::$_instance;
131
+	}
132
+
133
+
134
+	/**
135
+	 * @param RequestInterface $request
136
+	 */
137
+	public function setRequest(RequestInterface $request)
138
+	{
139
+		$this->request = $request;
140
+	}
141
+
142
+
143
+	/**
144
+	 * @param LegacyRequestInterface $legacy_request
145
+	 */
146
+	public function setLegacyRequest(LegacyRequestInterface $legacy_request)
147
+	{
148
+		$this->legacy_request = $legacy_request;
149
+	}
150
+
151
+
152
+	/**
153
+	 * @param ResponseInterface $response
154
+	 */
155
+	public function setResponse(ResponseInterface $response)
156
+	{
157
+		$this->response = $response;
158
+	}
159
+
160
+
161
+	/**
162
+	 * @param LoaderInterface $loader
163
+	 */
164
+	public function setLoader(LoaderInterface $loader)
165
+	{
166
+		$this->loader = $loader;
167
+	}
168
+
169
+
170
+	/**
171
+	 * @param string $class
172
+	 * @param array  $dependencies
173
+	 * @param int    $overwrite
174
+	 * @return bool
175
+	 */
176
+	public static function register_dependencies(
177
+		$class,
178
+		array $dependencies,
179
+		$overwrite = EE_Dependency_Map::KEEP_EXISTING_DEPENDENCIES
180
+	) {
181
+		return self::$_instance->registerDependencies($class, $dependencies, $overwrite);
182
+	}
183
+
184
+
185
+	/**
186
+	 * Assigns an array of class names and corresponding load sources (new or cached)
187
+	 * to the class specified by the first parameter.
188
+	 * IMPORTANT !!!
189
+	 * The order of elements in the incoming $dependencies array MUST match
190
+	 * the order of the constructor parameters for the class in question.
191
+	 * This is especially important when overriding any existing dependencies that are registered.
192
+	 * the third parameter controls whether any duplicate dependencies are overwritten or not.
193
+	 *
194
+	 * @param string $class
195
+	 * @param array  $dependencies
196
+	 * @param int    $overwrite
197
+	 * @return bool
198
+	 */
199
+	public function registerDependencies(
200
+		$class,
201
+		array $dependencies,
202
+		$overwrite = EE_Dependency_Map::KEEP_EXISTING_DEPENDENCIES
203
+	) {
204
+		$class = trim($class, '\\');
205
+		$registered = false;
206
+		if (empty(self::$_instance->_dependency_map[ $class ])) {
207
+			self::$_instance->_dependency_map[ $class ] = array();
208
+		}
209
+		// we need to make sure that any aliases used when registering a dependency
210
+		// get resolved to the correct class name
211
+		foreach ($dependencies as $dependency => $load_source) {
212
+			$alias = self::$_instance->getFqnForAlias($dependency);
213
+			if ($overwrite === EE_Dependency_Map::OVERWRITE_DEPENDENCIES
214
+				|| ! isset(self::$_instance->_dependency_map[ $class ][ $alias ])
215
+			) {
216
+				unset($dependencies[ $dependency ]);
217
+				$dependencies[ $alias ] = $load_source;
218
+				$registered = true;
219
+			}
220
+		}
221
+		// now add our two lists of dependencies together.
222
+		// using Union (+=) favours the arrays in precedence from left to right,
223
+		// so $dependencies is NOT overwritten because it is listed first
224
+		// ie: with A = B + C, entries in B take precedence over duplicate entries in C
225
+		// Union is way faster than array_merge() but should be used with caution...
226
+		// especially with numerically indexed arrays
227
+		$dependencies += self::$_instance->_dependency_map[ $class ];
228
+		// now we need to ensure that the resulting dependencies
229
+		// array only has the entries that are required for the class
230
+		// so first count how many dependencies were originally registered for the class
231
+		$dependency_count = count(self::$_instance->_dependency_map[ $class ]);
232
+		// if that count is non-zero (meaning dependencies were already registered)
233
+		self::$_instance->_dependency_map[ $class ] = $dependency_count
234
+			// then truncate the  final array to match that count
235
+			? array_slice($dependencies, 0, $dependency_count)
236
+			// otherwise just take the incoming array because nothing previously existed
237
+			: $dependencies;
238
+		return $registered;
239
+	}
240
+
241
+
242
+	/**
243
+	 * @param string $class_name
244
+	 * @param string $loader
245
+	 * @return bool
246
+	 * @throws DomainException
247
+	 */
248
+	public static function register_class_loader($class_name, $loader = 'load_core')
249
+	{
250
+		if (! $loader instanceof Closure && strpos($class_name, '\\') !== false) {
251
+			throw new DomainException(
252
+				esc_html__('Don\'t use class loaders for FQCNs.', 'event_espresso')
253
+			);
254
+		}
255
+		// check that loader is callable or method starts with "load_" and exists in EE_Registry
256
+		if (! is_callable($loader)
257
+			&& (
258
+				strpos($loader, 'load_') !== 0
259
+				|| ! method_exists('EE_Registry', $loader)
260
+			)
261
+		) {
262
+			throw new DomainException(
263
+				sprintf(
264
+					esc_html__(
265
+						'"%1$s" is not a valid loader method on EE_Registry.',
266
+						'event_espresso'
267
+					),
268
+					$loader
269
+				)
270
+			);
271
+		}
272
+		$class_name = self::$_instance->getFqnForAlias($class_name);
273
+		if (! isset(self::$_instance->_class_loaders[ $class_name ])) {
274
+			self::$_instance->_class_loaders[ $class_name ] = $loader;
275
+			return true;
276
+		}
277
+		return false;
278
+	}
279
+
280
+
281
+	/**
282
+	 * @return array
283
+	 */
284
+	public function dependency_map()
285
+	{
286
+		return $this->_dependency_map;
287
+	}
288
+
289
+
290
+	/**
291
+	 * returns TRUE if dependency map contains a listing for the provided class name
292
+	 *
293
+	 * @param string $class_name
294
+	 * @return boolean
295
+	 */
296
+	public function has($class_name = '')
297
+	{
298
+		// all legacy models have the same dependencies
299
+		if (strpos($class_name, 'EEM_') === 0) {
300
+			$class_name = 'LEGACY_MODELS';
301
+		}
302
+		return isset($this->_dependency_map[ $class_name ]) ? true : false;
303
+	}
304
+
305
+
306
+	/**
307
+	 * returns TRUE if dependency map contains a listing for the provided class name AND dependency
308
+	 *
309
+	 * @param string $class_name
310
+	 * @param string $dependency
311
+	 * @return bool
312
+	 */
313
+	public function has_dependency_for_class($class_name = '', $dependency = '')
314
+	{
315
+		// all legacy models have the same dependencies
316
+		if (strpos($class_name, 'EEM_') === 0) {
317
+			$class_name = 'LEGACY_MODELS';
318
+		}
319
+		$dependency = $this->getFqnForAlias($dependency, $class_name);
320
+		return isset($this->_dependency_map[ $class_name ][ $dependency ])
321
+			? true
322
+			: false;
323
+	}
324
+
325
+
326
+	/**
327
+	 * returns loading strategy for whether a previously cached dependency should be loaded or a new instance returned
328
+	 *
329
+	 * @param string $class_name
330
+	 * @param string $dependency
331
+	 * @return int
332
+	 */
333
+	public function loading_strategy_for_class_dependency($class_name = '', $dependency = '')
334
+	{
335
+		// all legacy models have the same dependencies
336
+		if (strpos($class_name, 'EEM_') === 0) {
337
+			$class_name = 'LEGACY_MODELS';
338
+		}
339
+		$dependency = $this->getFqnForAlias($dependency);
340
+		return $this->has_dependency_for_class($class_name, $dependency)
341
+			? $this->_dependency_map[ $class_name ][ $dependency ]
342
+			: EE_Dependency_Map::not_registered;
343
+	}
344
+
345
+
346
+	/**
347
+	 * @param string $class_name
348
+	 * @return string | Closure
349
+	 */
350
+	public function class_loader($class_name)
351
+	{
352
+		// all legacy models use load_model()
353
+		if (strpos($class_name, 'EEM_') === 0) {
354
+			return 'load_model';
355
+		}
356
+		$class_name = $this->getFqnForAlias($class_name);
357
+		return isset($this->_class_loaders[ $class_name ]) ? $this->_class_loaders[ $class_name ] : '';
358
+	}
359
+
360
+
361
+	/**
362
+	 * @return array
363
+	 */
364
+	public function class_loaders()
365
+	{
366
+		return $this->_class_loaders;
367
+	}
368
+
369
+
370
+	/**
371
+	 * adds an alias for a classname
372
+	 *
373
+	 * @param string $fqcn      the class name that should be used (concrete class to replace interface)
374
+	 * @param string $alias     the class name that would be type hinted for (abstract parent or interface)
375
+	 * @param string $for_class the class that has the dependency (is type hinting for the interface)
376
+	 */
377
+	public function add_alias($fqcn, $alias, $for_class = '')
378
+	{
379
+		$this->class_cache->addAlias($fqcn, $alias, $for_class);
380
+	}
381
+
382
+
383
+	/**
384
+	 * Returns TRUE if the provided fully qualified name IS an alias
385
+	 * WHY?
386
+	 * Because if a class is type hinting for a concretion,
387
+	 * then why would we need to find another class to supply it?
388
+	 * ie: if a class asks for `Fully/Qualified/Namespace/SpecificClassName`,
389
+	 * then give it an instance of `Fully/Qualified/Namespace/SpecificClassName`.
390
+	 * Don't go looking for some substitute.
391
+	 * Whereas if a class is type hinting for an interface...
392
+	 * then we need to find an actual class to use.
393
+	 * So the interface IS the alias for some other FQN,
394
+	 * and we need to find out if `Fully/Qualified/Namespace/SomeInterface`
395
+	 * represents some other class.
396
+	 *
397
+	 * @param string $fqn
398
+	 * @param string $for_class
399
+	 * @return bool
400
+	 */
401
+	public function isAlias($fqn = '', $for_class = '')
402
+	{
403
+		return $this->class_cache->isAlias($fqn, $for_class);
404
+	}
405
+
406
+
407
+	/**
408
+	 * Returns a FQN for provided alias if one exists, otherwise returns the original $alias
409
+	 * functions recursively, so that multiple aliases can be used to drill down to a FQN
410
+	 *  for example:
411
+	 *      if the following two entries were added to the _aliases array:
412
+	 *          array(
413
+	 *              'interface_alias'           => 'some\namespace\interface'
414
+	 *              'some\namespace\interface'  => 'some\namespace\classname'
415
+	 *          )
416
+	 *      then one could use EE_Registry::instance()->create( 'interface_alias' )
417
+	 *      to load an instance of 'some\namespace\classname'
418
+	 *
419
+	 * @param string $alias
420
+	 * @param string $for_class
421
+	 * @return string
422
+	 */
423
+	public function getFqnForAlias($alias = '', $for_class = '')
424
+	{
425
+		return (string) $this->class_cache->getFqnForAlias($alias, $for_class);
426
+	}
427
+
428
+
429
+	/**
430
+	 * Registers the core dependencies and whether a previously instantiated object should be loaded from the cache,
431
+	 * if one exists, or whether a new object should be generated every time the requested class is loaded.
432
+	 * This is done by using the following class constants:
433
+	 *        EE_Dependency_Map::load_from_cache - loads previously instantiated object
434
+	 *        EE_Dependency_Map::load_new_object - generates a new object every time
435
+	 */
436
+	protected function _register_core_dependencies()
437
+	{
438
+		$this->_dependency_map = array(
439
+			'EE_Request_Handler'                                                                                          => array(
440
+				'EE_Request' => EE_Dependency_Map::load_from_cache,
441
+			),
442
+			'EE_System'                                                                                                   => array(
443
+				'EE_Registry'                                 => EE_Dependency_Map::load_from_cache,
444
+				'EventEspresso\core\services\loaders\Loader'  => EE_Dependency_Map::load_from_cache,
445
+				'EventEspresso\core\services\request\Request' => EE_Dependency_Map::load_from_cache,
446
+				'EE_Maintenance_Mode'                         => EE_Dependency_Map::load_from_cache,
447
+			),
448
+			'EE_Session'                                                                                                  => array(
449
+				'EventEspresso\core\services\cache\TransientCacheStorage'  => EE_Dependency_Map::load_from_cache,
450
+				'EventEspresso\core\domain\values\session\SessionLifespan' => EE_Dependency_Map::load_from_cache,
451
+				'EventEspresso\core\services\request\Request'              => EE_Dependency_Map::load_from_cache,
452
+				'EE_Encryption'                                            => EE_Dependency_Map::load_from_cache,
453
+			),
454
+			'EE_Cart'                                                                                                     => array(
455
+				'EE_Session' => EE_Dependency_Map::load_from_cache,
456
+			),
457
+			'EE_Front_Controller'                                                                                         => array(
458
+				'EE_Registry'              => EE_Dependency_Map::load_from_cache,
459
+				'EE_Request_Handler'       => EE_Dependency_Map::load_from_cache,
460
+				'EE_Module_Request_Router' => EE_Dependency_Map::load_from_cache,
461
+			),
462
+			'EE_Messenger_Collection_Loader'                                                                              => array(
463
+				'EE_Messenger_Collection' => EE_Dependency_Map::load_new_object,
464
+			),
465
+			'EE_Message_Type_Collection_Loader'                                                                           => array(
466
+				'EE_Message_Type_Collection' => EE_Dependency_Map::load_new_object,
467
+			),
468
+			'EE_Message_Resource_Manager'                                                                                 => array(
469
+				'EE_Messenger_Collection_Loader'    => EE_Dependency_Map::load_new_object,
470
+				'EE_Message_Type_Collection_Loader' => EE_Dependency_Map::load_new_object,
471
+				'EEM_Message_Template_Group'        => EE_Dependency_Map::load_from_cache,
472
+			),
473
+			'EE_Message_Factory'                                                                                          => array(
474
+				'EE_Message_Resource_Manager' => EE_Dependency_Map::load_from_cache,
475
+			),
476
+			'EE_messages'                                                                                                 => array(
477
+				'EE_Message_Resource_Manager' => EE_Dependency_Map::load_from_cache,
478
+			),
479
+			'EE_Messages_Generator'                                                                                       => array(
480
+				'EE_Messages_Queue'                    => EE_Dependency_Map::load_new_object,
481
+				'EE_Messages_Data_Handler_Collection'  => EE_Dependency_Map::load_new_object,
482
+				'EE_Message_Template_Group_Collection' => EE_Dependency_Map::load_new_object,
483
+				'EEH_Parse_Shortcodes'                 => EE_Dependency_Map::load_from_cache,
484
+			),
485
+			'EE_Messages_Processor'                                                                                       => array(
486
+				'EE_Message_Resource_Manager' => EE_Dependency_Map::load_from_cache,
487
+			),
488
+			'EE_Messages_Queue'                                                                                           => array(
489
+				'EE_Message_Repository' => EE_Dependency_Map::load_new_object,
490
+			),
491
+			'EE_Messages_Template_Defaults'                                                                               => array(
492
+				'EEM_Message_Template_Group' => EE_Dependency_Map::load_from_cache,
493
+				'EEM_Message_Template'       => EE_Dependency_Map::load_from_cache,
494
+			),
495
+			'EE_Message_To_Generate_From_Request'                                                                         => array(
496
+				'EE_Message_Resource_Manager' => EE_Dependency_Map::load_from_cache,
497
+				'EE_Request_Handler'          => EE_Dependency_Map::load_from_cache,
498
+			),
499
+			'EventEspresso\core\services\commands\CommandBus'                                                             => array(
500
+				'EventEspresso\core\services\commands\CommandHandlerManager' => EE_Dependency_Map::load_from_cache,
501
+			),
502
+			'EventEspresso\services\commands\CommandHandler'                                                              => array(
503
+				'EE_Registry'         => EE_Dependency_Map::load_from_cache,
504
+				'CommandBusInterface' => EE_Dependency_Map::load_from_cache,
505
+			),
506
+			'EventEspresso\core\services\commands\CommandHandlerManager'                                                  => array(
507
+				'EventEspresso\core\services\loaders\Loader' => EE_Dependency_Map::load_from_cache,
508
+			),
509
+			'EventEspresso\core\services\commands\CompositeCommandHandler'                                                => array(
510
+				'EventEspresso\core\services\commands\CommandBus'     => EE_Dependency_Map::load_from_cache,
511
+				'EventEspresso\core\services\commands\CommandFactory' => EE_Dependency_Map::load_from_cache,
512
+			),
513
+			'EventEspresso\core\services\commands\CommandFactory'                                                         => array(
514
+				'EventEspresso\core\services\loaders\Loader' => EE_Dependency_Map::load_from_cache,
515
+			),
516
+			'EventEspresso\core\services\commands\middleware\CapChecker'                                                  => array(
517
+				'EventEspresso\core\domain\services\capabilities\CapabilitiesChecker' => EE_Dependency_Map::load_from_cache,
518
+			),
519
+			'EventEspresso\core\domain\services\capabilities\CapabilitiesChecker'                                         => array(
520
+				'EE_Capabilities' => EE_Dependency_Map::load_from_cache,
521
+			),
522
+			'EventEspresso\core\domain\services\capabilities\RegistrationsCapChecker'                                     => array(
523
+				'EE_Capabilities' => EE_Dependency_Map::load_from_cache,
524
+			),
525
+			'EventEspresso\core\services\commands\registration\CreateRegistrationCommandHandler'                          => array(
526
+				'EventEspresso\core\domain\services\registration\CreateRegistrationService' => EE_Dependency_Map::load_from_cache,
527
+			),
528
+			'EventEspresso\core\services\commands\registration\CopyRegistrationDetailsCommandHandler'                     => array(
529
+				'EventEspresso\core\domain\services\registration\CopyRegistrationService' => EE_Dependency_Map::load_from_cache,
530
+			),
531
+			'EventEspresso\core\services\commands\registration\CopyRegistrationPaymentsCommandHandler'                    => array(
532
+				'EventEspresso\core\domain\services\registration\CopyRegistrationService' => EE_Dependency_Map::load_from_cache,
533
+			),
534
+			'EventEspresso\core\services\commands\registration\CancelRegistrationAndTicketLineItemCommandHandler'         => array(
535
+				'EventEspresso\core\domain\services\registration\CancelTicketLineItemService' => EE_Dependency_Map::load_from_cache,
536
+			),
537
+			'EventEspresso\core\services\commands\registration\UpdateRegistrationAndTransactionAfterChangeCommandHandler' => array(
538
+				'EventEspresso\core\domain\services\registration\UpdateRegistrationService' => EE_Dependency_Map::load_from_cache,
539
+			),
540
+			'EventEspresso\core\services\commands\ticket\CreateTicketLineItemCommandHandler'                              => array(
541
+				'EventEspresso\core\domain\services\ticket\CreateTicketLineItemService' => EE_Dependency_Map::load_from_cache,
542
+			),
543
+			'EventEspresso\core\services\commands\ticket\CancelTicketLineItemCommandHandler'                              => array(
544
+				'EventEspresso\core\domain\services\ticket\CancelTicketLineItemService' => EE_Dependency_Map::load_from_cache,
545
+			),
546
+			'EventEspresso\core\domain\services\registration\CancelRegistrationService'                                   => array(
547
+				'EventEspresso\core\domain\services\ticket\CancelTicketLineItemService' => EE_Dependency_Map::load_from_cache,
548
+			),
549
+			'EventEspresso\core\services\commands\attendee\CreateAttendeeCommandHandler'                                  => array(
550
+				'EEM_Attendee' => EE_Dependency_Map::load_from_cache,
551
+			),
552
+			'EventEspresso\core\services\database\TableManager'                                                           => array(
553
+				'EventEspresso\core\services\database\TableAnalysis' => EE_Dependency_Map::load_from_cache,
554
+			),
555
+			'EE_Data_Migration_Class_Base'                                                                                => array(
556
+				'EventEspresso\core\services\database\TableAnalysis' => EE_Dependency_Map::load_from_cache,
557
+				'EventEspresso\core\services\database\TableManager'  => EE_Dependency_Map::load_from_cache,
558
+			),
559
+			'EE_DMS_Core_4_1_0'                                                                                           => array(
560
+				'EventEspresso\core\services\database\TableAnalysis' => EE_Dependency_Map::load_from_cache,
561
+				'EventEspresso\core\services\database\TableManager'  => EE_Dependency_Map::load_from_cache,
562
+			),
563
+			'EE_DMS_Core_4_2_0'                                                                                           => array(
564
+				'EventEspresso\core\services\database\TableAnalysis' => EE_Dependency_Map::load_from_cache,
565
+				'EventEspresso\core\services\database\TableManager'  => EE_Dependency_Map::load_from_cache,
566
+			),
567
+			'EE_DMS_Core_4_3_0'                                                                                           => array(
568
+				'EventEspresso\core\services\database\TableAnalysis' => EE_Dependency_Map::load_from_cache,
569
+				'EventEspresso\core\services\database\TableManager'  => EE_Dependency_Map::load_from_cache,
570
+			),
571
+			'EE_DMS_Core_4_4_0'                                                                                           => array(
572
+				'EventEspresso\core\services\database\TableAnalysis' => EE_Dependency_Map::load_from_cache,
573
+				'EventEspresso\core\services\database\TableManager'  => EE_Dependency_Map::load_from_cache,
574
+			),
575
+			'EE_DMS_Core_4_5_0'                                                                                           => array(
576
+				'EventEspresso\core\services\database\TableAnalysis' => EE_Dependency_Map::load_from_cache,
577
+				'EventEspresso\core\services\database\TableManager'  => EE_Dependency_Map::load_from_cache,
578
+			),
579
+			'EE_DMS_Core_4_6_0'                                                                                           => array(
580
+				'EventEspresso\core\services\database\TableAnalysis' => EE_Dependency_Map::load_from_cache,
581
+				'EventEspresso\core\services\database\TableManager'  => EE_Dependency_Map::load_from_cache,
582
+			),
583
+			'EE_DMS_Core_4_7_0'                                                                                           => array(
584
+				'EventEspresso\core\services\database\TableAnalysis' => EE_Dependency_Map::load_from_cache,
585
+				'EventEspresso\core\services\database\TableManager'  => EE_Dependency_Map::load_from_cache,
586
+			),
587
+			'EE_DMS_Core_4_8_0'                                                                                           => array(
588
+				'EventEspresso\core\services\database\TableAnalysis' => EE_Dependency_Map::load_from_cache,
589
+				'EventEspresso\core\services\database\TableManager'  => EE_Dependency_Map::load_from_cache,
590
+			),
591
+			'EE_DMS_Core_4_9_0'                                                                                           => array(
592
+				'EventEspresso\core\services\database\TableAnalysis' => EE_Dependency_Map::load_from_cache,
593
+				'EventEspresso\core\services\database\TableManager'  => EE_Dependency_Map::load_from_cache,
594
+			),
595
+			'EventEspresso\core\services\assets\I18nRegistry'                                                             => array(
596
+				array(),
597
+				'EventEspresso\core\domain\Domain' => EE_Dependency_Map::load_from_cache,
598
+			),
599
+			'EventEspresso\core\services\assets\Registry'                                                                 => array(
600
+				'EventEspresso\core\services\assets\AssetCollection' => EE_Dependency_Map::load_from_cache,
601
+				'EventEspresso\core\services\assets\I18nRegistry'    => EE_Dependency_Map::load_from_cache,
602
+			),
603
+			'EventEspresso\core\domain\entities\shortcodes\EspressoCancelled'                                             => array(
604
+				'EventEspresso\core\services\cache\PostRelatedCacheManager' => EE_Dependency_Map::load_from_cache,
605
+			),
606
+			'EventEspresso\core\domain\entities\shortcodes\EspressoCheckout'                                              => array(
607
+				'EventEspresso\core\services\cache\PostRelatedCacheManager' => EE_Dependency_Map::load_from_cache,
608
+			),
609
+			'EventEspresso\core\domain\entities\shortcodes\EspressoEventAttendees'                                        => array(
610
+				'EventEspresso\core\services\cache\PostRelatedCacheManager' => EE_Dependency_Map::load_from_cache,
611
+			),
612
+			'EventEspresso\core\domain\entities\shortcodes\EspressoEvents'                                                => array(
613
+				'EventEspresso\core\services\cache\PostRelatedCacheManager' => EE_Dependency_Map::load_from_cache,
614
+			),
615
+			'EventEspresso\core\domain\entities\shortcodes\EspressoThankYou'                                              => array(
616
+				'EventEspresso\core\services\cache\PostRelatedCacheManager' => EE_Dependency_Map::load_from_cache,
617
+			),
618
+			'EventEspresso\core\domain\entities\shortcodes\EspressoTicketSelector'                                        => array(
619
+				'EventEspresso\core\services\cache\PostRelatedCacheManager' => EE_Dependency_Map::load_from_cache,
620
+			),
621
+			'EventEspresso\core\domain\entities\shortcodes\EspressoTxnPage'                                               => array(
622
+				'EventEspresso\core\services\cache\PostRelatedCacheManager' => EE_Dependency_Map::load_from_cache,
623
+			),
624
+			'EventEspresso\core\services\cache\BasicCacheManager'                                                         => array(
625
+				'EventEspresso\core\services\cache\TransientCacheStorage' => EE_Dependency_Map::load_from_cache,
626
+			),
627
+			'EventEspresso\core\services\cache\PostRelatedCacheManager'                                                   => array(
628
+				'EventEspresso\core\services\cache\TransientCacheStorage' => EE_Dependency_Map::load_from_cache,
629
+			),
630
+			'EventEspresso\core\domain\services\validation\email\EmailValidationService'                                  => array(
631
+				'EE_Registration_Config'                     => EE_Dependency_Map::load_from_cache,
632
+				'EventEspresso\core\services\loaders\Loader' => EE_Dependency_Map::load_from_cache,
633
+			),
634
+			'EventEspresso\core\domain\values\EmailAddress'                                                               => array(
635
+				null,
636
+				'EventEspresso\core\domain\services\validation\email\EmailValidationService' => EE_Dependency_Map::load_from_cache,
637
+			),
638
+			'EventEspresso\core\services\orm\ModelFieldFactory'                                                           => array(
639
+				'EventEspresso\core\services\loaders\Loader' => EE_Dependency_Map::load_from_cache,
640
+			),
641
+			'LEGACY_MODELS'                                                                                               => array(
642
+				null,
643
+				'EventEspresso\core\services\database\ModelFieldFactory' => EE_Dependency_Map::load_from_cache,
644
+			),
645
+			'EE_Module_Request_Router'                                                                                    => array(
646
+				'EE_Request' => EE_Dependency_Map::load_from_cache,
647
+			),
648
+			'EE_Registration_Processor'                                                                                   => array(
649
+				'EE_Request' => EE_Dependency_Map::load_from_cache,
650
+			),
651
+			'EventEspresso\core\services\notifications\PersistentAdminNoticeManager'                                      => array(
652
+				null,
653
+				'EventEspresso\core\domain\services\capabilities\CapabilitiesChecker' => EE_Dependency_Map::load_from_cache,
654
+				'EE_Request'                                                          => EE_Dependency_Map::load_from_cache,
655
+			),
656
+			'EventEspresso\core\services\editor\EditorBlockRegistrationManager'      => array(
657
+				'EventEspresso\core\domain\entities\editor\EditorBlockCollection' => EE_Dependency_Map::load_from_cache,
658
+				'EE_Request'                                                      => EE_Dependency_Map::load_from_cache,
659
+				'EventEspresso\core\domain\Domain'                                => EE_Dependency_Map::load_from_cache,
660
+				'EventEspresso\core\services\assets\Registry' => EE_Dependency_Map::load_from_cache
661
+			),
662
+			'EE_Admin_Transactions_List_Table'                                                                            => array(
663
+				null,
664
+				'EventEspresso\core\domain\values\session\SessionLifespan' => EE_Dependency_Map::load_from_cache,
665
+			),
666
+			'EventEspresso\core\services\licensing\LicenseService'                                                        => array(
667
+				'EventEspresso\core\domain\services\pue\Stats'  => EE_Dependency_Map::load_from_cache,
668
+				'EventEspresso\core\domain\services\pue\Config' => EE_Dependency_Map::load_from_cache,
669
+			),
670
+			'EventEspresso\core\domain\services\pue\Stats'                                                                => array(
671
+				'EventEspresso\core\domain\services\pue\Config'        => EE_Dependency_Map::load_from_cache,
672
+				'EE_Maintenance_Mode'                                  => EE_Dependency_Map::load_from_cache,
673
+				'EventEspresso\core\domain\services\pue\StatsGatherer' => EE_Dependency_Map::load_from_cache,
674
+			),
675
+			'EventEspresso\core\domain\services\pue\Config'                                                               => array(
676
+				'EE_Network_Config' => EE_Dependency_Map::load_from_cache,
677
+				'EE_Config'         => EE_Dependency_Map::load_from_cache,
678
+			),
679
+			'EventEspresso\core\domain\services\pue\StatsGatherer'                                                        => array(
680
+				'EEM_Payment_Method' => EE_Dependency_Map::load_from_cache,
681
+				'EEM_Event'          => EE_Dependency_Map::load_from_cache,
682
+				'EEM_Datetime'       => EE_Dependency_Map::load_from_cache,
683
+				'EEM_Ticket'         => EE_Dependency_Map::load_from_cache,
684
+				'EEM_Registration'   => EE_Dependency_Map::load_from_cache,
685
+				'EEM_Transaction'    => EE_Dependency_Map::load_from_cache,
686
+				'EE_Config'          => EE_Dependency_Map::load_from_cache,
687
+			),
688
+			'EventEspresso\core\domain\services\admin\ExitModal'                                                          => array(
689
+				'EventEspresso\core\services\assets\Registry' => EE_Dependency_Map::load_from_cache,
690
+			),
691
+			'EventEspresso\core\domain\services\admin\PluginUpsells'                                                      => array(
692
+				'EventEspresso\core\domain\Domain' => EE_Dependency_Map::load_from_cache,
693
+			),
694
+			'EventEspresso\caffeinated\modules\recaptcha_invisible\InvisibleRecaptcha'                                    => array(
695
+				'EE_Registration_Config' => EE_Dependency_Map::load_from_cache,
696
+				'EE_Session'             => EE_Dependency_Map::load_from_cache,
697
+			),
698
+			'EventEspresso\caffeinated\modules\recaptcha_invisible\RecaptchaAdminSettings'                                => array(
699
+				'EE_Registration_Config' => EE_Dependency_Map::load_from_cache,
700
+			),
701
+			'EventEspresso\modules\ticket_selector\ProcessTicketSelector'                                                 => array(
702
+				'EE_Core_Config'                                                          => EE_Dependency_Map::load_from_cache,
703
+				'EventEspresso\core\services\request\Request'                             => EE_Dependency_Map::load_from_cache,
704
+				'EE_Session'                                                              => EE_Dependency_Map::load_from_cache,
705
+				'EEM_Ticket'                                                              => EE_Dependency_Map::load_from_cache,
706
+				'EventEspresso\modules\ticket_selector\TicketDatetimeAvailabilityTracker' => EE_Dependency_Map::load_from_cache,
707
+			),
708
+			'EventEspresso\modules\ticket_selector\TicketDatetimeAvailabilityTracker'                                     => array(
709
+				'EEM_Datetime' => EE_Dependency_Map::load_from_cache,
710
+			),
711
+			'EventEspresso\core\domain\entities\custom_post_types\CustomPostTypeDefinitions'                              => array(
712
+				'EE_Core_Config'                             => EE_Dependency_Map::load_from_cache,
713
+				'EventEspresso\core\services\loaders\Loader' => EE_Dependency_Map::load_from_cache,
714
+			),
715
+			'EventEspresso\core\domain\services\custom_post_types\RegisterCustomPostTypes'                                => array(
716
+				'EventEspresso\core\domain\entities\custom_post_types\CustomPostTypeDefinitions' => EE_Dependency_Map::load_from_cache,
717
+			),
718
+			'EventEspresso\core\domain\services\custom_post_types\RegisterCustomTaxonomies'                               => array(
719
+				'EventEspresso\core\domain\entities\custom_post_types\CustomTaxonomyDefinitions' => EE_Dependency_Map::load_from_cache,
720
+			),
721
+			'EE_CPT_Strategy'                                                                                             => array(
722
+				'EventEspresso\core\domain\entities\custom_post_types\CustomPostTypeDefinitions' => EE_Dependency_Map::load_from_cache,
723
+				'EventEspresso\core\domain\entities\custom_post_types\CustomTaxonomyDefinitions' => EE_Dependency_Map::load_from_cache,
724
+			),
725
+			'EventEspresso\core\services\loaders\ObjectIdentifier'                                                        => array(
726
+				'EventEspresso\core\services\loaders\ClassInterfaceCache' => EE_Dependency_Map::load_from_cache,
727
+			),
728
+			'EventEspresso\core\domain\services\admin\privacy\policy\PrivacyPolicy' => array(
729
+				'EEM_Payment_Method' => EE_Dependency_Map::load_from_cache,
730
+				'EventEspresso\core\domain\values\session\SessionLifespan' => EE_Dependency_Map::load_from_cache
731
+			),
732
+			'EventEspresso\core\domain\entities\editor\blocks\CoreBlocksAssetManager'                                     => array(
733
+				'EventEspresso\core\domain\Domain'            => EE_Dependency_Map::load_from_cache,
734
+				'EventEspresso\core\services\assets\Registry' => EE_Dependency_Map::load_from_cache,
735
+			),
736
+			'EventEspresso\core\services\assets\AssetManager'                                                             => array(
737
+				'EventEspresso\core\domain\Domain'                   => EE_Dependency_Map::load_from_cache,
738
+				'EventEspresso\core\services\assets\AssetCollection' => EE_Dependency_Map::load_from_cache,
739
+				'EventEspresso\core\services\assets\Registry'        => EE_Dependency_Map::load_from_cache,
740
+			),
741
+			'EventEspresso\core\domain\services\assets\CoreAssetManager'                                                  => array(
742
+				'EventEspresso\core\services\assets\AssetCollection' => EE_Dependency_Map::load_from_cache,
743
+				'EE_Currency_Config'                                 => EE_Dependency_Map::load_from_cache,
744
+				'EE_Template_Config'                                 => EE_Dependency_Map::load_from_cache,
745
+				'EventEspresso\core\domain\Domain'                   => EE_Dependency_Map::load_from_cache,
746
+				'EventEspresso\core\services\assets\Registry'        => EE_Dependency_Map::load_from_cache,
747
+			),
748
+		);
749
+	}
750
+
751
+
752
+	/**
753
+	 * Registers how core classes are loaded.
754
+	 * This can either be done by simply providing the name of one of the EE_Registry loader methods such as:
755
+	 *        'EE_Request_Handler' => 'load_core'
756
+	 *        'EE_Messages_Queue'  => 'load_lib'
757
+	 *        'EEH_Debug_Tools'    => 'load_helper'
758
+	 * or, if greater control is required, by providing a custom closure. For example:
759
+	 *        'Some_Class' => function () {
760
+	 *            return new Some_Class();
761
+	 *        },
762
+	 * This is required for instantiating dependencies
763
+	 * where an interface has been type hinted in a class constructor. For example:
764
+	 *        'Required_Interface' => function () {
765
+	 *            return new A_Class_That_Implements_Required_Interface();
766
+	 *        },
767
+	 */
768
+	protected function _register_core_class_loaders()
769
+	{
770
+		// for PHP5.3 compat, we need to register any properties called here in a variable because `$this` cannot
771
+		// be used in a closure.
772
+		$request = &$this->request;
773
+		$response = &$this->response;
774
+		$legacy_request = &$this->legacy_request;
775
+		// $loader = &$this->loader;
776
+		$this->_class_loaders = array(
777
+			// load_core
778
+			'EE_Capabilities'                              => 'load_core',
779
+			'EE_Encryption'                                => 'load_core',
780
+			'EE_Front_Controller'                          => 'load_core',
781
+			'EE_Module_Request_Router'                     => 'load_core',
782
+			'EE_Registry'                                  => 'load_core',
783
+			'EE_Request'                                   => function () use (&$legacy_request) {
784
+				return $legacy_request;
785
+			},
786
+			'EventEspresso\core\services\request\Request'  => function () use (&$request) {
787
+				return $request;
788
+			},
789
+			'EventEspresso\core\services\request\Response' => function () use (&$response) {
790
+				return $response;
791
+			},
792
+			'EE_Base'                                      => 'load_core',
793
+			'EE_Request_Handler'                           => 'load_core',
794
+			'EE_Session'                                   => 'load_core',
795
+			'EE_Cron_Tasks'                                => 'load_core',
796
+			'EE_System'                                    => 'load_core',
797
+			'EE_Maintenance_Mode'                          => 'load_core',
798
+			'EE_Register_CPTs'                             => 'load_core',
799
+			'EE_Admin'                                     => 'load_core',
800
+			'EE_CPT_Strategy'                              => 'load_core',
801
+			// load_lib
802
+			'EE_Message_Resource_Manager'                  => 'load_lib',
803
+			'EE_Message_Type_Collection'                   => 'load_lib',
804
+			'EE_Message_Type_Collection_Loader'            => 'load_lib',
805
+			'EE_Messenger_Collection'                      => 'load_lib',
806
+			'EE_Messenger_Collection_Loader'               => 'load_lib',
807
+			'EE_Messages_Processor'                        => 'load_lib',
808
+			'EE_Message_Repository'                        => 'load_lib',
809
+			'EE_Messages_Queue'                            => 'load_lib',
810
+			'EE_Messages_Data_Handler_Collection'          => 'load_lib',
811
+			'EE_Message_Template_Group_Collection'         => 'load_lib',
812
+			'EE_Payment_Method_Manager'                    => 'load_lib',
813
+			'EE_Messages_Generator'                        => function () {
814
+				return EE_Registry::instance()->load_lib(
815
+					'Messages_Generator',
816
+					array(),
817
+					false,
818
+					false
819
+				);
820
+			},
821
+			'EE_Messages_Template_Defaults'                => function ($arguments = array()) {
822
+				return EE_Registry::instance()->load_lib(
823
+					'Messages_Template_Defaults',
824
+					$arguments,
825
+					false,
826
+					false
827
+				);
828
+			},
829
+			// load_helper
830
+			'EEH_Parse_Shortcodes'                         => function () {
831
+				if (EE_Registry::instance()->load_helper('Parse_Shortcodes')) {
832
+					return new EEH_Parse_Shortcodes();
833
+				}
834
+				return null;
835
+			},
836
+			'EE_Template_Config'                           => function () {
837
+				return EE_Config::instance()->template_settings;
838
+			},
839
+			'EE_Currency_Config'                           => function () {
840
+				return EE_Config::instance()->currency;
841
+			},
842
+			'EE_Registration_Config'                       => function () {
843
+				return EE_Config::instance()->registration;
844
+			},
845
+			'EE_Core_Config'                               => function () {
846
+				return EE_Config::instance()->core;
847
+			},
848
+			'EventEspresso\core\services\loaders\Loader'   => function () {
849
+				return LoaderFactory::getLoader();
850
+			},
851
+			'EE_Network_Config'                            => function () {
852
+				return EE_Network_Config::instance();
853
+			},
854
+			'EE_Config'                                    => function () {
855
+				return EE_Config::instance();
856
+			},
857
+			'EventEspresso\core\domain\Domain'             => function () {
858
+				return DomainFactory::getEventEspressoCoreDomain();
859
+			},
860
+		);
861
+	}
862
+
863
+
864
+	/**
865
+	 * can be used for supplying alternate names for classes,
866
+	 * or for connecting interface names to instantiable classes
867
+	 */
868
+	protected function _register_core_aliases()
869
+	{
870
+		$aliases = array(
871
+			'CommandBusInterface'                                                          => 'EventEspresso\core\services\commands\CommandBusInterface',
872
+			'EventEspresso\core\services\commands\CommandBusInterface'                     => 'EventEspresso\core\services\commands\CommandBus',
873
+			'CommandHandlerManagerInterface'                                               => 'EventEspresso\core\services\commands\CommandHandlerManagerInterface',
874
+			'EventEspresso\core\services\commands\CommandHandlerManagerInterface'          => 'EventEspresso\core\services\commands\CommandHandlerManager',
875
+			'CapChecker'                                                                   => 'EventEspresso\core\services\commands\middleware\CapChecker',
876
+			'AddActionHook'                                                                => 'EventEspresso\core\services\commands\middleware\AddActionHook',
877
+			'CapabilitiesChecker'                                                          => 'EventEspresso\core\domain\services\capabilities\CapabilitiesChecker',
878
+			'CapabilitiesCheckerInterface'                                                 => 'EventEspresso\core\domain\services\capabilities\CapabilitiesCheckerInterface',
879
+			'EventEspresso\core\domain\services\capabilities\CapabilitiesCheckerInterface' => 'EventEspresso\core\domain\services\capabilities\CapabilitiesChecker',
880
+			'CreateRegistrationService'                                                    => 'EventEspresso\core\domain\services\registration\CreateRegistrationService',
881
+			'CreateRegistrationCommandHandler'                                             => 'EventEspresso\core\services\commands\registration\CreateRegistrationCommand',
882
+			'CopyRegistrationDetailsCommandHandler'                                        => 'EventEspresso\core\services\commands\registration\CopyRegistrationDetailsCommand',
883
+			'CopyRegistrationPaymentsCommandHandler'                                       => 'EventEspresso\core\services\commands\registration\CopyRegistrationPaymentsCommand',
884
+			'CancelRegistrationAndTicketLineItemCommandHandler'                            => 'EventEspresso\core\services\commands\registration\CancelRegistrationAndTicketLineItemCommandHandler',
885
+			'UpdateRegistrationAndTransactionAfterChangeCommandHandler'                    => 'EventEspresso\core\services\commands\registration\UpdateRegistrationAndTransactionAfterChangeCommandHandler',
886
+			'CreateTicketLineItemCommandHandler'                                           => 'EventEspresso\core\services\commands\ticket\CreateTicketLineItemCommand',
887
+			'CreateTransactionCommandHandler'                                              => 'EventEspresso\core\services\commands\transaction\CreateTransactionCommandHandler',
888
+			'CreateAttendeeCommandHandler'                                                 => 'EventEspresso\core\services\commands\attendee\CreateAttendeeCommandHandler',
889
+			'TableManager'                                                                 => 'EventEspresso\core\services\database\TableManager',
890
+			'TableAnalysis'                                                                => 'EventEspresso\core\services\database\TableAnalysis',
891
+			'EspressoShortcode'                                                            => 'EventEspresso\core\services\shortcodes\EspressoShortcode',
892
+			'ShortcodeInterface'                                                           => 'EventEspresso\core\services\shortcodes\ShortcodeInterface',
893
+			'EventEspresso\core\services\shortcodes\ShortcodeInterface'                    => 'EventEspresso\core\services\shortcodes\EspressoShortcode',
894
+			'EventEspresso\core\services\cache\CacheStorageInterface'                      => 'EventEspresso\core\services\cache\TransientCacheStorage',
895
+			'LoaderInterface'                                                              => 'EventEspresso\core\services\loaders\LoaderInterface',
896
+			'EventEspresso\core\services\loaders\LoaderInterface'                          => 'EventEspresso\core\services\loaders\Loader',
897
+			'CommandFactoryInterface'                                                      => 'EventEspresso\core\services\commands\CommandFactoryInterface',
898
+			'EventEspresso\core\services\commands\CommandFactoryInterface'                 => 'EventEspresso\core\services\commands\CommandFactory',
899
+			'EventEspresso\core\domain\services\session\SessionIdentifierInterface'        => 'EE_Session',
900
+			'EmailValidatorInterface'                                                      => 'EventEspresso\core\domain\services\validation\email\EmailValidatorInterface',
901
+			'EventEspresso\core\domain\services\validation\email\EmailValidatorInterface'  => 'EventEspresso\core\domain\services\validation\email\EmailValidationService',
902
+			'NoticeConverterInterface'                                                     => 'EventEspresso\core\services\notices\NoticeConverterInterface',
903
+			'EventEspresso\core\services\notices\NoticeConverterInterface'                 => 'EventEspresso\core\services\notices\ConvertNoticesToEeErrors',
904
+			'NoticesContainerInterface'                                                    => 'EventEspresso\core\services\notices\NoticesContainerInterface',
905
+			'EventEspresso\core\services\notices\NoticesContainerInterface'                => 'EventEspresso\core\services\notices\NoticesContainer',
906
+			'EventEspresso\core\services\request\RequestInterface'                         => 'EventEspresso\core\services\request\Request',
907
+			'EventEspresso\core\services\request\ResponseInterface'                        => 'EventEspresso\core\services\request\Response',
908
+			'EventEspresso\core\domain\DomainInterface'                                    => 'EventEspresso\core\domain\Domain',
909
+		);
910
+		foreach ($aliases as $alias => $fqn) {
911
+			if (is_array($fqn)) {
912
+				foreach ($fqn as $class => $for_class) {
913
+					$this->class_cache->addAlias($class, $alias, $for_class);
914
+				}
915
+				continue;
916
+			}
917
+			$this->class_cache->addAlias($fqn, $alias);
918
+		}
919
+		if (! (defined('DOING_AJAX') && DOING_AJAX) && is_admin()) {
920
+			$this->class_cache->addAlias(
921
+				'EventEspresso\core\services\notices\ConvertNoticesToAdminNotices',
922
+				'EventEspresso\core\services\notices\NoticeConverterInterface'
923
+			);
924
+		}
925
+	}
926
+
927
+
928
+	/**
929
+	 * This is used to reset the internal map and class_loaders to their original default state at the beginning of the
930
+	 * request Primarily used by unit tests.
931
+	 */
932
+	public function reset()
933
+	{
934
+		$this->_register_core_class_loaders();
935
+		$this->_register_core_dependencies();
936
+	}
937
+
938
+
939
+	/**
940
+	 * PLZ NOTE: a better name for this method would be is_alias()
941
+	 * because it returns TRUE if the provided fully qualified name IS an alias
942
+	 * WHY?
943
+	 * Because if a class is type hinting for a concretion,
944
+	 * then why would we need to find another class to supply it?
945
+	 * ie: if a class asks for `Fully/Qualified/Namespace/SpecificClassName`,
946
+	 * then give it an instance of `Fully/Qualified/Namespace/SpecificClassName`.
947
+	 * Don't go looking for some substitute.
948
+	 * Whereas if a class is type hinting for an interface...
949
+	 * then we need to find an actual class to use.
950
+	 * So the interface IS the alias for some other FQN,
951
+	 * and we need to find out if `Fully/Qualified/Namespace/SomeInterface`
952
+	 * represents some other class.
953
+	 *
954
+	 * @deprecated $VID:$
955
+	 * @param string $fqn
956
+	 * @param string $for_class
957
+	 * @return bool
958
+	 */
959
+	public function has_alias($fqn = '', $for_class = '')
960
+	{
961
+		return $this->isAlias($fqn, $for_class);
962
+	}
963
+
964
+
965
+	/**
966
+	 * PLZ NOTE: a better name for this method would be get_fqn_for_alias()
967
+	 * because it returns a FQN for provided alias if one exists, otherwise returns the original $alias
968
+	 * functions recursively, so that multiple aliases can be used to drill down to a FQN
969
+	 *  for example:
970
+	 *      if the following two entries were added to the _aliases array:
971
+	 *          array(
972
+	 *              'interface_alias'           => 'some\namespace\interface'
973
+	 *              'some\namespace\interface'  => 'some\namespace\classname'
974
+	 *          )
975
+	 *      then one could use EE_Registry::instance()->create( 'interface_alias' )
976
+	 *      to load an instance of 'some\namespace\classname'
977
+	 *
978
+	 * @deprecated $VID:$
979
+	 * @param string $alias
980
+	 * @param string $for_class
981
+	 * @return string
982
+	 */
983
+	public function get_alias($alias = '', $for_class = '')
984
+	{
985
+		return $this->getFqnForAlias($alias, $for_class);
986
+	}
987 987
 }
Please login to merge, or discard this patch.
core/EE_System.core.php 2 patches
Indentation   +1264 added lines, -1264 removed lines patch added patch discarded remove patch
@@ -27,1268 +27,1268 @@
 block discarded – undo
27 27
 final class EE_System implements ResettableInterface
28 28
 {
29 29
 
30
-    /**
31
-     * indicates this is a 'normal' request. Ie, not activation, nor upgrade, nor activation.
32
-     * So examples of this would be a normal GET request on the frontend or backend, or a POST, etc
33
-     */
34
-    const req_type_normal = 0;
35
-
36
-    /**
37
-     * Indicates this is a brand new installation of EE so we should install
38
-     * tables and default data etc
39
-     */
40
-    const req_type_new_activation = 1;
41
-
42
-    /**
43
-     * we've detected that EE has been reactivated (or EE was activated during maintenance mode,
44
-     * and we just exited maintenance mode). We MUST check the database is setup properly
45
-     * and that default data is setup too
46
-     */
47
-    const req_type_reactivation = 2;
48
-
49
-    /**
50
-     * indicates that EE has been upgraded since its previous request.
51
-     * We may have data migration scripts to call and will want to trigger maintenance mode
52
-     */
53
-    const req_type_upgrade = 3;
54
-
55
-    /**
56
-     * TODO  will detect that EE has been DOWNGRADED. We probably don't want to run in this case...
57
-     */
58
-    const req_type_downgrade = 4;
59
-
60
-    /**
61
-     * @deprecated since version 4.6.0.dev.006
62
-     * Now whenever a new_activation is detected the request type is still just
63
-     * new_activation (same for reactivation, upgrade, downgrade etc), but if we'r ein maintenance mode
64
-     * EE_System::initialize_db_if_no_migrations_required and EE_Addon::initialize_db_if_no_migrations_required
65
-     * will instead enqueue that EE plugin's db initialization for when we're taken out of maintenance mode.
66
-     * (Specifically, when the migration manager indicates migrations are finished
67
-     * EE_Data_Migration_Manager::initialize_db_for_enqueued_ee_plugins() will be called)
68
-     */
69
-    const req_type_activation_but_not_installed = 5;
70
-
71
-    /**
72
-     * option prefix for recording the activation history (like core's "espresso_db_update") of addons
73
-     */
74
-    const addon_activation_history_option_prefix = 'ee_addon_activation_history_';
75
-
76
-    /**
77
-     * @var EE_System $_instance
78
-     */
79
-    private static $_instance;
80
-
81
-    /**
82
-     * @var EE_Registry $registry
83
-     */
84
-    private $registry;
85
-
86
-    /**
87
-     * @var LoaderInterface $loader
88
-     */
89
-    private $loader;
90
-
91
-    /**
92
-     * @var EE_Capabilities $capabilities
93
-     */
94
-    private $capabilities;
95
-
96
-    /**
97
-     * @var RequestInterface $request
98
-     */
99
-    private $request;
100
-
101
-    /**
102
-     * @var EE_Maintenance_Mode $maintenance_mode
103
-     */
104
-    private $maintenance_mode;
105
-
106
-    /**
107
-     * Stores which type of request this is, options being one of the constants on EE_System starting with req_type_*.
108
-     * It can be a brand-new activation, a reactivation, an upgrade, a downgrade, or a normal request.
109
-     *
110
-     * @var int $_req_type
111
-     */
112
-    private $_req_type;
113
-
114
-    /**
115
-     * Whether or not there was a non-micro version change in EE core version during this request
116
-     *
117
-     * @var boolean $_major_version_change
118
-     */
119
-    private $_major_version_change = false;
120
-
121
-    /**
122
-     * A Context DTO dedicated solely to identifying the current request type.
123
-     *
124
-     * @var RequestTypeContextCheckerInterface $request_type
125
-     */
126
-    private $request_type;
127
-
128
-
129
-    /**
130
-     * @singleton method used to instantiate class object
131
-     * @param EE_Registry|null         $registry
132
-     * @param LoaderInterface|null     $loader
133
-     * @param RequestInterface|null    $request
134
-     * @param EE_Maintenance_Mode|null $maintenance_mode
135
-     * @return EE_System
136
-     */
137
-    public static function instance(
138
-        EE_Registry $registry = null,
139
-        LoaderInterface $loader = null,
140
-        RequestInterface $request = null,
141
-        EE_Maintenance_Mode $maintenance_mode = null
142
-    ) {
143
-        // check if class object is instantiated
144
-        if (! self::$_instance instanceof EE_System) {
145
-            self::$_instance = new self($registry, $loader, $request, $maintenance_mode);
146
-        }
147
-        return self::$_instance;
148
-    }
149
-
150
-
151
-    /**
152
-     * resets the instance and returns it
153
-     *
154
-     * @return EE_System
155
-     */
156
-    public static function reset()
157
-    {
158
-        self::$_instance->_req_type = null;
159
-        // make sure none of the old hooks are left hanging around
160
-        remove_all_actions('AHEE__EE_System__perform_activations_upgrades_and_migrations');
161
-        // we need to reset the migration manager in order for it to detect DMSs properly
162
-        EE_Data_Migration_Manager::reset();
163
-        self::instance()->detect_activations_or_upgrades();
164
-        self::instance()->perform_activations_upgrades_and_migrations();
165
-        return self::instance();
166
-    }
167
-
168
-
169
-    /**
170
-     * sets hooks for running rest of system
171
-     * provides "AHEE__EE_System__construct__complete" hook for EE Addons to use as their starting point
172
-     * starting EE Addons from any other point may lead to problems
173
-     *
174
-     * @param EE_Registry         $registry
175
-     * @param LoaderInterface     $loader
176
-     * @param RequestInterface    $request
177
-     * @param EE_Maintenance_Mode $maintenance_mode
178
-     */
179
-    private function __construct(
180
-        EE_Registry $registry,
181
-        LoaderInterface $loader,
182
-        RequestInterface $request,
183
-        EE_Maintenance_Mode $maintenance_mode
184
-    ) {
185
-        $this->registry = $registry;
186
-        $this->loader = $loader;
187
-        $this->request = $request;
188
-        $this->maintenance_mode = $maintenance_mode;
189
-        do_action('AHEE__EE_System__construct__begin', $this);
190
-        add_action(
191
-            'AHEE__EE_Bootstrap__load_espresso_addons',
192
-            array($this, 'loadCapabilities'),
193
-            5
194
-        );
195
-        add_action(
196
-            'AHEE__EE_Bootstrap__load_espresso_addons',
197
-            array($this, 'loadCommandBus'),
198
-            7
199
-        );
200
-        add_action(
201
-            'AHEE__EE_Bootstrap__load_espresso_addons',
202
-            array($this, 'loadPluginApi'),
203
-            9
204
-        );
205
-        // allow addons to load first so that they can register autoloaders, set hooks for running DMS's, etc
206
-        add_action(
207
-            'AHEE__EE_Bootstrap__load_espresso_addons',
208
-            array($this, 'load_espresso_addons')
209
-        );
210
-        // when an ee addon is activated, we want to call the core hook(s) again
211
-        // because the newly-activated addon didn't get a chance to run at all
212
-        add_action('activate_plugin', array($this, 'load_espresso_addons'), 1);
213
-        // detect whether install or upgrade
214
-        add_action(
215
-            'AHEE__EE_Bootstrap__detect_activations_or_upgrades',
216
-            array($this, 'detect_activations_or_upgrades'),
217
-            3
218
-        );
219
-        // load EE_Config, EE_Textdomain, etc
220
-        add_action(
221
-            'AHEE__EE_Bootstrap__load_core_configuration',
222
-            array($this, 'load_core_configuration'),
223
-            5
224
-        );
225
-        // load EE_Config, EE_Textdomain, etc
226
-        add_action(
227
-            'AHEE__EE_Bootstrap__register_shortcodes_modules_and_widgets',
228
-            array($this, 'register_shortcodes_modules_and_widgets'),
229
-            7
230
-        );
231
-        // you wanna get going? I wanna get going... let's get going!
232
-        add_action(
233
-            'AHEE__EE_Bootstrap__brew_espresso',
234
-            array($this, 'brew_espresso'),
235
-            9
236
-        );
237
-        // other housekeeping
238
-        // exclude EE critical pages from wp_list_pages
239
-        add_filter(
240
-            'wp_list_pages_excludes',
241
-            array($this, 'remove_pages_from_wp_list_pages'),
242
-            10
243
-        );
244
-        // ALL EE Addons should use the following hook point to attach their initial setup too
245
-        // it's extremely important for EE Addons to register any class autoloaders so that they can be available when the EE_Config loads
246
-        do_action('AHEE__EE_System__construct__complete', $this);
247
-    }
248
-
249
-
250
-    /**
251
-     * load and setup EE_Capabilities
252
-     *
253
-     * @return void
254
-     * @throws EE_Error
255
-     */
256
-    public function loadCapabilities()
257
-    {
258
-        $this->capabilities = $this->loader->getShared('EE_Capabilities');
259
-        add_action(
260
-            'AHEE__EE_Capabilities__init_caps__before_initialization',
261
-            function () {
262
-                LoaderFactory::getLoader()->getShared('EE_Payment_Method_Manager');
263
-            }
264
-        );
265
-    }
266
-
267
-
268
-    /**
269
-     * create and cache the CommandBus, and also add middleware
270
-     * The CapChecker middleware requires the use of EE_Capabilities
271
-     * which is why we need to load the CommandBus after Caps are set up
272
-     *
273
-     * @return void
274
-     * @throws EE_Error
275
-     */
276
-    public function loadCommandBus()
277
-    {
278
-        $this->loader->getShared(
279
-            'CommandBusInterface',
280
-            array(
281
-                null,
282
-                apply_filters(
283
-                    'FHEE__EE_Load_Espresso_Core__handle_request__CommandBus_middleware',
284
-                    array(
285
-                        $this->loader->getShared('EventEspresso\core\services\commands\middleware\CapChecker'),
286
-                        $this->loader->getShared('EventEspresso\core\services\commands\middleware\AddActionHook'),
287
-                    )
288
-                ),
289
-            )
290
-        );
291
-    }
292
-
293
-
294
-    /**
295
-     * @return void
296
-     * @throws EE_Error
297
-     */
298
-    public function loadPluginApi()
299
-    {
300
-        // set autoloaders for all of the classes implementing EEI_Plugin_API
301
-        // which provide helpers for EE plugin authors to more easily register certain components with EE.
302
-        EEH_Autoloader::instance()->register_autoloaders_for_each_file_in_folder(EE_LIBRARIES . 'plugin_api');
303
-        $this->loader->getShared('EE_Request_Handler');
304
-    }
305
-
306
-
307
-    /**
308
-     * @param string $addon_name
309
-     * @param string $version_constant
310
-     * @param string $min_version_required
311
-     * @param string $load_callback
312
-     * @param string $plugin_file_constant
313
-     * @return void
314
-     */
315
-    private function deactivateIncompatibleAddon(
316
-        $addon_name,
317
-        $version_constant,
318
-        $min_version_required,
319
-        $load_callback,
320
-        $plugin_file_constant
321
-    ) {
322
-        if (! defined($version_constant)) {
323
-            return;
324
-        }
325
-        $addon_version = constant($version_constant);
326
-        if ($addon_version && version_compare($addon_version, $min_version_required, '<')) {
327
-            remove_action('AHEE__EE_System__load_espresso_addons', $load_callback);
328
-            if (! function_exists('deactivate_plugins')) {
329
-                require_once ABSPATH . 'wp-admin/includes/plugin.php';
330
-            }
331
-            deactivate_plugins(plugin_basename(constant($plugin_file_constant)));
332
-            unset($_GET['activate'], $_REQUEST['activate'], $_GET['activate-multi'], $_REQUEST['activate-multi']);
333
-            EE_Error::add_error(
334
-                sprintf(
335
-                    esc_html__(
336
-                        'We\'re sorry, but the Event Espresso %1$s addon was deactivated because version %2$s or higher is required with this version of Event Espresso core.',
337
-                        'event_espresso'
338
-                    ),
339
-                    $addon_name,
340
-                    $min_version_required
341
-                ),
342
-                __FILE__,
343
-                __FUNCTION__ . "({$addon_name})",
344
-                __LINE__
345
-            );
346
-            EE_Error::get_notices(false, true);
347
-        }
348
-    }
349
-
350
-
351
-    /**
352
-     * load_espresso_addons
353
-     * allow addons to load first so that they can set hooks for running DMS's, etc
354
-     * this is hooked into both:
355
-     *    'AHEE__EE_Bootstrap__load_core_configuration'
356
-     *        which runs during the WP 'plugins_loaded' action at priority 5
357
-     *    and the WP 'activate_plugin' hook point
358
-     *
359
-     * @access public
360
-     * @return void
361
-     */
362
-    public function load_espresso_addons()
363
-    {
364
-        $this->deactivateIncompatibleAddon(
365
-            'Wait Lists',
366
-            'EE_WAIT_LISTS_VERSION',
367
-            '1.0.0.beta.074',
368
-            'load_espresso_wait_lists',
369
-            'EE_WAIT_LISTS_PLUGIN_FILE'
370
-        );
371
-        $this->deactivateIncompatibleAddon(
372
-            'Automated Upcoming Event Notifications',
373
-            'EE_AUTOMATED_UPCOMING_EVENT_NOTIFICATION_VERSION',
374
-            '1.0.0.beta.091',
375
-            'load_espresso_automated_upcoming_event_notification',
376
-            'EE_AUTOMATED_UPCOMING_EVENT_NOTIFICATION_PLUGIN_FILE'
377
-        );
378
-        do_action('AHEE__EE_System__load_espresso_addons');
379
-        // if the WP API basic auth plugin isn't already loaded, load it now.
380
-        // We want it for mobile apps. Just include the entire plugin
381
-        // also, don't load the basic auth when a plugin is getting activated, because
382
-        // it could be the basic auth plugin, and it doesn't check if its methods are already defined
383
-        // and causes a fatal error
384
-        if ($this->request->getRequestParam('activate') !== 'true'
385
-            && ! function_exists('json_basic_auth_handler')
386
-            && ! function_exists('json_basic_auth_error')
387
-            && ! in_array(
388
-                $this->request->getRequestParam('action'),
389
-                array('activate', 'activate-selected'),
390
-                true
391
-            )
392
-        ) {
393
-            include_once EE_THIRD_PARTY . 'wp-api-basic-auth' . DS . 'basic-auth.php';
394
-        }
395
-        do_action('AHEE__EE_System__load_espresso_addons__complete');
396
-    }
397
-
398
-
399
-    /**
400
-     * detect_activations_or_upgrades
401
-     * Checks for activation or upgrade of core first;
402
-     * then also checks if any registered addons have been activated or upgraded
403
-     * This is hooked into 'AHEE__EE_Bootstrap__detect_activations_or_upgrades'
404
-     * which runs during the WP 'plugins_loaded' action at priority 3
405
-     *
406
-     * @access public
407
-     * @return void
408
-     */
409
-    public function detect_activations_or_upgrades()
410
-    {
411
-        // first off: let's make sure to handle core
412
-        $this->detect_if_activation_or_upgrade();
413
-        foreach ($this->registry->addons as $addon) {
414
-            if ($addon instanceof EE_Addon) {
415
-                // detect teh request type for that addon
416
-                $addon->detect_activation_or_upgrade();
417
-            }
418
-        }
419
-    }
420
-
421
-
422
-    /**
423
-     * detect_if_activation_or_upgrade
424
-     * Takes care of detecting whether this is a brand new install or code upgrade,
425
-     * and either setting up the DB or setting up maintenance mode etc.
426
-     *
427
-     * @access public
428
-     * @return void
429
-     */
430
-    public function detect_if_activation_or_upgrade()
431
-    {
432
-        do_action('AHEE__EE_System___detect_if_activation_or_upgrade__begin');
433
-        // check if db has been updated, or if its a brand-new installation
434
-        $espresso_db_update = $this->fix_espresso_db_upgrade_option();
435
-        $request_type = $this->detect_req_type($espresso_db_update);
436
-        // EEH_Debug_Tools::printr( $request_type, '$request_type', __FILE__, __LINE__ );
437
-        switch ($request_type) {
438
-            case EE_System::req_type_new_activation:
439
-                do_action('AHEE__EE_System__detect_if_activation_or_upgrade__new_activation');
440
-                $this->_handle_core_version_change($espresso_db_update);
441
-                break;
442
-            case EE_System::req_type_reactivation:
443
-                do_action('AHEE__EE_System__detect_if_activation_or_upgrade__reactivation');
444
-                $this->_handle_core_version_change($espresso_db_update);
445
-                break;
446
-            case EE_System::req_type_upgrade:
447
-                do_action('AHEE__EE_System__detect_if_activation_or_upgrade__upgrade');
448
-                // migrations may be required now that we've upgraded
449
-                $this->maintenance_mode->set_maintenance_mode_if_db_old();
450
-                $this->_handle_core_version_change($espresso_db_update);
451
-                break;
452
-            case EE_System::req_type_downgrade:
453
-                do_action('AHEE__EE_System__detect_if_activation_or_upgrade__downgrade');
454
-                // its possible migrations are no longer required
455
-                $this->maintenance_mode->set_maintenance_mode_if_db_old();
456
-                $this->_handle_core_version_change($espresso_db_update);
457
-                break;
458
-            case EE_System::req_type_normal:
459
-            default:
460
-                break;
461
-        }
462
-        do_action('AHEE__EE_System__detect_if_activation_or_upgrade__complete');
463
-    }
464
-
465
-
466
-    /**
467
-     * Updates the list of installed versions and sets hooks for
468
-     * initializing the database later during the request
469
-     *
470
-     * @param array $espresso_db_update
471
-     */
472
-    private function _handle_core_version_change($espresso_db_update)
473
-    {
474
-        $this->update_list_of_installed_versions($espresso_db_update);
475
-        // get ready to verify the DB is ok (provided we aren't in maintenance mode, of course)
476
-        add_action(
477
-            'AHEE__EE_System__perform_activations_upgrades_and_migrations',
478
-            array($this, 'initialize_db_if_no_migrations_required')
479
-        );
480
-    }
481
-
482
-
483
-    /**
484
-     * standardizes the wp option 'espresso_db_upgrade' which actually stores
485
-     * information about what versions of EE have been installed and activated,
486
-     * NOT necessarily the state of the database
487
-     *
488
-     * @param mixed $espresso_db_update           the value of the WordPress option.
489
-     *                                            If not supplied, fetches it from the options table
490
-     * @return array the correct value of 'espresso_db_upgrade', after saving it, if it needed correction
491
-     */
492
-    private function fix_espresso_db_upgrade_option($espresso_db_update = null)
493
-    {
494
-        do_action('FHEE__EE_System__manage_fix_espresso_db_upgrade_option__begin', $espresso_db_update);
495
-        if (! $espresso_db_update) {
496
-            $espresso_db_update = get_option('espresso_db_update');
497
-        }
498
-        // check that option is an array
499
-        if (! is_array($espresso_db_update)) {
500
-            // if option is FALSE, then it never existed
501
-            if ($espresso_db_update === false) {
502
-                // make $espresso_db_update an array and save option with autoload OFF
503
-                $espresso_db_update = array();
504
-                add_option('espresso_db_update', $espresso_db_update, '', 'no');
505
-            } else {
506
-                // option is NOT FALSE but also is NOT an array, so make it an array and save it
507
-                $espresso_db_update = array($espresso_db_update => array());
508
-                update_option('espresso_db_update', $espresso_db_update);
509
-            }
510
-        } else {
511
-            $corrected_db_update = array();
512
-            // if IS an array, but is it an array where KEYS are version numbers, and values are arrays?
513
-            foreach ($espresso_db_update as $should_be_version_string => $should_be_array) {
514
-                if (is_int($should_be_version_string) && ! is_array($should_be_array)) {
515
-                    // the key is an int, and the value IS NOT an array
516
-                    // so it must be numerically-indexed, where values are versions installed...
517
-                    // fix it!
518
-                    $version_string = $should_be_array;
519
-                    $corrected_db_update[ $version_string ] = array('unknown-date');
520
-                } else {
521
-                    // ok it checks out
522
-                    $corrected_db_update[ $should_be_version_string ] = $should_be_array;
523
-                }
524
-            }
525
-            $espresso_db_update = $corrected_db_update;
526
-            update_option('espresso_db_update', $espresso_db_update);
527
-        }
528
-        do_action('FHEE__EE_System__manage_fix_espresso_db_upgrade_option__complete', $espresso_db_update);
529
-        return $espresso_db_update;
530
-    }
531
-
532
-
533
-    /**
534
-     * Does the traditional work of setting up the plugin's database and adding default data.
535
-     * If migration script/process did not exist, this is what would happen on every activation/reactivation/upgrade.
536
-     * NOTE: if we're in maintenance mode (which would be the case if we detect there are data
537
-     * migration scripts that need to be run and a version change happens), enqueues core for database initialization,
538
-     * so that it will be done when migrations are finished
539
-     *
540
-     * @param boolean $initialize_addons_too if true, we double-check addons' database tables etc too;
541
-     * @param boolean $verify_schema         if true will re-check the database tables have the correct schema.
542
-     *                                       This is a resource-intensive job
543
-     *                                       so we prefer to only do it when necessary
544
-     * @return void
545
-     * @throws EE_Error
546
-     */
547
-    public function initialize_db_if_no_migrations_required($initialize_addons_too = false, $verify_schema = true)
548
-    {
549
-        $request_type = $this->detect_req_type();
550
-        // only initialize system if we're not in maintenance mode.
551
-        if ($this->maintenance_mode->level() !== EE_Maintenance_Mode::level_2_complete_maintenance) {
552
-            /** @var EventEspresso\core\domain\services\custom_post_types\RewriteRules $rewrite_rules */
553
-            $rewrite_rules = $this->loader->getShared(
554
-                'EventEspresso\core\domain\services\custom_post_types\RewriteRules'
555
-            );
556
-            $rewrite_rules->flush();
557
-            if ($verify_schema) {
558
-                EEH_Activation::initialize_db_and_folders();
559
-            }
560
-            EEH_Activation::initialize_db_content();
561
-            EEH_Activation::system_initialization();
562
-            if ($initialize_addons_too) {
563
-                $this->initialize_addons();
564
-            }
565
-        } else {
566
-            EE_Data_Migration_Manager::instance()->enqueue_db_initialization_for('Core');
567
-        }
568
-        if ($request_type === EE_System::req_type_new_activation
569
-            || $request_type === EE_System::req_type_reactivation
570
-            || (
571
-                $request_type === EE_System::req_type_upgrade
572
-                && $this->is_major_version_change()
573
-            )
574
-        ) {
575
-            add_action('AHEE__EE_System__initialize_last', array($this, 'redirect_to_about_ee'), 9);
576
-        }
577
-    }
578
-
579
-
580
-    /**
581
-     * Initializes the db for all registered addons
582
-     *
583
-     * @throws EE_Error
584
-     */
585
-    public function initialize_addons()
586
-    {
587
-        // foreach registered addon, make sure its db is up-to-date too
588
-        foreach ($this->registry->addons as $addon) {
589
-            if ($addon instanceof EE_Addon) {
590
-                $addon->initialize_db_if_no_migrations_required();
591
-            }
592
-        }
593
-    }
594
-
595
-
596
-    /**
597
-     * Adds the current code version to the saved wp option which stores a list of all ee versions ever installed.
598
-     *
599
-     * @param    array  $version_history
600
-     * @param    string $current_version_to_add version to be added to the version history
601
-     * @return    boolean success as to whether or not this option was changed
602
-     */
603
-    public function update_list_of_installed_versions($version_history = null, $current_version_to_add = null)
604
-    {
605
-        if (! $version_history) {
606
-            $version_history = $this->fix_espresso_db_upgrade_option($version_history);
607
-        }
608
-        if ($current_version_to_add === null) {
609
-            $current_version_to_add = espresso_version();
610
-        }
611
-        $version_history[ $current_version_to_add ][] = date('Y-m-d H:i:s', time());
612
-        // re-save
613
-        return update_option('espresso_db_update', $version_history);
614
-    }
615
-
616
-
617
-    /**
618
-     * Detects if the current version indicated in the has existed in the list of
619
-     * previously-installed versions of EE (espresso_db_update). Does NOT modify it (ie, no side-effect)
620
-     *
621
-     * @param array $espresso_db_update array from the wp option stored under the name 'espresso_db_update'.
622
-     *                                  If not supplied, fetches it from the options table.
623
-     *                                  Also, caches its result so later parts of the code can also know whether
624
-     *                                  there's been an update or not. This way we can add the current version to
625
-     *                                  espresso_db_update, but still know if this is a new install or not
626
-     * @return int one of the constants on EE_System::req_type_
627
-     */
628
-    public function detect_req_type($espresso_db_update = null)
629
-    {
630
-        if ($this->_req_type === null) {
631
-            $espresso_db_update = ! empty($espresso_db_update)
632
-                ? $espresso_db_update
633
-                : $this->fix_espresso_db_upgrade_option();
634
-            $this->_req_type = EE_System::detect_req_type_given_activation_history(
635
-                $espresso_db_update,
636
-                'ee_espresso_activation',
637
-                espresso_version()
638
-            );
639
-            $this->_major_version_change = $this->_detect_major_version_change($espresso_db_update);
640
-            $this->request->setIsActivation($this->_req_type !== EE_System::req_type_normal);
641
-        }
642
-        return $this->_req_type;
643
-    }
644
-
645
-
646
-    /**
647
-     * Returns whether or not there was a non-micro version change (ie, change in either
648
-     * the first or second number in the version. Eg 4.9.0.rc.001 to 4.10.0.rc.000,
649
-     * but not 4.9.0.rc.0001 to 4.9.1.rc.0001
650
-     *
651
-     * @param $activation_history
652
-     * @return bool
653
-     */
654
-    private function _detect_major_version_change($activation_history)
655
-    {
656
-        $previous_version = EE_System::_get_most_recently_active_version_from_activation_history($activation_history);
657
-        $previous_version_parts = explode('.', $previous_version);
658
-        $current_version_parts = explode('.', espresso_version());
659
-        return isset($previous_version_parts[0], $previous_version_parts[1], $current_version_parts[0], $current_version_parts[1])
660
-               && ($previous_version_parts[0] !== $current_version_parts[0]
661
-                   || $previous_version_parts[1] !== $current_version_parts[1]
662
-               );
663
-    }
664
-
665
-
666
-    /**
667
-     * Returns true if either the major or minor version of EE changed during this request.
668
-     * Eg 4.9.0.rc.001 to 4.10.0.rc.000, but not 4.9.0.rc.0001 to 4.9.1.rc.0001
669
-     *
670
-     * @return bool
671
-     */
672
-    public function is_major_version_change()
673
-    {
674
-        return $this->_major_version_change;
675
-    }
676
-
677
-
678
-    /**
679
-     * Determines the request type for any ee addon, given three piece of info: the current array of activation
680
-     * histories (for core that' 'espresso_db_update' wp option); the name of the WordPress option which is temporarily
681
-     * set upon activation of the plugin (for core it's 'ee_espresso_activation'); and the version that this plugin was
682
-     * just activated to (for core that will always be espresso_version())
683
-     *
684
-     * @param array  $activation_history_for_addon     the option's value which stores the activation history for this
685
-     *                                                 ee plugin. for core that's 'espresso_db_update'
686
-     * @param string $activation_indicator_option_name the name of the WordPress option that is temporarily set to
687
-     *                                                 indicate that this plugin was just activated
688
-     * @param string $version_to_upgrade_to            the version that was just upgraded to (for core that will be
689
-     *                                                 espresso_version())
690
-     * @return int one of the constants on EE_System::req_type_*
691
-     */
692
-    public static function detect_req_type_given_activation_history(
693
-        $activation_history_for_addon,
694
-        $activation_indicator_option_name,
695
-        $version_to_upgrade_to
696
-    ) {
697
-        $version_is_higher = self::_new_version_is_higher($activation_history_for_addon, $version_to_upgrade_to);
698
-        if ($activation_history_for_addon) {
699
-            // it exists, so this isn't a completely new install
700
-            // check if this version already in that list of previously installed versions
701
-            if (! isset($activation_history_for_addon[ $version_to_upgrade_to ])) {
702
-                // it a version we haven't seen before
703
-                if ($version_is_higher === 1) {
704
-                    $req_type = EE_System::req_type_upgrade;
705
-                } else {
706
-                    $req_type = EE_System::req_type_downgrade;
707
-                }
708
-                delete_option($activation_indicator_option_name);
709
-            } else {
710
-                // its not an update. maybe a reactivation?
711
-                if (get_option($activation_indicator_option_name, false)) {
712
-                    if ($version_is_higher === -1) {
713
-                        $req_type = EE_System::req_type_downgrade;
714
-                    } elseif ($version_is_higher === 0) {
715
-                        // we've seen this version before, but it's an activation. must be a reactivation
716
-                        $req_type = EE_System::req_type_reactivation;
717
-                    } else {// $version_is_higher === 1
718
-                        $req_type = EE_System::req_type_upgrade;
719
-                    }
720
-                    delete_option($activation_indicator_option_name);
721
-                } else {
722
-                    // we've seen this version before and the activation indicate doesn't show it was just activated
723
-                    if ($version_is_higher === -1) {
724
-                        $req_type = EE_System::req_type_downgrade;
725
-                    } elseif ($version_is_higher === 0) {
726
-                        // we've seen this version before and it's not an activation. its normal request
727
-                        $req_type = EE_System::req_type_normal;
728
-                    } else {// $version_is_higher === 1
729
-                        $req_type = EE_System::req_type_upgrade;
730
-                    }
731
-                }
732
-            }
733
-        } else {
734
-            // brand new install
735
-            $req_type = EE_System::req_type_new_activation;
736
-            delete_option($activation_indicator_option_name);
737
-        }
738
-        return $req_type;
739
-    }
740
-
741
-
742
-    /**
743
-     * Detects if the $version_to_upgrade_to is higher than the most recent version in
744
-     * the $activation_history_for_addon
745
-     *
746
-     * @param array  $activation_history_for_addon (keys are versions, values are arrays of times activated,
747
-     *                                             sometimes containing 'unknown-date'
748
-     * @param string $version_to_upgrade_to        (current version)
749
-     * @return int results of version_compare( $version_to_upgrade_to, $most_recently_active_version ).
750
-     *                                             ie, -1 if $version_to_upgrade_to is LOWER (downgrade);
751
-     *                                             0 if $version_to_upgrade_to MATCHES (reactivation or normal request);
752
-     *                                             1 if $version_to_upgrade_to is HIGHER (upgrade) ;
753
-     */
754
-    private static function _new_version_is_higher($activation_history_for_addon, $version_to_upgrade_to)
755
-    {
756
-        // find the most recently-activated version
757
-        $most_recently_active_version =
758
-            EE_System::_get_most_recently_active_version_from_activation_history($activation_history_for_addon);
759
-        return version_compare($version_to_upgrade_to, $most_recently_active_version);
760
-    }
761
-
762
-
763
-    /**
764
-     * Gets the most recently active version listed in the activation history,
765
-     * and if none are found (ie, it's a brand new install) returns '0.0.0.dev.000'.
766
-     *
767
-     * @param array $activation_history  (keys are versions, values are arrays of times activated,
768
-     *                                   sometimes containing 'unknown-date'
769
-     * @return string
770
-     */
771
-    private static function _get_most_recently_active_version_from_activation_history($activation_history)
772
-    {
773
-        $most_recently_active_version_activation = '1970-01-01 00:00:00';
774
-        $most_recently_active_version = '0.0.0.dev.000';
775
-        if (is_array($activation_history)) {
776
-            foreach ($activation_history as $version => $times_activated) {
777
-                // check there is a record of when this version was activated. Otherwise,
778
-                // mark it as unknown
779
-                if (! $times_activated) {
780
-                    $times_activated = array('unknown-date');
781
-                }
782
-                if (is_string($times_activated)) {
783
-                    $times_activated = array($times_activated);
784
-                }
785
-                foreach ($times_activated as $an_activation) {
786
-                    if ($an_activation !== 'unknown-date'
787
-                        && $an_activation
788
-                           > $most_recently_active_version_activation) {
789
-                        $most_recently_active_version = $version;
790
-                        $most_recently_active_version_activation = $an_activation === 'unknown-date'
791
-                            ? '1970-01-01 00:00:00'
792
-                            : $an_activation;
793
-                    }
794
-                }
795
-            }
796
-        }
797
-        return $most_recently_active_version;
798
-    }
799
-
800
-
801
-    /**
802
-     * This redirects to the about EE page after activation
803
-     *
804
-     * @return void
805
-     */
806
-    public function redirect_to_about_ee()
807
-    {
808
-        $notices = EE_Error::get_notices(false);
809
-        // if current user is an admin and it's not an ajax or rest request
810
-        if (! isset($notices['errors'])
811
-            && $this->request->isAdmin()
812
-            && apply_filters(
813
-                'FHEE__EE_System__redirect_to_about_ee__do_redirect',
814
-                $this->capabilities->current_user_can('manage_options', 'espresso_about_default')
815
-            )
816
-        ) {
817
-            $query_params = array('page' => 'espresso_about');
818
-            if (EE_System::instance()->detect_req_type() === EE_System::req_type_new_activation) {
819
-                $query_params['new_activation'] = true;
820
-            }
821
-            if (EE_System::instance()->detect_req_type() === EE_System::req_type_reactivation) {
822
-                $query_params['reactivation'] = true;
823
-            }
824
-            $url = add_query_arg($query_params, admin_url('admin.php'));
825
-            wp_safe_redirect($url);
826
-            exit();
827
-        }
828
-    }
829
-
830
-
831
-    /**
832
-     * load_core_configuration
833
-     * this is hooked into 'AHEE__EE_Bootstrap__load_core_configuration'
834
-     * which runs during the WP 'plugins_loaded' action at priority 5
835
-     *
836
-     * @return void
837
-     * @throws ReflectionException
838
-     */
839
-    public function load_core_configuration()
840
-    {
841
-        do_action('AHEE__EE_System__load_core_configuration__begin', $this);
842
-        $this->loader->getShared('EE_Load_Textdomain');
843
-        // load textdomain
844
-        EE_Load_Textdomain::load_textdomain();
845
-        // load and setup EE_Config and EE_Network_Config
846
-        $config = $this->loader->getShared('EE_Config');
847
-        $this->loader->getShared('EE_Network_Config');
848
-        // setup autoloaders
849
-        // enable logging?
850
-        if ($config->admin->use_full_logging) {
851
-            $this->loader->getShared('EE_Log');
852
-        }
853
-        // check for activation errors
854
-        $activation_errors = get_option('ee_plugin_activation_errors', false);
855
-        if ($activation_errors) {
856
-            EE_Error::add_error($activation_errors, __FILE__, __FUNCTION__, __LINE__);
857
-            update_option('ee_plugin_activation_errors', false);
858
-        }
859
-        // get model names
860
-        $this->_parse_model_names();
861
-        // load caf stuff a chance to play during the activation process too.
862
-        $this->_maybe_brew_regular();
863
-        // configure custom post type definitions
864
-        $this->loader->getShared('EventEspresso\core\domain\entities\custom_post_types\CustomTaxonomyDefinitions');
865
-        $this->loader->getShared('EventEspresso\core\domain\entities\custom_post_types\CustomPostTypeDefinitions');
866
-        do_action('AHEE__EE_System__load_core_configuration__complete', $this);
867
-    }
868
-
869
-
870
-    /**
871
-     * cycles through all of the models/*.model.php files, and assembles an array of model names
872
-     *
873
-     * @return void
874
-     * @throws ReflectionException
875
-     */
876
-    private function _parse_model_names()
877
-    {
878
-        // get all the files in the EE_MODELS folder that end in .model.php
879
-        $models = glob(EE_MODELS . '*.model.php');
880
-        $model_names = array();
881
-        $non_abstract_db_models = array();
882
-        foreach ($models as $model) {
883
-            // get model classname
884
-            $classname = EEH_File::get_classname_from_filepath_with_standard_filename($model);
885
-            $short_name = str_replace('EEM_', '', $classname);
886
-            $reflectionClass = new ReflectionClass($classname);
887
-            if ($reflectionClass->isSubclassOf('EEM_Base') && ! $reflectionClass->isAbstract()) {
888
-                $non_abstract_db_models[ $short_name ] = $classname;
889
-            }
890
-            $model_names[ $short_name ] = $classname;
891
-        }
892
-        $this->registry->models = apply_filters('FHEE__EE_System__parse_model_names', $model_names);
893
-        $this->registry->non_abstract_db_models = apply_filters(
894
-            'FHEE__EE_System__parse_implemented_model_names',
895
-            $non_abstract_db_models
896
-        );
897
-    }
898
-
899
-
900
-    /**
901
-     * The purpose of this method is to simply check for a file named "caffeinated/brewing_regular.php" for any hooks
902
-     * that need to be setup before our EE_System launches.
903
-     *
904
-     * @return void
905
-     * @throws DomainException
906
-     * @throws InvalidArgumentException
907
-     * @throws InvalidDataTypeException
908
-     * @throws InvalidInterfaceException
909
-     * @throws InvalidClassException
910
-     * @throws InvalidFilePathException
911
-     */
912
-    private function _maybe_brew_regular()
913
-    {
914
-        /** @var Domain $domain */
915
-        $domain = DomainFactory::getShared(
916
-            new FullyQualifiedName(
917
-                'EventEspresso\core\domain\Domain'
918
-            ),
919
-            array(
920
-                new FilePath(EVENT_ESPRESSO_MAIN_FILE),
921
-                Version::fromString(espresso_version()),
922
-            )
923
-        );
924
-        if ($domain->isCaffeinated()) {
925
-            require_once EE_CAFF_PATH . 'brewing_regular.php';
926
-        }
927
-    }
928
-
929
-
930
-    /**
931
-     * register_shortcodes_modules_and_widgets
932
-     * generate lists of shortcodes and modules, then verify paths and classes
933
-     * This is hooked into 'AHEE__EE_Bootstrap__register_shortcodes_modules_and_widgets'
934
-     * which runs during the WP 'plugins_loaded' action at priority 7
935
-     *
936
-     * @access public
937
-     * @return void
938
-     * @throws Exception
939
-     */
940
-    public function register_shortcodes_modules_and_widgets()
941
-    {
942
-        try {
943
-            // load, register, and add shortcodes the new way
944
-            if ($this->request->isFrontend() || $this->request->isIframe()) {
945
-                $this->loader->getShared(
946
-                    'EventEspresso\core\services\shortcodes\ShortcodesManager',
947
-                    array(
948
-                        // and the old way, but we'll put it under control of the new system
949
-                        EE_Config::getLegacyShortcodesManager(),
950
-                    )
951
-                );
952
-            }
953
-        } catch (Exception $exception) {
954
-            new ExceptionStackTraceDisplay($exception);
955
-        }
956
-        do_action('AHEE__EE_System__register_shortcodes_modules_and_widgets');
957
-        // check for addons using old hook point
958
-        if (has_action('AHEE__EE_System__register_shortcodes_modules_and_addons')) {
959
-            $this->_incompatible_addon_error();
960
-        }
961
-    }
962
-
963
-
964
-    /**
965
-     * _incompatible_addon_error
966
-     *
967
-     * @access public
968
-     * @return void
969
-     */
970
-    private function _incompatible_addon_error()
971
-    {
972
-        // get array of classes hooking into here
973
-        $class_names = EEH_Class_Tools::get_class_names_for_all_callbacks_on_hook(
974
-            'AHEE__EE_System__register_shortcodes_modules_and_addons'
975
-        );
976
-        if (! empty($class_names)) {
977
-            $msg = __(
978
-                'The following plugins, addons, or modules appear to be incompatible with this version of Event Espresso and were automatically deactivated to avoid fatal errors:',
979
-                'event_espresso'
980
-            );
981
-            $msg .= '<ul>';
982
-            foreach ($class_names as $class_name) {
983
-                $msg .= '<li><b>Event Espresso - '
984
-                        . str_replace(
985
-                            array('EE_', 'EEM_', 'EED_', 'EES_', 'EEW_'),
986
-                            '',
987
-                            $class_name
988
-                        ) . '</b></li>';
989
-            }
990
-            $msg .= '</ul>';
991
-            $msg .= __(
992
-                'Compatibility issues can be avoided and/or resolved by keeping addons and plugins updated to the latest version.',
993
-                'event_espresso'
994
-            );
995
-            // save list of incompatible addons to wp-options for later use
996
-            add_option('ee_incompatible_addons', $class_names, '', 'no');
997
-            if (is_admin()) {
998
-                EE_Error::add_error($msg, __FILE__, __FUNCTION__, __LINE__);
999
-            }
1000
-        }
1001
-    }
1002
-
1003
-
1004
-    /**
1005
-     * brew_espresso
1006
-     * begins the process of setting hooks for initializing EE in the correct order
1007
-     * This is happening on the 'AHEE__EE_Bootstrap__brew_espresso' hook point
1008
-     * which runs during the WP 'plugins_loaded' action at priority 9
1009
-     *
1010
-     * @return void
1011
-     */
1012
-    public function brew_espresso()
1013
-    {
1014
-        do_action('AHEE__EE_System__brew_espresso__begin', $this);
1015
-        // load some final core systems
1016
-        add_action('init', array($this, 'set_hooks_for_core'), 1);
1017
-        add_action('init', array($this, 'perform_activations_upgrades_and_migrations'), 3);
1018
-        add_action('init', array($this, 'load_CPTs_and_session'), 5);
1019
-        add_action('init', array($this, 'load_controllers'), 7);
1020
-        add_action('init', array($this, 'core_loaded_and_ready'), 9);
1021
-        add_action('init', array($this, 'initialize'), 10);
1022
-        add_action('init', array($this, 'initialize_last'), 100);
1023
-        if (is_admin() && apply_filters('FHEE__EE_System__brew_espresso__load_pue', true)) {
1024
-            // pew pew pew
1025
-            $this->loader->getShared('EventEspresso\core\services\licensing\LicenseService');
1026
-            do_action('AHEE__EE_System__brew_espresso__after_pue_init');
1027
-        }
1028
-        do_action('AHEE__EE_System__brew_espresso__complete', $this);
1029
-    }
1030
-
1031
-
1032
-    /**
1033
-     *    set_hooks_for_core
1034
-     *
1035
-     * @access public
1036
-     * @return    void
1037
-     * @throws EE_Error
1038
-     */
1039
-    public function set_hooks_for_core()
1040
-    {
1041
-        $this->_deactivate_incompatible_addons();
1042
-        do_action('AHEE__EE_System__set_hooks_for_core');
1043
-        $this->loader->getShared('EventEspresso\core\domain\values\session\SessionLifespan');
1044
-        // caps need to be initialized on every request so that capability maps are set.
1045
-        // @see https://events.codebasehq.com/projects/event-espresso/tickets/8674
1046
-        $this->registry->CAP->init_caps();
1047
-    }
1048
-
1049
-
1050
-    /**
1051
-     * Using the information gathered in EE_System::_incompatible_addon_error,
1052
-     * deactivates any addons considered incompatible with the current version of EE
1053
-     */
1054
-    private function _deactivate_incompatible_addons()
1055
-    {
1056
-        $incompatible_addons = get_option('ee_incompatible_addons', array());
1057
-        if (! empty($incompatible_addons)) {
1058
-            $active_plugins = get_option('active_plugins', array());
1059
-            foreach ($active_plugins as $active_plugin) {
1060
-                foreach ($incompatible_addons as $incompatible_addon) {
1061
-                    if (strpos($active_plugin, $incompatible_addon) !== false) {
1062
-                        unset($_GET['activate']);
1063
-                        espresso_deactivate_plugin($active_plugin);
1064
-                    }
1065
-                }
1066
-            }
1067
-        }
1068
-    }
1069
-
1070
-
1071
-    /**
1072
-     *    perform_activations_upgrades_and_migrations
1073
-     *
1074
-     * @access public
1075
-     * @return    void
1076
-     */
1077
-    public function perform_activations_upgrades_and_migrations()
1078
-    {
1079
-        do_action('AHEE__EE_System__perform_activations_upgrades_and_migrations');
1080
-    }
1081
-
1082
-
1083
-    /**
1084
-     * @return void
1085
-     * @throws DomainException
1086
-     */
1087
-    public function load_CPTs_and_session()
1088
-    {
1089
-        do_action('AHEE__EE_System__load_CPTs_and_session__start');
1090
-        /** @var EventEspresso\core\domain\services\custom_post_types\RegisterCustomTaxonomies $register_custom_taxonomies */
1091
-        $register_custom_taxonomies = $this->loader->getShared(
1092
-            'EventEspresso\core\domain\services\custom_post_types\RegisterCustomTaxonomies'
1093
-        );
1094
-        $register_custom_taxonomies->registerCustomTaxonomies();
1095
-        /** @var EventEspresso\core\domain\services\custom_post_types\RegisterCustomPostTypes $register_custom_post_types */
1096
-        $register_custom_post_types = $this->loader->getShared(
1097
-            'EventEspresso\core\domain\services\custom_post_types\RegisterCustomPostTypes'
1098
-        );
1099
-        $register_custom_post_types->registerCustomPostTypes();
1100
-        /** @var EventEspresso\core\domain\services\custom_post_types\RegisterCustomTaxonomyTerms $register_custom_taxonomy_terms */
1101
-        $register_custom_taxonomy_terms = $this->loader->getShared(
1102
-            'EventEspresso\core\domain\services\custom_post_types\RegisterCustomTaxonomyTerms'
1103
-        );
1104
-        $register_custom_taxonomy_terms->registerCustomTaxonomyTerms();
1105
-        // load legacy Custom Post Types and Taxonomies
1106
-        $this->loader->getShared('EE_Register_CPTs');
1107
-        do_action('AHEE__EE_System__load_CPTs_and_session__complete');
1108
-    }
1109
-
1110
-
1111
-    /**
1112
-     * load_controllers
1113
-     * this is the best place to load any additional controllers that needs access to EE core.
1114
-     * it is expected that all basic core EE systems, that are not dependant on the current request are loaded at this
1115
-     * time
1116
-     *
1117
-     * @access public
1118
-     * @return void
1119
-     */
1120
-    public function load_controllers()
1121
-    {
1122
-        do_action('AHEE__EE_System__load_controllers__start');
1123
-        // let's get it started
1124
-        if (! $this->maintenance_mode->level()
1125
-            && ($this->request->isFrontend() || $this->request->isFrontAjax())
1126
-        ) {
1127
-            do_action('AHEE__EE_System__load_controllers__load_front_controllers');
1128
-            $this->loader->getShared('EE_Front_Controller');
1129
-        } elseif ($this->request->isAdmin() || $this->request->isAdminAjax()) {
1130
-            do_action('AHEE__EE_System__load_controllers__load_admin_controllers');
1131
-            $this->loader->getShared('EE_Admin');
1132
-        }
1133
-        do_action('AHEE__EE_System__load_controllers__complete');
1134
-    }
1135
-
1136
-
1137
-    /**
1138
-     * core_loaded_and_ready
1139
-     * all of the basic EE core should be loaded at this point and available regardless of M-Mode
1140
-     *
1141
-     * @access public
1142
-     * @return void
1143
-     * @throws Exception
1144
-     */
1145
-    public function core_loaded_and_ready()
1146
-    {
1147
-        if ($this->request->isAdmin() || $this->request->isFrontend() || $this->request->isIframe()) {
1148
-            try {
1149
-                $this->loader->getShared('EventEspresso\core\services\assets\Registry');
1150
-                $this->loader->getShared('EventEspresso\core\domain\services\assets\CoreAssetManager');
1151
-            } catch (Exception $exception) {
1152
-                new ExceptionStackTraceDisplay($exception);
1153
-            }
1154
-        }
1155
-        if ($this->request->isAdmin()
1156
-            || $this->request->isEeAjax()
1157
-            || $this->request->isFrontend()
1158
-        ) {
1159
-            $this->loader->getShared('EE_Session');
1160
-        }
1161
-        do_action('AHEE__EE_System__core_loaded_and_ready');
1162
-        // load_espresso_template_tags
1163
-        if (is_readable(EE_PUBLIC . 'template_tags.php')
1164
-            && (
1165
-                $this->request->isFrontend()
1166
-                || $this->request->isAdmin()
1167
-                || $this->request->isIframe()
1168
-                || $this->request->isFeed()
1169
-            )
1170
-        ) {
1171
-            require_once EE_PUBLIC . 'template_tags.php';
1172
-        }
1173
-        do_action('AHEE__EE_System__set_hooks_for_shortcodes_modules_and_addons');
1174
-    }
1175
-
1176
-
1177
-    /**
1178
-     * initialize
1179
-     * this is the best place to begin initializing client code
1180
-     *
1181
-     * @access public
1182
-     * @return void
1183
-     */
1184
-    public function initialize()
1185
-    {
1186
-        do_action('AHEE__EE_System__initialize');
1187
-    }
1188
-
1189
-
1190
-    /**
1191
-     * initialize_last
1192
-     * this is run really late during the WP init hook point, and ensures that mostly everything else that needs to
1193
-     * initialize has done so
1194
-     *
1195
-     * @access public
1196
-     * @return void
1197
-     */
1198
-    public function initialize_last()
1199
-    {
1200
-        do_action('AHEE__EE_System__initialize_last');
1201
-        /** @var EventEspresso\core\domain\services\custom_post_types\RewriteRules $rewrite_rules */
1202
-        $rewrite_rules = $this->loader->getShared(
1203
-            'EventEspresso\core\domain\services\custom_post_types\RewriteRules'
1204
-        );
1205
-        $rewrite_rules->flushRewriteRules();
1206
-        add_action('admin_bar_init', array($this, 'addEspressoToolbar'));
1207
-        if ($this->request->isAdmin() && function_exists('wp_add_privacy_policy_content')) {
1208
-            $this->loader->getShared('EventEspresso\core\services\privacy\policy\PrivacyPolicyManager');
1209
-        }
1210
-    }
1211
-
1212
-
1213
-    /**
1214
-     * @return void
1215
-     * @throws EE_Error
1216
-     */
1217
-    public function addEspressoToolbar()
1218
-    {
1219
-        $this->loader->getShared(
1220
-            'EventEspresso\core\domain\services\admin\AdminToolBar',
1221
-            array($this->registry->CAP)
1222
-        );
1223
-    }
1224
-
1225
-
1226
-    /**
1227
-     * do_not_cache
1228
-     * sets no cache headers and defines no cache constants for WP plugins
1229
-     *
1230
-     * @access public
1231
-     * @return void
1232
-     */
1233
-    public static function do_not_cache()
1234
-    {
1235
-        // set no cache constants
1236
-        if (! defined('DONOTCACHEPAGE')) {
1237
-            define('DONOTCACHEPAGE', true);
1238
-        }
1239
-        if (! defined('DONOTCACHCEOBJECT')) {
1240
-            define('DONOTCACHCEOBJECT', true);
1241
-        }
1242
-        if (! defined('DONOTCACHEDB')) {
1243
-            define('DONOTCACHEDB', true);
1244
-        }
1245
-        // add no cache headers
1246
-        add_action('send_headers', array('EE_System', 'nocache_headers'), 10);
1247
-        // plus a little extra for nginx and Google Chrome
1248
-        add_filter('nocache_headers', array('EE_System', 'extra_nocache_headers'), 10, 1);
1249
-        // prevent browsers from prefetching of the rel='next' link, because it may contain content that interferes with the registration process
1250
-        remove_action('wp_head', 'adjacent_posts_rel_link_wp_head');
1251
-    }
1252
-
1253
-
1254
-    /**
1255
-     *    extra_nocache_headers
1256
-     *
1257
-     * @access    public
1258
-     * @param $headers
1259
-     * @return    array
1260
-     */
1261
-    public static function extra_nocache_headers($headers)
1262
-    {
1263
-        // for NGINX
1264
-        $headers['X-Accel-Expires'] = 0;
1265
-        // plus extra for Google Chrome since it doesn't seem to respect "no-cache", but WILL respect "no-store"
1266
-        $headers['Cache-Control'] = 'no-store, no-cache, must-revalidate, max-age=0';
1267
-        return $headers;
1268
-    }
1269
-
1270
-
1271
-    /**
1272
-     *    nocache_headers
1273
-     *
1274
-     * @access    public
1275
-     * @return    void
1276
-     */
1277
-    public static function nocache_headers()
1278
-    {
1279
-        nocache_headers();
1280
-    }
1281
-
1282
-
1283
-    /**
1284
-     * simply hooks into "wp_list_pages_exclude" filter (for wp_list_pages method) and makes sure EE critical pages are
1285
-     * never returned with the function.
1286
-     *
1287
-     * @param  array $exclude_array any existing pages being excluded are in this array.
1288
-     * @return array
1289
-     */
1290
-    public function remove_pages_from_wp_list_pages($exclude_array)
1291
-    {
1292
-        return array_merge($exclude_array, $this->registry->CFG->core->get_critical_pages_array());
1293
-    }
30
+	/**
31
+	 * indicates this is a 'normal' request. Ie, not activation, nor upgrade, nor activation.
32
+	 * So examples of this would be a normal GET request on the frontend or backend, or a POST, etc
33
+	 */
34
+	const req_type_normal = 0;
35
+
36
+	/**
37
+	 * Indicates this is a brand new installation of EE so we should install
38
+	 * tables and default data etc
39
+	 */
40
+	const req_type_new_activation = 1;
41
+
42
+	/**
43
+	 * we've detected that EE has been reactivated (or EE was activated during maintenance mode,
44
+	 * and we just exited maintenance mode). We MUST check the database is setup properly
45
+	 * and that default data is setup too
46
+	 */
47
+	const req_type_reactivation = 2;
48
+
49
+	/**
50
+	 * indicates that EE has been upgraded since its previous request.
51
+	 * We may have data migration scripts to call and will want to trigger maintenance mode
52
+	 */
53
+	const req_type_upgrade = 3;
54
+
55
+	/**
56
+	 * TODO  will detect that EE has been DOWNGRADED. We probably don't want to run in this case...
57
+	 */
58
+	const req_type_downgrade = 4;
59
+
60
+	/**
61
+	 * @deprecated since version 4.6.0.dev.006
62
+	 * Now whenever a new_activation is detected the request type is still just
63
+	 * new_activation (same for reactivation, upgrade, downgrade etc), but if we'r ein maintenance mode
64
+	 * EE_System::initialize_db_if_no_migrations_required and EE_Addon::initialize_db_if_no_migrations_required
65
+	 * will instead enqueue that EE plugin's db initialization for when we're taken out of maintenance mode.
66
+	 * (Specifically, when the migration manager indicates migrations are finished
67
+	 * EE_Data_Migration_Manager::initialize_db_for_enqueued_ee_plugins() will be called)
68
+	 */
69
+	const req_type_activation_but_not_installed = 5;
70
+
71
+	/**
72
+	 * option prefix for recording the activation history (like core's "espresso_db_update") of addons
73
+	 */
74
+	const addon_activation_history_option_prefix = 'ee_addon_activation_history_';
75
+
76
+	/**
77
+	 * @var EE_System $_instance
78
+	 */
79
+	private static $_instance;
80
+
81
+	/**
82
+	 * @var EE_Registry $registry
83
+	 */
84
+	private $registry;
85
+
86
+	/**
87
+	 * @var LoaderInterface $loader
88
+	 */
89
+	private $loader;
90
+
91
+	/**
92
+	 * @var EE_Capabilities $capabilities
93
+	 */
94
+	private $capabilities;
95
+
96
+	/**
97
+	 * @var RequestInterface $request
98
+	 */
99
+	private $request;
100
+
101
+	/**
102
+	 * @var EE_Maintenance_Mode $maintenance_mode
103
+	 */
104
+	private $maintenance_mode;
105
+
106
+	/**
107
+	 * Stores which type of request this is, options being one of the constants on EE_System starting with req_type_*.
108
+	 * It can be a brand-new activation, a reactivation, an upgrade, a downgrade, or a normal request.
109
+	 *
110
+	 * @var int $_req_type
111
+	 */
112
+	private $_req_type;
113
+
114
+	/**
115
+	 * Whether or not there was a non-micro version change in EE core version during this request
116
+	 *
117
+	 * @var boolean $_major_version_change
118
+	 */
119
+	private $_major_version_change = false;
120
+
121
+	/**
122
+	 * A Context DTO dedicated solely to identifying the current request type.
123
+	 *
124
+	 * @var RequestTypeContextCheckerInterface $request_type
125
+	 */
126
+	private $request_type;
127
+
128
+
129
+	/**
130
+	 * @singleton method used to instantiate class object
131
+	 * @param EE_Registry|null         $registry
132
+	 * @param LoaderInterface|null     $loader
133
+	 * @param RequestInterface|null    $request
134
+	 * @param EE_Maintenance_Mode|null $maintenance_mode
135
+	 * @return EE_System
136
+	 */
137
+	public static function instance(
138
+		EE_Registry $registry = null,
139
+		LoaderInterface $loader = null,
140
+		RequestInterface $request = null,
141
+		EE_Maintenance_Mode $maintenance_mode = null
142
+	) {
143
+		// check if class object is instantiated
144
+		if (! self::$_instance instanceof EE_System) {
145
+			self::$_instance = new self($registry, $loader, $request, $maintenance_mode);
146
+		}
147
+		return self::$_instance;
148
+	}
149
+
150
+
151
+	/**
152
+	 * resets the instance and returns it
153
+	 *
154
+	 * @return EE_System
155
+	 */
156
+	public static function reset()
157
+	{
158
+		self::$_instance->_req_type = null;
159
+		// make sure none of the old hooks are left hanging around
160
+		remove_all_actions('AHEE__EE_System__perform_activations_upgrades_and_migrations');
161
+		// we need to reset the migration manager in order for it to detect DMSs properly
162
+		EE_Data_Migration_Manager::reset();
163
+		self::instance()->detect_activations_or_upgrades();
164
+		self::instance()->perform_activations_upgrades_and_migrations();
165
+		return self::instance();
166
+	}
167
+
168
+
169
+	/**
170
+	 * sets hooks for running rest of system
171
+	 * provides "AHEE__EE_System__construct__complete" hook for EE Addons to use as their starting point
172
+	 * starting EE Addons from any other point may lead to problems
173
+	 *
174
+	 * @param EE_Registry         $registry
175
+	 * @param LoaderInterface     $loader
176
+	 * @param RequestInterface    $request
177
+	 * @param EE_Maintenance_Mode $maintenance_mode
178
+	 */
179
+	private function __construct(
180
+		EE_Registry $registry,
181
+		LoaderInterface $loader,
182
+		RequestInterface $request,
183
+		EE_Maintenance_Mode $maintenance_mode
184
+	) {
185
+		$this->registry = $registry;
186
+		$this->loader = $loader;
187
+		$this->request = $request;
188
+		$this->maintenance_mode = $maintenance_mode;
189
+		do_action('AHEE__EE_System__construct__begin', $this);
190
+		add_action(
191
+			'AHEE__EE_Bootstrap__load_espresso_addons',
192
+			array($this, 'loadCapabilities'),
193
+			5
194
+		);
195
+		add_action(
196
+			'AHEE__EE_Bootstrap__load_espresso_addons',
197
+			array($this, 'loadCommandBus'),
198
+			7
199
+		);
200
+		add_action(
201
+			'AHEE__EE_Bootstrap__load_espresso_addons',
202
+			array($this, 'loadPluginApi'),
203
+			9
204
+		);
205
+		// allow addons to load first so that they can register autoloaders, set hooks for running DMS's, etc
206
+		add_action(
207
+			'AHEE__EE_Bootstrap__load_espresso_addons',
208
+			array($this, 'load_espresso_addons')
209
+		);
210
+		// when an ee addon is activated, we want to call the core hook(s) again
211
+		// because the newly-activated addon didn't get a chance to run at all
212
+		add_action('activate_plugin', array($this, 'load_espresso_addons'), 1);
213
+		// detect whether install or upgrade
214
+		add_action(
215
+			'AHEE__EE_Bootstrap__detect_activations_or_upgrades',
216
+			array($this, 'detect_activations_or_upgrades'),
217
+			3
218
+		);
219
+		// load EE_Config, EE_Textdomain, etc
220
+		add_action(
221
+			'AHEE__EE_Bootstrap__load_core_configuration',
222
+			array($this, 'load_core_configuration'),
223
+			5
224
+		);
225
+		// load EE_Config, EE_Textdomain, etc
226
+		add_action(
227
+			'AHEE__EE_Bootstrap__register_shortcodes_modules_and_widgets',
228
+			array($this, 'register_shortcodes_modules_and_widgets'),
229
+			7
230
+		);
231
+		// you wanna get going? I wanna get going... let's get going!
232
+		add_action(
233
+			'AHEE__EE_Bootstrap__brew_espresso',
234
+			array($this, 'brew_espresso'),
235
+			9
236
+		);
237
+		// other housekeeping
238
+		// exclude EE critical pages from wp_list_pages
239
+		add_filter(
240
+			'wp_list_pages_excludes',
241
+			array($this, 'remove_pages_from_wp_list_pages'),
242
+			10
243
+		);
244
+		// ALL EE Addons should use the following hook point to attach their initial setup too
245
+		// it's extremely important for EE Addons to register any class autoloaders so that they can be available when the EE_Config loads
246
+		do_action('AHEE__EE_System__construct__complete', $this);
247
+	}
248
+
249
+
250
+	/**
251
+	 * load and setup EE_Capabilities
252
+	 *
253
+	 * @return void
254
+	 * @throws EE_Error
255
+	 */
256
+	public function loadCapabilities()
257
+	{
258
+		$this->capabilities = $this->loader->getShared('EE_Capabilities');
259
+		add_action(
260
+			'AHEE__EE_Capabilities__init_caps__before_initialization',
261
+			function () {
262
+				LoaderFactory::getLoader()->getShared('EE_Payment_Method_Manager');
263
+			}
264
+		);
265
+	}
266
+
267
+
268
+	/**
269
+	 * create and cache the CommandBus, and also add middleware
270
+	 * The CapChecker middleware requires the use of EE_Capabilities
271
+	 * which is why we need to load the CommandBus after Caps are set up
272
+	 *
273
+	 * @return void
274
+	 * @throws EE_Error
275
+	 */
276
+	public function loadCommandBus()
277
+	{
278
+		$this->loader->getShared(
279
+			'CommandBusInterface',
280
+			array(
281
+				null,
282
+				apply_filters(
283
+					'FHEE__EE_Load_Espresso_Core__handle_request__CommandBus_middleware',
284
+					array(
285
+						$this->loader->getShared('EventEspresso\core\services\commands\middleware\CapChecker'),
286
+						$this->loader->getShared('EventEspresso\core\services\commands\middleware\AddActionHook'),
287
+					)
288
+				),
289
+			)
290
+		);
291
+	}
292
+
293
+
294
+	/**
295
+	 * @return void
296
+	 * @throws EE_Error
297
+	 */
298
+	public function loadPluginApi()
299
+	{
300
+		// set autoloaders for all of the classes implementing EEI_Plugin_API
301
+		// which provide helpers for EE plugin authors to more easily register certain components with EE.
302
+		EEH_Autoloader::instance()->register_autoloaders_for_each_file_in_folder(EE_LIBRARIES . 'plugin_api');
303
+		$this->loader->getShared('EE_Request_Handler');
304
+	}
305
+
306
+
307
+	/**
308
+	 * @param string $addon_name
309
+	 * @param string $version_constant
310
+	 * @param string $min_version_required
311
+	 * @param string $load_callback
312
+	 * @param string $plugin_file_constant
313
+	 * @return void
314
+	 */
315
+	private function deactivateIncompatibleAddon(
316
+		$addon_name,
317
+		$version_constant,
318
+		$min_version_required,
319
+		$load_callback,
320
+		$plugin_file_constant
321
+	) {
322
+		if (! defined($version_constant)) {
323
+			return;
324
+		}
325
+		$addon_version = constant($version_constant);
326
+		if ($addon_version && version_compare($addon_version, $min_version_required, '<')) {
327
+			remove_action('AHEE__EE_System__load_espresso_addons', $load_callback);
328
+			if (! function_exists('deactivate_plugins')) {
329
+				require_once ABSPATH . 'wp-admin/includes/plugin.php';
330
+			}
331
+			deactivate_plugins(plugin_basename(constant($plugin_file_constant)));
332
+			unset($_GET['activate'], $_REQUEST['activate'], $_GET['activate-multi'], $_REQUEST['activate-multi']);
333
+			EE_Error::add_error(
334
+				sprintf(
335
+					esc_html__(
336
+						'We\'re sorry, but the Event Espresso %1$s addon was deactivated because version %2$s or higher is required with this version of Event Espresso core.',
337
+						'event_espresso'
338
+					),
339
+					$addon_name,
340
+					$min_version_required
341
+				),
342
+				__FILE__,
343
+				__FUNCTION__ . "({$addon_name})",
344
+				__LINE__
345
+			);
346
+			EE_Error::get_notices(false, true);
347
+		}
348
+	}
349
+
350
+
351
+	/**
352
+	 * load_espresso_addons
353
+	 * allow addons to load first so that they can set hooks for running DMS's, etc
354
+	 * this is hooked into both:
355
+	 *    'AHEE__EE_Bootstrap__load_core_configuration'
356
+	 *        which runs during the WP 'plugins_loaded' action at priority 5
357
+	 *    and the WP 'activate_plugin' hook point
358
+	 *
359
+	 * @access public
360
+	 * @return void
361
+	 */
362
+	public function load_espresso_addons()
363
+	{
364
+		$this->deactivateIncompatibleAddon(
365
+			'Wait Lists',
366
+			'EE_WAIT_LISTS_VERSION',
367
+			'1.0.0.beta.074',
368
+			'load_espresso_wait_lists',
369
+			'EE_WAIT_LISTS_PLUGIN_FILE'
370
+		);
371
+		$this->deactivateIncompatibleAddon(
372
+			'Automated Upcoming Event Notifications',
373
+			'EE_AUTOMATED_UPCOMING_EVENT_NOTIFICATION_VERSION',
374
+			'1.0.0.beta.091',
375
+			'load_espresso_automated_upcoming_event_notification',
376
+			'EE_AUTOMATED_UPCOMING_EVENT_NOTIFICATION_PLUGIN_FILE'
377
+		);
378
+		do_action('AHEE__EE_System__load_espresso_addons');
379
+		// if the WP API basic auth plugin isn't already loaded, load it now.
380
+		// We want it for mobile apps. Just include the entire plugin
381
+		// also, don't load the basic auth when a plugin is getting activated, because
382
+		// it could be the basic auth plugin, and it doesn't check if its methods are already defined
383
+		// and causes a fatal error
384
+		if ($this->request->getRequestParam('activate') !== 'true'
385
+			&& ! function_exists('json_basic_auth_handler')
386
+			&& ! function_exists('json_basic_auth_error')
387
+			&& ! in_array(
388
+				$this->request->getRequestParam('action'),
389
+				array('activate', 'activate-selected'),
390
+				true
391
+			)
392
+		) {
393
+			include_once EE_THIRD_PARTY . 'wp-api-basic-auth' . DS . 'basic-auth.php';
394
+		}
395
+		do_action('AHEE__EE_System__load_espresso_addons__complete');
396
+	}
397
+
398
+
399
+	/**
400
+	 * detect_activations_or_upgrades
401
+	 * Checks for activation or upgrade of core first;
402
+	 * then also checks if any registered addons have been activated or upgraded
403
+	 * This is hooked into 'AHEE__EE_Bootstrap__detect_activations_or_upgrades'
404
+	 * which runs during the WP 'plugins_loaded' action at priority 3
405
+	 *
406
+	 * @access public
407
+	 * @return void
408
+	 */
409
+	public function detect_activations_or_upgrades()
410
+	{
411
+		// first off: let's make sure to handle core
412
+		$this->detect_if_activation_or_upgrade();
413
+		foreach ($this->registry->addons as $addon) {
414
+			if ($addon instanceof EE_Addon) {
415
+				// detect teh request type for that addon
416
+				$addon->detect_activation_or_upgrade();
417
+			}
418
+		}
419
+	}
420
+
421
+
422
+	/**
423
+	 * detect_if_activation_or_upgrade
424
+	 * Takes care of detecting whether this is a brand new install or code upgrade,
425
+	 * and either setting up the DB or setting up maintenance mode etc.
426
+	 *
427
+	 * @access public
428
+	 * @return void
429
+	 */
430
+	public function detect_if_activation_or_upgrade()
431
+	{
432
+		do_action('AHEE__EE_System___detect_if_activation_or_upgrade__begin');
433
+		// check if db has been updated, or if its a brand-new installation
434
+		$espresso_db_update = $this->fix_espresso_db_upgrade_option();
435
+		$request_type = $this->detect_req_type($espresso_db_update);
436
+		// EEH_Debug_Tools::printr( $request_type, '$request_type', __FILE__, __LINE__ );
437
+		switch ($request_type) {
438
+			case EE_System::req_type_new_activation:
439
+				do_action('AHEE__EE_System__detect_if_activation_or_upgrade__new_activation');
440
+				$this->_handle_core_version_change($espresso_db_update);
441
+				break;
442
+			case EE_System::req_type_reactivation:
443
+				do_action('AHEE__EE_System__detect_if_activation_or_upgrade__reactivation');
444
+				$this->_handle_core_version_change($espresso_db_update);
445
+				break;
446
+			case EE_System::req_type_upgrade:
447
+				do_action('AHEE__EE_System__detect_if_activation_or_upgrade__upgrade');
448
+				// migrations may be required now that we've upgraded
449
+				$this->maintenance_mode->set_maintenance_mode_if_db_old();
450
+				$this->_handle_core_version_change($espresso_db_update);
451
+				break;
452
+			case EE_System::req_type_downgrade:
453
+				do_action('AHEE__EE_System__detect_if_activation_or_upgrade__downgrade');
454
+				// its possible migrations are no longer required
455
+				$this->maintenance_mode->set_maintenance_mode_if_db_old();
456
+				$this->_handle_core_version_change($espresso_db_update);
457
+				break;
458
+			case EE_System::req_type_normal:
459
+			default:
460
+				break;
461
+		}
462
+		do_action('AHEE__EE_System__detect_if_activation_or_upgrade__complete');
463
+	}
464
+
465
+
466
+	/**
467
+	 * Updates the list of installed versions and sets hooks for
468
+	 * initializing the database later during the request
469
+	 *
470
+	 * @param array $espresso_db_update
471
+	 */
472
+	private function _handle_core_version_change($espresso_db_update)
473
+	{
474
+		$this->update_list_of_installed_versions($espresso_db_update);
475
+		// get ready to verify the DB is ok (provided we aren't in maintenance mode, of course)
476
+		add_action(
477
+			'AHEE__EE_System__perform_activations_upgrades_and_migrations',
478
+			array($this, 'initialize_db_if_no_migrations_required')
479
+		);
480
+	}
481
+
482
+
483
+	/**
484
+	 * standardizes the wp option 'espresso_db_upgrade' which actually stores
485
+	 * information about what versions of EE have been installed and activated,
486
+	 * NOT necessarily the state of the database
487
+	 *
488
+	 * @param mixed $espresso_db_update           the value of the WordPress option.
489
+	 *                                            If not supplied, fetches it from the options table
490
+	 * @return array the correct value of 'espresso_db_upgrade', after saving it, if it needed correction
491
+	 */
492
+	private function fix_espresso_db_upgrade_option($espresso_db_update = null)
493
+	{
494
+		do_action('FHEE__EE_System__manage_fix_espresso_db_upgrade_option__begin', $espresso_db_update);
495
+		if (! $espresso_db_update) {
496
+			$espresso_db_update = get_option('espresso_db_update');
497
+		}
498
+		// check that option is an array
499
+		if (! is_array($espresso_db_update)) {
500
+			// if option is FALSE, then it never existed
501
+			if ($espresso_db_update === false) {
502
+				// make $espresso_db_update an array and save option with autoload OFF
503
+				$espresso_db_update = array();
504
+				add_option('espresso_db_update', $espresso_db_update, '', 'no');
505
+			} else {
506
+				// option is NOT FALSE but also is NOT an array, so make it an array and save it
507
+				$espresso_db_update = array($espresso_db_update => array());
508
+				update_option('espresso_db_update', $espresso_db_update);
509
+			}
510
+		} else {
511
+			$corrected_db_update = array();
512
+			// if IS an array, but is it an array where KEYS are version numbers, and values are arrays?
513
+			foreach ($espresso_db_update as $should_be_version_string => $should_be_array) {
514
+				if (is_int($should_be_version_string) && ! is_array($should_be_array)) {
515
+					// the key is an int, and the value IS NOT an array
516
+					// so it must be numerically-indexed, where values are versions installed...
517
+					// fix it!
518
+					$version_string = $should_be_array;
519
+					$corrected_db_update[ $version_string ] = array('unknown-date');
520
+				} else {
521
+					// ok it checks out
522
+					$corrected_db_update[ $should_be_version_string ] = $should_be_array;
523
+				}
524
+			}
525
+			$espresso_db_update = $corrected_db_update;
526
+			update_option('espresso_db_update', $espresso_db_update);
527
+		}
528
+		do_action('FHEE__EE_System__manage_fix_espresso_db_upgrade_option__complete', $espresso_db_update);
529
+		return $espresso_db_update;
530
+	}
531
+
532
+
533
+	/**
534
+	 * Does the traditional work of setting up the plugin's database and adding default data.
535
+	 * If migration script/process did not exist, this is what would happen on every activation/reactivation/upgrade.
536
+	 * NOTE: if we're in maintenance mode (which would be the case if we detect there are data
537
+	 * migration scripts that need to be run and a version change happens), enqueues core for database initialization,
538
+	 * so that it will be done when migrations are finished
539
+	 *
540
+	 * @param boolean $initialize_addons_too if true, we double-check addons' database tables etc too;
541
+	 * @param boolean $verify_schema         if true will re-check the database tables have the correct schema.
542
+	 *                                       This is a resource-intensive job
543
+	 *                                       so we prefer to only do it when necessary
544
+	 * @return void
545
+	 * @throws EE_Error
546
+	 */
547
+	public function initialize_db_if_no_migrations_required($initialize_addons_too = false, $verify_schema = true)
548
+	{
549
+		$request_type = $this->detect_req_type();
550
+		// only initialize system if we're not in maintenance mode.
551
+		if ($this->maintenance_mode->level() !== EE_Maintenance_Mode::level_2_complete_maintenance) {
552
+			/** @var EventEspresso\core\domain\services\custom_post_types\RewriteRules $rewrite_rules */
553
+			$rewrite_rules = $this->loader->getShared(
554
+				'EventEspresso\core\domain\services\custom_post_types\RewriteRules'
555
+			);
556
+			$rewrite_rules->flush();
557
+			if ($verify_schema) {
558
+				EEH_Activation::initialize_db_and_folders();
559
+			}
560
+			EEH_Activation::initialize_db_content();
561
+			EEH_Activation::system_initialization();
562
+			if ($initialize_addons_too) {
563
+				$this->initialize_addons();
564
+			}
565
+		} else {
566
+			EE_Data_Migration_Manager::instance()->enqueue_db_initialization_for('Core');
567
+		}
568
+		if ($request_type === EE_System::req_type_new_activation
569
+			|| $request_type === EE_System::req_type_reactivation
570
+			|| (
571
+				$request_type === EE_System::req_type_upgrade
572
+				&& $this->is_major_version_change()
573
+			)
574
+		) {
575
+			add_action('AHEE__EE_System__initialize_last', array($this, 'redirect_to_about_ee'), 9);
576
+		}
577
+	}
578
+
579
+
580
+	/**
581
+	 * Initializes the db for all registered addons
582
+	 *
583
+	 * @throws EE_Error
584
+	 */
585
+	public function initialize_addons()
586
+	{
587
+		// foreach registered addon, make sure its db is up-to-date too
588
+		foreach ($this->registry->addons as $addon) {
589
+			if ($addon instanceof EE_Addon) {
590
+				$addon->initialize_db_if_no_migrations_required();
591
+			}
592
+		}
593
+	}
594
+
595
+
596
+	/**
597
+	 * Adds the current code version to the saved wp option which stores a list of all ee versions ever installed.
598
+	 *
599
+	 * @param    array  $version_history
600
+	 * @param    string $current_version_to_add version to be added to the version history
601
+	 * @return    boolean success as to whether or not this option was changed
602
+	 */
603
+	public function update_list_of_installed_versions($version_history = null, $current_version_to_add = null)
604
+	{
605
+		if (! $version_history) {
606
+			$version_history = $this->fix_espresso_db_upgrade_option($version_history);
607
+		}
608
+		if ($current_version_to_add === null) {
609
+			$current_version_to_add = espresso_version();
610
+		}
611
+		$version_history[ $current_version_to_add ][] = date('Y-m-d H:i:s', time());
612
+		// re-save
613
+		return update_option('espresso_db_update', $version_history);
614
+	}
615
+
616
+
617
+	/**
618
+	 * Detects if the current version indicated in the has existed in the list of
619
+	 * previously-installed versions of EE (espresso_db_update). Does NOT modify it (ie, no side-effect)
620
+	 *
621
+	 * @param array $espresso_db_update array from the wp option stored under the name 'espresso_db_update'.
622
+	 *                                  If not supplied, fetches it from the options table.
623
+	 *                                  Also, caches its result so later parts of the code can also know whether
624
+	 *                                  there's been an update or not. This way we can add the current version to
625
+	 *                                  espresso_db_update, but still know if this is a new install or not
626
+	 * @return int one of the constants on EE_System::req_type_
627
+	 */
628
+	public function detect_req_type($espresso_db_update = null)
629
+	{
630
+		if ($this->_req_type === null) {
631
+			$espresso_db_update = ! empty($espresso_db_update)
632
+				? $espresso_db_update
633
+				: $this->fix_espresso_db_upgrade_option();
634
+			$this->_req_type = EE_System::detect_req_type_given_activation_history(
635
+				$espresso_db_update,
636
+				'ee_espresso_activation',
637
+				espresso_version()
638
+			);
639
+			$this->_major_version_change = $this->_detect_major_version_change($espresso_db_update);
640
+			$this->request->setIsActivation($this->_req_type !== EE_System::req_type_normal);
641
+		}
642
+		return $this->_req_type;
643
+	}
644
+
645
+
646
+	/**
647
+	 * Returns whether or not there was a non-micro version change (ie, change in either
648
+	 * the first or second number in the version. Eg 4.9.0.rc.001 to 4.10.0.rc.000,
649
+	 * but not 4.9.0.rc.0001 to 4.9.1.rc.0001
650
+	 *
651
+	 * @param $activation_history
652
+	 * @return bool
653
+	 */
654
+	private function _detect_major_version_change($activation_history)
655
+	{
656
+		$previous_version = EE_System::_get_most_recently_active_version_from_activation_history($activation_history);
657
+		$previous_version_parts = explode('.', $previous_version);
658
+		$current_version_parts = explode('.', espresso_version());
659
+		return isset($previous_version_parts[0], $previous_version_parts[1], $current_version_parts[0], $current_version_parts[1])
660
+			   && ($previous_version_parts[0] !== $current_version_parts[0]
661
+				   || $previous_version_parts[1] !== $current_version_parts[1]
662
+			   );
663
+	}
664
+
665
+
666
+	/**
667
+	 * Returns true if either the major or minor version of EE changed during this request.
668
+	 * Eg 4.9.0.rc.001 to 4.10.0.rc.000, but not 4.9.0.rc.0001 to 4.9.1.rc.0001
669
+	 *
670
+	 * @return bool
671
+	 */
672
+	public function is_major_version_change()
673
+	{
674
+		return $this->_major_version_change;
675
+	}
676
+
677
+
678
+	/**
679
+	 * Determines the request type for any ee addon, given three piece of info: the current array of activation
680
+	 * histories (for core that' 'espresso_db_update' wp option); the name of the WordPress option which is temporarily
681
+	 * set upon activation of the plugin (for core it's 'ee_espresso_activation'); and the version that this plugin was
682
+	 * just activated to (for core that will always be espresso_version())
683
+	 *
684
+	 * @param array  $activation_history_for_addon     the option's value which stores the activation history for this
685
+	 *                                                 ee plugin. for core that's 'espresso_db_update'
686
+	 * @param string $activation_indicator_option_name the name of the WordPress option that is temporarily set to
687
+	 *                                                 indicate that this plugin was just activated
688
+	 * @param string $version_to_upgrade_to            the version that was just upgraded to (for core that will be
689
+	 *                                                 espresso_version())
690
+	 * @return int one of the constants on EE_System::req_type_*
691
+	 */
692
+	public static function detect_req_type_given_activation_history(
693
+		$activation_history_for_addon,
694
+		$activation_indicator_option_name,
695
+		$version_to_upgrade_to
696
+	) {
697
+		$version_is_higher = self::_new_version_is_higher($activation_history_for_addon, $version_to_upgrade_to);
698
+		if ($activation_history_for_addon) {
699
+			// it exists, so this isn't a completely new install
700
+			// check if this version already in that list of previously installed versions
701
+			if (! isset($activation_history_for_addon[ $version_to_upgrade_to ])) {
702
+				// it a version we haven't seen before
703
+				if ($version_is_higher === 1) {
704
+					$req_type = EE_System::req_type_upgrade;
705
+				} else {
706
+					$req_type = EE_System::req_type_downgrade;
707
+				}
708
+				delete_option($activation_indicator_option_name);
709
+			} else {
710
+				// its not an update. maybe a reactivation?
711
+				if (get_option($activation_indicator_option_name, false)) {
712
+					if ($version_is_higher === -1) {
713
+						$req_type = EE_System::req_type_downgrade;
714
+					} elseif ($version_is_higher === 0) {
715
+						// we've seen this version before, but it's an activation. must be a reactivation
716
+						$req_type = EE_System::req_type_reactivation;
717
+					} else {// $version_is_higher === 1
718
+						$req_type = EE_System::req_type_upgrade;
719
+					}
720
+					delete_option($activation_indicator_option_name);
721
+				} else {
722
+					// we've seen this version before and the activation indicate doesn't show it was just activated
723
+					if ($version_is_higher === -1) {
724
+						$req_type = EE_System::req_type_downgrade;
725
+					} elseif ($version_is_higher === 0) {
726
+						// we've seen this version before and it's not an activation. its normal request
727
+						$req_type = EE_System::req_type_normal;
728
+					} else {// $version_is_higher === 1
729
+						$req_type = EE_System::req_type_upgrade;
730
+					}
731
+				}
732
+			}
733
+		} else {
734
+			// brand new install
735
+			$req_type = EE_System::req_type_new_activation;
736
+			delete_option($activation_indicator_option_name);
737
+		}
738
+		return $req_type;
739
+	}
740
+
741
+
742
+	/**
743
+	 * Detects if the $version_to_upgrade_to is higher than the most recent version in
744
+	 * the $activation_history_for_addon
745
+	 *
746
+	 * @param array  $activation_history_for_addon (keys are versions, values are arrays of times activated,
747
+	 *                                             sometimes containing 'unknown-date'
748
+	 * @param string $version_to_upgrade_to        (current version)
749
+	 * @return int results of version_compare( $version_to_upgrade_to, $most_recently_active_version ).
750
+	 *                                             ie, -1 if $version_to_upgrade_to is LOWER (downgrade);
751
+	 *                                             0 if $version_to_upgrade_to MATCHES (reactivation or normal request);
752
+	 *                                             1 if $version_to_upgrade_to is HIGHER (upgrade) ;
753
+	 */
754
+	private static function _new_version_is_higher($activation_history_for_addon, $version_to_upgrade_to)
755
+	{
756
+		// find the most recently-activated version
757
+		$most_recently_active_version =
758
+			EE_System::_get_most_recently_active_version_from_activation_history($activation_history_for_addon);
759
+		return version_compare($version_to_upgrade_to, $most_recently_active_version);
760
+	}
761
+
762
+
763
+	/**
764
+	 * Gets the most recently active version listed in the activation history,
765
+	 * and if none are found (ie, it's a brand new install) returns '0.0.0.dev.000'.
766
+	 *
767
+	 * @param array $activation_history  (keys are versions, values are arrays of times activated,
768
+	 *                                   sometimes containing 'unknown-date'
769
+	 * @return string
770
+	 */
771
+	private static function _get_most_recently_active_version_from_activation_history($activation_history)
772
+	{
773
+		$most_recently_active_version_activation = '1970-01-01 00:00:00';
774
+		$most_recently_active_version = '0.0.0.dev.000';
775
+		if (is_array($activation_history)) {
776
+			foreach ($activation_history as $version => $times_activated) {
777
+				// check there is a record of when this version was activated. Otherwise,
778
+				// mark it as unknown
779
+				if (! $times_activated) {
780
+					$times_activated = array('unknown-date');
781
+				}
782
+				if (is_string($times_activated)) {
783
+					$times_activated = array($times_activated);
784
+				}
785
+				foreach ($times_activated as $an_activation) {
786
+					if ($an_activation !== 'unknown-date'
787
+						&& $an_activation
788
+						   > $most_recently_active_version_activation) {
789
+						$most_recently_active_version = $version;
790
+						$most_recently_active_version_activation = $an_activation === 'unknown-date'
791
+							? '1970-01-01 00:00:00'
792
+							: $an_activation;
793
+					}
794
+				}
795
+			}
796
+		}
797
+		return $most_recently_active_version;
798
+	}
799
+
800
+
801
+	/**
802
+	 * This redirects to the about EE page after activation
803
+	 *
804
+	 * @return void
805
+	 */
806
+	public function redirect_to_about_ee()
807
+	{
808
+		$notices = EE_Error::get_notices(false);
809
+		// if current user is an admin and it's not an ajax or rest request
810
+		if (! isset($notices['errors'])
811
+			&& $this->request->isAdmin()
812
+			&& apply_filters(
813
+				'FHEE__EE_System__redirect_to_about_ee__do_redirect',
814
+				$this->capabilities->current_user_can('manage_options', 'espresso_about_default')
815
+			)
816
+		) {
817
+			$query_params = array('page' => 'espresso_about');
818
+			if (EE_System::instance()->detect_req_type() === EE_System::req_type_new_activation) {
819
+				$query_params['new_activation'] = true;
820
+			}
821
+			if (EE_System::instance()->detect_req_type() === EE_System::req_type_reactivation) {
822
+				$query_params['reactivation'] = true;
823
+			}
824
+			$url = add_query_arg($query_params, admin_url('admin.php'));
825
+			wp_safe_redirect($url);
826
+			exit();
827
+		}
828
+	}
829
+
830
+
831
+	/**
832
+	 * load_core_configuration
833
+	 * this is hooked into 'AHEE__EE_Bootstrap__load_core_configuration'
834
+	 * which runs during the WP 'plugins_loaded' action at priority 5
835
+	 *
836
+	 * @return void
837
+	 * @throws ReflectionException
838
+	 */
839
+	public function load_core_configuration()
840
+	{
841
+		do_action('AHEE__EE_System__load_core_configuration__begin', $this);
842
+		$this->loader->getShared('EE_Load_Textdomain');
843
+		// load textdomain
844
+		EE_Load_Textdomain::load_textdomain();
845
+		// load and setup EE_Config and EE_Network_Config
846
+		$config = $this->loader->getShared('EE_Config');
847
+		$this->loader->getShared('EE_Network_Config');
848
+		// setup autoloaders
849
+		// enable logging?
850
+		if ($config->admin->use_full_logging) {
851
+			$this->loader->getShared('EE_Log');
852
+		}
853
+		// check for activation errors
854
+		$activation_errors = get_option('ee_plugin_activation_errors', false);
855
+		if ($activation_errors) {
856
+			EE_Error::add_error($activation_errors, __FILE__, __FUNCTION__, __LINE__);
857
+			update_option('ee_plugin_activation_errors', false);
858
+		}
859
+		// get model names
860
+		$this->_parse_model_names();
861
+		// load caf stuff a chance to play during the activation process too.
862
+		$this->_maybe_brew_regular();
863
+		// configure custom post type definitions
864
+		$this->loader->getShared('EventEspresso\core\domain\entities\custom_post_types\CustomTaxonomyDefinitions');
865
+		$this->loader->getShared('EventEspresso\core\domain\entities\custom_post_types\CustomPostTypeDefinitions');
866
+		do_action('AHEE__EE_System__load_core_configuration__complete', $this);
867
+	}
868
+
869
+
870
+	/**
871
+	 * cycles through all of the models/*.model.php files, and assembles an array of model names
872
+	 *
873
+	 * @return void
874
+	 * @throws ReflectionException
875
+	 */
876
+	private function _parse_model_names()
877
+	{
878
+		// get all the files in the EE_MODELS folder that end in .model.php
879
+		$models = glob(EE_MODELS . '*.model.php');
880
+		$model_names = array();
881
+		$non_abstract_db_models = array();
882
+		foreach ($models as $model) {
883
+			// get model classname
884
+			$classname = EEH_File::get_classname_from_filepath_with_standard_filename($model);
885
+			$short_name = str_replace('EEM_', '', $classname);
886
+			$reflectionClass = new ReflectionClass($classname);
887
+			if ($reflectionClass->isSubclassOf('EEM_Base') && ! $reflectionClass->isAbstract()) {
888
+				$non_abstract_db_models[ $short_name ] = $classname;
889
+			}
890
+			$model_names[ $short_name ] = $classname;
891
+		}
892
+		$this->registry->models = apply_filters('FHEE__EE_System__parse_model_names', $model_names);
893
+		$this->registry->non_abstract_db_models = apply_filters(
894
+			'FHEE__EE_System__parse_implemented_model_names',
895
+			$non_abstract_db_models
896
+		);
897
+	}
898
+
899
+
900
+	/**
901
+	 * The purpose of this method is to simply check for a file named "caffeinated/brewing_regular.php" for any hooks
902
+	 * that need to be setup before our EE_System launches.
903
+	 *
904
+	 * @return void
905
+	 * @throws DomainException
906
+	 * @throws InvalidArgumentException
907
+	 * @throws InvalidDataTypeException
908
+	 * @throws InvalidInterfaceException
909
+	 * @throws InvalidClassException
910
+	 * @throws InvalidFilePathException
911
+	 */
912
+	private function _maybe_brew_regular()
913
+	{
914
+		/** @var Domain $domain */
915
+		$domain = DomainFactory::getShared(
916
+			new FullyQualifiedName(
917
+				'EventEspresso\core\domain\Domain'
918
+			),
919
+			array(
920
+				new FilePath(EVENT_ESPRESSO_MAIN_FILE),
921
+				Version::fromString(espresso_version()),
922
+			)
923
+		);
924
+		if ($domain->isCaffeinated()) {
925
+			require_once EE_CAFF_PATH . 'brewing_regular.php';
926
+		}
927
+	}
928
+
929
+
930
+	/**
931
+	 * register_shortcodes_modules_and_widgets
932
+	 * generate lists of shortcodes and modules, then verify paths and classes
933
+	 * This is hooked into 'AHEE__EE_Bootstrap__register_shortcodes_modules_and_widgets'
934
+	 * which runs during the WP 'plugins_loaded' action at priority 7
935
+	 *
936
+	 * @access public
937
+	 * @return void
938
+	 * @throws Exception
939
+	 */
940
+	public function register_shortcodes_modules_and_widgets()
941
+	{
942
+		try {
943
+			// load, register, and add shortcodes the new way
944
+			if ($this->request->isFrontend() || $this->request->isIframe()) {
945
+				$this->loader->getShared(
946
+					'EventEspresso\core\services\shortcodes\ShortcodesManager',
947
+					array(
948
+						// and the old way, but we'll put it under control of the new system
949
+						EE_Config::getLegacyShortcodesManager(),
950
+					)
951
+				);
952
+			}
953
+		} catch (Exception $exception) {
954
+			new ExceptionStackTraceDisplay($exception);
955
+		}
956
+		do_action('AHEE__EE_System__register_shortcodes_modules_and_widgets');
957
+		// check for addons using old hook point
958
+		if (has_action('AHEE__EE_System__register_shortcodes_modules_and_addons')) {
959
+			$this->_incompatible_addon_error();
960
+		}
961
+	}
962
+
963
+
964
+	/**
965
+	 * _incompatible_addon_error
966
+	 *
967
+	 * @access public
968
+	 * @return void
969
+	 */
970
+	private function _incompatible_addon_error()
971
+	{
972
+		// get array of classes hooking into here
973
+		$class_names = EEH_Class_Tools::get_class_names_for_all_callbacks_on_hook(
974
+			'AHEE__EE_System__register_shortcodes_modules_and_addons'
975
+		);
976
+		if (! empty($class_names)) {
977
+			$msg = __(
978
+				'The following plugins, addons, or modules appear to be incompatible with this version of Event Espresso and were automatically deactivated to avoid fatal errors:',
979
+				'event_espresso'
980
+			);
981
+			$msg .= '<ul>';
982
+			foreach ($class_names as $class_name) {
983
+				$msg .= '<li><b>Event Espresso - '
984
+						. str_replace(
985
+							array('EE_', 'EEM_', 'EED_', 'EES_', 'EEW_'),
986
+							'',
987
+							$class_name
988
+						) . '</b></li>';
989
+			}
990
+			$msg .= '</ul>';
991
+			$msg .= __(
992
+				'Compatibility issues can be avoided and/or resolved by keeping addons and plugins updated to the latest version.',
993
+				'event_espresso'
994
+			);
995
+			// save list of incompatible addons to wp-options for later use
996
+			add_option('ee_incompatible_addons', $class_names, '', 'no');
997
+			if (is_admin()) {
998
+				EE_Error::add_error($msg, __FILE__, __FUNCTION__, __LINE__);
999
+			}
1000
+		}
1001
+	}
1002
+
1003
+
1004
+	/**
1005
+	 * brew_espresso
1006
+	 * begins the process of setting hooks for initializing EE in the correct order
1007
+	 * This is happening on the 'AHEE__EE_Bootstrap__brew_espresso' hook point
1008
+	 * which runs during the WP 'plugins_loaded' action at priority 9
1009
+	 *
1010
+	 * @return void
1011
+	 */
1012
+	public function brew_espresso()
1013
+	{
1014
+		do_action('AHEE__EE_System__brew_espresso__begin', $this);
1015
+		// load some final core systems
1016
+		add_action('init', array($this, 'set_hooks_for_core'), 1);
1017
+		add_action('init', array($this, 'perform_activations_upgrades_and_migrations'), 3);
1018
+		add_action('init', array($this, 'load_CPTs_and_session'), 5);
1019
+		add_action('init', array($this, 'load_controllers'), 7);
1020
+		add_action('init', array($this, 'core_loaded_and_ready'), 9);
1021
+		add_action('init', array($this, 'initialize'), 10);
1022
+		add_action('init', array($this, 'initialize_last'), 100);
1023
+		if (is_admin() && apply_filters('FHEE__EE_System__brew_espresso__load_pue', true)) {
1024
+			// pew pew pew
1025
+			$this->loader->getShared('EventEspresso\core\services\licensing\LicenseService');
1026
+			do_action('AHEE__EE_System__brew_espresso__after_pue_init');
1027
+		}
1028
+		do_action('AHEE__EE_System__brew_espresso__complete', $this);
1029
+	}
1030
+
1031
+
1032
+	/**
1033
+	 *    set_hooks_for_core
1034
+	 *
1035
+	 * @access public
1036
+	 * @return    void
1037
+	 * @throws EE_Error
1038
+	 */
1039
+	public function set_hooks_for_core()
1040
+	{
1041
+		$this->_deactivate_incompatible_addons();
1042
+		do_action('AHEE__EE_System__set_hooks_for_core');
1043
+		$this->loader->getShared('EventEspresso\core\domain\values\session\SessionLifespan');
1044
+		// caps need to be initialized on every request so that capability maps are set.
1045
+		// @see https://events.codebasehq.com/projects/event-espresso/tickets/8674
1046
+		$this->registry->CAP->init_caps();
1047
+	}
1048
+
1049
+
1050
+	/**
1051
+	 * Using the information gathered in EE_System::_incompatible_addon_error,
1052
+	 * deactivates any addons considered incompatible with the current version of EE
1053
+	 */
1054
+	private function _deactivate_incompatible_addons()
1055
+	{
1056
+		$incompatible_addons = get_option('ee_incompatible_addons', array());
1057
+		if (! empty($incompatible_addons)) {
1058
+			$active_plugins = get_option('active_plugins', array());
1059
+			foreach ($active_plugins as $active_plugin) {
1060
+				foreach ($incompatible_addons as $incompatible_addon) {
1061
+					if (strpos($active_plugin, $incompatible_addon) !== false) {
1062
+						unset($_GET['activate']);
1063
+						espresso_deactivate_plugin($active_plugin);
1064
+					}
1065
+				}
1066
+			}
1067
+		}
1068
+	}
1069
+
1070
+
1071
+	/**
1072
+	 *    perform_activations_upgrades_and_migrations
1073
+	 *
1074
+	 * @access public
1075
+	 * @return    void
1076
+	 */
1077
+	public function perform_activations_upgrades_and_migrations()
1078
+	{
1079
+		do_action('AHEE__EE_System__perform_activations_upgrades_and_migrations');
1080
+	}
1081
+
1082
+
1083
+	/**
1084
+	 * @return void
1085
+	 * @throws DomainException
1086
+	 */
1087
+	public function load_CPTs_and_session()
1088
+	{
1089
+		do_action('AHEE__EE_System__load_CPTs_and_session__start');
1090
+		/** @var EventEspresso\core\domain\services\custom_post_types\RegisterCustomTaxonomies $register_custom_taxonomies */
1091
+		$register_custom_taxonomies = $this->loader->getShared(
1092
+			'EventEspresso\core\domain\services\custom_post_types\RegisterCustomTaxonomies'
1093
+		);
1094
+		$register_custom_taxonomies->registerCustomTaxonomies();
1095
+		/** @var EventEspresso\core\domain\services\custom_post_types\RegisterCustomPostTypes $register_custom_post_types */
1096
+		$register_custom_post_types = $this->loader->getShared(
1097
+			'EventEspresso\core\domain\services\custom_post_types\RegisterCustomPostTypes'
1098
+		);
1099
+		$register_custom_post_types->registerCustomPostTypes();
1100
+		/** @var EventEspresso\core\domain\services\custom_post_types\RegisterCustomTaxonomyTerms $register_custom_taxonomy_terms */
1101
+		$register_custom_taxonomy_terms = $this->loader->getShared(
1102
+			'EventEspresso\core\domain\services\custom_post_types\RegisterCustomTaxonomyTerms'
1103
+		);
1104
+		$register_custom_taxonomy_terms->registerCustomTaxonomyTerms();
1105
+		// load legacy Custom Post Types and Taxonomies
1106
+		$this->loader->getShared('EE_Register_CPTs');
1107
+		do_action('AHEE__EE_System__load_CPTs_and_session__complete');
1108
+	}
1109
+
1110
+
1111
+	/**
1112
+	 * load_controllers
1113
+	 * this is the best place to load any additional controllers that needs access to EE core.
1114
+	 * it is expected that all basic core EE systems, that are not dependant on the current request are loaded at this
1115
+	 * time
1116
+	 *
1117
+	 * @access public
1118
+	 * @return void
1119
+	 */
1120
+	public function load_controllers()
1121
+	{
1122
+		do_action('AHEE__EE_System__load_controllers__start');
1123
+		// let's get it started
1124
+		if (! $this->maintenance_mode->level()
1125
+			&& ($this->request->isFrontend() || $this->request->isFrontAjax())
1126
+		) {
1127
+			do_action('AHEE__EE_System__load_controllers__load_front_controllers');
1128
+			$this->loader->getShared('EE_Front_Controller');
1129
+		} elseif ($this->request->isAdmin() || $this->request->isAdminAjax()) {
1130
+			do_action('AHEE__EE_System__load_controllers__load_admin_controllers');
1131
+			$this->loader->getShared('EE_Admin');
1132
+		}
1133
+		do_action('AHEE__EE_System__load_controllers__complete');
1134
+	}
1135
+
1136
+
1137
+	/**
1138
+	 * core_loaded_and_ready
1139
+	 * all of the basic EE core should be loaded at this point and available regardless of M-Mode
1140
+	 *
1141
+	 * @access public
1142
+	 * @return void
1143
+	 * @throws Exception
1144
+	 */
1145
+	public function core_loaded_and_ready()
1146
+	{
1147
+		if ($this->request->isAdmin() || $this->request->isFrontend() || $this->request->isIframe()) {
1148
+			try {
1149
+				$this->loader->getShared('EventEspresso\core\services\assets\Registry');
1150
+				$this->loader->getShared('EventEspresso\core\domain\services\assets\CoreAssetManager');
1151
+			} catch (Exception $exception) {
1152
+				new ExceptionStackTraceDisplay($exception);
1153
+			}
1154
+		}
1155
+		if ($this->request->isAdmin()
1156
+			|| $this->request->isEeAjax()
1157
+			|| $this->request->isFrontend()
1158
+		) {
1159
+			$this->loader->getShared('EE_Session');
1160
+		}
1161
+		do_action('AHEE__EE_System__core_loaded_and_ready');
1162
+		// load_espresso_template_tags
1163
+		if (is_readable(EE_PUBLIC . 'template_tags.php')
1164
+			&& (
1165
+				$this->request->isFrontend()
1166
+				|| $this->request->isAdmin()
1167
+				|| $this->request->isIframe()
1168
+				|| $this->request->isFeed()
1169
+			)
1170
+		) {
1171
+			require_once EE_PUBLIC . 'template_tags.php';
1172
+		}
1173
+		do_action('AHEE__EE_System__set_hooks_for_shortcodes_modules_and_addons');
1174
+	}
1175
+
1176
+
1177
+	/**
1178
+	 * initialize
1179
+	 * this is the best place to begin initializing client code
1180
+	 *
1181
+	 * @access public
1182
+	 * @return void
1183
+	 */
1184
+	public function initialize()
1185
+	{
1186
+		do_action('AHEE__EE_System__initialize');
1187
+	}
1188
+
1189
+
1190
+	/**
1191
+	 * initialize_last
1192
+	 * this is run really late during the WP init hook point, and ensures that mostly everything else that needs to
1193
+	 * initialize has done so
1194
+	 *
1195
+	 * @access public
1196
+	 * @return void
1197
+	 */
1198
+	public function initialize_last()
1199
+	{
1200
+		do_action('AHEE__EE_System__initialize_last');
1201
+		/** @var EventEspresso\core\domain\services\custom_post_types\RewriteRules $rewrite_rules */
1202
+		$rewrite_rules = $this->loader->getShared(
1203
+			'EventEspresso\core\domain\services\custom_post_types\RewriteRules'
1204
+		);
1205
+		$rewrite_rules->flushRewriteRules();
1206
+		add_action('admin_bar_init', array($this, 'addEspressoToolbar'));
1207
+		if ($this->request->isAdmin() && function_exists('wp_add_privacy_policy_content')) {
1208
+			$this->loader->getShared('EventEspresso\core\services\privacy\policy\PrivacyPolicyManager');
1209
+		}
1210
+	}
1211
+
1212
+
1213
+	/**
1214
+	 * @return void
1215
+	 * @throws EE_Error
1216
+	 */
1217
+	public function addEspressoToolbar()
1218
+	{
1219
+		$this->loader->getShared(
1220
+			'EventEspresso\core\domain\services\admin\AdminToolBar',
1221
+			array($this->registry->CAP)
1222
+		);
1223
+	}
1224
+
1225
+
1226
+	/**
1227
+	 * do_not_cache
1228
+	 * sets no cache headers and defines no cache constants for WP plugins
1229
+	 *
1230
+	 * @access public
1231
+	 * @return void
1232
+	 */
1233
+	public static function do_not_cache()
1234
+	{
1235
+		// set no cache constants
1236
+		if (! defined('DONOTCACHEPAGE')) {
1237
+			define('DONOTCACHEPAGE', true);
1238
+		}
1239
+		if (! defined('DONOTCACHCEOBJECT')) {
1240
+			define('DONOTCACHCEOBJECT', true);
1241
+		}
1242
+		if (! defined('DONOTCACHEDB')) {
1243
+			define('DONOTCACHEDB', true);
1244
+		}
1245
+		// add no cache headers
1246
+		add_action('send_headers', array('EE_System', 'nocache_headers'), 10);
1247
+		// plus a little extra for nginx and Google Chrome
1248
+		add_filter('nocache_headers', array('EE_System', 'extra_nocache_headers'), 10, 1);
1249
+		// prevent browsers from prefetching of the rel='next' link, because it may contain content that interferes with the registration process
1250
+		remove_action('wp_head', 'adjacent_posts_rel_link_wp_head');
1251
+	}
1252
+
1253
+
1254
+	/**
1255
+	 *    extra_nocache_headers
1256
+	 *
1257
+	 * @access    public
1258
+	 * @param $headers
1259
+	 * @return    array
1260
+	 */
1261
+	public static function extra_nocache_headers($headers)
1262
+	{
1263
+		// for NGINX
1264
+		$headers['X-Accel-Expires'] = 0;
1265
+		// plus extra for Google Chrome since it doesn't seem to respect "no-cache", but WILL respect "no-store"
1266
+		$headers['Cache-Control'] = 'no-store, no-cache, must-revalidate, max-age=0';
1267
+		return $headers;
1268
+	}
1269
+
1270
+
1271
+	/**
1272
+	 *    nocache_headers
1273
+	 *
1274
+	 * @access    public
1275
+	 * @return    void
1276
+	 */
1277
+	public static function nocache_headers()
1278
+	{
1279
+		nocache_headers();
1280
+	}
1281
+
1282
+
1283
+	/**
1284
+	 * simply hooks into "wp_list_pages_exclude" filter (for wp_list_pages method) and makes sure EE critical pages are
1285
+	 * never returned with the function.
1286
+	 *
1287
+	 * @param  array $exclude_array any existing pages being excluded are in this array.
1288
+	 * @return array
1289
+	 */
1290
+	public function remove_pages_from_wp_list_pages($exclude_array)
1291
+	{
1292
+		return array_merge($exclude_array, $this->registry->CFG->core->get_critical_pages_array());
1293
+	}
1294 1294
 }
Please login to merge, or discard this patch.
Spacing   +30 added lines, -30 removed lines patch added patch discarded remove patch
@@ -141,7 +141,7 @@  discard block
 block discarded – undo
141 141
         EE_Maintenance_Mode $maintenance_mode = null
142 142
     ) {
143 143
         // check if class object is instantiated
144
-        if (! self::$_instance instanceof EE_System) {
144
+        if ( ! self::$_instance instanceof EE_System) {
145 145
             self::$_instance = new self($registry, $loader, $request, $maintenance_mode);
146 146
         }
147 147
         return self::$_instance;
@@ -258,7 +258,7 @@  discard block
 block discarded – undo
258 258
         $this->capabilities = $this->loader->getShared('EE_Capabilities');
259 259
         add_action(
260 260
             'AHEE__EE_Capabilities__init_caps__before_initialization',
261
-            function () {
261
+            function() {
262 262
                 LoaderFactory::getLoader()->getShared('EE_Payment_Method_Manager');
263 263
             }
264 264
         );
@@ -299,7 +299,7 @@  discard block
 block discarded – undo
299 299
     {
300 300
         // set autoloaders for all of the classes implementing EEI_Plugin_API
301 301
         // which provide helpers for EE plugin authors to more easily register certain components with EE.
302
-        EEH_Autoloader::instance()->register_autoloaders_for_each_file_in_folder(EE_LIBRARIES . 'plugin_api');
302
+        EEH_Autoloader::instance()->register_autoloaders_for_each_file_in_folder(EE_LIBRARIES.'plugin_api');
303 303
         $this->loader->getShared('EE_Request_Handler');
304 304
     }
305 305
 
@@ -319,14 +319,14 @@  discard block
 block discarded – undo
319 319
         $load_callback,
320 320
         $plugin_file_constant
321 321
     ) {
322
-        if (! defined($version_constant)) {
322
+        if ( ! defined($version_constant)) {
323 323
             return;
324 324
         }
325 325
         $addon_version = constant($version_constant);
326 326
         if ($addon_version && version_compare($addon_version, $min_version_required, '<')) {
327 327
             remove_action('AHEE__EE_System__load_espresso_addons', $load_callback);
328
-            if (! function_exists('deactivate_plugins')) {
329
-                require_once ABSPATH . 'wp-admin/includes/plugin.php';
328
+            if ( ! function_exists('deactivate_plugins')) {
329
+                require_once ABSPATH.'wp-admin/includes/plugin.php';
330 330
             }
331 331
             deactivate_plugins(plugin_basename(constant($plugin_file_constant)));
332 332
             unset($_GET['activate'], $_REQUEST['activate'], $_GET['activate-multi'], $_REQUEST['activate-multi']);
@@ -340,7 +340,7 @@  discard block
 block discarded – undo
340 340
                     $min_version_required
341 341
                 ),
342 342
                 __FILE__,
343
-                __FUNCTION__ . "({$addon_name})",
343
+                __FUNCTION__."({$addon_name})",
344 344
                 __LINE__
345 345
             );
346 346
             EE_Error::get_notices(false, true);
@@ -390,7 +390,7 @@  discard block
 block discarded – undo
390 390
                 true
391 391
             )
392 392
         ) {
393
-            include_once EE_THIRD_PARTY . 'wp-api-basic-auth' . DS . 'basic-auth.php';
393
+            include_once EE_THIRD_PARTY.'wp-api-basic-auth'.DS.'basic-auth.php';
394 394
         }
395 395
         do_action('AHEE__EE_System__load_espresso_addons__complete');
396 396
     }
@@ -492,11 +492,11 @@  discard block
 block discarded – undo
492 492
     private function fix_espresso_db_upgrade_option($espresso_db_update = null)
493 493
     {
494 494
         do_action('FHEE__EE_System__manage_fix_espresso_db_upgrade_option__begin', $espresso_db_update);
495
-        if (! $espresso_db_update) {
495
+        if ( ! $espresso_db_update) {
496 496
             $espresso_db_update = get_option('espresso_db_update');
497 497
         }
498 498
         // check that option is an array
499
-        if (! is_array($espresso_db_update)) {
499
+        if ( ! is_array($espresso_db_update)) {
500 500
             // if option is FALSE, then it never existed
501 501
             if ($espresso_db_update === false) {
502 502
                 // make $espresso_db_update an array and save option with autoload OFF
@@ -516,10 +516,10 @@  discard block
 block discarded – undo
516 516
                     // so it must be numerically-indexed, where values are versions installed...
517 517
                     // fix it!
518 518
                     $version_string = $should_be_array;
519
-                    $corrected_db_update[ $version_string ] = array('unknown-date');
519
+                    $corrected_db_update[$version_string] = array('unknown-date');
520 520
                 } else {
521 521
                     // ok it checks out
522
-                    $corrected_db_update[ $should_be_version_string ] = $should_be_array;
522
+                    $corrected_db_update[$should_be_version_string] = $should_be_array;
523 523
                 }
524 524
             }
525 525
             $espresso_db_update = $corrected_db_update;
@@ -602,13 +602,13 @@  discard block
 block discarded – undo
602 602
      */
603 603
     public function update_list_of_installed_versions($version_history = null, $current_version_to_add = null)
604 604
     {
605
-        if (! $version_history) {
605
+        if ( ! $version_history) {
606 606
             $version_history = $this->fix_espresso_db_upgrade_option($version_history);
607 607
         }
608 608
         if ($current_version_to_add === null) {
609 609
             $current_version_to_add = espresso_version();
610 610
         }
611
-        $version_history[ $current_version_to_add ][] = date('Y-m-d H:i:s', time());
611
+        $version_history[$current_version_to_add][] = date('Y-m-d H:i:s', time());
612 612
         // re-save
613 613
         return update_option('espresso_db_update', $version_history);
614 614
     }
@@ -698,7 +698,7 @@  discard block
 block discarded – undo
698 698
         if ($activation_history_for_addon) {
699 699
             // it exists, so this isn't a completely new install
700 700
             // check if this version already in that list of previously installed versions
701
-            if (! isset($activation_history_for_addon[ $version_to_upgrade_to ])) {
701
+            if ( ! isset($activation_history_for_addon[$version_to_upgrade_to])) {
702 702
                 // it a version we haven't seen before
703 703
                 if ($version_is_higher === 1) {
704 704
                     $req_type = EE_System::req_type_upgrade;
@@ -776,7 +776,7 @@  discard block
 block discarded – undo
776 776
             foreach ($activation_history as $version => $times_activated) {
777 777
                 // check there is a record of when this version was activated. Otherwise,
778 778
                 // mark it as unknown
779
-                if (! $times_activated) {
779
+                if ( ! $times_activated) {
780 780
                     $times_activated = array('unknown-date');
781 781
                 }
782 782
                 if (is_string($times_activated)) {
@@ -807,7 +807,7 @@  discard block
 block discarded – undo
807 807
     {
808 808
         $notices = EE_Error::get_notices(false);
809 809
         // if current user is an admin and it's not an ajax or rest request
810
-        if (! isset($notices['errors'])
810
+        if ( ! isset($notices['errors'])
811 811
             && $this->request->isAdmin()
812 812
             && apply_filters(
813 813
                 'FHEE__EE_System__redirect_to_about_ee__do_redirect',
@@ -876,7 +876,7 @@  discard block
 block discarded – undo
876 876
     private function _parse_model_names()
877 877
     {
878 878
         // get all the files in the EE_MODELS folder that end in .model.php
879
-        $models = glob(EE_MODELS . '*.model.php');
879
+        $models = glob(EE_MODELS.'*.model.php');
880 880
         $model_names = array();
881 881
         $non_abstract_db_models = array();
882 882
         foreach ($models as $model) {
@@ -885,9 +885,9 @@  discard block
 block discarded – undo
885 885
             $short_name = str_replace('EEM_', '', $classname);
886 886
             $reflectionClass = new ReflectionClass($classname);
887 887
             if ($reflectionClass->isSubclassOf('EEM_Base') && ! $reflectionClass->isAbstract()) {
888
-                $non_abstract_db_models[ $short_name ] = $classname;
888
+                $non_abstract_db_models[$short_name] = $classname;
889 889
             }
890
-            $model_names[ $short_name ] = $classname;
890
+            $model_names[$short_name] = $classname;
891 891
         }
892 892
         $this->registry->models = apply_filters('FHEE__EE_System__parse_model_names', $model_names);
893 893
         $this->registry->non_abstract_db_models = apply_filters(
@@ -922,7 +922,7 @@  discard block
 block discarded – undo
922 922
             )
923 923
         );
924 924
         if ($domain->isCaffeinated()) {
925
-            require_once EE_CAFF_PATH . 'brewing_regular.php';
925
+            require_once EE_CAFF_PATH.'brewing_regular.php';
926 926
         }
927 927
     }
928 928
 
@@ -973,7 +973,7 @@  discard block
 block discarded – undo
973 973
         $class_names = EEH_Class_Tools::get_class_names_for_all_callbacks_on_hook(
974 974
             'AHEE__EE_System__register_shortcodes_modules_and_addons'
975 975
         );
976
-        if (! empty($class_names)) {
976
+        if ( ! empty($class_names)) {
977 977
             $msg = __(
978 978
                 'The following plugins, addons, or modules appear to be incompatible with this version of Event Espresso and were automatically deactivated to avoid fatal errors:',
979 979
                 'event_espresso'
@@ -985,7 +985,7 @@  discard block
 block discarded – undo
985 985
                             array('EE_', 'EEM_', 'EED_', 'EES_', 'EEW_'),
986 986
                             '',
987 987
                             $class_name
988
-                        ) . '</b></li>';
988
+                        ).'</b></li>';
989 989
             }
990 990
             $msg .= '</ul>';
991 991
             $msg .= __(
@@ -1054,7 +1054,7 @@  discard block
 block discarded – undo
1054 1054
     private function _deactivate_incompatible_addons()
1055 1055
     {
1056 1056
         $incompatible_addons = get_option('ee_incompatible_addons', array());
1057
-        if (! empty($incompatible_addons)) {
1057
+        if ( ! empty($incompatible_addons)) {
1058 1058
             $active_plugins = get_option('active_plugins', array());
1059 1059
             foreach ($active_plugins as $active_plugin) {
1060 1060
                 foreach ($incompatible_addons as $incompatible_addon) {
@@ -1121,7 +1121,7 @@  discard block
 block discarded – undo
1121 1121
     {
1122 1122
         do_action('AHEE__EE_System__load_controllers__start');
1123 1123
         // let's get it started
1124
-        if (! $this->maintenance_mode->level()
1124
+        if ( ! $this->maintenance_mode->level()
1125 1125
             && ($this->request->isFrontend() || $this->request->isFrontAjax())
1126 1126
         ) {
1127 1127
             do_action('AHEE__EE_System__load_controllers__load_front_controllers');
@@ -1160,7 +1160,7 @@  discard block
 block discarded – undo
1160 1160
         }
1161 1161
         do_action('AHEE__EE_System__core_loaded_and_ready');
1162 1162
         // load_espresso_template_tags
1163
-        if (is_readable(EE_PUBLIC . 'template_tags.php')
1163
+        if (is_readable(EE_PUBLIC.'template_tags.php')
1164 1164
             && (
1165 1165
                 $this->request->isFrontend()
1166 1166
                 || $this->request->isAdmin()
@@ -1168,7 +1168,7 @@  discard block
 block discarded – undo
1168 1168
                 || $this->request->isFeed()
1169 1169
             )
1170 1170
         ) {
1171
-            require_once EE_PUBLIC . 'template_tags.php';
1171
+            require_once EE_PUBLIC.'template_tags.php';
1172 1172
         }
1173 1173
         do_action('AHEE__EE_System__set_hooks_for_shortcodes_modules_and_addons');
1174 1174
     }
@@ -1233,13 +1233,13 @@  discard block
 block discarded – undo
1233 1233
     public static function do_not_cache()
1234 1234
     {
1235 1235
         // set no cache constants
1236
-        if (! defined('DONOTCACHEPAGE')) {
1236
+        if ( ! defined('DONOTCACHEPAGE')) {
1237 1237
             define('DONOTCACHEPAGE', true);
1238 1238
         }
1239
-        if (! defined('DONOTCACHCEOBJECT')) {
1239
+        if ( ! defined('DONOTCACHCEOBJECT')) {
1240 1240
             define('DONOTCACHCEOBJECT', true);
1241 1241
         }
1242
-        if (! defined('DONOTCACHEDB')) {
1242
+        if ( ! defined('DONOTCACHEDB')) {
1243 1243
             define('DONOTCACHEDB', true);
1244 1244
         }
1245 1245
         // add no cache headers
Please login to merge, or discard this patch.
espresso.php 1 patch
Indentation   +80 added lines, -80 removed lines patch added patch discarded remove patch
@@ -38,103 +38,103 @@
 block discarded – undo
38 38
  * @since           4.0
39 39
  */
40 40
 if (function_exists('espresso_version')) {
41
-    if (! function_exists('espresso_duplicate_plugin_error')) {
42
-        /**
43
-         *    espresso_duplicate_plugin_error
44
-         *    displays if more than one version of EE is activated at the same time
45
-         */
46
-        function espresso_duplicate_plugin_error()
47
-        {
48
-            ?>
41
+	if (! function_exists('espresso_duplicate_plugin_error')) {
42
+		/**
43
+		 *    espresso_duplicate_plugin_error
44
+		 *    displays if more than one version of EE is activated at the same time
45
+		 */
46
+		function espresso_duplicate_plugin_error()
47
+		{
48
+			?>
49 49
             <div class="error">
50 50
                 <p>
51 51
                     <?php
52
-                    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
-                    ); ?>
52
+					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
+					); ?>
56 56
                 </p>
57 57
             </div>
58 58
             <?php
59
-            espresso_deactivate_plugin(plugin_basename(__FILE__));
60
-        }
61
-    }
62
-    add_action('admin_notices', 'espresso_duplicate_plugin_error', 1);
59
+			espresso_deactivate_plugin(plugin_basename(__FILE__));
60
+		}
61
+	}
62
+	add_action('admin_notices', 'espresso_duplicate_plugin_error', 1);
63 63
 } else {
64
-    define('EE_MIN_PHP_VER_REQUIRED', '5.4.0');
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.4.0');
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
-        define('EVENT_ESPRESSO_MAIN_FILE', __FILE__);
97
-        /**
98
-         * espresso_version
99
-         * Returns the plugin version
100
-         *
101
-         * @return string
102
-         */
103
-        function espresso_version()
104
-        {
105
-            return apply_filters('FHEE__espresso__espresso_version', '4.9.62.rc.057');
106
-        }
94
+		add_action('admin_notices', 'espresso_minimum_php_version_error', 1);
95
+	} else {
96
+		define('EVENT_ESPRESSO_MAIN_FILE', __FILE__);
97
+		/**
98
+		 * espresso_version
99
+		 * Returns the plugin version
100
+		 *
101
+		 * @return string
102
+		 */
103
+		function espresso_version()
104
+		{
105
+			return apply_filters('FHEE__espresso__espresso_version', '4.9.62.rc.057');
106
+		}
107 107
 
108
-        /**
109
-         * espresso_plugin_activation
110
-         * adds a wp-option to indicate that EE has been activated via the WP admin plugins page
111
-         */
112
-        function espresso_plugin_activation()
113
-        {
114
-            update_option('ee_espresso_activation', true);
115
-        }
108
+		/**
109
+		 * espresso_plugin_activation
110
+		 * adds a wp-option to indicate that EE has been activated via the WP admin plugins page
111
+		 */
112
+		function espresso_plugin_activation()
113
+		{
114
+			update_option('ee_espresso_activation', true);
115
+		}
116 116
 
117
-        register_activation_hook(EVENT_ESPRESSO_MAIN_FILE, 'espresso_plugin_activation');
117
+		register_activation_hook(EVENT_ESPRESSO_MAIN_FILE, 'espresso_plugin_activation');
118 118
 
119
-        require_once __DIR__ . '/core/bootstrap_espresso.php';
120
-        bootstrap_espresso();
121
-    }
119
+		require_once __DIR__ . '/core/bootstrap_espresso.php';
120
+		bootstrap_espresso();
121
+	}
122 122
 }
123 123
 if (! function_exists('espresso_deactivate_plugin')) {
124
-    /**
125
-     *    deactivate_plugin
126
-     * usage:  espresso_deactivate_plugin( plugin_basename( __FILE__ ));
127
-     *
128
-     * @access public
129
-     * @param string $plugin_basename - the results of plugin_basename( __FILE__ ) for the plugin's main file
130
-     * @return    void
131
-     */
132
-    function espresso_deactivate_plugin($plugin_basename = '')
133
-    {
134
-        if (! function_exists('deactivate_plugins')) {
135
-            require_once ABSPATH . 'wp-admin/includes/plugin.php';
136
-        }
137
-        unset($_GET['activate'], $_REQUEST['activate']);
138
-        deactivate_plugins($plugin_basename);
139
-    }
124
+	/**
125
+	 *    deactivate_plugin
126
+	 * usage:  espresso_deactivate_plugin( plugin_basename( __FILE__ ));
127
+	 *
128
+	 * @access public
129
+	 * @param string $plugin_basename - the results of plugin_basename( __FILE__ ) for the plugin's main file
130
+	 * @return    void
131
+	 */
132
+	function espresso_deactivate_plugin($plugin_basename = '')
133
+	{
134
+		if (! function_exists('deactivate_plugins')) {
135
+			require_once ABSPATH . 'wp-admin/includes/plugin.php';
136
+		}
137
+		unset($_GET['activate'], $_REQUEST['activate']);
138
+		deactivate_plugins($plugin_basename);
139
+	}
140 140
 }
Please login to merge, or discard this patch.