Completed
Branch FET-10486-add-timestamp-checki... (611b15)
by
unknown
136:24 queued 121:17
created

EE_Dependency_Map   B

Complexity

Total Complexity 37

Size/Duplication

Total Lines 630
Duplicated Lines 0 %

Coupling/Cohesion

Components 1
Dependencies 3

Importance

Changes 0
Metric Value
dl 0
loc 630
rs 8.6
c 0
b 0
f 0
wmc 37
lcom 1
cbo 3

19 Methods

Rating   Name   Duplication   Size   Complexity  
A __construct() 0 7 1
A initialize() 0 6 1
A instance() 0 8 2
A setLoader() 0 4 1
A register_dependencies() 0 15 3
B register_class_loader() 0 24 5
A dependency_map() 0 4 1
A has() 0 4 2
A has_dependency_for_class() 0 7 2
A loading_strategy_for_class_dependency() 0 7 2
A class_loader() 0 5 2
A class_loaders() 0 4 1
A add_alias() 0 10 3
A has_alias() 0 8 3
A get_alias() 0 10 3
B _register_core_dependencies() 0 176 1
A _register_core_class_loaders() 0 55 2
B _register_core_aliases() 0 33 1
A reset() 0 5 1
1
<?php
2
use EventEspresso\core\exceptions\InvalidDataTypeException;
3
use EventEspresso\core\exceptions\InvalidInterfaceException;
4
use EventEspresso\core\services\loaders\LoaderInterface;
5
6
if (! defined('EVENT_ESPRESSO_VERSION')) {
7
    exit('No direct script access allowed');
8
}
9
10
11
12
/**
13
 * Class EE_Dependency_Map
14
 * info about how to load classes required by other classes
15
 *
16
 * @package       Event Espresso
17
 * @subpackage    core
18
 * @author        Brent Christensen
19
 * @since         4.9.0
20
 */
