Completed
Branch BUG-caching-loader-identifier (bfbdc4)
by
unknown
27:45 queued 14:30
created
core/helpers/EEH_Debug_Tools.helper.php 3 patches
Doc Comments   +8 added lines, -5 removed lines patch added patch discarded remove patch
@@ -375,11 +375,11 @@  discard block
 block discarded – undo
375 375
 
376 376
 
377 377
     /**
378
-     * @param mixed      $var
378
+     * @param string      $var
379 379
      * @param string     $var_name
380 380
      * @param string     $file
381 381
      * @param int|string $line
382
-     * @param int|string $heading_tag
382
+     * @param integer $heading_tag
383 383
      * @param bool       $die
384 384
      * @param string     $margin
385 385
      */
@@ -411,6 +411,9 @@  discard block
 block discarded – undo
411 411
     }
412 412
 
413 413
 
414
+    /**
415
+     * @param integer $heading_tag
416
+     */
414 417
     protected static function headingTag($heading_tag)
415 418
     {
416 419
         $heading_tag = absint($heading_tag);
@@ -532,8 +535,8 @@  discard block
 block discarded – undo
532 535
      * @param mixed      $var
533 536
      * @param string     $var_name
534 537
      * @param string     $file
535
-     * @param int|string $line
536
-     * @param int|string $heading_tag
538
+     * @param integer $line
539
+     * @param integer $heading_tag
537 540
      * @param bool       $die
538 541
      */
539 542
     public static function printr(
@@ -596,7 +599,7 @@  discard block
 block discarded – undo
596 599
 
597 600
     /**
598 601
      * @deprecated 4.9.39.rc.034
599
-     * @param null $timer_name
602
+     * @param string $timer_name
600 603
      */
601 604
     public function start_timer($timer_name = null)
602 605
     {
Please login to merge, or discard this patch.
Indentation   +674 added lines, -674 removed lines patch added patch discarded remove patch
@@ -11,665 +11,665 @@  discard block
 block discarded – undo
11 11
 class EEH_Debug_Tools
12 12
 {
13 13
 
14
-    /**
15
-     *    instance of the EEH_Autoloader object
16
-     *
17
-     * @var    $_instance
18
-     * @access    private
19
-     */
20
-    private static $_instance;
21
-
22
-    /**
23
-     * @var array
24
-     */
25
-    protected $_memory_usage_points = array();
26
-
27
-
28
-
29
-    /**
30
-     * @singleton method used to instantiate class object
31
-     * @access    public
32
-     * @return EEH_Debug_Tools
33
-     */
34
-    public static function instance()
35
-    {
36
-        // check if class object is instantiated, and instantiated properly
37
-        if (! self::$_instance instanceof EEH_Debug_Tools) {
38
-            self::$_instance = new self();
39
-        }
40
-        return self::$_instance;
41
-    }
42
-
43
-
44
-
45
-    /**
46
-     * private class constructor
47
-     */
48
-    private function __construct()
49
-    {
50
-        // load Kint PHP debugging library
51
-        if (! class_exists('Kint') && file_exists(EE_PLUGIN_DIR_PATH . 'tests' . DS . 'kint' . DS . 'Kint.class.php')) {
52
-            // despite EE4 having a check for an existing copy of the Kint debugging class,
53
-            // if another plugin was loaded AFTER EE4 and they did NOT perform a similar check,
54
-            // then hilarity would ensue as PHP throws a "Cannot redeclare class Kint" error
55
-            // so we've moved it to our test folder so that it is not included with production releases
56
-            // plz use https://wordpress.org/plugins/kint-debugger/  if testing production versions of EE
57
-            require_once(EE_PLUGIN_DIR_PATH . 'tests' . DS . 'kint' . DS . 'Kint.class.php');
58
-        }
59
-        // if ( ! defined('DOING_AJAX') || $_REQUEST['noheader'] !== 'true' || ! isset( $_REQUEST['noheader'], $_REQUEST['TB_iframe'] ) ) {
60
-        // add_action( 'shutdown', array($this,'espresso_session_footer_dump') );
61
-        // }
62
-        $plugin = basename(EE_PLUGIN_DIR_PATH);
63
-        add_action("activate_{$plugin}", array('EEH_Debug_Tools', 'ee_plugin_activation_errors'));
64
-        add_action('activated_plugin', array('EEH_Debug_Tools', 'ee_plugin_activation_errors'));
65
-        add_action('shutdown', array('EEH_Debug_Tools', 'show_db_name'));
66
-    }
67
-
68
-
69
-
70
-    /**
71
-     *    show_db_name
72
-     *
73
-     * @return void
74
-     */
75
-    public static function show_db_name()
76
-    {
77
-        if (! defined('DOING_AJAX') && (defined('EE_ERROR_EMAILS') && EE_ERROR_EMAILS)) {
78
-            echo '<p style="font-size:10px;font-weight:normal;color:#E76700;margin: 1em 2em; text-align: right;">DB_NAME: '
79
-                 . DB_NAME
80
-                 . '</p>';
81
-        }
82
-        if (EE_DEBUG) {
83
-            Benchmark::displayResults();
84
-        }
85
-    }
86
-
87
-
88
-
89
-    /**
90
-     *    dump EE_Session object at bottom of page after everything else has happened
91
-     *
92
-     * @return void
93
-     */
94
-    public function espresso_session_footer_dump()
95
-    {
96
-        if ((defined('WP_DEBUG') && WP_DEBUG)
97
-            && ! defined('DOING_AJAX')
98
-            && class_exists('Kint')
99
-            && function_exists('wp_get_current_user')
100
-            && current_user_can('update_core')
101
-            && class_exists('EE_Registry')
102
-        ) {
103
-            Kint::dump(EE_Registry::instance()->SSN->id());
104
-            Kint::dump(EE_Registry::instance()->SSN);
105
-            //          Kint::dump( EE_Registry::instance()->SSN->get_session_data('cart')->get_tickets() );
106
-            $this->espresso_list_hooked_functions();
107
-            Benchmark::displayResults();
108
-        }
109
-    }
110
-
111
-
112
-
113
-    /**
114
-     *    List All Hooked Functions
115
-     *    to list all functions for a specific hook, add ee_list_hooks={hook-name} to URL
116
-     *    http://wp.smashingmagazine.com/2009/08/18/10-useful-wordpress-hook-hacks/
117
-     *
118
-     * @param string $tag
119
-     * @return void
120
-     */
121
-    public function espresso_list_hooked_functions($tag = '')
122
-    {
123
-        global $wp_filter;
124
-        echo '<br/><br/><br/><h3>Hooked Functions</h3>';
125
-        if ($tag) {
126
-            $hook[ $tag ] = $wp_filter[ $tag ];
127
-            if (! is_array($hook[ $tag ])) {
128
-                trigger_error("Nothing found for '$tag' hook", E_USER_WARNING);
129
-                return;
130
-            }
131
-            echo '<h5>For Tag: ' . $tag . '</h5>';
132
-        } else {
133
-            $hook = is_array($wp_filter) ? $wp_filter : array($wp_filter);
134
-            ksort($hook);
135
-        }
136
-        foreach ($hook as $tag_name => $priorities) {
137
-            echo "<br />&gt;&gt;&gt;&gt;&gt;\t<strong>$tag_name</strong><br />";
138
-            ksort($priorities);
139
-            foreach ($priorities as $priority => $function) {
140
-                echo $priority;
141
-                foreach ($function as $name => $properties) {
142
-                    echo "\t$name<br />";
143
-                }
144
-            }
145
-        }
146
-    }
147
-
148
-
149
-
150
-    /**
151
-     *    registered_filter_callbacks
152
-     *
153
-     * @param string $hook_name
154
-     * @return array
155
-     */
156
-    public static function registered_filter_callbacks($hook_name = '')
157
-    {
158
-        $filters = array();
159
-        global $wp_filter;
160
-        if (isset($wp_filter[ $hook_name ])) {
161
-            $filters[ $hook_name ] = array();
162
-            foreach ($wp_filter[ $hook_name ] as $priority => $callbacks) {
163
-                $filters[ $hook_name ][ $priority ] = array();
164
-                foreach ($callbacks as $callback) {
165
-                    $filters[ $hook_name ][ $priority ][] = $callback['function'];
166
-                }
167
-            }
168
-        }
169
-        return $filters;
170
-    }
171
-
172
-
173
-
174
-    /**
175
-     *    captures plugin activation errors for debugging
176
-     *
177
-     * @return void
178
-     * @throws EE_Error
179
-     */
180
-    public static function ee_plugin_activation_errors()
181
-    {
182
-        if (WP_DEBUG) {
183
-            $activation_errors = ob_get_contents();
184
-            if (! empty($activation_errors)) {
185
-                $activation_errors = date('Y-m-d H:i:s') . "\n" . $activation_errors;
186
-            }
187
-            espresso_load_required('EEH_File', EE_HELPERS . 'EEH_File.helper.php');
188
-            if (class_exists('EEH_File')) {
189
-                try {
190
-                    EEH_File::ensure_file_exists_and_is_writable(
191
-                        EVENT_ESPRESSO_UPLOAD_DIR . 'logs' . DS . 'espresso_plugin_activation_errors.html'
192
-                    );
193
-                    EEH_File::write_to_file(
194
-                        EVENT_ESPRESSO_UPLOAD_DIR . 'logs' . DS . 'espresso_plugin_activation_errors.html',
195
-                        $activation_errors
196
-                    );
197
-                } catch (EE_Error $e) {
198
-                    EE_Error::add_error(
199
-                        sprintf(
200
-                            __(
201
-                                'The Event Espresso activation errors file could not be setup because: %s',
202
-                                'event_espresso'
203
-                            ),
204
-                            $e->getMessage()
205
-                        ),
206
-                        __FILE__,
207
-                        __FUNCTION__,
208
-                        __LINE__
209
-                    );
210
-                }
211
-            } else {
212
-                // old school attempt
213
-                file_put_contents(
214
-                    EVENT_ESPRESSO_UPLOAD_DIR . 'logs' . DS . 'espresso_plugin_activation_errors.html',
215
-                    $activation_errors
216
-                );
217
-            }
218
-            $activation_errors = get_option('ee_plugin_activation_errors', '') . $activation_errors;
219
-            update_option('ee_plugin_activation_errors', $activation_errors);
220
-        }
221
-    }
222
-
223
-
224
-
225
-    /**
226
-     * This basically mimics the WordPress _doing_it_wrong() function except adds our own messaging etc.
227
-     * Very useful for providing helpful messages to developers when the method of doing something has been deprecated,
228
-     * or we want to make sure they use something the right way.
229
-     *
230
-     * @access public
231
-     * @param string $function      The function that was called
232
-     * @param string $message       A message explaining what has been done incorrectly
233
-     * @param string $version       The version of Event Espresso where the error was added
234
-     * @param string $applies_when  a version string for when you want the doing_it_wrong notice to begin appearing
235
-     *                              for a deprecated function. This allows deprecation to occur during one version,
236
-     *                              but not have any notices appear until a later version. This allows developers
237
-     *                              extra time to update their code before notices appear.
238
-     * @param int    $error_type
239
-     * @uses   trigger_error()
240
-     */
241
-    public function doing_it_wrong(
242
-        $function,
243
-        $message,
244
-        $version,
245
-        $applies_when = '',
246
-        $error_type = null
247
-    ) {
248
-        $applies_when = ! empty($applies_when) ? $applies_when : espresso_version();
249
-        $error_type = $error_type !== null ? $error_type : E_USER_NOTICE;
250
-        // because we swapped the parameter order around for the last two params,
251
-        // let's verify that some third party isn't still passing an error type value for the third param
252
-        if (is_int($applies_when)) {
253
-            $error_type = $applies_when;
254
-            $applies_when = espresso_version();
255
-        }
256
-        // if not displaying notices yet, then just leave
257
-        if (version_compare(espresso_version(), $applies_when, '<')) {
258
-            return;
259
-        }
260
-        do_action('AHEE__EEH_Debug_Tools__doing_it_wrong_run', $function, $message, $version);
261
-        $version = $version === null
262
-            ? ''
263
-            : sprintf(
264
-                __('(This message was added in version %s of Event Espresso)', 'event_espresso'),
265
-                $version
266
-            );
267
-        $error_message = sprintf(
268
-            esc_html__('%1$s was called %2$sincorrectly%3$s. %4$s %5$s', 'event_espresso'),
269
-            $function,
270
-            '<strong>',
271
-            '</strong>',
272
-            $message,
273
-            $version
274
-        );
275
-        // don't trigger error if doing ajax,
276
-        // instead we'll add a transient EE_Error notice that in theory should show on the next request.
277
-        if (defined('DOING_AJAX') && DOING_AJAX) {
278
-            $error_message .= ' ' . esc_html__(
279
-                'This is a doing_it_wrong message that was triggered during an ajax request.  The request params on this request were: ',
280
-                'event_espresso'
281
-            );
282
-            $error_message .= '<ul><li>';
283
-            $error_message .= implode('</li><li>', EE_Registry::instance()->REQ->params());
284
-            $error_message .= '</ul>';
285
-            EE_Error::add_error($error_message, 'debug::doing_it_wrong', $function, '42');
286
-            // now we set this on the transient so it shows up on the next request.
287
-            EE_Error::get_notices(false, true);
288
-        } else {
289
-            trigger_error($error_message, $error_type);
290
-        }
291
-    }
292
-
293
-
294
-
295
-
296
-    /**
297
-     * Logger helpers
298
-     */
299
-    /**
300
-     * debug
301
-     *
302
-     * @param string $class
303
-     * @param string $func
304
-     * @param string $line
305
-     * @param array  $info
306
-     * @param bool   $display_request
307
-     * @param string $debug_index
308
-     * @param string $debug_key
309
-     * @throws EE_Error
310
-     * @throws \EventEspresso\core\exceptions\InvalidSessionDataException
311
-     */
312
-    public static function log(
313
-        $class = '',
314
-        $func = '',
315
-        $line = '',
316
-        $info = array(),
317
-        $display_request = false,
318
-        $debug_index = '',
319
-        $debug_key = 'EE_DEBUG_SPCO'
320
-    ) {
321
-        if (WP_DEBUG) {
322
-            $debug_key = $debug_key . '_' . EE_Session::instance()->id();
323
-            $debug_data = get_option($debug_key, array());
324
-            $default_data = array(
325
-                $class => $func . '() : ' . $line,
326
-                'REQ'  => $display_request ? $_REQUEST : '',
327
-            );
328
-            // don't serialize objects
329
-            $info = self::strip_objects($info);
330
-            $index = ! empty($debug_index) ? $debug_index : 0;
331
-            if (! isset($debug_data[ $index ])) {
332
-                $debug_data[ $index ] = array();
333
-            }
334
-            $debug_data[ $index ][ microtime() ] = array_merge($default_data, $info);
335
-            update_option($debug_key, $debug_data);
336
-        }
337
-    }
338
-
339
-
340
-
341
-    /**
342
-     * strip_objects
343
-     *
344
-     * @param array $info
345
-     * @return array
346
-     */
347
-    public static function strip_objects($info = array())
348
-    {
349
-        foreach ($info as $key => $value) {
350
-            if (is_array($value)) {
351
-                $info[ $key ] = self::strip_objects($value);
352
-            } elseif (is_object($value)) {
353
-                $object_class = get_class($value);
354
-                $info[ $object_class ] = array();
355
-                $info[ $object_class ]['ID'] = method_exists($value, 'ID') ? $value->ID() : spl_object_hash($value);
356
-                if (method_exists($value, 'ID')) {
357
-                    $info[ $object_class ]['ID'] = $value->ID();
358
-                }
359
-                if (method_exists($value, 'status')) {
360
-                    $info[ $object_class ]['status'] = $value->status();
361
-                } elseif (method_exists($value, 'status_ID')) {
362
-                    $info[ $object_class ]['status'] = $value->status_ID();
363
-                }
364
-                unset($info[ $key ]);
365
-            }
366
-        }
367
-        return (array) $info;
368
-    }
369
-
370
-
371
-
372
-    /**
373
-     * @param mixed      $var
374
-     * @param string     $var_name
375
-     * @param string     $file
376
-     * @param int|string $line
377
-     * @param int|string $heading_tag
378
-     * @param bool       $die
379
-     * @param string     $margin
380
-     */
381
-    public static function printv(
382
-        $var,
383
-        $var_name = '',
384
-        $file = '',
385
-        $line = '',
386
-        $heading_tag = 5,
387
-        $die = false,
388
-        $margin = ''
389
-    ) {
390
-        $var_name = ! $var_name ? 'string' : $var_name;
391
-        $var_name = ucwords(str_replace('$', '', $var_name));
392
-        $is_method = method_exists($var_name, $var);
393
-        $var_name = ucwords(str_replace('_', ' ', $var_name));
394
-        $heading_tag = EEH_Debug_Tools::headingTag($heading_tag);
395
-        $result = EEH_Debug_Tools::headingSpacer($heading_tag);
396
-        $result .= EEH_Debug_Tools::heading($var_name, $heading_tag, $margin, $line);
397
-        $result .= $is_method
398
-            ? EEH_Debug_Tools::grey_span('::') . EEH_Debug_Tools::orange_span($var . '()')
399
-            : EEH_Debug_Tools::grey_span(' : ') . EEH_Debug_Tools::orange_span($var);
400
-        $result .= EEH_Debug_Tools::file_and_line($file, $line, $heading_tag);
401
-        $result .= EEH_Debug_Tools::headingX($heading_tag);
402
-        if ($die) {
403
-            die($result);
404
-        }
405
-        echo $result;
406
-    }
407
-
408
-
409
-    protected static function headingTag($heading_tag)
410
-    {
411
-        $heading_tag = absint($heading_tag);
412
-        return $heading_tag > 0 && $heading_tag < 7 ? "h{$heading_tag}" : 'h5';
413
-    }
414
-
415
-
416
-    protected static function headingSpacer($heading_tag)
417
-    {
418
-        return EEH_Debug_Tools::plainOutput() && ($heading_tag === 'h1' || $heading_tag === 'h2')
419
-            ? "\n"
420
-            : '';
421
-    }
422
-
423
-
424
-    protected static function plainOutput()
425
-    {
426
-        return defined('EE_TESTS_DIR') || (defined('DOING_AJAX') && DOING_AJAX);
427
-    }
428
-
429
-
430
-    /**
431
-     * @param string $var_name
432
-     * @param string $heading_tag
433
-     * @param string $margin
434
-     * @param int    $line
435
-     * @return string
436
-     */
437
-    protected static function heading($var_name = '', $heading_tag = 'h5', $margin = '', $line = 0)
438
-    {
439
-        if (EEH_Debug_Tools::plainOutput()) {
440
-            $heading = '';
441
-            if ($heading_tag === 'h1' || $heading_tag === 'h2') {
442
-                $heading .= "\n";
443
-            }
444
-            $heading .= "\n{$line}) {$var_name}";
445
-            return $heading;
446
-        }
447
-        $margin = "25px 0 0 {$margin}";
448
-        return '<' . $heading_tag . ' style="color:#2EA2CC; margin:' . $margin . ';"><b>' . $var_name . '</b>';
449
-    }
450
-
451
-
452
-
453
-    /**
454
-     * @param string $heading_tag
455
-     * @return string
456
-     */
457
-    protected static function headingX($heading_tag = 'h5')
458
-    {
459
-        if (EEH_Debug_Tools::plainOutput()) {
460
-            return '';
461
-        }
462
-        return '</' . $heading_tag . '>';
463
-    }
464
-
465
-
466
-
467
-    /**
468
-     * @param string $content
469
-     * @return string
470
-     */
471
-    protected static function grey_span($content = '')
472
-    {
473
-        if (EEH_Debug_Tools::plainOutput()) {
474
-            return $content;
475
-        }
476
-        return '<span style="color:#999">' . $content . '</span>';
477
-    }
478
-
479
-
480
-
481
-    /**
482
-     * @param string $file
483
-     * @param int    $line
484
-     * @return string
485
-     */
486
-    protected static function file_and_line($file, $line, $heading_tag)
487
-    {
488
-        if ($file === '' || $line === '') {
489
-            return '';
490
-        }
491
-        $file = str_replace(EE_PLUGIN_DIR_PATH, '/', $file);
492
-        if (EEH_Debug_Tools::plainOutput()) {
493
-            if ($heading_tag === 'h1' || $heading_tag === 'h2') {
494
-                return " ({$file})";
495
-            }
496
-            return '';
497
-        }
498
-        return '<br /><span style="font-size:9px;font-weight:normal;color:#666;line-height: 12px;">'
499
-               . $file
500
-               . '<br />line no: '
501
-               . $line
502
-               . '</span>';
503
-    }
504
-
505
-
506
-
507
-    /**
508
-     * @param string $content
509
-     * @return string
510
-     */
511
-    protected static function orange_span($content = '')
512
-    {
513
-        if (EEH_Debug_Tools::plainOutput()) {
514
-            return $content;
515
-        }
516
-        return '<span style="color:#E76700">' . $content . '</span>';
517
-    }
518
-
519
-
520
-
521
-    /**
522
-     * @param mixed $var
523
-     * @return string
524
-     */
525
-    protected static function pre_span($var)
526
-    {
527
-        ob_start();
528
-        var_dump($var);
529
-        $var = ob_get_clean();
530
-        if (EEH_Debug_Tools::plainOutput()) {
531
-            return $var;
532
-        }
533
-        return '<pre style="color:#999; padding:1em; background: #fff">' . $var . '</pre>';
534
-    }
535
-
536
-
537
-
538
-    /**
539
-     * @param mixed      $var
540
-     * @param string     $var_name
541
-     * @param string     $file
542
-     * @param int|string $line
543
-     * @param int|string $heading_tag
544
-     * @param bool       $die
545
-     */
546
-    public static function printr(
547
-        $var,
548
-        $var_name = '',
549
-        $file = '',
550
-        $line = '',
551
-        $heading_tag = 5,
552
-        $die = false
553
-    ) {
554
-        // return;
555
-        $file = str_replace(rtrim(ABSPATH, '\\/'), '', $file);
556
-        $margin = is_admin() ? ' 180px' : '0';
557
-        // $print_r = false;
558
-        if (is_string($var)) {
559
-            EEH_Debug_Tools::printv($var, $var_name, $file, $line, $heading_tag, $die, $margin);
560
-            return;
561
-        }
562
-        if (is_object($var)) {
563
-            $var_name = ! $var_name ? 'object' : $var_name;
564
-            // $print_r = true;
565
-        } elseif (is_array($var)) {
566
-            $var_name = ! $var_name ? 'array' : $var_name;
567
-            // $print_r = true;
568
-        } elseif (is_numeric($var)) {
569
-            $var_name = ! $var_name ? 'numeric' : $var_name;
570
-        } elseif ($var === null) {
571
-            $var_name = ! $var_name ? 'null' : $var_name;
572
-        }
573
-        $var_name = ucwords(str_replace(array('$', '_'), array('', ' '), $var_name));
574
-        $heading_tag = EEH_Debug_Tools::headingTag($heading_tag);
575
-        $result = EEH_Debug_Tools::headingSpacer($heading_tag);
576
-        $result .= EEH_Debug_Tools::heading($var_name, $heading_tag, $margin, $line);
577
-        $result .= EEH_Debug_Tools::grey_span(' : ') . EEH_Debug_Tools::orange_span(
578
-            EEH_Debug_Tools::pre_span($var)
579
-        );
580
-        $result .= EEH_Debug_Tools::file_and_line($file, $line, $heading_tag);
581
-        $result .= EEH_Debug_Tools::headingX($heading_tag);
582
-        if ($die) {
583
-            die($result);
584
-        }
585
-        echo $result;
586
-    }
587
-
588
-
589
-
590
-    /******************** deprecated ********************/
591
-
592
-
593
-
594
-    /**
595
-     * @deprecated 4.9.39.rc.034
596
-     */
597
-    public function reset_times()
598
-    {
599
-        Benchmark::resetTimes();
600
-    }
601
-
602
-
603
-
604
-    /**
605
-     * @deprecated 4.9.39.rc.034
606
-     * @param null $timer_name
607
-     */
608
-    public function start_timer($timer_name = null)
609
-    {
610
-        Benchmark::startTimer($timer_name);
611
-    }
612
-
613
-
614
-
615
-    /**
616
-     * @deprecated 4.9.39.rc.034
617
-     * @param string $timer_name
618
-     */
619
-    public function stop_timer($timer_name = '')
620
-    {
621
-        Benchmark::stopTimer($timer_name);
622
-    }
623
-
624
-
625
-
626
-    /**
627
-     * @deprecated 4.9.39.rc.034
628
-     * @param string  $label      The label to show for this time eg "Start of calling Some_Class::some_function"
629
-     * @param boolean $output_now whether to echo now, or wait until EEH_Debug_Tools::show_times() is called
630
-     * @return void
631
-     */
632
-    public function measure_memory($label, $output_now = false)
633
-    {
634
-        Benchmark::measureMemory($label, $output_now);
635
-    }
636
-
637
-
638
-
639
-    /**
640
-     * @deprecated 4.9.39.rc.034
641
-     * @param int $size
642
-     * @return string
643
-     */
644
-    public function convert($size)
645
-    {
646
-        return Benchmark::convert($size);
647
-    }
648
-
649
-
650
-
651
-    /**
652
-     * @deprecated 4.9.39.rc.034
653
-     * @param bool $output_now
654
-     * @return string
655
-     */
656
-    public function show_times($output_now = true)
657
-    {
658
-        return Benchmark::displayResults($output_now);
659
-    }
660
-
661
-
662
-
663
-    /**
664
-     * @deprecated 4.9.39.rc.034
665
-     * @param string $timer_name
666
-     * @param float  $total_time
667
-     * @return string
668
-     */
669
-    public function format_time($timer_name, $total_time)
670
-    {
671
-        return Benchmark::formatTime($timer_name, $total_time);
672
-    }
14
+	/**
15
+	 *    instance of the EEH_Autoloader object
16
+	 *
17
+	 * @var    $_instance
18
+	 * @access    private
19
+	 */
20
+	private static $_instance;
21
+
22
+	/**
23
+	 * @var array
24
+	 */
25
+	protected $_memory_usage_points = array();
26
+
27
+
28
+
29
+	/**
30
+	 * @singleton method used to instantiate class object
31
+	 * @access    public
32
+	 * @return EEH_Debug_Tools
33
+	 */
34
+	public static function instance()
35
+	{
36
+		// check if class object is instantiated, and instantiated properly
37
+		if (! self::$_instance instanceof EEH_Debug_Tools) {
38
+			self::$_instance = new self();
39
+		}
40
+		return self::$_instance;
41
+	}
42
+
43
+
44
+
45
+	/**
46
+	 * private class constructor
47
+	 */
48
+	private function __construct()
49
+	{
50
+		// load Kint PHP debugging library
51
+		if (! class_exists('Kint') && file_exists(EE_PLUGIN_DIR_PATH . 'tests' . DS . 'kint' . DS . 'Kint.class.php')) {
52
+			// despite EE4 having a check for an existing copy of the Kint debugging class,
53
+			// if another plugin was loaded AFTER EE4 and they did NOT perform a similar check,
54
+			// then hilarity would ensue as PHP throws a "Cannot redeclare class Kint" error
55
+			// so we've moved it to our test folder so that it is not included with production releases
56
+			// plz use https://wordpress.org/plugins/kint-debugger/  if testing production versions of EE
57
+			require_once(EE_PLUGIN_DIR_PATH . 'tests' . DS . 'kint' . DS . 'Kint.class.php');
58
+		}
59
+		// if ( ! defined('DOING_AJAX') || $_REQUEST['noheader'] !== 'true' || ! isset( $_REQUEST['noheader'], $_REQUEST['TB_iframe'] ) ) {
60
+		// add_action( 'shutdown', array($this,'espresso_session_footer_dump') );
61
+		// }
62
+		$plugin = basename(EE_PLUGIN_DIR_PATH);
63
+		add_action("activate_{$plugin}", array('EEH_Debug_Tools', 'ee_plugin_activation_errors'));
64
+		add_action('activated_plugin', array('EEH_Debug_Tools', 'ee_plugin_activation_errors'));
65
+		add_action('shutdown', array('EEH_Debug_Tools', 'show_db_name'));
66
+	}
67
+
68
+
69
+
70
+	/**
71
+	 *    show_db_name
72
+	 *
73
+	 * @return void
74
+	 */
75
+	public static function show_db_name()
76
+	{
77
+		if (! defined('DOING_AJAX') && (defined('EE_ERROR_EMAILS') && EE_ERROR_EMAILS)) {
78
+			echo '<p style="font-size:10px;font-weight:normal;color:#E76700;margin: 1em 2em; text-align: right;">DB_NAME: '
79
+				 . DB_NAME
80
+				 . '</p>';
81
+		}
82
+		if (EE_DEBUG) {
83
+			Benchmark::displayResults();
84
+		}
85
+	}
86
+
87
+
88
+
89
+	/**
90
+	 *    dump EE_Session object at bottom of page after everything else has happened
91
+	 *
92
+	 * @return void
93
+	 */
94
+	public function espresso_session_footer_dump()
95
+	{
96
+		if ((defined('WP_DEBUG') && WP_DEBUG)
97
+			&& ! defined('DOING_AJAX')
98
+			&& class_exists('Kint')
99
+			&& function_exists('wp_get_current_user')
100
+			&& current_user_can('update_core')
101
+			&& class_exists('EE_Registry')
102
+		) {
103
+			Kint::dump(EE_Registry::instance()->SSN->id());
104
+			Kint::dump(EE_Registry::instance()->SSN);
105
+			//          Kint::dump( EE_Registry::instance()->SSN->get_session_data('cart')->get_tickets() );
106
+			$this->espresso_list_hooked_functions();
107
+			Benchmark::displayResults();
108
+		}
109
+	}
110
+
111
+
112
+
113
+	/**
114
+	 *    List All Hooked Functions
115
+	 *    to list all functions for a specific hook, add ee_list_hooks={hook-name} to URL
116
+	 *    http://wp.smashingmagazine.com/2009/08/18/10-useful-wordpress-hook-hacks/
117
+	 *
118
+	 * @param string $tag
119
+	 * @return void
120
+	 */
121
+	public function espresso_list_hooked_functions($tag = '')
122
+	{
123
+		global $wp_filter;
124
+		echo '<br/><br/><br/><h3>Hooked Functions</h3>';
125
+		if ($tag) {
126
+			$hook[ $tag ] = $wp_filter[ $tag ];
127
+			if (! is_array($hook[ $tag ])) {
128
+				trigger_error("Nothing found for '$tag' hook", E_USER_WARNING);
129
+				return;
130
+			}
131
+			echo '<h5>For Tag: ' . $tag . '</h5>';
132
+		} else {
133
+			$hook = is_array($wp_filter) ? $wp_filter : array($wp_filter);
134
+			ksort($hook);
135
+		}
136
+		foreach ($hook as $tag_name => $priorities) {
137
+			echo "<br />&gt;&gt;&gt;&gt;&gt;\t<strong>$tag_name</strong><br />";
138
+			ksort($priorities);
139
+			foreach ($priorities as $priority => $function) {
140
+				echo $priority;
141
+				foreach ($function as $name => $properties) {
142
+					echo "\t$name<br />";
143
+				}
144
+			}
145
+		}
146
+	}
147
+
148
+
149
+
150
+	/**
151
+	 *    registered_filter_callbacks
152
+	 *
153
+	 * @param string $hook_name
154
+	 * @return array
155
+	 */
156
+	public static function registered_filter_callbacks($hook_name = '')
157
+	{
158
+		$filters = array();
159
+		global $wp_filter;
160
+		if (isset($wp_filter[ $hook_name ])) {
161
+			$filters[ $hook_name ] = array();
162
+			foreach ($wp_filter[ $hook_name ] as $priority => $callbacks) {
163
+				$filters[ $hook_name ][ $priority ] = array();
164
+				foreach ($callbacks as $callback) {
165
+					$filters[ $hook_name ][ $priority ][] = $callback['function'];
166
+				}
167
+			}
168
+		}
169
+		return $filters;
170
+	}
171
+
172
+
173
+
174
+	/**
175
+	 *    captures plugin activation errors for debugging
176
+	 *
177
+	 * @return void
178
+	 * @throws EE_Error
179
+	 */
180
+	public static function ee_plugin_activation_errors()
181
+	{
182
+		if (WP_DEBUG) {
183
+			$activation_errors = ob_get_contents();
184
+			if (! empty($activation_errors)) {
185
+				$activation_errors = date('Y-m-d H:i:s') . "\n" . $activation_errors;
186
+			}
187
+			espresso_load_required('EEH_File', EE_HELPERS . 'EEH_File.helper.php');
188
+			if (class_exists('EEH_File')) {
189
+				try {
190
+					EEH_File::ensure_file_exists_and_is_writable(
191
+						EVENT_ESPRESSO_UPLOAD_DIR . 'logs' . DS . 'espresso_plugin_activation_errors.html'
192
+					);
193
+					EEH_File::write_to_file(
194
+						EVENT_ESPRESSO_UPLOAD_DIR . 'logs' . DS . 'espresso_plugin_activation_errors.html',
195
+						$activation_errors
196
+					);
197
+				} catch (EE_Error $e) {
198
+					EE_Error::add_error(
199
+						sprintf(
200
+							__(
201
+								'The Event Espresso activation errors file could not be setup because: %s',
202
+								'event_espresso'
203
+							),
204
+							$e->getMessage()
205
+						),
206
+						__FILE__,
207
+						__FUNCTION__,
208
+						__LINE__
209
+					);
210
+				}
211
+			} else {
212
+				// old school attempt
213
+				file_put_contents(
214
+					EVENT_ESPRESSO_UPLOAD_DIR . 'logs' . DS . 'espresso_plugin_activation_errors.html',
215
+					$activation_errors
216
+				);
217
+			}
218
+			$activation_errors = get_option('ee_plugin_activation_errors', '') . $activation_errors;
219
+			update_option('ee_plugin_activation_errors', $activation_errors);
220
+		}
221
+	}
222
+
223
+
224
+
225
+	/**
226
+	 * This basically mimics the WordPress _doing_it_wrong() function except adds our own messaging etc.
227
+	 * Very useful for providing helpful messages to developers when the method of doing something has been deprecated,
228
+	 * or we want to make sure they use something the right way.
229
+	 *
230
+	 * @access public
231
+	 * @param string $function      The function that was called
232
+	 * @param string $message       A message explaining what has been done incorrectly
233
+	 * @param string $version       The version of Event Espresso where the error was added
234
+	 * @param string $applies_when  a version string for when you want the doing_it_wrong notice to begin appearing
235
+	 *                              for a deprecated function. This allows deprecation to occur during one version,
236
+	 *                              but not have any notices appear until a later version. This allows developers
237
+	 *                              extra time to update their code before notices appear.
238
+	 * @param int    $error_type
239
+	 * @uses   trigger_error()
240
+	 */
241
+	public function doing_it_wrong(
242
+		$function,
243
+		$message,
244
+		$version,
245
+		$applies_when = '',
246
+		$error_type = null
247
+	) {
248
+		$applies_when = ! empty($applies_when) ? $applies_when : espresso_version();
249
+		$error_type = $error_type !== null ? $error_type : E_USER_NOTICE;
250
+		// because we swapped the parameter order around for the last two params,
251
+		// let's verify that some third party isn't still passing an error type value for the third param
252
+		if (is_int($applies_when)) {
253
+			$error_type = $applies_when;
254
+			$applies_when = espresso_version();
255
+		}
256
+		// if not displaying notices yet, then just leave
257
+		if (version_compare(espresso_version(), $applies_when, '<')) {
258
+			return;
259
+		}
260
+		do_action('AHEE__EEH_Debug_Tools__doing_it_wrong_run', $function, $message, $version);
261
+		$version = $version === null
262
+			? ''
263
+			: sprintf(
264
+				__('(This message was added in version %s of Event Espresso)', 'event_espresso'),
265
+				$version
266
+			);
267
+		$error_message = sprintf(
268
+			esc_html__('%1$s was called %2$sincorrectly%3$s. %4$s %5$s', 'event_espresso'),
269
+			$function,
270
+			'<strong>',
271
+			'</strong>',
272
+			$message,
273
+			$version
274
+		);
275
+		// don't trigger error if doing ajax,
276
+		// instead we'll add a transient EE_Error notice that in theory should show on the next request.
277
+		if (defined('DOING_AJAX') && DOING_AJAX) {
278
+			$error_message .= ' ' . esc_html__(
279
+				'This is a doing_it_wrong message that was triggered during an ajax request.  The request params on this request were: ',
280
+				'event_espresso'
281
+			);
282
+			$error_message .= '<ul><li>';
283
+			$error_message .= implode('</li><li>', EE_Registry::instance()->REQ->params());
284
+			$error_message .= '</ul>';
285
+			EE_Error::add_error($error_message, 'debug::doing_it_wrong', $function, '42');
286
+			// now we set this on the transient so it shows up on the next request.
287
+			EE_Error::get_notices(false, true);
288
+		} else {
289
+			trigger_error($error_message, $error_type);
290
+		}
291
+	}
292
+
293
+
294
+
295
+
296
+	/**
297
+	 * Logger helpers
298
+	 */
299
+	/**
300
+	 * debug
301
+	 *
302
+	 * @param string $class
303
+	 * @param string $func
304
+	 * @param string $line
305
+	 * @param array  $info
306
+	 * @param bool   $display_request
307
+	 * @param string $debug_index
308
+	 * @param string $debug_key
309
+	 * @throws EE_Error
310
+	 * @throws \EventEspresso\core\exceptions\InvalidSessionDataException
311
+	 */
312
+	public static function log(
313
+		$class = '',
314
+		$func = '',
315
+		$line = '',
316
+		$info = array(),
317
+		$display_request = false,
318
+		$debug_index = '',
319
+		$debug_key = 'EE_DEBUG_SPCO'
320
+	) {
321
+		if (WP_DEBUG) {
322
+			$debug_key = $debug_key . '_' . EE_Session::instance()->id();
323
+			$debug_data = get_option($debug_key, array());
324
+			$default_data = array(
325
+				$class => $func . '() : ' . $line,
326
+				'REQ'  => $display_request ? $_REQUEST : '',
327
+			);
328
+			// don't serialize objects
329
+			$info = self::strip_objects($info);
330
+			$index = ! empty($debug_index) ? $debug_index : 0;
331
+			if (! isset($debug_data[ $index ])) {
332
+				$debug_data[ $index ] = array();
333
+			}
334
+			$debug_data[ $index ][ microtime() ] = array_merge($default_data, $info);
335
+			update_option($debug_key, $debug_data);
336
+		}
337
+	}
338
+
339
+
340
+
341
+	/**
342
+	 * strip_objects
343
+	 *
344
+	 * @param array $info
345
+	 * @return array
346
+	 */
347
+	public static function strip_objects($info = array())
348
+	{
349
+		foreach ($info as $key => $value) {
350
+			if (is_array($value)) {
351
+				$info[ $key ] = self::strip_objects($value);
352
+			} elseif (is_object($value)) {
353
+				$object_class = get_class($value);
354
+				$info[ $object_class ] = array();
355
+				$info[ $object_class ]['ID'] = method_exists($value, 'ID') ? $value->ID() : spl_object_hash($value);
356
+				if (method_exists($value, 'ID')) {
357
+					$info[ $object_class ]['ID'] = $value->ID();
358
+				}
359
+				if (method_exists($value, 'status')) {
360
+					$info[ $object_class ]['status'] = $value->status();
361
+				} elseif (method_exists($value, 'status_ID')) {
362
+					$info[ $object_class ]['status'] = $value->status_ID();
363
+				}
364
+				unset($info[ $key ]);
365
+			}
366
+		}
367
+		return (array) $info;
368
+	}
369
+
370
+
371
+
372
+	/**
373
+	 * @param mixed      $var
374
+	 * @param string     $var_name
375
+	 * @param string     $file
376
+	 * @param int|string $line
377
+	 * @param int|string $heading_tag
378
+	 * @param bool       $die
379
+	 * @param string     $margin
380
+	 */
381
+	public static function printv(
382
+		$var,
383
+		$var_name = '',
384
+		$file = '',
385
+		$line = '',
386
+		$heading_tag = 5,
387
+		$die = false,
388
+		$margin = ''
389
+	) {
390
+		$var_name = ! $var_name ? 'string' : $var_name;
391
+		$var_name = ucwords(str_replace('$', '', $var_name));
392
+		$is_method = method_exists($var_name, $var);
393
+		$var_name = ucwords(str_replace('_', ' ', $var_name));
394
+		$heading_tag = EEH_Debug_Tools::headingTag($heading_tag);
395
+		$result = EEH_Debug_Tools::headingSpacer($heading_tag);
396
+		$result .= EEH_Debug_Tools::heading($var_name, $heading_tag, $margin, $line);
397
+		$result .= $is_method
398
+			? EEH_Debug_Tools::grey_span('::') . EEH_Debug_Tools::orange_span($var . '()')
399
+			: EEH_Debug_Tools::grey_span(' : ') . EEH_Debug_Tools::orange_span($var);
400
+		$result .= EEH_Debug_Tools::file_and_line($file, $line, $heading_tag);
401
+		$result .= EEH_Debug_Tools::headingX($heading_tag);
402
+		if ($die) {
403
+			die($result);
404
+		}
405
+		echo $result;
406
+	}
407
+
408
+
409
+	protected static function headingTag($heading_tag)
410
+	{
411
+		$heading_tag = absint($heading_tag);
412
+		return $heading_tag > 0 && $heading_tag < 7 ? "h{$heading_tag}" : 'h5';
413
+	}
414
+
415
+
416
+	protected static function headingSpacer($heading_tag)
417
+	{
418
+		return EEH_Debug_Tools::plainOutput() && ($heading_tag === 'h1' || $heading_tag === 'h2')
419
+			? "\n"
420
+			: '';
421
+	}
422
+
423
+
424
+	protected static function plainOutput()
425
+	{
426
+		return defined('EE_TESTS_DIR') || (defined('DOING_AJAX') && DOING_AJAX);
427
+	}
428
+
429
+
430
+	/**
431
+	 * @param string $var_name
432
+	 * @param string $heading_tag
433
+	 * @param string $margin
434
+	 * @param int    $line
435
+	 * @return string
436
+	 */
437
+	protected static function heading($var_name = '', $heading_tag = 'h5', $margin = '', $line = 0)
438
+	{
439
+		if (EEH_Debug_Tools::plainOutput()) {
440
+			$heading = '';
441
+			if ($heading_tag === 'h1' || $heading_tag === 'h2') {
442
+				$heading .= "\n";
443
+			}
444
+			$heading .= "\n{$line}) {$var_name}";
445
+			return $heading;
446
+		}
447
+		$margin = "25px 0 0 {$margin}";
448
+		return '<' . $heading_tag . ' style="color:#2EA2CC; margin:' . $margin . ';"><b>' . $var_name . '</b>';
449
+	}
450
+
451
+
452
+
453
+	/**
454
+	 * @param string $heading_tag
455
+	 * @return string
456
+	 */
457
+	protected static function headingX($heading_tag = 'h5')
458
+	{
459
+		if (EEH_Debug_Tools::plainOutput()) {
460
+			return '';
461
+		}
462
+		return '</' . $heading_tag . '>';
463
+	}
464
+
465
+
466
+
467
+	/**
468
+	 * @param string $content
469
+	 * @return string
470
+	 */
471
+	protected static function grey_span($content = '')
472
+	{
473
+		if (EEH_Debug_Tools::plainOutput()) {
474
+			return $content;
475
+		}
476
+		return '<span style="color:#999">' . $content . '</span>';
477
+	}
478
+
479
+
480
+
481
+	/**
482
+	 * @param string $file
483
+	 * @param int    $line
484
+	 * @return string
485
+	 */
486
+	protected static function file_and_line($file, $line, $heading_tag)
487
+	{
488
+		if ($file === '' || $line === '') {
489
+			return '';
490
+		}
491
+		$file = str_replace(EE_PLUGIN_DIR_PATH, '/', $file);
492
+		if (EEH_Debug_Tools::plainOutput()) {
493
+			if ($heading_tag === 'h1' || $heading_tag === 'h2') {
494
+				return " ({$file})";
495
+			}
496
+			return '';
497
+		}
498
+		return '<br /><span style="font-size:9px;font-weight:normal;color:#666;line-height: 12px;">'
499
+			   . $file
500
+			   . '<br />line no: '
501
+			   . $line
502
+			   . '</span>';
503
+	}
504
+
505
+
506
+
507
+	/**
508
+	 * @param string $content
509
+	 * @return string
510
+	 */
511
+	protected static function orange_span($content = '')
512
+	{
513
+		if (EEH_Debug_Tools::plainOutput()) {
514
+			return $content;
515
+		}
516
+		return '<span style="color:#E76700">' . $content . '</span>';
517
+	}
518
+
519
+
520
+
521
+	/**
522
+	 * @param mixed $var
523
+	 * @return string
524
+	 */
525
+	protected static function pre_span($var)
526
+	{
527
+		ob_start();
528
+		var_dump($var);
529
+		$var = ob_get_clean();
530
+		if (EEH_Debug_Tools::plainOutput()) {
531
+			return $var;
532
+		}
533
+		return '<pre style="color:#999; padding:1em; background: #fff">' . $var . '</pre>';
534
+	}
535
+
536
+
537
+
538
+	/**
539
+	 * @param mixed      $var
540
+	 * @param string     $var_name
541
+	 * @param string     $file
542
+	 * @param int|string $line
543
+	 * @param int|string $heading_tag
544
+	 * @param bool       $die
545
+	 */
546
+	public static function printr(
547
+		$var,
548
+		$var_name = '',
549
+		$file = '',
550
+		$line = '',
551
+		$heading_tag = 5,
552
+		$die = false
553
+	) {
554
+		// return;
555
+		$file = str_replace(rtrim(ABSPATH, '\\/'), '', $file);
556
+		$margin = is_admin() ? ' 180px' : '0';
557
+		// $print_r = false;
558
+		if (is_string($var)) {
559
+			EEH_Debug_Tools::printv($var, $var_name, $file, $line, $heading_tag, $die, $margin);
560
+			return;
561
+		}
562
+		if (is_object($var)) {
563
+			$var_name = ! $var_name ? 'object' : $var_name;
564
+			// $print_r = true;
565
+		} elseif (is_array($var)) {
566
+			$var_name = ! $var_name ? 'array' : $var_name;
567
+			// $print_r = true;
568
+		} elseif (is_numeric($var)) {
569
+			$var_name = ! $var_name ? 'numeric' : $var_name;
570
+		} elseif ($var === null) {
571
+			$var_name = ! $var_name ? 'null' : $var_name;
572
+		}
573
+		$var_name = ucwords(str_replace(array('$', '_'), array('', ' '), $var_name));
574
+		$heading_tag = EEH_Debug_Tools::headingTag($heading_tag);
575
+		$result = EEH_Debug_Tools::headingSpacer($heading_tag);
576
+		$result .= EEH_Debug_Tools::heading($var_name, $heading_tag, $margin, $line);
577
+		$result .= EEH_Debug_Tools::grey_span(' : ') . EEH_Debug_Tools::orange_span(
578
+			EEH_Debug_Tools::pre_span($var)
579
+		);
580
+		$result .= EEH_Debug_Tools::file_and_line($file, $line, $heading_tag);
581
+		$result .= EEH_Debug_Tools::headingX($heading_tag);
582
+		if ($die) {
583
+			die($result);
584
+		}
585
+		echo $result;
586
+	}
587
+
588
+
589
+
590
+	/******************** deprecated ********************/
591
+
592
+
593
+
594
+	/**
595
+	 * @deprecated 4.9.39.rc.034
596
+	 */
597
+	public function reset_times()
598
+	{
599
+		Benchmark::resetTimes();
600
+	}
601
+
602
+
603
+
604
+	/**
605
+	 * @deprecated 4.9.39.rc.034
606
+	 * @param null $timer_name
607
+	 */
608
+	public function start_timer($timer_name = null)
609
+	{
610
+		Benchmark::startTimer($timer_name);
611
+	}
612
+
613
+
614
+
615
+	/**
616
+	 * @deprecated 4.9.39.rc.034
617
+	 * @param string $timer_name
618
+	 */
619
+	public function stop_timer($timer_name = '')
620
+	{
621
+		Benchmark::stopTimer($timer_name);
622
+	}
623
+
624
+
625
+
626
+	/**
627
+	 * @deprecated 4.9.39.rc.034
628
+	 * @param string  $label      The label to show for this time eg "Start of calling Some_Class::some_function"
629
+	 * @param boolean $output_now whether to echo now, or wait until EEH_Debug_Tools::show_times() is called
630
+	 * @return void
631
+	 */
632
+	public function measure_memory($label, $output_now = false)
633
+	{
634
+		Benchmark::measureMemory($label, $output_now);
635
+	}
636
+
637
+
638
+
639
+	/**
640
+	 * @deprecated 4.9.39.rc.034
641
+	 * @param int $size
642
+	 * @return string
643
+	 */
644
+	public function convert($size)
645
+	{
646
+		return Benchmark::convert($size);
647
+	}
648
+
649
+
650
+
651
+	/**
652
+	 * @deprecated 4.9.39.rc.034
653
+	 * @param bool $output_now
654
+	 * @return string
655
+	 */
656
+	public function show_times($output_now = true)
657
+	{
658
+		return Benchmark::displayResults($output_now);
659
+	}
660
+
661
+
662
+
663
+	/**
664
+	 * @deprecated 4.9.39.rc.034
665
+	 * @param string $timer_name
666
+	 * @param float  $total_time
667
+	 * @return string
668
+	 */
669
+	public function format_time($timer_name, $total_time)
670
+	{
671
+		return Benchmark::formatTime($timer_name, $total_time);
672
+	}
673 673
 }
674 674
 
675 675
 
@@ -679,31 +679,31 @@  discard block
 block discarded – undo
679 679
  * Plugin URI: http://upthemes.com/plugins/kint-debugger/
680 680
  */
681 681
 if (class_exists('Kint') && ! function_exists('dump_wp_query')) {
682
-    function dump_wp_query()
683
-    {
684
-        global $wp_query;
685
-        d($wp_query);
686
-    }
682
+	function dump_wp_query()
683
+	{
684
+		global $wp_query;
685
+		d($wp_query);
686
+	}
687 687
 }
688 688
 /**
689 689
  * borrowed from Kint Debugger
690 690
  * Plugin URI: http://upthemes.com/plugins/kint-debugger/
691 691
  */
692 692
 if (class_exists('Kint') && ! function_exists('dump_wp')) {
693
-    function dump_wp()
694
-    {
695
-        global $wp;
696
-        d($wp);
697
-    }
693
+	function dump_wp()
694
+	{
695
+		global $wp;
696
+		d($wp);
697
+	}
698 698
 }
699 699
 /**
700 700
  * borrowed from Kint Debugger
701 701
  * Plugin URI: http://upthemes.com/plugins/kint-debugger/
702 702
  */
703 703
 if (class_exists('Kint') && ! function_exists('dump_post')) {
704
-    function dump_post()
705
-    {
706
-        global $post;
707
-        d($post);
708
-    }
704
+	function dump_post()
705
+	{
706
+		global $post;
707
+		d($post);
708
+	}
709 709
 }
Please login to merge, or discard this patch.
Spacing   +40 added lines, -40 removed lines patch added patch discarded remove patch
@@ -34,7 +34,7 @@  discard block
 block discarded – undo
34 34
     public static function instance()
35 35
     {
36 36
         // check if class object is instantiated, and instantiated properly
37
-        if (! self::$_instance instanceof EEH_Debug_Tools) {
37
+        if ( ! self::$_instance instanceof EEH_Debug_Tools) {
38 38
             self::$_instance = new self();
39 39
         }
40 40
         return self::$_instance;
@@ -48,13 +48,13 @@  discard block
 block discarded – undo
48 48
     private function __construct()
49 49
     {
50 50
         // load Kint PHP debugging library
51
-        if (! class_exists('Kint') && file_exists(EE_PLUGIN_DIR_PATH . 'tests' . DS . 'kint' . DS . 'Kint.class.php')) {
51
+        if ( ! class_exists('Kint') && file_exists(EE_PLUGIN_DIR_PATH.'tests'.DS.'kint'.DS.'Kint.class.php')) {
52 52
             // despite EE4 having a check for an existing copy of the Kint debugging class,
53 53
             // if another plugin was loaded AFTER EE4 and they did NOT perform a similar check,
54 54
             // then hilarity would ensue as PHP throws a "Cannot redeclare class Kint" error
55 55
             // so we've moved it to our test folder so that it is not included with production releases
56 56
             // plz use https://wordpress.org/plugins/kint-debugger/  if testing production versions of EE
57
-            require_once(EE_PLUGIN_DIR_PATH . 'tests' . DS . 'kint' . DS . 'Kint.class.php');
57
+            require_once(EE_PLUGIN_DIR_PATH.'tests'.DS.'kint'.DS.'Kint.class.php');
58 58
         }
59 59
         // if ( ! defined('DOING_AJAX') || $_REQUEST['noheader'] !== 'true' || ! isset( $_REQUEST['noheader'], $_REQUEST['TB_iframe'] ) ) {
60 60
         // add_action( 'shutdown', array($this,'espresso_session_footer_dump') );
@@ -74,7 +74,7 @@  discard block
 block discarded – undo
74 74
      */
75 75
     public static function show_db_name()
76 76
     {
77
-        if (! defined('DOING_AJAX') && (defined('EE_ERROR_EMAILS') && EE_ERROR_EMAILS)) {
77
+        if ( ! defined('DOING_AJAX') && (defined('EE_ERROR_EMAILS') && EE_ERROR_EMAILS)) {
78 78
             echo '<p style="font-size:10px;font-weight:normal;color:#E76700;margin: 1em 2em; text-align: right;">DB_NAME: '
79 79
                  . DB_NAME
80 80
                  . '</p>';
@@ -123,12 +123,12 @@  discard block
 block discarded – undo
123 123
         global $wp_filter;
124 124
         echo '<br/><br/><br/><h3>Hooked Functions</h3>';
125 125
         if ($tag) {
126
-            $hook[ $tag ] = $wp_filter[ $tag ];
127
-            if (! is_array($hook[ $tag ])) {
126
+            $hook[$tag] = $wp_filter[$tag];
127
+            if ( ! is_array($hook[$tag])) {
128 128
                 trigger_error("Nothing found for '$tag' hook", E_USER_WARNING);
129 129
                 return;
130 130
             }
131
-            echo '<h5>For Tag: ' . $tag . '</h5>';
131
+            echo '<h5>For Tag: '.$tag.'</h5>';
132 132
         } else {
133 133
             $hook = is_array($wp_filter) ? $wp_filter : array($wp_filter);
134 134
             ksort($hook);
@@ -157,12 +157,12 @@  discard block
 block discarded – undo
157 157
     {
158 158
         $filters = array();
159 159
         global $wp_filter;
160
-        if (isset($wp_filter[ $hook_name ])) {
161
-            $filters[ $hook_name ] = array();
162
-            foreach ($wp_filter[ $hook_name ] as $priority => $callbacks) {
163
-                $filters[ $hook_name ][ $priority ] = array();
160
+        if (isset($wp_filter[$hook_name])) {
161
+            $filters[$hook_name] = array();
162
+            foreach ($wp_filter[$hook_name] as $priority => $callbacks) {
163
+                $filters[$hook_name][$priority] = array();
164 164
                 foreach ($callbacks as $callback) {
165
-                    $filters[ $hook_name ][ $priority ][] = $callback['function'];
165
+                    $filters[$hook_name][$priority][] = $callback['function'];
166 166
                 }
167 167
             }
168 168
         }
@@ -181,17 +181,17 @@  discard block
 block discarded – undo
181 181
     {
182 182
         if (WP_DEBUG) {
183 183
             $activation_errors = ob_get_contents();
184
-            if (! empty($activation_errors)) {
185
-                $activation_errors = date('Y-m-d H:i:s') . "\n" . $activation_errors;
184
+            if ( ! empty($activation_errors)) {
185
+                $activation_errors = date('Y-m-d H:i:s')."\n".$activation_errors;
186 186
             }
187
-            espresso_load_required('EEH_File', EE_HELPERS . 'EEH_File.helper.php');
187
+            espresso_load_required('EEH_File', EE_HELPERS.'EEH_File.helper.php');
188 188
             if (class_exists('EEH_File')) {
189 189
                 try {
190 190
                     EEH_File::ensure_file_exists_and_is_writable(
191
-                        EVENT_ESPRESSO_UPLOAD_DIR . 'logs' . DS . 'espresso_plugin_activation_errors.html'
191
+                        EVENT_ESPRESSO_UPLOAD_DIR.'logs'.DS.'espresso_plugin_activation_errors.html'
192 192
                     );
193 193
                     EEH_File::write_to_file(
194
-                        EVENT_ESPRESSO_UPLOAD_DIR . 'logs' . DS . 'espresso_plugin_activation_errors.html',
194
+                        EVENT_ESPRESSO_UPLOAD_DIR.'logs'.DS.'espresso_plugin_activation_errors.html',
195 195
                         $activation_errors
196 196
                     );
197 197
                 } catch (EE_Error $e) {
@@ -211,11 +211,11 @@  discard block
 block discarded – undo
211 211
             } else {
212 212
                 // old school attempt
213 213
                 file_put_contents(
214
-                    EVENT_ESPRESSO_UPLOAD_DIR . 'logs' . DS . 'espresso_plugin_activation_errors.html',
214
+                    EVENT_ESPRESSO_UPLOAD_DIR.'logs'.DS.'espresso_plugin_activation_errors.html',
215 215
                     $activation_errors
216 216
                 );
217 217
             }
218
-            $activation_errors = get_option('ee_plugin_activation_errors', '') . $activation_errors;
218
+            $activation_errors = get_option('ee_plugin_activation_errors', '').$activation_errors;
219 219
             update_option('ee_plugin_activation_errors', $activation_errors);
220 220
         }
221 221
     }
@@ -275,7 +275,7 @@  discard block
 block discarded – undo
275 275
         // don't trigger error if doing ajax,
276 276
         // instead we'll add a transient EE_Error notice that in theory should show on the next request.
277 277
         if (defined('DOING_AJAX') && DOING_AJAX) {
278
-            $error_message .= ' ' . esc_html__(
278
+            $error_message .= ' '.esc_html__(
279 279
                 'This is a doing_it_wrong message that was triggered during an ajax request.  The request params on this request were: ',
280 280
                 'event_espresso'
281 281
             );
@@ -319,19 +319,19 @@  discard block
 block discarded – undo
319 319
         $debug_key = 'EE_DEBUG_SPCO'
320 320
     ) {
321 321
         if (WP_DEBUG) {
322
-            $debug_key = $debug_key . '_' . EE_Session::instance()->id();
322
+            $debug_key = $debug_key.'_'.EE_Session::instance()->id();
323 323
             $debug_data = get_option($debug_key, array());
324 324
             $default_data = array(
325
-                $class => $func . '() : ' . $line,
325
+                $class => $func.'() : '.$line,
326 326
                 'REQ'  => $display_request ? $_REQUEST : '',
327 327
             );
328 328
             // don't serialize objects
329 329
             $info = self::strip_objects($info);
330 330
             $index = ! empty($debug_index) ? $debug_index : 0;
331
-            if (! isset($debug_data[ $index ])) {
332
-                $debug_data[ $index ] = array();
331
+            if ( ! isset($debug_data[$index])) {
332
+                $debug_data[$index] = array();
333 333
             }
334
-            $debug_data[ $index ][ microtime() ] = array_merge($default_data, $info);
334
+            $debug_data[$index][microtime()] = array_merge($default_data, $info);
335 335
             update_option($debug_key, $debug_data);
336 336
         }
337 337
     }
@@ -348,20 +348,20 @@  discard block
 block discarded – undo
348 348
     {
349 349
         foreach ($info as $key => $value) {
350 350
             if (is_array($value)) {
351
-                $info[ $key ] = self::strip_objects($value);
351
+                $info[$key] = self::strip_objects($value);
352 352
             } elseif (is_object($value)) {
353 353
                 $object_class = get_class($value);
354
-                $info[ $object_class ] = array();
355
-                $info[ $object_class ]['ID'] = method_exists($value, 'ID') ? $value->ID() : spl_object_hash($value);
354
+                $info[$object_class] = array();
355
+                $info[$object_class]['ID'] = method_exists($value, 'ID') ? $value->ID() : spl_object_hash($value);
356 356
                 if (method_exists($value, 'ID')) {
357
-                    $info[ $object_class ]['ID'] = $value->ID();
357
+                    $info[$object_class]['ID'] = $value->ID();
358 358
                 }
359 359
                 if (method_exists($value, 'status')) {
360
-                    $info[ $object_class ]['status'] = $value->status();
360
+                    $info[$object_class]['status'] = $value->status();
361 361
                 } elseif (method_exists($value, 'status_ID')) {
362
-                    $info[ $object_class ]['status'] = $value->status_ID();
362
+                    $info[$object_class]['status'] = $value->status_ID();
363 363
                 }
364
-                unset($info[ $key ]);
364
+                unset($info[$key]);
365 365
             }
366 366
         }
367 367
         return (array) $info;
@@ -395,8 +395,8 @@  discard block
 block discarded – undo
395 395
         $result = EEH_Debug_Tools::headingSpacer($heading_tag);
396 396
         $result .= EEH_Debug_Tools::heading($var_name, $heading_tag, $margin, $line);
397 397
         $result .= $is_method
398
-            ? EEH_Debug_Tools::grey_span('::') . EEH_Debug_Tools::orange_span($var . '()')
399
-            : EEH_Debug_Tools::grey_span(' : ') . EEH_Debug_Tools::orange_span($var);
398
+            ? EEH_Debug_Tools::grey_span('::').EEH_Debug_Tools::orange_span($var.'()')
399
+            : EEH_Debug_Tools::grey_span(' : ').EEH_Debug_Tools::orange_span($var);
400 400
         $result .= EEH_Debug_Tools::file_and_line($file, $line, $heading_tag);
401 401
         $result .= EEH_Debug_Tools::headingX($heading_tag);
402 402
         if ($die) {
@@ -445,7 +445,7 @@  discard block
 block discarded – undo
445 445
             return $heading;
446 446
         }
447 447
         $margin = "25px 0 0 {$margin}";
448
-        return '<' . $heading_tag . ' style="color:#2EA2CC; margin:' . $margin . ';"><b>' . $var_name . '</b>';
448
+        return '<'.$heading_tag.' style="color:#2EA2CC; margin:'.$margin.';"><b>'.$var_name.'</b>';
449 449
     }
450 450
 
451 451
 
@@ -459,7 +459,7 @@  discard block
 block discarded – undo
459 459
         if (EEH_Debug_Tools::plainOutput()) {
460 460
             return '';
461 461
         }
462
-        return '</' . $heading_tag . '>';
462
+        return '</'.$heading_tag.'>';
463 463
     }
464 464
 
465 465
 
@@ -473,7 +473,7 @@  discard block
 block discarded – undo
473 473
         if (EEH_Debug_Tools::plainOutput()) {
474 474
             return $content;
475 475
         }
476
-        return '<span style="color:#999">' . $content . '</span>';
476
+        return '<span style="color:#999">'.$content.'</span>';
477 477
     }
478 478
 
479 479
 
@@ -513,7 +513,7 @@  discard block
 block discarded – undo
513 513
         if (EEH_Debug_Tools::plainOutput()) {
514 514
             return $content;
515 515
         }
516
-        return '<span style="color:#E76700">' . $content . '</span>';
516
+        return '<span style="color:#E76700">'.$content.'</span>';
517 517
     }
518 518
 
519 519
 
@@ -530,7 +530,7 @@  discard block
 block discarded – undo
530 530
         if (EEH_Debug_Tools::plainOutput()) {
531 531
             return $var;
532 532
         }
533
-        return '<pre style="color:#999; padding:1em; background: #fff">' . $var . '</pre>';
533
+        return '<pre style="color:#999; padding:1em; background: #fff">'.$var.'</pre>';
534 534
     }
535 535
 
536 536
 
@@ -574,7 +574,7 @@  discard block
 block discarded – undo
574 574
         $heading_tag = EEH_Debug_Tools::headingTag($heading_tag);
575 575
         $result = EEH_Debug_Tools::headingSpacer($heading_tag);
576 576
         $result .= EEH_Debug_Tools::heading($var_name, $heading_tag, $margin, $line);
577
-        $result .= EEH_Debug_Tools::grey_span(' : ') . EEH_Debug_Tools::orange_span(
577
+        $result .= EEH_Debug_Tools::grey_span(' : ').EEH_Debug_Tools::orange_span(
578 578
             EEH_Debug_Tools::pre_span($var)
579 579
         );
580 580
         $result .= EEH_Debug_Tools::file_and_line($file, $line, $heading_tag);
Please login to merge, or discard this patch.
core/services/loaders/ClassInterfaceCache.php 2 patches
Indentation   +156 added lines, -156 removed lines patch added patch discarded remove patch
@@ -20,160 +20,160 @@
 block discarded – undo
20 20
 class ClassInterfaceCache
21 21
 {
22 22
 
23
-    /**
24
-     * array of interfaces indexed by FQCNs where values are arrays of interface FQNs
25
-     *
26
-     * @var string[][] $interfaces
27
-     */
28
-    private $interfaces = array();
29
-
30
-    /**
31
-     * @type string[][] $aliases
32
-     */
33
-    protected $aliases = array();
34
-
35
-
36
-    /**
37
-     * @param string $fqn
38
-     * @return string
39
-     */
40
-    public function getFqn($fqn)
41
-    {
42
-        return $fqn instanceof FullyQualifiedName ? $fqn->string() : $fqn;
43
-    }
44
-
45
-
46
-    /**
47
-     * @param string $fqn
48
-     * @return array
49
-     */
50
-    public function getInterfaces($fqn)
51
-    {
52
-        $fqn = $this->getFqn($fqn);
53
-        // have we already seen this FQCN ?
54
-        if (! array_key_exists($fqn, $this->interfaces)) {
55
-            $this->interfaces[ $fqn ] = array();
56
-            if (class_exists($fqn)) {
57
-                $this->interfaces[ $fqn ] = class_implements($fqn, false);
58
-                $this->interfaces[ $fqn ] = $this->interfaces[ $fqn ] !== false
59
-                    ? $this->interfaces[ $fqn ]
60
-                    : array();
61
-            }
62
-        }
63
-        return $this->interfaces[ $fqn ];
64
-    }
65
-
66
-
67
-    /**
68
-     * @param string $fqn
69
-     * @param string $interface
70
-     * @return bool
71
-     */
72
-    public function hasInterface($fqn, $interface)
73
-    {
74
-        $fqn        = $this->getFqn($fqn);
75
-        $interfaces = $this->getInterfaces($fqn);
76
-        return in_array($interface, $interfaces, true);
77
-    }
78
-
79
-
80
-    /**
81
-     * adds an alias for a classname
82
-     *
83
-     * @param string $fqn       the class name that should be used (concrete class to replace interface)
84
-     * @param string $alias     the class name that would be type hinted for (abstract parent or interface)
85
-     * @param string $for_class the class that has the dependency (is type hinting for the interface)
86
-     */
87
-    public function addAlias($fqn, $alias, $for_class = '')
88
-    {
89
-        $fqn   = $this->getFqn($fqn);
90
-        $alias = $this->getFqn($alias);
91
-        // are we adding an alias for a specific class?
92
-        if ($for_class !== '') {
93
-            // make sure it's set up as an array
94
-            if (! isset($this->aliases[ $for_class ])) {
95
-                $this->aliases[ $for_class ] = array();
96
-            }
97
-            $this->aliases[ $for_class ][ $alias ] = $fqn;
98
-            return;
99
-        }
100
-        $this->aliases[ $alias ] = $fqn;
101
-    }
102
-
103
-
104
-    /**
105
-     * returns TRUE if the provided FQN is an alias
106
-     *
107
-     * @param string $fqn
108
-     * @param string $for_class
109
-     * @return bool
110
-     */
111
-    public function isAlias($fqn = '', $for_class = '')
112
-    {
113
-        $fqn = $this->getFqn($fqn);
114
-        if ($this->isAliasForClass($fqn, $for_class)) {
115
-            return true;
116
-        }
117
-        if ($for_class === '' && $this->isDirectAlias($fqn)) {
118
-            return true;
119
-        }
120
-        return false;
121
-    }
122
-
123
-
124
-    /**
125
-     * returns TRUE if the provided FQN is an alias
126
-     *
127
-     * @param string $fqn
128
-     * @return bool
129
-     */
130
-    protected function isDirectAlias($fqn = '')
131
-    {
132
-        return isset($this->aliases[ (string) $fqn ]) && ! is_array($this->aliases[ (string) $fqn ]);
133
-    }
134
-
135
-
136
-    /**
137
-     * returns TRUE if the provided FQN is an alias for the specified class
138
-     *
139
-     * @param string $fqn
140
-     * @param string $for_class
141
-     * @return bool
142
-     */
143
-    protected function isAliasForClass($fqn = '', $for_class = '')
144
-    {
145
-        return (
146
-            $for_class !== ''
147
-            && isset($this->aliases[ (string) $for_class ][ (string) $fqn ])
148
-        );
149
-    }
150
-
151
-
152
-    /**
153
-     * returns FQN for provided alias if one exists, otherwise returns the original FQN
154
-     * functions recursively, so that multiple aliases can be used to drill down to a FQN
155
-     *  for example:
156
-     *      if the following two entries were added to the aliases array:
157
-     *          array(
158
-     *              'interface_alias'           => 'some\namespace\interface'
159
-     *              'some\namespace\interface'  => 'some\namespace\classname'
160
-     *          )
161
-     *      then one could use Loader::getNew( 'interface_alias' )
162
-     *      to load an instance of 'some\namespace\classname'
163
-     *
164
-     * @param string $alias
165
-     * @param string $for_class
166
-     * @return string
167
-     */
168
-    public function getFqnForAlias($alias = '', $for_class = '')
169
-    {
170
-        $alias = $this->getFqn($alias);
171
-        if ($this->isAliasForClass($alias, $for_class)) {
172
-            return $this->getFqnForAlias($this->aliases[ (string) $for_class ][ (string) $alias ], $for_class);
173
-        }
174
-        if ($this->isDirectAlias($alias)) {
175
-            return $this->getFqnForAlias($this->aliases[ (string) $alias ], '');
176
-        }
177
-        return $alias;
178
-    }
23
+	/**
24
+	 * array of interfaces indexed by FQCNs where values are arrays of interface FQNs
25
+	 *
26
+	 * @var string[][] $interfaces
27
+	 */
28
+	private $interfaces = array();
29
+
30
+	/**
31
+	 * @type string[][] $aliases
32
+	 */
33
+	protected $aliases = array();
34
+
35
+
36
+	/**
37
+	 * @param string $fqn
38
+	 * @return string
39
+	 */
40
+	public function getFqn($fqn)
41
+	{
42
+		return $fqn instanceof FullyQualifiedName ? $fqn->string() : $fqn;
43
+	}
44
+
45
+
46
+	/**
47
+	 * @param string $fqn
48
+	 * @return array
49
+	 */
50
+	public function getInterfaces($fqn)
51
+	{
52
+		$fqn = $this->getFqn($fqn);
53
+		// have we already seen this FQCN ?
54
+		if (! array_key_exists($fqn, $this->interfaces)) {
55
+			$this->interfaces[ $fqn ] = array();
56
+			if (class_exists($fqn)) {
57
+				$this->interfaces[ $fqn ] = class_implements($fqn, false);
58
+				$this->interfaces[ $fqn ] = $this->interfaces[ $fqn ] !== false
59
+					? $this->interfaces[ $fqn ]
60
+					: array();
61
+			}
62
+		}
63
+		return $this->interfaces[ $fqn ];
64
+	}
65
+
66
+
67
+	/**
68
+	 * @param string $fqn
69
+	 * @param string $interface
70
+	 * @return bool
71
+	 */
72
+	public function hasInterface($fqn, $interface)
73
+	{
74
+		$fqn        = $this->getFqn($fqn);
75
+		$interfaces = $this->getInterfaces($fqn);
76
+		return in_array($interface, $interfaces, true);
77
+	}
78
+
79
+
80
+	/**
81
+	 * adds an alias for a classname
82
+	 *
83
+	 * @param string $fqn       the class name that should be used (concrete class to replace interface)
84
+	 * @param string $alias     the class name that would be type hinted for (abstract parent or interface)
85
+	 * @param string $for_class the class that has the dependency (is type hinting for the interface)
86
+	 */
87
+	public function addAlias($fqn, $alias, $for_class = '')
88
+	{
89
+		$fqn   = $this->getFqn($fqn);
90
+		$alias = $this->getFqn($alias);
91
+		// are we adding an alias for a specific class?
92
+		if ($for_class !== '') {
93
+			// make sure it's set up as an array
94
+			if (! isset($this->aliases[ $for_class ])) {
95
+				$this->aliases[ $for_class ] = array();
96
+			}
97
+			$this->aliases[ $for_class ][ $alias ] = $fqn;
98
+			return;
99
+		}
100
+		$this->aliases[ $alias ] = $fqn;
101
+	}
102
+
103
+
104
+	/**
105
+	 * returns TRUE if the provided FQN is an alias
106
+	 *
107
+	 * @param string $fqn
108
+	 * @param string $for_class
109
+	 * @return bool
110
+	 */
111
+	public function isAlias($fqn = '', $for_class = '')
112
+	{
113
+		$fqn = $this->getFqn($fqn);
114
+		if ($this->isAliasForClass($fqn, $for_class)) {
115
+			return true;
116
+		}
117
+		if ($for_class === '' && $this->isDirectAlias($fqn)) {
118
+			return true;
119
+		}
120
+		return false;
121
+	}
122
+
123
+
124
+	/**
125
+	 * returns TRUE if the provided FQN is an alias
126
+	 *
127
+	 * @param string $fqn
128
+	 * @return bool
129
+	 */
130
+	protected function isDirectAlias($fqn = '')
131
+	{
132
+		return isset($this->aliases[ (string) $fqn ]) && ! is_array($this->aliases[ (string) $fqn ]);
133
+	}
134
+
135
+
136
+	/**
137
+	 * returns TRUE if the provided FQN is an alias for the specified class
138
+	 *
139
+	 * @param string $fqn
140
+	 * @param string $for_class
141
+	 * @return bool
142
+	 */
143
+	protected function isAliasForClass($fqn = '', $for_class = '')
144
+	{
145
+		return (
146
+			$for_class !== ''
147
+			&& isset($this->aliases[ (string) $for_class ][ (string) $fqn ])
148
+		);
149
+	}
150
+
151
+
152
+	/**
153
+	 * returns FQN for provided alias if one exists, otherwise returns the original FQN
154
+	 * functions recursively, so that multiple aliases can be used to drill down to a FQN
155
+	 *  for example:
156
+	 *      if the following two entries were added to the aliases array:
157
+	 *          array(
158
+	 *              'interface_alias'           => 'some\namespace\interface'
159
+	 *              'some\namespace\interface'  => 'some\namespace\classname'
160
+	 *          )
161
+	 *      then one could use Loader::getNew( 'interface_alias' )
162
+	 *      to load an instance of 'some\namespace\classname'
163
+	 *
164
+	 * @param string $alias
165
+	 * @param string $for_class
166
+	 * @return string
167
+	 */
168
+	public function getFqnForAlias($alias = '', $for_class = '')
169
+	{
170
+		$alias = $this->getFqn($alias);
171
+		if ($this->isAliasForClass($alias, $for_class)) {
172
+			return $this->getFqnForAlias($this->aliases[ (string) $for_class ][ (string) $alias ], $for_class);
173
+		}
174
+		if ($this->isDirectAlias($alias)) {
175
+			return $this->getFqnForAlias($this->aliases[ (string) $alias ], '');
176
+		}
177
+		return $alias;
178
+	}
179 179
 }
Please login to merge, or discard this patch.
Spacing   +14 added lines, -14 removed lines patch added patch discarded remove patch
@@ -51,16 +51,16 @@  discard block
 block discarded – undo
51 51
     {
52 52
         $fqn = $this->getFqn($fqn);
53 53
         // have we already seen this FQCN ?
54
-        if (! array_key_exists($fqn, $this->interfaces)) {
55
-            $this->interfaces[ $fqn ] = array();
54
+        if ( ! array_key_exists($fqn, $this->interfaces)) {
55
+            $this->interfaces[$fqn] = array();
56 56
             if (class_exists($fqn)) {
57
-                $this->interfaces[ $fqn ] = class_implements($fqn, false);
58
-                $this->interfaces[ $fqn ] = $this->interfaces[ $fqn ] !== false
59
-                    ? $this->interfaces[ $fqn ]
57
+                $this->interfaces[$fqn] = class_implements($fqn, false);
58
+                $this->interfaces[$fqn] = $this->interfaces[$fqn] !== false
59
+                    ? $this->interfaces[$fqn]
60 60
                     : array();
61 61
             }
62 62
         }
63
-        return $this->interfaces[ $fqn ];
63
+        return $this->interfaces[$fqn];
64 64
     }
65 65
 
66 66
 
@@ -91,13 +91,13 @@  discard block
 block discarded – undo
91 91
         // are we adding an alias for a specific class?
92 92
         if ($for_class !== '') {
93 93
             // make sure it's set up as an array
94
-            if (! isset($this->aliases[ $for_class ])) {
95
-                $this->aliases[ $for_class ] = array();
94
+            if ( ! isset($this->aliases[$for_class])) {
95
+                $this->aliases[$for_class] = array();
96 96
             }
97
-            $this->aliases[ $for_class ][ $alias ] = $fqn;
97
+            $this->aliases[$for_class][$alias] = $fqn;
98 98
             return;
99 99
         }
100
-        $this->aliases[ $alias ] = $fqn;
100
+        $this->aliases[$alias] = $fqn;
101 101
     }
102 102
 
103 103
 
@@ -129,7 +129,7 @@  discard block
 block discarded – undo
129 129
      */
130 130
     protected function isDirectAlias($fqn = '')
131 131
     {
132
-        return isset($this->aliases[ (string) $fqn ]) && ! is_array($this->aliases[ (string) $fqn ]);
132
+        return isset($this->aliases[(string) $fqn]) && ! is_array($this->aliases[(string) $fqn]);
133 133
     }
134 134
 
135 135
 
@@ -144,7 +144,7 @@  discard block
 block discarded – undo
144 144
     {
145 145
         return (
146 146
             $for_class !== ''
147
-            && isset($this->aliases[ (string) $for_class ][ (string) $fqn ])
147
+            && isset($this->aliases[(string) $for_class][(string) $fqn])
148 148
         );
149 149
     }
150 150
 
@@ -169,10 +169,10 @@  discard block
 block discarded – undo
169 169
     {
170 170
         $alias = $this->getFqn($alias);
171 171
         if ($this->isAliasForClass($alias, $for_class)) {
172
-            return $this->getFqnForAlias($this->aliases[ (string) $for_class ][ (string) $alias ], $for_class);
172
+            return $this->getFqnForAlias($this->aliases[(string) $for_class][(string) $alias], $for_class);
173 173
         }
174 174
         if ($this->isDirectAlias($alias)) {
175
-            return $this->getFqnForAlias($this->aliases[ (string) $alias ], '');
175
+            return $this->getFqnForAlias($this->aliases[(string) $alias], '');
176 176
         }
177 177
         return $alias;
178 178
     }
Please login to merge, or discard this patch.
core/domain/services/custom_post_types/RegisterCustomPostTypes.php 2 patches
Spacing   +1 added lines, -1 removed lines patch added patch discarded remove patch
@@ -61,7 +61,7 @@
 block discarded – undo
61 61
     {
62 62
         $custom_post_types = $this->custom_post_types->getDefinitions();
63 63
         foreach ($custom_post_types as $custom_post_type => $CPT) {
64
-            $this->wp_post_types[ $custom_post_type ] = $this->registerCustomPostType(
64
+            $this->wp_post_types[$custom_post_type] = $this->registerCustomPostType(
65 65
                 $custom_post_type,
66 66
                 $CPT['singular_name'],
67 67
                 $CPT['plural_name'],
Please login to merge, or discard this patch.
Indentation   +221 added lines, -221 removed lines patch added patch discarded remove patch
@@ -18,240 +18,240 @@
 block discarded – undo
18 18
 class RegisterCustomPostTypes
19 19
 {
20 20
 
21
-    /**
22
-     * @var CustomPostTypeDefinitions $custom_post_types
23
-     */
24
-    public $custom_post_types;
21
+	/**
22
+	 * @var CustomPostTypeDefinitions $custom_post_types
23
+	 */
24
+	public $custom_post_types;
25 25
 
26
-    /**
27
-     * @var WP_Post_Type[] $wp_post_types
28
-     */
29
-    public $wp_post_types = array();
26
+	/**
27
+	 * @var WP_Post_Type[] $wp_post_types
28
+	 */
29
+	public $wp_post_types = array();
30 30
 
31 31
 
32
-    /**
33
-     * RegisterCustomPostTypes constructor.
34
-     *
35
-     * @param CustomPostTypeDefinitions $custom_post_types
36
-     */
37
-    public function __construct(CustomPostTypeDefinitions $custom_post_types)
38
-    {
39
-        $this->custom_post_types = $custom_post_types;
40
-    }
32
+	/**
33
+	 * RegisterCustomPostTypes constructor.
34
+	 *
35
+	 * @param CustomPostTypeDefinitions $custom_post_types
36
+	 */
37
+	public function __construct(CustomPostTypeDefinitions $custom_post_types)
38
+	{
39
+		$this->custom_post_types = $custom_post_types;
40
+	}
41 41
 
42 42
 
43
-    /**
44
-     * @return WP_Post_Type[]
45
-     */
46
-    public function getRegisteredCustomPostTypes()
47
-    {
48
-        return $this->wp_post_types;
49
-    }
43
+	/**
44
+	 * @return WP_Post_Type[]
45
+	 */
46
+	public function getRegisteredCustomPostTypes()
47
+	{
48
+		return $this->wp_post_types;
49
+	}
50 50
 
51 51
 
52
-    /**
53
-     * @return void
54
-     * @throws DomainException
55
-     */
56
-    public function registerCustomPostTypes()
57
-    {
58
-        $custom_post_types = $this->custom_post_types->getDefinitions();
59
-        foreach ($custom_post_types as $custom_post_type => $CPT) {
60
-            $this->wp_post_types[ $custom_post_type ] = $this->registerCustomPostType(
61
-                $custom_post_type,
62
-                $CPT['singular_name'],
63
-                $CPT['plural_name'],
64
-                $CPT['singular_slug'],
65
-                $CPT['plural_slug'],
66
-                $CPT['args']
67
-            );
68
-        }
69
-    }
52
+	/**
53
+	 * @return void
54
+	 * @throws DomainException
55
+	 */
56
+	public function registerCustomPostTypes()
57
+	{
58
+		$custom_post_types = $this->custom_post_types->getDefinitions();
59
+		foreach ($custom_post_types as $custom_post_type => $CPT) {
60
+			$this->wp_post_types[ $custom_post_type ] = $this->registerCustomPostType(
61
+				$custom_post_type,
62
+				$CPT['singular_name'],
63
+				$CPT['plural_name'],
64
+				$CPT['singular_slug'],
65
+				$CPT['plural_slug'],
66
+				$CPT['args']
67
+			);
68
+		}
69
+	}
70 70
 
71 71
 
72
-    /**
73
-     * Registers a new custom post type. Sets default settings given only the following params.
74
-     * Returns the registered post type object, or an error object.
75
-     *
76
-     * @param string $post_type          the actual post type name
77
-     *                                   IMPORTANT:
78
-     *                                   this must match what the slug is for admin pages related to this CPT
79
-     *                                   Also any models must use this slug as well
80
-     * @param string $singular_name      a pre-internationalized string for the singular name of the objects
81
-     * @param string $plural_name        a pre-internationalized string for the plural name of the objects
82
-     * @param string $singular_slug
83
-     * @param string $plural_slug
84
-     * @param array  $override_arguments exactly like $args as described in
85
-     *                                   http://codex.wordpress.org/Function_Reference/register_post_type
86
-     * @return WP_Post_Type|WP_Error
87
-     * @throws DomainException
88
-     */
89
-    public function registerCustomPostType(
90
-        $post_type,
91
-        $singular_name,
92
-        $plural_name,
93
-        $singular_slug = '',
94
-        $plural_slug = '',
95
-        array $override_arguments = array()
96
-    ) {
97
-        $wp_post_type = register_post_type(
98
-            $post_type,
99
-            $this->prepareArguments(
100
-                $post_type,
101
-                $singular_name,
102
-                $plural_name,
103
-                $singular_slug,
104
-                $plural_slug,
105
-                $override_arguments
106
-            )
107
-        );
108
-        if ($wp_post_type instanceof WP_Error) {
109
-            throw new DomainException($wp_post_type->get_error_message());
110
-        }
111
-        return $wp_post_type;
112
-    }
72
+	/**
73
+	 * Registers a new custom post type. Sets default settings given only the following params.
74
+	 * Returns the registered post type object, or an error object.
75
+	 *
76
+	 * @param string $post_type          the actual post type name
77
+	 *                                   IMPORTANT:
78
+	 *                                   this must match what the slug is for admin pages related to this CPT
79
+	 *                                   Also any models must use this slug as well
80
+	 * @param string $singular_name      a pre-internationalized string for the singular name of the objects
81
+	 * @param string $plural_name        a pre-internationalized string for the plural name of the objects
82
+	 * @param string $singular_slug
83
+	 * @param string $plural_slug
84
+	 * @param array  $override_arguments exactly like $args as described in
85
+	 *                                   http://codex.wordpress.org/Function_Reference/register_post_type
86
+	 * @return WP_Post_Type|WP_Error
87
+	 * @throws DomainException
88
+	 */
89
+	public function registerCustomPostType(
90
+		$post_type,
91
+		$singular_name,
92
+		$plural_name,
93
+		$singular_slug = '',
94
+		$plural_slug = '',
95
+		array $override_arguments = array()
96
+	) {
97
+		$wp_post_type = register_post_type(
98
+			$post_type,
99
+			$this->prepareArguments(
100
+				$post_type,
101
+				$singular_name,
102
+				$plural_name,
103
+				$singular_slug,
104
+				$plural_slug,
105
+				$override_arguments
106
+			)
107
+		);
108
+		if ($wp_post_type instanceof WP_Error) {
109
+			throw new DomainException($wp_post_type->get_error_message());
110
+		}
111
+		return $wp_post_type;
112
+	}
113 113
 
114 114
 
115
-    /**
116
-     * @param string $post_type          the actual post type name
117
-     * @param string $singular_name      a pre-internationalized string for the singular name of the objects
118
-     * @param string $plural_name        a pre-internationalized string for the plural name of the objects
119
-     * @param string $singular_slug
120
-     * @param string $plural_slug
121
-     * @param array  $override_arguments The default values set in this function will be overridden
122
-     *                                   by whatever you set in $override_arguments
123
-     * @return array
124
-     */
125
-    protected function prepareArguments(
126
-        $post_type,
127
-        $singular_name,
128
-        $plural_name,
129
-        $singular_slug,
130
-        $plural_slug,
131
-        array $override_arguments = array()
132
-    ) {
133
-        // verify plural slug and singular slug, if they aren't we'll use $singular_name and $plural_name
134
-        $singular_slug = ! empty($singular_slug) ? $singular_slug : $singular_name;
135
-        $plural_slug = ! empty($plural_slug) ? $plural_slug : $plural_name;
136
-        $labels = $this->getLabels(
137
-            $singular_name,
138
-            $plural_name,
139
-            $singular_slug,
140
-            $plural_slug
141
-        );
142
-        // note the page_templates arg in the supports index is something specific to EE.
143
-        // WordPress doesn't actually have that in their register_post_type api.
144
-        $arguments = $this->getDefaultArguments($labels, $post_type, $plural_slug);
145
-        if ($override_arguments) {
146
-            if (isset($override_arguments['labels'])) {
147
-                $labels = array_merge($arguments['labels'], $override_arguments['labels']);
148
-            }
149
-            $arguments = array_merge($arguments, $override_arguments);
150
-            $arguments['labels'] = $labels;
151
-        }
152
-        return $arguments;
153
-    }
115
+	/**
116
+	 * @param string $post_type          the actual post type name
117
+	 * @param string $singular_name      a pre-internationalized string for the singular name of the objects
118
+	 * @param string $plural_name        a pre-internationalized string for the plural name of the objects
119
+	 * @param string $singular_slug
120
+	 * @param string $plural_slug
121
+	 * @param array  $override_arguments The default values set in this function will be overridden
122
+	 *                                   by whatever you set in $override_arguments
123
+	 * @return array
124
+	 */
125
+	protected function prepareArguments(
126
+		$post_type,
127
+		$singular_name,
128
+		$plural_name,
129
+		$singular_slug,
130
+		$plural_slug,
131
+		array $override_arguments = array()
132
+	) {
133
+		// verify plural slug and singular slug, if they aren't we'll use $singular_name and $plural_name
134
+		$singular_slug = ! empty($singular_slug) ? $singular_slug : $singular_name;
135
+		$plural_slug = ! empty($plural_slug) ? $plural_slug : $plural_name;
136
+		$labels = $this->getLabels(
137
+			$singular_name,
138
+			$plural_name,
139
+			$singular_slug,
140
+			$plural_slug
141
+		);
142
+		// note the page_templates arg in the supports index is something specific to EE.
143
+		// WordPress doesn't actually have that in their register_post_type api.
144
+		$arguments = $this->getDefaultArguments($labels, $post_type, $plural_slug);
145
+		if ($override_arguments) {
146
+			if (isset($override_arguments['labels'])) {
147
+				$labels = array_merge($arguments['labels'], $override_arguments['labels']);
148
+			}
149
+			$arguments = array_merge($arguments, $override_arguments);
150
+			$arguments['labels'] = $labels;
151
+		}
152
+		return $arguments;
153
+	}
154 154
 
155 155
 
156
-    /**
157
-     * @param string $singular_name
158
-     * @param string $plural_name
159
-     * @param string $singular_slug
160
-     * @param string $plural_slug
161
-     * @return array
162
-     */
163
-    private function getLabels($singular_name, $plural_name, $singular_slug, $plural_slug)
164
-    {
165
-        return array(
166
-            'name'               => $plural_name,
167
-            'singular_name'      => $singular_name,
168
-            'singular_slug'      => $singular_slug,
169
-            'plural_slug'        => $plural_slug,
170
-            'add_new'            => sprintf(
171
-                esc_html_x('Add %s', 'Add Event', 'event_espresso'),
172
-                $singular_name
173
-            ),
174
-            'add_new_item'       => sprintf(
175
-                esc_html_x('Add New %s', 'Add New Event', 'event_espresso'),
176
-                $singular_name
177
-            ),
178
-            'edit_item'          => sprintf(
179
-                esc_html_x('Edit %s', 'Edit Event', 'event_espresso'),
180
-                $singular_name
181
-            ),
182
-            'new_item'           => sprintf(
183
-                esc_html_x('New %s', 'New Event', 'event_espresso'),
184
-                $singular_name
185
-            ),
186
-            'all_items'          => sprintf(
187
-                esc_html_x('All %s', 'All Events', 'event_espresso'),
188
-                $plural_name
189
-            ),
190
-            'view_item'          => sprintf(
191
-                esc_html_x('View %s', 'View Event', 'event_espresso'),
192
-                $singular_name
193
-            ),
194
-            'search_items'       => sprintf(
195
-                esc_html_x('Search %s', 'Search Events', 'event_espresso'),
196
-                $plural_name
197
-            ),
198
-            'not_found'          => sprintf(
199
-                esc_html_x('No %s found', 'No Events found', 'event_espresso'),
200
-                $plural_name
201
-            ),
202
-            'not_found_in_trash' => sprintf(
203
-                esc_html_x('No %s found in Trash', 'No Events found in Trash', 'event_espresso'),
204
-                $plural_name
205
-            ),
206
-            'parent_item_colon'  => '',
207
-            'menu_name'          => $plural_name,
208
-        );
209
-    }
156
+	/**
157
+	 * @param string $singular_name
158
+	 * @param string $plural_name
159
+	 * @param string $singular_slug
160
+	 * @param string $plural_slug
161
+	 * @return array
162
+	 */
163
+	private function getLabels($singular_name, $plural_name, $singular_slug, $plural_slug)
164
+	{
165
+		return array(
166
+			'name'               => $plural_name,
167
+			'singular_name'      => $singular_name,
168
+			'singular_slug'      => $singular_slug,
169
+			'plural_slug'        => $plural_slug,
170
+			'add_new'            => sprintf(
171
+				esc_html_x('Add %s', 'Add Event', 'event_espresso'),
172
+				$singular_name
173
+			),
174
+			'add_new_item'       => sprintf(
175
+				esc_html_x('Add New %s', 'Add New Event', 'event_espresso'),
176
+				$singular_name
177
+			),
178
+			'edit_item'          => sprintf(
179
+				esc_html_x('Edit %s', 'Edit Event', 'event_espresso'),
180
+				$singular_name
181
+			),
182
+			'new_item'           => sprintf(
183
+				esc_html_x('New %s', 'New Event', 'event_espresso'),
184
+				$singular_name
185
+			),
186
+			'all_items'          => sprintf(
187
+				esc_html_x('All %s', 'All Events', 'event_espresso'),
188
+				$plural_name
189
+			),
190
+			'view_item'          => sprintf(
191
+				esc_html_x('View %s', 'View Event', 'event_espresso'),
192
+				$singular_name
193
+			),
194
+			'search_items'       => sprintf(
195
+				esc_html_x('Search %s', 'Search Events', 'event_espresso'),
196
+				$plural_name
197
+			),
198
+			'not_found'          => sprintf(
199
+				esc_html_x('No %s found', 'No Events found', 'event_espresso'),
200
+				$plural_name
201
+			),
202
+			'not_found_in_trash' => sprintf(
203
+				esc_html_x('No %s found in Trash', 'No Events found in Trash', 'event_espresso'),
204
+				$plural_name
205
+			),
206
+			'parent_item_colon'  => '',
207
+			'menu_name'          => $plural_name,
208
+		);
209
+	}
210 210
 
211 211
 
212
-    /**
213
-     * @param array  $labels
214
-     * @param string $post_type
215
-     * @param string $plural_slug
216
-     * @return array
217
-     */
218
-    private function getDefaultArguments(array $labels, $post_type, $plural_slug)
219
-    {
220
-        return array(
221
-            'labels'             => $labels,
222
-            'public'             => true,
223
-            'publicly_queryable' => true,
224
-            'show_ui'            => false,
225
-            'show_ee_ui'         => true,
226
-            'show_in_menu'       => false,
227
-            'show_in_nav_menus'  => false,
228
-            'query_var'          => true,
229
-            'rewrite'            => apply_filters(
230
-                'FHEE__EventEspresso_core_domain_entities_custom_post_types_RegisterCustomPostTypes__getDefaultArguments__rewrite',
231
-                // legacy filter applied for now,
232
-                // later on we'll run a has_filter($tag) check and throw a doing_it_wrong() notice
233
-                apply_filters(
234
-                    'FHEE__EE_Register_CPTs__register_CPT__rewrite',
235
-                    array('slug' => $plural_slug),
236
-                    $post_type
237
-                ),
238
-                $post_type,
239
-                $plural_slug
240
-            ),
241
-            'capability_type'    => 'post',
242
-            'map_meta_cap'       => true,
243
-            'has_archive'        => true,
244
-            'hierarchical'       => false,
245
-            'menu_position'      => null,
246
-            'supports'           => array(
247
-                'title',
248
-                'editor',
249
-                'author',
250
-                'thumbnail',
251
-                'excerpt',
252
-                'custom-fields',
253
-                'comments',
254
-            ),
255
-        );
256
-    }
212
+	/**
213
+	 * @param array  $labels
214
+	 * @param string $post_type
215
+	 * @param string $plural_slug
216
+	 * @return array
217
+	 */
218
+	private function getDefaultArguments(array $labels, $post_type, $plural_slug)
219
+	{
220
+		return array(
221
+			'labels'             => $labels,
222
+			'public'             => true,
223
+			'publicly_queryable' => true,
224
+			'show_ui'            => false,
225
+			'show_ee_ui'         => true,
226
+			'show_in_menu'       => false,
227
+			'show_in_nav_menus'  => false,
228
+			'query_var'          => true,
229
+			'rewrite'            => apply_filters(
230
+				'FHEE__EventEspresso_core_domain_entities_custom_post_types_RegisterCustomPostTypes__getDefaultArguments__rewrite',
231
+				// legacy filter applied for now,
232
+				// later on we'll run a has_filter($tag) check and throw a doing_it_wrong() notice
233
+				apply_filters(
234
+					'FHEE__EE_Register_CPTs__register_CPT__rewrite',
235
+					array('slug' => $plural_slug),
236
+					$post_type
237
+				),
238
+				$post_type,
239
+				$plural_slug
240
+			),
241
+			'capability_type'    => 'post',
242
+			'map_meta_cap'       => true,
243
+			'has_archive'        => true,
244
+			'hierarchical'       => false,
245
+			'menu_position'      => null,
246
+			'supports'           => array(
247
+				'title',
248
+				'editor',
249
+				'author',
250
+				'thumbnail',
251
+				'excerpt',
252
+				'custom-fields',
253
+				'comments',
254
+			),
255
+		);
256
+	}
257 257
 }
Please login to merge, or discard this patch.
core/services/collections/Collection.php 3 patches
Doc Comments   +3 added lines, -3 removed lines patch added patch discarded remove patch
@@ -156,7 +156,7 @@  discard block
 block discarded – undo
156 156
      *
157 157
      * @access public
158 158
      * @param mixed $identifier
159
-     * @return mixed
159
+     * @return boolean
160 160
      */
161 161
     public function get($identifier)
162 162
     {
@@ -278,7 +278,7 @@  discard block
 block discarded – undo
278 278
      * advances pointer to the provided object
279 279
      *
280 280
      * @access public
281
-     * @param $object
281
+     * @param \EventEspresso\core\libraries\form_sections\form_handlers\SequentialStepForm $object
282 282
      * @return boolean
283 283
      */
284 284
     public function setCurrentUsingObject($object)
@@ -316,7 +316,7 @@  discard block
 block discarded – undo
316 316
      *
317 317
      * @see http://stackoverflow.com/a/8736013
318 318
      * @param $object
319
-     * @return boolean|int|string
319
+     * @return integer
320 320
      */
321 321
     public function indexOf($object)
322 322
     {
Please login to merge, or discard this patch.
Indentation   +467 added lines, -467 removed lines patch added patch discarded remove patch
@@ -21,471 +21,471 @@
 block discarded – undo
21 21
 class Collection extends SplObjectStorage implements CollectionInterface
22 22
 {
23 23
 
24
-    /**
25
-     * a unique string for identifying this collection
26
-     *
27
-     * @type string $collection_identifier
28
-     */
29
-    protected $collection_identifier;
30
-
31
-    /**
32
-     * an interface (or class) name to be used for restricting the type of objects added to the storage
33
-     * this should be set from within the child class constructor
34
-     *
35
-     * @type string $interface
36
-     */
37
-    protected $collection_interface;
38
-
39
-
40
-    /**
41
-     * Collection constructor
42
-     *
43
-     * @param string $collection_interface
44
-     * @throws InvalidInterfaceException
45
-     */
46
-    public function __construct($collection_interface)
47
-    {
48
-        $this->setCollectionInterface($collection_interface);
49
-        $this->setCollectionIdentifier();
50
-    }
51
-
52
-
53
-    /**
54
-     * @return string
55
-     */
56
-    public function collectionIdentifier()
57
-    {
58
-        return $this->collection_identifier;
59
-    }
60
-
61
-
62
-    /**
63
-     * creates a very readable unique 9 character identifier like:  CF2-532-DAC
64
-     * and appends it to the non-qualified class name, ex: ThingCollection-CF2-532-DAC
65
-     *
66
-     * @return void
67
-     */
68
-    protected function setCollectionIdentifier()
69
-    {
70
-        // hash a few collection details
71
-        $identifier = md5(spl_object_hash($this) . $this->collection_interface . time());
72
-        // grab a few characters from the start, middle, and end of the hash
73
-        $id = array();
74
-        for ($x = 0; $x < 19; $x += 9) {
75
-            $id[] = substr($identifier, $x, 3);
76
-        }
77
-        $identifier = basename(str_replace('\\', '/', get_class($this)));
78
-        $identifier .= '-' . strtoupper(implode('-', $id));
79
-        $this->collection_identifier = $identifier;
80
-    }
81
-
82
-
83
-    /**
84
-     * setCollectionInterface
85
-     *
86
-     * @access protected
87
-     * @param  string $collection_interface
88
-     * @throws \EventEspresso\core\exceptions\InvalidInterfaceException
89
-     */
90
-    protected function setCollectionInterface($collection_interface)
91
-    {
92
-        if (! (interface_exists($collection_interface) || class_exists($collection_interface))) {
93
-            throw new InvalidInterfaceException($collection_interface);
94
-        }
95
-        $this->collection_interface = $collection_interface;
96
-    }
97
-
98
-
99
-    /**
100
-     * add
101
-     * attaches an object to the Collection
102
-     * and sets any supplied data associated with the current iterator entry
103
-     * by calling EE_Object_Collection::set_identifier()
104
-     *
105
-     * @access public
106
-     * @param        $object
107
-     * @param  mixed $identifier
108
-     * @return bool
109
-     * @throws InvalidEntityException
110
-     * @throws DuplicateCollectionIdentifierException
111
-     */
112
-    public function add($object, $identifier = null)
113
-    {
114
-        if (! $object instanceof $this->collection_interface) {
115
-            throw new InvalidEntityException($object, $this->collection_interface);
116
-        }
117
-        if ($this->contains($object)) {
118
-            throw new DuplicateCollectionIdentifierException($identifier);
119
-        }
120
-        $this->attach($object);
121
-        $this->setIdentifier($object, $identifier);
122
-        return $this->contains($object);
123
-    }
124
-
125
-
126
-    /**
127
-     * setIdentifier
128
-     * Sets the data associated with an object in the Collection
129
-     * if no $identifier is supplied, then the spl_object_hash() is used
130
-     *
131
-     * @access public
132
-     * @param        $object
133
-     * @param  mixed $identifier
134
-     * @return bool
135
-     */
136
-    public function setIdentifier($object, $identifier = null)
137
-    {
138
-        $identifier = ! empty($identifier)
139
-            ? $identifier
140
-            : spl_object_hash($object);
141
-        $this->rewind();
142
-        while ($this->valid()) {
143
-            if ($object === $this->current()) {
144
-                $this->setInfo($identifier);
145
-                $this->rewind();
146
-                return true;
147
-            }
148
-            $this->next();
149
-        }
150
-        return false;
151
-    }
152
-
153
-
154
-    /**
155
-     * get
156
-     * finds and returns an object in the Collection based on the identifier that was set using addObject()
157
-     * PLZ NOTE: the pointer is reset to the beginning of the collection before returning
158
-     *
159
-     * @access public
160
-     * @param mixed $identifier
161
-     * @return mixed
162
-     */
163
-    public function get($identifier)
164
-    {
165
-        $this->rewind();
166
-        while ($this->valid()) {
167
-            if ($identifier === $this->getInfo()) {
168
-                $object = $this->current();
169
-                $this->rewind();
170
-                return $object;
171
-            }
172
-            $this->next();
173
-        }
174
-        return null;
175
-    }
176
-
177
-
178
-    /**
179
-     * has
180
-     * returns TRUE or FALSE
181
-     * depending on whether the object is within the Collection
182
-     * based on the supplied $identifier
183
-     *
184
-     * @access public
185
-     * @param  mixed $identifier
186
-     * @return bool
187
-     */
188
-    public function has($identifier)
189
-    {
190
-        $this->rewind();
191
-        while ($this->valid()) {
192
-            if ($identifier === $this->getInfo()) {
193
-                $this->rewind();
194
-                return true;
195
-            }
196
-            $this->next();
197
-        }
198
-        return false;
199
-    }
200
-
201
-
202
-    /**
203
-     * hasObject
204
-     * returns TRUE or FALSE depending on whether the supplied object is within the Collection
205
-     *
206
-     * @access public
207
-     * @param $object
208
-     * @return bool
209
-     */
210
-    public function hasObject($object)
211
-    {
212
-        return $this->contains($object);
213
-    }
214
-
215
-
216
-    /**
217
-     * hasObjects
218
-     * returns true if there are objects within the Collection, and false if it is empty
219
-     *
220
-     * @access public
221
-     * @return bool
222
-     */
223
-    public function hasObjects()
224
-    {
225
-        return $this->count() !== 0;
226
-    }
227
-
228
-
229
-    /**
230
-     * isEmpty
231
-     * returns true if there are no objects within the Collection, and false if there are
232
-     *
233
-     * @access public
234
-     * @return bool
235
-     */
236
-    public function isEmpty()
237
-    {
238
-        return $this->count() === 0;
239
-    }
240
-
241
-
242
-    /**
243
-     * remove
244
-     * detaches an object from the Collection
245
-     *
246
-     * @access public
247
-     * @param $object
248
-     * @return bool
249
-     */
250
-    public function remove($object)
251
-    {
252
-        $this->detach($object);
253
-        return true;
254
-    }
255
-
256
-
257
-    /**
258
-     * setCurrent
259
-     * advances pointer to the object whose identifier matches that which was provided
260
-     *
261
-     * @access public
262
-     * @param mixed $identifier
263
-     * @return boolean
264
-     */
265
-    public function setCurrent($identifier)
266
-    {
267
-        $this->rewind();
268
-        while ($this->valid()) {
269
-            if ($identifier === $this->getInfo()) {
270
-                return true;
271
-            }
272
-            $this->next();
273
-        }
274
-        return false;
275
-    }
276
-
277
-
278
-    /**
279
-     * setCurrentUsingObject
280
-     * advances pointer to the provided object
281
-     *
282
-     * @access public
283
-     * @param $object
284
-     * @return boolean
285
-     */
286
-    public function setCurrentUsingObject($object)
287
-    {
288
-        $this->rewind();
289
-        while ($this->valid()) {
290
-            if ($this->current() === $object) {
291
-                return true;
292
-            }
293
-            $this->next();
294
-        }
295
-        return false;
296
-    }
297
-
298
-
299
-    /**
300
-     * Returns the object occupying the index before the current object,
301
-     * unless this is already the first object, in which case it just returns the first object
302
-     *
303
-     * @return mixed
304
-     */
305
-    public function previous()
306
-    {
307
-        $index = $this->indexOf($this->current());
308
-        if ($index === 0) {
309
-            return $this->current();
310
-        }
311
-        $index--;
312
-        return $this->objectAtIndex($index);
313
-    }
314
-
315
-
316
-    /**
317
-     * Returns the index of a given object, or false if not found
318
-     *
319
-     * @see http://stackoverflow.com/a/8736013
320
-     * @param $object
321
-     * @return boolean|int|string
322
-     */
323
-    public function indexOf($object)
324
-    {
325
-        if (! $this->contains($object)) {
326
-            return false;
327
-        }
328
-        foreach ($this as $index => $obj) {
329
-            if ($obj === $object) {
330
-                return $index;
331
-            }
332
-        }
333
-        return false;
334
-    }
335
-
336
-
337
-    /**
338
-     * Returns the object at the given index
339
-     *
340
-     * @see http://stackoverflow.com/a/8736013
341
-     * @param int $index
342
-     * @return mixed
343
-     */
344
-    public function objectAtIndex($index)
345
-    {
346
-        $iterator = new LimitIterator($this, $index, 1);
347
-        $iterator->rewind();
348
-        return $iterator->current();
349
-    }
350
-
351
-
352
-    /**
353
-     * Returns the sequence of objects as specified by the offset and length
354
-     *
355
-     * @see http://stackoverflow.com/a/8736013
356
-     * @param int $offset
357
-     * @param int $length
358
-     * @return array
359
-     */
360
-    public function slice($offset, $length)
361
-    {
362
-        $slice = array();
363
-        $iterator = new LimitIterator($this, $offset, $length);
364
-        foreach ($iterator as $object) {
365
-            $slice[] = $object;
366
-        }
367
-        return $slice;
368
-    }
369
-
370
-
371
-    /**
372
-     * Inserts an object at a certain point
373
-     *
374
-     * @see http://stackoverflow.com/a/8736013
375
-     * @param mixed $object A single object
376
-     * @param int   $index
377
-     * @param mixed $identifier
378
-     * @return bool
379
-     * @throws DuplicateCollectionIdentifierException
380
-     * @throws InvalidEntityException
381
-     */
382
-    public function insertObjectAt($object, $index, $identifier = null)
383
-    {
384
-        // check to ensure that objects don't already exist in the collection
385
-        if ($this->has($identifier)) {
386
-            throw new DuplicateCollectionIdentifierException($identifier);
387
-        }
388
-        // detach any objects at or past this index
389
-        $remaining_objects = array();
390
-        if ($index < $this->count()) {
391
-            $remaining_objects = $this->slice($index, $this->count() - $index);
392
-            foreach ($remaining_objects as $key => $remaining_object) {
393
-                // we need to grab the identifiers for each object and use them as keys
394
-                $remaining_objects[ $remaining_object->getInfo() ] = $remaining_object;
395
-                // and then remove the object from the current tracking array
396
-                unset($remaining_objects[ $key ]);
397
-                // and then remove it from the Collection
398
-                $this->detach($remaining_object);
399
-            }
400
-        }
401
-        // add the new object we're splicing in
402
-        $this->add($object, $identifier);
403
-        // attach the objects we previously detached
404
-        foreach ($remaining_objects as $key => $remaining_object) {
405
-            $this->add($remaining_object, $key);
406
-        }
407
-        return $this->contains($object);
408
-    }
409
-
410
-
411
-    /**
412
-     * Inserts an object (or an array of objects) at a certain point
413
-     *
414
-     * @see http://stackoverflow.com/a/8736013
415
-     * @param mixed $objects A single object or an array of objects
416
-     * @param int   $index
417
-     */
418
-    public function insertAt($objects, $index)
419
-    {
420
-        if (! is_array($objects)) {
421
-            $objects = array($objects);
422
-        }
423
-        // check to ensure that objects don't already exist in the collection
424
-        foreach ($objects as $key => $object) {
425
-            if ($this->contains($object)) {
426
-                unset($objects[ $key ]);
427
-            }
428
-        }
429
-        // do we have any objects left?
430
-        if (! $objects) {
431
-            return;
432
-        }
433
-        // detach any objects at or past this index
434
-        $remaining = array();
435
-        if ($index < $this->count()) {
436
-            $remaining = $this->slice($index, $this->count() - $index);
437
-            foreach ($remaining as $object) {
438
-                $this->detach($object);
439
-            }
440
-        }
441
-        // add the new objects we're splicing in
442
-        foreach ($objects as $object) {
443
-            $this->attach($object);
444
-        }
445
-        // attach the objects we previously detached
446
-        foreach ($remaining as $object) {
447
-            $this->attach($object);
448
-        }
449
-    }
450
-
451
-
452
-    /**
453
-     * Removes the object at the given index
454
-     *
455
-     * @see http://stackoverflow.com/a/8736013
456
-     * @param int $index
457
-     */
458
-    public function removeAt($index)
459
-    {
460
-        $this->detach($this->objectAtIndex($index));
461
-    }
462
-
463
-
464
-    /**
465
-     * detaches ALL objects from the Collection
466
-     */
467
-    public function detachAll()
468
-    {
469
-        $this->rewind();
470
-        while ($this->valid()) {
471
-            $object = $this->current();
472
-            $this->next();
473
-            $this->detach($object);
474
-        }
475
-    }
476
-
477
-
478
-    /**
479
-     * unsets and detaches ALL objects from the Collection
480
-     */
481
-    public function trashAndDetachAll()
482
-    {
483
-        $this->rewind();
484
-        while ($this->valid()) {
485
-            $object = $this->current();
486
-            $this->next();
487
-            $this->detach($object);
488
-            unset($object);
489
-        }
490
-    }
24
+	/**
25
+	 * a unique string for identifying this collection
26
+	 *
27
+	 * @type string $collection_identifier
28
+	 */
29
+	protected $collection_identifier;
30
+
31
+	/**
32
+	 * an interface (or class) name to be used for restricting the type of objects added to the storage
33
+	 * this should be set from within the child class constructor
34
+	 *
35
+	 * @type string $interface
36
+	 */
37
+	protected $collection_interface;
38
+
39
+
40
+	/**
41
+	 * Collection constructor
42
+	 *
43
+	 * @param string $collection_interface
44
+	 * @throws InvalidInterfaceException
45
+	 */
46
+	public function __construct($collection_interface)
47
+	{
48
+		$this->setCollectionInterface($collection_interface);
49
+		$this->setCollectionIdentifier();
50
+	}
51
+
52
+
53
+	/**
54
+	 * @return string
55
+	 */
56
+	public function collectionIdentifier()
57
+	{
58
+		return $this->collection_identifier;
59
+	}
60
+
61
+
62
+	/**
63
+	 * creates a very readable unique 9 character identifier like:  CF2-532-DAC
64
+	 * and appends it to the non-qualified class name, ex: ThingCollection-CF2-532-DAC
65
+	 *
66
+	 * @return void
67
+	 */
68
+	protected function setCollectionIdentifier()
69
+	{
70
+		// hash a few collection details
71
+		$identifier = md5(spl_object_hash($this) . $this->collection_interface . time());
72
+		// grab a few characters from the start, middle, and end of the hash
73
+		$id = array();
74
+		for ($x = 0; $x < 19; $x += 9) {
75
+			$id[] = substr($identifier, $x, 3);
76
+		}
77
+		$identifier = basename(str_replace('\\', '/', get_class($this)));
78
+		$identifier .= '-' . strtoupper(implode('-', $id));
79
+		$this->collection_identifier = $identifier;
80
+	}
81
+
82
+
83
+	/**
84
+	 * setCollectionInterface
85
+	 *
86
+	 * @access protected
87
+	 * @param  string $collection_interface
88
+	 * @throws \EventEspresso\core\exceptions\InvalidInterfaceException
89
+	 */
90
+	protected function setCollectionInterface($collection_interface)
91
+	{
92
+		if (! (interface_exists($collection_interface) || class_exists($collection_interface))) {
93
+			throw new InvalidInterfaceException($collection_interface);
94
+		}
95
+		$this->collection_interface = $collection_interface;
96
+	}
97
+
98
+
99
+	/**
100
+	 * add
101
+	 * attaches an object to the Collection
102
+	 * and sets any supplied data associated with the current iterator entry
103
+	 * by calling EE_Object_Collection::set_identifier()
104
+	 *
105
+	 * @access public
106
+	 * @param        $object
107
+	 * @param  mixed $identifier
108
+	 * @return bool
109
+	 * @throws InvalidEntityException
110
+	 * @throws DuplicateCollectionIdentifierException
111
+	 */
112
+	public function add($object, $identifier = null)
113
+	{
114
+		if (! $object instanceof $this->collection_interface) {
115
+			throw new InvalidEntityException($object, $this->collection_interface);
116
+		}
117
+		if ($this->contains($object)) {
118
+			throw new DuplicateCollectionIdentifierException($identifier);
119
+		}
120
+		$this->attach($object);
121
+		$this->setIdentifier($object, $identifier);
122
+		return $this->contains($object);
123
+	}
124
+
125
+
126
+	/**
127
+	 * setIdentifier
128
+	 * Sets the data associated with an object in the Collection
129
+	 * if no $identifier is supplied, then the spl_object_hash() is used
130
+	 *
131
+	 * @access public
132
+	 * @param        $object
133
+	 * @param  mixed $identifier
134
+	 * @return bool
135
+	 */
136
+	public function setIdentifier($object, $identifier = null)
137
+	{
138
+		$identifier = ! empty($identifier)
139
+			? $identifier
140
+			: spl_object_hash($object);
141
+		$this->rewind();
142
+		while ($this->valid()) {
143
+			if ($object === $this->current()) {
144
+				$this->setInfo($identifier);
145
+				$this->rewind();
146
+				return true;
147
+			}
148
+			$this->next();
149
+		}
150
+		return false;
151
+	}
152
+
153
+
154
+	/**
155
+	 * get
156
+	 * finds and returns an object in the Collection based on the identifier that was set using addObject()
157
+	 * PLZ NOTE: the pointer is reset to the beginning of the collection before returning
158
+	 *
159
+	 * @access public
160
+	 * @param mixed $identifier
161
+	 * @return mixed
162
+	 */
163
+	public function get($identifier)
164
+	{
165
+		$this->rewind();
166
+		while ($this->valid()) {
167
+			if ($identifier === $this->getInfo()) {
168
+				$object = $this->current();
169
+				$this->rewind();
170
+				return $object;
171
+			}
172
+			$this->next();
173
+		}
174
+		return null;
175
+	}
176
+
177
+
178
+	/**
179
+	 * has
180
+	 * returns TRUE or FALSE
181
+	 * depending on whether the object is within the Collection
182
+	 * based on the supplied $identifier
183
+	 *
184
+	 * @access public
185
+	 * @param  mixed $identifier
186
+	 * @return bool
187
+	 */
188
+	public function has($identifier)
189
+	{
190
+		$this->rewind();
191
+		while ($this->valid()) {
192
+			if ($identifier === $this->getInfo()) {
193
+				$this->rewind();
194
+				return true;
195
+			}
196
+			$this->next();
197
+		}
198
+		return false;
199
+	}
200
+
201
+
202
+	/**
203
+	 * hasObject
204
+	 * returns TRUE or FALSE depending on whether the supplied object is within the Collection
205
+	 *
206
+	 * @access public
207
+	 * @param $object
208
+	 * @return bool
209
+	 */
210
+	public function hasObject($object)
211
+	{
212
+		return $this->contains($object);
213
+	}
214
+
215
+
216
+	/**
217
+	 * hasObjects
218
+	 * returns true if there are objects within the Collection, and false if it is empty
219
+	 *
220
+	 * @access public
221
+	 * @return bool
222
+	 */
223
+	public function hasObjects()
224
+	{
225
+		return $this->count() !== 0;
226
+	}
227
+
228
+
229
+	/**
230
+	 * isEmpty
231
+	 * returns true if there are no objects within the Collection, and false if there are
232
+	 *
233
+	 * @access public
234
+	 * @return bool
235
+	 */
236
+	public function isEmpty()
237
+	{
238
+		return $this->count() === 0;
239
+	}
240
+
241
+
242
+	/**
243
+	 * remove
244
+	 * detaches an object from the Collection
245
+	 *
246
+	 * @access public
247
+	 * @param $object
248
+	 * @return bool
249
+	 */
250
+	public function remove($object)
251
+	{
252
+		$this->detach($object);
253
+		return true;
254
+	}
255
+
256
+
257
+	/**
258
+	 * setCurrent
259
+	 * advances pointer to the object whose identifier matches that which was provided
260
+	 *
261
+	 * @access public
262
+	 * @param mixed $identifier
263
+	 * @return boolean
264
+	 */
265
+	public function setCurrent($identifier)
266
+	{
267
+		$this->rewind();
268
+		while ($this->valid()) {
269
+			if ($identifier === $this->getInfo()) {
270
+				return true;
271
+			}
272
+			$this->next();
273
+		}
274
+		return false;
275
+	}
276
+
277
+
278
+	/**
279
+	 * setCurrentUsingObject
280
+	 * advances pointer to the provided object
281
+	 *
282
+	 * @access public
283
+	 * @param $object
284
+	 * @return boolean
285
+	 */
286
+	public function setCurrentUsingObject($object)
287
+	{
288
+		$this->rewind();
289
+		while ($this->valid()) {
290
+			if ($this->current() === $object) {
291
+				return true;
292
+			}
293
+			$this->next();
294
+		}
295
+		return false;
296
+	}
297
+
298
+
299
+	/**
300
+	 * Returns the object occupying the index before the current object,
301
+	 * unless this is already the first object, in which case it just returns the first object
302
+	 *
303
+	 * @return mixed
304
+	 */
305
+	public function previous()
306
+	{
307
+		$index = $this->indexOf($this->current());
308
+		if ($index === 0) {
309
+			return $this->current();
310
+		}
311
+		$index--;
312
+		return $this->objectAtIndex($index);
313
+	}
314
+
315
+
316
+	/**
317
+	 * Returns the index of a given object, or false if not found
318
+	 *
319
+	 * @see http://stackoverflow.com/a/8736013
320
+	 * @param $object
321
+	 * @return boolean|int|string
322
+	 */
323
+	public function indexOf($object)
324
+	{
325
+		if (! $this->contains($object)) {
326
+			return false;
327
+		}
328
+		foreach ($this as $index => $obj) {
329
+			if ($obj === $object) {
330
+				return $index;
331
+			}
332
+		}
333
+		return false;
334
+	}
335
+
336
+
337
+	/**
338
+	 * Returns the object at the given index
339
+	 *
340
+	 * @see http://stackoverflow.com/a/8736013
341
+	 * @param int $index
342
+	 * @return mixed
343
+	 */
344
+	public function objectAtIndex($index)
345
+	{
346
+		$iterator = new LimitIterator($this, $index, 1);
347
+		$iterator->rewind();
348
+		return $iterator->current();
349
+	}
350
+
351
+
352
+	/**
353
+	 * Returns the sequence of objects as specified by the offset and length
354
+	 *
355
+	 * @see http://stackoverflow.com/a/8736013
356
+	 * @param int $offset
357
+	 * @param int $length
358
+	 * @return array
359
+	 */
360
+	public function slice($offset, $length)
361
+	{
362
+		$slice = array();
363
+		$iterator = new LimitIterator($this, $offset, $length);
364
+		foreach ($iterator as $object) {
365
+			$slice[] = $object;
366
+		}
367
+		return $slice;
368
+	}
369
+
370
+
371
+	/**
372
+	 * Inserts an object at a certain point
373
+	 *
374
+	 * @see http://stackoverflow.com/a/8736013
375
+	 * @param mixed $object A single object
376
+	 * @param int   $index
377
+	 * @param mixed $identifier
378
+	 * @return bool
379
+	 * @throws DuplicateCollectionIdentifierException
380
+	 * @throws InvalidEntityException
381
+	 */
382
+	public function insertObjectAt($object, $index, $identifier = null)
383
+	{
384
+		// check to ensure that objects don't already exist in the collection
385
+		if ($this->has($identifier)) {
386
+			throw new DuplicateCollectionIdentifierException($identifier);
387
+		}
388
+		// detach any objects at or past this index
389
+		$remaining_objects = array();
390
+		if ($index < $this->count()) {
391
+			$remaining_objects = $this->slice($index, $this->count() - $index);
392
+			foreach ($remaining_objects as $key => $remaining_object) {
393
+				// we need to grab the identifiers for each object and use them as keys
394
+				$remaining_objects[ $remaining_object->getInfo() ] = $remaining_object;
395
+				// and then remove the object from the current tracking array
396
+				unset($remaining_objects[ $key ]);
397
+				// and then remove it from the Collection
398
+				$this->detach($remaining_object);
399
+			}
400
+		}
401
+		// add the new object we're splicing in
402
+		$this->add($object, $identifier);
403
+		// attach the objects we previously detached
404
+		foreach ($remaining_objects as $key => $remaining_object) {
405
+			$this->add($remaining_object, $key);
406
+		}
407
+		return $this->contains($object);
408
+	}
409
+
410
+
411
+	/**
412
+	 * Inserts an object (or an array of objects) at a certain point
413
+	 *
414
+	 * @see http://stackoverflow.com/a/8736013
415
+	 * @param mixed $objects A single object or an array of objects
416
+	 * @param int   $index
417
+	 */
418
+	public function insertAt($objects, $index)
419
+	{
420
+		if (! is_array($objects)) {
421
+			$objects = array($objects);
422
+		}
423
+		// check to ensure that objects don't already exist in the collection
424
+		foreach ($objects as $key => $object) {
425
+			if ($this->contains($object)) {
426
+				unset($objects[ $key ]);
427
+			}
428
+		}
429
+		// do we have any objects left?
430
+		if (! $objects) {
431
+			return;
432
+		}
433
+		// detach any objects at or past this index
434
+		$remaining = array();
435
+		if ($index < $this->count()) {
436
+			$remaining = $this->slice($index, $this->count() - $index);
437
+			foreach ($remaining as $object) {
438
+				$this->detach($object);
439
+			}
440
+		}
441
+		// add the new objects we're splicing in
442
+		foreach ($objects as $object) {
443
+			$this->attach($object);
444
+		}
445
+		// attach the objects we previously detached
446
+		foreach ($remaining as $object) {
447
+			$this->attach($object);
448
+		}
449
+	}
450
+
451
+
452
+	/**
453
+	 * Removes the object at the given index
454
+	 *
455
+	 * @see http://stackoverflow.com/a/8736013
456
+	 * @param int $index
457
+	 */
458
+	public function removeAt($index)
459
+	{
460
+		$this->detach($this->objectAtIndex($index));
461
+	}
462
+
463
+
464
+	/**
465
+	 * detaches ALL objects from the Collection
466
+	 */
467
+	public function detachAll()
468
+	{
469
+		$this->rewind();
470
+		while ($this->valid()) {
471
+			$object = $this->current();
472
+			$this->next();
473
+			$this->detach($object);
474
+		}
475
+	}
476
+
477
+
478
+	/**
479
+	 * unsets and detaches ALL objects from the Collection
480
+	 */
481
+	public function trashAndDetachAll()
482
+	{
483
+		$this->rewind();
484
+		while ($this->valid()) {
485
+			$object = $this->current();
486
+			$this->next();
487
+			$this->detach($object);
488
+			unset($object);
489
+		}
490
+	}
491 491
 }
Please login to merge, or discard this patch.
Spacing   +10 added lines, -10 removed lines patch added patch discarded remove patch
@@ -68,14 +68,14 @@  discard block
 block discarded – undo
68 68
     protected function setCollectionIdentifier()
69 69
     {
70 70
         // hash a few collection details
71
-        $identifier = md5(spl_object_hash($this) . $this->collection_interface . time());
71
+        $identifier = md5(spl_object_hash($this).$this->collection_interface.time());
72 72
         // grab a few characters from the start, middle, and end of the hash
73 73
         $id = array();
74 74
         for ($x = 0; $x < 19; $x += 9) {
75 75
             $id[] = substr($identifier, $x, 3);
76 76
         }
77 77
         $identifier = basename(str_replace('\\', '/', get_class($this)));
78
-        $identifier .= '-' . strtoupper(implode('-', $id));
78
+        $identifier .= '-'.strtoupper(implode('-', $id));
79 79
         $this->collection_identifier = $identifier;
80 80
     }
81 81
 
@@ -89,7 +89,7 @@  discard block
 block discarded – undo
89 89
      */
90 90
     protected function setCollectionInterface($collection_interface)
91 91
     {
92
-        if (! (interface_exists($collection_interface) || class_exists($collection_interface))) {
92
+        if ( ! (interface_exists($collection_interface) || class_exists($collection_interface))) {
93 93
             throw new InvalidInterfaceException($collection_interface);
94 94
         }
95 95
         $this->collection_interface = $collection_interface;
@@ -111,7 +111,7 @@  discard block
 block discarded – undo
111 111
      */
112 112
     public function add($object, $identifier = null)
113 113
     {
114
-        if (! $object instanceof $this->collection_interface) {
114
+        if ( ! $object instanceof $this->collection_interface) {
115 115
             throw new InvalidEntityException($object, $this->collection_interface);
116 116
         }
117 117
         if ($this->contains($object)) {
@@ -322,7 +322,7 @@  discard block
 block discarded – undo
322 322
      */
323 323
     public function indexOf($object)
324 324
     {
325
-        if (! $this->contains($object)) {
325
+        if ( ! $this->contains($object)) {
326 326
             return false;
327 327
         }
328 328
         foreach ($this as $index => $obj) {
@@ -391,9 +391,9 @@  discard block
 block discarded – undo
391 391
             $remaining_objects = $this->slice($index, $this->count() - $index);
392 392
             foreach ($remaining_objects as $key => $remaining_object) {
393 393
                 // we need to grab the identifiers for each object and use them as keys
394
-                $remaining_objects[ $remaining_object->getInfo() ] = $remaining_object;
394
+                $remaining_objects[$remaining_object->getInfo()] = $remaining_object;
395 395
                 // and then remove the object from the current tracking array
396
-                unset($remaining_objects[ $key ]);
396
+                unset($remaining_objects[$key]);
397 397
                 // and then remove it from the Collection
398 398
                 $this->detach($remaining_object);
399 399
             }
@@ -417,17 +417,17 @@  discard block
 block discarded – undo
417 417
      */
418 418
     public function insertAt($objects, $index)
419 419
     {
420
-        if (! is_array($objects)) {
420
+        if ( ! is_array($objects)) {
421 421
             $objects = array($objects);
422 422
         }
423 423
         // check to ensure that objects don't already exist in the collection
424 424
         foreach ($objects as $key => $object) {
425 425
             if ($this->contains($object)) {
426
-                unset($objects[ $key ]);
426
+                unset($objects[$key]);
427 427
             }
428 428
         }
429 429
         // do we have any objects left?
430
-        if (! $objects) {
430
+        if ( ! $objects) {
431 431
             return;
432 432
         }
433 433
         // detach any objects at or past this index
Please login to merge, or discard this patch.
core/services/collections/InvalidCollectionIdentifierException.php 1 patch
Indentation   +21 added lines, -21 removed lines patch added patch discarded remove patch
@@ -16,26 +16,26 @@
 block discarded – undo
16 16
 class InvalidCollectionIdentifierException extends OutOfBoundsException
17 17
 {
18 18
 
19
-    /**
20
-     * InvalidCollectionIdentifierException constructor.
21
-     *
22
-     * @param                $identifier
23
-     * @param string         $message
24
-     * @param int            $code
25
-     * @param Exception|null $previous
26
-     */
27
-    public function __construct($identifier, $message = '', $code = 0, Exception $previous = null)
28
-    {
29
-        if (empty($message)) {
30
-            $message = sprintf(
31
-                __(
32
-                    'The supplied identifier "%1$s" does not exist within this collection. 
19
+	/**
20
+	 * InvalidCollectionIdentifierException constructor.
21
+	 *
22
+	 * @param                $identifier
23
+	 * @param string         $message
24
+	 * @param int            $code
25
+	 * @param Exception|null $previous
26
+	 */
27
+	public function __construct($identifier, $message = '', $code = 0, Exception $previous = null)
28
+	{
29
+		if (empty($message)) {
30
+			$message = sprintf(
31
+				__(
32
+					'The supplied identifier "%1$s" does not exist within this collection. 
33 33
                     You may need to delay adding this asset until the required dependency has been added.',
34
-                    'event_espresso'
35
-                ),
36
-                $identifier
37
-            );
38
-        }
39
-        parent::__construct($message, $code, $previous);
40
-    }
34
+					'event_espresso'
35
+				),
36
+				$identifier
37
+			);
38
+		}
39
+		parent::__construct($message, $code, $previous);
40
+	}
41 41
 }
Please login to merge, or discard this patch.
core/services/collections/DuplicateCollectionIdentifierException.php 1 patch
Indentation   +21 added lines, -21 removed lines patch added patch discarded remove patch
@@ -16,25 +16,25 @@
 block discarded – undo
16 16
 class DuplicateCollectionIdentifierException extends OutOfRangeException
17 17
 {
18 18
 
19
-    /**
20
-     * DuplicateCollectionIdentifierException constructor.
21
-     *
22
-     * @param                $identifier
23
-     * @param string         $message
24
-     * @param int            $code
25
-     * @param Exception|null $previous
26
-     */
27
-    public function __construct($identifier, $message = '', $code = 0, Exception $previous = null)
28
-    {
29
-        if (empty($message)) {
30
-            $message = sprintf(
31
-                __(
32
-                    'The supplied identifier "%1$s" already exists within this collection.',
33
-                    'event_espresso'
34
-                ),
35
-                $identifier
36
-            );
37
-        }
38
-        parent::__construct($message, $code, $previous);
39
-    }
19
+	/**
20
+	 * DuplicateCollectionIdentifierException constructor.
21
+	 *
22
+	 * @param                $identifier
23
+	 * @param string         $message
24
+	 * @param int            $code
25
+	 * @param Exception|null $previous
26
+	 */
27
+	public function __construct($identifier, $message = '', $code = 0, Exception $previous = null)
28
+	{
29
+		if (empty($message)) {
30
+			$message = sprintf(
31
+				__(
32
+					'The supplied identifier "%1$s" already exists within this collection.',
33
+					'event_espresso'
34
+				),
35
+				$identifier
36
+			);
37
+		}
38
+		parent::__construct($message, $code, $previous);
39
+	}
40 40
 }
Please login to merge, or discard this patch.
core/exceptions/InvalidIdentifierException.php 1 patch
Indentation   +23 added lines, -23 removed lines patch added patch discarded remove patch
@@ -16,28 +16,28 @@
 block discarded – undo
16 16
 class InvalidIdentifierException extends InvalidArgumentException
17 17
 {
18 18
 
19
-    /**
20
-     * InvalidIdentifierException constructor.
21
-     *
22
-     * @param string     $actual   the identifier that was supplied
23
-     * @param string     $expected example of an acceptable identifier
24
-     * @param string     $message
25
-     * @param int        $code
26
-     * @param Exception $previous
27
-     */
28
-    public function __construct($actual, $expected, $message = '', $code = 0, Exception $previous = null)
29
-    {
30
-        if (empty($message)) {
31
-            $message = sprintf(
32
-                __(
33
-                    'The supplied identifier "%1$s" is invalid. A value like "%2$s" was expected.',
34
-                    'event_espresso'
35
-                ),
36
-                $actual,
37
-                $expected
38
-            );
39
-        }
40
-        parent::__construct($message, $code, $previous);
41
-    }
19
+	/**
20
+	 * InvalidIdentifierException constructor.
21
+	 *
22
+	 * @param string     $actual   the identifier that was supplied
23
+	 * @param string     $expected example of an acceptable identifier
24
+	 * @param string     $message
25
+	 * @param int        $code
26
+	 * @param Exception $previous
27
+	 */
28
+	public function __construct($actual, $expected, $message = '', $code = 0, Exception $previous = null)
29
+	{
30
+		if (empty($message)) {
31
+			$message = sprintf(
32
+				__(
33
+					'The supplied identifier "%1$s" is invalid. A value like "%2$s" was expected.',
34
+					'event_espresso'
35
+				),
36
+				$actual,
37
+				$expected
38
+			);
39
+		}
40
+		parent::__construct($message, $code, $previous);
41
+	}
42 42
 }
43 43
 // Location: core/exceptions/InvalidIdentifierException.php
Please login to merge, or discard this patch.
core/domain/values/assets/ManifestFile.php 1 patch
Indentation   +22 added lines, -22 removed lines patch added patch discarded remove patch
@@ -16,26 +16,26 @@
 block discarded – undo
16 16
 class ManifestFile extends Asset
17 17
 {
18 18
 
19
-    /**
20
-     * Asset constructor.
21
-     *
22
-     * @param DomainInterface $domain
23
-     * @throws InvalidDataTypeException
24
-     */
25
-    public function __construct(DomainInterface $domain)
26
-    {
27
-        parent::__construct(Asset::TYPE_MANIFEST, $domain->assetNamespace(), $domain);
28
-    }
29
-
30
-
31
-    public function urlBase()
32
-    {
33
-        return $this->domain->distributionAssetsUrl();
34
-    }
35
-
36
-
37
-    public function filepath()
38
-    {
39
-        return $this->domain->distributionAssetsPath();
40
-    }
19
+	/**
20
+	 * Asset constructor.
21
+	 *
22
+	 * @param DomainInterface $domain
23
+	 * @throws InvalidDataTypeException
24
+	 */
25
+	public function __construct(DomainInterface $domain)
26
+	{
27
+		parent::__construct(Asset::TYPE_MANIFEST, $domain->assetNamespace(), $domain);
28
+	}
29
+
30
+
31
+	public function urlBase()
32
+	{
33
+		return $this->domain->distributionAssetsUrl();
34
+	}
35
+
36
+
37
+	public function filepath()
38
+	{
39
+		return $this->domain->distributionAssetsPath();
40
+	}
41 41
 }
Please login to merge, or discard this patch.
core/domain/values/assets/Asset.php 2 patches
Spacing   +2 added lines, -2 removed lines patch added patch discarded remove patch
@@ -82,7 +82,7 @@  discard block
 block discarded – undo
82 82
      */
83 83
     private function setType($type)
84 84
     {
85
-        if (! in_array($type, $this->validAssetTypes(), true)) {
85
+        if ( ! in_array($type, $this->validAssetTypes(), true)) {
86 86
             throw new InvalidDataTypeException(
87 87
                 'Asset::$type',
88 88
                 $type,
@@ -99,7 +99,7 @@  discard block
 block discarded – undo
99 99
      */
100 100
     private function setHandle($handle)
101 101
     {
102
-        if (! is_string($handle)) {
102
+        if ( ! is_string($handle)) {
103 103
             throw new InvalidDataTypeException(
104 104
                 '$handle',
105 105
                 $handle,
Please login to merge, or discard this patch.
Indentation   +150 added lines, -150 removed lines patch added patch discarded remove patch
@@ -16,154 +16,154 @@
 block discarded – undo
16 16
 abstract class Asset
17 17
 {
18 18
 
19
-    /**
20
-     * indicates the file extension for a build distribution CSS file
21
-     */
22
-    const FILE_EXTENSION_DISTRIBUTION_CSS = '.dist.css';
23
-
24
-    /**
25
-     * indicates the file extension for a build distribution JS file
26
-     */
27
-    const FILE_EXTENSION_DISTRIBUTION_JS = '.dist.js';
28
-
29
-    /**
30
-     * indicates a Cascading Style Sheet asset
31
-     */
32
-    const TYPE_CSS = 'css';
33
-
34
-    /**
35
-     * indicates a Javascript asset
36
-     */
37
-    const TYPE_JS = 'js';
38
-
39
-    /**
40
-     * indicates a Javascript manifest file
41
-     */
42
-    const TYPE_MANIFEST = 'manifest';
43
-
44
-    /**
45
-     * @var DomainInterface $domain
46
-     */
47
-    protected $domain;
48
-
49
-    /**
50
-     * @var string $type
51
-     */
52
-    private $type;
53
-
54
-    /**
55
-     * @var string $handle
56
-     */
57
-    private $handle;
58
-
59
-    /**
60
-     * @var bool $registered
61
-     */
62
-    private $registered = false;
63
-
64
-
65
-    /**
66
-     * Asset constructor.
67
-     *
68
-     * @param                 $type
69
-     * @param string          $handle
70
-     * @param DomainInterface $domain
71
-     * @throws InvalidDataTypeException
72
-     */
73
-    public function __construct($type, $handle, DomainInterface $domain)
74
-    {
75
-        $this->domain = $domain;
76
-        $this->setType($type);
77
-        $this->setHandle($handle);
78
-    }
79
-
80
-
81
-    /**
82
-     * @return array
83
-     */
84
-    public function validAssetTypes()
85
-    {
86
-        return array(
87
-            Asset::TYPE_CSS,
88
-            Asset::TYPE_JS,
89
-            Asset::TYPE_MANIFEST,
90
-        );
91
-    }
92
-
93
-
94
-    /**
95
-     * @param string $type
96
-     * @throws InvalidDataTypeException
97
-     */
98
-    private function setType($type)
99
-    {
100
-        if (! in_array($type, $this->validAssetTypes(), true)) {
101
-            throw new InvalidDataTypeException(
102
-                'Asset::$type',
103
-                $type,
104
-                'one of the TYPE_* class constants on \EventEspresso\core\domain\values\Asset is required'
105
-            );
106
-        }
107
-        $this->type = $type;
108
-    }
109
-
110
-
111
-    /**
112
-     * @param string $handle
113
-     * @throws InvalidDataTypeException
114
-     */
115
-    private function setHandle($handle)
116
-    {
117
-        if (! is_string($handle)) {
118
-            throw new InvalidDataTypeException(
119
-                '$handle',
120
-                $handle,
121
-                'string'
122
-            );
123
-        }
124
-        $this->handle = $handle;
125
-    }
126
-
127
-
128
-    /**
129
-     * @return string
130
-     */
131
-    public function assetNamespace()
132
-    {
133
-        return $this->domain->assetNamespace();
134
-    }
135
-
136
-
137
-    /**
138
-     * @return string
139
-     */
140
-    public function type()
141
-    {
142
-        return $this->type;
143
-    }
144
-
145
-
146
-    /**
147
-     * @return string
148
-     */
149
-    public function handle()
150
-    {
151
-        return $this->handle;
152
-    }
153
-
154
-    /**
155
-     * @return bool
156
-     */
157
-    public function isRegistered()
158
-    {
159
-        return $this->registered;
160
-    }
161
-
162
-    /**
163
-     * @param bool $registered
164
-     */
165
-    public function setRegistered($registered = true)
166
-    {
167
-        $this->registered = filter_var($registered, FILTER_VALIDATE_BOOLEAN);
168
-    }
19
+	/**
20
+	 * indicates the file extension for a build distribution CSS file
21
+	 */
22
+	const FILE_EXTENSION_DISTRIBUTION_CSS = '.dist.css';
23
+
24
+	/**
25
+	 * indicates the file extension for a build distribution JS file
26
+	 */
27
+	const FILE_EXTENSION_DISTRIBUTION_JS = '.dist.js';
28
+
29
+	/**
30
+	 * indicates a Cascading Style Sheet asset
31
+	 */
32
+	const TYPE_CSS = 'css';
33
+
34
+	/**
35
+	 * indicates a Javascript asset
36
+	 */
37
+	const TYPE_JS = 'js';
38
+
39
+	/**
40
+	 * indicates a Javascript manifest file
41
+	 */
42
+	const TYPE_MANIFEST = 'manifest';
43
+
44
+	/**
45
+	 * @var DomainInterface $domain
46
+	 */
47
+	protected $domain;
48
+
49
+	/**
50
+	 * @var string $type
51
+	 */
52
+	private $type;
53
+
54
+	/**
55
+	 * @var string $handle
56
+	 */
57
+	private $handle;
58
+
59
+	/**
60
+	 * @var bool $registered
61
+	 */
62
+	private $registered = false;
63
+
64
+
65
+	/**
66
+	 * Asset constructor.
67
+	 *
68
+	 * @param                 $type
69
+	 * @param string          $handle
70
+	 * @param DomainInterface $domain
71
+	 * @throws InvalidDataTypeException
72
+	 */
73
+	public function __construct($type, $handle, DomainInterface $domain)
74
+	{
75
+		$this->domain = $domain;
76
+		$this->setType($type);
77
+		$this->setHandle($handle);
78
+	}
79
+
80
+
81
+	/**
82
+	 * @return array
83
+	 */
84
+	public function validAssetTypes()
85
+	{
86
+		return array(
87
+			Asset::TYPE_CSS,
88
+			Asset::TYPE_JS,
89
+			Asset::TYPE_MANIFEST,
90
+		);
91
+	}
92
+
93
+
94
+	/**
95
+	 * @param string $type
96
+	 * @throws InvalidDataTypeException
97
+	 */
98
+	private function setType($type)
99
+	{
100
+		if (! in_array($type, $this->validAssetTypes(), true)) {
101
+			throw new InvalidDataTypeException(
102
+				'Asset::$type',
103
+				$type,
104
+				'one of the TYPE_* class constants on \EventEspresso\core\domain\values\Asset is required'
105
+			);
106
+		}
107
+		$this->type = $type;
108
+	}
109
+
110
+
111
+	/**
112
+	 * @param string $handle
113
+	 * @throws InvalidDataTypeException
114
+	 */
115
+	private function setHandle($handle)
116
+	{
117
+		if (! is_string($handle)) {
118
+			throw new InvalidDataTypeException(
119
+				'$handle',
120
+				$handle,
121
+				'string'
122
+			);
123
+		}
124
+		$this->handle = $handle;
125
+	}
126
+
127
+
128
+	/**
129
+	 * @return string
130
+	 */
131
+	public function assetNamespace()
132
+	{
133
+		return $this->domain->assetNamespace();
134
+	}
135
+
136
+
137
+	/**
138
+	 * @return string
139
+	 */
140
+	public function type()
141
+	{
142
+		return $this->type;
143
+	}
144
+
145
+
146
+	/**
147
+	 * @return string
148
+	 */
149
+	public function handle()
150
+	{
151
+		return $this->handle;
152
+	}
153
+
154
+	/**
155
+	 * @return bool
156
+	 */
157
+	public function isRegistered()
158
+	{
159
+		return $this->registered;
160
+	}
161
+
162
+	/**
163
+	 * @param bool $registered
164
+	 */
165
+	public function setRegistered($registered = true)
166
+	{
167
+		$this->registered = filter_var($registered, FILTER_VALIDATE_BOOLEAN);
168
+	}
169 169
 }
Please login to merge, or discard this patch.