Completed
Branch dev (08e10f)
by
unknown
12:20 queued 10:12
created
core/domain/Domain.php 1 patch
Indentation   +83 added lines, -83 removed lines patch added patch discarded remove patch
@@ -15,87 +15,87 @@
 block discarded – undo
15 15
  */
16 16
 class Domain extends DomainBase implements CaffeinatedInterface
17 17
 {
18
-    /**
19
-     * URL path component used to denote an API request
20
-     */
21
-    const API_NAMESPACE = 'ee/v';
22
-
23
-    const ASSET_NAMESPACE = 'eventespresso';
24
-
25
-    const TEXT_DOMAIN = 'event_espresso';
26
-
27
-    /**
28
-     * Slug used for the context where a registration status is changed from a manual trigger in the Registration Admin
29
-     * Page ui.
30
-     */
31
-    const CONTEXT_REGISTRATION_STATUS_CHANGE_REGISTRATION_ADMIN
32
-        = 'manual_registration_status_change_from_registration_admin';
33
-
34
-    const CONTEXT_REGISTRATION_STATUS_CHANGE_REGISTRATION_ADMIN_NOTIFY
35
-        = 'manual_registration_status_change_from_registration_admin_and_notify';
36
-
37
-
38
-    /**
39
-     * Whether or not EE core is the full premium version.
40
-     * @since 4.9.59.p
41
-     * @var bool
42
-     */
43
-    private $caffeinated;
44
-
45
-    /**
46
-     * @since $VID:$
47
-     * @var bool
48
-     */
49
-    private $multisite;
50
-
51
-
52
-    public function __construct(FilePath $plugin_file, Version $version)
53
-    {
54
-        parent::__construct($plugin_file, $version);
55
-        $this->setCaffeinated();
56
-        $this->multisite = is_multisite();
57
-    }
58
-
59
-    /**
60
-     * Whether or not EE core is the full premium version.
61
-     * @since 4.9.59.p
62
-     * @return bool
63
-     */
64
-    public function isCaffeinated()
65
-    {
66
-        return $this->caffeinated;
67
-    }
68
-
69
-
70
-    /**
71
-     * Setter for $is_caffeinated property.
72
-     * @since 4.9.59.p
73
-     */
74
-    private function setCaffeinated()
75
-    {
76
-        $this->caffeinated = (! defined('EE_DECAF') || EE_DECAF !== true)
77
-            && is_readable($this->pluginPath() . 'caffeinated/brewing_regular.php');
78
-    }
79
-
80
-
81
-    /**
82
-     * This should be used everywhere the Event Espresso brand name is referenced in public facing interfaces
83
-     * to allow for filtering the brand.
84
-     *
85
-     * @return string
86
-     */
87
-    public static function brandName()
88
-    {
89
-        return (string) apply_filters('FHEE__EventEspresso_core_domain_Domain__brandName', 'Event Espresso');
90
-    }
91
-
92
-
93
-    /**
94
-     * @return bool
95
-     * @since $VID:$
96
-     */
97
-    public function isMultiSite(): bool
98
-    {
99
-        return $this->multisite;
100
-    }
18
+	/**
19
+	 * URL path component used to denote an API request
20
+	 */
21
+	const API_NAMESPACE = 'ee/v';
22
+
23
+	const ASSET_NAMESPACE = 'eventespresso';
24
+
25
+	const TEXT_DOMAIN = 'event_espresso';
26
+
27
+	/**
28
+	 * Slug used for the context where a registration status is changed from a manual trigger in the Registration Admin
29
+	 * Page ui.
30
+	 */
31
+	const CONTEXT_REGISTRATION_STATUS_CHANGE_REGISTRATION_ADMIN
32
+		= 'manual_registration_status_change_from_registration_admin';
33
+
34
+	const CONTEXT_REGISTRATION_STATUS_CHANGE_REGISTRATION_ADMIN_NOTIFY
35
+		= 'manual_registration_status_change_from_registration_admin_and_notify';
36
+
37
+
38
+	/**
39
+	 * Whether or not EE core is the full premium version.
40
+	 * @since 4.9.59.p
41
+	 * @var bool
42
+	 */
43
+	private $caffeinated;
44
+
45
+	/**
46
+	 * @since $VID:$
47
+	 * @var bool
48
+	 */
49
+	private $multisite;
50
+
51
+
52
+	public function __construct(FilePath $plugin_file, Version $version)
53
+	{
54
+		parent::__construct($plugin_file, $version);
55
+		$this->setCaffeinated();
56
+		$this->multisite = is_multisite();
57
+	}
58
+
59
+	/**
60
+	 * Whether or not EE core is the full premium version.
61
+	 * @since 4.9.59.p
62
+	 * @return bool
63
+	 */
64
+	public function isCaffeinated()
65
+	{
66
+		return $this->caffeinated;
67
+	}
68
+
69
+
70
+	/**
71
+	 * Setter for $is_caffeinated property.
72
+	 * @since 4.9.59.p
73
+	 */
74
+	private function setCaffeinated()
75
+	{
76
+		$this->caffeinated = (! defined('EE_DECAF') || EE_DECAF !== true)
77
+			&& is_readable($this->pluginPath() . 'caffeinated/brewing_regular.php');
78
+	}
79
+
80
+
81
+	/**
82
+	 * This should be used everywhere the Event Espresso brand name is referenced in public facing interfaces
83
+	 * to allow for filtering the brand.
84
+	 *
85
+	 * @return string
86
+	 */
87
+	public static function brandName()
88
+	{
89
+		return (string) apply_filters('FHEE__EventEspresso_core_domain_Domain__brandName', 'Event Espresso');
90
+	}
91
+
92
+
93
+	/**
94
+	 * @return bool
95
+	 * @since $VID:$
96
+	 */
97
+	public function isMultiSite(): bool
98
+	{
99
+		return $this->multisite;
100
+	}
101 101
 }
Please login to merge, or discard this patch.
core/domain/services/capabilities/FeatureFlags.php 1 patch
Indentation   +68 added lines, -68 removed lines patch added patch discarded remove patch
@@ -16,80 +16,80 @@
 block discarded – undo
16 16
 class FeatureFlags
17 17
 {
18 18
 
19
-    /**
20
-     * @var CapabilitiesChecker $capabilities_checker
21
-     */
22
-    private $capabilities_checker;
19
+	/**
20
+	 * @var CapabilitiesChecker $capabilities_checker
21
+	 */
22
+	private $capabilities_checker;
23 23
 
24
-    /**
25
-     * array of key value pairs where the key is the feature flag in question
26
-     * and the value is either a boolean or a CapCheck object defining the required permissions
27
-     * example:
28
-     *       [
29
-     *          'use_bulk_edit' => true,
30
-     *          'use_death_ray' => new CapCheck( 'ee-death-ray-cap', 'context-desc' )
31
-     *      ]
32
-     * array is filterable via FHEE__EventEspresso_core_domain_services_capabilities_FeatureFlags
33
-     *
34
-     * @var boolean[]|CapCheck[]
35
-     */
36
-    private $feature_flags;
24
+	/**
25
+	 * array of key value pairs where the key is the feature flag in question
26
+	 * and the value is either a boolean or a CapCheck object defining the required permissions
27
+	 * example:
28
+	 *       [
29
+	 *          'use_bulk_edit' => true,
30
+	 *          'use_death_ray' => new CapCheck( 'ee-death-ray-cap', 'context-desc' )
31
+	 *      ]
32
+	 * array is filterable via FHEE__EventEspresso_core_domain_services_capabilities_FeatureFlags
33
+	 *
34
+	 * @var boolean[]|CapCheck[]
35
+	 */
36
+	private $feature_flags;
37 37
 
38
-    /**
39
-     * @var Domain
40
-     */
41
-    protected $domain;
38
+	/**
39
+	 * @var Domain
40
+	 */
41
+	protected $domain;
42 42
 
43 43
 
44
-    /**
45
-     * FeatureFlags constructor.
46
-     *
47
-     * @param CapabilitiesChecker $capabilities_checker
48
-     * @param Domain              $domain
49
-     */
50
-    public function __construct(CapabilitiesChecker $capabilities_checker, Domain $domain)
51
-    {
52
-        $this->capabilities_checker = $capabilities_checker;
53
-        $this->domain = $domain;
54
-        $this->feature_flags = apply_filters(
55
-            'FHEE__EventEspresso_core_domain_services_capabilities_FeatureFlags',
56
-            [
57
-                'ee_advanced_event_editor'   => $this->domain->isCaffeinated() && ! $this->domain->isMultiSite(),
58
-                'ee_event_editor_bulk_edit'  => $this->domain->isCaffeinated() && ! $this->domain->isMultiSite(),
59
-                'use_default_ticket_manager' => false,
60
-                'use_event_description_rte'  => false,
61
-                'use_experimental_rte'       => false,
62
-                'use_reg_form_builder'       => false,
63
-                'use_reg_options_meta_box'   => false,
64
-            ]
65
-        );
66
-    }
44
+	/**
45
+	 * FeatureFlags constructor.
46
+	 *
47
+	 * @param CapabilitiesChecker $capabilities_checker
48
+	 * @param Domain              $domain
49
+	 */
50
+	public function __construct(CapabilitiesChecker $capabilities_checker, Domain $domain)
51
+	{
52
+		$this->capabilities_checker = $capabilities_checker;
53
+		$this->domain = $domain;
54
+		$this->feature_flags = apply_filters(
55
+			'FHEE__EventEspresso_core_domain_services_capabilities_FeatureFlags',
56
+			[
57
+				'ee_advanced_event_editor'   => $this->domain->isCaffeinated() && ! $this->domain->isMultiSite(),
58
+				'ee_event_editor_bulk_edit'  => $this->domain->isCaffeinated() && ! $this->domain->isMultiSite(),
59
+				'use_default_ticket_manager' => false,
60
+				'use_event_description_rte'  => false,
61
+				'use_experimental_rte'       => false,
62
+				'use_reg_form_builder'       => false,
63
+				'use_reg_options_meta_box'   => false,
64
+			]
65
+		);
66
+	}
67 67
 
68 68
 
69
-    /**
70
-     * @param string $feature
71
-     * @return bool
72
-     */
73
-    public function allowed(string $feature): bool
74
-    {
75
-        $flag = $this->feature_flags[ $feature ] ?? false;
76
-        try {
77
-            return $flag instanceof CapCheck
78
-                ? $this->capabilities_checker->processCapCheck($flag)
79
-                : filter_var($flag, FILTER_VALIDATE_BOOLEAN);
80
-        } catch (InsufficientPermissionsException $e) {
81
-            // eat the exception
82
-        }
83
-        return false;
84
-    }
69
+	/**
70
+	 * @param string $feature
71
+	 * @return bool
72
+	 */
73
+	public function allowed(string $feature): bool
74
+	{
75
+		$flag = $this->feature_flags[ $feature ] ?? false;
76
+		try {
77
+			return $flag instanceof CapCheck
78
+				? $this->capabilities_checker->processCapCheck($flag)
79
+				: filter_var($flag, FILTER_VALIDATE_BOOLEAN);
80
+		} catch (InsufficientPermissionsException $e) {
81
+			// eat the exception
82
+		}
83
+		return false;
84
+	}
85 85
 
86 86
 
87
-    /**
88
-     * @return array
89
-     */
90
-    public function getAllowedFeatures(): array
91
-    {
92
-        $allowed = array_filter($this->feature_flags, [$this, 'allowed'], ARRAY_FILTER_USE_KEY);
93
-        return array_keys($allowed);
94
-    }
87
+	/**
88
+	 * @return array
89
+	 */
90
+	public function getAllowedFeatures(): array
91
+	{
92
+		$allowed = array_filter($this->feature_flags, [$this, 'allowed'], ARRAY_FILTER_USE_KEY);
93
+		return array_keys($allowed);
94
+	}
95 95
 }
Please login to merge, or discard this patch.
core/EE_Dependency_Map.core.php 1 patch
Indentation   +1127 added lines, -1127 removed lines patch added patch discarded remove patch
@@ -21,1131 +21,1131 @@
 block discarded – undo
21 21
 class EE_Dependency_Map