21
class EE_Dependency_Map
22
{
23
24
25
    /**
26
     * This means that the requested class dependency is not present in the dependency map
27
     */
28
    const not_registered = 0;
29
30
31
    /**
32
     * This instructs class loaders to ALWAYS return a newly instantiated object for the requested class.
33
     */
34
    const load_new_object = 1;
35
36
    /**
37
     * This instructs class loaders to return a previously instantiated and cached object for the requested class.
38
     * IF a previously instantiated object does not exist, a new one will be created and added to the cache.
39
     */
40
    const load_from_cache = 2;
41
42
    /**
43
     * @type EE_Dependency_Map $_instance
44
     */
45
    protected static $_instance;
46
47
    /**
48
     * @type EE_Request $request
49
     */
50
    protected $_request;
51
52
    /**
53
     * @type EE_Response $response
54
     */
55
    protected $_response;
56
57
    /**
58
     * @type LoaderInterface $loader
59
     */
60
    protected $loader;
61
62
    /**
63
     * @type array $_dependency_map
64
     */
65
    protected $_dependency_map = array();
66
67
    /**
68
     * @type array $_class_loaders
69
     */
70
    protected $_class_loaders = array();
71
72
    /**
73
     * @type array $_aliases
74
     */
75
    protected $_aliases = array();
76
77
78
79
    /**
80
     * EE_Dependency_Map constructor.
81
     *
82
     * @param EE_Request  $request
83
     * @param EE_Response $response
84
     */
85
    protected function __construct(EE_Request $request, EE_Response $response)
86
    {
87
        $this->_request = $request;
88
        $this->_response = $response;
89
        add_action('EE_Load_Espresso_Core__handle_request__initialize_core_loading', array($this, 'initialize'));
90
        do_action('EE_Dependency_Map____construct');
91
    }
92
93
94
95
    /**
96
     * @throws InvalidDataTypeException
97
     * @throws InvalidInterfaceException
98
     * @throws InvalidArgumentException
99
     */
100
    public function initialize()
101
    {
102
        $this->_register_core_dependencies();
103
        $this->_register_core_class_loaders();
104
        $this->_register_core_aliases();
105
    }
106
107
108
109
    /**
110
     * @singleton method used to instantiate class object
111
     * @access    public
112
     * @param EE_Request  $request
113
     * @param EE_Response $response
114
     * @return EE_Dependency_Map
115
     */
116
    public static function instance(EE_Request $request = null, EE_Response $response = null)
117
    {
118
        // check if class object is instantiated, and instantiated properly
119
        if (! self::$_instance instanceof EE_Dependency_Map) {
120
            self::$_instance = new EE_Dependency_Map($request, $response);
0 ignored issues
show
Bug introduced by
It seems like $request defined by parameter $request on line 116 can be null; however, EE_Dependency_Map::__construct() does not accept null, maybe add an additional type check?

It seems like you allow that null is being passed for a parameter, however the function which is called does not seem to accept null.

We recommend to add an additional type check (or disallow null for the parameter):

function notNullable(stdClass $x) { }

// Unsafe
function withoutCheck(stdClass $x = null) {
    notNullable($x);
}

// Safe - Alternative 1: Adding Additional Type-Check
function withCheck(stdClass $x = null) {
    if ($x instanceof stdClass) {
        notNullable($x);
    }
}

// Safe - Alternative 2: Changing Parameter
function withNonNullableParam(stdClass $x) {
    notNullable($x);
}
Loading history...
Bug introduced by
It seems like $response defined by parameter $response on line 116 can be null; however, EE_Dependency_Map::__construct() does not accept null, maybe add an additional type check?

It seems like you allow that null is being passed for a parameter, however the function which is called does not seem to accept null.

We recommend to add an additional type check (or disallow null for the parameter):

function notNullable(stdClass $x) { }

// Unsafe
function withoutCheck(stdClass $x = null) {
    notNullable($x);
}

// Safe - Alternative 1: Adding Additional Type-Check
function withCheck(stdClass $x = null) {
    if ($x instanceof stdClass) {
        notNullable($x);
    }
}

// Safe - Alternative 2: Changing Parameter
function withNonNullableParam(stdClass $x) {
    notNullable($x);
}
Loading history...
121
        }
122
        return self::$_instance;
123
    }
124
125
126
127
    /**
128
     * @param LoaderInterface $loader
129
     */
130
    public function setLoader(LoaderInterface $loader)
131
    {
132
        $this->loader = $loader;
133
    }
134
135
136
137
    /**
138
     * @param string $class
139
     * @param array  $dependencies
140
     * @return boolean
141
     */
142
    public static function register_dependencies($class, $dependencies)
143
    {
144
        if (! isset(self::$_instance->_dependency_map[$class])) {
145
            // we need to make sure that any aliases used when registering a dependency
146
            // get resolved to the correct class name
147
            foreach ((array)$dependencies as $dependency => $load_source) {
148
                $alias = self::$_instance->get_alias($dependency);
149
                unset($dependencies[$dependency]);
150
                $dependencies[$alias] = $load_source;
151
            }
152
            self::$_instance->_dependency_map[$class] = (array)$dependencies;
153
            return true;
154
        }
155
        return false;
156
    }
157
158
159
160
    /**
161
     * @param string $class_name
162
     * @param string $loader
163
     * @return bool
164
     * @throws EE_Error
165
     */
166
    public static function register_class_loader($class_name, $loader = 'load_core')
167
    {
168
        // check that loader is callable or method starts with "load_" and exists in EE_Registry
169
        if (
170
            ! is_callable($loader)
171
            && (
172
                strpos($loader, 'load_') !== 0
173
                || ! method_exists('EE_Registry', $loader)
174
            )
175
        ) {
176
            throw new EE_Error(
177
                sprintf(
178
                    esc_html__('"%1$s" is not a valid loader method on EE_Registry.', 'event_espresso'),
179
                    $loader
180
                )
181
            );
182
        }
183
        $class_name = self::$_instance->get_alias($class_name);
184
        if (! isset(self::$_instance->_class_loaders[$class_name])) {
185
            self::$_instance->_class_loaders[$class_name] = $loader;
186
            return true;
187
        }
188
        return false;
189
    }
190
191
192
193
    /**
194
     * @return array
195
     */
196
    public function dependency_map()
197
    {
198
        return $this->_dependency_map;
199
    }
200
201
202
203
    /**
204
     * returns TRUE if dependency map contains a listing for the provided class name
205
     *
206
     * @param string $class_name
207
     * @return boolean
208
     */
209
    public function has($class_name = '')
210
    {
211
        return isset($this->_dependency_map[$class_name]) ? true : false;
212
    }
213
214
215
216
    /**
217
     * returns TRUE if dependency map contains a listing for the provided class name AND dependency
218
     *
219
     * @param string $class_name
220
     * @param string $dependency
221
     * @return bool
222
     */
223
    public function has_dependency_for_class($class_name = '', $dependency = '')
224
    {
225
        $dependency = $this->get_alias($dependency);
226
        return isset($this->_dependency_map[$class_name], $this->_dependency_map[$class_name][$dependency])
227
            ? true
228
            : false;
229
    }
230
231
232
233
    /**
234
     * returns loading strategy for whether a previously cached dependency should be loaded or a new instance returned
235
     *
236
     * @param string $class_name
237
     * @param string $dependency
238
     * @return int
239
     */
240
    public function loading_strategy_for_class_dependency($class_name = '', $dependency = '')
241
    {
242
        $dependency = $this->get_alias($dependency);
243
        return $this->has_dependency_for_class($class_name, $dependency)
244
            ? $this->_dependency_map[$class_name][$dependency]
245
            : EE_Dependency_Map::not_registered;
246
    }
247
248
249
250
    /**
251
     * @param string $class_name
252
     * @return string | Closure
253
     */
254
    public function class_loader($class_name)
255
    {
256
        $class_name = $this->get_alias($class_name);
257
        return isset($this->_class_loaders[$class_name]) ? $this->_class_loaders[$class_name] : '';
258
    }
259
260
261
262
    /**
263
     * @return array
264
     */
265
    public function class_loaders()
266
    {
267
        return $this->_class_loaders;
268
    }
269
270
271
272
    /**
273
     * adds an alias for a classname
274
     *
275
     * @param string $class_name the class name that should be used (concrete class to replace interface)
276
     * @param string $alias      the class name that would be type hinted for (abstract parent or interface)
277
     * @param string $for_class  the class that has the dependency (is type hinting for the interface)
278
     */
279
    public function add_alias($class_name, $alias, $for_class = '')
280
    {
281
        if ($for_class !== '') {
282
            if (! isset($this->_aliases[$for_class])) {
283
                $this->_aliases[$for_class] = array();
284
            }
285
            $this->_aliases[$for_class][$class_name] = $alias;
286
        }
287
        $this->_aliases[$class_name] = $alias;
288
    }
289
290
291
292
    /**
293
     * returns TRUE if the provided class name has an alias
294
     *
295
     * @param string $class_name
296
     * @param string $for_class
297
     * @return bool
298
     */
299
    public function has_alias($class_name = '', $for_class = '')
300
    {
301
        return isset($this->_aliases[$for_class], $this->_aliases[$for_class][$class_name])
302
               || (
303
                   isset($this->_aliases[$class_name])
304
                   && ! is_array($this->_aliases[$class_name])
305
               );
306
    }
307
308
309
310
    /**
311
     * returns alias for class name if one exists, otherwise returns the original classname
312
     * functions recursively, so that multiple aliases can be used to drill down to a classname
313
     *  for example:
314
     *      if the following two entries were added to the _aliases array:
315
     *          array(
316
     *              'interface_alias'           => 'some\namespace\interface'
317
     *              'some\namespace\interface'  => 'some\namespace\classname'
318
     *          )
319
     *      then one could use EE_Registry::instance()->create( 'interface_alias' )
320
     *      to load an instance of 'some\namespace\classname'
321
     *
322
     * @param string $class_name
323
     * @param string $for_class
324
     * @return string
325
     */
326
    public function get_alias($class_name = '', $for_class = '')
327
    {
328
        if (! $this->has_alias($class_name, $for_class)) {
329
            return $class_name;
330
        }
331
        if ($for_class !== '') {
332
            return $this->get_alias($this->_aliases[$for_class][$class_name], $for_class);
333
        }
334
        return $this->get_alias($this->_aliases[$class_name]);
335
    }
336
337
338
339
    /**
340
     * Registers the core dependencies and whether a previously instantiated object should be loaded from the cache,
341
     * if one exists, or whether a new object should be generated every time the requested class is loaded.
342
     * This is done by using the following class constants:
343
     *        EE_Dependency_Map::load_from_cache - loads previously instantiated object
344
     *        EE_Dependency_Map::load_new_object - generates a new object every time
345
     */
346
    protected function _register_core_dependencies()
347
    {
348
        $this->_dependency_map = array(
349
            'EE_Request_Handler'                                                                                          => array(
350
                'EE_Request' => EE_Dependency_Map::load_from_cache,
351
            ),
352
            'EE_System'                                                                                                   => array(
353
                'EE_Registry' => EE_Dependency_Map::load_from_cache,
354
            ),
355
            'EE_Session'                                                                                                  => array(
356
                'EventEspresso\core\services\cache\TransientCacheStorage' => EE_Dependency_Map::load_from_cache,
357
                'EE_Encryption'                                           => EE_Dependency_Map::load_from_cache,
358
            ),
359
            'EE_Cart'                                                                                                     => array(
360
                'EE_Session' => EE_Dependency_Map::load_from_cache,
361
            ),
362
            'EE_Front_Controller'                                                                                         => array(
363
                'EE_Registry'              => EE_Dependency_Map::load_from_cache,
364
                'EE_Request_Handler'       => EE_Dependency_Map::load_from_cache,
365
                'EE_Module_Request_Router' => EE_Dependency_Map::load_from_cache,
366
            ),
367
            'EE_Messenger_Collection_Loader'                                                                              => array(
368
                'EE_Messenger_Collection' => EE_Dependency_Map::load_new_object,
369
            ),
370
            'EE_Message_Type_Collection_Loader'                                                                           => array(
371
                'EE_Message_Type_Collection' => EE_Dependency_Map::load_new_object,
372
            ),
373
            'EE_Message_Resource_Manager'                                                                                 => array(
374
                'EE_Messenger_Collection_Loader'    => EE_Dependency_Map::load_new_object,
375
                'EE_Message_Type_Collection_Loader' => EE_Dependency_Map::load_new_object,
376
                'EEM_Message_Template_Group'        => EE_Dependency_Map::load_from_cache,
377
            ),
378
            'EE_Message_Factory'                                                                                          => array(
379
                'EE_Message_Resource_Manager' => EE_Dependency_Map::load_from_cache,
380
            ),
381
            'EE_messages'                                                                                                 => array(
382
                'EE_Message_Resource_Manager' => EE_Dependency_Map::load_from_cache,
383
            ),
384
            'EE_Messages_Generator'                                                                                       => array(
385
                'EE_Messages_Queue'                    => EE_Dependency_Map::load_new_object,
386
                'EE_Messages_Data_Handler_Collection'  => EE_Dependency_Map::load_new_object,
387
                'EE_Message_Template_Group_Collection' => EE_Dependency_Map::load_new_object,
388
                'EEH_Parse_Shortcodes'                 => EE_Dependency_Map::load_from_cache,
389
            ),
390
            'EE_Messages_Processor'                                                                                       => array(
391
                'EE_Message_Resource_Manager' => EE_Dependency_Map::load_from_cache,
392
            ),
393
            'EE_Messages_Queue'                                                                                           => array(
394
                'EE_Message_Repository' => EE_Dependency_Map::load_new_object,
395
            ),
396
            'EE_Messages_Template_Defaults'                                                                               => array(
397
                'EEM_Message_Template_Group' => EE_Dependency_Map::load_from_cache,
398
                'EEM_Message_Template'       => EE_Dependency_Map::load_from_cache,
399
            ),
400
            'EE_Message_To_Generate_From_Request'                                                                         => array(
401
                'EE_Message_Resource_Manager' => EE_Dependency_Map::load_from_cache,
402
                'EE_Request_Handler'          => EE_Dependency_Map::load_from_cache,
403
            ),
404
            'EventEspresso\core\services\commands\CommandBus'                                                             => array(
405
                'EventEspresso\core\services\commands\CommandHandlerManager' => EE_Dependency_Map::load_from_cache,
406
            ),
407
            'EventEspresso\core\services\commands\CommandHandlerManager'                                                  => array(
408
                'EventEspresso\core\services\loaders\Loader' => EE_Dependency_Map::load_from_cache,
409
            ),
410
            'EventEspresso\core\services\commands\CompositeCommandHandler'                                                              => array(
411
                'EventEspresso\core\services\commands\CommandBus'     => EE_Dependency_Map::load_from_cache,
412
                'EventEspresso\core\services\commands\CommandFactory' => EE_Dependency_Map::load_from_cache,
413
            ),
414
            'EventEspresso\core\services\commands\CommandFactory'                                                              => array(
415
                'EventEspresso\core\services\loaders\Loader' => EE_Dependency_Map::load_from_cache,
416
            ),
417
            'EventEspresso\core\services\commands\middleware\CapChecker'                                                  => array(
418
                'EventEspresso\core\domain\services\capabilities\CapabilitiesChecker' => EE_Dependency_Map::load_from_cache,
419
            ),
420
            'EventEspresso\core\domain\services\capabilities\CapabilitiesChecker'                                         => array(
421
                'EE_Capabilities' => EE_Dependency_Map::load_from_cache,
422
            ),
423
            'EventEspresso\core\domain\services\capabilities\RegistrationsCapChecker'                                     => array(
424
                'EE_Capabilities' => EE_Dependency_Map::load_from_cache,
425
            ),
426
            'EventEspresso\core\services\commands\registration\CreateRegistrationCommandHandler'                          => array(
427
                'EventEspresso\core\domain\services\registration\CreateRegistrationService' => EE_Dependency_Map::load_from_cache,
428
            ),
429
            'EventEspresso\core\services\commands\registration\CopyRegistrationDetailsCommandHandler'                     => array(
430
                'EventEspresso\core\domain\services\registration\CopyRegistrationService' => EE_Dependency_Map::load_from_cache,
431
            ),
432
            'EventEspresso\core\services\commands\registration\CopyRegistrationPaymentsCommandHandler'                    => array(
433
                'EventEspresso\core\domain\services\registration\CopyRegistrationService' => EE_Dependency_Map::load_from_cache,
434
            ),
435
            'EventEspresso\core\services\commands\registration\CancelRegistrationAndTicketLineItemCommandHandler'         => array(
436
                'EventEspresso\core\domain\services\registration\CancelTicketLineItemService' => EE_Dependency_Map::load_from_cache,
437
            ),
438
            'EventEspresso\core\services\commands\registration\UpdateRegistrationAndTransactionAfterChangeCommandHandler' => array(
439
                'EventEspresso\core\domain\services\registration\UpdateRegistrationService' => EE_Dependency_Map::load_from_cache,
440
            ),
441
            'EventEspresso\core\services\commands\ticket\CreateTicketLineItemCommandHandler'                              => array(
442
                'EventEspresso\core\domain\services\ticket\CreateTicketLineItemService' => EE_Dependency_Map::load_from_cache,
443
            ),
444
            'EventEspresso\core\services\commands\ticket\CancelTicketLineItemCommandHandler'                              => array(
445
                'EventEspresso\core\domain\services\ticket\CancelTicketLineItemService' => EE_Dependency_Map::load_from_cache,
446
            ),
447
            'EventEspresso\core\domain\services\registration\CancelRegistrationService'                                   => array(
448
                'EventEspresso\core\domain\services\ticket\CancelTicketLineItemService' => EE_Dependency_Map::load_from_cache,
449
            ),
450
            'EventEspresso\core\services\database\TableManager'                                                           => array(
451
                'EventEspresso\core\services\database\TableAnalysis' => EE_Dependency_Map::load_from_cache,
452
            ),
453
            'EE_Data_Migration_Class_Base'                                                                                => array(
454
                'EventEspresso\core\services\database\TableAnalysis' => EE_Dependency_Map::load_from_cache,
455
                'EventEspresso\core\services\database\TableManager'  => EE_Dependency_Map::load_from_cache,
456
            ),
457
            'EE_DMS_Core_4_1_0'                                                                                           => array(
458
                'EventEspresso\core\services\database\TableAnalysis' => EE_Dependency_Map::load_from_cache,
459
                'EventEspresso\core\services\database\TableManager'  => EE_Dependency_Map::load_from_cache,
460
            ),
461
            'EE_DMS_Core_4_2_0'                                                                                           => array(
462
                'EventEspresso\core\services\database\TableAnalysis' => EE_Dependency_Map::load_from_cache,
463
                'EventEspresso\core\services\database\TableManager'  => EE_Dependency_Map::load_from_cache,
464
            ),
465
            'EE_DMS_Core_4_3_0'                                                                                           => array(
466
                'EventEspresso\core\services\database\TableAnalysis' => EE_Dependency_Map::load_from_cache,
467
                'EventEspresso\core\services\database\TableManager'  => EE_Dependency_Map::load_from_cache,
468
            ),
469
            'EE_DMS_Core_4_4_0'                                                                                           => array(
470
                'EventEspresso\core\services\database\TableAnalysis' => EE_Dependency_Map::load_from_cache,
471
                'EventEspresso\core\services\database\TableManager'  => EE_Dependency_Map::load_from_cache,
472
            ),
473
            'EE_DMS_Core_4_5_0'                                                                                           => array(
474
                'EventEspresso\core\services\database\TableAnalysis' => EE_Dependency_Map::load_from_cache,
475
                'EventEspresso\core\services\database\TableManager'  => EE_Dependency_Map::load_from_cache,
476
            ),
477
            'EE_DMS_Core_4_6_0'                                                                                           => array(
478
                'EventEspresso\core\services\database\TableAnalysis' => EE_Dependency_Map::load_from_cache,
479
                'EventEspresso\core\services\database\TableManager'  => EE_Dependency_Map::load_from_cache,
480
            ),
481
            'EE_DMS_Core_4_7_0'                                                                                           => array(
482
                'EventEspresso\core\services\database\TableAnalysis' => EE_Dependency_Map::load_from_cache,
483
                'EventEspresso\core\services\database\TableManager'  => EE_Dependency_Map::load_from_cache,
484
            ),
485
            'EE_DMS_Core_4_8_0'                                                                                           => array(
486
                'EventEspresso\core\services\database\TableAnalysis' => EE_Dependency_Map::load_from_cache,
487
                'EventEspresso\core\services\database\TableManager'  => EE_Dependency_Map::load_from_cache,
488
            ),
489
            'EE_DMS_Core_4_9_0'                                                                                           => array(
490
                'EventEspresso\core\services\database\TableAnalysis' => EE_Dependency_Map::load_from_cache,
491
                'EventEspresso\core\services\database\TableManager'  => EE_Dependency_Map::load_from_cache,
492
            ),
493
            'EventEspresso\core\domain\entities\shortcodes\EspressoCancelled'                                             => array(
494
                'EventEspresso\core\services\cache\PostRelatedCacheManager' => EE_Dependency_Map::load_from_cache,
495
            ),
496
            'EventEspresso\core\domain\entities\shortcodes\EspressoCheckout'                                              => array(
497
                'EventEspresso\core\services\cache\PostRelatedCacheManager' => EE_Dependency_Map::load_from_cache,
498
            ),
499
            'EventEspresso\core\domain\entities\shortcodes\EspressoEventAttendees'                                        => array(
500
                'EventEspresso\core\services\cache\PostRelatedCacheManager' => EE_Dependency_Map::load_from_cache,
501
            ),
502
            'EventEspresso\core\domain\entities\shortcodes\EspressoEvents'                                                => array(
503
                'EventEspresso\core\services\cache\PostRelatedCacheManager' => EE_Dependency_Map::load_from_cache,
504
            ),
505
            'EventEspresso\core\domain\entities\shortcodes\EspressoThankYou'                                              => array(
506
                'EventEspresso\core\services\cache\PostRelatedCacheManager' => EE_Dependency_Map::load_from_cache,
507
            ),
508
            'EventEspresso\core\domain\entities\shortcodes\EspressoTicketSelector'                                        => array(
509
                'EventEspresso\core\services\cache\PostRelatedCacheManager' => EE_Dependency_Map::load_from_cache,
510
            ),
511
            'EventEspresso\core\domain\entities\shortcodes\EspressoTxnPage'                                               => array(
512
                'EventEspresso\core\services\cache\PostRelatedCacheManager' => EE_Dependency_Map::load_from_cache,
513
            ),
514
            'EventEspresso\core\services\cache\BasicCacheManager'                                                         => array(
515
                'EventEspresso\core\services\cache\TransientCacheStorage' => EE_Dependency_Map::load_from_cache,
516
            ),
517
            'EventEspresso\core\services\cache\PostRelatedCacheManager'                                                   => array(
518
                'EventEspresso\core\services\cache\TransientCacheStorage' => EE_Dependency_Map::load_from_cache,
519
            ),
520
        );
521
    }
522
523
524
525
    /**
526
     * Registers how core classes are loaded.
527
     * This can either be done by simply providing the name of one of the EE_Registry loader methods such as:
528
     *        'EE_Request_Handler' => 'load_core'
529
     *        'EE_Messages_Queue'  => 'load_lib'
530
     *        'EEH_Debug_Tools'    => 'load_helper'
531
     * or, if greater control is required, by providing a custom closure. For example:
532
     *        'Some_Class' => function () {
533
     *            return new Some_Class();
534
     *        },
535
     * This is required for instantiating dependencies
536
     * where an interface has been type hinted in a class constructor. For example:
537
     *        'Required_Interface' => function () {
538
     *            return new A_Class_That_Implements_Required_Interface();
539
     *        },
540
     */
541
    protected function _register_core_class_loaders()
542
    {
543
        //for PHP5.3 compat, we need to register any properties called here in a variable because `$this` cannot
544
        //be used in a closure.
545
        $request = &$this->_request;
546
        $response = &$this->_response;
547
        $loader = &$this->loader;
548
        $this->_class_loaders = array(
549
            //load_core
550
            'EE_Capabilities'                      => 'load_core',
551
            'EE_Encryption'                        => 'load_core',
552
            'EE_Front_Controller'                  => 'load_core',
553
            'EE_Module_Request_Router'             => 'load_core',
554
            'EE_Registry'                          => 'load_core',
555
            'EE_Request'                           => function () use (&$request) {
556
                return $request;
557
            },
558
            'EE_Response'                          => function () use (&$response) {
559
                return $response;
560
            },
561
            'EE_Request_Handler'                   => 'load_core',
562
            'EE_Session'                           => 'load_core',
563
            'EE_System'                            => 'load_core',
564
            //load_lib
565
            'EE_Message_Resource_Manager'          => 'load_lib',
566
            'EE_Message_Type_Collection'           => 'load_lib',
567
            'EE_Message_Type_Collection_Loader'    => 'load_lib',
568
            'EE_Messenger_Collection'              => 'load_lib',
569
            'EE_Messenger_Collection_Loader'       => 'load_lib',
570
            'EE_Messages_Processor'                => 'load_lib',
571
            'EE_Message_Repository'                => 'load_lib',
572
            'EE_Messages_Queue'                    => 'load_lib',
573
            'EE_Messages_Data_Handler_Collection'  => 'load_lib',
574
            'EE_Message_Template_Group_Collection' => 'load_lib',
575
            'EE_Messages_Generator'                => function () {
576
                return EE_Registry::instance()->load_lib('Messages_Generator', array(), false, false);
577
            },
578
            'EE_Messages_Template_Defaults'        => function ($arguments = array()) {
579
                return EE_Registry::instance()->load_lib('Messages_Template_Defaults', $arguments, false, false);
580
            },
581
            //load_model
582
            'EEM_Message_Template_Group'           => 'load_model',
583
            'EEM_Message_Template'                 => 'load_model',
584
            //load_helper
585
            'EEH_Parse_Shortcodes'                 => function () {
586
                if (EE_Registry::instance()->load_helper('Parse_Shortcodes')) {
587
                    return new EEH_Parse_Shortcodes();
588
                }
589
                return null;
590
            },
591
            'EventEspresso\core\services\loaders\Loader' => function () use (&$loader) {
592
                return $loader;
593
            },
594
        );
595
    }
596
597
598
599
    /**
600
     * can be used for supplying alternate names for classes,
601
     * or for connecting interface names to instantiable classes
602
     */
603
    protected function _register_core_aliases()
604
    {
605
        $this->_aliases = array(
606
            'CommandBusInterface'                                                 => 'EventEspresso\core\services\commands\CommandBusInterface',
607
            'EventEspresso\core\services\commands\CommandBusInterface'            => 'EventEspresso\core\services\commands\CommandBus',
608
            'CommandHandlerManagerInterface'                                      => 'EventEspresso\core\services\commands\CommandHandlerManagerInterface',
609
            'EventEspresso\core\services\commands\CommandHandlerManagerInterface' => 'EventEspresso\core\services\commands\CommandHandlerManager',
610
            'CapChecker'                                                          => 'EventEspresso\core\services\commands\middleware\CapChecker',
611
            'AddActionHook'                                                       => 'EventEspresso\core\services\commands\middleware\AddActionHook',
612
            'CapabilitiesChecker'                                                 => 'EventEspresso\core\domain\services\capabilities\CapabilitiesChecker',
613
            'CapabilitiesCheckerInterface'                                        => 'EventEspresso\core\domain\services\capabilities\CapabilitiesCheckerInterface',
614
            'EventEspresso\core\domain\services\capabilities\CapabilitiesCheckerInterface' => 'EventEspresso\core\domain\services\capabilities\CapabilitiesChecker',
615
            'CreateRegistrationService'                                           => 'EventEspresso\core\domain\services\registration\CreateRegistrationService',
616
            'CreateRegCodeCommandHandler'                                         => 'EventEspresso\core\services\commands\registration\CreateRegCodeCommand',
617
            'CreateRegUrlLinkCommandHandler'                                      => 'EventEspresso\core\services\commands\registration\CreateRegUrlLinkCommand',
618
            'CreateRegistrationCommandHandler'                                    => 'EventEspresso\core\services\commands\registration\CreateRegistrationCommand',
619
            'CopyRegistrationDetailsCommandHandler'                               => 'EventEspresso\core\services\commands\registration\CopyRegistrationDetailsCommand',
620
            'CopyRegistrationPaymentsCommandHandler'                              => 'EventEspresso\core\services\commands\registration\CopyRegistrationPaymentsCommand',
621
            'CancelRegistrationAndTicketLineItemCommandHandler'                   => 'EventEspresso\core\services\commands\registration\CancelRegistrationAndTicketLineItemCommandHandler',
622
            'UpdateRegistrationAndTransactionAfterChangeCommandHandler'           => 'EventEspresso\core\services\commands\registration\UpdateRegistrationAndTransactionAfterChangeCommandHandler',
623
            'CreateTicketLineItemCommandHandler'                                  => 'EventEspresso\core\services\commands\ticket\CreateTicketLineItemCommand',
624
            'TableManager'                                                        => 'EventEspresso\core\services\database\TableManager',
625
            'TableAnalysis'                                                       => 'EventEspresso\core\services\database\TableAnalysis',
626
            'EspressoShortcode'                                                   => 'EventEspresso\core\services\shortcodes\EspressoShortcode',
627
            'ShortcodeInterface'                                                  => 'EventEspresso\core\services\shortcodes\ShortcodeInterface',
628
            'EventEspresso\core\services\shortcodes\ShortcodeInterface'           => 'EventEspresso\core\services\shortcodes\EspressoShortcode',
629
            'EventEspresso\core\services\cache\CacheStorageInterface'             => 'EventEspresso\core\services\cache\TransientCacheStorage',
630
            'LoaderInterface'                                                     => 'EventEspresso\core\services\loaders\LoaderInterface',
631
            'EventEspresso\core\services\loaders\LoaderInterface'                 => 'EventEspresso\core\services\loaders\Loader',
632
            'CommandFactoryInterface'                                             => 'EventEspresso\core\services\commands\CommandFactoryInterface',
633
            'EventEspresso\core\services\commands\CommandFactoryInterface'        => 'EventEspresso\core\services\commands\CommandFactory',
634
        );
635
    }
636
637
638
639
    /**
640
     * This is used to reset the internal map and class_loaders to their original default state at the beginning of the
641
     * request Primarily used by unit tests.
642
     */
643
    public function reset()
644
    {
645
        $this->_register_core_class_loaders();
646
        $this->_register_core_dependencies();
647
    }
648
649
650
}
651
// End of file EE_Dependency_Map.core.php
652
// Location: /EE_Dependency_Map.core.php