22 22
 {
23 23
 
24
-    /**
25
-     * This means that the requested class dependency is not present in the dependency map
26
-     */
27
-    const not_registered = 0;
28
-
29
-    /**
30
-     * This instructs class loaders to ALWAYS return a newly instantiated object for the requested class.
31
-     */
32
-    const load_new_object = 1;
33
-
34
-    /**
35
-     * This instructs class loaders to return a previously instantiated and cached object for the requested class.
36
-     * IF a previously instantiated object does not exist, a new one will be created and added to the cache.
37
-     */
38
-    const load_from_cache = 2;
39
-
40
-    /**
41
-     * When registering a dependency,
42
-     * this indicates to keep any existing dependencies that already exist,
43
-     * and simply discard any new dependencies declared in the incoming data
44
-     */
45
-    const KEEP_EXISTING_DEPENDENCIES = 0;
46
-
47
-    /**
48
-     * When registering a dependency,
49
-     * this indicates to overwrite any existing dependencies that already exist using the incoming data
50
-     */
51
-    const OVERWRITE_DEPENDENCIES = 1;
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 = [];
87
-
88
-    /**
89
-     * @type array $_class_loaders
90
-     */
91
-    protected $_class_loaders = [];
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
-     * @throws InvalidAliasException
109
-     */
110
-    public function initialize()
111
-    {
112
-        $this->_register_core_dependencies();
113
-        $this->_register_core_class_loaders();
114
-        $this->_register_core_aliases();
115
-    }
116
-
117
-
118
-    /**
119
-     * @singleton method used to instantiate class object
120
-     * @param ClassInterfaceCache|null $class_cache
121
-     * @return EE_Dependency_Map
122
-     */
123
-    public static function instance(ClassInterfaceCache $class_cache = null): EE_Dependency_Map
124
-    {
125
-        // check if class object is instantiated, and instantiated properly
126
-        if (
127
-            ! EE_Dependency_Map::$_instance instanceof EE_Dependency_Map
128
-            && $class_cache instanceof ClassInterfaceCache
129
-        ) {
130
-            EE_Dependency_Map::$_instance = new EE_Dependency_Map($class_cache);
131
-        }
132
-        return EE_Dependency_Map::$_instance;
133
-    }
134
-
135
-
136
-    /**
137
-     * @param RequestInterface $request
138
-     */
139
-    public function setRequest(RequestInterface $request)
140
-    {
141
-        $this->request = $request;
142
-    }
143
-
144
-
145
-    /**
146
-     * @param LegacyRequestInterface $legacy_request
147
-     */
148
-    public function setLegacyRequest(LegacyRequestInterface $legacy_request)
149
-    {
150
-        $this->legacy_request = $legacy_request;
151
-    }
152
-
153
-
154
-    /**
155
-     * @param ResponseInterface $response
156
-     */
157
-    public function setResponse(ResponseInterface $response)
158
-    {
159
-        $this->response = $response;
160
-    }
161
-
162
-
163
-    /**
164
-     * @param LoaderInterface $loader
165
-     */
166
-    public function setLoader(LoaderInterface $loader)
167
-    {
168
-        $this->loader = $loader;
169
-    }
170
-
171
-
172
-    /**
173
-     * @param string $class
174
-     * @param array  $dependencies
175
-     * @param int    $overwrite
176
-     * @return bool
177
-     */
178
-    public static function register_dependencies(
179
-        string $class,
180
-        array $dependencies,
181
-        int $overwrite = EE_Dependency_Map::KEEP_EXISTING_DEPENDENCIES
182
-    ): bool {
183
-        return EE_Dependency_Map::$_instance->registerDependencies($class, $dependencies, $overwrite);
184
-    }
185
-
186
-
187
-    /**
188
-     * Assigns an array of class names and corresponding load sources (new or cached)
189
-     * to the class specified by the first parameter.
190
-     * IMPORTANT !!!
191
-     * The order of elements in the incoming $dependencies array MUST match
192
-     * the order of the constructor parameters for the class in question.
193
-     * This is especially important when overriding any existing dependencies that are registered.
194
-     * the third parameter controls whether any duplicate dependencies are overwritten or not.
195
-     *
196
-     * @param string $class
197
-     * @param array  $dependencies
198
-     * @param int    $overwrite
199
-     * @return bool
200
-     */
201
-    public function registerDependencies(
202
-        string $class,
203
-        array $dependencies,
204
-        int $overwrite = EE_Dependency_Map::KEEP_EXISTING_DEPENDENCIES
205
-    ): bool {
206
-        $class      = trim($class, '\\');
207
-        $registered = false;
208
-        if (empty(EE_Dependency_Map::$_instance->_dependency_map[ $class ])) {
209
-            EE_Dependency_Map::$_instance->_dependency_map[ $class ] = [];
210
-        }
211
-        // we need to make sure that any aliases used when registering a dependency
212
-        // get resolved to the correct class name
213
-        foreach ($dependencies as $dependency => $load_source) {
214
-            $alias = EE_Dependency_Map::$_instance->getFqnForAlias($dependency);
215
-            if (
216
-                $overwrite === EE_Dependency_Map::OVERWRITE_DEPENDENCIES
217
-                || ! isset(EE_Dependency_Map::$_instance->_dependency_map[ $class ][ $alias ])
218
-            ) {
219
-                unset($dependencies[ $dependency ]);
220
-                $dependencies[ $alias ] = $load_source;
221
-                $registered             = true;
222
-            }
223
-        }
224
-        // now add our two lists of dependencies together.
225
-        // using Union (+=) favours the arrays in precedence from left to right,
226
-        // so $dependencies is NOT overwritten because it is listed first
227
-        // ie: with A = B + C, entries in B take precedence over duplicate entries in C
228
-        // Union is way faster than array_merge() but should be used with caution...
229
-        // especially with numerically indexed arrays
230
-        $dependencies += EE_Dependency_Map::$_instance->_dependency_map[ $class ];
231
-        // now we need to ensure that the resulting dependencies
232
-        // array only has the entries that are required for the class
233
-        // so first count how many dependencies were originally registered for the class
234
-        $dependency_count = count(EE_Dependency_Map::$_instance->_dependency_map[ $class ]);
235
-        // if that count is non-zero (meaning dependencies were already registered)
236
-        EE_Dependency_Map::$_instance->_dependency_map[ $class ] = $dependency_count
237
-            // then truncate the  final array to match that count
238
-            ? array_slice($dependencies, 0, $dependency_count)
239
-            // otherwise just take the incoming array because nothing previously existed
240
-            : $dependencies;
241
-        return $registered;
242
-    }
243
-
244
-
245
-    /**
246
-     * @param string          $class_name
247
-     * @param callable|string $loader
248
-     * @param bool            $overwrite
249
-     * @return bool
250
-     * @throws DomainException
251
-     */
252
-    public static function register_class_loader(
253
-        string $class_name,
254
-        $loader = 'load_core',
255
-        bool $overwrite = false
256
-    ): bool {
257
-        return EE_Dependency_Map::$_instance->registerClassLoader($class_name, $loader, $overwrite);
258
-    }
259
-
260
-
261
-    /**
262
-     * @param string $class_name
263
-     * @param Closure|string $loader
264
-     * @param bool   $overwrite
265
-     * @return bool
266
-     * @throws DomainException
267
-     */
268
-    public function registerClassLoader(string $class_name, $loader = 'load_core', bool $overwrite = false): bool
269
-    {
270
-        if (! $loader instanceof Closure && strpos($class_name, '\\') !== false) {
271
-            throw new DomainException(
272
-                esc_html__('Don\'t use class loaders for FQCNs.', 'event_espresso')
273
-            );
274
-        }
275
-        // check that loader is callable or method starts with "load_" and exists in EE_Registry
276
-        if (
277
-            ! is_callable($loader)
278
-            && (
279
-                strpos($loader, 'load_') !== 0
280
-                || ! method_exists('EE_Registry', $loader)
281
-            )
282
-        ) {
283
-            throw new DomainException(
284
-                sprintf(
285
-                    esc_html__(
286
-                        '"%1$s" is not a valid loader method on EE_Registry.',
287
-                        'event_espresso'
288
-                    ),
289
-                    $loader
290
-                )
291
-            );
292
-        }
293
-        $class_name = EE_Dependency_Map::$_instance->getFqnForAlias($class_name);
294
-        if ($overwrite || ! isset(EE_Dependency_Map::$_instance->_class_loaders[ $class_name ])) {
295
-            EE_Dependency_Map::$_instance->_class_loaders[ $class_name ] = $loader;
296
-            return true;
297
-        }
298
-        return false;
299
-    }
300
-
301
-
302
-    /**
303
-     * @return array
304
-     */
305
-    public function dependency_map(): array
306
-    {
307
-        return $this->_dependency_map;
308
-    }
309
-
310
-
311
-    /**
312
-     * returns TRUE if dependency map contains a listing for the provided class name
313
-     *
314
-     * @param string $class_name
315
-     * @return boolean
316
-     */
317
-    public function has(string $class_name = ''): bool
318
-    {
319
-        // all legacy models have the same dependencies
320
-        if (strpos($class_name, 'EEM_') === 0) {
321
-            $class_name = 'LEGACY_MODELS';
322
-        }
323
-        return isset($this->_dependency_map[ $class_name ]);
324
-    }
325
-
326
-
327
-    /**
328
-     * returns TRUE if dependency map contains a listing for the provided class name AND dependency
329
-     *
330
-     * @param string $class_name
331
-     * @param string $dependency
332
-     * @return bool
333
-     */
334
-    public function has_dependency_for_class(string $class_name = '', string $dependency = ''): bool
335
-    {
336
-        // all legacy models have the same dependencies
337
-        if (strpos($class_name, 'EEM_') === 0) {
338
-            $class_name = 'LEGACY_MODELS';
339
-        }
340
-        $dependency = $this->getFqnForAlias($dependency, $class_name);
341
-        return isset($this->_dependency_map[ $class_name ][ $dependency ]);
342
-    }
343
-
344
-
345
-    /**
346
-     * returns loading strategy for whether a previously cached dependency should be loaded or a new instance returned
347
-     *
348
-     * @param string $class_name
349
-     * @param string $dependency
350
-     * @return int
351
-     */
352
-    public function loading_strategy_for_class_dependency(string $class_name = '', string $dependency = ''): int
353
-    {
354
-        // all legacy models have the same dependencies
355
-        if (strpos($class_name, 'EEM_') === 0) {
356
-            $class_name = 'LEGACY_MODELS';
357
-        }
358
-        $dependency = $this->getFqnForAlias($dependency);
359
-        return $this->has_dependency_for_class($class_name, $dependency)
360
-            ? $this->_dependency_map[ $class_name ][ $dependency ]
361
-            : EE_Dependency_Map::not_registered;
362
-    }
363
-
364
-
365
-    /**
366
-     * @param string $class_name
367
-     * @return string | Closure
368
-     */
369
-    public function class_loader(string $class_name)
370
-    {
371
-        // all legacy models use load_model()
372
-        if (strpos($class_name, 'EEM_') === 0) {
373
-            return 'load_model';
374
-        }
375
-        // EE_CPT_*_Strategy classes like EE_CPT_Event_Strategy, EE_CPT_Venue_Strategy, etc
376
-        // perform strpos() first to avoid loading regex every time we load a class
377
-        if (
378
-            strpos($class_name, 'EE_CPT_') === 0
379
-            && preg_match('/^EE_CPT_([a-zA-Z]+)_Strategy$/', $class_name)
380
-        ) {
381
-            return 'load_core';
382
-        }
383
-        $class_name = $this->getFqnForAlias($class_name);
384
-        return $this->_class_loaders[ $class_name ] ?? '';
385
-    }
386
-
387
-
388
-    /**
389
-     * @return array
390
-     */
391
-    public function class_loaders(): array
392
-    {
393
-        return $this->_class_loaders;
394
-    }
395
-
396
-
397
-    /**
398
-     * adds an alias for a classname
399
-     *
400
-     * @param string $fqcn      the class name that should be used (concrete class to replace interface)
401
-     * @param string $alias     the class name that would be type hinted for (abstract parent or interface)
402
-     * @param string $for_class the class that has the dependency (is type hinting for the interface)
403
-     * @throws InvalidAliasException
404
-     */
405
-    public function add_alias(string $fqcn, string $alias, string $for_class = '')
406
-    {
407
-        $this->class_cache->addAlias($fqcn, $alias, $for_class);
408
-    }
409
-
410
-
411
-    /**
412
-     * Returns TRUE if the provided fully qualified name IS an alias
413
-     * WHY?
414
-     * Because if a class is type hinting for a concretion,
415
-     * then why would we need to find another class to supply it?
416
-     * ie: if a class asks for `Fully/Qualified/Namespace/SpecificClassName`,
417
-     * then give it an instance of `Fully/Qualified/Namespace/SpecificClassName`.
418
-     * Don't go looking for some substitute.
419
-     * Whereas if a class is type hinting for an interface...
420
-     * then we need to find an actual class to use.
421
-     * So the interface IS the alias for some other FQN,
422
-     * and we need to find out if `Fully/Qualified/Namespace/SomeInterface`
423
-     * represents some other class.
424
-     *
425
-     * @param string $fqn
426
-     * @param string $for_class
427
-     * @return bool
428
-     */
429
-    public function isAlias(string $fqn = '', string $for_class = ''): bool
430
-    {
431
-        return $this->class_cache->isAlias($fqn, $for_class);
432
-    }
433
-
434
-
435
-    /**
436
-     * Returns a FQN for provided alias if one exists, otherwise returns the original $alias
437
-     * functions recursively, so that multiple aliases can be used to drill down to a FQN
438
-     *  for example:
439
-     *      if the following two entries were added to the _aliases array:
440
-     *          array(
441
-     *              'interface_alias'           => 'some\namespace\interface'
442
-     *              'some\namespace\interface'  => 'some\namespace\classname'
443
-     *          )
444
-     *      then one could use EE_Registry::instance()->create( 'interface_alias' )
445
-     *      to load an instance of 'some\namespace\classname'
446
-     *
447
-     * @param string $alias
448
-     * @param string $for_class
449
-     * @return string
450
-     */
451
-    public function getFqnForAlias(string $alias = '', string $for_class = ''): string
452
-    {
453
-        return $this->class_cache->getFqnForAlias($alias, $for_class);
454
-    }
455
-
456
-
457
-    /**
458
-     * Registers the core dependencies and whether a previously instantiated object should be loaded from the cache,
459
-     * if one exists, or whether a new object should be generated every time the requested class is loaded.
460
-     * This is done by using the following class constants:
461
-     *        EE_Dependency_Map::load_from_cache - loads previously instantiated object
462
-     *        EE_Dependency_Map::load_new_object - generates a new object every time
463
-     */
464
-    protected function _register_core_dependencies()
465
-    {
466
-        $this->_dependency_map = [
467
-            'EE_Admin'                                                                                                    => [
468
-                'EventEspresso\core\services\loaders\Loader'  => EE_Dependency_Map::load_from_cache,
469
-                'EventEspresso\core\services\request\Request' => EE_Dependency_Map::load_from_cache,
470
-            ],
471
-            'EE_Request_Handler'                                                                                          => [
472
-                'EventEspresso\core\services\request\Request'  => EE_Dependency_Map::load_from_cache,
473
-                'EventEspresso\core\services\request\Response' => EE_Dependency_Map::load_from_cache,
474
-            ],
475
-            'EE_System'                                                                                                   => [
476
-                'EventEspresso\core\services\loaders\Loader'  => EE_Dependency_Map::load_from_cache,
477
-                'EE_Maintenance_Mode'                         => EE_Dependency_Map::load_from_cache,
478
-                'EE_Registry'                                 => EE_Dependency_Map::load_from_cache,
479
-                'EventEspresso\core\services\request\Request' => EE_Dependency_Map::load_from_cache,
480
-                'EventEspresso\core\services\routing\Router'  => EE_Dependency_Map::load_from_cache,
481
-            ],
482
-            'EE_Session'                                                                                                  => [
483
-                'EventEspresso\core\services\cache\TransientCacheStorage'  => EE_Dependency_Map::load_from_cache,
484
-                'EventEspresso\core\domain\values\session\SessionLifespan' => EE_Dependency_Map::load_from_cache,
485
-                'EventEspresso\core\services\request\Request'              => EE_Dependency_Map::load_from_cache,
486
-                'EventEspresso\core\services\session\SessionStartHandler'  => EE_Dependency_Map::load_from_cache,
487
-                'EE_Encryption'                                            => EE_Dependency_Map::load_from_cache,
488
-            ],
489
-            'EE_Cart'                                                                                                     => [
490
-                'EE_Session' => EE_Dependency_Map::load_from_cache,
491
-            ],
492
-            'EE_Messenger_Collection_Loader'                                                                              => [
493
-                'EE_Messenger_Collection' => EE_Dependency_Map::load_new_object,
494
-            ],
495
-            'EE_Message_Type_Collection_Loader'                                                                           => [
496
-                'EE_Message_Type_Collection' => EE_Dependency_Map::load_new_object,
497
-            ],
498
-            'EE_Message_Resource_Manager'                                                                                 => [
499
-                'EE_Messenger_Collection_Loader'    => EE_Dependency_Map::load_new_object,
500
-                'EE_Message_Type_Collection_Loader' => EE_Dependency_Map::load_new_object,
501
-                'EEM_Message_Template_Group'        => EE_Dependency_Map::load_from_cache,
502
-            ],
503
-            'EE_Message_Factory'                                                                                          => [
504
-                'EE_Message_Resource_Manager' => EE_Dependency_Map::load_from_cache,
505
-            ],
506
-            'EE_messages'                                                                                                 => [
507
-                'EE_Message_Resource_Manager' => EE_Dependency_Map::load_from_cache,
508
-            ],
509
-            'EE_Messages_Generator'                                                                                       => [
510
-                'EE_Messages_Queue'                    => EE_Dependency_Map::load_new_object,
511
-                'EE_Messages_Data_Handler_Collection'  => EE_Dependency_Map::load_new_object,
512
-                'EE_Message_Template_Group_Collection' => EE_Dependency_Map::load_new_object,
513
-                'EEH_Parse_Shortcodes'                 => EE_Dependency_Map::load_from_cache,
514
-            ],
515
-            'EE_Messages_Processor'                                                                                       => [
516
-                'EE_Message_Resource_Manager' => EE_Dependency_Map::load_from_cache,
517
-            ],
518
-            'EE_Messages_Queue'                                                                                           => [
519
-                'EE_Message_Repository' => EE_Dependency_Map::load_new_object,
520
-            ],
521
-            'EE_Messages_Template_Defaults'                                                                               => [
522
-                'EEM_Message_Template_Group' => EE_Dependency_Map::load_from_cache,
523
-                'EEM_Message_Template'       => EE_Dependency_Map::load_from_cache,
524
-            ],
525
-            'EE_Message_To_Generate_From_Request'                                                                         => [
526
-                'EE_Message_Resource_Manager'                 => EE_Dependency_Map::load_from_cache,
527
-                'EventEspresso\core\services\request\Request' => EE_Dependency_Map::load_from_cache,
528
-            ],
529
-            'EventEspresso\core\services\commands\CommandBus'                                                             => [
530
-                'EventEspresso\core\services\commands\CommandHandlerManager' => EE_Dependency_Map::load_from_cache,
531
-            ],
532
-            'EventEspresso\services\commands\CommandHandler'                                                              => [
533
-                'EE_Registry'         => EE_Dependency_Map::load_from_cache,
534
-                'CommandBusInterface' => EE_Dependency_Map::load_from_cache,
535
-            ],
536
-            'EventEspresso\core\services\commands\CommandHandlerManager'                                                  => [
537
-                'EventEspresso\core\services\loaders\Loader' => EE_Dependency_Map::load_from_cache,
538
-            ],
539
-            'EventEspresso\core\services\commands\CompositeCommandHandler'                                                => [
540
-                'EventEspresso\core\services\commands\CommandBus'     => EE_Dependency_Map::load_from_cache,
541
-                'EventEspresso\core\services\commands\CommandFactory' => EE_Dependency_Map::load_from_cache,
542
-            ],
543
-            'EventEspresso\core\services\commands\CommandFactory'                                                         => [
544
-                'EventEspresso\core\services\loaders\Loader' => EE_Dependency_Map::load_from_cache,
545
-            ],
546
-            'EventEspresso\core\services\commands\middleware\CapChecker'                                                  => [
547
-                'EventEspresso\core\domain\services\capabilities\CapabilitiesChecker' => EE_Dependency_Map::load_from_cache,
548
-            ],
549
-            'EventEspresso\core\domain\services\capabilities\CapabilitiesChecker'                                         => [
550
-                'EE_Capabilities' => EE_Dependency_Map::load_from_cache,
551
-            ],
552
-            'EventEspresso\core\domain\services\capabilities\RegistrationsCapChecker'                                     => [
553
-                'EE_Capabilities' => EE_Dependency_Map::load_from_cache,
554
-            ],
555
-            'EventEspresso\core\services\commands\registration\CreateRegistrationCommandHandler'                          => [
556
-                'EventEspresso\core\domain\services\registration\CreateRegistrationService' => EE_Dependency_Map::load_from_cache,
557
-            ],
558
-            'EventEspresso\core\services\commands\registration\CopyRegistrationDetailsCommandHandler'                     => [
559
-                'EventEspresso\core\domain\services\registration\CopyRegistrationService' => EE_Dependency_Map::load_from_cache,
560
-            ],
561
-            'EventEspresso\core\services\commands\registration\CopyRegistrationPaymentsCommandHandler'                    => [
562
-                'EventEspresso\core\domain\services\registration\CopyRegistrationService' => EE_Dependency_Map::load_from_cache,
563
-            ],
564
-            'EventEspresso\core\services\commands\registration\CancelRegistrationAndTicketLineItemCommandHandler'         => [
565
-                'EventEspresso\core\domain\services\registration\CancelTicketLineItemService' => EE_Dependency_Map::load_from_cache,
566
-            ],
567
-            'EventEspresso\core\services\commands\registration\UpdateRegistrationAndTransactionAfterChangeCommandHandler' => [
568
-                'EventEspresso\core\domain\services\registration\UpdateRegistrationService' => EE_Dependency_Map::load_from_cache,
569
-            ],
570
-            'EventEspresso\core\services\commands\ticket\CreateTicketLineItemCommandHandler'                              => [
571
-                'EventEspresso\core\domain\services\ticket\CreateTicketLineItemService' => EE_Dependency_Map::load_from_cache,
572
-            ],
573
-            'EventEspresso\core\services\commands\ticket\CancelTicketLineItemCommandHandler'                              => [
574
-                'EventEspresso\core\domain\services\ticket\CancelTicketLineItemService' => EE_Dependency_Map::load_from_cache,
575
-            ],
576
-            'EventEspresso\core\domain\services\registration\CancelRegistrationService'                                   => [
577
-                'EventEspresso\core\domain\services\ticket\CancelTicketLineItemService' => EE_Dependency_Map::load_from_cache,
578
-            ],
579
-            'EventEspresso\core\services\commands\attendee\CreateAttendeeCommandHandler'                                  => [
580
-                'EEM_Attendee' => EE_Dependency_Map::load_from_cache,
581
-            ],
582
-            'EventEspresso\core\services\database\TableManager'                                                           => [
583
-                'EventEspresso\core\services\database\TableAnalysis' => EE_Dependency_Map::load_from_cache,
584
-            ],
585
-            'EE_Data_Migration_Class_Base'                                                                                => [
586
-                'EventEspresso\core\services\database\TableAnalysis' => EE_Dependency_Map::load_from_cache,
587
-                'EventEspresso\core\services\database\TableManager'  => EE_Dependency_Map::load_from_cache,
588
-            ],
589
-            'EE_DMS_Core_4_1_0'                                                                                           => [
590
-                'EventEspresso\core\services\database\TableAnalysis' => EE_Dependency_Map::load_from_cache,
591
-                'EventEspresso\core\services\database\TableManager'  => EE_Dependency_Map::load_from_cache,
592
-            ],
593
-            'EE_DMS_Core_4_2_0'                                                                                           => [
594
-                'EventEspresso\core\services\database\TableAnalysis' => EE_Dependency_Map::load_from_cache,
595
-                'EventEspresso\core\services\database\TableManager'  => EE_Dependency_Map::load_from_cache,
596
-            ],
597
-            'EE_DMS_Core_4_3_0'                                                                                           => [
598
-                'EventEspresso\core\services\database\TableAnalysis' => EE_Dependency_Map::load_from_cache,
599
-                'EventEspresso\core\services\database\TableManager'  => EE_Dependency_Map::load_from_cache,
600
-            ],
601
-            'EE_DMS_Core_4_4_0'                                                                                           => [
602
-                'EventEspresso\core\services\database\TableAnalysis' => EE_Dependency_Map::load_from_cache,
603
-                'EventEspresso\core\services\database\TableManager'  => EE_Dependency_Map::load_from_cache,
604
-            ],
605
-            'EE_DMS_Core_4_5_0'                                                                                           => [
606
-                'EventEspresso\core\services\database\TableAnalysis' => EE_Dependency_Map::load_from_cache,
607
-                'EventEspresso\core\services\database\TableManager'  => EE_Dependency_Map::load_from_cache,
608
-            ],
609
-            'EE_DMS_Core_4_6_0'                                                                                           => [
610
-                'EventEspresso\core\services\database\TableAnalysis' => EE_Dependency_Map::load_from_cache,
611
-                'EventEspresso\core\services\database\TableManager'  => EE_Dependency_Map::load_from_cache,
612
-            ],
613
-            'EE_DMS_Core_4_7_0'                                                                                           => [
614
-                'EventEspresso\core\services\database\TableAnalysis' => EE_Dependency_Map::load_from_cache,
615
-                'EventEspresso\core\services\database\TableManager'  => EE_Dependency_Map::load_from_cache,
616
-            ],
617
-            'EE_DMS_Core_4_8_0'                                                                                           => [
618
-                'EventEspresso\core\services\database\TableAnalysis' => EE_Dependency_Map::load_from_cache,
619
-                'EventEspresso\core\services\database\TableManager'  => EE_Dependency_Map::load_from_cache,
620
-            ],
621
-            'EE_DMS_Core_4_9_0'                                                                                           => [
622
-                'EventEspresso\core\services\database\TableAnalysis' => EE_Dependency_Map::load_from_cache,
623
-                'EventEspresso\core\services\database\TableManager'  => EE_Dependency_Map::load_from_cache,
624
-            ],
625
-            'EE_DMS_Core_4_10_0'                                                                                          => [
626
-                'EventEspresso\core\services\database\TableAnalysis' => EE_Dependency_Map::load_from_cache,
627
-                'EventEspresso\core\services\database\TableManager'  => EE_Dependency_Map::load_from_cache,
628
-                'EE_DMS_Core_4_9_0'                                  => EE_Dependency_Map::load_from_cache,
629
-            ],
630
-            'EE_DMS_Core_4_11_0'                                                                                          => [
631
-                'EE_DMS_Core_4_10_0'                                 => EE_Dependency_Map::load_from_cache,
632
-                'EventEspresso\core\services\database\TableAnalysis' => EE_Dependency_Map::load_from_cache,
633
-                'EventEspresso\core\services\database\TableManager'  => EE_Dependency_Map::load_from_cache,
634
-            ],
635
-            'EE_DMS_Core_4_12_0'                                                                                          => [
636
-                'EE_DMS_Core_4_11_0'                                 => EE_Dependency_Map::load_from_cache,
637
-                'EventEspresso\core\services\database\TableAnalysis' => EE_Dependency_Map::load_from_cache,
638
-                'EventEspresso\core\services\database\TableManager'  => EE_Dependency_Map::load_from_cache,
639
-            ],
640
-            'EventEspresso\core\services\assets\I18nRegistry'                                                             => [
641
-                [],
642
-                'EventEspresso\core\domain\Domain' => EE_Dependency_Map::load_from_cache,
643
-            ],
644
-            'EventEspresso\core\services\assets\Registry'                                                                 => [
645
-                'EventEspresso\core\services\assets\AssetCollection' => EE_Dependency_Map::load_from_cache,
646
-                'EventEspresso\core\services\assets\AssetManifest'   => EE_Dependency_Map::load_from_cache,
647
-            ],
648
-            'EventEspresso\core\domain\entities\shortcodes\EspressoCancelled'                                             => [
649
-                'EventEspresso\core\services\cache\PostRelatedCacheManager' => EE_Dependency_Map::load_from_cache,
650
-            ],
651
-            'EventEspresso\core\domain\entities\shortcodes\EspressoCheckout'                                              => [
652
-                'EventEspresso\core\services\cache\PostRelatedCacheManager' => EE_Dependency_Map::load_from_cache,
653
-            ],
654
-            'EventEspresso\core\domain\entities\shortcodes\EspressoEventAttendees'                                        => [
655
-                'EventEspresso\core\services\cache\PostRelatedCacheManager' => EE_Dependency_Map::load_from_cache,
656
-            ],
657
-            'EventEspresso\core\domain\entities\shortcodes\EspressoEvents'                                                => [
658
-                'EventEspresso\core\services\cache\PostRelatedCacheManager' => EE_Dependency_Map::load_from_cache,
659
-            ],
660
-            'EventEspresso\core\domain\entities\shortcodes\EspressoThankYou'                                              => [
661
-                'EventEspresso\core\services\cache\PostRelatedCacheManager' => EE_Dependency_Map::load_from_cache,
662
-            ],
663
-            'EventEspresso\core\domain\entities\shortcodes\EspressoTicketSelector'                                        => [
664
-                'EventEspresso\core\services\cache\PostRelatedCacheManager' => EE_Dependency_Map::load_from_cache,
665
-            ],
666
-            'EventEspresso\core\domain\entities\shortcodes\EspressoTxnPage'                                               => [
667
-                'EventEspresso\core\services\cache\PostRelatedCacheManager' => EE_Dependency_Map::load_from_cache,
668
-            ],
669
-            'EventEspresso\core\services\cache\BasicCacheManager'                                                         => [
670
-                'EventEspresso\core\services\cache\TransientCacheStorage' => EE_Dependency_Map::load_from_cache,
671
-            ],
672
-            'EventEspresso\core\services\cache\PostRelatedCacheManager'                                                   => [
673
-                'EventEspresso\core\services\cache\TransientCacheStorage' => EE_Dependency_Map::load_from_cache,
674
-            ],
675
-            'EventEspresso\core\domain\services\validation\email\EmailValidationService'                                  => [
676
-                'EE_Registration_Config'                     => EE_Dependency_Map::load_from_cache,
677
-                'EventEspresso\core\services\loaders\Loader' => EE_Dependency_Map::load_from_cache,
678
-            ],
679
-            'EventEspresso\core\domain\values\EmailAddress'                                                               => [
680
-                null,
681
-                'EventEspresso\core\domain\services\validation\email\EmailValidationService' => EE_Dependency_Map::load_from_cache,
682
-            ],
683
-            'EventEspresso\core\services\orm\ModelFieldFactory'                                                           => [
684
-                'EventEspresso\core\services\loaders\Loader' => EE_Dependency_Map::load_from_cache,
685
-            ],
686
-            'LEGACY_MODELS'                                                                                               => [
687
-                null,
688
-                'EventEspresso\core\services\database\ModelFieldFactory' => EE_Dependency_Map::load_from_cache,
689
-            ],
690
-            'EE_Module_Request_Router'                                                                                    => [
691
-                'EventEspresso\core\services\request\Request' => EE_Dependency_Map::load_from_cache,
692
-            ],
693
-            'EE_Registration_Processor'                                                                                   => [
694
-                'EventEspresso\core\services\request\Request' => EE_Dependency_Map::load_from_cache,
695
-            ],
696
-            'EventEspresso\core\services\notifications\PersistentAdminNoticeManager'                                      => [
697
-                null,
698
-                'EventEspresso\core\domain\services\capabilities\CapabilitiesChecker' => EE_Dependency_Map::load_from_cache,
699
-                'EventEspresso\core\services\request\Request'                         => EE_Dependency_Map::load_from_cache,
700
-            ],
701
-            'EventEspresso\caffeinated\modules\recaptcha_invisible\InvisibleRecaptcha'                                    => [
702
-                'EE_Registration_Config' => EE_Dependency_Map::load_from_cache,
703
-                'EE_Session'             => EE_Dependency_Map::load_from_cache,
704
-            ],
705
-            'EventEspresso\modules\ticket_selector\DisplayTicketSelector'                                                 => [
706
-                'EventEspresso\core\domain\entities\users\CurrentUser' => EE_Dependency_Map::load_from_cache,
707
-                'EventEspresso\core\services\request\Request'          => EE_Dependency_Map::load_from_cache,
708
-                'EE_Ticket_Selector_Config'                            => EE_Dependency_Map::load_from_cache,
709
-            ],
710
-            'EventEspresso\modules\ticket_selector\ProcessTicketSelector'                                                 => [
711
-                'EE_Core_Config'                                                          => EE_Dependency_Map::load_from_cache,
712
-                'EventEspresso\core\services\request\Request'                             => EE_Dependency_Map::load_from_cache,
713
-                'EE_Session'                                                              => EE_Dependency_Map::load_from_cache,
714
-                'EEM_Ticket'                                                              => EE_Dependency_Map::load_from_cache,
715
-                'EventEspresso\modules\ticket_selector\TicketDatetimeAvailabilityTracker' => EE_Dependency_Map::load_from_cache,
716
-            ],
717
-            'EventEspresso\modules\ticket_selector\TicketDatetimeAvailabilityTracker'                                     => [
718
-                'EEM_Datetime' => EE_Dependency_Map::load_from_cache,
719
-            ],
720
-            'EventEspresso\core\domain\entities\custom_post_types\CustomPostTypeDefinitions'                              => [
721
-                'EE_Core_Config'                             => EE_Dependency_Map::load_from_cache,
722
-                'EventEspresso\core\services\loaders\Loader' => EE_Dependency_Map::load_from_cache,
723
-            ],
724
-            'EventEspresso\core\domain\services\custom_post_types\RegisterCustomPostTypes'                                => [
725
-                'EventEspresso\core\domain\entities\custom_post_types\CustomPostTypeDefinitions' => EE_Dependency_Map::load_from_cache,
726
-            ],
727
-            'EventEspresso\core\domain\services\custom_post_types\RegisterCustomTaxonomies'                               => [
728
-                'EventEspresso\core\domain\entities\custom_post_types\CustomTaxonomyDefinitions' => EE_Dependency_Map::load_from_cache,
729
-            ],
730
-            'EE_CPT_Strategy'                                                                                             => [
731
-                'EventEspresso\core\domain\entities\custom_post_types\CustomPostTypeDefinitions' => EE_Dependency_Map::load_from_cache,
732
-                'EventEspresso\core\domain\entities\custom_post_types\CustomTaxonomyDefinitions' => EE_Dependency_Map::load_from_cache,
733
-            ],
734
-            'EventEspresso\core\services\loaders\ObjectIdentifier'                                                        => [
735
-                'EventEspresso\core\services\loaders\ClassInterfaceCache' => EE_Dependency_Map::load_from_cache,
736
-            ],
737
-            'EventEspresso\core\CPTs\CptQueryModifier'                                                                    => [
738
-                null,
739
-                null,
740
-                null,
741
-                'EventEspresso\core\services\request\CurrentPage' => EE_Dependency_Map::load_from_cache,
742
-                'EventEspresso\core\services\request\Request'     => EE_Dependency_Map::load_from_cache,
743
-                'EventEspresso\core\services\loaders\Loader'      => EE_Dependency_Map::load_from_cache,
744
-            ],
745
-            'EventEspresso\core\services\dependencies\DependencyResolver'                                                 => [
746
-                'EventEspresso\core\services\container\Mirror'            => EE_Dependency_Map::load_from_cache,
747
-                'EventEspresso\core\services\loaders\ClassInterfaceCache' => EE_Dependency_Map::load_from_cache,
748
-                'EE_Dependency_Map'                                       => EE_Dependency_Map::load_from_cache,
749
-            ],
750
-            'EventEspresso\core\services\routing\RouteMatchSpecificationDependencyResolver'                               => [
751
-                'EventEspresso\core\services\container\Mirror'            => EE_Dependency_Map::load_from_cache,
752
-                'EventEspresso\core\services\loaders\ClassInterfaceCache' => EE_Dependency_Map::load_from_cache,
753
-                'EE_Dependency_Map'                                       => EE_Dependency_Map::load_from_cache,
754
-            ],
755
-            'EventEspresso\core\services\routing\RouteMatchSpecificationFactory'                                          => [
756
-                'EventEspresso\core\services\routing\RouteMatchSpecificationDependencyResolver' => EE_Dependency_Map::load_from_cache,
757
-                'EventEspresso\core\services\loaders\Loader'                                    => EE_Dependency_Map::load_from_cache,
758
-            ],
759
-            'EventEspresso\core\services\routing\RouteMatchSpecificationManager'                                          => [
760
-                'EventEspresso\core\services\routing\RouteMatchSpecificationCollection' => EE_Dependency_Map::load_from_cache,
761
-                'EventEspresso\core\services\routing\RouteMatchSpecificationFactory'    => EE_Dependency_Map::load_from_cache,
762
-            ],
763
-            'EE_URL_Validation_Strategy'                                                                                  => [
764
-                null,
765
-                null,
766
-                'EventEspresso\core\services\validators\URLValidator' => EE_Dependency_Map::load_from_cache,
767
-            ],
768
-            'EventEspresso\core\services\request\files\FilesDataHandler'                                                  => [
769
-                'EventEspresso\core\services\request\Request' => EE_Dependency_Map::load_from_cache,
770
-            ],
771
-            'EventEspressoBatchRequest\BatchRequestProcessor'                                                             => [
772
-                'EventEspresso\core\services\loaders\Loader' => EE_Dependency_Map::load_from_cache,
773
-            ],
774
-            'EventEspresso\core\domain\services\converters\RestApiSpoofer'                                                => [
775
-                'WP_REST_Server'                                               => EE_Dependency_Map::load_from_cache,
776
-                'EED_Core_Rest_Api'                                            => EE_Dependency_Map::load_from_cache,
777
-                'EventEspresso\core\libraries\rest_api\controllers\model\Read' => EE_Dependency_Map::load_from_cache,
778
-                null,
779
-            ],
780
-            'EventEspresso\core\services\routing\RouteHandler'                                                            => [
781
-                'EventEspresso\core\services\json\JsonDataNodeHandler' => EE_Dependency_Map::load_from_cache,
782
-                'EventEspresso\core\services\loaders\Loader'           => EE_Dependency_Map::load_from_cache,
783
-                'EventEspresso\core\services\request\Request'          => EE_Dependency_Map::load_from_cache,
784
-                'EventEspresso\core\services\routing\RouteCollection'  => EE_Dependency_Map::load_from_cache,
785
-            ],
786
-            'EventEspresso\core\services\json\JsonDataNodeHandler'                                                        => [
787
-                'EventEspresso\core\services\json\JsonDataNodeValidator' => EE_Dependency_Map::load_from_cache,
788
-            ],
789
-            'EventEspresso\core\services\routing\Router'                                                                  => [
790
-                'EE_Dependency_Map'                                => EE_Dependency_Map::load_from_cache,
791
-                'EventEspresso\core\services\loaders\Loader'       => EE_Dependency_Map::load_from_cache,
792
-                'EventEspresso\core\services\routing\RouteHandler' => EE_Dependency_Map::load_from_cache,
793
-            ],
794
-            'EventEspresso\core\services\assets\AssetManifest'                                                            => [
795
-                'EventEspresso\core\domain\Domain' => EE_Dependency_Map::load_from_cache,
796
-            ],
797
-            'EventEspresso\core\services\assets\AssetManifestFactory'                                                     => [
798
-                'EventEspresso\core\services\loaders\Loader' => EE_Dependency_Map::load_from_cache,
799
-            ],
800
-            'EventEspresso\core\services\assets\BaristaFactory'                                                           => [
801
-                'EventEspresso\core\services\assets\AssetManifestFactory' => EE_Dependency_Map::load_from_cache,
802
-                'EventEspresso\core\services\loaders\Loader'              => EE_Dependency_Map::load_from_cache,
803
-            ],
804
-            'EventEspresso\core\domain\services\capabilities\FeatureFlags'                                                => [
805
-                'EventEspresso\core\domain\services\capabilities\CapabilitiesChecker' => EE_Dependency_Map::load_from_cache,
806
-                'EventEspresso\core\domain\Domain' => EE_Dependency_Map::load_from_cache,
807
-            ],
808
-            'EventEspresso\core\services\addon\AddonManager'                                                              => [
809
-                'EventEspresso\core\services\addon\AddonCollection'              => EE_Dependency_Map::load_from_cache,
810
-                'EventEspresso\core\Psr4Autoloader'                              => EE_Dependency_Map::load_from_cache,
811
-                'EventEspresso\core\services\addon\api\v1\RegisterAddon'         => EE_Dependency_Map::load_from_cache,
812
-                'EventEspresso\core\services\addon\api\IncompatibleAddonHandler' => EE_Dependency_Map::load_from_cache,
813
-                'EventEspresso\core\services\addon\api\ThirdPartyPluginHandler'  => EE_Dependency_Map::load_from_cache,
814
-            ],
815
-            'EventEspresso\core\services\addon\api\ThirdPartyPluginHandler'                                               => [
816
-                'EventEspresso\core\services\request\Request' => EE_Dependency_Map::load_from_cache,
817
-            ],
818
-            'EventEspressoBatchRequest\JobHandlers\ExecuteBatchDeletion'                                                  => [
819
-                'EventEspresso\core\services\orm\tree_traversal\NodeGroupDao' => EE_Dependency_Map::load_from_cache,
820
-            ],
821
-            'EventEspressoBatchRequest\JobHandlers\PreviewEventDeletion'                                                  => [
822
-                'EventEspresso\core\services\orm\tree_traversal\NodeGroupDao' => EE_Dependency_Map::load_from_cache,
823
-            ],
824
-            'EventEspresso\core\domain\services\admin\events\data\PreviewDeletion'                                        => [
825
-                'EventEspresso\core\services\orm\tree_traversal\NodeGroupDao' => EE_Dependency_Map::load_from_cache,
826
-                'EEM_Event'                                                   => EE_Dependency_Map::load_from_cache,
827
-                'EEM_Datetime'                                                => EE_Dependency_Map::load_from_cache,
828
-                'EEM_Registration'                                            => EE_Dependency_Map::load_from_cache,
829
-            ],
830
-            'EventEspresso\core\domain\services\admin\events\data\ConfirmDeletion'                                        => [
831
-                'EventEspresso\core\services\orm\tree_traversal\NodeGroupDao' => EE_Dependency_Map::load_from_cache,
832
-            ],
833
-            'EventEspresso\core\services\request\CurrentPage'                                                             => [
834
-                'EE_CPT_Strategy'                             => EE_Dependency_Map::load_from_cache,
835
-                'EventEspresso\core\services\request\Request' => EE_Dependency_Map::load_from_cache,
836
-            ],
837
-            'EventEspresso\core\services\shortcodes\LegacyShortcodesManager'                                              => [
838
-                'EE_Registry'                                     => EE_Dependency_Map::load_from_cache,
839
-                'EventEspresso\core\services\request\CurrentPage' => EE_Dependency_Map::load_from_cache,
840
-            ],
841
-            'EventEspresso\core\services\shortcodes\ShortcodesManager'                                                    => [
842
-                'EventEspresso\core\services\shortcodes\LegacyShortcodesManager' => EE_Dependency_Map::load_from_cache,
843
-                'EventEspresso\core\services\request\CurrentPage'                => EE_Dependency_Map::load_from_cache,
844
-            ],
845
-            'EventEspresso\core\domain\entities\users\CurrentUser'                                                        => [
846
-                'EventEspresso\core\domain\entities\users\EventManagers' => EE_Dependency_Map::load_from_cache,
847
-            ],
848
-            'EventEspresso\core\services\form\meta\InputTypes'                                                            => [
849
-                'EventEspresso\core\services\form\meta\inputs\Block'    => EE_Dependency_Map::load_from_cache,
850
-                'EventEspresso\core\services\form\meta\inputs\Button'   => EE_Dependency_Map::load_from_cache,
851
-                'EventEspresso\core\services\form\meta\inputs\DateTime' => EE_Dependency_Map::load_from_cache,
852
-                'EventEspresso\core\services\form\meta\inputs\Input'    => EE_Dependency_Map::load_from_cache,
853
-                'EventEspresso\core\services\form\meta\inputs\Number'   => EE_Dependency_Map::load_from_cache,
854
-                'EventEspresso\core\services\form\meta\inputs\Phone'    => EE_Dependency_Map::load_from_cache,
855
-                'EventEspresso\core\services\form\meta\inputs\Select'   => EE_Dependency_Map::load_from_cache,
856
-                'EventEspresso\core\services\form\meta\inputs\Text'     => EE_Dependency_Map::load_from_cache,
857
-            ],
858
-            'EventEspresso\core\domain\services\registration\form\v1\RegFormDependencyHandler'                            => [
859
-                'EE_Dependency_Map' => EE_Dependency_Map::load_from_cache,
860
-            ],
861
-            'EventEspresso\core\services\calculators\LineItemCalculator'                                                  => [
862
-                'EventEspresso\core\services\helpers\DecimalValues' => EE_Dependency_Map::load_from_cache,
863
-            ],
864
-            'EventEspresso\core\services\helpers\DecimalValues'                                                           => [
865
-                'EE_Currency_Config' => EE_Dependency_Map::load_from_cache,
866
-            ],
867
-        ];
868
-    }
869
-
870
-
871
-    /**
872
-     * Registers how core classes are loaded.
873
-     * This can either be done by simply providing the name of one of the EE_Registry loader methods such as:
874
-     *        'EE_Request_Handler' => 'load_core'
875
-     *        'EE_Messages_Queue'  => 'load_lib'
876
-     *        'EEH_Debug_Tools'    => 'load_helper'
877
-     * or, if greater control is required, by providing a custom closure. For example:
878
-     *        'Some_Class' => function () {
879
-     *            return new Some_Class();
880
-     *        },
881
-     * This is required for instantiating dependencies
882
-     * where an interface has been type hinted in a class constructor. For example:
883
-     *        'Required_Interface' => function () {
884
-     *            return new A_Class_That_Implements_Required_Interface();
885
-     *        },
886
-     */
887
-    protected function _register_core_class_loaders()
888
-    {
889
-        $this->_class_loaders = [
890
-            // load_core
891
-            'EE_Dependency_Map'                            => function () {
892
-                return $this;
893
-            },
894
-            'EE_Capabilities'                              => 'load_core',
895
-            'EE_Encryption'                                => 'load_core',
896
-            'EE_Front_Controller'                          => 'load_core',
897
-            'EE_Module_Request_Router'                     => 'load_core',
898
-            'EE_Registry'                                  => 'load_core',
899
-            'EE_Request'                                   => function () {
900
-                return $this->legacy_request;
901
-            },
902
-            'EventEspresso\core\services\request\Request'  => function () {
903
-                return $this->request;
904
-            },
905
-            'EventEspresso\core\services\request\Response' => function () {
906
-                return $this->response;
907
-            },
908
-            'EE_Base'                                      => 'load_core',
909
-            'EE_Request_Handler'                           => 'load_core',
910
-            'EE_Session'                                   => 'load_core',
911
-            'EE_Cron_Tasks'                                => 'load_core',
912
-            'EE_System'                                    => 'load_core',
913
-            'EE_Maintenance_Mode'                          => 'load_core',
914
-            'EE_Register_CPTs'                             => 'load_core',
915
-            'EE_Admin'                                     => 'load_core',
916
-            'EE_CPT_Strategy'                              => 'load_core',
917
-            // load_class
918
-            'EE_Registration_Processor'                    => 'load_class',
919
-            // load_lib
920
-            'EE_Message_Resource_Manager'                  => 'load_lib',
921
-            'EE_Message_Type_Collection'                   => 'load_lib',
922
-            'EE_Message_Type_Collection_Loader'            => 'load_lib',
923
-            'EE_Messenger_Collection'                      => 'load_lib',
924
-            'EE_Messenger_Collection_Loader'               => 'load_lib',
925
-            'EE_Messages_Processor'                        => 'load_lib',
926
-            'EE_Message_Repository'                        => 'load_lib',
927
-            'EE_Messages_Queue'                            => 'load_lib',
928
-            'EE_Messages_Data_Handler_Collection'          => 'load_lib',
929
-            'EE_Message_Template_Group_Collection'         => 'load_lib',
930
-            'EE_Payment_Method_Manager'                    => 'load_lib',
931
-            'EE_DMS_Core_4_1_0'                            => 'load_dms',
932
-            'EE_DMS_Core_4_2_0'                            => 'load_dms',
933
-            'EE_DMS_Core_4_3_0'                            => 'load_dms',
934
-            'EE_DMS_Core_4_5_0'                            => 'load_dms',
935
-            'EE_DMS_Core_4_6_0'                            => 'load_dms',
936
-            'EE_DMS_Core_4_7_0'                            => 'load_dms',
937
-            'EE_DMS_Core_4_8_0'                            => 'load_dms',
938
-            'EE_DMS_Core_4_9_0'                            => 'load_dms',
939
-            'EE_DMS_Core_4_10_0'                           => 'load_dms',
940
-            'EE_DMS_Core_4_11_0'                           => 'load_dms',
941
-            'EE_DMS_Core_4_12_0'                           => 'load_dms',
942
-            'EE_Messages_Generator'                        => static function () {
943
-                return EE_Registry::instance()->load_lib(
944
-                    'Messages_Generator',
945
-                    [],
946
-                    false,
947
-                    false
948
-                );
949
-            },
950
-            'EE_Messages_Template_Defaults'                => static function ($arguments = []) {
951
-                return EE_Registry::instance()->load_lib(
952
-                    'Messages_Template_Defaults',
953
-                    $arguments,
954
-                    false,
955
-                    false
956
-                );
957
-            },
958
-            // load_helper
959
-            'EEH_Parse_Shortcodes'                         => static function () {
960
-                if (EE_Registry::instance()->load_helper('Parse_Shortcodes')) {
961
-                    return new EEH_Parse_Shortcodes();
962
-                }
963
-                return null;
964
-            },
965
-            'EE_Template_Config'                           => static function () {
966
-                return EE_Config::instance()->template_settings;
967
-            },
968
-            'EE_Currency_Config'                           => static function () {
969
-                return EE_Currency_Config::getCurrencyConfig();
970
-            },
971
-            'EE_Registration_Config'                       => static function () {
972
-                return EE_Config::instance()->registration;
973
-            },
974
-            'EE_Core_Config'                               => static function () {
975
-                return EE_Config::instance()->core;
976
-            },
977
-            'EventEspresso\core\services\loaders\Loader'   => static function () {
978
-                return LoaderFactory::getLoader();
979
-            },
980
-            'EE_Network_Config'                            => static function () {
981
-                return EE_Network_Config::instance();
982
-            },
983
-            'EE_Config'                                    => static function () {
984
-                return EE_Config::instance();
985
-            },
986
-            'EventEspresso\core\domain\Domain'             => static function () {
987
-                return DomainFactory::getEventEspressoCoreDomain();
988
-            },
989
-            'EE_Admin_Config'                              => static function () {
990
-                return EE_Config::instance()->admin;
991
-            },
992
-            'EE_Organization_Config'                       => static function () {
993
-                return EE_Config::instance()->organization;
994
-            },
995
-            'EE_Network_Core_Config'                       => static function () {
996
-                return EE_Network_Config::instance()->core;
997
-            },
998
-            'EE_Environment_Config'                        => static function () {
999
-                return EE_Config::instance()->environment;
1000
-            },
1001
-            'EED_Core_Rest_Api'                            => static function () {
1002
-                return EED_Core_Rest_Api::instance();
1003
-            },
1004
-            'WP_REST_Server'                               => static function () {
1005
-                return rest_get_server();
1006
-            },
1007
-            'EventEspresso\core\Psr4Autoloader'            => static function () {
1008
-                return EE_Psr4AutoloaderInit::psr4_loader();
1009
-            },
1010
-            'EE_Ticket_Selector_Config'                    => function () {
1011
-                return EE_Config::instance()->template_settings->EED_Ticket_Selector;
1012
-            },
1013
-        ];
1014
-    }
1015
-
1016
-
1017
-    /**
1018
-     * can be used for supplying alternate names for classes,
1019
-     * or for connecting interface names to instantiable classes
1020
-     *
1021
-     * @throws InvalidAliasException
1022
-     */
1023
-    protected function _register_core_aliases()
1024
-    {
1025
-        $aliases = [
1026
-            'CommandBusInterface'                                                          => 'EventEspresso\core\services\commands\CommandBusInterface',
1027
-            'EventEspresso\core\services\commands\CommandBusInterface'                     => 'EventEspresso\core\services\commands\CommandBus',
1028
-            'CommandHandlerManagerInterface'                                               => 'EventEspresso\core\services\commands\CommandHandlerManagerInterface',
1029
-            'EventEspresso\core\services\commands\CommandHandlerManagerInterface'          => 'EventEspresso\core\services\commands\CommandHandlerManager',
1030
-            'CapChecker'                                                                   => 'EventEspresso\core\services\commands\middleware\CapChecker',
1031
-            'AddActionHook'                                                                => 'EventEspresso\core\services\commands\middleware\AddActionHook',
1032
-            'CapabilitiesChecker'                                                          => 'EventEspresso\core\domain\services\capabilities\CapabilitiesChecker',
1033
-            'CapabilitiesCheckerInterface'                                                 => 'EventEspresso\core\domain\services\capabilities\CapabilitiesCheckerInterface',
1034
-            'EventEspresso\core\domain\services\capabilities\CapabilitiesCheckerInterface' => 'EventEspresso\core\domain\services\capabilities\CapabilitiesChecker',
1035
-            'CreateRegistrationService'                                                    => 'EventEspresso\core\domain\services\registration\CreateRegistrationService',
1036
-            'CreateRegistrationCommandHandler'                                             => 'EventEspresso\core\services\commands\registration\CreateRegistrationCommand',
1037
-            'CopyRegistrationDetailsCommandHandler'                                        => 'EventEspresso\core\services\commands\registration\CopyRegistrationDetailsCommand',
1038
-            'CopyRegistrationPaymentsCommandHandler'                                       => 'EventEspresso\core\services\commands\registration\CopyRegistrationPaymentsCommand',
1039
-            'CancelRegistrationAndTicketLineItemCommandHandler'                            => 'EventEspresso\core\services\commands\registration\CancelRegistrationAndTicketLineItemCommandHandler',
1040
-            'UpdateRegistrationAndTransactionAfterChangeCommandHandler'                    => 'EventEspresso\core\services\commands\registration\UpdateRegistrationAndTransactionAfterChangeCommandHandler',
1041
-            'CreateTicketLineItemCommandHandler'                                           => 'EventEspresso\core\services\commands\ticket\CreateTicketLineItemCommand',
1042
-            'CreateTransactionCommandHandler'                                              => 'EventEspresso\core\services\commands\transaction\CreateTransactionCommandHandler',
1043
-            'CreateAttendeeCommandHandler'                                                 => 'EventEspresso\core\services\commands\attendee\CreateAttendeeCommandHandler',
1044
-            'TableManager'                                                                 => 'EventEspresso\core\services\database\TableManager',
1045
-            'TableAnalysis'                                                                => 'EventEspresso\core\services\database\TableAnalysis',
1046
-            'EspressoShortcode'                                                            => 'EventEspresso\core\services\shortcodes\EspressoShortcode',
1047
-            'ShortcodeInterface'                                                           => 'EventEspresso\core\services\shortcodes\ShortcodeInterface',
1048
-            'EventEspresso\core\services\shortcodes\ShortcodeInterface'                    => 'EventEspresso\core\services\shortcodes\EspressoShortcode',
1049
-            'EventEspresso\core\services\cache\CacheStorageInterface'                      => 'EventEspresso\core\services\cache\TransientCacheStorage',
1050
-            'LoaderInterface'                                                              => 'EventEspresso\core\services\loaders\LoaderInterface',
1051
-            'EventEspresso\core\services\loaders\LoaderInterface'                          => 'EventEspresso\core\services\loaders\Loader',
1052
-            'CommandFactoryInterface'                                                      => 'EventEspresso\core\services\commands\CommandFactoryInterface',
1053
-            'EventEspresso\core\services\commands\CommandFactoryInterface'                 => 'EventEspresso\core\services\commands\CommandFactory',
1054
-            'EmailValidatorInterface'                                                      => 'EventEspresso\core\domain\services\validation\email\EmailValidatorInterface',
1055
-            'EventEspresso\core\domain\services\validation\email\EmailValidatorInterface'  => 'EventEspresso\core\domain\services\validation\email\EmailValidationService',
1056
-            'NoticeConverterInterface'                                                     => 'EventEspresso\core\services\notices\NoticeConverterInterface',
1057
-            'EventEspresso\core\services\notices\NoticeConverterInterface'                 => 'EventEspresso\core\services\notices\ConvertNoticesToEeErrors',
1058
-            'NoticesContainerInterface'                                                    => 'EventEspresso\core\services\notices\NoticesContainerInterface',
1059
-            'EventEspresso\core\services\notices\NoticesContainerInterface'                => 'EventEspresso\core\services\notices\NoticesContainer',
1060
-            'EventEspresso\core\services\request\RequestInterface'                         => 'EventEspresso\core\services\request\Request',
1061
-            'EventEspresso\core\services\request\ResponseInterface'                        => 'EventEspresso\core\services\request\Response',
1062
-            'EventEspresso\core\domain\DomainInterface'                                    => 'EventEspresso\core\domain\Domain',
1063
-            'Registration_Processor'                                                       => 'EE_Registration_Processor',
1064
-            'EventEspresso\core\services\assets\AssetManifestInterface'                    => 'EventEspresso\core\services\assets\AssetManifest',
1065
-        ];
1066
-        foreach ($aliases as $alias => $fqn) {
1067
-            if (is_array($fqn)) {
1068
-                foreach ($fqn as $class => $for_class) {
1069
-                    $this->class_cache->addAlias($class, $alias, $for_class);
1070
-                }
1071
-                continue;
1072
-            }
1073
-            $this->class_cache->addAlias($fqn, $alias);
1074
-        }
1075
-        if (! (defined('DOING_AJAX') && DOING_AJAX) && is_admin()) {
1076
-            $this->class_cache->addAlias(
1077
-                'EventEspresso\core\services\notices\ConvertNoticesToAdminNotices',
1078
-                'EventEspresso\core\services\notices\NoticeConverterInterface'
1079
-            );
1080
-        }
1081
-    }
1082
-
1083
-
1084
-    public function debug($for_class = '')
1085
-    {
1086
-        if (method_exists($this->class_cache, 'debug')) {
1087
-            $this->class_cache->debug($for_class);
1088
-        }
1089
-    }
1090
-
1091
-
1092
-    /**
1093
-     * This is used to reset the internal map and class_loaders to their original default state at the beginning of the
1094
-     * request Primarily used by unit tests.
1095
-     */
1096
-    public function reset()
1097
-    {
1098
-        $this->_register_core_class_loaders();
1099
-        $this->_register_core_dependencies();
1100
-    }
1101
-
1102
-
1103
-    /**
1104
-     * PLZ NOTE: a better name for this method would be is_alias()
1105
-     * because it returns TRUE if the provided fully qualified name IS an alias
1106
-     * WHY?
1107
-     * Because if a class is type hinting for a concretion,
1108
-     * then why would we need to find another class to supply it?
1109
-     * ie: if a class asks for `Fully/Qualified/Namespace/SpecificClassName`,
1110
-     * then give it an instance of `Fully/Qualified/Namespace/SpecificClassName`.
1111
-     * Don't go looking for some substitute.
1112
-     * Whereas if a class is type hinting for an interface...
1113
-     * then we need to find an actual class to use.
1114
-     * So the interface IS the alias for some other FQN,
1115
-     * and we need to find out if `Fully/Qualified/Namespace/SomeInterface`
1116
-     * represents some other class.
1117
-     *
1118
-     * @param string $fqn
1119
-     * @param string $for_class
1120
-     * @return bool
1121
-     * @deprecated 4.9.62.p
1122
-     */
1123
-    public function has_alias(string $fqn = '', string $for_class = ''): bool
1124
-    {
1125
-        return $this->isAlias($fqn, $for_class);
1126
-    }
1127
-
1128
-
1129
-    /**
1130
-     * PLZ NOTE: a better name for this method would be get_fqn_for_alias()
1131
-     * because it returns a FQN for provided alias if one exists, otherwise returns the original $alias
1132
-     * functions recursively, so that multiple aliases can be used to drill down to a FQN
1133
-     *  for example:
1134
-     *      if the following two entries were added to the _aliases array:
1135
-     *          array(
1136
-     *              'interface_alias'           => 'some\namespace\interface'
1137
-     *              'some\namespace\interface'  => 'some\namespace\classname'
1138
-     *          )
1139
-     *      then one could use EE_Registry::instance()->create( 'interface_alias' )
1140
-     *      to load an instance of 'some\namespace\classname'
1141
-     *
1142
-     * @param string $alias
1143
-     * @param string $for_class
1144
-     * @return string
1145
-     * @deprecated 4.9.62.p
1146
-     */
1147
-    public function get_alias(string $alias = '', string $for_class = ''): string
1148
-    {
1149
-        return $this->getFqnForAlias($alias, $for_class);
1150
-    }
24
+	/**
25
+	 * This means that the requested class dependency is not present in the dependency map
26
+	 */
27
+	const not_registered = 0;
28
+
29
+	/**
30
+	 * This instructs class loaders to ALWAYS return a newly instantiated object for the requested class.
31
+	 */
32
+	const load_new_object = 1;
33
+
34
+	/**
35
+	 * This instructs class loaders to return a previously instantiated and cached object for the requested class.
36
+	 * IF a previously instantiated object does not exist, a new one will be created and added to the cache.
37
+	 */
38
+	const load_from_cache = 2;
39
+
40
+	/**
41
+	 * When registering a dependency,
42
+	 * this indicates to keep any existing dependencies that already exist,
43
+	 * and simply discard any new dependencies declared in the incoming data
44
+	 */
45
+	const KEEP_EXISTING_DEPENDENCIES = 0;
46
+
47
+	/**
48
+	 * When registering a dependency,
49
+	 * this indicates to overwrite any existing dependencies that already exist using the incoming data
50
+	 */
51
+	const OVERWRITE_DEPENDENCIES = 1;
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 = [];
87
+
88
+	/**
89
+	 * @type array $_class_loaders
90
+	 */
91
+	protected $_class_loaders = [];
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
+	 * @throws InvalidAliasException
109
+	 */
110
+	public function initialize()
111
+	{
112
+		$this->_register_core_dependencies();
113
+		$this->_register_core_class_loaders();
114
+		$this->_register_core_aliases();
115
+	}
116
+
117
+
118
+	/**
119
+	 * @singleton method used to instantiate class object
120
+	 * @param ClassInterfaceCache|null $class_cache
121
+	 * @return EE_Dependency_Map
122
+	 */
123
+	public static function instance(ClassInterfaceCache $class_cache = null): EE_Dependency_Map
124
+	{
125
+		// check if class object is instantiated, and instantiated properly
126
+		if (
127
+			! EE_Dependency_Map::$_instance instanceof EE_Dependency_Map
128
+			&& $class_cache instanceof ClassInterfaceCache
129
+		) {
130
+			EE_Dependency_Map::$_instance = new EE_Dependency_Map($class_cache);
131
+		}
132
+		return EE_Dependency_Map::$_instance;
133
+	}
134
+
135
+
136
+	/**
137
+	 * @param RequestInterface $request
138
+	 */
139
+	public function setRequest(RequestInterface $request)
140
+	{
141
+		$this->request = $request;
142
+	}
143
+
144
+
145
+	/**
146
+	 * @param LegacyRequestInterface $legacy_request
147
+	 */
148
+	public function setLegacyRequest(LegacyRequestInterface $legacy_request)
149
+	{
150
+		$this->legacy_request = $legacy_request;
151
+	}
152
+
153
+
154
+	/**
155
+	 * @param ResponseInterface $response
156
+	 */
157
+	public function setResponse(ResponseInterface $response)
158
+	{
159
+		$this->response = $response;
160
+	}
161
+
162
+
163
+	/**
164
+	 * @param LoaderInterface $loader
165
+	 */
166
+	public function setLoader(LoaderInterface $loader)
167
+	{
168
+		$this->loader = $loader;
169
+	}
170
+
171
+
172
+	/**
173
+	 * @param string $class
174
+	 * @param array  $dependencies
175
+	 * @param int    $overwrite
176
+	 * @return bool
177
+	 */
178
+	public static function register_dependencies(
179
+		string $class,
180
+		array $dependencies,
181
+		int $overwrite = EE_Dependency_Map::KEEP_EXISTING_DEPENDENCIES
182
+	): bool {
183
+		return EE_Dependency_Map::$_instance->registerDependencies($class, $dependencies, $overwrite);
184
+	}
185
+
186
+
187
+	/**
188
+	 * Assigns an array of class names and corresponding load sources (new or cached)
189
+	 * to the class specified by the first parameter.
190
+	 * IMPORTANT !!!
191
+	 * The order of elements in the incoming $dependencies array MUST match
192
+	 * the order of the constructor parameters for the class in question.
193
+	 * This is especially important when overriding any existing dependencies that are registered.
194
+	 * the third parameter controls whether any duplicate dependencies are overwritten or not.
195
+	 *
196
+	 * @param string $class
197
+	 * @param array  $dependencies
198
+	 * @param int    $overwrite
199
+	 * @return bool
200
+	 */
201
+	public function registerDependencies(
202
+		string $class,
203
+		array $dependencies,
204
+		int $overwrite = EE_Dependency_Map::KEEP_EXISTING_DEPENDENCIES
205
+	): bool {
206
+		$class      = trim($class, '\\');
207
+		$registered = false;
208
+		if (empty(EE_Dependency_Map::$_instance->_dependency_map[ $class ])) {
209
+			EE_Dependency_Map::$_instance->_dependency_map[ $class ] = [];
210
+		}
211
+		// we need to make sure that any aliases used when registering a dependency
212
+		// get resolved to the correct class name
213
+		foreach ($dependencies as $dependency => $load_source) {
214
+			$alias = EE_Dependency_Map::$_instance->getFqnForAlias($dependency);
215
+			if (
216
+				$overwrite === EE_Dependency_Map::OVERWRITE_DEPENDENCIES
217
+				|| ! isset(EE_Dependency_Map::$_instance->_dependency_map[ $class ][ $alias ])
218
+			) {
219
+				unset($dependencies[ $dependency ]);
220
+				$dependencies[ $alias ] = $load_source;
221
+				$registered             = true;
222
+			}
223
+		}
224
+		// now add our two lists of dependencies together.
225
+		// using Union (+=) favours the arrays in precedence from left to right,
226
+		// so $dependencies is NOT overwritten because it is listed first
227
+		// ie: with A = B + C, entries in B take precedence over duplicate entries in C
228
+		// Union is way faster than array_merge() but should be used with caution...
229
+		// especially with numerically indexed arrays
230
+		$dependencies += EE_Dependency_Map::$_instance->_dependency_map[ $class ];
231
+		// now we need to ensure that the resulting dependencies
232
+		// array only has the entries that are required for the class
233
+		// so first count how many dependencies were originally registered for the class
234
+		$dependency_count = count(EE_Dependency_Map::$_instance->_dependency_map[ $class ]);
235
+		// if that count is non-zero (meaning dependencies were already registered)
236
+		EE_Dependency_Map::$_instance->_dependency_map[ $class ] = $dependency_count
237
+			// then truncate the  final array to match that count
238
+			? array_slice($dependencies, 0, $dependency_count)
239
+			// otherwise just take the incoming array because nothing previously existed
240
+			: $dependencies;
241
+		return $registered;
242
+	}
243
+
244
+
245
+	/**
246
+	 * @param string          $class_name
247
+	 * @param callable|string $loader
248
+	 * @param bool            $overwrite
249
+	 * @return bool
250
+	 * @throws DomainException
251
+	 */
252
+	public static function register_class_loader(
253
+		string $class_name,
254
+		$loader = 'load_core',
255
+		bool $overwrite = false
256
+	): bool {
257
+		return EE_Dependency_Map::$_instance->registerClassLoader($class_name, $loader, $overwrite);
258
+	}
259
+
260
+
261
+	/**
262
+	 * @param string $class_name
263
+	 * @param Closure|string $loader
264
+	 * @param bool   $overwrite
265
+	 * @return bool
266
+	 * @throws DomainException
267
+	 */
268
+	public function registerClassLoader(string $class_name, $loader = 'load_core', bool $overwrite = false): bool
269
+	{
270
+		if (! $loader instanceof Closure && strpos($class_name, '\\') !== false) {
271
+			throw new DomainException(
272
+				esc_html__('Don\'t use class loaders for FQCNs.', 'event_espresso')
273
+			);
274
+		}
275
+		// check that loader is callable or method starts with "load_" and exists in EE_Registry
276
+		if (
277
+			! is_callable($loader)
278
+			&& (
279
+				strpos($loader, 'load_') !== 0
280
+				|| ! method_exists('EE_Registry', $loader)
281
+			)
282
+		) {
283
+			throw new DomainException(
284
+				sprintf(
285
+					esc_html__(
286
+						'"%1$s" is not a valid loader method on EE_Registry.',
287
+						'event_espresso'
288
+					),
289
+					$loader
290
+				)
291
+			);
292
+		}
293
+		$class_name = EE_Dependency_Map::$_instance->getFqnForAlias($class_name);
294
+		if ($overwrite || ! isset(EE_Dependency_Map::$_instance->_class_loaders[ $class_name ])) {
295
+			EE_Dependency_Map::$_instance->_class_loaders[ $class_name ] = $loader;
296
+			return true;
297
+		}
298
+		return false;
299
+	}
300
+
301
+
302
+	/**
303
+	 * @return array
304
+	 */
305
+	public function dependency_map(): array
306
+	{
307
+		return $this->_dependency_map;
308
+	}
309
+
310
+
311
+	/**
312
+	 * returns TRUE if dependency map contains a listing for the provided class name
313
+	 *
314
+	 * @param string $class_name
315
+	 * @return boolean
316
+	 */
317
+	public function has(string $class_name = ''): bool
318
+	{
319
+		// all legacy models have the same dependencies
320
+		if (strpos($class_name, 'EEM_') === 0) {
321
+			$class_name = 'LEGACY_MODELS';
322
+		}
323
+		return isset($this->_dependency_map[ $class_name ]);
324
+	}
325
+
326
+
327
+	/**
328
+	 * returns TRUE if dependency map contains a listing for the provided class name AND dependency
329
+	 *
330
+	 * @param string $class_name
331
+	 * @param string $dependency
332
+	 * @return bool
333
+	 */
334
+	public function has_dependency_for_class(string $class_name = '', string $dependency = ''): bool
335
+	{
336
+		// all legacy models have the same dependencies
337
+		if (strpos($class_name, 'EEM_') === 0) {
338
+			$class_name = 'LEGACY_MODELS';
339
+		}
340
+		$dependency = $this->getFqnForAlias($dependency, $class_name);
341
+		return isset($this->_dependency_map[ $class_name ][ $dependency ]);
342
+	}
343
+
344
+
345
+	/**
346
+	 * returns loading strategy for whether a previously cached dependency should be loaded or a new instance returned
347
+	 *
348
+	 * @param string $class_name
349
+	 * @param string $dependency
350
+	 * @return int
351
+	 */
352
+	public function loading_strategy_for_class_dependency(string $class_name = '', string $dependency = ''): int
353
+	{
354
+		// all legacy models have the same dependencies
355
+		if (strpos($class_name, 'EEM_') === 0) {
356
+			$class_name = 'LEGACY_MODELS';
357
+		}
358
+		$dependency = $this->getFqnForAlias($dependency);
359
+		return $this->has_dependency_for_class($class_name, $dependency)
360
+			? $this->_dependency_map[ $class_name ][ $dependency ]
361
+			: EE_Dependency_Map::not_registered;
362
+	}
363
+
364
+
365
+	/**
366
+	 * @param string $class_name
367
+	 * @return string | Closure
368
+	 */
369
+	public function class_loader(string $class_name)
370
+	{
371
+		// all legacy models use load_model()
372
+		if (strpos($class_name, 'EEM_') === 0) {
373
+			return 'load_model';
374
+		}
375
+		// EE_CPT_*_Strategy classes like EE_CPT_Event_Strategy, EE_CPT_Venue_Strategy, etc
376
+		// perform strpos() first to avoid loading regex every time we load a class
377
+		if (
378
+			strpos($class_name, 'EE_CPT_') === 0
379
+			&& preg_match('/^EE_CPT_([a-zA-Z]+)_Strategy$/', $class_name)
380
+		) {
381
+			return 'load_core';
382
+		}
383
+		$class_name = $this->getFqnForAlias($class_name);
384
+		return $this->_class_loaders[ $class_name ] ?? '';
385
+	}
386
+
387
+
388
+	/**
389
+	 * @return array
390
+	 */
391
+	public function class_loaders(): array
392
+	{
393
+		return $this->_class_loaders;
394
+	}
395
+
396
+
397
+	/**
398
+	 * adds an alias for a classname
399
+	 *
400
+	 * @param string $fqcn      the class name that should be used (concrete class to replace interface)
401
+	 * @param string $alias     the class name that would be type hinted for (abstract parent or interface)
402
+	 * @param string $for_class the class that has the dependency (is type hinting for the interface)
403
+	 * @throws InvalidAliasException
404
+	 */
405
+	public function add_alias(string $fqcn, string $alias, string $for_class = '')
406
+	{
407
+		$this->class_cache->addAlias($fqcn, $alias, $for_class);
408
+	}
409
+
410
+
411
+	/**
412
+	 * Returns TRUE if the provided fully qualified name IS an alias
413
+	 * WHY?
414
+	 * Because if a class is type hinting for a concretion,
415
+	 * then why would we need to find another class to supply it?
416
+	 * ie: if a class asks for `Fully/Qualified/Namespace/SpecificClassName`,
417
+	 * then give it an instance of `Fully/Qualified/Namespace/SpecificClassName`.
418
+	 * Don't go looking for some substitute.
419
+	 * Whereas if a class is type hinting for an interface...
420
+	 * then we need to find an actual class to use.
421
+	 * So the interface IS the alias for some other FQN,
422
+	 * and we need to find out if `Fully/Qualified/Namespace/SomeInterface`
423
+	 * represents some other class.
424
+	 *
425
+	 * @param string $fqn
426
+	 * @param string $for_class
427
+	 * @return bool
428
+	 */
429
+	public function isAlias(string $fqn = '', string $for_class = ''): bool
430
+	{
431
+		return $this->class_cache->isAlias($fqn, $for_class);
432
+	}
433
+
434
+
435
+	/**
436
+	 * Returns a FQN for provided alias if one exists, otherwise returns the original $alias
437
+	 * functions recursively, so that multiple aliases can be used to drill down to a FQN
438
+	 *  for example:
439
+	 *      if the following two entries were added to the _aliases array:
440
+	 *          array(
441
+	 *              'interface_alias'           => 'some\namespace\interface'
442
+	 *              'some\namespace\interface'  => 'some\namespace\classname'
443
+	 *          )
444
+	 *      then one could use EE_Registry::instance()->create( 'interface_alias' )
445
+	 *      to load an instance of 'some\namespace\classname'
446
+	 *
447
+	 * @param string $alias
448
+	 * @param string $for_class
449
+	 * @return string
450
+	 */
451
+	public function getFqnForAlias(string $alias = '', string $for_class = ''): string
452
+	{
453
+		return $this->class_cache->getFqnForAlias($alias, $for_class);
454
+	}
455
+
456
+
457
+	/**
458
+	 * Registers the core dependencies and whether a previously instantiated object should be loaded from the cache,
459
+	 * if one exists, or whether a new object should be generated every time the requested class is loaded.
460
+	 * This is done by using the following class constants:
461
+	 *        EE_Dependency_Map::load_from_cache - loads previously instantiated object
462
+	 *        EE_Dependency_Map::load_new_object - generates a new object every time
463
+	 */
464
+	protected function _register_core_dependencies()
465
+	{
466
+		$this->_dependency_map = [
467
+			'EE_Admin'                                                                                                    => [
468
+				'EventEspresso\core\services\loaders\Loader'  => EE_Dependency_Map::load_from_cache,
469
+				'EventEspresso\core\services\request\Request' => EE_Dependency_Map::load_from_cache,
470
+			],
471
+			'EE_Request_Handler'                                                                                          => [
472
+				'EventEspresso\core\services\request\Request'  => EE_Dependency_Map::load_from_cache,
473
+				'EventEspresso\core\services\request\Response' => EE_Dependency_Map::load_from_cache,
474
+			],
475
+			'EE_System'                                                                                                   => [
476
+				'EventEspresso\core\services\loaders\Loader'  => EE_Dependency_Map::load_from_cache,
477
+				'EE_Maintenance_Mode'                         => EE_Dependency_Map::load_from_cache,
478
+				'EE_Registry'                                 => EE_Dependency_Map::load_from_cache,
479
+				'EventEspresso\core\services\request\Request' => EE_Dependency_Map::load_from_cache,
480
+				'EventEspresso\core\services\routing\Router'  => EE_Dependency_Map::load_from_cache,
481
+			],
482
+			'EE_Session'                                                                                                  => [
483
+				'EventEspresso\core\services\cache\TransientCacheStorage'  => EE_Dependency_Map::load_from_cache,
484
+				'EventEspresso\core\domain\values\session\SessionLifespan' => EE_Dependency_Map::load_from_cache,
485
+				'EventEspresso\core\services\request\Request'              => EE_Dependency_Map::load_from_cache,
486
+				'EventEspresso\core\services\session\SessionStartHandler'  => EE_Dependency_Map::load_from_cache,
487
+				'EE_Encryption'                                            => EE_Dependency_Map::load_from_cache,
488
+			],
489
+			'EE_Cart'                                                                                                     => [
490
+				'EE_Session' => EE_Dependency_Map::load_from_cache,
491
+			],
492
+			'EE_Messenger_Collection_Loader'                                                                              => [
493
+				'EE_Messenger_Collection' => EE_Dependency_Map::load_new_object,
494
+			],
495
+			'EE_Message_Type_Collection_Loader'                                                                           => [
496
+				'EE_Message_Type_Collection' => EE_Dependency_Map::load_new_object,
497
+			],
498
+			'EE_Message_Resource_Manager'                                                                                 => [
499
+				'EE_Messenger_Collection_Loader'    => EE_Dependency_Map::load_new_object,
500
+				'EE_Message_Type_Collection_Loader' => EE_Dependency_Map::load_new_object,
501
+				'EEM_Message_Template_Group'        => EE_Dependency_Map::load_from_cache,
502
+			],
503
+			'EE_Message_Factory'                                                                                          => [
504
+				'EE_Message_Resource_Manager' => EE_Dependency_Map::load_from_cache,
505
+			],
506
+			'EE_messages'                                                                                                 => [
507
+				'EE_Message_Resource_Manager' => EE_Dependency_Map::load_from_cache,
508
+			],
509
+			'EE_Messages_Generator'                                                                                       => [
510
+				'EE_Messages_Queue'                    => EE_Dependency_Map::load_new_object,
511
+				'EE_Messages_Data_Handler_Collection'  => EE_Dependency_Map::load_new_object,
512
+				'EE_Message_Template_Group_Collection' => EE_Dependency_Map::load_new_object,
513
+				'EEH_Parse_Shortcodes'                 => EE_Dependency_Map::load_from_cache,
514
+			],
515
+			'EE_Messages_Processor'                                                                                       => [
516
+				'EE_Message_Resource_Manager' => EE_Dependency_Map::load_from_cache,
517
+			],
518
+			'EE_Messages_Queue'                                                                                           => [
519
+				'EE_Message_Repository' => EE_Dependency_Map::load_new_object,
520
+			],
521
+			'EE_Messages_Template_Defaults'                                                                               => [
522
+				'EEM_Message_Template_Group' => EE_Dependency_Map::load_from_cache,
523
+				'EEM_Message_Template'       => EE_Dependency_Map::load_from_cache,
524
+			],
525
+			'EE_Message_To_Generate_From_Request'                                                                         => [
526
+				'EE_Message_Resource_Manager'                 => EE_Dependency_Map::load_from_cache,
527
+				'EventEspresso\core\services\request\Request' => EE_Dependency_Map::load_from_cache,
528
+			],
529
+			'EventEspresso\core\services\commands\CommandBus'                                                             => [
530
+				'EventEspresso\core\services\commands\CommandHandlerManager' => EE_Dependency_Map::load_from_cache,
531
+			],
532
+			'EventEspresso\services\commands\CommandHandler'                                                              => [
533
+				'EE_Registry'         => EE_Dependency_Map::load_from_cache,
534
+				'CommandBusInterface' => EE_Dependency_Map::load_from_cache,
535
+			],
536
+			'EventEspresso\core\services\commands\CommandHandlerManager'                                                  => [
537
+				'EventEspresso\core\services\loaders\Loader' => EE_Dependency_Map::load_from_cache,
538
+			],
539
+			'EventEspresso\core\services\commands\CompositeCommandHandler'                                                => [
540
+				'EventEspresso\core\services\commands\CommandBus'     => EE_Dependency_Map::load_from_cache,
541
+				'EventEspresso\core\services\commands\CommandFactory' => EE_Dependency_Map::load_from_cache,
542
+			],
543
+			'EventEspresso\core\services\commands\CommandFactory'                                                         => [
544
+				'EventEspresso\core\services\loaders\Loader' => EE_Dependency_Map::load_from_cache,
545
+			],
546
+			'EventEspresso\core\services\commands\middleware\CapChecker'                                                  => [
547
+				'EventEspresso\core\domain\services\capabilities\CapabilitiesChecker' => EE_Dependency_Map::load_from_cache,
548
+			],
549
+			'EventEspresso\core\domain\services\capabilities\CapabilitiesChecker'                                         => [
550
+				'EE_Capabilities' => EE_Dependency_Map::load_from_cache,
551
+			],
552
+			'EventEspresso\core\domain\services\capabilities\RegistrationsCapChecker'                                     => [
553
+				'EE_Capabilities' => EE_Dependency_Map::load_from_cache,
554
+			],
555
+			'EventEspresso\core\services\commands\registration\CreateRegistrationCommandHandler'                          => [
556
+				'EventEspresso\core\domain\services\registration\CreateRegistrationService' => EE_Dependency_Map::load_from_cache,
557
+			],
558
+			'EventEspresso\core\services\commands\registration\CopyRegistrationDetailsCommandHandler'                     => [
559
+				'EventEspresso\core\domain\services\registration\CopyRegistrationService' => EE_Dependency_Map::load_from_cache,
560
+			],
561
+			'EventEspresso\core\services\commands\registration\CopyRegistrationPaymentsCommandHandler'                    => [
562
+				'EventEspresso\core\domain\services\registration\CopyRegistrationService' => EE_Dependency_Map::load_from_cache,
563
+			],
564
+			'EventEspresso\core\services\commands\registration\CancelRegistrationAndTicketLineItemCommandHandler'         => [
565
+				'EventEspresso\core\domain\services\registration\CancelTicketLineItemService' => EE_Dependency_Map::load_from_cache,
566
+			],
567
+			'EventEspresso\core\services\commands\registration\UpdateRegistrationAndTransactionAfterChangeCommandHandler' => [
568
+				'EventEspresso\core\domain\services\registration\UpdateRegistrationService' => EE_Dependency_Map::load_from_cache,
569
+			],
570
+			'EventEspresso\core\services\commands\ticket\CreateTicketLineItemCommandHandler'                              => [
571
+				'EventEspresso\core\domain\services\ticket\CreateTicketLineItemService' => EE_Dependency_Map::load_from_cache,
572
+			],
573
+			'EventEspresso\core\services\commands\ticket\CancelTicketLineItemCommandHandler'                              => [
574
+				'EventEspresso\core\domain\services\ticket\CancelTicketLineItemService' => EE_Dependency_Map::load_from_cache,
575
+			],
576
+			'EventEspresso\core\domain\services\registration\CancelRegistrationService'                                   => [
577
+				'EventEspresso\core\domain\services\ticket\CancelTicketLineItemService' => EE_Dependency_Map::load_from_cache,
578
+			],
579
+			'EventEspresso\core\services\commands\attendee\CreateAttendeeCommandHandler'                                  => [
580
+				'EEM_Attendee' => EE_Dependency_Map::load_from_cache,
581
+			],
582
+			'EventEspresso\core\services\database\TableManager'                                                           => [
583
+				'EventEspresso\core\services\database\TableAnalysis' => EE_Dependency_Map::load_from_cache,
584
+			],
585
+			'EE_Data_Migration_Class_Base'                                                                                => [
586
+				'EventEspresso\core\services\database\TableAnalysis' => EE_Dependency_Map::load_from_cache,
587
+				'EventEspresso\core\services\database\TableManager'  => EE_Dependency_Map::load_from_cache,
588
+			],
589
+			'EE_DMS_Core_4_1_0'                                                                                           => [
590
+				'EventEspresso\core\services\database\TableAnalysis' => EE_Dependency_Map::load_from_cache,
591
+				'EventEspresso\core\services\database\TableManager'  => EE_Dependency_Map::load_from_cache,
592
+			],
593
+			'EE_DMS_Core_4_2_0'                                                                                           => [
594
+				'EventEspresso\core\services\database\TableAnalysis' => EE_Dependency_Map::load_from_cache,
595
+				'EventEspresso\core\services\database\TableManager'  => EE_Dependency_Map::load_from_cache,
596
+			],
597
+			'EE_DMS_Core_4_3_0'                                                                                           => [
598
+				'EventEspresso\core\services\database\TableAnalysis' => EE_Dependency_Map::load_from_cache,
599
+				'EventEspresso\core\services\database\TableManager'  => EE_Dependency_Map::load_from_cache,
600
+			],
601
+			'EE_DMS_Core_4_4_0'                                                                                           => [
602
+				'EventEspresso\core\services\database\TableAnalysis' => EE_Dependency_Map::load_from_cache,
603
+				'EventEspresso\core\services\database\TableManager'  => EE_Dependency_Map::load_from_cache,
604
+			],
605
+			'EE_DMS_Core_4_5_0'                                                                                           => [
606
+				'EventEspresso\core\services\database\TableAnalysis' => EE_Dependency_Map::load_from_cache,
607
+				'EventEspresso\core\services\database\TableManager'  => EE_Dependency_Map::load_from_cache,
608
+			],
609
+			'EE_DMS_Core_4_6_0'                                                                                           => [
610
+				'EventEspresso\core\services\database\TableAnalysis' => EE_Dependency_Map::load_from_cache,
611
+				'EventEspresso\core\services\database\TableManager'  => EE_Dependency_Map::load_from_cache,
612
+			],
613
+			'EE_DMS_Core_4_7_0'                                                                                           => [
614
+				'EventEspresso\core\services\database\TableAnalysis' => EE_Dependency_Map::load_from_cache,
615
+				'EventEspresso\core\services\database\TableManager'  => EE_Dependency_Map::load_from_cache,
616
+			],
617
+			'EE_DMS_Core_4_8_0'                                                                                           => [
618
+				'EventEspresso\core\services\database\TableAnalysis' => EE_Dependency_Map::load_from_cache,
619
+				'EventEspresso\core\services\database\TableManager'  => EE_Dependency_Map::load_from_cache,
620
+			],
621
+			'EE_DMS_Core_4_9_0'                                                                                           => [
622
+				'EventEspresso\core\services\database\TableAnalysis' => EE_Dependency_Map::load_from_cache,
623
+				'EventEspresso\core\services\database\TableManager'  => EE_Dependency_Map::load_from_cache,
624
+			],
625
+			'EE_DMS_Core_4_10_0'                                                                                          => [
626
+				'EventEspresso\core\services\database\TableAnalysis' => EE_Dependency_Map::load_from_cache,
627
+				'EventEspresso\core\services\database\TableManager'  => EE_Dependency_Map::load_from_cache,
628
+				'EE_DMS_Core_4_9_0'                                  => EE_Dependency_Map::load_from_cache,
629
+			],
630
+			'EE_DMS_Core_4_11_0'                                                                                          => [
631
+				'EE_DMS_Core_4_10_0'                                 => EE_Dependency_Map::load_from_cache,
632
+				'EventEspresso\core\services\database\TableAnalysis' => EE_Dependency_Map::load_from_cache,
633
+				'EventEspresso\core\services\database\TableManager'  => EE_Dependency_Map::load_from_cache,
634
+			],
635
+			'EE_DMS_Core_4_12_0'                                                                                          => [
636
+				'EE_DMS_Core_4_11_0'                                 => EE_Dependency_Map::load_from_cache,
637
+				'EventEspresso\core\services\database\TableAnalysis' => EE_Dependency_Map::load_from_cache,
638
+				'EventEspresso\core\services\database\TableManager'  => EE_Dependency_Map::load_from_cache,
639
+			],
640
+			'EventEspresso\core\services\assets\I18nRegistry'                                                             => [
641
+				[],
642
+				'EventEspresso\core\domain\Domain' => EE_Dependency_Map::load_from_cache,
643
+			],
644
+			'EventEspresso\core\services\assets\Registry'                                                                 => [
645
+				'EventEspresso\core\services\assets\AssetCollection' => EE_Dependency_Map::load_from_cache,
646
+				'EventEspresso\core\services\assets\AssetManifest'   => EE_Dependency_Map::load_from_cache,
647
+			],
648
+			'EventEspresso\core\domain\entities\shortcodes\EspressoCancelled'                                             => [
649
+				'EventEspresso\core\services\cache\PostRelatedCacheManager' => EE_Dependency_Map::load_from_cache,
650
+			],
651
+			'EventEspresso\core\domain\entities\shortcodes\EspressoCheckout'                                              => [
652
+				'EventEspresso\core\services\cache\PostRelatedCacheManager' => EE_Dependency_Map::load_from_cache,
653
+			],
654
+			'EventEspresso\core\domain\entities\shortcodes\EspressoEventAttendees'                                        => [
655
+				'EventEspresso\core\services\cache\PostRelatedCacheManager' => EE_Dependency_Map::load_from_cache,
656
+			],
657
+			'EventEspresso\core\domain\entities\shortcodes\EspressoEvents'                                                => [
658
+				'EventEspresso\core\services\cache\PostRelatedCacheManager' => EE_Dependency_Map::load_from_cache,
659
+			],
660
+			'EventEspresso\core\domain\entities\shortcodes\EspressoThankYou'                                              => [
661
+				'EventEspresso\core\services\cache\PostRelatedCacheManager' => EE_Dependency_Map::load_from_cache,
662
+			],
663
+			'EventEspresso\core\domain\entities\shortcodes\EspressoTicketSelector'                                        => [
664
+				'EventEspresso\core\services\cache\PostRelatedCacheManager' => EE_Dependency_Map::load_from_cache,
665
+			],
666
+			'EventEspresso\core\domain\entities\shortcodes\EspressoTxnPage'                                               => [
667
+				'EventEspresso\core\services\cache\PostRelatedCacheManager' => EE_Dependency_Map::load_from_cache,
668
+			],
669
+			'EventEspresso\core\services\cache\BasicCacheManager'                                                         => [
670
+				'EventEspresso\core\services\cache\TransientCacheStorage' => EE_Dependency_Map::load_from_cache,
671
+			],
672
+			'EventEspresso\core\services\cache\PostRelatedCacheManager'                                                   => [
673
+				'EventEspresso\core\services\cache\TransientCacheStorage' => EE_Dependency_Map::load_from_cache,
674
+			],
675
+			'EventEspresso\core\domain\services\validation\email\EmailValidationService'                                  => [
676
+				'EE_Registration_Config'                     => EE_Dependency_Map::load_from_cache,
677
+				'EventEspresso\core\services\loaders\Loader' => EE_Dependency_Map::load_from_cache,
678
+			],
679
+			'EventEspresso\core\domain\values\EmailAddress'                                                               => [
680
+				null,
681
+				'EventEspresso\core\domain\services\validation\email\EmailValidationService' => EE_Dependency_Map::load_from_cache,
682
+			],
683
+			'EventEspresso\core\services\orm\ModelFieldFactory'                                                           => [
684
+				'EventEspresso\core\services\loaders\Loader' => EE_Dependency_Map::load_from_cache,
685
+			],
686
+			'LEGACY_MODELS'                                                                                               => [
687
+				null,
688
+				'EventEspresso\core\services\database\ModelFieldFactory' => EE_Dependency_Map::load_from_cache,
689
+			],
690
+			'EE_Module_Request_Router'                                                                                    => [
691
+				'EventEspresso\core\services\request\Request' => EE_Dependency_Map::load_from_cache,
692
+			],
693
+			'EE_Registration_Processor'                                                                                   => [
694
+				'EventEspresso\core\services\request\Request' => EE_Dependency_Map::load_from_cache,
695
+			],
696
+			'EventEspresso\core\services\notifications\PersistentAdminNoticeManager'                                      => [
697
+				null,
698
+				'EventEspresso\core\domain\services\capabilities\CapabilitiesChecker' => EE_Dependency_Map::load_from_cache,
699
+				'EventEspresso\core\services\request\Request'                         => EE_Dependency_Map::load_from_cache,
700
+			],
701
+			'EventEspresso\caffeinated\modules\recaptcha_invisible\InvisibleRecaptcha'                                    => [
702
+				'EE_Registration_Config' => EE_Dependency_Map::load_from_cache,
703
+				'EE_Session'             => EE_Dependency_Map::load_from_cache,
704
+			],
705
+			'EventEspresso\modules\ticket_selector\DisplayTicketSelector'                                                 => [
706
+				'EventEspresso\core\domain\entities\users\CurrentUser' => EE_Dependency_Map::load_from_cache,
707
+				'EventEspresso\core\services\request\Request'          => EE_Dependency_Map::load_from_cache,
708
+				'EE_Ticket_Selector_Config'                            => EE_Dependency_Map::load_from_cache,
709
+			],
710
+			'EventEspresso\modules\ticket_selector\ProcessTicketSelector'                                                 => [
711
+				'EE_Core_Config'                                                          => EE_Dependency_Map::load_from_cache,
712
+				'EventEspresso\core\services\request\Request'                             => EE_Dependency_Map::load_from_cache,
713
+				'EE_Session'                                                              => EE_Dependency_Map::load_from_cache,
714
+				'EEM_Ticket'                                                              => EE_Dependency_Map::load_from_cache,
715
+				'EventEspresso\modules\ticket_selector\TicketDatetimeAvailabilityTracker' => EE_Dependency_Map::load_from_cache,
716
+			],
717
+			'EventEspresso\modules\ticket_selector\TicketDatetimeAvailabilityTracker'                                     => [
718
+				'EEM_Datetime' => EE_Dependency_Map::load_from_cache,
719
+			],
720
+			'EventEspresso\core\domain\entities\custom_post_types\CustomPostTypeDefinitions'                              => [
721
+				'EE_Core_Config'                             => EE_Dependency_Map::load_from_cache,
722
+				'EventEspresso\core\services\loaders\Loader' => EE_Dependency_Map::load_from_cache,
723
+			],
724
+			'EventEspresso\core\domain\services\custom_post_types\RegisterCustomPostTypes'                                => [
725
+				'EventEspresso\core\domain\entities\custom_post_types\CustomPostTypeDefinitions' => EE_Dependency_Map::load_from_cache,
726
+			],
727
+			'EventEspresso\core\domain\services\custom_post_types\RegisterCustomTaxonomies'                               => [
728
+				'EventEspresso\core\domain\entities\custom_post_types\CustomTaxonomyDefinitions' => EE_Dependency_Map::load_from_cache,
729
+			],
730
+			'EE_CPT_Strategy'                                                                                             => [
731
+				'EventEspresso\core\domain\entities\custom_post_types\CustomPostTypeDefinitions' => EE_Dependency_Map::load_from_cache,
732
+				'EventEspresso\core\domain\entities\custom_post_types\CustomTaxonomyDefinitions' => EE_Dependency_Map::load_from_cache,
733
+			],
734
+			'EventEspresso\core\services\loaders\ObjectIdentifier'                                                        => [
735
+				'EventEspresso\core\services\loaders\ClassInterfaceCache' => EE_Dependency_Map::load_from_cache,
736
+			],
737
+			'EventEspresso\core\CPTs\CptQueryModifier'                                                                    => [
738
+				null,
739
+				null,
740
+				null,
741
+				'EventEspresso\core\services\request\CurrentPage' => EE_Dependency_Map::load_from_cache,
742
+				'EventEspresso\core\services\request\Request'     => EE_Dependency_Map::load_from_cache,
743
+				'EventEspresso\core\services\loaders\Loader'      => EE_Dependency_Map::load_from_cache,
744
+			],
745
+			'EventEspresso\core\services\dependencies\DependencyResolver'                                                 => [
746
+				'EventEspresso\core\services\container\Mirror'            => EE_Dependency_Map::load_from_cache,
747
+				'EventEspresso\core\services\loaders\ClassInterfaceCache' => EE_Dependency_Map::load_from_cache,
748
+				'EE_Dependency_Map'                                       => EE_Dependency_Map::load_from_cache,
749
+			],
750
+			'EventEspresso\core\services\routing\RouteMatchSpecificationDependencyResolver'                               => [
751
+				'EventEspresso\core\services\container\Mirror'            => EE_Dependency_Map::load_from_cache,
752
+				'EventEspresso\core\services\loaders\ClassInterfaceCache' => EE_Dependency_Map::load_from_cache,
753
+				'EE_Dependency_Map'                                       => EE_Dependency_Map::load_from_cache,
754
+			],
755
+			'EventEspresso\core\services\routing\RouteMatchSpecificationFactory'                                          => [
756
+				'EventEspresso\core\services\routing\RouteMatchSpecificationDependencyResolver' => EE_Dependency_Map::load_from_cache,
757
+				'EventEspresso\core\services\loaders\Loader'                                    => EE_Dependency_Map::load_from_cache,
758
+			],
759
+			'EventEspresso\core\services\routing\RouteMatchSpecificationManager'                                          => [
760
+				'EventEspresso\core\services\routing\RouteMatchSpecificationCollection' => EE_Dependency_Map::load_from_cache,
761
+				'EventEspresso\core\services\routing\RouteMatchSpecificationFactory'    => EE_Dependency_Map::load_from_cache,
762
+			],
763
+			'EE_URL_Validation_Strategy'                                                                                  => [
764
+				null,
765
+				null,
766
+				'EventEspresso\core\services\validators\URLValidator' => EE_Dependency_Map::load_from_cache,
767
+			],
768
+			'EventEspresso\core\services\request\files\FilesDataHandler'                                                  => [
769
+				'EventEspresso\core\services\request\Request' => EE_Dependency_Map::load_from_cache,
770
+			],
771
+			'EventEspressoBatchRequest\BatchRequestProcessor'                                                             => [
772
+				'EventEspresso\core\services\loaders\Loader' => EE_Dependency_Map::load_from_cache,
773
+			],
774
+			'EventEspresso\core\domain\services\converters\RestApiSpoofer'                                                => [
775
+				'WP_REST_Server'                                               => EE_Dependency_Map::load_from_cache,
776
+				'EED_Core_Rest_Api'                                            => EE_Dependency_Map::load_from_cache,
777
+				'EventEspresso\core\libraries\rest_api\controllers\model\Read' => EE_Dependency_Map::load_from_cache,
778
+				null,
779
+			],
780
+			'EventEspresso\core\services\routing\RouteHandler'                                                            => [
781
+				'EventEspresso\core\services\json\JsonDataNodeHandler' => EE_Dependency_Map::load_from_cache,
782
+				'EventEspresso\core\services\loaders\Loader'           => EE_Dependency_Map::load_from_cache,
783
+				'EventEspresso\core\services\request\Request'          => EE_Dependency_Map::load_from_cache,
784
+				'EventEspresso\core\services\routing\RouteCollection'  => EE_Dependency_Map::load_from_cache,
785
+			],
786
+			'EventEspresso\core\services\json\JsonDataNodeHandler'                                                        => [
787
+				'EventEspresso\core\services\json\JsonDataNodeValidator' => EE_Dependency_Map::load_from_cache,
788
+			],
789
+			'EventEspresso\core\services\routing\Router'                                                                  => [
790
+				'EE_Dependency_Map'                                => EE_Dependency_Map::load_from_cache,
791
+				'EventEspresso\core\services\loaders\Loader'       => EE_Dependency_Map::load_from_cache,
792
+				'EventEspresso\core\services\routing\RouteHandler' => EE_Dependency_Map::load_from_cache,
793
+			],
794
+			'EventEspresso\core\services\assets\AssetManifest'                                                            => [
795
+				'EventEspresso\core\domain\Domain' => EE_Dependency_Map::load_from_cache,
796
+			],
797
+			'EventEspresso\core\services\assets\AssetManifestFactory'                                                     => [
798
+				'EventEspresso\core\services\loaders\Loader' => EE_Dependency_Map::load_from_cache,
799
+			],
800
+			'EventEspresso\core\services\assets\BaristaFactory'                                                           => [
801
+				'EventEspresso\core\services\assets\AssetManifestFactory' => EE_Dependency_Map::load_from_cache,
802
+				'EventEspresso\core\services\loaders\Loader'              => EE_Dependency_Map::load_from_cache,
803
+			],
804
+			'EventEspresso\core\domain\services\capabilities\FeatureFlags'                                                => [
805
+				'EventEspresso\core\domain\services\capabilities\CapabilitiesChecker' => EE_Dependency_Map::load_from_cache,
806
+				'EventEspresso\core\domain\Domain' => EE_Dependency_Map::load_from_cache,
807
+			],
808
+			'EventEspresso\core\services\addon\AddonManager'                                                              => [
809
+				'EventEspresso\core\services\addon\AddonCollection'              => EE_Dependency_Map::load_from_cache,
810
+				'EventEspresso\core\Psr4Autoloader'                              => EE_Dependency_Map::load_from_cache,
811
+				'EventEspresso\core\services\addon\api\v1\RegisterAddon'         => EE_Dependency_Map::load_from_cache,
812
+				'EventEspresso\core\services\addon\api\IncompatibleAddonHandler' => EE_Dependency_Map::load_from_cache,
813
+				'EventEspresso\core\services\addon\api\ThirdPartyPluginHandler'  => EE_Dependency_Map::load_from_cache,
814
+			],
815
+			'EventEspresso\core\services\addon\api\ThirdPartyPluginHandler'                                               => [
816
+				'EventEspresso\core\services\request\Request' => EE_Dependency_Map::load_from_cache,
817
+			],
818
+			'EventEspressoBatchRequest\JobHandlers\ExecuteBatchDeletion'                                                  => [
819
+				'EventEspresso\core\services\orm\tree_traversal\NodeGroupDao' => EE_Dependency_Map::load_from_cache,
820
+			],
821
+			'EventEspressoBatchRequest\JobHandlers\PreviewEventDeletion'                                                  => [
822
+				'EventEspresso\core\services\orm\tree_traversal\NodeGroupDao' => EE_Dependency_Map::load_from_cache,
823
+			],
824
+			'EventEspresso\core\domain\services\admin\events\data\PreviewDeletion'                                        => [
825
+				'EventEspresso\core\services\orm\tree_traversal\NodeGroupDao' => EE_Dependency_Map::load_from_cache,
826
+				'EEM_Event'                                                   => EE_Dependency_Map::load_from_cache,
827
+				'EEM_Datetime'                                                => EE_Dependency_Map::load_from_cache,
828
+				'EEM_Registration'                                            => EE_Dependency_Map::load_from_cache,
829
+			],
830
+			'EventEspresso\core\domain\services\admin\events\data\ConfirmDeletion'                                        => [
831
+				'EventEspresso\core\services\orm\tree_traversal\NodeGroupDao' => EE_Dependency_Map::load_from_cache,
832
+			],
833
+			'EventEspresso\core\services\request\CurrentPage'                                                             => [
834
+				'EE_CPT_Strategy'                             => EE_Dependency_Map::load_from_cache,
835
+				'EventEspresso\core\services\request\Request' => EE_Dependency_Map::load_from_cache,
836
+			],
837
+			'EventEspresso\core\services\shortcodes\LegacyShortcodesManager'                                              => [
838
+				'EE_Registry'                                     => EE_Dependency_Map::load_from_cache,
839
+				'EventEspresso\core\services\request\CurrentPage' => EE_Dependency_Map::load_from_cache,
840
+			],
841
+			'EventEspresso\core\services\shortcodes\ShortcodesManager'                                                    => [
842
+				'EventEspresso\core\services\shortcodes\LegacyShortcodesManager' => EE_Dependency_Map::load_from_cache,
843
+				'EventEspresso\core\services\request\CurrentPage'                => EE_Dependency_Map::load_from_cache,
844
+			],
845
+			'EventEspresso\core\domain\entities\users\CurrentUser'                                                        => [
846
+				'EventEspresso\core\domain\entities\users\EventManagers' => EE_Dependency_Map::load_from_cache,
847
+			],
848
+			'EventEspresso\core\services\form\meta\InputTypes'                                                            => [
849
+				'EventEspresso\core\services\form\meta\inputs\Block'    => EE_Dependency_Map::load_from_cache,
850
+				'EventEspresso\core\services\form\meta\inputs\Button'   => EE_Dependency_Map::load_from_cache,
851
+				'EventEspresso\core\services\form\meta\inputs\DateTime' => EE_Dependency_Map::load_from_cache,
852
+				'EventEspresso\core\services\form\meta\inputs\Input'    => EE_Dependency_Map::load_from_cache,
853
+				'EventEspresso\core\services\form\meta\inputs\Number'   => EE_Dependency_Map::load_from_cache,
854
+				'EventEspresso\core\services\form\meta\inputs\Phone'    => EE_Dependency_Map::load_from_cache,
855
+				'EventEspresso\core\services\form\meta\inputs\Select'   => EE_Dependency_Map::load_from_cache,
856
+				'EventEspresso\core\services\form\meta\inputs\Text'     => EE_Dependency_Map::load_from_cache,
857
+			],
858
+			'EventEspresso\core\domain\services\registration\form\v1\RegFormDependencyHandler'                            => [
859
+				'EE_Dependency_Map' => EE_Dependency_Map::load_from_cache,
860
+			],
861
+			'EventEspresso\core\services\calculators\LineItemCalculator'                                                  => [
862
+				'EventEspresso\core\services\helpers\DecimalValues' => EE_Dependency_Map::load_from_cache,
863
+			],
864
+			'EventEspresso\core\services\helpers\DecimalValues'                                                           => [
865
+				'EE_Currency_Config' => EE_Dependency_Map::load_from_cache,
866
+			],
867
+		];
868
+	}
869
+
870
+
871
+	/**
872
+	 * Registers how core classes are loaded.
873
+	 * This can either be done by simply providing the name of one of the EE_Registry loader methods such as:
874
+	 *        'EE_Request_Handler' => 'load_core'
875
+	 *        'EE_Messages_Queue'  => 'load_lib'
876
+	 *        'EEH_Debug_Tools'    => 'load_helper'
877
+	 * or, if greater control is required, by providing a custom closure. For example:
878
+	 *        'Some_Class' => function () {
879
+	 *            return new Some_Class();
880
+	 *        },
881
+	 * This is required for instantiating dependencies
882
+	 * where an interface has been type hinted in a class constructor. For example:
883
+	 *        'Required_Interface' => function () {
884
+	 *            return new A_Class_That_Implements_Required_Interface();
885
+	 *        },
886
+	 */
887
+	protected function _register_core_class_loaders()
888
+	{
889
+		$this->_class_loaders = [
890
+			// load_core
891
+			'EE_Dependency_Map'                            => function () {
892
+				return $this;
893
+			},
894
+			'EE_Capabilities'                              => 'load_core',
895
+			'EE_Encryption'                                => 'load_core',
896
+			'EE_Front_Controller'                          => 'load_core',
897
+			'EE_Module_Request_Router'                     => 'load_core',
898
+			'EE_Registry'                                  => 'load_core',
899
+			'EE_Request'                                   => function () {
900
+				return $this->legacy_request;
901
+			},
902
+			'EventEspresso\core\services\request\Request'  => function () {
903
+				return $this->request;
904
+			},
905
+			'EventEspresso\core\services\request\Response' => function () {
906
+				return $this->response;
907
+			},
908
+			'EE_Base'                                      => 'load_core',
909
+			'EE_Request_Handler'                           => 'load_core',
910
+			'EE_Session'                                   => 'load_core',
911
+			'EE_Cron_Tasks'                                => 'load_core',
912
+			'EE_System'                                    => 'load_core',
913
+			'EE_Maintenance_Mode'                          => 'load_core',
914
+			'EE_Register_CPTs'                             => 'load_core',
915
+			'EE_Admin'                                     => 'load_core',
916
+			'EE_CPT_Strategy'                              => 'load_core',
917
+			// load_class
918
+			'EE_Registration_Processor'                    => 'load_class',
919
+			// load_lib
920
+			'EE_Message_Resource_Manager'                  => 'load_lib',
921
+			'EE_Message_Type_Collection'                   => 'load_lib',
922
+			'EE_Message_Type_Collection_Loader'            => 'load_lib',
923
+			'EE_Messenger_Collection'                      => 'load_lib',
924
+			'EE_Messenger_Collection_Loader'               => 'load_lib',
925
+			'EE_Messages_Processor'                        => 'load_lib',
926
+			'EE_Message_Repository'                        => 'load_lib',
927
+			'EE_Messages_Queue'                            => 'load_lib',
928
+			'EE_Messages_Data_Handler_Collection'          => 'load_lib',
929
+			'EE_Message_Template_Group_Collection'         => 'load_lib',
930
+			'EE_Payment_Method_Manager'                    => 'load_lib',
931
+			'EE_DMS_Core_4_1_0'                            => 'load_dms',
932
+			'EE_DMS_Core_4_2_0'                            => 'load_dms',
933
+			'EE_DMS_Core_4_3_0'                            => 'load_dms',
934
+			'EE_DMS_Core_4_5_0'                            => 'load_dms',
935
+			'EE_DMS_Core_4_6_0'                            => 'load_dms',
936
+			'EE_DMS_Core_4_7_0'                            => 'load_dms',
937
+			'EE_DMS_Core_4_8_0'                            => 'load_dms',
938
+			'EE_DMS_Core_4_9_0'                            => 'load_dms',
939
+			'EE_DMS_Core_4_10_0'                           => 'load_dms',
940
+			'EE_DMS_Core_4_11_0'                           => 'load_dms',
941
+			'EE_DMS_Core_4_12_0'                           => 'load_dms',
942
+			'EE_Messages_Generator'                        => static function () {
943
+				return EE_Registry::instance()->load_lib(
944
+					'Messages_Generator',
945
+					[],
946
+					false,
947
+					false
948
+				);
949
+			},
950
+			'EE_Messages_Template_Defaults'                => static function ($arguments = []) {
951
+				return EE_Registry::instance()->load_lib(
952
+					'Messages_Template_Defaults',
953
+					$arguments,
954
+					false,
955
+					false
956
+				);
957
+			},
958
+			// load_helper
959
+			'EEH_Parse_Shortcodes'                         => static function () {
960
+				if (EE_Registry::instance()->load_helper('Parse_Shortcodes')) {
961
+					return new EEH_Parse_Shortcodes();
962
+				}
963
+				return null;
964
+			},
965
+			'EE_Template_Config'                           => static function () {
966
+				return EE_Config::instance()->template_settings;
967
+			},
968
+			'EE_Currency_Config'                           => static function () {
969
+				return EE_Currency_Config::getCurrencyConfig();
970
+			},
971
+			'EE_Registration_Config'                       => static function () {
972
+				return EE_Config::instance()->registration;
973
+			},
974
+			'EE_Core_Config'                               => static function () {
975
+				return EE_Config::instance()->core;
976
+			},
977
+			'EventEspresso\core\services\loaders\Loader'   => static function () {
978
+				return LoaderFactory::getLoader();
979
+			},
980
+			'EE_Network_Config'                            => static function () {
981
+				return EE_Network_Config::instance();
982
+			},
983
+			'EE_Config'                                    => static function () {
984
+				return EE_Config::instance();
985
+			},
986
+			'EventEspresso\core\domain\Domain'             => static function () {
987
+				return DomainFactory::getEventEspressoCoreDomain();
988
+			},
989
+			'EE_Admin_Config'                              => static function () {
990
+				return EE_Config::instance()->admin;
991
+			},
992
+			'EE_Organization_Config'                       => static function () {
993
+				return EE_Config::instance()->organization;
994
+			},
995
+			'EE_Network_Core_Config'                       => static function () {
996
+				return EE_Network_Config::instance()->core;
997
+			},
998
+			'EE_Environment_Config'                        => static function () {
999
+				return EE_Config::instance()->environment;
1000
+			},
1001
+			'EED_Core_Rest_Api'                            => static function () {
1002
+				return EED_Core_Rest_Api::instance();
1003
+			},
1004
+			'WP_REST_Server'                               => static function () {
1005
+				return rest_get_server();
1006
+			},
1007
+			'EventEspresso\core\Psr4Autoloader'            => static function () {
1008
+				return EE_Psr4AutoloaderInit::psr4_loader();
1009
+			},
1010
+			'EE_Ticket_Selector_Config'                    => function () {
1011
+				return EE_Config::instance()->template_settings->EED_Ticket_Selector;
1012
+			},
1013
+		];
1014
+	}
1015
+
1016
+
1017
+	/**
1018
+	 * can be used for supplying alternate names for classes,
1019
+	 * or for connecting interface names to instantiable classes
1020
+	 *
1021
+	 * @throws InvalidAliasException
1022
+	 */
1023
+	protected function _register_core_aliases()
1024
+	{
1025
+		$aliases = [
1026
+			'CommandBusInterface'                                                          => 'EventEspresso\core\services\commands\CommandBusInterface',
1027
+			'EventEspresso\core\services\commands\CommandBusInterface'                     => 'EventEspresso\core\services\commands\CommandBus',
1028
+			'CommandHandlerManagerInterface'                                               => 'EventEspresso\core\services\commands\CommandHandlerManagerInterface',
1029
+			'EventEspresso\core\services\commands\CommandHandlerManagerInterface'          => 'EventEspresso\core\services\commands\CommandHandlerManager',
1030
+			'CapChecker'                                                                   => 'EventEspresso\core\services\commands\middleware\CapChecker',
1031
+			'AddActionHook'                                                                => 'EventEspresso\core\services\commands\middleware\AddActionHook',
1032
+			'CapabilitiesChecker'                                                          => 'EventEspresso\core\domain\services\capabilities\CapabilitiesChecker',
1033
+			'CapabilitiesCheckerInterface'                                                 => 'EventEspresso\core\domain\services\capabilities\CapabilitiesCheckerInterface',
1034
+			'EventEspresso\core\domain\services\capabilities\CapabilitiesCheckerInterface' => 'EventEspresso\core\domain\services\capabilities\CapabilitiesChecker',
1035
+			'CreateRegistrationService'                                                    => 'EventEspresso\core\domain\services\registration\CreateRegistrationService',
1036
+			'CreateRegistrationCommandHandler'                                             => 'EventEspresso\core\services\commands\registration\CreateRegistrationCommand',
1037
+			'CopyRegistrationDetailsCommandHandler'                                        => 'EventEspresso\core\services\commands\registration\CopyRegistrationDetailsCommand',
1038
+			'CopyRegistrationPaymentsCommandHandler'                                       => 'EventEspresso\core\services\commands\registration\CopyRegistrationPaymentsCommand',
1039
+			'CancelRegistrationAndTicketLineItemCommandHandler'                            => 'EventEspresso\core\services\commands\registration\CancelRegistrationAndTicketLineItemCommandHandler',
1040
+			'UpdateRegistrationAndTransactionAfterChangeCommandHandler'                    => 'EventEspresso\core\services\commands\registration\UpdateRegistrationAndTransactionAfterChangeCommandHandler',
1041
+			'CreateTicketLineItemCommandHandler'                                           => 'EventEspresso\core\services\commands\ticket\CreateTicketLineItemCommand',
1042
+			'CreateTransactionCommandHandler'                                              => 'EventEspresso\core\services\commands\transaction\CreateTransactionCommandHandler',
1043
+			'CreateAttendeeCommandHandler'                                                 => 'EventEspresso\core\services\commands\attendee\CreateAttendeeCommandHandler',
1044
+			'TableManager'                                                                 => 'EventEspresso\core\services\database\TableManager',
1045
+			'TableAnalysis'                                                                => 'EventEspresso\core\services\database\TableAnalysis',
1046
+			'EspressoShortcode'                                                            => 'EventEspresso\core\services\shortcodes\EspressoShortcode',
1047
+			'ShortcodeInterface'                                                           => 'EventEspresso\core\services\shortcodes\ShortcodeInterface',
1048
+			'EventEspresso\core\services\shortcodes\ShortcodeInterface'                    => 'EventEspresso\core\services\shortcodes\EspressoShortcode',
1049
+			'EventEspresso\core\services\cache\CacheStorageInterface'                      => 'EventEspresso\core\services\cache\TransientCacheStorage',
1050
+			'LoaderInterface'                                                              => 'EventEspresso\core\services\loaders\LoaderInterface',
1051
+			'EventEspresso\core\services\loaders\LoaderInterface'                          => 'EventEspresso\core\services\loaders\Loader',
1052
+			'CommandFactoryInterface'                                                      => 'EventEspresso\core\services\commands\CommandFactoryInterface',
1053
+			'EventEspresso\core\services\commands\CommandFactoryInterface'                 => 'EventEspresso\core\services\commands\CommandFactory',
1054
+			'EmailValidatorInterface'                                                      => 'EventEspresso\core\domain\services\validation\email\EmailValidatorInterface',
1055
+			'EventEspresso\core\domain\services\validation\email\EmailValidatorInterface'  => 'EventEspresso\core\domain\services\validation\email\EmailValidationService',
1056
+			'NoticeConverterInterface'                                                     => 'EventEspresso\core\services\notices\NoticeConverterInterface',
1057
+			'EventEspresso\core\services\notices\NoticeConverterInterface'                 => 'EventEspresso\core\services\notices\ConvertNoticesToEeErrors',
1058
+			'NoticesContainerInterface'                                                    => 'EventEspresso\core\services\notices\NoticesContainerInterface',
1059
+			'EventEspresso\core\services\notices\NoticesContainerInterface'                => 'EventEspresso\core\services\notices\NoticesContainer',
1060
+			'EventEspresso\core\services\request\RequestInterface'                         => 'EventEspresso\core\services\request\Request',
1061
+			'EventEspresso\core\services\request\ResponseInterface'                        => 'EventEspresso\core\services\request\Response',
1062
+			'EventEspresso\core\domain\DomainInterface'                                    => 'EventEspresso\core\domain\Domain',
1063
+			'Registration_Processor'                                                       => 'EE_Registration_Processor',
1064
+			'EventEspresso\core\services\assets\AssetManifestInterface'                    => 'EventEspresso\core\services\assets\AssetManifest',
1065
+		];
1066
+		foreach ($aliases as $alias => $fqn) {
1067
+			if (is_array($fqn)) {
1068
+				foreach ($fqn as $class => $for_class) {
1069
+					$this->class_cache->addAlias($class, $alias, $for_class);
1070
+				}
1071
+				continue;
1072
+			}
1073
+			$this->class_cache->addAlias($fqn, $alias);
1074
+		}
1075
+		if (! (defined('DOING_AJAX') && DOING_AJAX) && is_admin()) {
1076
+			$this->class_cache->addAlias(
1077
+				'EventEspresso\core\services\notices\ConvertNoticesToAdminNotices',
1078
+				'EventEspresso\core\services\notices\NoticeConverterInterface'
1079
+			);
1080
+		}
1081
+	}
1082
+
1083
+
1084
+	public function debug($for_class = '')
1085
+	{
1086
+		if (method_exists($this->class_cache, 'debug')) {
1087
+			$this->class_cache->debug($for_class);
1088
+		}
1089
+	}
1090
+
1091
+
1092
+	/**
1093
+	 * This is used to reset the internal map and class_loaders to their original default state at the beginning of the
1094
+	 * request Primarily used by unit tests.
1095
+	 */
1096
+	public function reset()
1097
+	{
1098
+		$this->_register_core_class_loaders();
1099
+		$this->_register_core_dependencies();
1100
+	}
1101
+
1102
+
1103
+	/**
1104
+	 * PLZ NOTE: a better name for this method would be is_alias()
1105
+	 * because it returns TRUE if the provided fully qualified name IS an alias
1106
+	 * WHY?
1107
+	 * Because if a class is type hinting for a concretion,
1108
+	 * then why would we need to find another class to supply it?
1109
+	 * ie: if a class asks for `Fully/Qualified/Namespace/SpecificClassName`,
1110
+	 * then give it an instance of `Fully/Qualified/Namespace/SpecificClassName`.
1111
+	 * Don't go looking for some substitute.
1112
+	 * Whereas if a class is type hinting for an interface...
1113
+	 * then we need to find an actual class to use.
1114
+	 * So the interface IS the alias for some other FQN,
1115
+	 * and we need to find out if `Fully/Qualified/Namespace/SomeInterface`
1116
+	 * represents some other class.
1117
+	 *
1118
+	 * @param string $fqn
1119
+	 * @param string $for_class
1120
+	 * @return bool
1121
+	 * @deprecated 4.9.62.p
1122
+	 */
1123
+	public function has_alias(string $fqn = '', string $for_class = ''): bool
1124
+	{
1125
+		return $this->isAlias($fqn, $for_class);
1126
+	}
1127
+
1128
+
1129
+	/**
1130
+	 * PLZ NOTE: a better name for this method would be get_fqn_for_alias()
1131
+	 * because it returns a FQN for provided alias if one exists, otherwise returns the original $alias
1132
+	 * functions recursively, so that multiple aliases can be used to drill down to a FQN
1133
+	 *  for example:
1134
+	 *      if the following two entries were added to the _aliases array:
1135
+	 *          array(
1136
+	 *              'interface_alias'           => 'some\namespace\interface'
1137
+	 *              'some\namespace\interface'  => 'some\namespace\classname'
1138
+	 *          )
1139
+	 *      then one could use EE_Registry::instance()->create( 'interface_alias' )
1140
+	 *      to load an instance of 'some\namespace\classname'
1141
+	 *
1142
+	 * @param string $alias
1143
+	 * @param string $for_class
1144
+	 * @return string
1145
+	 * @deprecated 4.9.62.p
1146
+	 */
1147
+	public function get_alias(string $alias = '', string $for_class = ''): string
1148
+	{
1149
+		return $this->getFqnForAlias($alias, $for_class);
1150
+	}
1151 1151
 }
Please login to merge, or discard this patch.