Completed
Branch master (7421d0)
by
unknown
11:25 queued 06:55
created
core/EE_Config.core.php 1 patch
Indentation   +3186 added lines, -3186 removed lines patch added patch discarded remove patch
@@ -21,1512 +21,1512 @@  discard block
 block discarded – undo
21 21
  */
22 22
 final class EE_Config implements ResettableInterface
23 23
 {
24
-    const OPTION_NAME = 'ee_config';
25
-
26
-    const LOG_NAME = 'ee_config_log';
27
-
28
-    const LOG_LENGTH = 100;
29
-
30
-    const ADDON_OPTION_NAMES = 'ee_config_option_names';
31
-
32
-    /**
33
-     *    instance of the EE_Config object
34
-     *
35
-     * @var    EE_Config $_instance
36
-     * @access    private
37
-     */
38
-    private static $_instance;
39
-
40
-    /**
41
-     * @var boolean $_logging_enabled
42
-     */
43
-    private static $_logging_enabled = false;
44
-
45
-    /**
46
-     * @var LegacyShortcodesManager $legacy_shortcodes_manager
47
-     */
48
-    private $legacy_shortcodes_manager;
49
-
50
-    /**
51
-     * An StdClass whose property names are addon slugs,
52
-     * and values are their config classes
53
-     *
54
-     * @var StdClass
55
-     */
56
-    public $addons;
57
-
58
-    /**
59
-     * @var EE_Admin_Config
60
-     */
61
-    public $admin;
62
-
63
-    /**
64
-     * @var EE_Core_Config
65
-     */
66
-    public $core;
67
-
68
-    /**
69
-     * @var EE_Currency_Config
70
-     */
71
-    public $currency;
72
-
73
-    /**
74
-     * @var EE_Organization_Config
75
-     */
76
-    public $organization;
77
-
78
-    /**
79
-     * @var EE_Registration_Config
80
-     */
81
-    public $registration;
82
-
83
-    /**
84
-     * @var EE_Template_Config
85
-     */
86
-    public $template_settings;
87
-
88
-    /**
89
-     * Holds EE environment values.
90
-     *
91
-     * @var EE_Environment_Config
92
-     */
93
-    public $environment;
94
-
95
-    /**
96
-     * settings pertaining to Google maps
97
-     *
98
-     * @var EE_Map_Config
99
-     */
100
-    public $map_settings;
101
-
102
-    /**
103
-     * settings pertaining to Taxes
104
-     *
105
-     * @var EE_Tax_Config
106
-     */
107
-    public $tax_settings;
108
-
109
-    /**
110
-     * Settings pertaining to global messages settings.
111
-     *
112
-     * @var EE_Messages_Config
113
-     */
114
-    public $messages;
115
-
116
-    /**
117
-     * @deprecated
118
-     * @var EE_Gateway_Config
119
-     */
120
-    public $gateway;
121
-
122
-    /**
123
-     * @var array
124
-     */
125
-    private $_addon_option_names = array();
126
-
127
-    /**
128
-     * @var array
129
-     */
130
-    private static $_module_route_map = array();
131
-
132
-    /**
133
-     * @var array
134
-     */
135
-    private static $_module_forward_map = array();
136
-
137
-    /**
138
-     * @var array
139
-     */
140
-    private static $_module_view_map = array();
141
-
142
-    /**
143
-     * @var bool
144
-     */
145
-    private static $initialized = false;
146
-
147
-
148
-    /**
149
-     * @singleton method used to instantiate class object
150
-     * @access    public
151
-     * @return EE_Config instance
152
-     */
153
-    public static function instance()
154
-    {
155
-        // check if class object is instantiated, and instantiated properly
156
-        if (! self::$_instance instanceof EE_Config) {
157
-            self::$_instance = new self();
158
-        }
159
-        return self::$_instance;
160
-    }
161
-
162
-
163
-    /**
164
-     * Resets the config
165
-     *
166
-     * @param bool    $hard_reset    if TRUE, sets EE_CONFig back to its original settings in the database. If FALSE
167
-     *                               (default) leaves the database alone, and merely resets the EE_Config object to
168
-     *                               reflect its state in the database
169
-     * @param boolean $reinstantiate if TRUE (default) call instance() and return it. Otherwise, just leave
170
-     *                               $_instance as NULL. Useful in case you want to forget about the old instance on
171
-     *                               EE_Config, but might not be ready to instantiate EE_Config currently (eg if the
172
-     *                               site was put into maintenance mode)
173
-     * @return EE_Config
174
-     */
175
-    public static function reset($hard_reset = false, $reinstantiate = true)
176
-    {
177
-        if (self::$_instance instanceof EE_Config) {
178
-            if ($hard_reset) {
179
-                self::$_instance->legacy_shortcodes_manager = null;
180
-                self::$_instance->_addon_option_names = array();
181
-                self::$_instance->_initialize_config();
182
-                self::$_instance->update_espresso_config();
183
-            }
184
-            self::$_instance->update_addon_option_names();
185
-        }
186
-        self::$_instance = null;
187
-        self::$initialized = false;
188
-        // we don't need to reset the static properties imo because those should
189
-        // only change when a module is added or removed. Currently we don't
190
-        // support removing a module during a request when it previously existed
191
-        if ($reinstantiate) {
192
-            return self::instance();
193
-        } else {
194
-            return null;
195
-        }
196
-    }
197
-
198
-
199
-    private function __construct()
200
-    {
201
-        if (self::$initialized) {
202
-            return;
203
-        }
204
-        self::$initialized = true;
205
-        do_action('AHEE__EE_Config__construct__begin', $this);
206
-        EE_Config::$_logging_enabled = apply_filters('FHEE__EE_Config___construct__logging_enabled', false);
207
-        // setup empty config classes
208
-        $this->_initialize_config();
209
-        // load existing EE site settings
210
-        $this->_load_core_config();
211
-        // confirm everything loaded correctly and set filtered defaults if not
212
-        $this->_verify_config();
213
-        //  register shortcodes and modules
214
-        add_action(
215
-            'AHEE__EE_System__register_shortcodes_modules_and_widgets',
216
-            [$this, 'register_shortcodes_and_modules'],
217
-            999
218
-        );
219
-        //  initialize shortcodes and modules
220
-        add_action('AHEE__EE_System__core_loaded_and_ready', [$this, 'initialize_shortcodes_and_modules']);
221
-        // register widgets
222
-        add_action('widgets_init', [$this, 'widgets_init'], 10);
223
-        // shutdown
224
-        add_action('shutdown', [$this, 'shutdown'], 10);
225
-        // construct__end hook
226
-        do_action('AHEE__EE_Config__construct__end', $this);
227
-        // hardcoded hack
228
-        $this->template_settings->current_espresso_theme = 'Espresso_Arabica_2014';
229
-    }
230
-
231
-
232
-    /**
233
-     * @return boolean
234
-     */
235
-    public static function logging_enabled()
236
-    {
237
-        return self::$_logging_enabled;
238
-    }
239
-
240
-
241
-    /**
242
-     * use to get the current theme if needed from static context
243
-     *
244
-     * @return string current theme set.
245
-     */
246
-    public static function get_current_theme()
247
-    {
248
-        return self::$_instance->template_settings->current_espresso_theme ?? 'Espresso_Arabica_2014';
249
-    }
250
-
251
-
252
-    /**
253
-     *        _initialize_config
254
-     *
255
-     * @access private
256
-     * @return void
257
-     */
258
-    private function _initialize_config()
259
-    {
260
-        EE_Config::trim_log();
261
-        // set defaults
262
-        $this->_addon_option_names = get_option(EE_Config::ADDON_OPTION_NAMES, array());
263
-        $this->addons = new stdClass();
264
-        // set _module_route_map
265
-        EE_Config::$_module_route_map = array();
266
-        // set _module_forward_map
267
-        EE_Config::$_module_forward_map = array();
268
-        // set _module_view_map
269
-        EE_Config::$_module_view_map = array();
270
-    }
271
-
272
-
273
-    /**
274
-     *        load core plugin configuration
275
-     *
276
-     * @access private
277
-     * @return void
278
-     */
279
-    private function _load_core_config()
280
-    {
281
-        // load_core_config__start hook
282
-        do_action('AHEE__EE_Config___load_core_config__start', $this);
283
-        $espresso_config = (array) $this->get_espresso_config();
284
-        // need to move the "addons" element to the end of the config array
285
-        // in case an addon config references one of the other config classes
286
-        $addons = $espresso_config['addons'] ?? new StdClass();
287
-        unset($espresso_config['addons']);
288
-        $espresso_config['addons'] = $addons;
289
-        foreach ($espresso_config as $config => $settings) {
290
-            // load_core_config__start hook
291
-            $settings = apply_filters(
292
-                'FHEE__EE_Config___load_core_config__config_settings',
293
-                $settings,
294
-                $config,
295
-                $this
296
-            );
297
-            if (is_object($settings) && property_exists($this, $config)) {
298
-                $this->{$config} = apply_filters('FHEE__EE_Config___load_core_config__' . $config, $settings);
299
-                // call configs populate method to ensure any defaults are set for empty values.
300
-                if (method_exists($settings, 'populate')) {
301
-                    $this->{$config}->populate();
302
-                }
303
-                if (method_exists($settings, 'do_hooks')) {
304
-                    $this->{$config}->do_hooks();
305
-                }
306
-            }
307
-        }
308
-        if (apply_filters('FHEE__EE_Config___load_core_config__update_espresso_config', false)) {
309
-            $this->update_espresso_config();
310
-        }
311
-        // load_core_config__end hook
312
-        do_action('AHEE__EE_Config___load_core_config__end', $this);
313
-    }
314
-
315
-
316
-    /**
317
-     *    _verify_config
318
-     *
319
-     * @access    protected
320
-     * @return    void
321
-     */
322
-    protected function _verify_config()
323
-    {
324
-        $this->core = $this->core instanceof EE_Core_Config
325
-            ? $this->core
326
-            : new EE_Core_Config();
327
-        $this->core = apply_filters('FHEE__EE_Config___initialize_config__core', $this->core);
328
-        $this->organization = $this->organization instanceof EE_Organization_Config
329
-            ? $this->organization
330
-            : new EE_Organization_Config();
331
-        $this->organization = apply_filters(
332
-            'FHEE__EE_Config___initialize_config__organization',
333
-            $this->organization
334
-        );
335
-        $this->currency = $this->currency instanceof EE_Currency_Config
336
-            ? $this->currency
337
-            : new EE_Currency_Config();
338
-        $this->currency = apply_filters('FHEE__EE_Config___initialize_config__currency', $this->currency);
339
-        $this->registration = $this->registration instanceof EE_Registration_Config
340
-            ? $this->registration
341
-            : new EE_Registration_Config();
342
-        $this->registration = apply_filters(
343
-            'FHEE__EE_Config___initialize_config__registration',
344
-            $this->registration
345
-        );
346
-        $this->admin = $this->admin instanceof EE_Admin_Config
347
-            ? $this->admin
348
-            : new EE_Admin_Config();
349
-        $this->admin = apply_filters('FHEE__EE_Config___initialize_config__admin', $this->admin);
350
-        $this->template_settings = $this->template_settings instanceof EE_Template_Config
351
-            ? $this->template_settings
352
-            : new EE_Template_Config();
353
-        $this->template_settings = apply_filters(
354
-            'FHEE__EE_Config___initialize_config__template_settings',
355
-            $this->template_settings
356
-        );
357
-        $this->map_settings = $this->map_settings instanceof EE_Map_Config
358
-            ? $this->map_settings
359
-            : new EE_Map_Config();
360
-        $this->map_settings = apply_filters(
361
-            'FHEE__EE_Config___initialize_config__map_settings',
362
-            $this->map_settings
363
-        );
364
-        $this->environment = $this->environment instanceof EE_Environment_Config
365
-            ? $this->environment
366
-            : new EE_Environment_Config();
367
-        $this->environment = apply_filters(
368
-            'FHEE__EE_Config___initialize_config__environment',
369
-            $this->environment
370
-        );
371
-        $this->tax_settings = $this->tax_settings instanceof EE_Tax_Config
372
-            ? $this->tax_settings
373
-            : new EE_Tax_Config();
374
-        $this->tax_settings = apply_filters(
375
-            'FHEE__EE_Config___initialize_config__tax_settings',
376
-            $this->tax_settings
377
-        );
378
-        $this->messages = apply_filters('FHEE__EE_Config__initialize_config__messages', $this->messages);
379
-        $this->messages = $this->messages instanceof EE_Messages_Config
380
-            ? $this->messages
381
-            : new EE_Messages_Config();
382
-        $this->gateway = $this->gateway instanceof EE_Gateway_Config
383
-            ? $this->gateway
384
-            : new EE_Gateway_Config();
385
-        $this->gateway = apply_filters('FHEE__EE_Config___initialize_config__gateway', $this->gateway);
386
-        $this->legacy_shortcodes_manager = null;
387
-    }
388
-
389
-
390
-    /**
391
-     *    get_espresso_config
392
-     *
393
-     * @access    public
394
-     * @return    array of espresso config stuff
395
-     */
396
-    public function get_espresso_config()
397
-    {
398
-        // grab espresso configuration
399
-        return apply_filters(
400
-            'FHEE__EE_Config__get_espresso_config__CFG',
401
-            get_option(EE_Config::OPTION_NAME, array())
402
-        );
403
-    }
404
-
405
-
406
-    /**
407
-     *    double_check_config_comparison
408
-     *
409
-     * @access    public
410
-     * @param string $option
411
-     * @param        $old_value
412
-     * @param        $value
413
-     */
414
-    public function double_check_config_comparison($option, $old_value, $value)
415
-    {
416
-        // make sure we're checking the ee config
417
-        if ($option === EE_Config::OPTION_NAME) {
418
-            // run a loose comparison of the old value against the new value for type and properties,
419
-            // but NOT exact instance like WP update_option does (ie: NOT type safe comparison)
420
-            if ($value != $old_value) {
421
-                // if they are NOT the same, then remove the hook,
422
-                // which means the subsequent update results will be based solely on the update query results
423
-                // the reason we do this is because, as stated above,
424
-                // WP update_option performs an exact instance comparison (===) on any update values passed to it
425
-                // this happens PRIOR to serialization and any subsequent update.
426
-                // If values are found to match their previous old value,
427
-                // then WP bails before performing any update.
428
-                // Since we are passing the EE_Config object, it is comparing the EXACT instance of the saved version
429
-                // it just pulled from the db, with the one being passed to it (which will not match).
430
-                // HOWEVER, once the object is serialized and passed off to MySQL to update,
431
-                // MySQL MAY ALSO NOT perform the update because
432
-                // the string it sees in the db looks the same as the new one it has been passed!!!
433
-                // This results in the query returning an "affected rows" value of ZERO,
434
-                // which gets returned immediately by WP update_option and looks like an error.
435
-                remove_action('update_option', array($this, 'check_config_updated'));
436
-            }
437
-        }
438
-    }
439
-
440
-
441
-    /**
442
-     *    update_espresso_config
443
-     *
444
-     * @access   public
445
-     */
446
-    protected function _reset_espresso_addon_config()
447
-    {
448
-        $this->_addon_option_names = array();
449
-        foreach ($this->addons as $addon_name => $addon_config_obj) {
450
-            $addon_config_obj = maybe_unserialize($addon_config_obj);
451
-            if ($addon_config_obj instanceof EE_Config_Base) {
452
-                $this->update_config('addons', $addon_name, $addon_config_obj, false);
453
-            }
454
-            $this->addons->{$addon_name} = null;
455
-        }
456
-    }
457
-
458
-
459
-    /**
460
-     *    update_espresso_config
461
-     *
462
-     * @access   public
463
-     * @param   bool $add_success
464
-     * @param   bool $add_error
465
-     * @return   bool
466
-     */
467
-    public function update_espresso_config($add_success = false, $add_error = true)
468
-    {
469
-        // don't allow config updates during WP heartbeats
470
-        /** @var RequestInterface $request */
471
-        $request = LoaderFactory::getLoader()->getShared(RequestInterface::class);
472
-        if ($request->isWordPressHeartbeat()) {
473
-            return false;
474
-        }
475
-        // commented out the following re: https://events.codebasehq.com/projects/event-espresso/tickets/8197
476
-        // $clone = clone( self::$_instance );
477
-        // self::$_instance = NULL;
478
-        do_action('AHEE__EE_Config__update_espresso_config__begin', $this);
479
-        $this->_reset_espresso_addon_config();
480
-        // hook into update_option because that happens AFTER the ( $value === $old_value ) conditional
481
-        // but BEFORE the actual update occurs
482
-        add_action('update_option', array($this, 'double_check_config_comparison'), 1, 3);
483
-        // don't want to persist legacy_shortcodes_manager, but don't want to lose it either
484
-        $legacy_shortcodes_manager = $this->legacy_shortcodes_manager;
485
-        $this->legacy_shortcodes_manager = null;
486
-        // now update "ee_config"
487
-        $saved = update_option(EE_Config::OPTION_NAME, $this);
488
-        $this->legacy_shortcodes_manager = $legacy_shortcodes_manager;
489
-        EE_Config::log(EE_Config::OPTION_NAME);
490
-        // if not saved... check if the hook we just added still exists;
491
-        // if it does, it means one of two things:
492
-        // that update_option bailed at the($value === $old_value) conditional,
493
-        // or...
494
-        // the db update query returned 0 rows affected
495
-        // (probably because the data  value was the same from its perspective)
496
-        // so the existence of the hook means that a negative result from update_option is NOT an error,
497
-        // but just means no update occurred, so don't display an error to the user.
498
-        // BUT... if update_option returns FALSE, AND the hook is missing,
499
-        // then it means that something truly went wrong
500
-        $saved = ! $saved ? has_action('update_option', array($this, 'double_check_config_comparison')) : $saved;
501
-        // remove our action since we don't want it in the system anymore
502
-        remove_action('update_option', array($this, 'double_check_config_comparison'), 1);
503
-        do_action('AHEE__EE_Config__update_espresso_config__end', $this, $saved);
504
-        // self::$_instance = $clone;
505
-        // unset( $clone );
506
-        // if config remains the same or was updated successfully
507
-        if ($saved) {
508
-            if ($add_success) {
509
-                EE_Error::add_success(
510
-                    esc_html__('The Event Espresso Configuration Settings have been successfully updated.', 'event_espresso'),
511
-                    __FILE__,
512
-                    __FUNCTION__,
513
-                    __LINE__
514
-                );
515
-            }
516
-            return true;
517
-        } else {
518
-            if ($add_error) {
519
-                EE_Error::add_error(
520
-                    esc_html__('The Event Espresso Configuration Settings were not updated.', 'event_espresso'),
521
-                    __FILE__,
522
-                    __FUNCTION__,
523
-                    __LINE__
524
-                );
525
-            }
526
-            return false;
527
-        }
528
-    }
529
-
530
-
531
-    /**
532
-     *    _verify_config_params
533
-     *
534
-     * @access    private
535
-     * @param    string         $section
536
-     * @param    string         $name
537
-     * @param    string         $config_class
538
-     * @param    EE_Config_Base $config_obj
539
-     * @param    array          $tests_to_run
540
-     * @param    bool           $display_errors
541
-     * @return    bool    TRUE on success, FALSE on fail
542
-     */
543
-    private function _verify_config_params(
544
-        $section = '',
545
-        $name = '',
546
-        $config_class = '',
547
-        $config_obj = null,
548
-        $tests_to_run = array(1, 2, 3, 4, 5, 6, 7, 8),
549
-        $display_errors = true
550
-    ) {
551
-        try {
552
-            foreach ($tests_to_run as $test) {
553
-                switch ($test) {
554
-                    // TEST #1 : check that section was set
555
-                    case 1:
556
-                        if (empty($section)) {
557
-                            if ($display_errors) {
558
-                                throw new EE_Error(
559
-                                    sprintf(
560
-                                        esc_html__(
561
-                                            'No configuration section has been provided while attempting to save "%s".',
562
-                                            'event_espresso'
563
-                                        ),
564
-                                        $config_class
565
-                                    )
566
-                                );
567
-                            }
568
-                            return false;
569
-                        }
570
-                        break;
571
-                    // TEST #2 : check that settings section exists
572
-                    case 2:
573
-                        if (! isset($this->{$section})) {
574
-                            if ($display_errors) {
575
-                                throw new EE_Error(
576
-                                    sprintf(
577
-                                        esc_html__('The "%s" configuration section does not exist.', 'event_espresso'),
578
-                                        $section
579
-                                    )
580
-                                );
581
-                            }
582
-                            return false;
583
-                        }
584
-                        break;
585
-                    // TEST #3 : check that section is the proper format
586
-                    case 3:
587
-                        if (
588
-                            ! ($this->{$section} instanceof EE_Config_Base || $this->{$section} instanceof stdClass)
589
-                        ) {
590
-                            if ($display_errors) {
591
-                                throw new EE_Error(
592
-                                    sprintf(
593
-                                        esc_html__(
594
-                                            'The "%s" configuration settings have not been formatted correctly.',
595
-                                            'event_espresso'
596
-                                        ),
597
-                                        $section
598
-                                    )
599
-                                );
600
-                            }
601
-                            return false;
602
-                        }
603
-                        break;
604
-                    // TEST #4 : check that config section name has been set
605
-                    case 4:
606
-                        if (empty($name)) {
607
-                            if ($display_errors) {
608
-                                throw new EE_Error(
609
-                                    esc_html__(
610
-                                        'No name has been provided for the specific configuration section.',
611
-                                        'event_espresso'
612
-                                    )
613
-                                );
614
-                            }
615
-                            return false;
616
-                        }
617
-                        break;
618
-                    // TEST #5 : check that a config class name has been set
619
-                    case 5:
620
-                        if (empty($config_class)) {
621
-                            if ($display_errors) {
622
-                                throw new EE_Error(
623
-                                    esc_html__(
624
-                                        'No class name has been provided for the specific configuration section.',
625
-                                        'event_espresso'
626
-                                    )
627
-                                );
628
-                            }
629
-                            return false;
630
-                        }
631
-                        break;
632
-                    // TEST #6 : verify config class is accessible
633
-                    case 6:
634
-                        if (! class_exists($config_class)) {
635
-                            if ($display_errors) {
636
-                                throw new EE_Error(
637
-                                    sprintf(
638
-                                        esc_html__(
639
-                                            'The "%s" class does not exist. Please ensure that an autoloader has been set for it.',
640
-                                            'event_espresso'
641
-                                        ),
642
-                                        $config_class
643
-                                    )
644
-                                );
645
-                            }
646
-                            return false;
647
-                        }
648
-                        break;
649
-                    // TEST #7 : check that config has even been set
650
-                    case 7:
651
-                        if (! isset($this->{$section}->{$name})) {
652
-                            if ($display_errors) {
653
-                                throw new EE_Error(
654
-                                    sprintf(
655
-                                        esc_html__('No configuration has been set for "%1$s->%2$s".', 'event_espresso'),
656
-                                        $section,
657
-                                        $name
658
-                                    )
659
-                                );
660
-                            }
661
-                            return false;
662
-                        } else {
663
-                            // and make sure it's not serialized
664
-                            $this->{$section}->{$name} = maybe_unserialize($this->{$section}->{$name});
665
-                        }
666
-                        break;
667
-                    // TEST #8 : check that config is the requested type
668
-                    case 8:
669
-                        if (! $this->{$section}->{$name} instanceof $config_class) {
670
-                            if ($display_errors) {
671
-                                throw new EE_Error(
672
-                                    sprintf(
673
-                                        esc_html__(
674
-                                            'The configuration for "%1$s->%2$s" is not of the "%3$s" class.',
675
-                                            'event_espresso'
676
-                                        ),
677
-                                        $section,
678
-                                        $name,
679
-                                        $config_class
680
-                                    )
681
-                                );
682
-                            }
683
-                            return false;
684
-                        }
685
-                        break;
686
-                    // TEST #9 : verify config object
687
-                    case 9:
688
-                        if (! $config_obj instanceof EE_Config_Base) {
689
-                            if ($display_errors) {
690
-                                throw new EE_Error(
691
-                                    sprintf(
692
-                                        esc_html__('The "%s" class is not an instance of EE_Config_Base.', 'event_espresso'),
693
-                                        print_r($config_obj, true)
694
-                                    )
695
-                                );
696
-                            }
697
-                            return false;
698
-                        }
699
-                        break;
700
-                }
701
-            }
702
-        } catch (EE_Error $e) {
703
-            $e->get_error();
704
-        }
705
-        // you have successfully run the gauntlet
706
-        return true;
707
-    }
708
-
709
-
710
-    /**
711
-     *    _generate_config_option_name
712
-     *
713
-     * @access        protected
714
-     * @param        string $section
715
-     * @param        string $name
716
-     * @return        string
717
-     */
718
-    private function _generate_config_option_name($section = '', $name = '')
719
-    {
720
-        return 'ee_config-' . strtolower($section . '-' . str_replace(array('EE_', 'EED_'), '', $name));
721
-    }
722
-
723
-
724
-    /**
725
-     *    _set_config_class
726
-     * ensures that a config class is set, either from a passed config class or one generated from the config name
727
-     *
728
-     * @access    private
729
-     * @param    string $config_class
730
-     * @param    string $name
731
-     * @return    string
732
-     */
733
-    private function _set_config_class($config_class = '', $name = '')
734
-    {
735
-        return ! empty($config_class)
736
-            ? $config_class
737
-            : str_replace(' ', '_', ucwords(str_replace('_', ' ', $name))) . '_Config';
738
-    }
739
-
740
-
741
-    /**
742
-     * @param string              $section
743
-     * @param string              $name
744
-     * @param string              $config_class
745
-     * @param EE_Config_Base|null $config_obj
746
-     * @return EE_Config_Base
747
-     */
748
-    public function set_config(
749
-        string $section = '',
750
-        string $name = '',
751
-        string $config_class = '',
752
-        EE_Config_Base $config_obj = null
753
-    ): ?EE_Config_Base {
754
-        // ensure config class is set to something
755
-        $config_class = $this->_set_config_class($config_class, $name);
756
-        // run tests 1-4, 6, and 7 to verify all config params are set and valid
757
-        if (! $this->_verify_config_params($section, $name, $config_class, null, array(1, 2, 3, 4, 5, 6))) {
758
-            return null;
759
-        }
760
-        $config_option_name = $this->_generate_config_option_name($section, $name);
761
-        // if the config option name hasn't been added yet to the list of option names we're tracking, then do so now
762
-        if (! isset($this->_addon_option_names[ $config_option_name ])) {
763
-            $this->_addon_option_names[ $config_option_name ] = $config_class;
764
-            $this->update_addon_option_names();
765
-        }
766
-        // verify the incoming config object but suppress errors
767
-        if (! $this->_verify_config_params($section, $name, $config_class, $config_obj, array(9), false)) {
768
-            $config_obj = new $config_class();
769
-        }
770
-        if (get_option($config_option_name)) {
771
-            EE_Config::log($config_option_name);
772
-            try {
773
-                update_option($config_option_name, $config_obj);
774
-            } catch (Exception $exception) {
775
-                throw new DomainException(
776
-                    sprintf(
777
-                        esc_html__(
778
-                            'The following exception occurred while attempting to update the "%1$s" class for config section "%2$s->%3$s": %4$s',
779
-                            'event_espresso'
780
-                        ),
781
-                        $config_class,
782
-                        $section,
783
-                        $name,
784
-                        $exception->getMessage()
785
-                    )
786
-                );
787
-            }
788
-            $this->{$section}->{$name} = $config_obj;
789
-            return $this->{$section}->{$name};
790
-        } else {
791
-            // create a wp-option for this config
792
-            if (add_option($config_option_name, $config_obj, '', 'no')) {
793
-                $this->{$section}->{$name} = maybe_unserialize($config_obj);
794
-                return $this->{$section}->{$name};
795
-            } else {
796
-                EE_Error::add_error(
797
-                    sprintf(esc_html__('The "%s" could not be saved to the database.', 'event_espresso'), $config_class),
798
-                    __FILE__,
799
-                    __FUNCTION__,
800
-                    __LINE__
801
-                );
802
-                return null;
803
-            }
804
-        }
805
-    }
806
-
807
-
808
-    /**
809
-     *    update_config
810
-     * Important: the config object must ALREADY be set, otherwise this will produce an error.
811
-     *
812
-     * @access    public
813
-     * @param    string                $section
814
-     * @param    string                $name
815
-     * @param    EE_Config_Base|string $config_obj
816
-     * @param    bool                  $throw_errors
817
-     * @return    bool
818
-     */
819
-    public function update_config($section = '', $name = '', $config_obj = '', $throw_errors = true)
820
-    {
821
-        // don't allow config updates during WP heartbeats
822
-        /** @var RequestInterface $request */
823
-        $request = LoaderFactory::getLoader()->getShared(RequestInterface::class);
824
-        if ($request->isWordPressHeartbeat()) {
825
-            return false;
826
-        }
827
-        $config_obj = maybe_unserialize($config_obj);
828
-        // get class name of the incoming object
829
-        $config_class = get_class($config_obj);
830
-        // run tests 1-5 and 9 to verify config
831
-        if (
832
-            ! $this->_verify_config_params(
833
-                $section,
834
-                $name,
835
-                $config_class,
836
-                $config_obj,
837
-                array(1, 2, 3, 4, 7, 9)
838
-            )
839
-        ) {
840
-            return false;
841
-        }
842
-        $config_option_name = $this->_generate_config_option_name($section, $name);
843
-        // check if config object has been added to db by seeing if config option name is in $this->_addon_option_names array
844
-        if (! isset($this->_addon_option_names[ $config_option_name ])) {
845
-            // save new config to db
846
-            if ($this->set_config($section, $name, $config_class, $config_obj)) {
847
-                return true;
848
-            }
849
-        } else {
850
-            // first check if the record already exists
851
-            $existing_config = get_option($config_option_name);
852
-            $config_obj = serialize($config_obj);
853
-            // just return if db record is already up-to-date (NOT type safe comparison)
854
-            if ($existing_config == $config_obj) {
855
-                $this->{$section}->{$name} = $config_obj;
856
-                return true;
857
-            } elseif (update_option($config_option_name, $config_obj)) {
858
-                EE_Config::log($config_option_name);
859
-                // update wp-option for this config class
860
-                $this->{$section}->{$name} = $config_obj;
861
-                return true;
862
-            } elseif ($throw_errors) {
863
-                EE_Error::add_error(
864
-                    sprintf(
865
-                        esc_html__(
866
-                            'The "%1$s" object stored at"%2$s" was not successfully updated in the database.',
867
-                            'event_espresso'
868
-                        ),
869
-                        $config_class,
870
-                        'EE_Config->' . $section . '->' . $name
871
-                    ),
872
-                    __FILE__,
873
-                    __FUNCTION__,
874
-                    __LINE__
875
-                );
876
-            }
877
-        }
878
-        return false;
879
-    }
880
-
881
-
882
-    /**
883
-     *    get_config
884
-     *
885
-     * @access    public
886
-     * @param    string $section
887
-     * @param    string $name
888
-     * @param    string $config_class
889
-     * @return    mixed EE_Config_Base | NULL
890
-     */
891
-    public function get_config($section = '', $name = '', $config_class = '')
892
-    {
893
-        // ensure config class is set to something
894
-        $config_class = $this->_set_config_class($config_class, $name);
895
-        // run tests 1-4, 6 and 7 to verify that all params have been set
896
-        if (! $this->_verify_config_params($section, $name, $config_class, null, array(1, 2, 3, 4, 5, 6))) {
897
-            return null;
898
-        }
899
-        // now test if the requested config object exists, but suppress errors
900
-        if ($this->_verify_config_params($section, $name, $config_class, null, array(7, 8), false)) {
901
-            // config already exists, so pass it back
902
-            return $this->{$section}->{$name};
903
-        }
904
-        // load config option from db if it exists
905
-        $config_obj = $this->get_config_option($this->_generate_config_option_name($section, $name));
906
-        // verify the newly retrieved config object, but suppress errors
907
-        if ($this->_verify_config_params($section, $name, $config_class, $config_obj, array(9), false)) {
908
-            // config is good, so set it and pass it back
909
-            $this->{$section}->{$name} = $config_obj;
910
-            return $this->{$section}->{$name};
911
-        }
912
-        // oops! $config_obj is not already set and does not exist in the db, so create a new one
913
-        $config_obj = $this->set_config($section, $name, $config_class);
914
-        // verify the newly created config object
915
-        if ($this->_verify_config_params($section, $name, $config_class, $config_obj, array(9))) {
916
-            return $this->{$section}->{$name};
917
-        } else {
918
-            EE_Error::add_error(
919
-                sprintf(esc_html__('The "%s" could not be retrieved from the database.', 'event_espresso'), $config_class),
920
-                __FILE__,
921
-                __FUNCTION__,
922
-                __LINE__
923
-            );
924
-        }
925
-        return null;
926
-    }
927
-
928
-
929
-    /**
930
-     *    get_config_option
931
-     *
932
-     * @access    public
933
-     * @param    string $config_option_name
934
-     * @return    mixed EE_Config_Base | FALSE
935
-     */
936
-    public function get_config_option($config_option_name = '')
937
-    {
938
-        // retrieve the wp-option for this config class.
939
-        $config_option = maybe_unserialize(get_option($config_option_name, array()));
940
-        if (empty($config_option)) {
941
-            EE_Config::log($config_option_name . '-NOT-FOUND');
942
-        }
943
-        return $config_option;
944
-    }
945
-
946
-
947
-    /**
948
-     * log
949
-     *
950
-     * @param string $config_option_name
951
-     */
952
-    public static function log($config_option_name = '')
953
-    {
954
-        if (EE_Config::logging_enabled() && ! empty($config_option_name)) {
955
-            $config_log = get_option(EE_Config::LOG_NAME, array());
956
-            /** @var RequestParams $request */
957
-            $request = LoaderFactory::getLoader()->getShared(RequestParams::class);
958
-            $config_log[ (string) microtime(true) ] = array(
959
-                'config_name' => $config_option_name,
960
-                'request'     => $request->requestParams(),
961
-            );
962
-            update_option(EE_Config::LOG_NAME, $config_log);
963
-        }
964
-    }
965
-
966
-
967
-    /**
968
-     * trim_log
969
-     * reduces the size of the config log to the length specified by EE_Config::LOG_LENGTH
970
-     */
971
-    public static function trim_log()
972
-    {
973
-        if (! EE_Config::logging_enabled()) {
974
-            return;
975
-        }
976
-        $config_log = maybe_unserialize(get_option(EE_Config::LOG_NAME, array()));
977
-        $log_length = count($config_log);
978
-        if ($log_length > EE_Config::LOG_LENGTH) {
979
-            ksort($config_log);
980
-            $config_log = array_slice($config_log, $log_length - EE_Config::LOG_LENGTH, null, true);
981
-            update_option(EE_Config::LOG_NAME, $config_log);
982
-        }
983
-    }
984
-
985
-
986
-    /**
987
-     *    get_page_for_posts
988
-     *    if the wp-option "show_on_front" is set to "page", then this is the post_name for the post set in the
989
-     *    wp-option "page_for_posts", or "posts" if no page is selected
990
-     *
991
-     * @access    public
992
-     * @return    string
993
-     */
994
-    public static function get_page_for_posts()
995
-    {
996
-        $page_for_posts = get_option('page_for_posts');
997
-        if (! $page_for_posts) {
998
-            return 'posts';
999
-        }
1000
-        global $wpdb;
1001
-        $SQL = "SELECT post_name from $wpdb->posts WHERE post_type='posts' OR post_type='page' AND post_status='publish' AND ID=%d";
1002
-        return $wpdb->get_var($wpdb->prepare($SQL, $page_for_posts));
1003
-    }
1004
-
1005
-
1006
-    /**
1007
-     *    register_shortcodes_and_modules.
1008
-     *    At this point, it's too early to tell if we're maintenance mode or not.
1009
-     *    In fact, this is where we give modules a chance to let core know they exist
1010
-     *    so they can help trigger maintenance mode if it's needed
1011
-     *
1012
-     * @access    public
1013
-     * @return    void
1014
-     */
1015
-    public function register_shortcodes_and_modules()
1016
-    {
1017
-        // allow modules to set hooks for the rest of the system
1018
-        EE_Registry::instance()->modules = $this->_register_modules();
1019
-    }
1020
-
1021
-
1022
-    /**
1023
-     *    initialize_shortcodes_and_modules
1024
-     *    meaning they can start adding their hooks to get stuff done
1025
-     *
1026
-     * @access    public
1027
-     * @return    void
1028
-     */
1029
-    public function initialize_shortcodes_and_modules()
1030
-    {
1031
-        // allow modules to set hooks for the rest of the system
1032
-        $this->_initialize_modules();
1033
-    }
1034
-
1035
-
1036
-    /**
1037
-     *    widgets_init
1038
-     *
1039
-     * @access private
1040
-     * @return void
1041
-     */
1042
-    public function widgets_init()
1043
-    {
1044
-        // only init widgets on admin pages when not in complete maintenance, and
1045
-        // on frontend when not in any maintenance mode
1046
-        if (
1047
-            MaintenanceStatus::isDisabled()
1048
-            || (is_admin() && MaintenanceStatus::isNotFullSite())
1049
-        ) {
1050
-            // grab list of installed widgets
1051
-            $widgets_to_register = glob(EE_WIDGETS . '*', GLOB_ONLYDIR);
1052
-            // filter list of modules to register
1053
-            $widgets_to_register = apply_filters(
1054
-                'FHEE__EE_Config__register_widgets__widgets_to_register',
1055
-                $widgets_to_register
1056
-            );
1057
-            if (! empty($widgets_to_register)) {
1058
-                // cycle thru widget folders
1059
-                foreach ($widgets_to_register as $widget_path) {
1060
-                    // add to list of installed widget modules
1061
-                    EE_Config::register_ee_widget($widget_path);
1062
-                }
1063
-            }
1064
-            // filter list of installed modules
1065
-            EE_Registry::instance()->widgets = apply_filters(
1066
-                'FHEE__EE_Config__register_widgets__installed_widgets',
1067
-                EE_Registry::instance()->widgets
1068
-            );
1069
-        }
1070
-    }
1071
-
1072
-
1073
-    /**
1074
-     *    register_ee_widget - makes core aware of this widget
1075
-     *
1076
-     * @access    public
1077
-     * @param    string $widget_path - full path up to and including widget folder
1078
-     * @return    void
1079
-     */
1080
-    public static function register_ee_widget($widget_path = null)
1081
-    {
1082
-        do_action('AHEE__EE_Config__register_widget__begin', $widget_path);
1083
-        $widget_ext = '.widget.php';
1084
-        // make all separators match
1085
-        $widget_path = rtrim(str_replace('\\', DS, $widget_path), DS);
1086
-        // does the file path INCLUDE the actual file name as part of the path ?
1087
-        if (strpos($widget_path, $widget_ext) !== false) {
1088
-            // grab and shortcode file name from directory name and break apart at dots
1089
-            $file_name = explode('.', basename($widget_path));
1090
-            // take first segment from file name pieces and remove class prefix if it exists
1091
-            $widget = strpos($file_name[0], 'EEW_') === 0 ? substr($file_name[0], 4) : $file_name[0];
1092
-            // sanitize shortcode directory name
1093
-            $widget = sanitize_key($widget);
1094
-            // now we need to rebuild the shortcode path
1095
-            $widget_path = explode('/', $widget_path);
1096
-            // remove last segment
1097
-            array_pop($widget_path);
1098
-            // glue it back together
1099
-            $widget_path = implode(DS, $widget_path);
1100
-        } else {
1101
-            // grab and sanitize widget directory name
1102
-            $widget = sanitize_key(basename($widget_path));
1103
-        }
1104
-        // create classname from widget directory name
1105
-        $widget = str_replace(' ', '_', ucwords(str_replace('_', ' ', $widget)));
1106
-        // add class prefix
1107
-        $widget_class = 'EEW_' . $widget;
1108
-        // does the widget exist ?
1109
-        if (! is_readable($widget_path . '/' . $widget_class . $widget_ext)) {
1110
-            $msg = sprintf(
1111
-                esc_html__(
1112
-                    'The requested %s widget file could not be found or is not readable due to file permissions. Please ensure the following path is correct: %s',
1113
-                    'event_espresso'
1114
-                ),
1115
-                $widget_class,
1116
-                $widget_path . '/' . $widget_class . $widget_ext
1117
-            );
1118
-            EE_Error::add_error($msg . '||' . $msg, __FILE__, __FUNCTION__, __LINE__);
1119
-            return;
1120
-        }
1121
-        // load the widget class file
1122
-        require_once($widget_path . '/' . $widget_class . $widget_ext);
1123
-        // verify that class exists
1124
-        if (! class_exists($widget_class)) {
1125
-            $msg = sprintf(esc_html__('The requested %s widget class does not exist.', 'event_espresso'), $widget_class);
1126
-            EE_Error::add_error($msg . '||' . $msg, __FILE__, __FUNCTION__, __LINE__);
1127
-            return;
1128
-        }
1129
-        register_widget($widget_class);
1130
-        // add to array of registered widgets
1131
-        EE_Registry::instance()->widgets->{$widget_class} = $widget_path . '/' . $widget_class . $widget_ext;
1132
-    }
1133
-
1134
-
1135
-    /**
1136
-     *        _register_modules
1137
-     *
1138
-     * @access private
1139
-     * @return array
1140
-     */
1141
-    private function _register_modules()
1142
-    {
1143
-        // grab list of installed modules
1144
-        $modules_to_register = glob(EE_MODULES . '*', GLOB_ONLYDIR);
1145
-        // filter list of modules to register
1146
-        $modules_to_register = apply_filters(
1147
-            'FHEE__EE_Config__register_modules__modules_to_register',
1148
-            $modules_to_register
1149
-        );
1150
-        if (! empty($modules_to_register)) {
1151
-            // loop through folders
1152
-            foreach ($modules_to_register as $module_path) {
1153
-                /**TEMPORARILY EXCLUDE gateways from modules for time being**/
1154
-                if (
1155
-                    $module_path !== EE_MODULES . 'zzz-copy-this-module-template'
1156
-                    && $module_path !== EE_MODULES . 'gateways'
1157
-                ) {
1158
-                    // add to list of installed modules
1159
-                    EE_Config::register_module($module_path);
1160
-                }
1161
-            }
1162
-        }
1163
-        // filter list of installed modules
1164
-        return apply_filters(
1165
-            'FHEE__EE_Config___register_modules__installed_modules',
1166
-            EE_Registry::instance()->modules
1167
-        );
1168
-    }
1169
-
1170
-
1171
-    /**
1172
-     *    register_module - makes core aware of this module
1173
-     *
1174
-     * @access    public
1175
-     * @param    string $module_path - full path up to and including module folder
1176
-     * @return    bool
1177
-     */
1178
-    public static function register_module($module_path = null)
1179
-    {
1180
-        do_action('AHEE__EE_Config__register_module__begin', $module_path);
1181
-        $module_ext = '.module.php';
1182
-        // make all separators match
1183
-        $module_path = str_replace(array('\\', '/'), '/', $module_path);
1184
-        // does the file path INCLUDE the actual file name as part of the path ?
1185
-        if (strpos($module_path, $module_ext) !== false) {
1186
-            // grab and shortcode file name from directory name and break apart at dots
1187
-            $module_file = explode('.', basename($module_path));
1188
-            // now we need to rebuild the shortcode path
1189
-            $module_path = explode('/', $module_path);
1190
-            // remove last segment
1191
-            array_pop($module_path);
1192
-            // glue it back together
1193
-            $module_path = implode('/', $module_path) . '/';
1194
-            // take first segment from file name pieces and sanitize it
1195
-            $module = preg_replace('/[^a-zA-Z0-9_\-]/', '', $module_file[0]);
1196
-            // ensure class prefix is added
1197
-            $module_class = strpos($module, 'EED_') !== 0 ? 'EED_' . $module : $module;
1198
-        } else {
1199
-            // we need to generate the filename based off of the folder name
1200
-            // grab and sanitize module name
1201
-            $module = strtolower(basename($module_path));
1202
-            $module = preg_replace('/[^a-z0-9_\-]/', '', $module);
1203
-            // like trailingslashit()
1204
-            $module_path = rtrim($module_path, '/') . '/';
1205
-            // create classname from module directory name
1206
-            $module = str_replace(' ', '_', ucwords(str_replace('_', ' ', $module)));
1207
-            // add class prefix
1208
-            $module_class = 'EED_' . $module;
1209
-        }
1210
-        // does the module exist ?
1211
-        if (! is_readable($module_path . '/' . $module_class . $module_ext)) {
1212
-            $msg = sprintf(
1213
-                esc_html__(
1214
-                    'The requested %s module file could not be found or is not readable due to file permissions.',
1215
-                    'event_espresso'
1216
-                ),
1217
-                $module
1218
-            );
1219
-            EE_Error::add_error($msg . '||' . $msg, __FILE__, __FUNCTION__, __LINE__);
1220
-            return false;
1221
-        }
1222
-        // load the module class file
1223
-        require_once($module_path . $module_class . $module_ext);
1224
-        // verify that class exists
1225
-        if (! class_exists($module_class)) {
1226
-            $msg = sprintf(esc_html__('The requested %s module class does not exist.', 'event_espresso'), $module_class);
1227
-            EE_Error::add_error($msg . '||' . $msg, __FILE__, __FUNCTION__, __LINE__);
1228
-            return false;
1229
-        }
1230
-        // add to array of registered modules
1231
-        EE_Registry::instance()->modules->{$module_class} = $module_path . $module_class . $module_ext;
1232
-        do_action(
1233
-            'AHEE__EE_Config__register_module__complete',
1234
-            $module_class,
1235
-            EE_Registry::instance()->modules->{$module_class}
1236
-        );
1237
-        return true;
1238
-    }
1239
-
1240
-
1241
-    /**
1242
-     *    _initialize_modules
1243
-     *    allow modules to set hooks for the rest of the system
1244
-     *
1245
-     * @access private
1246
-     * @return void
1247
-     */
1248
-    private function _initialize_modules()
1249
-    {
1250
-        // cycle thru shortcode folders
1251
-        foreach (EE_Registry::instance()->modules as $module_class => $module_path) {
1252
-            // fire the shortcode class's set_hooks methods in case it needs to hook into other parts of the system
1253
-            // which set hooks ?
1254
-            if (is_admin() && is_callable([$module_class, 'set_hooks_admin'])) {
1255
-                // fire immediately
1256
-                call_user_func([$module_class, 'set_hooks_admin']);
1257
-            } else {
1258
-                // delay until other systems are online
1259
-                add_action(
1260
-                    'AHEE__EE_System__set_hooks_for_shortcodes_modules_and_addons',
1261
-                    array($module_class, 'set_hooks')
1262
-                );
1263
-            }
1264
-        }
1265
-    }
1266
-
1267
-
1268
-    /**
1269
-     *    register_route - adds module method routes to route_map
1270
-     *
1271
-     * @access    public
1272
-     * @param    string $route       - "pretty" public alias for module method
1273
-     * @param    string $module      - module name (classname without EED_ prefix)
1274
-     * @param    string $method_name - the actual module method to be routed to
1275
-     * @param    string $key         - url param key indicating a route is being called
1276
-     * @return    bool
1277
-     */
1278
-    public static function register_route($route = null, $module = null, $method_name = null, $key = 'ee')
1279
-    {
1280
-        do_action('AHEE__EE_Config__register_route__begin', $route, $module, $method_name);
1281
-        $module = str_replace('EED_', '', $module);
1282
-        $module_class = 'EED_' . $module;
1283
-        if (! isset(EE_Registry::instance()->modules->{$module_class})) {
1284
-            $msg = sprintf(esc_html__('The module %s has not been registered.', 'event_espresso'), $module);
1285
-            EE_Error::add_error($msg . '||' . $msg, __FILE__, __FUNCTION__, __LINE__);
1286
-            return false;
1287
-        }
1288
-        if (empty($route)) {
1289
-            $msg = sprintf(esc_html__('No route has been supplied.', 'event_espresso'), $route);
1290
-            EE_Error::add_error($msg . '||' . $msg, __FILE__, __FUNCTION__, __LINE__);
1291
-            return false;
1292
-        }
1293
-        if (! method_exists('EED_' . $module, $method_name)) {
1294
-            $msg = sprintf(
1295
-                esc_html__('A valid class method for the %s route has not been supplied.', 'event_espresso'),
1296
-                $route
1297
-            );
1298
-            EE_Error::add_error($msg . '||' . $msg, __FILE__, __FUNCTION__, __LINE__);
1299
-            return false;
1300
-        }
1301
-        EE_Config::$_module_route_map[ (string) $key ][ (string) $route ] = array('EED_' . $module, $method_name);
1302
-        return true;
1303
-    }
1304
-
1305
-
1306
-    /**
1307
-     *    get_route - get module method route
1308
-     *
1309
-     * @access    public
1310
-     * @param    string $route - "pretty" public alias for module method
1311
-     * @param    string $key   - url param key indicating a route is being called
1312
-     * @return    string
1313
-     */
1314
-    public static function get_route($route = null, $key = 'ee')
1315
-    {
1316
-        do_action('AHEE__EE_Config__get_route__begin', $route);
1317
-        $route = (string) apply_filters('FHEE__EE_Config__get_route', $route);
1318
-        if (isset(EE_Config::$_module_route_map[ $key ][ $route ])) {
1319
-            return EE_Config::$_module_route_map[ $key ][ $route ];
1320
-        }
1321
-        return null;
1322
-    }
1323
-
1324
-
1325
-    /**
1326
-     *    get_routes - get ALL module method routes
1327
-     *
1328
-     * @access    public
1329
-     * @return    array
1330
-     */
1331
-    public static function get_routes()
1332
-    {
1333
-        return EE_Config::$_module_route_map;
1334
-    }
1335
-
1336
-
1337
-    /**
1338
-     *    register_forward - allows modules to forward request to another module for further processing
1339
-     *
1340
-     * @access    public
1341
-     * @param    string       $route   - "pretty" public alias for module method
1342
-     * @param    integer      $status  - integer value corresponding  to status constant strings set in module parent
1343
-     *                                 class, allows different forwards to be served based on status
1344
-     * @param    array|string $forward - function name or array( class, method )
1345
-     * @param    string       $key     - url param key indicating a route is being called
1346
-     * @return    bool
1347
-     */
1348
-    public static function register_forward($route = null, $status = 0, $forward = null, $key = 'ee')
1349
-    {
1350
-        do_action('AHEE__EE_Config__register_forward', $route, $status, $forward);
1351
-        if (! isset(EE_Config::$_module_route_map[ $key ][ $route ]) || empty($route)) {
1352
-            $msg = sprintf(
1353
-                esc_html__('The module route %s for this forward has not been registered.', 'event_espresso'),
1354
-                $route
1355
-            );
1356
-            EE_Error::add_error($msg . '||' . $msg, __FILE__, __FUNCTION__, __LINE__);
1357
-            return false;
1358
-        }
1359
-        if (empty($forward)) {
1360
-            $msg = sprintf(esc_html__('No forwarding route has been supplied.', 'event_espresso'), $route);
1361
-            EE_Error::add_error($msg . '||' . $msg, __FILE__, __FUNCTION__, __LINE__);
1362
-            return false;
1363
-        }
1364
-        if (is_array($forward)) {
1365
-            if (! isset($forward[1])) {
1366
-                $msg = sprintf(
1367
-                    esc_html__('A class method for the %s forwarding route has not been supplied.', 'event_espresso'),
1368
-                    $route
1369
-                );
1370
-                EE_Error::add_error($msg . '||' . $msg, __FILE__, __FUNCTION__, __LINE__);
1371
-                return false;
1372
-            }
1373
-            if (! method_exists($forward[0], $forward[1])) {
1374
-                $msg = sprintf(
1375
-                    esc_html__('The class method %s for the %s forwarding route is in invalid.', 'event_espresso'),
1376
-                    $forward[1],
1377
-                    $route
1378
-                );
1379
-                EE_Error::add_error($msg . '||' . $msg, __FILE__, __FUNCTION__, __LINE__);
1380
-                return false;
1381
-            }
1382
-        } elseif (! function_exists($forward)) {
1383
-            $msg = sprintf(
1384
-                esc_html__('The function %s for the %s forwarding route is in invalid.', 'event_espresso'),
1385
-                $forward,
1386
-                $route
1387
-            );
1388
-            EE_Error::add_error($msg . '||' . $msg, __FILE__, __FUNCTION__, __LINE__);
1389
-            return false;
1390
-        }
1391
-        EE_Config::$_module_forward_map[ $key ][ $route ][ absint($status) ] = $forward;
1392
-        return true;
1393
-    }
1394
-
1395
-
1396
-    /**
1397
-     *    get_forward - get forwarding route
1398
-     *
1399
-     * @access    public
1400
-     * @param    string  $route  - "pretty" public alias for module method
1401
-     * @param    integer $status - integer value corresponding  to status constant strings set in module parent class,
1402
-     *                           allows different forwards to be served based on status
1403
-     * @param    string  $key    - url param key indicating a route is being called
1404
-     * @return    string
1405
-     */
1406
-    public static function get_forward($route = null, $status = 0, $key = 'ee')
1407
-    {
1408
-        do_action('AHEE__EE_Config__get_forward__begin', $route, $status);
1409
-        if (isset(EE_Config::$_module_forward_map[ $key ][ $route ][ $status ])) {
1410
-            return apply_filters(
1411
-                'FHEE__EE_Config__get_forward',
1412
-                EE_Config::$_module_forward_map[ $key ][ $route ][ $status ],
1413
-                $route,
1414
-                $status
1415
-            );
1416
-        }
1417
-        return null;
1418
-    }
1419
-
1420
-
1421
-    /**
1422
-     *    register_forward - allows modules to specify different view templates for different method routes and status
1423
-     *    results
1424
-     *
1425
-     * @access    public
1426
-     * @param    string  $route  - "pretty" public alias for module method
1427
-     * @param    integer $status - integer value corresponding  to status constant strings set in module parent class,
1428
-     *                           allows different views to be served based on status
1429
-     * @param    string  $view
1430
-     * @param    string  $key    - url param key indicating a route is being called
1431
-     * @return    bool
1432
-     */
1433
-    public static function register_view($route = null, $status = 0, $view = null, $key = 'ee')
1434
-    {
1435
-        do_action('AHEE__EE_Config__register_view__begin', $route, $status, $view);
1436
-        if (! isset(EE_Config::$_module_route_map[ $key ][ $route ]) || empty($route)) {
1437
-            $msg = sprintf(
1438
-                esc_html__('The module route %s for this view has not been registered.', 'event_espresso'),
1439
-                $route
1440
-            );
1441
-            EE_Error::add_error($msg . '||' . $msg, __FILE__, __FUNCTION__, __LINE__);
1442
-            return false;
1443
-        }
1444
-        if (! is_readable($view)) {
1445
-            $msg = sprintf(
1446
-                esc_html__(
1447
-                    'The %s view file could not be found or is not readable due to file permissions.',
1448
-                    'event_espresso'
1449
-                ),
1450
-                $view
1451
-            );
1452
-            EE_Error::add_error($msg . '||' . $msg, __FILE__, __FUNCTION__, __LINE__);
1453
-            return false;
1454
-        }
1455
-        EE_Config::$_module_view_map[ $key ][ $route ][ absint($status) ] = $view;
1456
-        return true;
1457
-    }
1458
-
1459
-
1460
-    /**
1461
-     *    get_view - get view for route and status
1462
-     *
1463
-     * @access    public
1464
-     * @param    string  $route  - "pretty" public alias for module method
1465
-     * @param    integer $status - integer value corresponding  to status constant strings set in module parent class,
1466
-     *                           allows different views to be served based on status
1467
-     * @param    string  $key    - url param key indicating a route is being called
1468
-     * @return    string
1469
-     */
1470
-    public static function get_view($route = null, $status = 0, $key = 'ee')
1471
-    {
1472
-        do_action('AHEE__EE_Config__get_view__begin', $route, $status);
1473
-        if (isset(EE_Config::$_module_view_map[ $key ][ $route ][ $status ])) {
1474
-            return apply_filters(
1475
-                'FHEE__EE_Config__get_view',
1476
-                EE_Config::$_module_view_map[ $key ][ $route ][ $status ],
1477
-                $route,
1478
-                $status
1479
-            );
1480
-        }
1481
-        return null;
1482
-    }
1483
-
1484
-
1485
-    public function update_addon_option_names()
1486
-    {
1487
-        update_option(EE_Config::ADDON_OPTION_NAMES, $this->_addon_option_names);
1488
-    }
1489
-
1490
-
1491
-    public function shutdown()
1492
-    {
1493
-        $this->update_addon_option_names();
1494
-    }
1495
-
1496
-
1497
-    /**
1498
-     * @return LegacyShortcodesManager
1499
-     */
1500
-    public static function getLegacyShortcodesManager()
1501
-    {
1502
-        if (! EE_Config::instance()->legacy_shortcodes_manager instanceof LegacyShortcodesManager) {
1503
-            EE_Config::instance()->legacy_shortcodes_manager = LoaderFactory::getLoader()->getShared(
1504
-                LegacyShortcodesManager::class
1505
-            );
1506
-        }
1507
-        return EE_Config::instance()->legacy_shortcodes_manager;
1508
-    }
1509
-
1510
-
1511
-    /**
1512
-     * register_shortcode - makes core aware of this shortcode
1513
-     *
1514
-     * @deprecated 4.9.26
1515
-     * @param    string $shortcode_path - full path up to and including shortcode folder
1516
-     * @return    bool
1517
-     */
1518
-    public static function register_shortcode($shortcode_path = null)
1519
-    {
1520
-        EE_Error::doing_it_wrong(
1521
-            __METHOD__,
1522
-            esc_html__(
1523
-                'Usage is deprecated. Use \EventEspresso\core\services\shortcodes\LegacyShortcodesManager::registerShortcode() as direct replacement, or better yet, please see the new \EventEspresso\core\services\shortcodes\ShortcodesManager class.',
1524
-                'event_espresso'
1525
-            ),
1526
-            '4.9.26'
1527
-        );
1528
-        return EE_Config::instance()->getLegacyShortcodesManager()->registerShortcode($shortcode_path);
1529
-    }
24
+	const OPTION_NAME = 'ee_config';
25
+
26
+	const LOG_NAME = 'ee_config_log';
27
+
28
+	const LOG_LENGTH = 100;
29
+
30
+	const ADDON_OPTION_NAMES = 'ee_config_option_names';
31
+
32
+	/**
33
+	 *    instance of the EE_Config object
34
+	 *
35
+	 * @var    EE_Config $_instance
36
+	 * @access    private
37
+	 */
38
+	private static $_instance;
39
+
40
+	/**
41
+	 * @var boolean $_logging_enabled
42
+	 */
43
+	private static $_logging_enabled = false;
44
+
45
+	/**
46
+	 * @var LegacyShortcodesManager $legacy_shortcodes_manager
47
+	 */
48
+	private $legacy_shortcodes_manager;
49
+
50
+	/**
51
+	 * An StdClass whose property names are addon slugs,
52
+	 * and values are their config classes
53
+	 *
54
+	 * @var StdClass
55
+	 */
56
+	public $addons;
57
+
58
+	/**
59
+	 * @var EE_Admin_Config
60
+	 */
61
+	public $admin;
62
+
63
+	/**
64
+	 * @var EE_Core_Config
65
+	 */
66
+	public $core;
67
+
68
+	/**
69
+	 * @var EE_Currency_Config
70
+	 */
71
+	public $currency;
72
+
73
+	/**
74
+	 * @var EE_Organization_Config
75
+	 */
76
+	public $organization;
77
+
78
+	/**
79
+	 * @var EE_Registration_Config
80
+	 */
81
+	public $registration;
82
+
83
+	/**
84
+	 * @var EE_Template_Config
85
+	 */
86
+	public $template_settings;
87
+
88
+	/**
89
+	 * Holds EE environment values.
90
+	 *
91
+	 * @var EE_Environment_Config
92
+	 */
93
+	public $environment;
94
+
95
+	/**
96
+	 * settings pertaining to Google maps
97
+	 *
98
+	 * @var EE_Map_Config
99
+	 */
100
+	public $map_settings;
101
+
102
+	/**
103
+	 * settings pertaining to Taxes
104
+	 *
105
+	 * @var EE_Tax_Config
106
+	 */
107
+	public $tax_settings;
108
+
109
+	/**
110
+	 * Settings pertaining to global messages settings.
111
+	 *
112
+	 * @var EE_Messages_Config
113
+	 */
114
+	public $messages;
115
+
116
+	/**
117
+	 * @deprecated
118
+	 * @var EE_Gateway_Config
119
+	 */
120
+	public $gateway;
121
+
122
+	/**
123
+	 * @var array
124
+	 */
125
+	private $_addon_option_names = array();
126
+
127
+	/**
128
+	 * @var array
129
+	 */
130
+	private static $_module_route_map = array();
131
+
132
+	/**
133
+	 * @var array
134
+	 */
135
+	private static $_module_forward_map = array();
136
+
137
+	/**
138
+	 * @var array
139
+	 */
140
+	private static $_module_view_map = array();
141
+
142
+	/**
143
+	 * @var bool
144
+	 */
145
+	private static $initialized = false;
146
+
147
+
148
+	/**
149
+	 * @singleton method used to instantiate class object
150
+	 * @access    public
151
+	 * @return EE_Config instance
152
+	 */
153
+	public static function instance()
154
+	{
155
+		// check if class object is instantiated, and instantiated properly
156
+		if (! self::$_instance instanceof EE_Config) {
157
+			self::$_instance = new self();
158
+		}
159
+		return self::$_instance;
160
+	}
161
+
162
+
163
+	/**
164
+	 * Resets the config
165
+	 *
166
+	 * @param bool    $hard_reset    if TRUE, sets EE_CONFig back to its original settings in the database. If FALSE
167
+	 *                               (default) leaves the database alone, and merely resets the EE_Config object to
168
+	 *                               reflect its state in the database
169
+	 * @param boolean $reinstantiate if TRUE (default) call instance() and return it. Otherwise, just leave
170
+	 *                               $_instance as NULL. Useful in case you want to forget about the old instance on
171
+	 *                               EE_Config, but might not be ready to instantiate EE_Config currently (eg if the
172
+	 *                               site was put into maintenance mode)
173
+	 * @return EE_Config
174
+	 */
175
+	public static function reset($hard_reset = false, $reinstantiate = true)
176
+	{
177
+		if (self::$_instance instanceof EE_Config) {
178
+			if ($hard_reset) {
179
+				self::$_instance->legacy_shortcodes_manager = null;
180
+				self::$_instance->_addon_option_names = array();
181
+				self::$_instance->_initialize_config();
182
+				self::$_instance->update_espresso_config();
183
+			}
184
+			self::$_instance->update_addon_option_names();
185
+		}
186
+		self::$_instance = null;
187
+		self::$initialized = false;
188
+		// we don't need to reset the static properties imo because those should
189
+		// only change when a module is added or removed. Currently we don't
190
+		// support removing a module during a request when it previously existed
191
+		if ($reinstantiate) {
192
+			return self::instance();
193
+		} else {
194
+			return null;
195
+		}
196
+	}
197
+
198
+
199
+	private function __construct()
200
+	{
201
+		if (self::$initialized) {
202
+			return;
203
+		}
204
+		self::$initialized = true;
205
+		do_action('AHEE__EE_Config__construct__begin', $this);
206
+		EE_Config::$_logging_enabled = apply_filters('FHEE__EE_Config___construct__logging_enabled', false);
207
+		// setup empty config classes
208
+		$this->_initialize_config();
209
+		// load existing EE site settings
210
+		$this->_load_core_config();
211
+		// confirm everything loaded correctly and set filtered defaults if not
212
+		$this->_verify_config();
213
+		//  register shortcodes and modules
214
+		add_action(
215
+			'AHEE__EE_System__register_shortcodes_modules_and_widgets',
216
+			[$this, 'register_shortcodes_and_modules'],
217
+			999
218
+		);
219
+		//  initialize shortcodes and modules
220
+		add_action('AHEE__EE_System__core_loaded_and_ready', [$this, 'initialize_shortcodes_and_modules']);
221
+		// register widgets
222
+		add_action('widgets_init', [$this, 'widgets_init'], 10);
223
+		// shutdown
224
+		add_action('shutdown', [$this, 'shutdown'], 10);
225
+		// construct__end hook
226
+		do_action('AHEE__EE_Config__construct__end', $this);
227
+		// hardcoded hack
228
+		$this->template_settings->current_espresso_theme = 'Espresso_Arabica_2014';
229
+	}
230
+
231
+
232
+	/**
233
+	 * @return boolean
234
+	 */
235
+	public static function logging_enabled()
236
+	{
237
+		return self::$_logging_enabled;
238
+	}
239
+
240
+
241
+	/**
242
+	 * use to get the current theme if needed from static context
243
+	 *
244
+	 * @return string current theme set.
245
+	 */
246
+	public static function get_current_theme()
247
+	{
248
+		return self::$_instance->template_settings->current_espresso_theme ?? 'Espresso_Arabica_2014';
249
+	}
250
+
251
+
252
+	/**
253
+	 *        _initialize_config
254
+	 *
255
+	 * @access private
256
+	 * @return void
257
+	 */
258
+	private function _initialize_config()
259
+	{
260
+		EE_Config::trim_log();
261
+		// set defaults
262
+		$this->_addon_option_names = get_option(EE_Config::ADDON_OPTION_NAMES, array());
263
+		$this->addons = new stdClass();
264
+		// set _module_route_map
265
+		EE_Config::$_module_route_map = array();
266
+		// set _module_forward_map
267
+		EE_Config::$_module_forward_map = array();
268
+		// set _module_view_map
269
+		EE_Config::$_module_view_map = array();
270
+	}
271
+
272
+
273
+	/**
274
+	 *        load core plugin configuration
275
+	 *
276
+	 * @access private
277
+	 * @return void
278
+	 */
279
+	private function _load_core_config()
280
+	{
281
+		// load_core_config__start hook
282
+		do_action('AHEE__EE_Config___load_core_config__start', $this);
283
+		$espresso_config = (array) $this->get_espresso_config();
284
+		// need to move the "addons" element to the end of the config array
285
+		// in case an addon config references one of the other config classes
286
+		$addons = $espresso_config['addons'] ?? new StdClass();
287
+		unset($espresso_config['addons']);
288
+		$espresso_config['addons'] = $addons;
289
+		foreach ($espresso_config as $config => $settings) {
290
+			// load_core_config__start hook
291
+			$settings = apply_filters(
292
+				'FHEE__EE_Config___load_core_config__config_settings',
293
+				$settings,
294
+				$config,
295
+				$this
296
+			);
297
+			if (is_object($settings) && property_exists($this, $config)) {
298
+				$this->{$config} = apply_filters('FHEE__EE_Config___load_core_config__' . $config, $settings);
299
+				// call configs populate method to ensure any defaults are set for empty values.
300
+				if (method_exists($settings, 'populate')) {
301
+					$this->{$config}->populate();
302
+				}
303
+				if (method_exists($settings, 'do_hooks')) {
304
+					$this->{$config}->do_hooks();
305
+				}
306
+			}
307
+		}
308
+		if (apply_filters('FHEE__EE_Config___load_core_config__update_espresso_config', false)) {
309
+			$this->update_espresso_config();
310
+		}
311
+		// load_core_config__end hook
312
+		do_action('AHEE__EE_Config___load_core_config__end', $this);
313
+	}
314
+
315
+
316
+	/**
317
+	 *    _verify_config
318
+	 *
319
+	 * @access    protected
320
+	 * @return    void
321
+	 */
322
+	protected function _verify_config()
323
+	{
324
+		$this->core = $this->core instanceof EE_Core_Config
325
+			? $this->core
326
+			: new EE_Core_Config();
327
+		$this->core = apply_filters('FHEE__EE_Config___initialize_config__core', $this->core);
328
+		$this->organization = $this->organization instanceof EE_Organization_Config
329
+			? $this->organization
330
+			: new EE_Organization_Config();
331
+		$this->organization = apply_filters(
332
+			'FHEE__EE_Config___initialize_config__organization',
333
+			$this->organization
334
+		);
335
+		$this->currency = $this->currency instanceof EE_Currency_Config
336
+			? $this->currency
337
+			: new EE_Currency_Config();
338
+		$this->currency = apply_filters('FHEE__EE_Config___initialize_config__currency', $this->currency);
339
+		$this->registration = $this->registration instanceof EE_Registration_Config
340
+			? $this->registration
341
+			: new EE_Registration_Config();
342
+		$this->registration = apply_filters(
343
+			'FHEE__EE_Config___initialize_config__registration',
344
+			$this->registration
345
+		);
346
+		$this->admin = $this->admin instanceof EE_Admin_Config
347
+			? $this->admin
348
+			: new EE_Admin_Config();
349
+		$this->admin = apply_filters('FHEE__EE_Config___initialize_config__admin', $this->admin);
350
+		$this->template_settings = $this->template_settings instanceof EE_Template_Config
351
+			? $this->template_settings
352
+			: new EE_Template_Config();
353
+		$this->template_settings = apply_filters(
354
+			'FHEE__EE_Config___initialize_config__template_settings',
355
+			$this->template_settings
356
+		);
357
+		$this->map_settings = $this->map_settings instanceof EE_Map_Config
358
+			? $this->map_settings
359
+			: new EE_Map_Config();
360
+		$this->map_settings = apply_filters(
361
+			'FHEE__EE_Config___initialize_config__map_settings',
362
+			$this->map_settings
363
+		);
364
+		$this->environment = $this->environment instanceof EE_Environment_Config
365
+			? $this->environment
366
+			: new EE_Environment_Config();
367
+		$this->environment = apply_filters(
368
+			'FHEE__EE_Config___initialize_config__environment',
369
+			$this->environment
370
+		);
371
+		$this->tax_settings = $this->tax_settings instanceof EE_Tax_Config
372
+			? $this->tax_settings
373
+			: new EE_Tax_Config();
374
+		$this->tax_settings = apply_filters(
375
+			'FHEE__EE_Config___initialize_config__tax_settings',
376
+			$this->tax_settings
377
+		);
378
+		$this->messages = apply_filters('FHEE__EE_Config__initialize_config__messages', $this->messages);
379
+		$this->messages = $this->messages instanceof EE_Messages_Config
380
+			? $this->messages
381
+			: new EE_Messages_Config();
382
+		$this->gateway = $this->gateway instanceof EE_Gateway_Config
383
+			? $this->gateway
384
+			: new EE_Gateway_Config();
385
+		$this->gateway = apply_filters('FHEE__EE_Config___initialize_config__gateway', $this->gateway);
386
+		$this->legacy_shortcodes_manager = null;
387
+	}
388
+
389
+
390
+	/**
391
+	 *    get_espresso_config
392
+	 *
393
+	 * @access    public
394
+	 * @return    array of espresso config stuff
395
+	 */
396
+	public function get_espresso_config()
397
+	{
398
+		// grab espresso configuration
399
+		return apply_filters(
400
+			'FHEE__EE_Config__get_espresso_config__CFG',
401
+			get_option(EE_Config::OPTION_NAME, array())
402
+		);
403
+	}
404
+
405
+
406
+	/**
407
+	 *    double_check_config_comparison
408
+	 *
409
+	 * @access    public
410
+	 * @param string $option
411
+	 * @param        $old_value
412
+	 * @param        $value
413
+	 */
414
+	public function double_check_config_comparison($option, $old_value, $value)
415
+	{
416
+		// make sure we're checking the ee config
417
+		if ($option === EE_Config::OPTION_NAME) {
418
+			// run a loose comparison of the old value against the new value for type and properties,
419
+			// but NOT exact instance like WP update_option does (ie: NOT type safe comparison)
420
+			if ($value != $old_value) {
421
+				// if they are NOT the same, then remove the hook,
422
+				// which means the subsequent update results will be based solely on the update query results
423
+				// the reason we do this is because, as stated above,
424
+				// WP update_option performs an exact instance comparison (===) on any update values passed to it
425
+				// this happens PRIOR to serialization and any subsequent update.
426
+				// If values are found to match their previous old value,
427
+				// then WP bails before performing any update.
428
+				// Since we are passing the EE_Config object, it is comparing the EXACT instance of the saved version
429
+				// it just pulled from the db, with the one being passed to it (which will not match).
430
+				// HOWEVER, once the object is serialized and passed off to MySQL to update,
431
+				// MySQL MAY ALSO NOT perform the update because
432
+				// the string it sees in the db looks the same as the new one it has been passed!!!
433
+				// This results in the query returning an "affected rows" value of ZERO,
434
+				// which gets returned immediately by WP update_option and looks like an error.
435
+				remove_action('update_option', array($this, 'check_config_updated'));
436
+			}
437
+		}
438
+	}
439
+
440
+
441
+	/**
442
+	 *    update_espresso_config
443
+	 *
444
+	 * @access   public
445
+	 */
446
+	protected function _reset_espresso_addon_config()
447
+	{
448
+		$this->_addon_option_names = array();
449
+		foreach ($this->addons as $addon_name => $addon_config_obj) {
450
+			$addon_config_obj = maybe_unserialize($addon_config_obj);
451
+			if ($addon_config_obj instanceof EE_Config_Base) {
452
+				$this->update_config('addons', $addon_name, $addon_config_obj, false);
453
+			}
454
+			$this->addons->{$addon_name} = null;
455
+		}
456
+	}
457
+
458
+
459
+	/**
460
+	 *    update_espresso_config
461
+	 *
462
+	 * @access   public
463
+	 * @param   bool $add_success
464
+	 * @param   bool $add_error
465
+	 * @return   bool
466
+	 */
467
+	public function update_espresso_config($add_success = false, $add_error = true)
468
+	{
469
+		// don't allow config updates during WP heartbeats
470
+		/** @var RequestInterface $request */
471
+		$request = LoaderFactory::getLoader()->getShared(RequestInterface::class);
472
+		if ($request->isWordPressHeartbeat()) {
473
+			return false;
474
+		}
475
+		// commented out the following re: https://events.codebasehq.com/projects/event-espresso/tickets/8197
476
+		// $clone = clone( self::$_instance );
477
+		// self::$_instance = NULL;
478
+		do_action('AHEE__EE_Config__update_espresso_config__begin', $this);
479
+		$this->_reset_espresso_addon_config();
480
+		// hook into update_option because that happens AFTER the ( $value === $old_value ) conditional
481
+		// but BEFORE the actual update occurs
482
+		add_action('update_option', array($this, 'double_check_config_comparison'), 1, 3);
483
+		// don't want to persist legacy_shortcodes_manager, but don't want to lose it either
484
+		$legacy_shortcodes_manager = $this->legacy_shortcodes_manager;
485
+		$this->legacy_shortcodes_manager = null;
486
+		// now update "ee_config"
487
+		$saved = update_option(EE_Config::OPTION_NAME, $this);
488
+		$this->legacy_shortcodes_manager = $legacy_shortcodes_manager;
489
+		EE_Config::log(EE_Config::OPTION_NAME);
490
+		// if not saved... check if the hook we just added still exists;
491
+		// if it does, it means one of two things:
492
+		// that update_option bailed at the($value === $old_value) conditional,
493
+		// or...
494
+		// the db update query returned 0 rows affected
495
+		// (probably because the data  value was the same from its perspective)
496
+		// so the existence of the hook means that a negative result from update_option is NOT an error,
497
+		// but just means no update occurred, so don't display an error to the user.
498
+		// BUT... if update_option returns FALSE, AND the hook is missing,
499
+		// then it means that something truly went wrong
500
+		$saved = ! $saved ? has_action('update_option', array($this, 'double_check_config_comparison')) : $saved;
501
+		// remove our action since we don't want it in the system anymore
502
+		remove_action('update_option', array($this, 'double_check_config_comparison'), 1);
503
+		do_action('AHEE__EE_Config__update_espresso_config__end', $this, $saved);
504
+		// self::$_instance = $clone;
505
+		// unset( $clone );
506
+		// if config remains the same or was updated successfully
507
+		if ($saved) {
508
+			if ($add_success) {
509
+				EE_Error::add_success(
510
+					esc_html__('The Event Espresso Configuration Settings have been successfully updated.', 'event_espresso'),
511
+					__FILE__,
512
+					__FUNCTION__,
513
+					__LINE__
514
+				);
515
+			}
516
+			return true;
517
+		} else {
518
+			if ($add_error) {
519
+				EE_Error::add_error(
520
+					esc_html__('The Event Espresso Configuration Settings were not updated.', 'event_espresso'),
521
+					__FILE__,
522
+					__FUNCTION__,
523
+					__LINE__
524
+				);
525
+			}
526
+			return false;
527
+		}
528
+	}
529
+
530
+
531
+	/**
532
+	 *    _verify_config_params
533
+	 *
534
+	 * @access    private
535
+	 * @param    string         $section
536
+	 * @param    string         $name
537
+	 * @param    string         $config_class
538
+	 * @param    EE_Config_Base $config_obj
539
+	 * @param    array          $tests_to_run
540
+	 * @param    bool           $display_errors
541
+	 * @return    bool    TRUE on success, FALSE on fail
542
+	 */
543
+	private function _verify_config_params(
544
+		$section = '',
545
+		$name = '',
546
+		$config_class = '',
547
+		$config_obj = null,
548
+		$tests_to_run = array(1, 2, 3, 4, 5, 6, 7, 8),
549
+		$display_errors = true
550
+	) {
551
+		try {
552
+			foreach ($tests_to_run as $test) {
553
+				switch ($test) {
554
+					// TEST #1 : check that section was set
555
+					case 1:
556
+						if (empty($section)) {
557
+							if ($display_errors) {
558
+								throw new EE_Error(
559
+									sprintf(
560
+										esc_html__(
561
+											'No configuration section has been provided while attempting to save "%s".',
562
+											'event_espresso'
563
+										),
564
+										$config_class
565
+									)
566
+								);
567
+							}
568
+							return false;
569
+						}
570
+						break;
571
+					// TEST #2 : check that settings section exists
572
+					case 2:
573
+						if (! isset($this->{$section})) {
574
+							if ($display_errors) {
575
+								throw new EE_Error(
576
+									sprintf(
577
+										esc_html__('The "%s" configuration section does not exist.', 'event_espresso'),
578
+										$section
579
+									)
580
+								);
581
+							}
582
+							return false;
583
+						}
584
+						break;
585
+					// TEST #3 : check that section is the proper format
586
+					case 3:
587
+						if (
588
+							! ($this->{$section} instanceof EE_Config_Base || $this->{$section} instanceof stdClass)
589
+						) {
590
+							if ($display_errors) {
591
+								throw new EE_Error(
592
+									sprintf(
593
+										esc_html__(
594
+											'The "%s" configuration settings have not been formatted correctly.',
595
+											'event_espresso'
596
+										),
597
+										$section
598
+									)
599
+								);
600
+							}
601
+							return false;
602
+						}
603
+						break;
604
+					// TEST #4 : check that config section name has been set
605
+					case 4:
606
+						if (empty($name)) {
607
+							if ($display_errors) {
608
+								throw new EE_Error(
609
+									esc_html__(
610
+										'No name has been provided for the specific configuration section.',
611
+										'event_espresso'
612
+									)
613
+								);
614
+							}
615
+							return false;
616
+						}
617
+						break;
618
+					// TEST #5 : check that a config class name has been set
619
+					case 5:
620
+						if (empty($config_class)) {
621
+							if ($display_errors) {
622
+								throw new EE_Error(
623
+									esc_html__(
624
+										'No class name has been provided for the specific configuration section.',
625
+										'event_espresso'
626
+									)
627
+								);
628
+							}
629
+							return false;
630
+						}
631
+						break;
632
+					// TEST #6 : verify config class is accessible
633
+					case 6:
634
+						if (! class_exists($config_class)) {
635
+							if ($display_errors) {
636
+								throw new EE_Error(
637
+									sprintf(
638
+										esc_html__(
639
+											'The "%s" class does not exist. Please ensure that an autoloader has been set for it.',
640
+											'event_espresso'
641
+										),
642
+										$config_class
643
+									)
644
+								);
645
+							}
646
+							return false;
647
+						}
648
+						break;
649
+					// TEST #7 : check that config has even been set
650
+					case 7:
651
+						if (! isset($this->{$section}->{$name})) {
652
+							if ($display_errors) {
653
+								throw new EE_Error(
654
+									sprintf(
655
+										esc_html__('No configuration has been set for "%1$s->%2$s".', 'event_espresso'),
656
+										$section,
657
+										$name
658
+									)
659
+								);
660
+							}
661
+							return false;
662
+						} else {
663
+							// and make sure it's not serialized
664
+							$this->{$section}->{$name} = maybe_unserialize($this->{$section}->{$name});
665
+						}
666
+						break;
667
+					// TEST #8 : check that config is the requested type
668
+					case 8:
669
+						if (! $this->{$section}->{$name} instanceof $config_class) {
670
+							if ($display_errors) {
671
+								throw new EE_Error(
672
+									sprintf(
673
+										esc_html__(
674
+											'The configuration for "%1$s->%2$s" is not of the "%3$s" class.',
675
+											'event_espresso'
676
+										),
677
+										$section,
678
+										$name,
679
+										$config_class
680
+									)
681
+								);
682
+							}
683
+							return false;
684
+						}
685
+						break;
686
+					// TEST #9 : verify config object
687
+					case 9:
688
+						if (! $config_obj instanceof EE_Config_Base) {
689
+							if ($display_errors) {
690
+								throw new EE_Error(
691
+									sprintf(
692
+										esc_html__('The "%s" class is not an instance of EE_Config_Base.', 'event_espresso'),
693
+										print_r($config_obj, true)
694
+									)
695
+								);
696
+							}
697
+							return false;
698
+						}
699
+						break;
700
+				}
701
+			}
702
+		} catch (EE_Error $e) {
703
+			$e->get_error();
704
+		}
705
+		// you have successfully run the gauntlet
706
+		return true;
707
+	}
708
+
709
+
710
+	/**
711
+	 *    _generate_config_option_name
712
+	 *
713
+	 * @access        protected
714
+	 * @param        string $section
715
+	 * @param        string $name
716
+	 * @return        string
717
+	 */
718
+	private function _generate_config_option_name($section = '', $name = '')
719
+	{
720
+		return 'ee_config-' . strtolower($section . '-' . str_replace(array('EE_', 'EED_'), '', $name));
721
+	}
722
+
723
+
724
+	/**
725
+	 *    _set_config_class
726
+	 * ensures that a config class is set, either from a passed config class or one generated from the config name
727
+	 *
728
+	 * @access    private
729
+	 * @param    string $config_class
730
+	 * @param    string $name
731
+	 * @return    string
732
+	 */
733
+	private function _set_config_class($config_class = '', $name = '')
734
+	{
735
+		return ! empty($config_class)
736
+			? $config_class
737
+			: str_replace(' ', '_', ucwords(str_replace('_', ' ', $name))) . '_Config';
738
+	}
739
+
740
+
741
+	/**
742
+	 * @param string              $section
743
+	 * @param string              $name
744
+	 * @param string              $config_class
745
+	 * @param EE_Config_Base|null $config_obj
746
+	 * @return EE_Config_Base
747
+	 */
748
+	public function set_config(
749
+		string $section = '',
750
+		string $name = '',
751
+		string $config_class = '',
752
+		EE_Config_Base $config_obj = null
753
+	): ?EE_Config_Base {
754
+		// ensure config class is set to something
755
+		$config_class = $this->_set_config_class($config_class, $name);
756
+		// run tests 1-4, 6, and 7 to verify all config params are set and valid
757
+		if (! $this->_verify_config_params($section, $name, $config_class, null, array(1, 2, 3, 4, 5, 6))) {
758
+			return null;
759
+		}
760
+		$config_option_name = $this->_generate_config_option_name($section, $name);
761
+		// if the config option name hasn't been added yet to the list of option names we're tracking, then do so now
762
+		if (! isset($this->_addon_option_names[ $config_option_name ])) {
763
+			$this->_addon_option_names[ $config_option_name ] = $config_class;
764
+			$this->update_addon_option_names();
765
+		}
766
+		// verify the incoming config object but suppress errors
767
+		if (! $this->_verify_config_params($section, $name, $config_class, $config_obj, array(9), false)) {
768
+			$config_obj = new $config_class();
769
+		}
770
+		if (get_option($config_option_name)) {
771
+			EE_Config::log($config_option_name);
772
+			try {
773
+				update_option($config_option_name, $config_obj);
774
+			} catch (Exception $exception) {
775
+				throw new DomainException(
776
+					sprintf(
777
+						esc_html__(
778
+							'The following exception occurred while attempting to update the "%1$s" class for config section "%2$s->%3$s": %4$s',
779
+							'event_espresso'
780
+						),
781
+						$config_class,
782
+						$section,
783
+						$name,
784
+						$exception->getMessage()
785
+					)
786
+				);
787
+			}
788
+			$this->{$section}->{$name} = $config_obj;
789
+			return $this->{$section}->{$name};
790
+		} else {
791
+			// create a wp-option for this config
792
+			if (add_option($config_option_name, $config_obj, '', 'no')) {
793
+				$this->{$section}->{$name} = maybe_unserialize($config_obj);
794
+				return $this->{$section}->{$name};
795
+			} else {
796
+				EE_Error::add_error(
797
+					sprintf(esc_html__('The "%s" could not be saved to the database.', 'event_espresso'), $config_class),
798
+					__FILE__,
799
+					__FUNCTION__,
800
+					__LINE__
801
+				);
802
+				return null;
803
+			}
804
+		}
805
+	}
806
+
807
+
808
+	/**
809
+	 *    update_config
810
+	 * Important: the config object must ALREADY be set, otherwise this will produce an error.
811
+	 *
812
+	 * @access    public
813
+	 * @param    string                $section
814
+	 * @param    string                $name
815
+	 * @param    EE_Config_Base|string $config_obj
816
+	 * @param    bool                  $throw_errors
817
+	 * @return    bool
818
+	 */
819
+	public function update_config($section = '', $name = '', $config_obj = '', $throw_errors = true)
820
+	{
821
+		// don't allow config updates during WP heartbeats
822
+		/** @var RequestInterface $request */
823
+		$request = LoaderFactory::getLoader()->getShared(RequestInterface::class);
824
+		if ($request->isWordPressHeartbeat()) {
825
+			return false;
826
+		}
827
+		$config_obj = maybe_unserialize($config_obj);
828
+		// get class name of the incoming object
829
+		$config_class = get_class($config_obj);
830
+		// run tests 1-5 and 9 to verify config
831
+		if (
832
+			! $this->_verify_config_params(
833
+				$section,
834
+				$name,
835
+				$config_class,
836
+				$config_obj,
837
+				array(1, 2, 3, 4, 7, 9)
838
+			)
839
+		) {
840
+			return false;
841
+		}
842
+		$config_option_name = $this->_generate_config_option_name($section, $name);
843
+		// check if config object has been added to db by seeing if config option name is in $this->_addon_option_names array
844
+		if (! isset($this->_addon_option_names[ $config_option_name ])) {
845
+			// save new config to db
846
+			if ($this->set_config($section, $name, $config_class, $config_obj)) {
847
+				return true;
848
+			}
849
+		} else {
850
+			// first check if the record already exists
851
+			$existing_config = get_option($config_option_name);
852
+			$config_obj = serialize($config_obj);
853
+			// just return if db record is already up-to-date (NOT type safe comparison)
854
+			if ($existing_config == $config_obj) {
855
+				$this->{$section}->{$name} = $config_obj;
856
+				return true;
857
+			} elseif (update_option($config_option_name, $config_obj)) {
858
+				EE_Config::log($config_option_name);
859
+				// update wp-option for this config class
860
+				$this->{$section}->{$name} = $config_obj;
861
+				return true;
862
+			} elseif ($throw_errors) {
863
+				EE_Error::add_error(
864
+					sprintf(
865
+						esc_html__(
866
+							'The "%1$s" object stored at"%2$s" was not successfully updated in the database.',
867
+							'event_espresso'
868
+						),
869
+						$config_class,
870
+						'EE_Config->' . $section . '->' . $name
871
+					),
872
+					__FILE__,
873
+					__FUNCTION__,
874
+					__LINE__
875
+				);
876
+			}
877
+		}
878
+		return false;
879
+	}
880
+
881
+
882
+	/**
883
+	 *    get_config
884
+	 *
885
+	 * @access    public
886
+	 * @param    string $section
887
+	 * @param    string $name
888
+	 * @param    string $config_class
889
+	 * @return    mixed EE_Config_Base | NULL
890
+	 */
891
+	public function get_config($section = '', $name = '', $config_class = '')
892
+	{
893
+		// ensure config class is set to something
894
+		$config_class = $this->_set_config_class($config_class, $name);
895
+		// run tests 1-4, 6 and 7 to verify that all params have been set
896
+		if (! $this->_verify_config_params($section, $name, $config_class, null, array(1, 2, 3, 4, 5, 6))) {
897
+			return null;
898
+		}
899
+		// now test if the requested config object exists, but suppress errors
900
+		if ($this->_verify_config_params($section, $name, $config_class, null, array(7, 8), false)) {
901
+			// config already exists, so pass it back
902
+			return $this->{$section}->{$name};
903
+		}
904
+		// load config option from db if it exists
905
+		$config_obj = $this->get_config_option($this->_generate_config_option_name($section, $name));
906
+		// verify the newly retrieved config object, but suppress errors
907
+		if ($this->_verify_config_params($section, $name, $config_class, $config_obj, array(9), false)) {
908
+			// config is good, so set it and pass it back
909
+			$this->{$section}->{$name} = $config_obj;
910
+			return $this->{$section}->{$name};
911
+		}
912
+		// oops! $config_obj is not already set and does not exist in the db, so create a new one
913
+		$config_obj = $this->set_config($section, $name, $config_class);
914
+		// verify the newly created config object
915
+		if ($this->_verify_config_params($section, $name, $config_class, $config_obj, array(9))) {
916
+			return $this->{$section}->{$name};
917
+		} else {
918
+			EE_Error::add_error(
919
+				sprintf(esc_html__('The "%s" could not be retrieved from the database.', 'event_espresso'), $config_class),
920
+				__FILE__,
921
+				__FUNCTION__,
922
+				__LINE__
923
+			);
924
+		}
925
+		return null;
926
+	}
927
+
928
+
929
+	/**
930
+	 *    get_config_option
931
+	 *
932
+	 * @access    public
933
+	 * @param    string $config_option_name
934
+	 * @return    mixed EE_Config_Base | FALSE
935
+	 */
936
+	public function get_config_option($config_option_name = '')
937
+	{
938
+		// retrieve the wp-option for this config class.
939
+		$config_option = maybe_unserialize(get_option($config_option_name, array()));
940
+		if (empty($config_option)) {
941
+			EE_Config::log($config_option_name . '-NOT-FOUND');
942
+		}
943
+		return $config_option;
944
+	}
945
+
946
+
947
+	/**
948
+	 * log
949
+	 *
950
+	 * @param string $config_option_name
951
+	 */
952
+	public static function log($config_option_name = '')
953
+	{
954
+		if (EE_Config::logging_enabled() && ! empty($config_option_name)) {
955
+			$config_log = get_option(EE_Config::LOG_NAME, array());
956
+			/** @var RequestParams $request */
957
+			$request = LoaderFactory::getLoader()->getShared(RequestParams::class);
958
+			$config_log[ (string) microtime(true) ] = array(
959
+				'config_name' => $config_option_name,
960
+				'request'     => $request->requestParams(),
961
+			);
962
+			update_option(EE_Config::LOG_NAME, $config_log);
963
+		}
964
+	}
965
+
966
+
967
+	/**
968
+	 * trim_log
969
+	 * reduces the size of the config log to the length specified by EE_Config::LOG_LENGTH
970
+	 */
971
+	public static function trim_log()
972
+	{
973
+		if (! EE_Config::logging_enabled()) {
974
+			return;
975
+		}
976
+		$config_log = maybe_unserialize(get_option(EE_Config::LOG_NAME, array()));
977
+		$log_length = count($config_log);
978
+		if ($log_length > EE_Config::LOG_LENGTH) {
979
+			ksort($config_log);
980
+			$config_log = array_slice($config_log, $log_length - EE_Config::LOG_LENGTH, null, true);
981
+			update_option(EE_Config::LOG_NAME, $config_log);
982
+		}
983
+	}
984
+
985
+
986
+	/**
987
+	 *    get_page_for_posts
988
+	 *    if the wp-option "show_on_front" is set to "page", then this is the post_name for the post set in the
989
+	 *    wp-option "page_for_posts", or "posts" if no page is selected
990
+	 *
991
+	 * @access    public
992
+	 * @return    string
993
+	 */
994
+	public static function get_page_for_posts()
995
+	{
996
+		$page_for_posts = get_option('page_for_posts');
997
+		if (! $page_for_posts) {
998
+			return 'posts';
999
+		}
1000
+		global $wpdb;
1001
+		$SQL = "SELECT post_name from $wpdb->posts WHERE post_type='posts' OR post_type='page' AND post_status='publish' AND ID=%d";
1002
+		return $wpdb->get_var($wpdb->prepare($SQL, $page_for_posts));
1003
+	}
1004
+
1005
+
1006
+	/**
1007
+	 *    register_shortcodes_and_modules.
1008
+	 *    At this point, it's too early to tell if we're maintenance mode or not.
1009
+	 *    In fact, this is where we give modules a chance to let core know they exist
1010
+	 *    so they can help trigger maintenance mode if it's needed
1011
+	 *
1012
+	 * @access    public
1013
+	 * @return    void
1014
+	 */
1015
+	public function register_shortcodes_and_modules()
1016
+	{
1017
+		// allow modules to set hooks for the rest of the system
1018
+		EE_Registry::instance()->modules = $this->_register_modules();
1019
+	}
1020
+
1021
+
1022
+	/**
1023
+	 *    initialize_shortcodes_and_modules
1024
+	 *    meaning they can start adding their hooks to get stuff done
1025
+	 *
1026
+	 * @access    public
1027
+	 * @return    void
1028
+	 */
1029
+	public function initialize_shortcodes_and_modules()
1030
+	{
1031
+		// allow modules to set hooks for the rest of the system
1032
+		$this->_initialize_modules();
1033
+	}
1034
+
1035
+
1036
+	/**
1037
+	 *    widgets_init
1038
+	 *
1039
+	 * @access private
1040
+	 * @return void
1041
+	 */
1042
+	public function widgets_init()
1043
+	{
1044
+		// only init widgets on admin pages when not in complete maintenance, and
1045
+		// on frontend when not in any maintenance mode
1046
+		if (
1047
+			MaintenanceStatus::isDisabled()
1048
+			|| (is_admin() && MaintenanceStatus::isNotFullSite())
1049
+		) {
1050
+			// grab list of installed widgets
1051
+			$widgets_to_register = glob(EE_WIDGETS . '*', GLOB_ONLYDIR);
1052
+			// filter list of modules to register
1053
+			$widgets_to_register = apply_filters(
1054
+				'FHEE__EE_Config__register_widgets__widgets_to_register',
1055
+				$widgets_to_register
1056
+			);
1057
+			if (! empty($widgets_to_register)) {
1058
+				// cycle thru widget folders
1059
+				foreach ($widgets_to_register as $widget_path) {
1060
+					// add to list of installed widget modules
1061
+					EE_Config::register_ee_widget($widget_path);
1062
+				}
1063
+			}
1064
+			// filter list of installed modules
1065
+			EE_Registry::instance()->widgets = apply_filters(
1066
+				'FHEE__EE_Config__register_widgets__installed_widgets',
1067
+				EE_Registry::instance()->widgets
1068
+			);
1069
+		}
1070
+	}
1071
+
1072
+
1073
+	/**
1074
+	 *    register_ee_widget - makes core aware of this widget
1075
+	 *
1076
+	 * @access    public
1077
+	 * @param    string $widget_path - full path up to and including widget folder
1078
+	 * @return    void
1079
+	 */
1080
+	public static function register_ee_widget($widget_path = null)
1081
+	{
1082
+		do_action('AHEE__EE_Config__register_widget__begin', $widget_path);
1083
+		$widget_ext = '.widget.php';
1084
+		// make all separators match
1085
+		$widget_path = rtrim(str_replace('\\', DS, $widget_path), DS);
1086
+		// does the file path INCLUDE the actual file name as part of the path ?
1087
+		if (strpos($widget_path, $widget_ext) !== false) {
1088
+			// grab and shortcode file name from directory name and break apart at dots
1089
+			$file_name = explode('.', basename($widget_path));
1090
+			// take first segment from file name pieces and remove class prefix if it exists
1091
+			$widget = strpos($file_name[0], 'EEW_') === 0 ? substr($file_name[0], 4) : $file_name[0];
1092
+			// sanitize shortcode directory name
1093
+			$widget = sanitize_key($widget);
1094
+			// now we need to rebuild the shortcode path
1095
+			$widget_path = explode('/', $widget_path);
1096
+			// remove last segment
1097
+			array_pop($widget_path);
1098
+			// glue it back together
1099
+			$widget_path = implode(DS, $widget_path);
1100
+		} else {
1101
+			// grab and sanitize widget directory name
1102
+			$widget = sanitize_key(basename($widget_path));
1103
+		}
1104
+		// create classname from widget directory name
1105
+		$widget = str_replace(' ', '_', ucwords(str_replace('_', ' ', $widget)));
1106
+		// add class prefix
1107
+		$widget_class = 'EEW_' . $widget;
1108
+		// does the widget exist ?
1109
+		if (! is_readable($widget_path . '/' . $widget_class . $widget_ext)) {
1110
+			$msg = sprintf(
1111
+				esc_html__(
1112
+					'The requested %s widget file could not be found or is not readable due to file permissions. Please ensure the following path is correct: %s',
1113
+					'event_espresso'
1114
+				),
1115
+				$widget_class,
1116
+				$widget_path . '/' . $widget_class . $widget_ext
1117
+			);
1118
+			EE_Error::add_error($msg . '||' . $msg, __FILE__, __FUNCTION__, __LINE__);
1119
+			return;
1120
+		}
1121
+		// load the widget class file
1122
+		require_once($widget_path . '/' . $widget_class . $widget_ext);
1123
+		// verify that class exists
1124
+		if (! class_exists($widget_class)) {
1125
+			$msg = sprintf(esc_html__('The requested %s widget class does not exist.', 'event_espresso'), $widget_class);
1126
+			EE_Error::add_error($msg . '||' . $msg, __FILE__, __FUNCTION__, __LINE__);
1127
+			return;
1128
+		}
1129
+		register_widget($widget_class);
1130
+		// add to array of registered widgets
1131
+		EE_Registry::instance()->widgets->{$widget_class} = $widget_path . '/' . $widget_class . $widget_ext;
1132
+	}
1133
+
1134
+
1135
+	/**
1136
+	 *        _register_modules
1137
+	 *
1138
+	 * @access private
1139
+	 * @return array
1140
+	 */
1141
+	private function _register_modules()
1142
+	{
1143
+		// grab list of installed modules
1144
+		$modules_to_register = glob(EE_MODULES . '*', GLOB_ONLYDIR);
1145
+		// filter list of modules to register
1146
+		$modules_to_register = apply_filters(
1147
+			'FHEE__EE_Config__register_modules__modules_to_register',
1148
+			$modules_to_register
1149
+		);
1150
+		if (! empty($modules_to_register)) {
1151
+			// loop through folders
1152
+			foreach ($modules_to_register as $module_path) {
1153
+				/**TEMPORARILY EXCLUDE gateways from modules for time being**/
1154
+				if (
1155
+					$module_path !== EE_MODULES . 'zzz-copy-this-module-template'
1156
+					&& $module_path !== EE_MODULES . 'gateways'
1157
+				) {
1158
+					// add to list of installed modules
1159
+					EE_Config::register_module($module_path);
1160
+				}
1161
+			}
1162
+		}
1163
+		// filter list of installed modules
1164
+		return apply_filters(
1165
+			'FHEE__EE_Config___register_modules__installed_modules',
1166
+			EE_Registry::instance()->modules
1167
+		);
1168
+	}
1169
+
1170
+
1171
+	/**
1172
+	 *    register_module - makes core aware of this module
1173
+	 *
1174
+	 * @access    public
1175
+	 * @param    string $module_path - full path up to and including module folder
1176
+	 * @return    bool
1177
+	 */
1178
+	public static function register_module($module_path = null)
1179
+	{
1180
+		do_action('AHEE__EE_Config__register_module__begin', $module_path);
1181
+		$module_ext = '.module.php';
1182
+		// make all separators match
1183
+		$module_path = str_replace(array('\\', '/'), '/', $module_path);
1184
+		// does the file path INCLUDE the actual file name as part of the path ?
1185
+		if (strpos($module_path, $module_ext) !== false) {
1186
+			// grab and shortcode file name from directory name and break apart at dots
1187
+			$module_file = explode('.', basename($module_path));
1188
+			// now we need to rebuild the shortcode path
1189
+			$module_path = explode('/', $module_path);
1190
+			// remove last segment
1191
+			array_pop($module_path);
1192
+			// glue it back together
1193
+			$module_path = implode('/', $module_path) . '/';
1194
+			// take first segment from file name pieces and sanitize it
1195
+			$module = preg_replace('/[^a-zA-Z0-9_\-]/', '', $module_file[0]);
1196
+			// ensure class prefix is added
1197
+			$module_class = strpos($module, 'EED_') !== 0 ? 'EED_' . $module : $module;
1198
+		} else {
1199
+			// we need to generate the filename based off of the folder name
1200
+			// grab and sanitize module name
1201
+			$module = strtolower(basename($module_path));
1202
+			$module = preg_replace('/[^a-z0-9_\-]/', '', $module);
1203
+			// like trailingslashit()
1204
+			$module_path = rtrim($module_path, '/') . '/';
1205
+			// create classname from module directory name
1206
+			$module = str_replace(' ', '_', ucwords(str_replace('_', ' ', $module)));
1207
+			// add class prefix
1208
+			$module_class = 'EED_' . $module;
1209
+		}
1210
+		// does the module exist ?
1211
+		if (! is_readable($module_path . '/' . $module_class . $module_ext)) {
1212
+			$msg = sprintf(
1213
+				esc_html__(
1214
+					'The requested %s module file could not be found or is not readable due to file permissions.',
1215
+					'event_espresso'
1216
+				),
1217
+				$module
1218
+			);
1219
+			EE_Error::add_error($msg . '||' . $msg, __FILE__, __FUNCTION__, __LINE__);
1220
+			return false;
1221
+		}
1222
+		// load the module class file
1223
+		require_once($module_path . $module_class . $module_ext);
1224
+		// verify that class exists
1225
+		if (! class_exists($module_class)) {
1226
+			$msg = sprintf(esc_html__('The requested %s module class does not exist.', 'event_espresso'), $module_class);
1227
+			EE_Error::add_error($msg . '||' . $msg, __FILE__, __FUNCTION__, __LINE__);
1228
+			return false;
1229
+		}
1230
+		// add to array of registered modules
1231
+		EE_Registry::instance()->modules->{$module_class} = $module_path . $module_class . $module_ext;
1232
+		do_action(
1233
+			'AHEE__EE_Config__register_module__complete',
1234
+			$module_class,
1235
+			EE_Registry::instance()->modules->{$module_class}
1236
+		);
1237
+		return true;
1238
+	}
1239
+
1240
+
1241
+	/**
1242
+	 *    _initialize_modules
1243
+	 *    allow modules to set hooks for the rest of the system
1244
+	 *
1245
+	 * @access private
1246
+	 * @return void
1247
+	 */
1248
+	private function _initialize_modules()
1249
+	{
1250
+		// cycle thru shortcode folders
1251
+		foreach (EE_Registry::instance()->modules as $module_class => $module_path) {
1252
+			// fire the shortcode class's set_hooks methods in case it needs to hook into other parts of the system
1253
+			// which set hooks ?
1254
+			if (is_admin() && is_callable([$module_class, 'set_hooks_admin'])) {
1255
+				// fire immediately
1256
+				call_user_func([$module_class, 'set_hooks_admin']);
1257
+			} else {
1258
+				// delay until other systems are online
1259
+				add_action(
1260
+					'AHEE__EE_System__set_hooks_for_shortcodes_modules_and_addons',
1261
+					array($module_class, 'set_hooks')
1262
+				);
1263
+			}
1264
+		}
1265
+	}
1266
+
1267
+
1268
+	/**
1269
+	 *    register_route - adds module method routes to route_map
1270
+	 *
1271
+	 * @access    public
1272
+	 * @param    string $route       - "pretty" public alias for module method
1273
+	 * @param    string $module      - module name (classname without EED_ prefix)
1274
+	 * @param    string $method_name - the actual module method to be routed to
1275
+	 * @param    string $key         - url param key indicating a route is being called
1276
+	 * @return    bool
1277
+	 */
1278
+	public static function register_route($route = null, $module = null, $method_name = null, $key = 'ee')
1279
+	{
1280
+		do_action('AHEE__EE_Config__register_route__begin', $route, $module, $method_name);
1281
+		$module = str_replace('EED_', '', $module);
1282
+		$module_class = 'EED_' . $module;
1283
+		if (! isset(EE_Registry::instance()->modules->{$module_class})) {
1284
+			$msg = sprintf(esc_html__('The module %s has not been registered.', 'event_espresso'), $module);
1285
+			EE_Error::add_error($msg . '||' . $msg, __FILE__, __FUNCTION__, __LINE__);
1286
+			return false;
1287
+		}
1288
+		if (empty($route)) {
1289
+			$msg = sprintf(esc_html__('No route has been supplied.', 'event_espresso'), $route);
1290
+			EE_Error::add_error($msg . '||' . $msg, __FILE__, __FUNCTION__, __LINE__);
1291
+			return false;
1292
+		}
1293
+		if (! method_exists('EED_' . $module, $method_name)) {
1294
+			$msg = sprintf(
1295
+				esc_html__('A valid class method for the %s route has not been supplied.', 'event_espresso'),
1296
+				$route
1297
+			);
1298
+			EE_Error::add_error($msg . '||' . $msg, __FILE__, __FUNCTION__, __LINE__);
1299
+			return false;
1300
+		}
1301
+		EE_Config::$_module_route_map[ (string) $key ][ (string) $route ] = array('EED_' . $module, $method_name);
1302
+		return true;
1303
+	}
1304
+
1305
+
1306
+	/**
1307
+	 *    get_route - get module method route
1308
+	 *
1309
+	 * @access    public
1310
+	 * @param    string $route - "pretty" public alias for module method
1311
+	 * @param    string $key   - url param key indicating a route is being called
1312
+	 * @return    string
1313
+	 */
1314
+	public static function get_route($route = null, $key = 'ee')
1315
+	{
1316
+		do_action('AHEE__EE_Config__get_route__begin', $route);
1317
+		$route = (string) apply_filters('FHEE__EE_Config__get_route', $route);
1318
+		if (isset(EE_Config::$_module_route_map[ $key ][ $route ])) {
1319
+			return EE_Config::$_module_route_map[ $key ][ $route ];
1320
+		}
1321
+		return null;
1322
+	}
1323
+
1324
+
1325
+	/**
1326
+	 *    get_routes - get ALL module method routes
1327
+	 *
1328
+	 * @access    public
1329
+	 * @return    array
1330
+	 */
1331
+	public static function get_routes()
1332
+	{
1333
+		return EE_Config::$_module_route_map;
1334
+	}
1335
+
1336
+
1337
+	/**
1338
+	 *    register_forward - allows modules to forward request to another module for further processing
1339
+	 *
1340
+	 * @access    public
1341
+	 * @param    string       $route   - "pretty" public alias for module method
1342
+	 * @param    integer      $status  - integer value corresponding  to status constant strings set in module parent
1343
+	 *                                 class, allows different forwards to be served based on status
1344
+	 * @param    array|string $forward - function name or array( class, method )
1345
+	 * @param    string       $key     - url param key indicating a route is being called
1346
+	 * @return    bool
1347
+	 */
1348
+	public static function register_forward($route = null, $status = 0, $forward = null, $key = 'ee')
1349
+	{
1350
+		do_action('AHEE__EE_Config__register_forward', $route, $status, $forward);
1351
+		if (! isset(EE_Config::$_module_route_map[ $key ][ $route ]) || empty($route)) {
1352
+			$msg = sprintf(
1353
+				esc_html__('The module route %s for this forward has not been registered.', 'event_espresso'),
1354
+				$route
1355
+			);
1356
+			EE_Error::add_error($msg . '||' . $msg, __FILE__, __FUNCTION__, __LINE__);
1357
+			return false;
1358
+		}
1359
+		if (empty($forward)) {
1360
+			$msg = sprintf(esc_html__('No forwarding route has been supplied.', 'event_espresso'), $route);
1361
+			EE_Error::add_error($msg . '||' . $msg, __FILE__, __FUNCTION__, __LINE__);
1362
+			return false;
1363
+		}
1364
+		if (is_array($forward)) {
1365
+			if (! isset($forward[1])) {
1366
+				$msg = sprintf(
1367
+					esc_html__('A class method for the %s forwarding route has not been supplied.', 'event_espresso'),
1368
+					$route
1369
+				);
1370
+				EE_Error::add_error($msg . '||' . $msg, __FILE__, __FUNCTION__, __LINE__);
1371
+				return false;
1372
+			}
1373
+			if (! method_exists($forward[0], $forward[1])) {
1374
+				$msg = sprintf(
1375
+					esc_html__('The class method %s for the %s forwarding route is in invalid.', 'event_espresso'),
1376
+					$forward[1],
1377
+					$route
1378
+				);
1379
+				EE_Error::add_error($msg . '||' . $msg, __FILE__, __FUNCTION__, __LINE__);
1380
+				return false;
1381
+			}
1382
+		} elseif (! function_exists($forward)) {
1383
+			$msg = sprintf(
1384
+				esc_html__('The function %s for the %s forwarding route is in invalid.', 'event_espresso'),
1385
+				$forward,
1386
+				$route
1387
+			);
1388
+			EE_Error::add_error($msg . '||' . $msg, __FILE__, __FUNCTION__, __LINE__);
1389
+			return false;
1390
+		}
1391
+		EE_Config::$_module_forward_map[ $key ][ $route ][ absint($status) ] = $forward;
1392
+		return true;
1393
+	}
1394
+
1395
+
1396
+	/**
1397
+	 *    get_forward - get forwarding route
1398
+	 *
1399
+	 * @access    public
1400
+	 * @param    string  $route  - "pretty" public alias for module method
1401
+	 * @param    integer $status - integer value corresponding  to status constant strings set in module parent class,
1402
+	 *                           allows different forwards to be served based on status
1403
+	 * @param    string  $key    - url param key indicating a route is being called
1404
+	 * @return    string
1405
+	 */
1406
+	public static function get_forward($route = null, $status = 0, $key = 'ee')
1407
+	{
1408
+		do_action('AHEE__EE_Config__get_forward__begin', $route, $status);
1409
+		if (isset(EE_Config::$_module_forward_map[ $key ][ $route ][ $status ])) {
1410
+			return apply_filters(
1411
+				'FHEE__EE_Config__get_forward',
1412
+				EE_Config::$_module_forward_map[ $key ][ $route ][ $status ],
1413
+				$route,
1414
+				$status
1415
+			);
1416
+		}
1417
+		return null;
1418
+	}
1419
+
1420
+
1421
+	/**
1422
+	 *    register_forward - allows modules to specify different view templates for different method routes and status
1423
+	 *    results
1424
+	 *
1425
+	 * @access    public
1426
+	 * @param    string  $route  - "pretty" public alias for module method
1427
+	 * @param    integer $status - integer value corresponding  to status constant strings set in module parent class,
1428
+	 *                           allows different views to be served based on status
1429
+	 * @param    string  $view
1430
+	 * @param    string  $key    - url param key indicating a route is being called
1431
+	 * @return    bool
1432
+	 */
1433
+	public static function register_view($route = null, $status = 0, $view = null, $key = 'ee')
1434
+	{
1435
+		do_action('AHEE__EE_Config__register_view__begin', $route, $status, $view);
1436
+		if (! isset(EE_Config::$_module_route_map[ $key ][ $route ]) || empty($route)) {
1437
+			$msg = sprintf(
1438
+				esc_html__('The module route %s for this view has not been registered.', 'event_espresso'),
1439
+				$route
1440
+			);
1441
+			EE_Error::add_error($msg . '||' . $msg, __FILE__, __FUNCTION__, __LINE__);
1442
+			return false;
1443
+		}
1444
+		if (! is_readable($view)) {
1445
+			$msg = sprintf(
1446
+				esc_html__(
1447
+					'The %s view file could not be found or is not readable due to file permissions.',
1448
+					'event_espresso'
1449
+				),
1450
+				$view
1451
+			);
1452
+			EE_Error::add_error($msg . '||' . $msg, __FILE__, __FUNCTION__, __LINE__);
1453
+			return false;
1454
+		}
1455
+		EE_Config::$_module_view_map[ $key ][ $route ][ absint($status) ] = $view;
1456
+		return true;
1457
+	}
1458
+
1459
+
1460
+	/**
1461
+	 *    get_view - get view for route and status
1462
+	 *
1463
+	 * @access    public
1464
+	 * @param    string  $route  - "pretty" public alias for module method
1465
+	 * @param    integer $status - integer value corresponding  to status constant strings set in module parent class,
1466
+	 *                           allows different views to be served based on status
1467
+	 * @param    string  $key    - url param key indicating a route is being called
1468
+	 * @return    string
1469
+	 */
1470
+	public static function get_view($route = null, $status = 0, $key = 'ee')
1471
+	{
1472
+		do_action('AHEE__EE_Config__get_view__begin', $route, $status);
1473
+		if (isset(EE_Config::$_module_view_map[ $key ][ $route ][ $status ])) {
1474
+			return apply_filters(
1475
+				'FHEE__EE_Config__get_view',
1476
+				EE_Config::$_module_view_map[ $key ][ $route ][ $status ],
1477
+				$route,
1478
+				$status
1479
+			);
1480
+		}
1481
+		return null;
1482
+	}
1483
+
1484
+
1485
+	public function update_addon_option_names()
1486
+	{
1487
+		update_option(EE_Config::ADDON_OPTION_NAMES, $this->_addon_option_names);
1488
+	}
1489
+
1490
+
1491
+	public function shutdown()
1492
+	{
1493
+		$this->update_addon_option_names();
1494
+	}
1495
+
1496
+
1497
+	/**
1498
+	 * @return LegacyShortcodesManager
1499
+	 */
1500
+	public static function getLegacyShortcodesManager()
1501
+	{
1502
+		if (! EE_Config::instance()->legacy_shortcodes_manager instanceof LegacyShortcodesManager) {
1503
+			EE_Config::instance()->legacy_shortcodes_manager = LoaderFactory::getLoader()->getShared(
1504
+				LegacyShortcodesManager::class
1505
+			);
1506
+		}
1507
+		return EE_Config::instance()->legacy_shortcodes_manager;
1508
+	}
1509
+
1510
+
1511
+	/**
1512
+	 * register_shortcode - makes core aware of this shortcode
1513
+	 *
1514
+	 * @deprecated 4.9.26
1515
+	 * @param    string $shortcode_path - full path up to and including shortcode folder
1516
+	 * @return    bool
1517
+	 */
1518
+	public static function register_shortcode($shortcode_path = null)
1519
+	{
1520
+		EE_Error::doing_it_wrong(
1521
+			__METHOD__,
1522
+			esc_html__(
1523
+				'Usage is deprecated. Use \EventEspresso\core\services\shortcodes\LegacyShortcodesManager::registerShortcode() as direct replacement, or better yet, please see the new \EventEspresso\core\services\shortcodes\ShortcodesManager class.',
1524
+				'event_espresso'
1525
+			),
1526
+			'4.9.26'
1527
+		);
1528
+		return EE_Config::instance()->getLegacyShortcodesManager()->registerShortcode($shortcode_path);
1529
+	}
1530 1530
 }
1531 1531
 
1532 1532
 /**
@@ -1536,98 +1536,98 @@  discard block
 block discarded – undo
1536 1536
  */
1537 1537
 class EE_Config_Base
1538 1538
 {
1539
-    /**
1540
-     * Utility function for escaping the value of a property and returning.
1541
-     *
1542
-     * @param string $property property name (checks to see if exists).
1543
-     * @return mixed if a detected type found return the escaped value, otherwise just the raw value is returned.
1544
-     * @throws EE_Error
1545
-     */
1546
-    public function get_pretty($property)
1547
-    {
1548
-        if (! property_exists($this, $property)) {
1549
-            throw new EE_Error(
1550
-                sprintf(
1551
-                    esc_html__(
1552
-                        '%1$s::get_pretty() has been called with the property %2$s which does not exist on the %1$s config class.',
1553
-                        'event_espresso'
1554
-                    ),
1555
-                    get_class($this),
1556
-                    $property
1557
-                )
1558
-            );
1559
-        }
1560
-        // just handling escaping of strings for now.
1561
-        if (is_string($this->{$property})) {
1562
-            return stripslashes($this->{$property});
1563
-        }
1564
-        return $this->{$property};
1565
-    }
1566
-
1567
-
1568
-    public function populate()
1569
-    {
1570
-        // grab defaults via a new instance of this class.
1571
-        $class_name = get_class($this);
1572
-        $defaults = new $class_name();
1573
-        // loop through the properties for this class and see if they are set.  If they are NOT, then grab the
1574
-        // default from our $defaults object.
1575
-        foreach (get_object_vars($defaults) as $property => $value) {
1576
-            if ($this->{$property} === null) {
1577
-                $this->{$property} = $value;
1578
-            }
1579
-        }
1580
-        // cleanup
1581
-        unset($defaults);
1582
-    }
1583
-
1584
-
1585
-    /**
1586
-     *        __isset
1587
-     *
1588
-     * @param $a
1589
-     * @return bool
1590
-     */
1591
-    public function __isset($a)
1592
-    {
1593
-        return false;
1594
-    }
1595
-
1596
-
1597
-    /**
1598
-     *        __unset
1599
-     *
1600
-     * @param $a
1601
-     * @return bool
1602
-     */
1603
-    public function __unset($a)
1604
-    {
1605
-        return false;
1606
-    }
1607
-
1608
-
1609
-    /**
1610
-     *        __clone
1611
-     */
1612
-    public function __clone()
1613
-    {
1614
-    }
1615
-
1616
-
1617
-    /**
1618
-     *        __wakeup
1619
-     */
1620
-    public function __wakeup()
1621
-    {
1622
-    }
1623
-
1624
-
1625
-    /**
1626
-     *        __destruct
1627
-     */
1628
-    public function __destruct()
1629
-    {
1630
-    }
1539
+	/**
1540
+	 * Utility function for escaping the value of a property and returning.
1541
+	 *
1542
+	 * @param string $property property name (checks to see if exists).
1543
+	 * @return mixed if a detected type found return the escaped value, otherwise just the raw value is returned.
1544
+	 * @throws EE_Error
1545
+	 */
1546
+	public function get_pretty($property)
1547
+	{
1548
+		if (! property_exists($this, $property)) {
1549
+			throw new EE_Error(
1550
+				sprintf(
1551
+					esc_html__(
1552
+						'%1$s::get_pretty() has been called with the property %2$s which does not exist on the %1$s config class.',
1553
+						'event_espresso'
1554
+					),
1555
+					get_class($this),
1556
+					$property
1557
+				)
1558
+			);
1559
+		}
1560
+		// just handling escaping of strings for now.
1561
+		if (is_string($this->{$property})) {
1562
+			return stripslashes($this->{$property});
1563
+		}
1564
+		return $this->{$property};
1565
+	}
1566
+
1567
+
1568
+	public function populate()
1569
+	{
1570
+		// grab defaults via a new instance of this class.
1571
+		$class_name = get_class($this);
1572
+		$defaults = new $class_name();
1573
+		// loop through the properties for this class and see if they are set.  If they are NOT, then grab the
1574
+		// default from our $defaults object.
1575
+		foreach (get_object_vars($defaults) as $property => $value) {
1576
+			if ($this->{$property} === null) {
1577
+				$this->{$property} = $value;
1578
+			}
1579
+		}
1580
+		// cleanup
1581
+		unset($defaults);
1582
+	}
1583
+
1584
+
1585
+	/**
1586
+	 *        __isset
1587
+	 *
1588
+	 * @param $a
1589
+	 * @return bool
1590
+	 */
1591
+	public function __isset($a)
1592
+	{
1593
+		return false;
1594
+	}
1595
+
1596
+
1597
+	/**
1598
+	 *        __unset
1599
+	 *
1600
+	 * @param $a
1601
+	 * @return bool
1602
+	 */
1603
+	public function __unset($a)
1604
+	{
1605
+		return false;
1606
+	}
1607
+
1608
+
1609
+	/**
1610
+	 *        __clone
1611
+	 */
1612
+	public function __clone()
1613
+	{
1614
+	}
1615
+
1616
+
1617
+	/**
1618
+	 *        __wakeup
1619
+	 */
1620
+	public function __wakeup()
1621
+	{
1622
+	}
1623
+
1624
+
1625
+	/**
1626
+	 *        __destruct
1627
+	 */
1628
+	public function __destruct()
1629
+	{
1630
+	}
1631 1631
 }
1632 1632
 
1633 1633
 /**
@@ -1635,304 +1635,304 @@  discard block
 block discarded – undo
1635 1635
  */
1636 1636
 class EE_Core_Config extends EE_Config_Base
1637 1637
 {
1638
-    const OPTION_NAME_UXIP = 'ee_ueip_optin';
1639
-
1640
-
1641
-    public $current_blog_id;
1642
-
1643
-    public $ee_ueip_optin;
1644
-
1645
-    public $ee_ueip_has_notified;
1646
-
1647
-    /**
1648
-     * Not to be confused with the 4 critical page variables (See
1649
-     * get_critical_pages_array()), this is just an array of wp posts that have EE
1650
-     * shortcodes in them. Keys are slugs, values are arrays with only 1 element: where the key is the shortcode
1651
-     * in the page, and the value is the page's ID. The key 'posts' is basically a duplicate of this same array.
1652
-     *
1653
-     * @var array
1654
-     */
1655
-    public $post_shortcodes;
1656
-
1657
-    public $module_route_map;
1658
-
1659
-    public $module_forward_map;
1660
-
1661
-    public $module_view_map;
1662
-
1663
-    /**
1664
-     * The next 4 vars are the IDs of critical EE pages.
1665
-     *
1666
-     * @var int
1667
-     */
1668
-    public $reg_page_id;
1669
-
1670
-    public $txn_page_id;
1671
-
1672
-    public $thank_you_page_id;
1673
-
1674
-    public $cancel_page_id;
1675
-
1676
-    /**
1677
-     * The next 4 vars are the URLs of critical EE pages.
1678
-     *
1679
-     * @var int
1680
-     */
1681
-    public $reg_page_url;
1682
-
1683
-    public $txn_page_url;
1684
-
1685
-    public $thank_you_page_url;
1686
-
1687
-    public $cancel_page_url;
1688
-
1689
-    /**
1690
-     * The next vars relate to the custom slugs for EE CPT routes
1691
-     */
1692
-    public $event_cpt_slug;
1693
-
1694
-    /**
1695
-     * This caches the _ee_ueip_option in case this config is reset in the same
1696
-     * request across blog switches in a multisite context.
1697
-     * Avoids extra queries to the db for this option.
1698
-     *
1699
-     * @var bool
1700
-     */
1701
-    public static $ee_ueip_option;
1702
-
1703
-
1704
-    /**
1705
-     *    class constructor
1706
-     *
1707
-     * @access    public
1708
-     */
1709
-    public function __construct()
1710
-    {
1711
-        // set default organization settings
1712
-        $this->current_blog_id = get_current_blog_id();
1713
-        $this->current_blog_id = $this->current_blog_id === null ? 1 : $this->current_blog_id;
1714
-        $this->ee_ueip_optin = $this->_get_main_ee_ueip_optin();
1715
-        $this->ee_ueip_has_notified = is_main_site() ? get_option('ee_ueip_has_notified', false) : true;
1716
-        $this->post_shortcodes = array();
1717
-        $this->module_route_map = array();
1718
-        $this->module_forward_map = array();
1719
-        $this->module_view_map = array();
1720
-        // critical EE page IDs
1721
-        $this->reg_page_id = 0;
1722
-        $this->txn_page_id = 0;
1723
-        $this->thank_you_page_id = 0;
1724
-        $this->cancel_page_id = 0;
1725
-        // critical EE page URLs
1726
-        $this->reg_page_url = '';
1727
-        $this->txn_page_url = '';
1728
-        $this->thank_you_page_url = '';
1729
-        $this->cancel_page_url = '';
1730
-        // cpt slugs
1731
-        $this->event_cpt_slug = esc_html__('events', 'event_espresso');
1732
-        // ueip constant check
1733
-        if (defined('EE_DISABLE_UXIP') && EE_DISABLE_UXIP) {
1734
-            $this->ee_ueip_optin = false;
1735
-            $this->ee_ueip_has_notified = true;
1736
-        }
1737
-    }
1738
-
1739
-
1740
-    /**
1741
-     * @return array
1742
-     */
1743
-    public function get_critical_pages_array()
1744
-    {
1745
-        return array(
1746
-            $this->reg_page_id,
1747
-            $this->txn_page_id,
1748
-            $this->thank_you_page_id,
1749
-            $this->cancel_page_id,
1750
-        );
1751
-    }
1752
-
1753
-
1754
-    /**
1755
-     * @return array
1756
-     */
1757
-    public function get_critical_pages_shortcodes_array()
1758
-    {
1759
-        return array(
1760
-            $this->reg_page_id       => 'ESPRESSO_CHECKOUT',
1761
-            $this->txn_page_id       => 'ESPRESSO_TXN_PAGE',
1762
-            $this->thank_you_page_id => 'ESPRESSO_THANK_YOU',
1763
-            $this->cancel_page_id    => 'ESPRESSO_CANCELLED',
1764
-        );
1765
-    }
1766
-
1767
-
1768
-    /**
1769
-     *  gets/returns URL for EE reg_page
1770
-     *
1771
-     * @access    public
1772
-     * @return    string
1773
-     */
1774
-    public function reg_page_url()
1775
-    {
1776
-        if (! $this->reg_page_url) {
1777
-            $this->reg_page_url = add_query_arg(
1778
-                array('uts' => time()),
1779
-                get_permalink($this->reg_page_id)
1780
-            ) . '#checkout';
1781
-        }
1782
-        return $this->reg_page_url;
1783
-    }
1784
-
1785
-
1786
-    /**
1787
-     *  gets/returns URL for EE txn_page
1788
-     *
1789
-     * @param array $query_args like what gets passed to
1790
-     *                          add_query_arg() as the first argument
1791
-     * @access    public
1792
-     * @return    string
1793
-     */
1794
-    public function txn_page_url($query_args = array())
1795
-    {
1796
-        if (! $this->txn_page_url) {
1797
-            $this->txn_page_url = get_permalink($this->txn_page_id);
1798
-        }
1799
-        if ($query_args) {
1800
-            return add_query_arg($query_args, $this->txn_page_url);
1801
-        } else {
1802
-            return $this->txn_page_url;
1803
-        }
1804
-    }
1805
-
1806
-
1807
-    /**
1808
-     *  gets/returns URL for EE thank_you_page
1809
-     *
1810
-     * @param array $query_args like what gets passed to
1811
-     *                          add_query_arg() as the first argument
1812
-     * @access    public
1813
-     * @return    string
1814
-     */
1815
-    public function thank_you_page_url($query_args = array())
1816
-    {
1817
-        if (! $this->thank_you_page_url) {
1818
-            $this->thank_you_page_url = get_permalink($this->thank_you_page_id);
1819
-        }
1820
-        if ($query_args) {
1821
-            return add_query_arg($query_args, $this->thank_you_page_url);
1822
-        } else {
1823
-            return $this->thank_you_page_url;
1824
-        }
1825
-    }
1826
-
1827
-
1828
-    /**
1829
-     *  gets/returns URL for EE cancel_page
1830
-     *
1831
-     * @access    public
1832
-     * @return    string
1833
-     */
1834
-    public function cancel_page_url()
1835
-    {
1836
-        if (! $this->cancel_page_url) {
1837
-            $this->cancel_page_url = get_permalink($this->cancel_page_id);
1838
-        }
1839
-        return $this->cancel_page_url;
1840
-    }
1841
-
1842
-
1843
-    /**
1844
-     * Resets all critical page urls to their original state.  Used primarily by the __sleep() magic method currently.
1845
-     *
1846
-     * @since 4.7.5
1847
-     */
1848
-    protected function _reset_urls()
1849
-    {
1850
-        $this->reg_page_url = '';
1851
-        $this->txn_page_url = '';
1852
-        $this->cancel_page_url = '';
1853
-        $this->thank_you_page_url = '';
1854
-    }
1855
-
1856
-
1857
-    /**
1858
-     * Used to return what the optin value is set for the EE User Experience Program.
1859
-     * This accounts for multisite and this value being requested for a subsite.  In multisite, the value is set
1860
-     * on the main site only.
1861
-     *
1862
-     * @return bool
1863
-     */
1864
-    protected function _get_main_ee_ueip_optin()
1865
-    {
1866
-        // if this is the main site then we can just bypass our direct query.
1867
-        if (is_main_site()) {
1868
-            return get_option(self::OPTION_NAME_UXIP, false);
1869
-        }
1870
-        // is this already cached for this request?  If so use it.
1871
-        if (EE_Core_Config::$ee_ueip_option !== null) {
1872
-            return EE_Core_Config::$ee_ueip_option;
1873
-        }
1874
-        global $wpdb;
1875
-        $current_network_main_site = is_multisite() ? get_current_site() : null;
1876
-        $current_main_site_id = ! empty($current_network_main_site) ? $current_network_main_site->blog_id : 1;
1877
-        $option = self::OPTION_NAME_UXIP;
1878
-        // set correct table for query
1879
-        $table_name = $wpdb->get_blog_prefix($current_main_site_id) . 'options';
1880
-        // rather than getting blog option for the $current_main_site_id, we do a direct $wpdb query because
1881
-        // get_blog_option() does a switch_to_blog and that could cause infinite recursion because EE_Core_Config might be
1882
-        // re-constructed on the blog switch.  Note, we are still executing any core wp filters on this option retrieval.
1883
-        // this bit of code is basically a direct copy of get_option without any caching because we are NOT switched to the blog
1884
-        // for the purpose of caching.
1885
-        $pre = apply_filters('pre_option_' . $option, false, $option);
1886
-        if (false !== $pre) {
1887
-            EE_Core_Config::$ee_ueip_option = $pre;
1888
-            return EE_Core_Config::$ee_ueip_option;
1889
-        }
1890
-        $row = $wpdb->get_row(
1891
-            $wpdb->prepare(
1892
-                "SELECT option_value FROM $table_name WHERE option_name = %s LIMIT 1",
1893
-                $option
1894
-            )
1895
-        );
1896
-        if (is_object($row)) {
1897
-            $value = $row->option_value;
1898
-        } else { // option does not exist so use default.
1899
-            EE_Core_Config::$ee_ueip_option =  apply_filters('default_option_' . $option, false, $option);
1900
-            return EE_Core_Config::$ee_ueip_option;
1901
-        }
1902
-        EE_Core_Config::$ee_ueip_option = apply_filters('option_' . $option, maybe_unserialize($value), $option);
1903
-        return EE_Core_Config::$ee_ueip_option;
1904
-    }
1905
-
1906
-
1907
-    /**
1908
-     * Utility function for escaping the value of a property and returning.
1909
-     *
1910
-     * @param string $property property name (checks to see if exists).
1911
-     * @return mixed if a detected type found return the escaped value, otherwise just the raw value is returned.
1912
-     * @throws EE_Error
1913
-     */
1914
-    public function get_pretty($property)
1915
-    {
1916
-        if ($property === self::OPTION_NAME_UXIP) {
1917
-            return $this->ee_ueip_optin ? 'yes' : 'no';
1918
-        }
1919
-        return parent::get_pretty($property);
1920
-    }
1921
-
1922
-
1923
-    /**
1924
-     * Currently used to ensure critical page urls have initial values saved to the db instead of any current set values
1925
-     * on the object.
1926
-     *
1927
-     * @return array
1928
-     */
1929
-    public function __sleep()
1930
-    {
1931
-        // reset all url properties
1932
-        $this->_reset_urls();
1933
-        // return what to save to db
1934
-        return array_keys(get_object_vars($this));
1935
-    }
1638
+	const OPTION_NAME_UXIP = 'ee_ueip_optin';
1639
+
1640
+
1641
+	public $current_blog_id;
1642
+
1643
+	public $ee_ueip_optin;
1644
+
1645
+	public $ee_ueip_has_notified;
1646
+
1647
+	/**
1648
+	 * Not to be confused with the 4 critical page variables (See
1649
+	 * get_critical_pages_array()), this is just an array of wp posts that have EE
1650
+	 * shortcodes in them. Keys are slugs, values are arrays with only 1 element: where the key is the shortcode
1651
+	 * in the page, and the value is the page's ID. The key 'posts' is basically a duplicate of this same array.
1652
+	 *
1653
+	 * @var array
1654
+	 */
1655
+	public $post_shortcodes;
1656
+
1657
+	public $module_route_map;
1658
+
1659
+	public $module_forward_map;
1660
+
1661
+	public $module_view_map;
1662
+
1663
+	/**
1664
+	 * The next 4 vars are the IDs of critical EE pages.
1665
+	 *
1666
+	 * @var int
1667
+	 */
1668
+	public $reg_page_id;
1669
+
1670
+	public $txn_page_id;
1671
+
1672
+	public $thank_you_page_id;
1673
+
1674
+	public $cancel_page_id;
1675
+
1676
+	/**
1677
+	 * The next 4 vars are the URLs of critical EE pages.
1678
+	 *
1679
+	 * @var int
1680
+	 */
1681
+	public $reg_page_url;
1682
+
1683
+	public $txn_page_url;
1684
+
1685
+	public $thank_you_page_url;
1686
+
1687
+	public $cancel_page_url;
1688
+
1689
+	/**
1690
+	 * The next vars relate to the custom slugs for EE CPT routes
1691
+	 */
1692
+	public $event_cpt_slug;
1693
+
1694
+	/**
1695
+	 * This caches the _ee_ueip_option in case this config is reset in the same
1696
+	 * request across blog switches in a multisite context.
1697
+	 * Avoids extra queries to the db for this option.
1698
+	 *
1699
+	 * @var bool
1700
+	 */
1701
+	public static $ee_ueip_option;
1702
+
1703
+
1704
+	/**
1705
+	 *    class constructor
1706
+	 *
1707
+	 * @access    public
1708
+	 */
1709
+	public function __construct()
1710
+	{
1711
+		// set default organization settings
1712
+		$this->current_blog_id = get_current_blog_id();
1713
+		$this->current_blog_id = $this->current_blog_id === null ? 1 : $this->current_blog_id;
1714
+		$this->ee_ueip_optin = $this->_get_main_ee_ueip_optin();
1715
+		$this->ee_ueip_has_notified = is_main_site() ? get_option('ee_ueip_has_notified', false) : true;
1716
+		$this->post_shortcodes = array();
1717
+		$this->module_route_map = array();
1718
+		$this->module_forward_map = array();
1719
+		$this->module_view_map = array();
1720
+		// critical EE page IDs
1721
+		$this->reg_page_id = 0;
1722
+		$this->txn_page_id = 0;
1723
+		$this->thank_you_page_id = 0;
1724
+		$this->cancel_page_id = 0;
1725
+		// critical EE page URLs
1726
+		$this->reg_page_url = '';
1727
+		$this->txn_page_url = '';
1728
+		$this->thank_you_page_url = '';
1729
+		$this->cancel_page_url = '';
1730
+		// cpt slugs
1731
+		$this->event_cpt_slug = esc_html__('events', 'event_espresso');
1732
+		// ueip constant check
1733
+		if (defined('EE_DISABLE_UXIP') && EE_DISABLE_UXIP) {
1734
+			$this->ee_ueip_optin = false;
1735
+			$this->ee_ueip_has_notified = true;
1736
+		}
1737
+	}
1738
+
1739
+
1740
+	/**
1741
+	 * @return array
1742
+	 */
1743
+	public function get_critical_pages_array()
1744
+	{
1745
+		return array(
1746
+			$this->reg_page_id,
1747
+			$this->txn_page_id,
1748
+			$this->thank_you_page_id,
1749
+			$this->cancel_page_id,
1750
+		);
1751
+	}
1752
+
1753
+
1754
+	/**
1755
+	 * @return array
1756
+	 */
1757
+	public function get_critical_pages_shortcodes_array()
1758
+	{
1759
+		return array(
1760
+			$this->reg_page_id       => 'ESPRESSO_CHECKOUT',
1761
+			$this->txn_page_id       => 'ESPRESSO_TXN_PAGE',
1762
+			$this->thank_you_page_id => 'ESPRESSO_THANK_YOU',
1763
+			$this->cancel_page_id    => 'ESPRESSO_CANCELLED',
1764
+		);
1765
+	}
1766
+
1767
+
1768
+	/**
1769
+	 *  gets/returns URL for EE reg_page
1770
+	 *
1771
+	 * @access    public
1772
+	 * @return    string
1773
+	 */
1774
+	public function reg_page_url()
1775
+	{
1776
+		if (! $this->reg_page_url) {
1777
+			$this->reg_page_url = add_query_arg(
1778
+				array('uts' => time()),
1779
+				get_permalink($this->reg_page_id)
1780
+			) . '#checkout';
1781
+		}
1782
+		return $this->reg_page_url;
1783
+	}
1784
+
1785
+
1786
+	/**
1787
+	 *  gets/returns URL for EE txn_page
1788
+	 *
1789
+	 * @param array $query_args like what gets passed to
1790
+	 *                          add_query_arg() as the first argument
1791
+	 * @access    public
1792
+	 * @return    string
1793
+	 */
1794
+	public function txn_page_url($query_args = array())
1795
+	{
1796
+		if (! $this->txn_page_url) {
1797
+			$this->txn_page_url = get_permalink($this->txn_page_id);
1798
+		}
1799
+		if ($query_args) {
1800
+			return add_query_arg($query_args, $this->txn_page_url);
1801
+		} else {
1802
+			return $this->txn_page_url;
1803
+		}
1804
+	}
1805
+
1806
+
1807
+	/**
1808
+	 *  gets/returns URL for EE thank_you_page
1809
+	 *
1810
+	 * @param array $query_args like what gets passed to
1811
+	 *                          add_query_arg() as the first argument
1812
+	 * @access    public
1813
+	 * @return    string
1814
+	 */
1815
+	public function thank_you_page_url($query_args = array())
1816
+	{
1817
+		if (! $this->thank_you_page_url) {
1818
+			$this->thank_you_page_url = get_permalink($this->thank_you_page_id);
1819
+		}
1820
+		if ($query_args) {
1821
+			return add_query_arg($query_args, $this->thank_you_page_url);
1822
+		} else {
1823
+			return $this->thank_you_page_url;
1824
+		}
1825
+	}
1826
+
1827
+
1828
+	/**
1829
+	 *  gets/returns URL for EE cancel_page
1830
+	 *
1831
+	 * @access    public
1832
+	 * @return    string
1833
+	 */
1834
+	public function cancel_page_url()
1835
+	{
1836
+		if (! $this->cancel_page_url) {
1837
+			$this->cancel_page_url = get_permalink($this->cancel_page_id);
1838
+		}
1839
+		return $this->cancel_page_url;
1840
+	}
1841
+
1842
+
1843
+	/**
1844
+	 * Resets all critical page urls to their original state.  Used primarily by the __sleep() magic method currently.
1845
+	 *
1846
+	 * @since 4.7.5
1847
+	 */
1848
+	protected function _reset_urls()
1849
+	{
1850
+		$this->reg_page_url = '';
1851
+		$this->txn_page_url = '';
1852
+		$this->cancel_page_url = '';
1853
+		$this->thank_you_page_url = '';
1854
+	}
1855
+
1856
+
1857
+	/**
1858
+	 * Used to return what the optin value is set for the EE User Experience Program.
1859
+	 * This accounts for multisite and this value being requested for a subsite.  In multisite, the value is set
1860
+	 * on the main site only.
1861
+	 *
1862
+	 * @return bool
1863
+	 */
1864
+	protected function _get_main_ee_ueip_optin()
1865
+	{
1866
+		// if this is the main site then we can just bypass our direct query.
1867
+		if (is_main_site()) {
1868
+			return get_option(self::OPTION_NAME_UXIP, false);
1869
+		}
1870
+		// is this already cached for this request?  If so use it.
1871
+		if (EE_Core_Config::$ee_ueip_option !== null) {
1872
+			return EE_Core_Config::$ee_ueip_option;
1873
+		}
1874
+		global $wpdb;
1875
+		$current_network_main_site = is_multisite() ? get_current_site() : null;
1876
+		$current_main_site_id = ! empty($current_network_main_site) ? $current_network_main_site->blog_id : 1;
1877
+		$option = self::OPTION_NAME_UXIP;
1878
+		// set correct table for query
1879
+		$table_name = $wpdb->get_blog_prefix($current_main_site_id) . 'options';
1880
+		// rather than getting blog option for the $current_main_site_id, we do a direct $wpdb query because
1881
+		// get_blog_option() does a switch_to_blog and that could cause infinite recursion because EE_Core_Config might be
1882
+		// re-constructed on the blog switch.  Note, we are still executing any core wp filters on this option retrieval.
1883
+		// this bit of code is basically a direct copy of get_option without any caching because we are NOT switched to the blog
1884
+		// for the purpose of caching.
1885
+		$pre = apply_filters('pre_option_' . $option, false, $option);
1886
+		if (false !== $pre) {
1887
+			EE_Core_Config::$ee_ueip_option = $pre;
1888
+			return EE_Core_Config::$ee_ueip_option;
1889
+		}
1890
+		$row = $wpdb->get_row(
1891
+			$wpdb->prepare(
1892
+				"SELECT option_value FROM $table_name WHERE option_name = %s LIMIT 1",
1893
+				$option
1894
+			)
1895
+		);
1896
+		if (is_object($row)) {
1897
+			$value = $row->option_value;
1898
+		} else { // option does not exist so use default.
1899
+			EE_Core_Config::$ee_ueip_option =  apply_filters('default_option_' . $option, false, $option);
1900
+			return EE_Core_Config::$ee_ueip_option;
1901
+		}
1902
+		EE_Core_Config::$ee_ueip_option = apply_filters('option_' . $option, maybe_unserialize($value), $option);
1903
+		return EE_Core_Config::$ee_ueip_option;
1904
+	}
1905
+
1906
+
1907
+	/**
1908
+	 * Utility function for escaping the value of a property and returning.
1909
+	 *
1910
+	 * @param string $property property name (checks to see if exists).
1911
+	 * @return mixed if a detected type found return the escaped value, otherwise just the raw value is returned.
1912
+	 * @throws EE_Error
1913
+	 */
1914
+	public function get_pretty($property)
1915
+	{
1916
+		if ($property === self::OPTION_NAME_UXIP) {
1917
+			return $this->ee_ueip_optin ? 'yes' : 'no';
1918
+		}
1919
+		return parent::get_pretty($property);
1920
+	}
1921
+
1922
+
1923
+	/**
1924
+	 * Currently used to ensure critical page urls have initial values saved to the db instead of any current set values
1925
+	 * on the object.
1926
+	 *
1927
+	 * @return array
1928
+	 */
1929
+	public function __sleep()
1930
+	{
1931
+		// reset all url properties
1932
+		$this->_reset_urls();
1933
+		// return what to save to db
1934
+		return array_keys(get_object_vars($this));
1935
+	}
1936 1936
 }
1937 1937
 
1938 1938
 /**
@@ -1940,294 +1940,294 @@  discard block
 block discarded – undo
1940 1940
  */
1941 1941
 class EE_Organization_Config extends EE_Config_Base
1942 1942
 {
1943
-    /**
1944
-     * @var string $name
1945
-     * eg EE4.1
1946
-     */
1947
-    public $name;
1948
-
1949
-    /**
1950
-     * @var string $address_1
1951
-     * eg 123 Onna Road
1952
-     */
1953
-    public $address_1 = '';
1954
-
1955
-    /**
1956
-     * @var string $address_2
1957
-     * eg PO Box 123
1958
-     */
1959
-    public $address_2 = '';
1960
-
1961
-    /**
1962
-     * @var string $city
1963
-     * eg Inna City
1964
-     */
1965
-    public $city = '';
1966
-
1967
-    /**
1968
-     * @var int $STA_ID
1969
-     * eg 4
1970
-     */
1971
-    public $STA_ID = 0;
1972
-
1973
-    /**
1974
-     * @var string $CNT_ISO
1975
-     * eg US
1976
-     */
1977
-    public $CNT_ISO = 'US';
1978
-
1979
-    /**
1980
-     * @var string $zip
1981
-     * eg 12345  or V1A 2B3
1982
-     */
1983
-    public $zip = '';
1984
-
1985
-    /**
1986
-     * @var string $email
1987
-     * eg [email protected]
1988
-     */
1989
-    public $email;
1990
-
1991
-    /**
1992
-     * @var string $phone
1993
-     * eg. 111-111-1111
1994
-     */
1995
-    public $phone = '';
1996
-
1997
-    /**
1998
-     * @var string $vat
1999
-     * VAT/Tax Number
2000
-     */
2001
-    public $vat = '';
2002
-
2003
-    /**
2004
-     * @var string $logo_url
2005
-     * eg http://www.somedomain.com/wp-content/uploads/kittehs.jpg
2006
-     */
2007
-    public $logo_url = '';
2008
-
2009
-    /**
2010
-     * The below are all various properties for holding links to organization social network profiles
2011
-     */
2012
-    /**
2013
-     * facebook (facebook.com/profile.name)
2014
-     *
2015
-     * @var string
2016
-     */
2017
-    public $facebook = '';
2018
-
2019
-    /**
2020
-     * twitter (twitter.com/twitter_handle)
2021
-     *
2022
-     * @var string
2023
-     */
2024
-    public $twitter = '';
2025
-
2026
-    /**
2027
-     * linkedin (linkedin.com/in/profile_name)
2028
-     *
2029
-     * @var string
2030
-     */
2031
-    public $linkedin = '';
2032
-
2033
-    /**
2034
-     * pinterest (www.pinterest.com/profile_name)
2035
-     *
2036
-     * @var string
2037
-     */
2038
-    public $pinterest = '';
2039
-
2040
-    /**
2041
-     * google+ (google.com/+profileName)
2042
-     *
2043
-     * @var string
2044
-     */
2045
-    public $google = '';
2046
-
2047
-    /**
2048
-     * instagram (instagram.com/handle)
2049
-     *
2050
-     * @var string
2051
-     */
2052
-    public $instagram = '';
2053
-
2054
-
2055
-    /**
2056
-     *    class constructor
2057
-     *
2058
-     * @access    public
2059
-     */
2060
-    public function __construct()
2061
-    {
2062
-        // set default organization settings
2063
-        // decode HTML entities from the WP blogname, because it's stored in the DB with HTML entities encoded
2064
-        $this->name = wp_specialchars_decode(get_bloginfo('name'), ENT_QUOTES);
2065
-        $this->email = get_bloginfo('admin_email');
2066
-    }
1943
+	/**
1944
+	 * @var string $name
1945
+	 * eg EE4.1
1946
+	 */
1947
+	public $name;
1948
+
1949
+	/**
1950
+	 * @var string $address_1
1951
+	 * eg 123 Onna Road
1952
+	 */
1953
+	public $address_1 = '';
1954
+
1955
+	/**
1956
+	 * @var string $address_2
1957
+	 * eg PO Box 123
1958
+	 */
1959
+	public $address_2 = '';
1960
+
1961
+	/**
1962
+	 * @var string $city
1963
+	 * eg Inna City
1964
+	 */
1965
+	public $city = '';
1966
+
1967
+	/**
1968
+	 * @var int $STA_ID
1969
+	 * eg 4
1970
+	 */
1971
+	public $STA_ID = 0;
1972
+
1973
+	/**
1974
+	 * @var string $CNT_ISO
1975
+	 * eg US
1976
+	 */
1977
+	public $CNT_ISO = 'US';
1978
+
1979
+	/**
1980
+	 * @var string $zip
1981
+	 * eg 12345  or V1A 2B3
1982
+	 */
1983
+	public $zip = '';
1984
+
1985
+	/**
1986
+	 * @var string $email
1987
+	 * eg [email protected]
1988
+	 */
1989
+	public $email;
1990
+
1991
+	/**
1992
+	 * @var string $phone
1993
+	 * eg. 111-111-1111
1994
+	 */
1995
+	public $phone = '';
1996
+
1997
+	/**
1998
+	 * @var string $vat
1999
+	 * VAT/Tax Number
2000
+	 */
2001
+	public $vat = '';
2002
+
2003
+	/**
2004
+	 * @var string $logo_url
2005
+	 * eg http://www.somedomain.com/wp-content/uploads/kittehs.jpg
2006
+	 */
2007
+	public $logo_url = '';
2008
+
2009
+	/**
2010
+	 * The below are all various properties for holding links to organization social network profiles
2011
+	 */
2012
+	/**
2013
+	 * facebook (facebook.com/profile.name)
2014
+	 *
2015
+	 * @var string
2016
+	 */
2017
+	public $facebook = '';
2018
+
2019
+	/**
2020
+	 * twitter (twitter.com/twitter_handle)
2021
+	 *
2022
+	 * @var string
2023
+	 */
2024
+	public $twitter = '';
2025
+
2026
+	/**
2027
+	 * linkedin (linkedin.com/in/profile_name)
2028
+	 *
2029
+	 * @var string
2030
+	 */
2031
+	public $linkedin = '';
2032
+
2033
+	/**
2034
+	 * pinterest (www.pinterest.com/profile_name)
2035
+	 *
2036
+	 * @var string
2037
+	 */
2038
+	public $pinterest = '';
2039
+
2040
+	/**
2041
+	 * google+ (google.com/+profileName)
2042
+	 *
2043
+	 * @var string
2044
+	 */
2045
+	public $google = '';
2046
+
2047
+	/**
2048
+	 * instagram (instagram.com/handle)
2049
+	 *
2050
+	 * @var string
2051
+	 */
2052
+	public $instagram = '';
2053
+
2054
+
2055
+	/**
2056
+	 *    class constructor
2057
+	 *
2058
+	 * @access    public
2059
+	 */
2060
+	public function __construct()
2061
+	{
2062
+		// set default organization settings
2063
+		// decode HTML entities from the WP blogname, because it's stored in the DB with HTML entities encoded
2064
+		$this->name = wp_specialchars_decode(get_bloginfo('name'), ENT_QUOTES);
2065
+		$this->email = get_bloginfo('admin_email');
2066
+	}
2067 2067
 }
2068 2068
 
2069 2069
 /**
2070 2070
  * Class for defining what's in the EE_Config relating to currency
2071 2071
  */
2072 2072
 class EE_Currency_Config extends EE_Config_Base
2073
-{
2074
-    /**
2075
-     * @var string $code
2076
-     * eg 'US'
2077
-     */
2078
-    public $code;
2079
-
2080
-    /**
2081
-     * @var string $name
2082
-     * eg 'Dollar'
2083
-     */
2084
-    public $name;
2085
-
2086
-    /**
2087
-     * plural name
2088
-     *
2089
-     * @var string $plural
2090
-     * eg 'Dollars'
2091
-     */
2092
-    public $plural;
2093
-
2094
-    /**
2095
-     * currency sign
2096
-     *
2097
-     * @var string $sign
2098
-     * eg '$'
2099
-     */
2100
-    public $sign;
2101
-
2102
-    /**
2103
-     * Whether the currency sign should come before the number or not
2104
-     *
2105
-     * @var boolean $sign_b4
2106
-     */
2107
-    public $sign_b4;
2108
-
2109
-    /**
2110
-     * How many digits should come after the decimal place
2111
-     *
2112
-     * @var int $dec_plc
2113
-     */
2114
-    public $dec_plc;
2115
-
2116
-    /**
2117
-     * Symbol to use for decimal mark
2118
-     *
2119
-     * @var string $dec_mrk
2120
-     * eg '.'
2121
-     */
2122
-    public $dec_mrk;
2123
-
2124
-    /**
2125
-     * Symbol to use for thousands
2126
-     *
2127
-     * @var string $thsnds
2128
-     * eg ','
2129
-     */
2130
-    public $thsnds;
2131
-
2132
-
2133
-    /**
2134
-     * @param string|null $CNT_ISO
2135
-     * @throws EE_Error
2136
-     * @throws ReflectionException
2137
-     */
2138
-    public function __construct(?string $CNT_ISO = 'US')
2139
-    {
2140
-        if ($CNT_ISO && $CNT_ISO === $this->code) {
2141
-            return;
2142
-        }
2143
-        // get country code from organization settings or use default
2144
-        $ORG_CNT = isset(EE_Registry::instance()->CFG->organization)
2145
-                   && EE_Registry::instance()->CFG->organization instanceof EE_Organization_Config
2146
-            ? EE_Registry::instance()->CFG->organization->CNT_ISO
2147
-            : 'US';
2148
-        // but override if requested
2149
-        $CNT_ISO = ! empty($CNT_ISO) ? $CNT_ISO : $ORG_CNT;
2150
-        // so if that all went well, and we are not in M-Mode (cuz you can't query the db in M-Mode) and double-check the countries table exists
2151
-        $this->setCurrency($CNT_ISO);
2152
-        // fallback to hardcoded defaults, in case the above failed
2153
-        if (empty($this->code)) {
2154
-            $this->setFallbackCurrency();
2155
-        }
2156
-    }
2157
-
2158
-
2159
-    /**
2160
-     * @param string|null $CNT_ISO
2161
-     * @throws EE_Error
2162
-     * @throws ReflectionException
2163
-     */
2164
-    public function setCurrency(?string $CNT_ISO = 'US')
2165
-    {
2166
-        if (empty($CNT_ISO) || DbStatus::isOffline()) {
2167
-            return;
2168
-        }
2169
-
2170
-        /** @var TableAnalysis $table_analysis */
2171
-        $table_analysis = EE_Registry::instance()->create('TableAnalysis', [], true);
2172
-        if (! $table_analysis->tableExists(EE_Registry::instance()->load_model('Country')->table())) {
2173
-            return;
2174
-        }
2175
-        // retrieve the country settings from the db, just in case they have been customized
2176
-        $country = EE_Registry::instance()->load_model('Country')->get_one_by_ID($CNT_ISO);
2177
-        if (! $country instanceof EE_Country) {
2178
-            throw new DomainException(
2179
-                sprintf(
2180
-                    esc_html__('Invalid Country ISO Code: %1$s', 'event_espresso'),
2181
-                    $CNT_ISO
2182
-                )
2183
-            );
2184
-        }
2185
-        $this->code    = $country->currency_code();                  // currency code: USD, CAD, EUR
2186
-        $this->name    = $country->currency_name_single();           // Dollar
2187
-        $this->plural  = $country->currency_name_plural();           // Dollars
2188
-        $this->sign    = $country->currency_sign();                  // currency sign: $
2189
-        $this->sign_b4 = $country->currency_sign_before();           // currency sign before or after
2190
-        $this->dec_plc = $country->currency_decimal_places();        // decimal places: 2 = 0.00  3 = 0.000
2191
-        $this->dec_mrk = $country->currency_decimal_mark();          // decimal mark: ',' = 0,01 or '.' = 0.01
2192
-        $this->thsnds  = $country->currency_thousands_separator();   // thousands sep: ',' = 1,000 or '.' = 1.000
2193
-    }
2194
-
2195
-
2196
-    private function setFallbackCurrency()
2197
-    {
2198
-        // set default currency settings
2199
-        $this->code    = 'USD';
2200
-        $this->name    = esc_html__('Dollar', 'event_espresso');
2201
-        $this->plural  = esc_html__('Dollars', 'event_espresso');
2202
-        $this->sign    = '$';
2203
-        $this->sign_b4 = true;
2204
-        $this->dec_plc = 2;
2205
-        $this->dec_mrk = '.';
2206
-        $this->thsnds  = ',';
2207
-    }
2208
-
2209
-
2210
-    /**
2211
-     * @param string|null $CNT_ISO
2212
-     * @return EE_Currency_Config
2213
-     * @throws EE_Error
2214
-     * @throws ReflectionException
2215
-     */
2216
-    public static function getCurrencyConfig(?string $CNT_ISO = ''): EE_Currency_Config
2217
-    {
2218
-        // if CNT_ISO passed lets try to get currency settings for it.
2219
-        $currency_config = ! empty($CNT_ISO)
2220
-            ? new EE_Currency_Config($CNT_ISO)
2221
-            : null;
2222
-        // default currency settings for site if not set
2223
-        if ($currency_config instanceof EE_Currency_Config) {
2224
-            return $currency_config;
2225
-        }
2226
-        EE_Config::instance()->currency = EE_Config::instance()->currency instanceof EE_Currency_Config
2227
-            ? EE_Config::instance()->currency
2228
-            : new EE_Currency_Config();
2229
-        return EE_Config::instance()->currency;
2230
-    }
2073
+{
2074
+	/**
2075
+	 * @var string $code
2076
+	 * eg 'US'
2077
+	 */
2078
+	public $code;
2079
+
2080
+	/**
2081
+	 * @var string $name
2082
+	 * eg 'Dollar'
2083
+	 */
2084
+	public $name;
2085
+
2086
+	/**
2087
+	 * plural name
2088
+	 *
2089
+	 * @var string $plural
2090
+	 * eg 'Dollars'
2091
+	 */
2092
+	public $plural;
2093
+
2094
+	/**
2095
+	 * currency sign
2096
+	 *
2097
+	 * @var string $sign
2098
+	 * eg '$'
2099
+	 */
2100
+	public $sign;
2101
+
2102
+	/**
2103
+	 * Whether the currency sign should come before the number or not
2104
+	 *
2105
+	 * @var boolean $sign_b4
2106
+	 */
2107
+	public $sign_b4;
2108
+
2109
+	/**
2110
+	 * How many digits should come after the decimal place
2111
+	 *
2112
+	 * @var int $dec_plc
2113
+	 */
2114
+	public $dec_plc;
2115
+
2116
+	/**
2117
+	 * Symbol to use for decimal mark
2118
+	 *
2119
+	 * @var string $dec_mrk
2120
+	 * eg '.'
2121
+	 */
2122
+	public $dec_mrk;
2123
+
2124
+	/**
2125
+	 * Symbol to use for thousands
2126
+	 *
2127
+	 * @var string $thsnds
2128
+	 * eg ','
2129
+	 */
2130
+	public $thsnds;
2131
+
2132
+
2133
+	/**
2134
+	 * @param string|null $CNT_ISO
2135
+	 * @throws EE_Error
2136
+	 * @throws ReflectionException
2137
+	 */
2138
+	public function __construct(?string $CNT_ISO = 'US')
2139
+	{
2140
+		if ($CNT_ISO && $CNT_ISO === $this->code) {
2141
+			return;
2142
+		}
2143
+		// get country code from organization settings or use default
2144
+		$ORG_CNT = isset(EE_Registry::instance()->CFG->organization)
2145
+				   && EE_Registry::instance()->CFG->organization instanceof EE_Organization_Config
2146
+			? EE_Registry::instance()->CFG->organization->CNT_ISO
2147
+			: 'US';
2148
+		// but override if requested
2149
+		$CNT_ISO = ! empty($CNT_ISO) ? $CNT_ISO : $ORG_CNT;
2150
+		// so if that all went well, and we are not in M-Mode (cuz you can't query the db in M-Mode) and double-check the countries table exists
2151
+		$this->setCurrency($CNT_ISO);
2152
+		// fallback to hardcoded defaults, in case the above failed
2153
+		if (empty($this->code)) {
2154
+			$this->setFallbackCurrency();
2155
+		}
2156
+	}
2157
+
2158
+
2159
+	/**
2160
+	 * @param string|null $CNT_ISO
2161
+	 * @throws EE_Error
2162
+	 * @throws ReflectionException
2163
+	 */
2164
+	public function setCurrency(?string $CNT_ISO = 'US')
2165
+	{
2166
+		if (empty($CNT_ISO) || DbStatus::isOffline()) {
2167
+			return;
2168
+		}
2169
+
2170
+		/** @var TableAnalysis $table_analysis */
2171
+		$table_analysis = EE_Registry::instance()->create('TableAnalysis', [], true);
2172
+		if (! $table_analysis->tableExists(EE_Registry::instance()->load_model('Country')->table())) {
2173
+			return;
2174
+		}
2175
+		// retrieve the country settings from the db, just in case they have been customized
2176
+		$country = EE_Registry::instance()->load_model('Country')->get_one_by_ID($CNT_ISO);
2177
+		if (! $country instanceof EE_Country) {
2178
+			throw new DomainException(
2179
+				sprintf(
2180
+					esc_html__('Invalid Country ISO Code: %1$s', 'event_espresso'),
2181
+					$CNT_ISO
2182
+				)
2183
+			);
2184
+		}
2185
+		$this->code    = $country->currency_code();                  // currency code: USD, CAD, EUR
2186
+		$this->name    = $country->currency_name_single();           // Dollar
2187
+		$this->plural  = $country->currency_name_plural();           // Dollars
2188
+		$this->sign    = $country->currency_sign();                  // currency sign: $
2189
+		$this->sign_b4 = $country->currency_sign_before();           // currency sign before or after
2190
+		$this->dec_plc = $country->currency_decimal_places();        // decimal places: 2 = 0.00  3 = 0.000
2191
+		$this->dec_mrk = $country->currency_decimal_mark();          // decimal mark: ',' = 0,01 or '.' = 0.01
2192
+		$this->thsnds  = $country->currency_thousands_separator();   // thousands sep: ',' = 1,000 or '.' = 1.000
2193
+	}
2194
+
2195
+
2196
+	private function setFallbackCurrency()
2197
+	{
2198
+		// set default currency settings
2199
+		$this->code    = 'USD';
2200
+		$this->name    = esc_html__('Dollar', 'event_espresso');
2201
+		$this->plural  = esc_html__('Dollars', 'event_espresso');
2202
+		$this->sign    = '$';
2203
+		$this->sign_b4 = true;
2204
+		$this->dec_plc = 2;
2205
+		$this->dec_mrk = '.';
2206
+		$this->thsnds  = ',';
2207
+	}
2208
+
2209
+
2210
+	/**
2211
+	 * @param string|null $CNT_ISO
2212
+	 * @return EE_Currency_Config
2213
+	 * @throws EE_Error
2214
+	 * @throws ReflectionException
2215
+	 */
2216
+	public static function getCurrencyConfig(?string $CNT_ISO = ''): EE_Currency_Config
2217
+	{
2218
+		// if CNT_ISO passed lets try to get currency settings for it.
2219
+		$currency_config = ! empty($CNT_ISO)
2220
+			? new EE_Currency_Config($CNT_ISO)
2221
+			: null;
2222
+		// default currency settings for site if not set
2223
+		if ($currency_config instanceof EE_Currency_Config) {
2224
+			return $currency_config;
2225
+		}
2226
+		EE_Config::instance()->currency = EE_Config::instance()->currency instanceof EE_Currency_Config
2227
+			? EE_Config::instance()->currency
2228
+			: new EE_Currency_Config();
2229
+		return EE_Config::instance()->currency;
2230
+	}
2231 2231
 }
2232 2232
 
2233 2233
 /**
@@ -2235,402 +2235,402 @@  discard block
 block discarded – undo
2235 2235
  */
2236 2236
 class EE_Registration_Config extends EE_Config_Base
2237 2237
 {
2238
-    /**
2239
-     * Default registration status
2240
-     *
2241
-     * @var string $default_STS_ID
2242
-     * eg 'RPP'
2243
-     */
2244
-    public $default_STS_ID;
2245
-
2246
-    /**
2247
-     * For new events, this will be the default value for the maximum number of tickets (equivalent to maximum number of
2248
-     * registrations)
2249
-     *
2250
-     * @var int
2251
-     */
2252
-    public $default_maximum_number_of_tickets;
2253
-
2254
-    /**
2255
-     * level of validation to apply to email addresses
2256
-     *
2257
-     * @var string $email_validation_level
2258
-     * options: 'basic', 'wp_default', 'i18n', 'i18n_dns'
2259
-     */
2260
-    public $email_validation_level;
2261
-
2262
-    /**
2263
-     * whether to show alternate payment options during the reg process if payment status is pending
2264
-     *
2265
-     * @var boolean $show_pending_payment_options
2266
-     */
2267
-    public $show_pending_payment_options;
2268
-
2269
-    /**
2270
-     * an array of SPCO reg steps where:
2271
-     *        the keys denotes the reg step order
2272
-     *        each element consists of an array with the following elements:
2273
-     *            "file_path" => the file path to the EE_SPCO_Reg_Step class
2274
-     *            "class_name" => the specific EE_SPCO_Reg_Step child class name
2275
-     *            "slug" => the URL param used to trigger the reg step
2276
-     *
2277
-     * @var array $reg_steps
2278
-     */
2279
-    public $reg_steps;
2280
-
2281
-    /**
2282
-     * Whether registration confirmation should be the last page of SPCO
2283
-     *
2284
-     * @var boolean $reg_confirmation_last
2285
-     */
2286
-    public $reg_confirmation_last;
2287
-
2288
-    /**
2289
-     * Whether to enable the EE Bot Trap
2290
-     *
2291
-     * @var boolean $use_bot_trap
2292
-     */
2293
-    public $use_bot_trap;
2294
-
2295
-    /**
2296
-     * Whether to encrypt some data sent by the EE Bot Trap
2297
-     *
2298
-     * @var boolean $use_encryption
2299
-     */
2300
-    public $use_encryption;
2301
-
2302
-    /**
2303
-     * Whether to use ReCaptcha
2304
-     *
2305
-     * @var boolean $use_captcha
2306
-     */
2307
-    public $use_captcha;
2308
-
2309
-    /**
2310
-     * ReCaptcha Theme
2311
-     *
2312
-     * @var string $recaptcha_theme
2313
-     *    options: 'dark', 'light', 'invisible'
2314
-     */
2315
-    public $recaptcha_theme;
2316
-
2317
-    /**
2318
-     * ReCaptcha Badge - determines the position of the reCAPTCHA badge if using Invisible ReCaptcha.
2319
-     *
2320
-     * @var string $recaptcha_badge
2321
-     *    options: 'bottomright', 'bottomleft', 'inline'
2322
-     */
2323
-    public $recaptcha_badge;
2324
-
2325
-    /**
2326
-     * ReCaptcha Type
2327
-     *
2328
-     * @var string $recaptcha_type
2329
-     *    options: 'audio', 'image'
2330
-     */
2331
-    public $recaptcha_type;
2332
-
2333
-    /**
2334
-     * ReCaptcha language
2335
-     *
2336
-     * @var string $recaptcha_language
2337
-     * eg 'en'
2338
-     */
2339
-    public $recaptcha_language;
2340
-
2341
-    /**
2342
-     * ReCaptcha public key
2343
-     *
2344
-     * @var string $recaptcha_publickey
2345
-     */
2346
-    public $recaptcha_publickey;
2347
-
2348
-    /**
2349
-     * ReCaptcha private key
2350
-     *
2351
-     * @var string $recaptcha_privatekey
2352
-     */
2353
-    public $recaptcha_privatekey;
2354
-
2355
-    /**
2356
-     * array of form names protected by ReCaptcha
2357
-     *
2358
-     * @var array $recaptcha_protected_forms
2359
-     */
2360
-    public $recaptcha_protected_forms;
2361
-
2362
-    /**
2363
-     * ReCaptcha width
2364
-     *
2365
-     * @var int $recaptcha_width
2366
-     * @deprecated
2367
-     */
2368
-    public $recaptcha_width;
2369
-
2370
-    /**
2371
-     * Whether invalid attempts to directly access the registration checkout page should be tracked.
2372
-     *
2373
-     * @var boolean $track_invalid_checkout_access
2374
-     */
2375
-    protected $track_invalid_checkout_access = true;
2376
-
2377
-    /**
2378
-     * Whether to show the privacy policy consent checkbox
2379
-     *
2380
-     * @var bool
2381
-     */
2382
-    public $consent_checkbox_enabled;
2383
-
2384
-    /**
2385
-     * Label text to show on the checkbox
2386
-     *
2387
-     * @var string
2388
-     */
2389
-    public $consent_checkbox_label_text;
2390
-
2391
-    /*
2238
+	/**
2239
+	 * Default registration status
2240
+	 *
2241
+	 * @var string $default_STS_ID
2242
+	 * eg 'RPP'
2243
+	 */
2244
+	public $default_STS_ID;
2245
+
2246
+	/**
2247
+	 * For new events, this will be the default value for the maximum number of tickets (equivalent to maximum number of
2248
+	 * registrations)
2249
+	 *
2250
+	 * @var int
2251
+	 */
2252
+	public $default_maximum_number_of_tickets;
2253
+
2254
+	/**
2255
+	 * level of validation to apply to email addresses
2256
+	 *
2257
+	 * @var string $email_validation_level
2258
+	 * options: 'basic', 'wp_default', 'i18n', 'i18n_dns'
2259
+	 */
2260
+	public $email_validation_level;
2261
+
2262
+	/**
2263
+	 * whether to show alternate payment options during the reg process if payment status is pending
2264
+	 *
2265
+	 * @var boolean $show_pending_payment_options
2266
+	 */
2267
+	public $show_pending_payment_options;
2268
+
2269
+	/**
2270
+	 * an array of SPCO reg steps where:
2271
+	 *        the keys denotes the reg step order
2272
+	 *        each element consists of an array with the following elements:
2273
+	 *            "file_path" => the file path to the EE_SPCO_Reg_Step class
2274
+	 *            "class_name" => the specific EE_SPCO_Reg_Step child class name
2275
+	 *            "slug" => the URL param used to trigger the reg step
2276
+	 *
2277
+	 * @var array $reg_steps
2278
+	 */
2279
+	public $reg_steps;
2280
+
2281
+	/**
2282
+	 * Whether registration confirmation should be the last page of SPCO
2283
+	 *
2284
+	 * @var boolean $reg_confirmation_last
2285
+	 */
2286
+	public $reg_confirmation_last;
2287
+
2288
+	/**
2289
+	 * Whether to enable the EE Bot Trap
2290
+	 *
2291
+	 * @var boolean $use_bot_trap
2292
+	 */
2293
+	public $use_bot_trap;
2294
+
2295
+	/**
2296
+	 * Whether to encrypt some data sent by the EE Bot Trap
2297
+	 *
2298
+	 * @var boolean $use_encryption
2299
+	 */
2300
+	public $use_encryption;
2301
+
2302
+	/**
2303
+	 * Whether to use ReCaptcha
2304
+	 *
2305
+	 * @var boolean $use_captcha
2306
+	 */
2307
+	public $use_captcha;
2308
+
2309
+	/**
2310
+	 * ReCaptcha Theme
2311
+	 *
2312
+	 * @var string $recaptcha_theme
2313
+	 *    options: 'dark', 'light', 'invisible'
2314
+	 */
2315
+	public $recaptcha_theme;
2316
+
2317
+	/**
2318
+	 * ReCaptcha Badge - determines the position of the reCAPTCHA badge if using Invisible ReCaptcha.
2319
+	 *
2320
+	 * @var string $recaptcha_badge
2321
+	 *    options: 'bottomright', 'bottomleft', 'inline'
2322
+	 */
2323
+	public $recaptcha_badge;
2324
+
2325
+	/**
2326
+	 * ReCaptcha Type
2327
+	 *
2328
+	 * @var string $recaptcha_type
2329
+	 *    options: 'audio', 'image'
2330
+	 */
2331
+	public $recaptcha_type;
2332
+
2333
+	/**
2334
+	 * ReCaptcha language
2335
+	 *
2336
+	 * @var string $recaptcha_language
2337
+	 * eg 'en'
2338
+	 */
2339
+	public $recaptcha_language;
2340
+
2341
+	/**
2342
+	 * ReCaptcha public key
2343
+	 *
2344
+	 * @var string $recaptcha_publickey
2345
+	 */
2346
+	public $recaptcha_publickey;
2347
+
2348
+	/**
2349
+	 * ReCaptcha private key
2350
+	 *
2351
+	 * @var string $recaptcha_privatekey
2352
+	 */
2353
+	public $recaptcha_privatekey;
2354
+
2355
+	/**
2356
+	 * array of form names protected by ReCaptcha
2357
+	 *
2358
+	 * @var array $recaptcha_protected_forms
2359
+	 */
2360
+	public $recaptcha_protected_forms;
2361
+
2362
+	/**
2363
+	 * ReCaptcha width
2364
+	 *
2365
+	 * @var int $recaptcha_width
2366
+	 * @deprecated
2367
+	 */
2368
+	public $recaptcha_width;
2369
+
2370
+	/**
2371
+	 * Whether invalid attempts to directly access the registration checkout page should be tracked.
2372
+	 *
2373
+	 * @var boolean $track_invalid_checkout_access
2374
+	 */
2375
+	protected $track_invalid_checkout_access = true;
2376
+
2377
+	/**
2378
+	 * Whether to show the privacy policy consent checkbox
2379
+	 *
2380
+	 * @var bool
2381
+	 */
2382
+	public $consent_checkbox_enabled;
2383
+
2384
+	/**
2385
+	 * Label text to show on the checkbox
2386
+	 *
2387
+	 * @var string
2388
+	 */
2389
+	public $consent_checkbox_label_text;
2390
+
2391
+	/*
2392 2392
      * String describing how long to keep payment logs. Passed into DateTime constructor
2393 2393
      * @var string
2394 2394
      */
2395
-    public $gateway_log_lifespan = '1 week';
2396
-
2397
-    /**
2398
-     * Enable copy attendee info at form
2399
-     *
2400
-     * @var boolean $enable_copy_attendee
2401
-     */
2402
-    protected $copy_attendee_info = true;
2403
-
2404
-    /**
2405
-     * @var bool|int|string|null $skip_reg_confirmation
2406
-     * @deprecated
2407
-     */
2408
-    public $skip_reg_confirmation;
2409
-
2410
-    private bool $use_session_countdown = false;
2411
-
2412
-
2413
-
2414
-
2415
-    /**
2416
-     *    class constructor
2417
-     *
2418
-     * @access    public
2419
-     */
2420
-    public function __construct()
2421
-    {
2422
-        // set default registration settings
2423
-        $this->default_STS_ID = RegStatus::PENDING_PAYMENT;
2424
-        $this->email_validation_level = 'wp_default';
2425
-        $this->show_pending_payment_options = true;
2426
-        $this->reg_steps = array();
2427
-        $this->reg_confirmation_last = false;
2428
-        $this->use_bot_trap = true;
2429
-        $this->use_encryption = true;
2430
-        $this->use_captcha = false;
2431
-        $this->recaptcha_theme = 'light';
2432
-        $this->recaptcha_badge = 'bottomleft';
2433
-        $this->recaptcha_type = 'image';
2434
-        $this->recaptcha_language = 'en';
2435
-        $this->recaptcha_publickey = null;
2436
-        $this->recaptcha_privatekey = null;
2437
-        $this->recaptcha_protected_forms = array();
2438
-        $this->recaptcha_width = 500;
2439
-        $this->default_maximum_number_of_tickets = 10;
2440
-        $this->consent_checkbox_enabled = false;
2441
-        $this->consent_checkbox_label_text = '';
2442
-        $this->gateway_log_lifespan = '7 days';
2443
-        $this->copy_attendee_info = true;
2444
-        $this->use_session_countdown = false;
2445
-    }
2446
-
2447
-
2448
-    /**
2449
-     * This is called by the config loader and hooks are initialized AFTER the config has been populated.
2450
-     *
2451
-     * @since 4.8.8.rc.019
2452
-     */
2453
-    public function do_hooks()
2454
-    {
2455
-        add_action('AHEE__EE_Config___load_core_config__end', array($this, 'set_default_reg_status_on_EEM_Event'));
2456
-        add_action('AHEE__EE_Config___load_core_config__end', array($this, 'set_default_max_ticket_on_EEM_Event'));
2457
-        add_action('setup_theme', array($this, 'setDefaultCheckboxLabelText'));
2458
-    }
2459
-
2460
-
2461
-    /**
2462
-     * Hooked into `AHEE__EE_Config___load_core_config__end` to ensure the default for the
2463
-     * EVT_default_registration_status field matches the config setting for default_STS_ID.
2464
-     */
2465
-    public function set_default_reg_status_on_EEM_Event()
2466
-    {
2467
-        EEM_Event::set_default_reg_status($this->default_STS_ID);
2468
-    }
2469
-
2470
-
2471
-    /**
2472
-     * Hooked into `AHEE__EE_Config___load_core_config__end` to ensure the default for the EVT_additional_limit field
2473
-     * for Events matches the config setting for default_maximum_number_of_tickets
2474
-     */
2475
-    public function set_default_max_ticket_on_EEM_Event()
2476
-    {
2477
-        EEM_Event::set_default_additional_limit($this->default_maximum_number_of_tickets);
2478
-    }
2479
-
2480
-
2481
-    /**
2482
-     * Sets the default consent checkbox text. This needs to be done a bit later than when EE_Registration_Config is
2483
-     * constructed because that happens before we can get the privacy policy page's permalink.
2484
-     *
2485
-     * @throws InvalidArgumentException
2486
-     * @throws InvalidDataTypeException
2487
-     * @throws InvalidInterfaceException
2488
-     */
2489
-    public function setDefaultCheckboxLabelText()
2490
-    {
2491
-        if (
2492
-            $this->getConsentCheckboxLabelText() === null
2493
-            || $this->getConsentCheckboxLabelText() === ''
2494
-        ) {
2495
-            $opening_a_tag = '';
2496
-            $closing_a_tag = '';
2497
-            if (function_exists('get_privacy_policy_url')) {
2498
-                $privacy_page_url = get_privacy_policy_url();
2499
-                if (! empty($privacy_page_url)) {
2500
-                    $opening_a_tag = '<a href="' . $privacy_page_url . '" target="_blank">';
2501
-                    $closing_a_tag = '</a>';
2502
-                }
2503
-            }
2504
-            $loader = LoaderFactory::getLoader();
2505
-            $org_config = $loader->getShared('EE_Organization_Config');
2506
-            /**
2507
-             * @var $org_config EE_Organization_Config
2508
-             */
2509
-
2510
-            $this->setConsentCheckboxLabelText(
2511
-                sprintf(
2512
-                    esc_html__(
2513
-                        'I consent to %1$s storing and using my personal information, according to their %2$sprivacy policy%3$s.',
2514
-                        'event_espresso'
2515
-                    ),
2516
-                    $org_config->name,
2517
-                    $opening_a_tag,
2518
-                    $closing_a_tag
2519
-                )
2520
-            );
2521
-        }
2522
-    }
2523
-
2524
-
2525
-    /**
2526
-     * @return boolean
2527
-     */
2528
-    public function track_invalid_checkout_access()
2529
-    {
2530
-        return $this->track_invalid_checkout_access;
2531
-    }
2532
-
2533
-
2534
-    /**
2535
-     * @param boolean $track_invalid_checkout_access
2536
-     */
2537
-    public function set_track_invalid_checkout_access($track_invalid_checkout_access)
2538
-    {
2539
-        $this->track_invalid_checkout_access = filter_var(
2540
-            $track_invalid_checkout_access,
2541
-            FILTER_VALIDATE_BOOLEAN
2542
-        );
2543
-    }
2544
-
2545
-    /**
2546
-     * @return boolean
2547
-     */
2548
-    public function copyAttendeeInfo()
2549
-    {
2550
-        return $this->copy_attendee_info;
2551
-    }
2552
-
2553
-
2554
-    /**
2555
-     * @param boolean $copy_attendee_info
2556
-     */
2557
-    public function setCopyAttendeeInfo($copy_attendee_info)
2558
-    {
2559
-        $this->copy_attendee_info = filter_var(
2560
-            $copy_attendee_info,
2561
-            FILTER_VALIDATE_BOOLEAN
2562
-        );
2563
-    }
2564
-
2565
-
2566
-    /**
2567
-     * Gets the options to make available for the gateway log lifespan
2568
-     * @return array
2569
-     */
2570
-    public function gatewayLogLifespanOptions()
2571
-    {
2572
-        return (array) apply_filters(
2573
-            'FHEE_EE_Admin_Config__gatewayLogLifespanOptions',
2574
-            array(
2575
-                '1 second' => esc_html__('Don\'t Log At All', 'event_espresso'),
2576
-                '1 day' => esc_html__('1 Day', 'event_espresso'),
2577
-                '7 days' => esc_html__('7 Days', 'event_espresso'),
2578
-                '14 days' => esc_html__('14 Days', 'event_espresso'),
2579
-                '30 days' => esc_html__('30 Days', 'event_espresso')
2580
-            )
2581
-        );
2582
-    }
2583
-
2584
-
2585
-    /**
2586
-     * @return bool
2587
-     */
2588
-    public function isConsentCheckboxEnabled()
2589
-    {
2590
-        return $this->consent_checkbox_enabled;
2591
-    }
2592
-
2593
-
2594
-    /**
2595
-     * @param bool $consent_checkbox_enabled
2596
-     */
2597
-    public function setConsentCheckboxEnabled($consent_checkbox_enabled)
2598
-    {
2599
-        $this->consent_checkbox_enabled = filter_var(
2600
-            $consent_checkbox_enabled,
2601
-            FILTER_VALIDATE_BOOLEAN
2602
-        );
2603
-    }
2604
-
2605
-
2606
-    /**
2607
-     * @return string
2608
-     */
2609
-    public function getConsentCheckboxLabelText()
2610
-    {
2611
-        return $this->consent_checkbox_label_text;
2612
-    }
2613
-
2614
-
2615
-    /**
2616
-     * @param string $consent_checkbox_label_text
2617
-     */
2618
-    public function setConsentCheckboxLabelText($consent_checkbox_label_text)
2619
-    {
2620
-        $this->consent_checkbox_label_text = (string) $consent_checkbox_label_text;
2621
-    }
2622
-
2623
-
2624
-    public function useSessionCountdown(): bool
2625
-    {
2626
-        return $this->use_session_countdown;
2627
-    }
2628
-
2629
-
2630
-    public function setUseSessionCountdown(bool $use_session_countdown): void
2631
-    {
2632
-        $this->use_session_countdown = $use_session_countdown;
2633
-    }
2395
+	public $gateway_log_lifespan = '1 week';
2396
+
2397
+	/**
2398
+	 * Enable copy attendee info at form
2399
+	 *
2400
+	 * @var boolean $enable_copy_attendee
2401
+	 */
2402
+	protected $copy_attendee_info = true;
2403
+
2404
+	/**
2405
+	 * @var bool|int|string|null $skip_reg_confirmation
2406
+	 * @deprecated
2407
+	 */
2408
+	public $skip_reg_confirmation;
2409
+
2410
+	private bool $use_session_countdown = false;
2411
+
2412
+
2413
+
2414
+
2415
+	/**
2416
+	 *    class constructor
2417
+	 *
2418
+	 * @access    public
2419
+	 */
2420
+	public function __construct()
2421
+	{
2422
+		// set default registration settings
2423
+		$this->default_STS_ID = RegStatus::PENDING_PAYMENT;
2424
+		$this->email_validation_level = 'wp_default';
2425
+		$this->show_pending_payment_options = true;
2426
+		$this->reg_steps = array();
2427
+		$this->reg_confirmation_last = false;
2428
+		$this->use_bot_trap = true;
2429
+		$this->use_encryption = true;
2430
+		$this->use_captcha = false;
2431
+		$this->recaptcha_theme = 'light';
2432
+		$this->recaptcha_badge = 'bottomleft';
2433
+		$this->recaptcha_type = 'image';
2434
+		$this->recaptcha_language = 'en';
2435
+		$this->recaptcha_publickey = null;
2436
+		$this->recaptcha_privatekey = null;
2437
+		$this->recaptcha_protected_forms = array();
2438
+		$this->recaptcha_width = 500;
2439
+		$this->default_maximum_number_of_tickets = 10;
2440
+		$this->consent_checkbox_enabled = false;
2441
+		$this->consent_checkbox_label_text = '';
2442
+		$this->gateway_log_lifespan = '7 days';
2443
+		$this->copy_attendee_info = true;
2444
+		$this->use_session_countdown = false;
2445
+	}
2446
+
2447
+
2448
+	/**
2449
+	 * This is called by the config loader and hooks are initialized AFTER the config has been populated.
2450
+	 *
2451
+	 * @since 4.8.8.rc.019
2452
+	 */
2453
+	public function do_hooks()
2454
+	{
2455
+		add_action('AHEE__EE_Config___load_core_config__end', array($this, 'set_default_reg_status_on_EEM_Event'));
2456
+		add_action('AHEE__EE_Config___load_core_config__end', array($this, 'set_default_max_ticket_on_EEM_Event'));
2457
+		add_action('setup_theme', array($this, 'setDefaultCheckboxLabelText'));
2458
+	}
2459
+
2460
+
2461
+	/**
2462
+	 * Hooked into `AHEE__EE_Config___load_core_config__end` to ensure the default for the
2463
+	 * EVT_default_registration_status field matches the config setting for default_STS_ID.
2464
+	 */
2465
+	public function set_default_reg_status_on_EEM_Event()
2466
+	{
2467
+		EEM_Event::set_default_reg_status($this->default_STS_ID);
2468
+	}
2469
+
2470
+
2471
+	/**
2472
+	 * Hooked into `AHEE__EE_Config___load_core_config__end` to ensure the default for the EVT_additional_limit field
2473
+	 * for Events matches the config setting for default_maximum_number_of_tickets
2474
+	 */
2475
+	public function set_default_max_ticket_on_EEM_Event()
2476
+	{
2477
+		EEM_Event::set_default_additional_limit($this->default_maximum_number_of_tickets);
2478
+	}
2479
+
2480
+
2481
+	/**
2482
+	 * Sets the default consent checkbox text. This needs to be done a bit later than when EE_Registration_Config is
2483
+	 * constructed because that happens before we can get the privacy policy page's permalink.
2484
+	 *
2485
+	 * @throws InvalidArgumentException
2486
+	 * @throws InvalidDataTypeException
2487
+	 * @throws InvalidInterfaceException
2488
+	 */
2489
+	public function setDefaultCheckboxLabelText()
2490
+	{
2491
+		if (
2492
+			$this->getConsentCheckboxLabelText() === null
2493
+			|| $this->getConsentCheckboxLabelText() === ''
2494
+		) {
2495
+			$opening_a_tag = '';
2496
+			$closing_a_tag = '';
2497
+			if (function_exists('get_privacy_policy_url')) {
2498
+				$privacy_page_url = get_privacy_policy_url();
2499
+				if (! empty($privacy_page_url)) {
2500
+					$opening_a_tag = '<a href="' . $privacy_page_url . '" target="_blank">';
2501
+					$closing_a_tag = '</a>';
2502
+				}
2503
+			}
2504
+			$loader = LoaderFactory::getLoader();
2505
+			$org_config = $loader->getShared('EE_Organization_Config');
2506
+			/**
2507
+			 * @var $org_config EE_Organization_Config
2508
+			 */
2509
+
2510
+			$this->setConsentCheckboxLabelText(
2511
+				sprintf(
2512
+					esc_html__(
2513
+						'I consent to %1$s storing and using my personal information, according to their %2$sprivacy policy%3$s.',
2514
+						'event_espresso'
2515
+					),
2516
+					$org_config->name,
2517
+					$opening_a_tag,
2518
+					$closing_a_tag
2519
+				)
2520
+			);
2521
+		}
2522
+	}
2523
+
2524
+
2525
+	/**
2526
+	 * @return boolean
2527
+	 */
2528
+	public function track_invalid_checkout_access()
2529
+	{
2530
+		return $this->track_invalid_checkout_access;
2531
+	}
2532
+
2533
+
2534
+	/**
2535
+	 * @param boolean $track_invalid_checkout_access
2536
+	 */
2537
+	public function set_track_invalid_checkout_access($track_invalid_checkout_access)
2538
+	{
2539
+		$this->track_invalid_checkout_access = filter_var(
2540
+			$track_invalid_checkout_access,
2541
+			FILTER_VALIDATE_BOOLEAN
2542
+		);
2543
+	}
2544
+
2545
+	/**
2546
+	 * @return boolean
2547
+	 */
2548
+	public function copyAttendeeInfo()
2549
+	{
2550
+		return $this->copy_attendee_info;
2551
+	}
2552
+
2553
+
2554
+	/**
2555
+	 * @param boolean $copy_attendee_info
2556
+	 */
2557
+	public function setCopyAttendeeInfo($copy_attendee_info)
2558
+	{
2559
+		$this->copy_attendee_info = filter_var(
2560
+			$copy_attendee_info,
2561
+			FILTER_VALIDATE_BOOLEAN
2562
+		);
2563
+	}
2564
+
2565
+
2566
+	/**
2567
+	 * Gets the options to make available for the gateway log lifespan
2568
+	 * @return array
2569
+	 */
2570
+	public function gatewayLogLifespanOptions()
2571
+	{
2572
+		return (array) apply_filters(
2573
+			'FHEE_EE_Admin_Config__gatewayLogLifespanOptions',
2574
+			array(
2575
+				'1 second' => esc_html__('Don\'t Log At All', 'event_espresso'),
2576
+				'1 day' => esc_html__('1 Day', 'event_espresso'),
2577
+				'7 days' => esc_html__('7 Days', 'event_espresso'),
2578
+				'14 days' => esc_html__('14 Days', 'event_espresso'),
2579
+				'30 days' => esc_html__('30 Days', 'event_espresso')
2580
+			)
2581
+		);
2582
+	}
2583
+
2584
+
2585
+	/**
2586
+	 * @return bool
2587
+	 */
2588
+	public function isConsentCheckboxEnabled()
2589
+	{
2590
+		return $this->consent_checkbox_enabled;
2591
+	}
2592
+
2593
+
2594
+	/**
2595
+	 * @param bool $consent_checkbox_enabled
2596
+	 */
2597
+	public function setConsentCheckboxEnabled($consent_checkbox_enabled)
2598
+	{
2599
+		$this->consent_checkbox_enabled = filter_var(
2600
+			$consent_checkbox_enabled,
2601
+			FILTER_VALIDATE_BOOLEAN
2602
+		);
2603
+	}
2604
+
2605
+
2606
+	/**
2607
+	 * @return string
2608
+	 */
2609
+	public function getConsentCheckboxLabelText()
2610
+	{
2611
+		return $this->consent_checkbox_label_text;
2612
+	}
2613
+
2614
+
2615
+	/**
2616
+	 * @param string $consent_checkbox_label_text
2617
+	 */
2618
+	public function setConsentCheckboxLabelText($consent_checkbox_label_text)
2619
+	{
2620
+		$this->consent_checkbox_label_text = (string) $consent_checkbox_label_text;
2621
+	}
2622
+
2623
+
2624
+	public function useSessionCountdown(): bool
2625
+	{
2626
+		return $this->use_session_countdown;
2627
+	}
2628
+
2629
+
2630
+	public function setUseSessionCountdown(bool $use_session_countdown): void
2631
+	{
2632
+		$this->use_session_countdown = $use_session_countdown;
2633
+	}
2634 2634
 
2635 2635
 
2636 2636
 }
@@ -2640,134 +2640,134 @@  discard block
 block discarded – undo
2640 2640
  */
2641 2641
 class EE_Admin_Config extends EE_Config_Base
2642 2642
 {
2643
-    private $useAdvancedEditor = true;
2644
-
2645
-    public $use_remote_logging = false;
2646
-
2647
-    public $show_reg_footer = false;
2648
-
2649
-    private $is_caffeinated;
2650
-
2651
-    public $use_dashboard_widget = false;
2652
-
2653
-    public $use_personnel_manager = false;
2654
-
2655
-    public $use_event_timezones = false;
2656
-
2657
-    /**
2658
-     * adds extra layer of encoding to session data to prevent serialization errors
2659
-     * but is incompatible with some server configuration errors
2660
-     * if you get "500 internal server errors" during registration, try turning this on
2661
-     * if you get PHP fatal errors regarding base 64 methods not defined, then turn this off
2662
-     *
2663
-     * @var boolean $encode_session_data
2664
-     */
2665
-    private $encode_session_data = false;
2666
-
2667
-    public ?string $log_file_name = '';
2668
-
2669
-    public ?string $debug_file_name = '';
2670
-
2671
-    public ?string $remote_logging_url = '';
2672
-
2673
-    public ?string $affiliate_id = 'default';
2674
-
2675
-    /**
2676
-     * @var int|null $events_in_dashboard
2677
-     * @deprecated
2678
-     */
2679
-    public ?int $events_in_dashboard = 30;
2680
-
2681
-
2682
-    public function __construct()
2683
-    {
2684
-        /** @var EventEspresso\core\domain\Domain $domain */
2685
-        $domain               = LoaderFactory::getLoader()->getShared('EventEspresso\core\domain\Domain');
2686
-        $this->is_caffeinated = $domain->isCaffeinated();
2687
-
2688
-        // set default general admin settings
2689
-        $this->show_reg_footer = apply_filters(
2690
-            'FHEE__EE_Admin_Config__show_reg_footer__default',
2691
-            false
2692
-        );
2693
-    }
2694
-
2695
-
2696
-    /**
2697
-     * @param bool $reset
2698
-     * @return string
2699
-     */
2700
-    public function log_file_name(bool $reset = false): ?string
2701
-    {
2702
-        if (empty($this->log_file_name) || $reset) {
2703
-            $this->log_file_name = sanitize_key('espresso_log_' . md5(uniqid('', true))) . '.txt';
2704
-            EE_Config::instance()->update_espresso_config(false, false);
2705
-        }
2706
-        return $this->log_file_name;
2707
-    }
2708
-
2709
-
2710
-    /**
2711
-     * @param bool $reset
2712
-     * @return string
2713
-     */
2714
-    public function debug_file_name(bool $reset = false): ?string
2715
-    {
2716
-        if (empty($this->debug_file_name) || $reset) {
2717
-            $this->debug_file_name = sanitize_key('espresso_debug_' . md5(uniqid('', true))) . '.txt';
2718
-            EE_Config::instance()->update_espresso_config(false, false);
2719
-        }
2720
-        return $this->debug_file_name;
2721
-    }
2722
-
2723
-
2724
-    /**
2725
-     * @return string
2726
-     */
2727
-    public function affiliate_id(): ?string
2728
-    {
2729
-        return ! empty($this->affiliate_id) ? $this->affiliate_id : 'default';
2730
-    }
2731
-
2732
-
2733
-    /**
2734
-     * @return boolean
2735
-     */
2736
-    public function encode_session_data(): bool
2737
-    {
2738
-        return filter_var($this->encode_session_data, FILTER_VALIDATE_BOOLEAN);
2739
-    }
2740
-
2741
-
2742
-    /**
2743
-     * @param bool|int|string $encode_session_data
2744
-     */
2745
-    public function set_encode_session_data($encode_session_data)
2746
-    {
2747
-        $this->encode_session_data = filter_var($encode_session_data, FILTER_VALIDATE_BOOLEAN);
2748
-    }
2749
-
2750
-    /**
2751
-     * @return boolean
2752
-     */
2753
-    public function useAdvancedEditor(): bool
2754
-    {
2755
-        return $this->useAdvancedEditor && $this->is_caffeinated;
2756
-    }
2643
+	private $useAdvancedEditor = true;
2757 2644
 
2758
-    /**
2759
-     * @param bool|int|string $use_advanced_editor
2760
-     */
2761
-    public function setUseAdvancedEditor($use_advanced_editor = true)
2762
-    {
2763
-        $this->useAdvancedEditor = filter_var(
2764
-            apply_filters(
2765
-                'FHEE__EE_Admin_Config__setUseAdvancedEditor__use_advanced_editor',
2766
-                $use_advanced_editor
2767
-            ),
2768
-            FILTER_VALIDATE_BOOLEAN
2769
-        );
2770
-    }
2645
+	public $use_remote_logging = false;
2646
+
2647
+	public $show_reg_footer = false;
2648
+
2649
+	private $is_caffeinated;
2650
+
2651
+	public $use_dashboard_widget = false;
2652
+
2653
+	public $use_personnel_manager = false;
2654
+
2655
+	public $use_event_timezones = false;
2656
+
2657
+	/**
2658
+	 * adds extra layer of encoding to session data to prevent serialization errors
2659
+	 * but is incompatible with some server configuration errors
2660
+	 * if you get "500 internal server errors" during registration, try turning this on
2661
+	 * if you get PHP fatal errors regarding base 64 methods not defined, then turn this off
2662
+	 *
2663
+	 * @var boolean $encode_session_data
2664
+	 */
2665
+	private $encode_session_data = false;
2666
+
2667
+	public ?string $log_file_name = '';
2668
+
2669
+	public ?string $debug_file_name = '';
2670
+
2671
+	public ?string $remote_logging_url = '';
2672
+
2673
+	public ?string $affiliate_id = 'default';
2674
+
2675
+	/**
2676
+	 * @var int|null $events_in_dashboard
2677
+	 * @deprecated
2678
+	 */
2679
+	public ?int $events_in_dashboard = 30;
2680
+
2681
+
2682
+	public function __construct()
2683
+	{
2684
+		/** @var EventEspresso\core\domain\Domain $domain */
2685
+		$domain               = LoaderFactory::getLoader()->getShared('EventEspresso\core\domain\Domain');
2686
+		$this->is_caffeinated = $domain->isCaffeinated();
2687
+
2688
+		// set default general admin settings
2689
+		$this->show_reg_footer = apply_filters(
2690
+			'FHEE__EE_Admin_Config__show_reg_footer__default',
2691
+			false
2692
+		);
2693
+	}
2694
+
2695
+
2696
+	/**
2697
+	 * @param bool $reset
2698
+	 * @return string
2699
+	 */
2700
+	public function log_file_name(bool $reset = false): ?string
2701
+	{
2702
+		if (empty($this->log_file_name) || $reset) {
2703
+			$this->log_file_name = sanitize_key('espresso_log_' . md5(uniqid('', true))) . '.txt';
2704
+			EE_Config::instance()->update_espresso_config(false, false);
2705
+		}
2706
+		return $this->log_file_name;
2707
+	}
2708
+
2709
+
2710
+	/**
2711
+	 * @param bool $reset
2712
+	 * @return string
2713
+	 */
2714
+	public function debug_file_name(bool $reset = false): ?string
2715
+	{
2716
+		if (empty($this->debug_file_name) || $reset) {
2717
+			$this->debug_file_name = sanitize_key('espresso_debug_' . md5(uniqid('', true))) . '.txt';
2718
+			EE_Config::instance()->update_espresso_config(false, false);
2719
+		}
2720
+		return $this->debug_file_name;
2721
+	}
2722
+
2723
+
2724
+	/**
2725
+	 * @return string
2726
+	 */
2727
+	public function affiliate_id(): ?string
2728
+	{
2729
+		return ! empty($this->affiliate_id) ? $this->affiliate_id : 'default';
2730
+	}
2731
+
2732
+
2733
+	/**
2734
+	 * @return boolean
2735
+	 */
2736
+	public function encode_session_data(): bool
2737
+	{
2738
+		return filter_var($this->encode_session_data, FILTER_VALIDATE_BOOLEAN);
2739
+	}
2740
+
2741
+
2742
+	/**
2743
+	 * @param bool|int|string $encode_session_data
2744
+	 */
2745
+	public function set_encode_session_data($encode_session_data)
2746
+	{
2747
+		$this->encode_session_data = filter_var($encode_session_data, FILTER_VALIDATE_BOOLEAN);
2748
+	}
2749
+
2750
+	/**
2751
+	 * @return boolean
2752
+	 */
2753
+	public function useAdvancedEditor(): bool
2754
+	{
2755
+		return $this->useAdvancedEditor && $this->is_caffeinated;
2756
+	}
2757
+
2758
+	/**
2759
+	 * @param bool|int|string $use_advanced_editor
2760
+	 */
2761
+	public function setUseAdvancedEditor($use_advanced_editor = true)
2762
+	{
2763
+		$this->useAdvancedEditor = filter_var(
2764
+			apply_filters(
2765
+				'FHEE__EE_Admin_Config__setUseAdvancedEditor__use_advanced_editor',
2766
+				$use_advanced_editor
2767
+			),
2768
+			FILTER_VALIDATE_BOOLEAN
2769
+		);
2770
+	}
2771 2771
 }
2772 2772
 
2773 2773
 /**
@@ -2775,38 +2775,38 @@  discard block
 block discarded – undo
2775 2775
  */
2776 2776
 class EE_Template_Config extends EE_Config_Base
2777 2777
 {
2778
-    /**
2779
-     * @var EE_Ticket_Selector_Config|stdClass|null
2780
-     */
2781
-    public $EED_Ticket_Selector = null;
2782
-
2783
-    /**
2784
-     * @var EE_Event_Single_Config|stdClass|null
2785
-     */
2786
-    public $EED_Event_Single = null;
2787
-
2788
-    /**
2789
-     * @var EE_Events_Archive_Config|stdClass|null
2790
-     */
2791
-    public $EED_Events_Archive = null;
2792
-
2793
-    /**
2794
-     * @var EE_People_Config|stdClass|null
2795
-     * @since 5.0.12.p
2796
-     */
2797
-    public $EED_People_Single;
2798
-
2799
-    public string $current_espresso_theme = 'Espresso_Arabica_2014';
2800
-
2801
-
2802
-    /**
2803
-     *    class constructor
2804
-     *
2805
-     * @access    public
2806
-     */
2807
-    public function __construct()
2808
-    {
2809
-    }
2778
+	/**
2779
+	 * @var EE_Ticket_Selector_Config|stdClass|null
2780
+	 */
2781
+	public $EED_Ticket_Selector = null;
2782
+
2783
+	/**
2784
+	 * @var EE_Event_Single_Config|stdClass|null
2785
+	 */
2786
+	public $EED_Event_Single = null;
2787
+
2788
+	/**
2789
+	 * @var EE_Events_Archive_Config|stdClass|null
2790
+	 */
2791
+	public $EED_Events_Archive = null;
2792
+
2793
+	/**
2794
+	 * @var EE_People_Config|stdClass|null
2795
+	 * @since 5.0.12.p
2796
+	 */
2797
+	public $EED_People_Single;
2798
+
2799
+	public string $current_espresso_theme = 'Espresso_Arabica_2014';
2800
+
2801
+
2802
+	/**
2803
+	 *    class constructor
2804
+	 *
2805
+	 * @access    public
2806
+	 */
2807
+	public function __construct()
2808
+	{
2809
+	}
2810 2810
 }
2811 2811
 
2812 2812
 /**
@@ -2814,114 +2814,114 @@  discard block
 block discarded – undo
2814 2814
  */
2815 2815
 class EE_Map_Config extends EE_Config_Base
2816 2816
 {
2817
-    /**
2818
-     * @var boolean $use_google_maps
2819
-     */
2820
-    public $use_google_maps;
2821
-
2822
-    /**
2823
-     * @var string $api_key
2824
-     */
2825
-    public $google_map_api_key;
2826
-
2827
-    /**
2828
-     * @var int $event_details_map_width
2829
-     */
2830
-    public $event_details_map_width;
2831
-
2832
-    /**
2833
-     * @var int $event_details_map_height
2834
-     */
2835
-    public $event_details_map_height;
2836
-
2837
-    /**
2838
-     * @var int $event_details_map_zoom
2839
-     */
2840
-    public $event_details_map_zoom;
2841
-
2842
-    /**
2843
-     * @var boolean $event_details_display_nav
2844
-     */
2845
-    public $event_details_display_nav;
2846
-
2847
-    /**
2848
-     * @var boolean $event_details_nav_size
2849
-     */
2850
-    public $event_details_nav_size;
2851
-
2852
-    /**
2853
-     * @var string $event_details_control_type
2854
-     */
2855
-    public $event_details_control_type;
2856
-
2857
-    /**
2858
-     * @var string $event_details_map_align
2859
-     */
2860
-    public $event_details_map_align;
2861
-
2862
-    /**
2863
-     * @var int $event_list_map_width
2864
-     */
2865
-    public $event_list_map_width;
2866
-
2867
-    /**
2868
-     * @var int $event_list_map_height
2869
-     */
2870
-    public $event_list_map_height;
2871
-
2872
-    /**
2873
-     * @var int $event_list_map_zoom
2874
-     */
2875
-    public $event_list_map_zoom;
2876
-
2877
-    /**
2878
-     * @var boolean $event_list_display_nav
2879
-     */
2880
-    public $event_list_display_nav;
2881
-
2882
-    /**
2883
-     * @var boolean $event_list_nav_size
2884
-     */
2885
-    public $event_list_nav_size;
2886
-
2887
-    /**
2888
-     * @var string $event_list_control_type
2889
-     */
2890
-    public $event_list_control_type;
2891
-
2892
-    /**
2893
-     * @var string $event_list_map_align
2894
-     */
2895
-    public $event_list_map_align;
2896
-
2897
-
2898
-    /**
2899
-     *    class constructor
2900
-     *
2901
-     * @access    public
2902
-     */
2903
-    public function __construct()
2904
-    {
2905
-        // set default map settings
2906
-        $this->use_google_maps = true;
2907
-        $this->google_map_api_key = '';
2908
-        // for event details pages (reg page)
2909
-        $this->event_details_map_width = 585;            // ee_map_width_single
2910
-        $this->event_details_map_height = 362;            // ee_map_height_single
2911
-        $this->event_details_map_zoom = 14;            // ee_map_zoom_single
2912
-        $this->event_details_display_nav = true;            // ee_map_nav_display_single
2913
-        $this->event_details_nav_size = false;            // ee_map_nav_size_single
2914
-        $this->event_details_control_type = 'default';        // ee_map_type_control_single
2915
-        $this->event_details_map_align = 'center';            // ee_map_align_single
2916
-        // for event list pages
2917
-        $this->event_list_map_width = 300;            // ee_map_width
2918
-        $this->event_list_map_height = 185;        // ee_map_height
2919
-        $this->event_list_map_zoom = 12;            // ee_map_zoom
2920
-        $this->event_list_display_nav = false;        // ee_map_nav_display
2921
-        $this->event_list_nav_size = true;            // ee_map_nav_size
2922
-        $this->event_list_control_type = 'dropdown';        // ee_map_type_control
2923
-        $this->event_list_map_align = 'center';            // ee_map_align
2924
-    }
2817
+	/**
2818
+	 * @var boolean $use_google_maps
2819
+	 */
2820
+	public $use_google_maps;
2821
+
2822
+	/**
2823
+	 * @var string $api_key
2824
+	 */
2825
+	public $google_map_api_key;
2826
+
2827
+	/**
2828
+	 * @var int $event_details_map_width
2829
+	 */
2830
+	public $event_details_map_width;
2831
+
2832
+	/**
2833
+	 * @var int $event_details_map_height
2834
+	 */
2835
+	public $event_details_map_height;
2836
+
2837
+	/**
2838
+	 * @var int $event_details_map_zoom
2839
+	 */
2840
+	public $event_details_map_zoom;
2841
+
2842
+	/**
2843
+	 * @var boolean $event_details_display_nav
2844
+	 */
2845
+	public $event_details_display_nav;
2846
+
2847
+	/**
2848
+	 * @var boolean $event_details_nav_size
2849
+	 */
2850
+	public $event_details_nav_size;
2851
+
2852
+	/**
2853
+	 * @var string $event_details_control_type
2854
+	 */
2855
+	public $event_details_control_type;
2856
+
2857
+	/**
2858
+	 * @var string $event_details_map_align
2859
+	 */
2860
+	public $event_details_map_align;
2861
+
2862
+	/**
2863
+	 * @var int $event_list_map_width
2864
+	 */
2865
+	public $event_list_map_width;
2866
+
2867
+	/**
2868
+	 * @var int $event_list_map_height
2869
+	 */
2870
+	public $event_list_map_height;
2871
+
2872
+	/**
2873
+	 * @var int $event_list_map_zoom
2874
+	 */
2875
+	public $event_list_map_zoom;
2876
+
2877
+	/**
2878
+	 * @var boolean $event_list_display_nav
2879
+	 */
2880
+	public $event_list_display_nav;
2881
+
2882
+	/**
2883
+	 * @var boolean $event_list_nav_size
2884
+	 */
2885
+	public $event_list_nav_size;
2886
+
2887
+	/**
2888
+	 * @var string $event_list_control_type
2889
+	 */
2890
+	public $event_list_control_type;
2891
+
2892
+	/**
2893
+	 * @var string $event_list_map_align
2894
+	 */
2895
+	public $event_list_map_align;
2896
+
2897
+
2898
+	/**
2899
+	 *    class constructor
2900
+	 *
2901
+	 * @access    public
2902
+	 */
2903
+	public function __construct()
2904
+	{
2905
+		// set default map settings
2906
+		$this->use_google_maps = true;
2907
+		$this->google_map_api_key = '';
2908
+		// for event details pages (reg page)
2909
+		$this->event_details_map_width = 585;            // ee_map_width_single
2910
+		$this->event_details_map_height = 362;            // ee_map_height_single
2911
+		$this->event_details_map_zoom = 14;            // ee_map_zoom_single
2912
+		$this->event_details_display_nav = true;            // ee_map_nav_display_single
2913
+		$this->event_details_nav_size = false;            // ee_map_nav_size_single
2914
+		$this->event_details_control_type = 'default';        // ee_map_type_control_single
2915
+		$this->event_details_map_align = 'center';            // ee_map_align_single
2916
+		// for event list pages
2917
+		$this->event_list_map_width = 300;            // ee_map_width
2918
+		$this->event_list_map_height = 185;        // ee_map_height
2919
+		$this->event_list_map_zoom = 12;            // ee_map_zoom
2920
+		$this->event_list_display_nav = false;        // ee_map_nav_display
2921
+		$this->event_list_nav_size = true;            // ee_map_nav_size
2922
+		$this->event_list_control_type = 'dropdown';        // ee_map_type_control
2923
+		$this->event_list_map_align = 'center';            // ee_map_align
2924
+	}
2925 2925
 }
2926 2926
 
2927 2927
 /**
@@ -2929,61 +2929,61 @@  discard block
 block discarded – undo
2929 2929
  */
2930 2930
 class EE_Events_Archive_Config extends EE_Config_Base
2931 2931
 {
2932
-    /** @var bool|int */
2933
-    public $display_address_in_regform = true;
2932
+	/** @var bool|int */
2933
+	public $display_address_in_regform = true;
2934 2934
 
2935
-    /** @var bool|int */
2936
-    public $display_status_banner = false;
2935
+	/** @var bool|int */
2936
+	public $display_status_banner = false;
2937 2937
 
2938
-    /** @var bool|int */
2939
-    public $display_description = true;
2938
+	/** @var bool|int */
2939
+	public $display_description = true;
2940 2940
 
2941
-    /** @var bool|int */
2942
-    public $display_ticket_selector = false;
2941
+	/** @var bool|int */
2942
+	public $display_ticket_selector = false;
2943 2943
 
2944
-    /** @var bool|int */
2945
-    public $display_datetimes = true;
2944
+	/** @var bool|int */
2945
+	public $display_datetimes = true;
2946 2946
 
2947
-    /** @var bool|int */
2948
-    public $display_venue = false;
2947
+	/** @var bool|int */
2948
+	public $display_venue = false;
2949 2949
 
2950
-    /** @var bool|int */
2951
-    public $display_expired_events = false;
2950
+	/** @var bool|int */
2951
+	public $display_expired_events = false;
2952 2952
 
2953
-    /** @var bool|int */
2954
-    public $display_events_with_expired_tickets = false;
2953
+	/** @var bool|int */
2954
+	public $display_events_with_expired_tickets = false;
2955 2955
 
2956
-    // display order options
2956
+	// display order options
2957 2957
 
2958
-    /** @var bool|int */
2959
-    public $use_sortable_display_order = false;
2958
+	/** @var bool|int */
2959
+	public $use_sortable_display_order = false;
2960 2960
 
2961
-    public ?int $display_order_tickets = 100;
2961
+	public ?int $display_order_tickets = 100;
2962 2962
 
2963
-    public ?int $display_order_datetimes = 110;
2963
+	public ?int $display_order_datetimes = 110;
2964 2964
 
2965
-    public ?int $display_order_event = 120;
2965
+	public ?int $display_order_event = 120;
2966 2966
 
2967
-    public ?int $display_order_venue = 130;
2967
+	public ?int $display_order_venue = 130;
2968 2968
 
2969 2969
 
2970
-    /**
2971
-     *    class constructor
2972
-     */
2973
-    public function __construct()
2974
-    {
2975
-        $this->display_status_banner = 0;
2976
-        $this->display_description = 1;
2977
-        $this->display_ticket_selector = 0;
2978
-        $this->display_datetimes = 1;
2979
-        $this->display_venue = 0;
2980
-        $this->display_expired_events = 0;
2981
-        $this->use_sortable_display_order = false;
2982
-        $this->display_order_tickets = 100;
2983
-        $this->display_order_datetimes = 110;
2984
-        $this->display_order_event = 120;
2985
-        $this->display_order_venue = 130;
2986
-    }
2970
+	/**
2971
+	 *    class constructor
2972
+	 */
2973
+	public function __construct()
2974
+	{
2975
+		$this->display_status_banner = 0;
2976
+		$this->display_description = 1;
2977
+		$this->display_ticket_selector = 0;
2978
+		$this->display_datetimes = 1;
2979
+		$this->display_venue = 0;
2980
+		$this->display_expired_events = 0;
2981
+		$this->use_sortable_display_order = false;
2982
+		$this->display_order_tickets = 100;
2983
+		$this->display_order_datetimes = 110;
2984
+		$this->display_order_event = 120;
2985
+		$this->display_order_venue = 130;
2986
+	}
2987 2987
 }
2988 2988
 
2989 2989
 /**
@@ -2991,34 +2991,34 @@  discard block
 block discarded – undo
2991 2991
  */
2992 2992
 class EE_Event_Single_Config extends EE_Config_Base
2993 2993
 {
2994
-    public $display_status_banner_single;
2994
+	public $display_status_banner_single;
2995 2995
 
2996
-    public $display_venue;
2996
+	public $display_venue;
2997 2997
 
2998
-    public $use_sortable_display_order;
2998
+	public $use_sortable_display_order;
2999 2999
 
3000
-    public $display_order_tickets;
3000
+	public $display_order_tickets;
3001 3001
 
3002
-    public $display_order_datetimes;
3002
+	public $display_order_datetimes;
3003 3003
 
3004
-    public $display_order_event;
3004
+	public $display_order_event;
3005 3005
 
3006
-    public $display_order_venue;
3006
+	public $display_order_venue;
3007 3007
 
3008 3008
 
3009
-    /**
3010
-     *    class constructor
3011
-     */
3012
-    public function __construct()
3013
-    {
3014
-        $this->display_status_banner_single = 0;
3015
-        $this->display_venue = 1;
3016
-        $this->use_sortable_display_order = false;
3017
-        $this->display_order_tickets = 100;
3018
-        $this->display_order_datetimes = 110;
3019
-        $this->display_order_event = 120;
3020
-        $this->display_order_venue = 130;
3021
-    }
3009
+	/**
3010
+	 *    class constructor
3011
+	 */
3012
+	public function __construct()
3013
+	{
3014
+		$this->display_status_banner_single = 0;
3015
+		$this->display_venue = 1;
3016
+		$this->use_sortable_display_order = false;
3017
+		$this->display_order_tickets = 100;
3018
+		$this->display_order_datetimes = 110;
3019
+		$this->display_order_event = 120;
3020
+		$this->display_order_venue = 130;
3021
+	}
3022 3022
 }
3023 3023
 
3024 3024
 /**
@@ -3026,172 +3026,172 @@  discard block
 block discarded – undo
3026 3026
  */
3027 3027
 class EE_Ticket_Selector_Config extends EE_Config_Base
3028 3028
 {
3029
-    /**
3030
-     * constant to indicate that a datetime selector should NEVER be shown for ticket selectors
3031
-     */
3032
-    const DO_NOT_SHOW_DATETIME_SELECTOR = 'no_datetime_selector';
3033
-
3034
-    /**
3035
-     * constant to indicate that a datetime selector should only be shown for ticket selectors
3036
-     * when the number of datetimes for the event matches the value set for $datetime_selector_threshold
3037
-     */
3038
-    const MAYBE_SHOW_DATETIME_SELECTOR = 'maybe_datetime_selector';
3039
-
3040
-    /**
3041
-     * @var boolean $show_ticket_sale_columns
3042
-     */
3043
-    public $show_ticket_sale_columns;
3044
-
3045
-    /**
3046
-     * @var boolean $show_ticket_details
3047
-     */
3048
-    public $show_ticket_details;
3049
-
3050
-    /**
3051
-     * @var boolean $show_expired_tickets
3052
-     */
3053
-    public $show_expired_tickets;
3054
-
3055
-    /**
3056
-     * whether to display a dropdown box populated with event datetimes
3057
-     * that toggles which tickets are displayed for a ticket selector.
3058
-     * uses one of the *_DATETIME_SELECTOR constants defined above
3059
-     *
3060
-     * @var string $show_datetime_selector
3061
-     */
3062
-    private $show_datetime_selector = 'no_datetime_selector';
3063
-
3064
-    /**
3065
-     * the number of datetimes an event has to have before conditionally displaying a datetime selector
3066
-     *
3067
-     * @var int $datetime_selector_threshold
3068
-     */
3069
-    private $datetime_selector_threshold = 3;
3070
-
3071
-    /**
3072
-     * determines the maximum number of "checked" dates in the date and time filter
3073
-     *
3074
-     * @var int $datetime_selector_checked
3075
-     */
3076
-    private $datetime_selector_max_checked = 10;
3077
-
3078
-
3079
-    /**
3080
-     *    class constructor
3081
-     */
3082
-    public function __construct()
3083
-    {
3084
-        $this->show_ticket_sale_columns = true;
3085
-        $this->show_ticket_details = true;
3086
-        $this->show_expired_tickets = true;
3087
-        $this->show_datetime_selector = EE_Ticket_Selector_Config::DO_NOT_SHOW_DATETIME_SELECTOR;
3088
-        $this->datetime_selector_threshold = 3;
3089
-        $this->datetime_selector_max_checked = 10;
3090
-    }
3091
-
3092
-
3093
-    /**
3094
-     * returns true if a datetime selector should be displayed
3095
-     *
3096
-     * @param array $datetimes
3097
-     * @return bool
3098
-     */
3099
-    public function showDatetimeSelector(array $datetimes)
3100
-    {
3101
-        // if the settings are NOT: don't show OR below threshold, THEN active = true
3102
-        return ! (
3103
-            $this->getShowDatetimeSelector() === EE_Ticket_Selector_Config::DO_NOT_SHOW_DATETIME_SELECTOR
3104
-            || (
3105
-                $this->getShowDatetimeSelector() === EE_Ticket_Selector_Config::MAYBE_SHOW_DATETIME_SELECTOR
3106
-                && count($datetimes) < $this->getDatetimeSelectorThreshold()
3107
-            )
3108
-        );
3109
-    }
3110
-
3111
-
3112
-    /**
3113
-     * @return string
3114
-     */
3115
-    public function getShowDatetimeSelector()
3116
-    {
3117
-        return $this->show_datetime_selector;
3118
-    }
3119
-
3120
-
3121
-    /**
3122
-     * @param bool $keys_only
3123
-     * @return array
3124
-     */
3125
-    public function getShowDatetimeSelectorOptions($keys_only = true)
3126
-    {
3127
-        return $keys_only
3128
-            ? array(
3129
-                EE_Ticket_Selector_Config::DO_NOT_SHOW_DATETIME_SELECTOR,
3130
-                EE_Ticket_Selector_Config::MAYBE_SHOW_DATETIME_SELECTOR,
3131
-            )
3132
-            : array(
3133
-                EE_Ticket_Selector_Config::DO_NOT_SHOW_DATETIME_SELECTOR => esc_html__(
3134
-                    'Do not show date & time filter',
3135
-                    'event_espresso'
3136
-                ),
3137
-                EE_Ticket_Selector_Config::MAYBE_SHOW_DATETIME_SELECTOR  => esc_html__(
3138
-                    'Maybe show date & time filter',
3139
-                    'event_espresso'
3140
-                ),
3141
-            );
3142
-    }
3143
-
3144
-
3145
-    /**
3146
-     * @param string $show_datetime_selector
3147
-     */
3148
-    public function setShowDatetimeSelector($show_datetime_selector)
3149
-    {
3150
-        $this->show_datetime_selector = in_array(
3151
-            $show_datetime_selector,
3152
-            $this->getShowDatetimeSelectorOptions(),
3153
-            true
3154
-        )
3155
-            ? $show_datetime_selector
3156
-            : EE_Ticket_Selector_Config::DO_NOT_SHOW_DATETIME_SELECTOR;
3157
-    }
3158
-
3159
-
3160
-    /**
3161
-     * @return int
3162
-     */
3163
-    public function getDatetimeSelectorThreshold()
3164
-    {
3165
-        return $this->datetime_selector_threshold;
3166
-    }
3167
-
3168
-
3169
-    /**
3170
-     * @param int $datetime_selector_threshold
3171
-     */
3172
-    public function setDatetimeSelectorThreshold($datetime_selector_threshold)
3173
-    {
3174
-        $datetime_selector_threshold = absint($datetime_selector_threshold);
3175
-        $this->datetime_selector_threshold = $datetime_selector_threshold ? $datetime_selector_threshold : 3;
3176
-    }
3177
-
3178
-
3179
-    /**
3180
-     * @return int
3181
-     */
3182
-    public function getDatetimeSelectorMaxChecked()
3183
-    {
3184
-        return $this->datetime_selector_max_checked;
3185
-    }
3186
-
3187
-
3188
-    /**
3189
-     * @param int $datetime_selector_max_checked
3190
-     */
3191
-    public function setDatetimeSelectorMaxChecked($datetime_selector_max_checked)
3192
-    {
3193
-        $this->datetime_selector_max_checked = absint($datetime_selector_max_checked);
3194
-    }
3029
+	/**
3030
+	 * constant to indicate that a datetime selector should NEVER be shown for ticket selectors
3031
+	 */
3032
+	const DO_NOT_SHOW_DATETIME_SELECTOR = 'no_datetime_selector';
3033
+
3034
+	/**
3035
+	 * constant to indicate that a datetime selector should only be shown for ticket selectors
3036
+	 * when the number of datetimes for the event matches the value set for $datetime_selector_threshold
3037
+	 */
3038
+	const MAYBE_SHOW_DATETIME_SELECTOR = 'maybe_datetime_selector';
3039
+
3040
+	/**
3041
+	 * @var boolean $show_ticket_sale_columns
3042
+	 */
3043
+	public $show_ticket_sale_columns;
3044
+
3045
+	/**
3046
+	 * @var boolean $show_ticket_details
3047
+	 */
3048
+	public $show_ticket_details;
3049
+
3050
+	/**
3051
+	 * @var boolean $show_expired_tickets
3052
+	 */
3053
+	public $show_expired_tickets;
3054
+
3055
+	/**
3056
+	 * whether to display a dropdown box populated with event datetimes
3057
+	 * that toggles which tickets are displayed for a ticket selector.
3058
+	 * uses one of the *_DATETIME_SELECTOR constants defined above
3059
+	 *
3060
+	 * @var string $show_datetime_selector
3061
+	 */
3062
+	private $show_datetime_selector = 'no_datetime_selector';
3063
+
3064
+	/**
3065
+	 * the number of datetimes an event has to have before conditionally displaying a datetime selector
3066
+	 *
3067
+	 * @var int $datetime_selector_threshold
3068
+	 */
3069
+	private $datetime_selector_threshold = 3;
3070
+
3071
+	/**
3072
+	 * determines the maximum number of "checked" dates in the date and time filter
3073
+	 *
3074
+	 * @var int $datetime_selector_checked
3075
+	 */
3076
+	private $datetime_selector_max_checked = 10;
3077
+
3078
+
3079
+	/**
3080
+	 *    class constructor
3081
+	 */
3082
+	public function __construct()
3083
+	{
3084
+		$this->show_ticket_sale_columns = true;
3085
+		$this->show_ticket_details = true;
3086
+		$this->show_expired_tickets = true;
3087
+		$this->show_datetime_selector = EE_Ticket_Selector_Config::DO_NOT_SHOW_DATETIME_SELECTOR;
3088
+		$this->datetime_selector_threshold = 3;
3089
+		$this->datetime_selector_max_checked = 10;
3090
+	}
3091
+
3092
+
3093
+	/**
3094
+	 * returns true if a datetime selector should be displayed
3095
+	 *
3096
+	 * @param array $datetimes
3097
+	 * @return bool
3098
+	 */
3099
+	public function showDatetimeSelector(array $datetimes)
3100
+	{
3101
+		// if the settings are NOT: don't show OR below threshold, THEN active = true
3102
+		return ! (
3103
+			$this->getShowDatetimeSelector() === EE_Ticket_Selector_Config::DO_NOT_SHOW_DATETIME_SELECTOR
3104
+			|| (
3105
+				$this->getShowDatetimeSelector() === EE_Ticket_Selector_Config::MAYBE_SHOW_DATETIME_SELECTOR
3106
+				&& count($datetimes) < $this->getDatetimeSelectorThreshold()
3107
+			)
3108
+		);
3109
+	}
3110
+
3111
+
3112
+	/**
3113
+	 * @return string
3114
+	 */
3115
+	public function getShowDatetimeSelector()
3116
+	{
3117
+		return $this->show_datetime_selector;
3118
+	}
3119
+
3120
+
3121
+	/**
3122
+	 * @param bool $keys_only
3123
+	 * @return array
3124
+	 */
3125
+	public function getShowDatetimeSelectorOptions($keys_only = true)
3126
+	{
3127
+		return $keys_only
3128
+			? array(
3129
+				EE_Ticket_Selector_Config::DO_NOT_SHOW_DATETIME_SELECTOR,
3130
+				EE_Ticket_Selector_Config::MAYBE_SHOW_DATETIME_SELECTOR,
3131
+			)
3132
+			: array(
3133
+				EE_Ticket_Selector_Config::DO_NOT_SHOW_DATETIME_SELECTOR => esc_html__(
3134
+					'Do not show date & time filter',
3135
+					'event_espresso'
3136
+				),
3137
+				EE_Ticket_Selector_Config::MAYBE_SHOW_DATETIME_SELECTOR  => esc_html__(
3138
+					'Maybe show date & time filter',
3139
+					'event_espresso'
3140
+				),
3141
+			);
3142
+	}
3143
+
3144
+
3145
+	/**
3146
+	 * @param string $show_datetime_selector
3147
+	 */
3148
+	public function setShowDatetimeSelector($show_datetime_selector)
3149
+	{
3150
+		$this->show_datetime_selector = in_array(
3151
+			$show_datetime_selector,
3152
+			$this->getShowDatetimeSelectorOptions(),
3153
+			true
3154
+		)
3155
+			? $show_datetime_selector
3156
+			: EE_Ticket_Selector_Config::DO_NOT_SHOW_DATETIME_SELECTOR;
3157
+	}
3158
+
3159
+
3160
+	/**
3161
+	 * @return int
3162
+	 */
3163
+	public function getDatetimeSelectorThreshold()
3164
+	{
3165
+		return $this->datetime_selector_threshold;
3166
+	}
3167
+
3168
+
3169
+	/**
3170
+	 * @param int $datetime_selector_threshold
3171
+	 */
3172
+	public function setDatetimeSelectorThreshold($datetime_selector_threshold)
3173
+	{
3174
+		$datetime_selector_threshold = absint($datetime_selector_threshold);
3175
+		$this->datetime_selector_threshold = $datetime_selector_threshold ? $datetime_selector_threshold : 3;
3176
+	}
3177
+
3178
+
3179
+	/**
3180
+	 * @return int
3181
+	 */
3182
+	public function getDatetimeSelectorMaxChecked()
3183
+	{
3184
+		return $this->datetime_selector_max_checked;
3185
+	}
3186
+
3187
+
3188
+	/**
3189
+	 * @param int $datetime_selector_max_checked
3190
+	 */
3191
+	public function setDatetimeSelectorMaxChecked($datetime_selector_max_checked)
3192
+	{
3193
+		$this->datetime_selector_max_checked = absint($datetime_selector_max_checked);
3194
+	}
3195 3195
 }
3196 3196
 
3197 3197
 /**
@@ -3203,79 +3203,79 @@  discard block
 block discarded – undo
3203 3203
  */
3204 3204
 class EE_Environment_Config extends EE_Config_Base
3205 3205
 {
3206
-    /**
3207
-     * Hold any php environment variables that we want to track.
3208
-     *
3209
-     * @var stdClass;
3210
-     */
3211
-    public $php;
3212
-
3213
-
3214
-    /**
3215
-     *    constructor
3216
-     */
3217
-    public function __construct()
3218
-    {
3219
-        $this->php = new stdClass();
3220
-        $this->_set_php_values();
3221
-    }
3222
-
3223
-
3224
-    /**
3225
-     * This sets the php environment variables.
3226
-     *
3227
-     * @since 4.4.0
3228
-     * @return void
3229
-     */
3230
-    protected function _set_php_values()
3231
-    {
3232
-        $this->php->max_input_vars = ini_get('max_input_vars');
3233
-        $this->php->version = phpversion();
3234
-    }
3235
-
3236
-
3237
-    /**
3238
-     * helper method for determining whether input_count is
3239
-     * reaching the potential maximum the server can handle
3240
-     * according to max_input_vars
3241
-     *
3242
-     * @param int   $input_count the count of input vars.
3243
-     * @return string error message
3244
-     */
3245
-    public function max_input_vars_limit_check($input_count = 0)
3246
-    {
3247
-        if (
3248
-            ! empty($this->php->max_input_vars)
3249
-            && ($input_count >= $this->php->max_input_vars)
3250
-        ) {
3251
-            // check the server setting because the config value could be stale
3252
-            $max_input_vars = ini_get('max_input_vars');
3253
-            if ($input_count >= $max_input_vars) {
3254
-                return sprintf(
3255
-                    esc_html__(
3256
-                        'The maximum number of inputs on this page has been exceeded. You cannot make edits to this page because of your server\'s PHP "max_input_vars" setting.%1$sThere are %2$d inputs and the maximum amount currently allowed by your server is %3$d.%1$sPlease contact your web host and ask them to raise the "max_input_vars" limit.',
3257
-                        'event_espresso'
3258
-                    ),
3259
-                    '<br>',
3260
-                    $input_count,
3261
-                    $max_input_vars
3262
-                );
3263
-            }
3264
-        }
3265
-        return '';
3266
-    }
3267
-
3268
-
3269
-    /**
3270
-     * The purpose of this method is just to force rechecking php values so if they've changed, they get updated.
3271
-     *
3272
-     * @since 4.4.1
3273
-     * @return void
3274
-     */
3275
-    public function recheck_values()
3276
-    {
3277
-        $this->_set_php_values();
3278
-    }
3206
+	/**
3207
+	 * Hold any php environment variables that we want to track.
3208
+	 *
3209
+	 * @var stdClass;
3210
+	 */
3211
+	public $php;
3212
+
3213
+
3214
+	/**
3215
+	 *    constructor
3216
+	 */
3217
+	public function __construct()
3218
+	{
3219
+		$this->php = new stdClass();
3220
+		$this->_set_php_values();
3221
+	}
3222
+
3223
+
3224
+	/**
3225
+	 * This sets the php environment variables.
3226
+	 *
3227
+	 * @since 4.4.0
3228
+	 * @return void
3229
+	 */
3230
+	protected function _set_php_values()
3231
+	{
3232
+		$this->php->max_input_vars = ini_get('max_input_vars');
3233
+		$this->php->version = phpversion();
3234
+	}
3235
+
3236
+
3237
+	/**
3238
+	 * helper method for determining whether input_count is
3239
+	 * reaching the potential maximum the server can handle
3240
+	 * according to max_input_vars
3241
+	 *
3242
+	 * @param int   $input_count the count of input vars.
3243
+	 * @return string error message
3244
+	 */
3245
+	public function max_input_vars_limit_check($input_count = 0)
3246
+	{
3247
+		if (
3248
+			! empty($this->php->max_input_vars)
3249
+			&& ($input_count >= $this->php->max_input_vars)
3250
+		) {
3251
+			// check the server setting because the config value could be stale
3252
+			$max_input_vars = ini_get('max_input_vars');
3253
+			if ($input_count >= $max_input_vars) {
3254
+				return sprintf(
3255
+					esc_html__(
3256
+						'The maximum number of inputs on this page has been exceeded. You cannot make edits to this page because of your server\'s PHP "max_input_vars" setting.%1$sThere are %2$d inputs and the maximum amount currently allowed by your server is %3$d.%1$sPlease contact your web host and ask them to raise the "max_input_vars" limit.',
3257
+						'event_espresso'
3258
+					),
3259
+					'<br>',
3260
+					$input_count,
3261
+					$max_input_vars
3262
+				);
3263
+			}
3264
+		}
3265
+		return '';
3266
+	}
3267
+
3268
+
3269
+	/**
3270
+	 * The purpose of this method is just to force rechecking php values so if they've changed, they get updated.
3271
+	 *
3272
+	 * @since 4.4.1
3273
+	 * @return void
3274
+	 */
3275
+	public function recheck_values()
3276
+	{
3277
+		$this->_set_php_values();
3278
+	}
3279 3279
 }
3280 3280
 
3281 3281
 /**
@@ -3287,21 +3287,21 @@  discard block
 block discarded – undo
3287 3287
  */
3288 3288
 class EE_Tax_Config extends EE_Config_Base
3289 3289
 {
3290
-    /*
3290
+	/*
3291 3291
      * flag to indicate whether to display ticket prices with the taxes included
3292 3292
      *
3293 3293
      * @var boolean $prices_displayed_including_taxes
3294 3294
      */
3295
-    public $prices_displayed_including_taxes;
3295
+	public $prices_displayed_including_taxes;
3296 3296
 
3297 3297
 
3298
-    /**
3299
-     *    class constructor
3300
-     */
3301
-    public function __construct()
3302
-    {
3303
-        $this->prices_displayed_including_taxes = true;
3304
-    }
3298
+	/**
3299
+	 *    class constructor
3300
+	 */
3301
+	public function __construct()
3302
+	{
3303
+		$this->prices_displayed_including_taxes = true;
3304
+	}
3305 3305
 }
3306 3306
 
3307 3307
 /**
@@ -3314,19 +3314,19 @@  discard block
 block discarded – undo
3314 3314
  */
3315 3315
 class EE_Messages_Config extends EE_Config_Base
3316 3316
 {
3317
-    /**
3318
-     * This is an integer representing the deletion threshold in months for when old messages will get deleted.
3319
-     * A value of 0 represents never deleting.  Default is 0.
3320
-     *
3321
-     * @var integer
3322
-     */
3323
-    public $delete_threshold;
3324
-
3325
-
3326
-    public function __construct()
3327
-    {
3328
-        $this->delete_threshold = 0;
3329
-    }
3317
+	/**
3318
+	 * This is an integer representing the deletion threshold in months for when old messages will get deleted.
3319
+	 * A value of 0 represents never deleting.  Default is 0.
3320
+	 *
3321
+	 * @var integer
3322
+	 */
3323
+	public $delete_threshold;
3324
+
3325
+
3326
+	public function __construct()
3327
+	{
3328
+		$this->delete_threshold = 0;
3329
+	}
3330 3330
 }
3331 3331
 
3332 3332
 /**
@@ -3336,31 +3336,31 @@  discard block
 block discarded – undo
3336 3336
  */
3337 3337
 class EE_Gateway_Config extends EE_Config_Base
3338 3338
 {
3339
-    /**
3340
-     * Array with keys that are payment gateways slugs, and values are arrays
3341
-     * with any config info the gateway wants to store
3342
-     *
3343
-     * @var array
3344
-     */
3345
-    public $payment_settings;
3346
-
3347
-    /**
3348
-     * Where keys are gateway slugs, and values are booleans indicating whether
3349
-     * the gateway is stored in the uploads directory
3350
-     *
3351
-     * @var array
3352
-     */
3353
-    public $active_gateways;
3354
-
3355
-
3356
-    /**
3357
-     *    class constructor
3358
-     *
3359
-     * @deprecated
3360
-     */
3361
-    public function __construct()
3362
-    {
3363
-        $this->payment_settings = array();
3364
-        $this->active_gateways = array('Invoice' => false);
3365
-    }
3339
+	/**
3340
+	 * Array with keys that are payment gateways slugs, and values are arrays
3341
+	 * with any config info the gateway wants to store
3342
+	 *
3343
+	 * @var array
3344
+	 */
3345
+	public $payment_settings;
3346
+
3347
+	/**
3348
+	 * Where keys are gateway slugs, and values are booleans indicating whether
3349
+	 * the gateway is stored in the uploads directory
3350
+	 *
3351
+	 * @var array
3352
+	 */
3353
+	public $active_gateways;
3354
+
3355
+
3356
+	/**
3357
+	 *    class constructor
3358
+	 *
3359
+	 * @deprecated
3360
+	 */
3361
+	public function __construct()
3362
+	{
3363
+		$this->payment_settings = array();
3364
+		$this->active_gateways = array('Invoice' => false);
3365
+	}
3366 3366
 }
Please login to merge, or discard this patch.
languages/event_espresso-translations-js.php 1 patch
Spacing   +713 added lines, -713 removed lines patch added patch discarded remove patch
@@ -2,140 +2,140 @@  discard block
 block discarded – undo
2 2
 /* THIS IS A GENERATED FILE. DO NOT EDIT DIRECTLY. */
3 3
 $generated_i18n_strings = array(
4 4
 	// Reference: packages/ui-components/src/Pagination/constants.ts:6
5
-	__( '2', 'event_espresso' ),
5
+	__('2', 'event_espresso'),
6 6
 
7 7
 	// Reference: packages/ui-components/src/Pagination/constants.ts:7
8
-	__( '6', 'event_espresso' ),
8
+	__('6', 'event_espresso'),
9 9
 
10 10
 	// Reference: packages/ui-components/src/Pagination/constants.ts:8
11
-	__( '12', 'event_espresso' ),
11
+	__('12', 'event_espresso'),
12 12
 
13 13
 	// Reference: packages/ui-components/src/Pagination/constants.ts:9
14
-	__( '24', 'event_espresso' ),
14
+	__('24', 'event_espresso'),
15 15
 
16 16
 	// Reference: packages/ui-components/src/Pagination/constants.ts:10
17
-	__( '48', 'event_espresso' ),
17
+	__('48', 'event_espresso'),
18 18
 
19 19
 	// Reference: packages/ui-components/src/Pagination/constants.ts:11
20
-	__( '96', 'event_espresso' ),
20
+	__('96', 'event_espresso'),
21 21
 
22 22
 	// Reference: domains/core/admin/blocks/src/components/AvatarImage.tsx:27
23
-	__( 'contact avatar', 'event_espresso' ),
23
+	__('contact avatar', 'event_espresso'),
24 24
 
25 25
 	// Reference: domains/core/admin/blocks/src/components/OrderByControl.tsx:12
26
-	__( 'Order by', 'event_espresso' ),
26
+	__('Order by', 'event_espresso'),
27 27
 
28 28
 	// Reference: domains/core/admin/blocks/src/components/RegStatusControl.tsx:17
29 29
 	// Reference: domains/core/admin/blocks/src/event-attendees/controls/SelectStatus.tsx:13
30
-	__( 'Select Registration Status', 'event_espresso' ),
30
+	__('Select Registration Status', 'event_espresso'),
31 31
 
32 32
 	// Reference: domains/core/admin/blocks/src/components/SortOrderControl.tsx:14
33
-	__( 'Ascending', 'event_espresso' ),
33
+	__('Ascending', 'event_espresso'),
34 34
 
35 35
 	// Reference: domains/core/admin/blocks/src/components/SortOrderControl.tsx:18
36
-	__( 'Descending', 'event_espresso' ),
36
+	__('Descending', 'event_espresso'),
37 37
 
38 38
 	// Reference: domains/core/admin/blocks/src/components/SortOrderControl.tsx:24
39
-	__( 'Sort order:', 'event_espresso' ),
39
+	__('Sort order:', 'event_espresso'),
40 40
 
41 41
 	// Reference: domains/core/admin/blocks/src/event-attendees/AttendeesDisplay.tsx:41
42
-	__( 'There was some error fetching attendees list', 'event_espresso' ),
42
+	__('There was some error fetching attendees list', 'event_espresso'),
43 43
 
44 44
 	// Reference: domains/core/admin/blocks/src/event-attendees/AttendeesDisplay.tsx:47
45
-	__( 'To get started, select what event you want to show attendees from in the block settings.', 'event_espresso' ),
45
+	__('To get started, select what event you want to show attendees from in the block settings.', 'event_espresso'),
46 46
 
47 47
 	// Reference: domains/core/admin/blocks/src/event-attendees/AttendeesDisplay.tsx:53
48
-	__( 'There are no attendees for selected options.', 'event_espresso' ),
48
+	__('There are no attendees for selected options.', 'event_espresso'),
49 49
 
50 50
 	// Reference: domains/core/admin/blocks/src/event-attendees/controls/ArchiveSettings.tsx:12
51
-	__( 'Display on Archives', 'event_espresso' ),
51
+	__('Display on Archives', 'event_espresso'),
52 52
 
53 53
 	// Reference: domains/core/admin/blocks/src/event-attendees/controls/ArchiveSettings.tsx:17
54
-	__( 'Attendees are shown whenever this post is listed in an archive view.', 'event_espresso' ),
54
+	__('Attendees are shown whenever this post is listed in an archive view.', 'event_espresso'),
55 55
 
56 56
 	// Reference: domains/core/admin/blocks/src/event-attendees/controls/ArchiveSettings.tsx:18
57
-	__( 'Attendees are hidden whenever this post is listed in an archive view.', 'event_espresso' ),
57
+	__('Attendees are hidden whenever this post is listed in an archive view.', 'event_espresso'),
58 58
 
59 59
 	// Reference: domains/core/admin/blocks/src/event-attendees/controls/AttendeeLimit.tsx:29
60
-	__( 'Number of Attendees to Display:', 'event_espresso' ),
60
+	__('Number of Attendees to Display:', 'event_espresso'),
61 61
 
62 62
 	// Reference: domains/core/admin/blocks/src/event-attendees/controls/AttendeeLimit.tsx:34
63 63
 	/* translators: %d attendees count */
64
-	_n_noop( 'Used to adjust the number of attendees displayed (There is %d total attendee for the current filter settings).', 'Used to adjust the number of attendees displayed (There are %d total attendees for the current filter settings).', 'event_espresso' ),
64
+	_n_noop('Used to adjust the number of attendees displayed (There is %d total attendee for the current filter settings).', 'Used to adjust the number of attendees displayed (There are %d total attendees for the current filter settings).', 'event_espresso'),
65 65
 
66 66
 	// Reference: domains/core/admin/blocks/src/event-attendees/controls/GravatarSettings.tsx:27
67
-	__( 'Display Gravatar', 'event_espresso' ),
67
+	__('Display Gravatar', 'event_espresso'),
68 68
 
69 69
 	// Reference: domains/core/admin/blocks/src/event-attendees/controls/GravatarSettings.tsx:32
70
-	__( 'Gravatar images are shown for each attendee.', 'event_espresso' ),
70
+	__('Gravatar images are shown for each attendee.', 'event_espresso'),
71 71
 
72 72
 	// Reference: domains/core/admin/blocks/src/event-attendees/controls/GravatarSettings.tsx:33
73
-	__( 'No gravatar images are shown for each attendee.', 'event_espresso' ),
73
+	__('No gravatar images are shown for each attendee.', 'event_espresso'),
74 74
 
75 75
 	// Reference: domains/core/admin/blocks/src/event-attendees/controls/GravatarSettings.tsx:38
76
-	__( 'Size of Gravatar', 'event_espresso' ),
76
+	__('Size of Gravatar', 'event_espresso'),
77 77
 
78 78
 	// Reference: domains/core/admin/blocks/src/event-attendees/controls/SelectDatetime.tsx:22
79
-	__( 'Select Datetime', 'event_espresso' ),
79
+	__('Select Datetime', 'event_espresso'),
80 80
 
81 81
 	// Reference: domains/core/admin/blocks/src/event-attendees/controls/SelectEvent.tsx:22
82 82
 	// Reference: domains/core/admin/blocks/src/event/controls/SelectEvent.tsx:22
83
-	__( 'Select Event', 'event_espresso' ),
83
+	__('Select Event', 'event_espresso'),
84 84
 
85 85
 	// Reference: domains/core/admin/blocks/src/event-attendees/controls/SelectOrderBy.tsx:11
86
-	__( 'Attendee id', 'event_espresso' ),
86
+	__('Attendee id', 'event_espresso'),
87 87
 
88 88
 	// Reference: domains/core/admin/blocks/src/event-attendees/controls/SelectOrderBy.tsx:15
89
-	__( 'Last name only', 'event_espresso' ),
89
+	__('Last name only', 'event_espresso'),
90 90
 
91 91
 	// Reference: domains/core/admin/blocks/src/event-attendees/controls/SelectOrderBy.tsx:19
92
-	__( 'First name only', 'event_espresso' ),
92
+	__('First name only', 'event_espresso'),
93 93
 
94 94
 	// Reference: domains/core/admin/blocks/src/event-attendees/controls/SelectOrderBy.tsx:23
95
-	__( 'First, then Last name', 'event_espresso' ),
95
+	__('First, then Last name', 'event_espresso'),
96 96
 
97 97
 	// Reference: domains/core/admin/blocks/src/event-attendees/controls/SelectOrderBy.tsx:27
98
-	__( 'Last, then First name', 'event_espresso' ),
98
+	__('Last, then First name', 'event_espresso'),
99 99
 
100 100
 	// Reference: domains/core/admin/blocks/src/event-attendees/controls/SelectOrderBy.tsx:41
101
-	__( 'Order Attendees by:', 'event_espresso' ),
101
+	__('Order Attendees by:', 'event_espresso'),
102 102
 
103 103
 	// Reference: domains/core/admin/blocks/src/event-attendees/controls/SelectTicket.tsx:22
104
-	__( 'Select Ticket', 'event_espresso' ),
104
+	__('Select Ticket', 'event_espresso'),
105 105
 
106 106
 	// Reference: domains/core/admin/blocks/src/event-attendees/controls/index.tsx:21
107
-	__( 'Filter By Settings', 'event_espresso' ),
107
+	__('Filter By Settings', 'event_espresso'),
108 108
 
109 109
 	// Reference: domains/core/admin/blocks/src/event-attendees/controls/index.tsx:36
110
-	__( 'Gravatar Setttings', 'event_espresso' ),
110
+	__('Gravatar Setttings', 'event_espresso'),
111 111
 
112 112
 	// Reference: domains/core/admin/blocks/src/event-attendees/controls/index.tsx:39
113
-	__( 'Archive Settings', 'event_espresso' ),
113
+	__('Archive Settings', 'event_espresso'),
114 114
 
115 115
 	// Reference: domains/core/admin/blocks/src/event-attendees/index.tsx:10
116
-	__( 'Event Attendees', 'event_espresso' ),
116
+	__('Event Attendees', 'event_espresso'),
117 117
 
118 118
 	// Reference: domains/core/admin/blocks/src/event-attendees/index.tsx:11
119
-	__( 'Displays a list of people that have registered for the specified event', 'event_espresso' ),
119
+	__('Displays a list of people that have registered for the specified event', 'event_espresso'),
120 120
 
121 121
 	// Reference: domains/core/admin/blocks/src/event-attendees/index.tsx:14
122 122
 	// Reference: domains/core/admin/blocks/src/event/index.tsx:12
123 123
 	// Reference: packages/edtr-services/src/constants.ts:25
124
-	__( 'event', 'event_espresso' ),
124
+	__('event', 'event_espresso'),
125 125
 
126 126
 	// Reference: domains/core/admin/blocks/src/event-attendees/index.tsx:14
127
-	__( 'attendees', 'event_espresso' ),
127
+	__('attendees', 'event_espresso'),
128 128
 
129 129
 	// Reference: domains/core/admin/blocks/src/event-attendees/index.tsx:14
130
-	__( 'list', 'event_espresso' ),
130
+	__('list', 'event_espresso'),
131 131
 
132 132
 	// Reference: domains/core/admin/blocks/src/event/DisplayField.tsx:41
133
-	__( 'An unknown error occurred while fetching event details.', 'event_espresso' ),
133
+	__('An unknown error occurred while fetching event details.', 'event_espresso'),
134 134
 
135 135
 	// Reference: domains/core/admin/blocks/src/event/controls/SelectField.tsx:10
136 136
 	// Reference: domains/core/admin/blocks/src/services/utils.ts:24
137 137
 	// Reference: packages/utils/src/list/index.ts:13
138
-	__( 'Select…', 'event_espresso' ),
138
+	__('Select…', 'event_espresso'),
139 139
 
140 140
 	// Reference: domains/core/admin/blocks/src/event/controls/SelectField.tsx:15
141 141
 	// Reference: domains/core/admin/eventEditor/src/ui/datetimes/dateForm/useDateFormConfig.ts:75
@@ -144,7 +144,7 @@  discard block
 block discarded – undo
144 144
 	// Reference: domains/core/admin/eventEditor/src/ui/tickets/ticketForm/useTicketFormConfig.ts:198
145 145
 	// Reference: domains/core/admin/eventEditor/src/ui/tickets/ticketsList/bulkEdit/details/useBulkEditFormConfig.ts:48
146 146
 	// Reference: domains/core/admin/eventEditor/src/ui/tickets/ticketsList/tableView/useHeaderRowGenerator.tsx:42
147
-	__( 'Name', 'event_espresso' ),
147
+	__('Name', 'event_espresso'),
148 148
 
149 149
 	// Reference: domains/core/admin/blocks/src/event/controls/SelectField.tsx:19
150 150
 	// Reference: domains/core/admin/eventEditor/src/ui/datetimes/dateForm/useDateFormConfig.ts:80
@@ -152,411 +152,411 @@  discard block
 block discarded – undo
152 152
 	// Reference: domains/core/admin/eventEditor/src/ui/tickets/ticketForm/useTicketFormConfig.ts:203
153 153
 	// Reference: domains/core/admin/eventEditor/src/ui/tickets/ticketsList/bulkEdit/details/useBulkEditFormConfig.ts:54
154 154
 	// Reference: packages/tpc/src/components/table/useHeaderRowGenerator.ts:47
155
-	__( 'Description', 'event_espresso' ),
155
+	__('Description', 'event_espresso'),
156 156
 
157 157
 	// Reference: domains/core/admin/blocks/src/event/controls/SelectField.tsx:23
158
-	__( 'Short description', 'event_espresso' ),
158
+	__('Short description', 'event_espresso'),
159 159
 
160 160
 	// Reference: domains/core/admin/blocks/src/event/controls/SelectField.tsx:35
161
-	__( 'Select Field', 'event_espresso' ),
161
+	__('Select Field', 'event_espresso'),
162 162
 
163 163
 	// Reference: domains/core/admin/blocks/src/event/controls/index.tsx:27
164
-	__( 'Text Color', 'event_espresso' ),
164
+	__('Text Color', 'event_espresso'),
165 165
 
166 166
 	// Reference: domains/core/admin/blocks/src/event/controls/index.tsx:32
167
-	__( 'Background Color', 'event_espresso' ),
167
+	__('Background Color', 'event_espresso'),
168 168
 
169 169
 	// Reference: domains/core/admin/blocks/src/event/controls/index.tsx:41
170 170
 	// Reference: packages/form-builder/src/FormElement/Tabs/FormElementTabs.tsx:22
171 171
 	// Reference: packages/form-builder/src/FormSection/Tabs/FormSectionTabs.tsx:21
172
-	__( 'Settings', 'event_espresso' ),
172
+	__('Settings', 'event_espresso'),
173 173
 
174 174
 	// Reference: domains/core/admin/blocks/src/event/controls/index.tsx:45
175
-	__( 'Typography', 'event_espresso' ),
175
+	__('Typography', 'event_espresso'),
176 176
 
177 177
 	// Reference: domains/core/admin/blocks/src/event/controls/index.tsx:48
178
-	__( 'Color', 'event_espresso' ),
178
+	__('Color', 'event_espresso'),
179 179
 
180 180
 	// Reference: domains/core/admin/blocks/src/event/index.tsx:12
181
-	__( 'field', 'event_espresso' ),
181
+	__('field', 'event_espresso'),
182 182
 
183 183
 	// Reference: domains/core/admin/blocks/src/event/index.tsx:8
184
-	__( 'Event Field', 'event_espresso' ),
184
+	__('Event Field', 'event_espresso'),
185 185
 
186 186
 	// Reference: domains/core/admin/blocks/src/event/index.tsx:9
187
-	__( 'Displays the selected field of an event', 'event_espresso' ),
187
+	__('Displays the selected field of an event', 'event_espresso'),
188 188
 
189 189
 	// Reference: domains/core/admin/blocks/src/services/utils.ts:17
190
-	__( 'Error', 'event_espresso' ),
190
+	__('Error', 'event_espresso'),
191 191
 
192 192
 	// Reference: domains/core/admin/blocks/src/services/utils.ts:9
193
-	__( 'Loading…', 'event_espresso' ),
193
+	__('Loading…', 'event_espresso'),
194 194
 
195 195
 	// Reference: domains/core/admin/eventEditor/src/ui/EventDescription.tsx:33
196
-	__( 'Event Description', 'event_espresso' ),
196
+	__('Event Description', 'event_espresso'),
197 197
 
198 198
 	// Reference: domains/core/admin/eventEditor/src/ui/EventRegistrationOptions/ActiveStatus.tsx:28
199
-	__( 'Active status', 'event_espresso' ),
199
+	__('Active status', 'event_espresso'),
200 200
 
201 201
 	// Reference: domains/core/admin/eventEditor/src/ui/EventRegistrationOptions/AltRegPage.tsx:12
202
-	__( 'Alternative Registration Page', 'event_espresso' ),
202
+	__('Alternative Registration Page', 'event_espresso'),
203 203
 
204 204
 	// Reference: domains/core/admin/eventEditor/src/ui/EventRegistrationOptions/DefaultRegistrationStatus.tsx:25
205
-	__( 'Default Registration Status', 'event_espresso' ),
205
+	__('Default Registration Status', 'event_espresso'),
206 206
 
207 207
 	// Reference: domains/core/admin/eventEditor/src/ui/EventRegistrationOptions/Donations.tsx:8
208
-	__( 'Donations Enabled', 'event_espresso' ),
208
+	__('Donations Enabled', 'event_espresso'),
209 209
 
210 210
 	// Reference: domains/core/admin/eventEditor/src/ui/EventRegistrationOptions/Donations.tsx:8
211
-	__( 'Donations Disabled', 'event_espresso' ),
211
+	__('Donations Disabled', 'event_espresso'),
212 212
 
213 213
 	// Reference: domains/core/admin/eventEditor/src/ui/EventRegistrationOptions/EventManager.tsx:16
214
-	__( 'Event Manager', 'event_espresso' ),
214
+	__('Event Manager', 'event_espresso'),
215 215
 
216 216
 	// Reference: domains/core/admin/eventEditor/src/ui/EventRegistrationOptions/EventPhoneNumber.tsx:15
217
-	__( 'Event Phone Number', 'event_espresso' ),
217
+	__('Event Phone Number', 'event_espresso'),
218 218
 
219 219
 	// Reference: domains/core/admin/eventEditor/src/ui/EventRegistrationOptions/MaxRegistrations.tsx:13
220
-	__( 'Max Registrations per Transaction', 'event_espresso' ),
220
+	__('Max Registrations per Transaction', 'event_espresso'),
221 221
 
222 222
 	// Reference: domains/core/admin/eventEditor/src/ui/EventRegistrationOptions/TicketSelector.tsx:8
223
-	__( 'Ticket Selector Enabled', 'event_espresso' ),
223
+	__('Ticket Selector Enabled', 'event_espresso'),
224 224
 
225 225
 	// Reference: domains/core/admin/eventEditor/src/ui/EventRegistrationOptions/TicketSelector.tsx:8
226
-	__( 'Ticket Selector Disabled', 'event_espresso' ),
226
+	__('Ticket Selector Disabled', 'event_espresso'),
227 227
 
228 228
 	// Reference: domains/core/admin/eventEditor/src/ui/EventRegistrationOptions/index.tsx:41
229
-	__( 'Event Details', 'event_espresso' ),
229
+	__('Event Details', 'event_espresso'),
230 230
 
231 231
 	// Reference: domains/core/admin/eventEditor/src/ui/EventRegistrationOptions/index.tsx:47
232
-	__( 'Registration Options', 'event_espresso' ),
232
+	__('Registration Options', 'event_espresso'),
233 233
 
234 234
 	// Reference: domains/core/admin/eventEditor/src/ui/datetimes/dateForm/multiStep/DateFormSteps.tsx:10
235
-	__( 'primary information about the date', 'event_espresso' ),
235
+	__('primary information about the date', 'event_espresso'),
236 236
 
237 237
 	// Reference: domains/core/admin/eventEditor/src/ui/datetimes/dateForm/multiStep/DateFormSteps.tsx:10
238
-	__( 'Date Details', 'event_espresso' ),
238
+	__('Date Details', 'event_espresso'),
239 239
 
240 240
 	// Reference: domains/core/admin/eventEditor/src/ui/datetimes/dateForm/multiStep/DateFormSteps.tsx:11
241 241
 	// Reference: domains/core/admin/eventEditor/src/ui/tickets/defaultTickets/multiStep/TicketFormSteps.tsx:16
242 242
 	// Reference: domains/core/admin/eventEditor/src/ui/tickets/ticketForm/multiStep/TicketFormSteps.tsx:16
243
-	__( 'relations between tickets and dates', 'event_espresso' ),
243
+	__('relations between tickets and dates', 'event_espresso'),
244 244
 
245 245
 	// Reference: domains/core/admin/eventEditor/src/ui/datetimes/dateForm/multiStep/DateFormSteps.tsx:11
246
-	__( 'Assign Tickets', 'event_espresso' ),
246
+	__('Assign Tickets', 'event_espresso'),
247 247
 
248 248
 	// Reference: domains/core/admin/eventEditor/src/ui/datetimes/dateForm/multiStep/FooterButtons.tsx:22
249
-	__( 'Save and assign tickets', 'event_espresso' ),
249
+	__('Save and assign tickets', 'event_espresso'),
250 250
 
251 251
 	// Reference: domains/core/admin/eventEditor/src/ui/datetimes/dateForm/multiStep/Modal.tsx:30
252 252
 	/* translators: %d database id */
253
-	__( 'Edit datetime %s', 'event_espresso' ),
253
+	__('Edit datetime %s', 'event_espresso'),
254 254
 
255 255
 	// Reference: domains/core/admin/eventEditor/src/ui/datetimes/dateForm/multiStep/Modal.tsx:33
256
-	__( 'New Datetime', 'event_espresso' ),
256
+	__('New Datetime', 'event_espresso'),
257 257
 
258 258
 	// Reference: domains/core/admin/eventEditor/src/ui/datetimes/dateForm/multiStep/Modal.tsx:43
259
-	__( 'modal for datetime', 'event_espresso' ),
259
+	__('modal for datetime', 'event_espresso'),
260 260
 
261 261
 	// Reference: domains/core/admin/eventEditor/src/ui/datetimes/dateForm/useDateFormConfig.ts:110
262 262
 	// Reference: domains/core/admin/eventEditor/src/ui/datetimes/datesList/bulkEdit/details/useBulkEditFormConfig.ts:107
263 263
 	// Reference: domains/core/admin/eventEditor/src/ui/tickets/ticketForm/useTicketFormConfig.ts:233
264 264
 	// Reference: domains/core/admin/eventEditor/src/ui/tickets/ticketsList/bulkEdit/details/useBulkEditFormConfig.ts:106
265
-	__( 'Details', 'event_espresso' ),
265
+	__('Details', 'event_espresso'),
266 266
 
267 267
 	// Reference: domains/core/admin/eventEditor/src/ui/datetimes/dateForm/useDateFormConfig.ts:114
268 268
 	// Reference: domains/core/admin/eventEditor/src/ui/datetimes/datesList/bulkEdit/details/useBulkEditFormConfig.ts:111
269 269
 	// Reference: domains/core/admin/eventEditor/src/ui/datetimes/datesList/tableView/useHeaderRowGenerator.tsx:83
270
-	__( 'Capacity', 'event_espresso' ),
270
+	__('Capacity', 'event_espresso'),
271 271
 
272 272
 	// Reference: domains/core/admin/eventEditor/src/ui/datetimes/dateForm/useDateFormConfig.ts:119
273
-	__( 'The maximum number of registrants that can attend the event at this particular date.', 'event_espresso' ),
273
+	__('The maximum number of registrants that can attend the event at this particular date.', 'event_espresso'),
274 274
 
275 275
 	// Reference: domains/core/admin/eventEditor/src/ui/datetimes/dateForm/useDateFormConfig.ts:123
276
-	__( 'Set to 0 to close registration or leave blank for no limit.', 'event_espresso' ),
276
+	__('Set to 0 to close registration or leave blank for no limit.', 'event_espresso'),
277 277
 
278 278
 	// Reference: domains/core/admin/eventEditor/src/ui/datetimes/dateForm/useDateFormConfig.ts:129
279 279
 	// Reference: domains/core/admin/eventEditor/src/ui/tickets/ticketForm/useTicketFormConfig.ts:171
280
-	__( 'Trash', 'event_espresso' ),
280
+	__('Trash', 'event_espresso'),
281 281
 
282 282
 	// Reference: domains/core/admin/eventEditor/src/ui/datetimes/dateForm/useDateFormConfig.ts:71
283 283
 	// Reference: domains/core/admin/eventEditor/src/ui/datetimes/datesList/bulkEdit/details/useBulkEditFormConfig.ts:44
284 284
 	// Reference: domains/core/admin/eventEditor/src/ui/tickets/ticketForm/useTicketFormConfig.ts:194
285 285
 	// Reference: domains/core/admin/eventEditor/src/ui/tickets/ticketsList/bulkEdit/details/useBulkEditFormConfig.ts:44
286
-	__( 'Basics', 'event_espresso' ),
286
+	__('Basics', 'event_espresso'),
287 287
 
288 288
 	// Reference: domains/core/admin/eventEditor/src/ui/datetimes/dateForm/useDateFormConfig.ts:88
289 289
 	// Reference: domains/core/admin/eventEditor/src/ui/datetimes/datesList/bulkEdit/details/useBulkEditFormConfig.ts:62
290 290
 	// Reference: domains/core/admin/eventEditor/src/ui/tickets/ticketsList/bulkEdit/details/useBulkEditFormConfig.ts:62
291
-	__( 'Dates', 'event_espresso' ),
291
+	__('Dates', 'event_espresso'),
292 292
 
293 293
 	// Reference: domains/core/admin/eventEditor/src/ui/datetimes/dateForm/useDateFormConfig.ts:92
294 294
 	// Reference: domains/core/admin/eventEditor/src/ui/datetimes/datesList/tableView/useHeaderRowGenerator.tsx:53
295 295
 	// Reference: domains/core/admin/eventEditor/src/ui/tickets/ticketForm/useTicketFormConfig.ts:215
296
-	__( 'Start Date', 'event_espresso' ),
296
+	__('Start Date', 'event_espresso'),
297 297
 
298 298
 	// Reference: domains/core/admin/eventEditor/src/ui/datetimes/dateForm/useDateFormConfig.ts:99
299 299
 	// Reference: domains/core/admin/eventEditor/src/ui/datetimes/datesList/tableView/useHeaderRowGenerator.tsx:67
300 300
 	// Reference: domains/core/admin/eventEditor/src/ui/tickets/ticketForm/useTicketFormConfig.ts:222
301
-	__( 'End Date', 'event_espresso' ),
301
+	__('End Date', 'event_espresso'),
302 302
 
303 303
 	// Reference: domains/core/admin/eventEditor/src/ui/datetimes/datesList/DateRegistrationsLink.tsx:25
304 304
 	// Reference: domains/core/admin/eventEditor/src/ui/tickets/ticketsList/TicketRegistrationsLink.tsx:13
305
-	__( 'total registrations.', 'event_espresso' ),
305
+	__('total registrations.', 'event_espresso'),
306 306
 
307 307
 	// Reference: domains/core/admin/eventEditor/src/ui/datetimes/datesList/DateRegistrationsLink.tsx:26
308
-	__( 'view ALL registrations for this date.', 'event_espresso' ),
308
+	__('view ALL registrations for this date.', 'event_espresso'),
309 309
 
310 310
 	// Reference: domains/core/admin/eventEditor/src/ui/datetimes/datesList/DateSoldLink.tsx:13
311
-	__( 'view approved registrations for this date.', 'event_espresso' ),
311
+	__('view approved registrations for this date.', 'event_espresso'),
312 312
 
313 313
 	// Reference: domains/core/admin/eventEditor/src/ui/datetimes/datesList/DatesList.tsx:35
314 314
 	// Reference: domains/core/admin/eventEditor/src/ui/datetimes/datesList/tableView/TableView.tsx:33
315
-	__( 'Event Dates', 'event_espresso' ),
315
+	__('Event Dates', 'event_espresso'),
316 316
 
317 317
 	// Reference: domains/core/admin/eventEditor/src/ui/datetimes/datesList/DatesList.tsx:38
318
-	__( 'loading event dates…', 'event_espresso' ),
318
+	__('loading event dates…', 'event_espresso'),
319 319
 
320 320
 	// Reference: domains/core/admin/eventEditor/src/ui/datetimes/datesList/DatesListButtons.tsx:22
321
-	__( 'Add a date or a ticket in order to use Ticket Assignment Manager', 'event_espresso' ),
321
+	__('Add a date or a ticket in order to use Ticket Assignment Manager', 'event_espresso'),
322 322
 
323 323
 	// Reference: domains/core/admin/eventEditor/src/ui/datetimes/datesList/DatesListButtons.tsx:32
324
-	__( 'Ticket Assignments', 'event_espresso' ),
324
+	__('Ticket Assignments', 'event_espresso'),
325 325
 
326 326
 	// Reference: domains/core/admin/eventEditor/src/ui/datetimes/datesList/actionsMenu/AssignTicketsButton.tsx:25
327
-	__( 'Number of related tickets', 'event_espresso' ),
327
+	__('Number of related tickets', 'event_espresso'),
328 328
 
329 329
 	// Reference: domains/core/admin/eventEditor/src/ui/datetimes/datesList/actionsMenu/AssignTicketsButton.tsx:26
330
-	__( 'There are no tickets assigned to this datetime. Please click the ticket icon to update the assignments.', 'event_espresso' ),
330
+	__('There are no tickets assigned to this datetime. Please click the ticket icon to update the assignments.', 'event_espresso'),
331 331
 
332 332
 	// Reference: domains/core/admin/eventEditor/src/ui/datetimes/datesList/actionsMenu/AssignTicketsButton.tsx:34
333
-	__( 'assign tickets', 'event_espresso' ),
333
+	__('assign tickets', 'event_espresso'),
334 334
 
335 335
 	// Reference: domains/core/admin/eventEditor/src/ui/datetimes/datesList/actionsMenu/dropdown/DateMainMenu.tsx:21
336
-	__( 'event datetime main menu', 'event_espresso' ),
336
+	__('event datetime main menu', 'event_espresso'),
337 337
 
338 338
 	// Reference: domains/core/admin/eventEditor/src/ui/datetimes/datesList/actionsMenu/dropdown/DateMainMenu.tsx:33
339
-	__( 'edit datetime', 'event_espresso' ),
339
+	__('edit datetime', 'event_espresso'),
340 340
 
341 341
 	// Reference: domains/core/admin/eventEditor/src/ui/datetimes/datesList/actionsMenu/dropdown/DateMainMenu.tsx:34
342
-	__( 'copy datetime', 'event_espresso' ),
342
+	__('copy datetime', 'event_espresso'),
343 343
 
344 344
 	// Reference: domains/core/admin/eventEditor/src/ui/datetimes/datesList/actionsMenu/dropdown/DeleteDatetime.tsx:15
345 345
 	// Reference: domains/core/admin/eventEditor/src/ui/tickets/ticketsList/actionsMenu/dropdown/DeleteTicket.tsx:48
346
-	__( 'delete permanently', 'event_espresso' ),
346
+	__('delete permanently', 'event_espresso'),
347 347
 
348 348
 	// Reference: domains/core/admin/eventEditor/src/ui/datetimes/datesList/actionsMenu/dropdown/DeleteDatetime.tsx:15
349
-	__( 'trash datetime', 'event_espresso' ),
349
+	__('trash datetime', 'event_espresso'),
350 350
 
351 351
 	// Reference: domains/core/admin/eventEditor/src/ui/datetimes/datesList/actionsMenu/dropdown/DeleteDatetime.tsx:18
352
-	__( 'Permanently Delete Datetime?', 'event_espresso' ),
352
+	__('Permanently Delete Datetime?', 'event_espresso'),
353 353
 
354 354
 	// Reference: domains/core/admin/eventEditor/src/ui/datetimes/datesList/actionsMenu/dropdown/DeleteDatetime.tsx:18
355
-	__( 'Move Datetime to Trash?', 'event_espresso' ),
355
+	__('Move Datetime to Trash?', 'event_espresso'),
356 356
 
357 357
 	// Reference: domains/core/admin/eventEditor/src/ui/datetimes/datesList/actionsMenu/dropdown/DeleteDatetime.tsx:20
358
-	__( 'Are you sure you want to permanently delete this datetime? This action is permanent and can not be undone.', 'event_espresso' ),
358
+	__('Are you sure you want to permanently delete this datetime? This action is permanent and can not be undone.', 'event_espresso'),
359 359
 
360 360
 	// Reference: domains/core/admin/eventEditor/src/ui/datetimes/datesList/actionsMenu/dropdown/DeleteDatetime.tsx:23
361
-	__( 'Are you sure you want to move this datetime to the trash? You can "untrash" this datetime later if you need to.', 'event_espresso' ),
361
+	__('Are you sure you want to move this datetime to the trash? You can "untrash" this datetime later if you need to.', 'event_espresso'),
362 362
 
363 363
 	// Reference: domains/core/admin/eventEditor/src/ui/datetimes/datesList/actionsMenu/dropdown/DeleteDatetime.tsx:33
364
-	__( 'delete', 'event_espresso' ),
364
+	__('delete', 'event_espresso'),
365 365
 
366 366
 	// Reference: domains/core/admin/eventEditor/src/ui/datetimes/datesList/bulkEdit/actions/Actions.tsx:36
367 367
 	// Reference: domains/core/admin/eventEditor/src/ui/tickets/ticketsList/bulkEdit/actions/Actions.tsx:42
368 368
 	// Reference: packages/ui-components/src/bulkEdit/BulkActions.tsx:43
369
-	__( 'bulk actions', 'event_espresso' ),
369
+	__('bulk actions', 'event_espresso'),
370 370
 
371 371
 	// Reference: domains/core/admin/eventEditor/src/ui/datetimes/datesList/bulkEdit/actions/Actions.tsx:40
372
-	__( 'edit datetime details', 'event_espresso' ),
372
+	__('edit datetime details', 'event_espresso'),
373 373
 
374 374
 	// Reference: domains/core/admin/eventEditor/src/ui/datetimes/datesList/bulkEdit/actions/Actions.tsx:44
375
-	__( 'delete datetimes', 'event_espresso' ),
375
+	__('delete datetimes', 'event_espresso'),
376 376
 
377 377
 	// Reference: domains/core/admin/eventEditor/src/ui/datetimes/datesList/bulkEdit/actions/Actions.tsx:44
378
-	__( 'trash datetimes', 'event_espresso' ),
378
+	__('trash datetimes', 'event_espresso'),
379 379
 
380 380
 	// Reference: domains/core/admin/eventEditor/src/ui/datetimes/datesList/bulkEdit/delete/Delete.tsx:14
381
-	__( 'Are you sure you want to permanently delete these datetimes? This action can NOT be undone!', 'event_espresso' ),
381
+	__('Are you sure you want to permanently delete these datetimes? This action can NOT be undone!', 'event_espresso'),
382 382
 
383 383
 	// Reference: domains/core/admin/eventEditor/src/ui/datetimes/datesList/bulkEdit/delete/Delete.tsx:15
384
-	__( 'Are you sure you want to trash these datetimes?', 'event_espresso' ),
384
+	__('Are you sure you want to trash these datetimes?', 'event_espresso'),
385 385
 
386 386
 	// Reference: domains/core/admin/eventEditor/src/ui/datetimes/datesList/bulkEdit/delete/Delete.tsx:16
387
-	__( 'Delete datetimes permanently', 'event_espresso' ),
387
+	__('Delete datetimes permanently', 'event_espresso'),
388 388
 
389 389
 	// Reference: domains/core/admin/eventEditor/src/ui/datetimes/datesList/bulkEdit/delete/Delete.tsx:16
390
-	__( 'Trash datetimes', 'event_espresso' ),
390
+	__('Trash datetimes', 'event_espresso'),
391 391
 
392 392
 	// Reference: domains/core/admin/eventEditor/src/ui/datetimes/datesList/bulkEdit/details/EditDetails.tsx:21
393
-	__( 'Bulk edit date details', 'event_espresso' ),
393
+	__('Bulk edit date details', 'event_espresso'),
394 394
 
395 395
 	// Reference: domains/core/admin/eventEditor/src/ui/datetimes/datesList/bulkEdit/details/EditDetails.tsx:22
396
-	__( 'any changes will be applied to ALL of the selected dates.', 'event_espresso' ),
396
+	__('any changes will be applied to ALL of the selected dates.', 'event_espresso'),
397 397
 
398 398
 	// Reference: domains/core/admin/eventEditor/src/ui/datetimes/datesList/bulkEdit/details/formValidation.ts:12
399 399
 	// Reference: domains/core/admin/eventEditor/src/ui/tickets/ticketsList/bulkEdit/details/formValidation.ts:12
400
-	__( 'Name must be at least three characters', 'event_espresso' ),
400
+	__('Name must be at least three characters', 'event_espresso'),
401 401
 
402 402
 	// Reference: domains/core/admin/eventEditor/src/ui/datetimes/datesList/bulkEdit/details/useBulkEditFormConfig.ts:66
403 403
 	// Reference: domains/core/admin/eventEditor/src/ui/tickets/ticketsList/bulkEdit/details/useBulkEditFormConfig.ts:66
404
-	__( 'Shift dates', 'event_espresso' ),
404
+	__('Shift dates', 'event_espresso'),
405 405
 
406 406
 	// Reference: domains/core/admin/eventEditor/src/ui/datetimes/datesList/bulkEdit/details/useBulkEditFormConfig.ts:91
407 407
 	// Reference: domains/core/admin/eventEditor/src/ui/tickets/ticketsList/bulkEdit/details/useBulkEditFormConfig.ts:90
408
-	__( 'earlier', 'event_espresso' ),
408
+	__('earlier', 'event_espresso'),
409 409
 
410 410
 	// Reference: domains/core/admin/eventEditor/src/ui/datetimes/datesList/bulkEdit/details/useBulkEditFormConfig.ts:95
411 411
 	// Reference: domains/core/admin/eventEditor/src/ui/tickets/ticketsList/bulkEdit/details/useBulkEditFormConfig.ts:94
412
-	__( 'later', 'event_espresso' ),
412
+	__('later', 'event_espresso'),
413 413
 
414 414
 	// Reference: domains/core/admin/eventEditor/src/ui/datetimes/datesList/cardView/DateCapacity.tsx:31
415 415
 	/* translators: click to edit capacity<linebreak>(registration limit)… */
416
-	__( 'click to edit capacity%s(registration limit)…', 'event_espresso' ),
416
+	__('click to edit capacity%s(registration limit)…', 'event_espresso'),
417 417
 
418 418
 	// Reference: domains/core/admin/eventEditor/src/ui/datetimes/datesList/cardView/DateCardSidebar.tsx:31
419 419
 	// Reference: packages/ee-components/src/SimpleTicketCard/SimpleTicketCard.tsx:27
420 420
 	// Reference: packages/ui-components/src/CalendarDateSwitcher/CalendarDateSwitcher.tsx:34
421
-	__( 'starts', 'event_espresso' ),
421
+	__('starts', 'event_espresso'),
422 422
 
423 423
 	// Reference: domains/core/admin/eventEditor/src/ui/datetimes/datesList/cardView/DateCardSidebar.tsx:32
424 424
 	// Reference: packages/ee-components/src/SimpleTicketCard/SimpleTicketCard.tsx:34
425 425
 	// Reference: packages/ui-components/src/CalendarDateSwitcher/CalendarDateSwitcher.tsx:47
426
-	__( 'ends', 'event_espresso' ),
426
+	__('ends', 'event_espresso'),
427 427
 
428 428
 	// Reference: domains/core/admin/eventEditor/src/ui/datetimes/datesList/cardView/DateCardSidebar.tsx:32
429
-	__( 'started', 'event_espresso' ),
429
+	__('started', 'event_espresso'),
430 430
 
431 431
 	// Reference: domains/core/admin/eventEditor/src/ui/datetimes/datesList/cardView/DateCardSidebar.tsx:32
432
-	__( 'ended', 'event_espresso' ),
432
+	__('ended', 'event_espresso'),
433 433
 
434 434
 	// Reference: domains/core/admin/eventEditor/src/ui/datetimes/datesList/cardView/DateCardSidebar.tsx:46
435
-	__( 'Edit Event Date', 'event_espresso' ),
435
+	__('Edit Event Date', 'event_espresso'),
436 436
 
437 437
 	// Reference: domains/core/admin/eventEditor/src/ui/datetimes/datesList/cardView/DateCardSidebar.tsx:50
438
-	__( 'edit start and end dates', 'event_espresso' ),
438
+	__('edit start and end dates', 'event_espresso'),
439 439
 
440 440
 	// Reference: domains/core/admin/eventEditor/src/ui/datetimes/datesList/cardView/DateDetailsPanel.tsx:16
441 441
 	// Reference: domains/core/admin/eventEditor/src/ui/tickets/ticketsList/cardView/TicketDetailsPanel.tsx:16
442
-	__( 'sold', 'event_espresso' ),
442
+	__('sold', 'event_espresso'),
443 443
 
444 444
 	// Reference: domains/core/admin/eventEditor/src/ui/datetimes/datesList/cardView/DateDetailsPanel.tsx:21
445
-	__( 'capacity', 'event_espresso' ),
445
+	__('capacity', 'event_espresso'),
446 446
 
447 447
 	// Reference: domains/core/admin/eventEditor/src/ui/datetimes/datesList/cardView/DateDetailsPanel.tsx:27
448 448
 	// Reference: domains/core/admin/eventEditor/src/ui/tickets/ticketsList/cardView/TicketDetailsPanel.tsx:26
449
-	__( 'reg list', 'event_espresso' ),
449
+	__('reg list', 'event_espresso'),
450 450
 
451 451
 	// Reference: domains/core/admin/eventEditor/src/ui/datetimes/datesList/cardView/Details.tsx:43
452 452
 	// Reference: domains/core/admin/eventEditor/src/ui/tickets/ticketsList/cardView/Details.tsx:35
453
-	__( 'add description…', 'event_espresso' ),
453
+	__('add description…', 'event_espresso'),
454 454
 
455 455
 	// Reference: domains/core/admin/eventEditor/src/ui/datetimes/datesList/cardView/Details.tsx:44
456 456
 	// Reference: domains/core/admin/eventEditor/src/ui/tickets/ticketsList/cardView/Details.tsx:36
457
-	__( 'Edit description', 'event_espresso' ),
457
+	__('Edit description', 'event_espresso'),
458 458
 
459 459
 	// Reference: domains/core/admin/eventEditor/src/ui/datetimes/datesList/cardView/Details.tsx:45
460 460
 	// Reference: domains/core/admin/eventEditor/src/ui/tickets/ticketsList/cardView/Details.tsx:37
461
-	__( 'click to edit description…', 'event_espresso' ),
461
+	__('click to edit description…', 'event_espresso'),
462 462
 
463 463
 	// Reference: domains/core/admin/eventEditor/src/ui/datetimes/datesList/config.ts:10
464
-	__( 'Move Date to Trash', 'event_espresso' ),
464
+	__('Move Date to Trash', 'event_espresso'),
465 465
 
466 466
 	// Reference: domains/core/admin/eventEditor/src/ui/datetimes/datesList/config.ts:13
467 467
 	// Reference: packages/constants/src/datetime.ts:6
468
-	__( 'Active', 'event_espresso' ),
468
+	__('Active', 'event_espresso'),
469 469
 
470 470
 	// Reference: domains/core/admin/eventEditor/src/ui/datetimes/datesList/config.ts:14
471 471
 	// Reference: domains/core/admin/eventEditor/src/ui/tickets/ticketsList/config.ts:13
472
-	__( 'Trashed', 'event_espresso' ),
472
+	__('Trashed', 'event_espresso'),
473 473
 
474 474
 	// Reference: domains/core/admin/eventEditor/src/ui/datetimes/datesList/config.ts:15
475 475
 	// Reference: domains/core/admin/eventEditor/src/ui/tickets/ticketsList/config.ts:14
476 476
 	// Reference: packages/constants/src/datetime.ts:8
477
-	__( 'Expired', 'event_espresso' ),
477
+	__('Expired', 'event_espresso'),
478 478
 
479 479
 	// Reference: domains/core/admin/eventEditor/src/ui/datetimes/datesList/config.ts:16
480 480
 	// Reference: domains/core/admin/eventEditor/src/ui/tickets/ticketsList/config.ts:16
481
-	__( 'Sold Out', 'event_espresso' ),
481
+	__('Sold Out', 'event_espresso'),
482 482
 
483 483
 	// Reference: domains/core/admin/eventEditor/src/ui/datetimes/datesList/config.ts:17
484 484
 	// Reference: packages/constants/src/datetime.ts:12
485
-	__( 'Upcoming', 'event_espresso' ),
485
+	__('Upcoming', 'event_espresso'),
486 486
 
487 487
 	// Reference: domains/core/admin/eventEditor/src/ui/datetimes/datesList/config.ts:7
488
-	__( 'Edit Event Date Details', 'event_espresso' ),
488
+	__('Edit Event Date Details', 'event_espresso'),
489 489
 
490 490
 	// Reference: domains/core/admin/eventEditor/src/ui/datetimes/datesList/config.ts:8
491
-	__( 'View Registrations for this Date', 'event_espresso' ),
491
+	__('View Registrations for this Date', 'event_espresso'),
492 492
 
493 493
 	// Reference: domains/core/admin/eventEditor/src/ui/datetimes/datesList/config.ts:9
494
-	__( 'Manage Ticket Assignments', 'event_espresso' ),
494
+	__('Manage Ticket Assignments', 'event_espresso'),
495 495
 
496 496
 	// Reference: domains/core/admin/eventEditor/src/ui/datetimes/datesList/editable/EditableName.tsx:41
497 497
 	// Reference: domains/core/admin/eventEditor/src/ui/tickets/ticketsList/editable/EditableName.tsx:41
498
-	__( 'click to edit title…', 'event_espresso' ),
498
+	__('click to edit title…', 'event_espresso'),
499 499
 
500 500
 	// Reference: domains/core/admin/eventEditor/src/ui/datetimes/datesList/editable/EditableName.tsx:42
501 501
 	// Reference: domains/core/admin/eventEditor/src/ui/tickets/ticketsList/editable/EditableName.tsx:42
502
-	__( 'add title…', 'event_espresso' ),
502
+	__('add title…', 'event_espresso'),
503 503
 
504 504
 	// Reference: domains/core/admin/eventEditor/src/ui/datetimes/datesList/filterBar/ActiveDatesFilters.tsx:17
505 505
 	// Reference: domains/core/admin/eventEditor/src/ui/tickets/ticketsList/filterBar/ActiveTicketsFilters.tsx:17
506
-	__( 'ON', 'event_espresso' ),
506
+	__('ON', 'event_espresso'),
507 507
 
508 508
 	// Reference: domains/core/admin/eventEditor/src/ui/datetimes/datesList/filterBar/controls/options.ts:10
509
-	__( 'end dates only', 'event_espresso' ),
509
+	__('end dates only', 'event_espresso'),
510 510
 
511 511
 	// Reference: domains/core/admin/eventEditor/src/ui/datetimes/datesList/filterBar/controls/options.ts:11
512
-	__( 'start and end dates', 'event_espresso' ),
512
+	__('start and end dates', 'event_espresso'),
513 513
 
514 514
 	// Reference: domains/core/admin/eventEditor/src/ui/datetimes/datesList/filterBar/controls/options.ts:16
515
-	__( 'dates above 90% capacity', 'event_espresso' ),
515
+	__('dates above 90% capacity', 'event_espresso'),
516 516
 
517 517
 	// Reference: domains/core/admin/eventEditor/src/ui/datetimes/datesList/filterBar/controls/options.ts:17
518
-	__( 'dates above 75% capacity', 'event_espresso' ),
518
+	__('dates above 75% capacity', 'event_espresso'),
519 519
 
520 520
 	// Reference: domains/core/admin/eventEditor/src/ui/datetimes/datesList/filterBar/controls/options.ts:18
521
-	__( 'dates above 50% capacity', 'event_espresso' ),
521
+	__('dates above 50% capacity', 'event_espresso'),
522 522
 
523 523
 	// Reference: domains/core/admin/eventEditor/src/ui/datetimes/datesList/filterBar/controls/options.ts:19
524
-	__( 'dates below 50% capacity', 'event_espresso' ),
524
+	__('dates below 50% capacity', 'event_espresso'),
525 525
 
526 526
 	// Reference: domains/core/admin/eventEditor/src/ui/datetimes/datesList/filterBar/controls/options.ts:23
527
-	__( 'all dates', 'event_espresso' ),
527
+	__('all dates', 'event_espresso'),
528 528
 
529 529
 	// Reference: domains/core/admin/eventEditor/src/ui/datetimes/datesList/filterBar/controls/options.ts:24
530
-	__( 'all active and upcoming', 'event_espresso' ),
530
+	__('all active and upcoming', 'event_espresso'),
531 531
 
532 532
 	// Reference: domains/core/admin/eventEditor/src/ui/datetimes/datesList/filterBar/controls/options.ts:25
533
-	__( 'active dates only', 'event_espresso' ),
533
+	__('active dates only', 'event_espresso'),
534 534
 
535 535
 	// Reference: domains/core/admin/eventEditor/src/ui/datetimes/datesList/filterBar/controls/options.ts:26
536
-	__( 'upcoming dates only', 'event_espresso' ),
536
+	__('upcoming dates only', 'event_espresso'),
537 537
 
538 538
 	// Reference: domains/core/admin/eventEditor/src/ui/datetimes/datesList/filterBar/controls/options.ts:27
539
-	__( 'next active or upcoming only', 'event_espresso' ),
539
+	__('next active or upcoming only', 'event_espresso'),
540 540
 
541 541
 	// Reference: domains/core/admin/eventEditor/src/ui/datetimes/datesList/filterBar/controls/options.ts:28
542
-	__( 'sold out dates only', 'event_espresso' ),
542
+	__('sold out dates only', 'event_espresso'),
543 543
 
544 544
 	// Reference: domains/core/admin/eventEditor/src/ui/datetimes/datesList/filterBar/controls/options.ts:29
545
-	__( 'recently expired dates', 'event_espresso' ),
545
+	__('recently expired dates', 'event_espresso'),
546 546
 
547 547
 	// Reference: domains/core/admin/eventEditor/src/ui/datetimes/datesList/filterBar/controls/options.ts:30
548
-	__( 'all expired dates', 'event_espresso' ),
548
+	__('all expired dates', 'event_espresso'),
549 549
 
550 550
 	// Reference: domains/core/admin/eventEditor/src/ui/datetimes/datesList/filterBar/controls/options.ts:31
551
-	__( 'trashed dates only', 'event_espresso' ),
551
+	__('trashed dates only', 'event_espresso'),
552 552
 
553 553
 	// Reference: domains/core/admin/eventEditor/src/ui/datetimes/datesList/filterBar/controls/options.ts:35
554 554
 	// Reference: packages/dates/src/components/DateRangePicker/DateRangePickerLegend.tsx:9
555 555
 	// Reference: packages/dates/src/components/DateRangePicker/index.tsx:61
556
-	__( 'start date', 'event_espresso' ),
556
+	__('start date', 'event_espresso'),
557 557
 
558 558
 	// Reference: domains/core/admin/eventEditor/src/ui/datetimes/datesList/filterBar/controls/options.ts:36
559
-	__( 'name', 'event_espresso' ),
559
+	__('name', 'event_espresso'),
560 560
 
561 561
 	// Reference: domains/core/admin/eventEditor/src/ui/datetimes/datesList/filterBar/controls/options.ts:37
562 562
 	// Reference: domains/core/admin/eventEditor/src/ui/datetimes/datesList/tableView/useHeaderRowGenerator.tsx:33
@@ -564,176 +564,176 @@  discard block
 block discarded – undo
564 564
 	// Reference: domains/core/admin/eventEditor/src/ui/ticketAssignmentsManager/components/table/HeaderCell.tsx:27
565 565
 	// Reference: domains/core/admin/eventEditor/src/ui/tickets/ticketsList/tableView/useHeaderRowGenerator.tsx:33
566 566
 	// Reference: packages/tpc/src/components/table/useHeaderRowGenerator.ts:23
567
-	__( 'ID', 'event_espresso' ),
567
+	__('ID', 'event_espresso'),
568 568
 
569 569
 	// Reference: domains/core/admin/eventEditor/src/ui/datetimes/datesList/filterBar/controls/options.ts:38
570 570
 	// Reference: domains/core/admin/eventEditor/src/ui/tickets/ticketsList/filterBar/controls/options.ts:47
571
-	__( 'custom order', 'event_espresso' ),
571
+	__('custom order', 'event_espresso'),
572 572
 
573 573
 	// Reference: domains/core/admin/eventEditor/src/ui/datetimes/datesList/filterBar/controls/options.ts:42
574 574
 	// Reference: domains/core/admin/eventEditor/src/ui/tickets/ticketsList/filterBar/controls/options.ts:51
575
-	__( 'display', 'event_espresso' ),
575
+	__('display', 'event_espresso'),
576 576
 
577 577
 	// Reference: domains/core/admin/eventEditor/src/ui/datetimes/datesList/filterBar/controls/options.ts:43
578
-	__( 'recurrence', 'event_espresso' ),
578
+	__('recurrence', 'event_espresso'),
579 579
 
580 580
 	// Reference: domains/core/admin/eventEditor/src/ui/datetimes/datesList/filterBar/controls/options.ts:44
581 581
 	// Reference: domains/core/admin/eventEditor/src/ui/tickets/ticketsList/filterBar/controls/options.ts:53
582
-	__( 'sales', 'event_espresso' ),
582
+	__('sales', 'event_espresso'),
583 583
 
584 584
 	// Reference: domains/core/admin/eventEditor/src/ui/datetimes/datesList/filterBar/controls/options.ts:45
585 585
 	// Reference: domains/core/admin/eventEditor/src/ui/tickets/ticketsList/filterBar/controls/options.ts:55
586
-	__( 'sort by', 'event_espresso' ),
586
+	__('sort by', 'event_espresso'),
587 587
 
588 588
 	// Reference: domains/core/admin/eventEditor/src/ui/datetimes/datesList/filterBar/controls/options.ts:46
589 589
 	// Reference: domains/core/admin/eventEditor/src/ui/tickets/ticketsList/filterBar/controls/options.ts:54
590 590
 	// Reference: packages/ee-components/src/EntityList/EntityListFilterBar.tsx:38
591
-	__( 'search', 'event_espresso' ),
591
+	__('search', 'event_espresso'),
592 592
 
593 593
 	// Reference: domains/core/admin/eventEditor/src/ui/datetimes/datesList/filterBar/controls/options.ts:47
594 594
 	// Reference: domains/core/admin/eventEditor/src/ui/tickets/ticketsList/filterBar/controls/options.ts:56
595
-	__( 'status', 'event_espresso' ),
595
+	__('status', 'event_espresso'),
596 596
 
597 597
 	// Reference: domains/core/admin/eventEditor/src/ui/datetimes/datesList/filterBar/controls/options.ts:9
598
-	__( 'start dates only', 'event_espresso' ),
598
+	__('start dates only', 'event_espresso'),
599 599
 
600 600
 	// Reference: domains/core/admin/eventEditor/src/ui/datetimes/datesList/newDateOptions/AddSingleDate.tsx:26
601 601
 	// Reference: domains/core/admin/eventEditor/src/ui/datetimes/datesList/newDateOptions/NewDateModal.tsx:12
602 602
 	// Reference: domains/core/admin/eventEditor/src/ui/datetimes/datesList/newDateOptions/OptionsModalButton.tsx:18
603
-	__( 'Add New Date', 'event_espresso' ),
603
+	__('Add New Date', 'event_espresso'),
604 604
 
605 605
 	// Reference: domains/core/admin/eventEditor/src/ui/datetimes/datesList/newDateOptions/AddSingleDate.tsx:26
606
-	__( 'Add Single Date', 'event_espresso' ),
606
+	__('Add Single Date', 'event_espresso'),
607 607
 
608 608
 	// Reference: domains/core/admin/eventEditor/src/ui/datetimes/datesList/newDateOptions/AddSingleDate.tsx:44
609
-	__( 'Add a single date that only occurs once', 'event_espresso' ),
609
+	__('Add a single date that only occurs once', 'event_espresso'),
610 610
 
611 611
 	// Reference: domains/core/admin/eventEditor/src/ui/datetimes/datesList/newDateOptions/AddSingleDate.tsx:46
612
-	__( 'Single Date', 'event_espresso' ),
612
+	__('Single Date', 'event_espresso'),
613 613
 
614 614
 	// Reference: domains/core/admin/eventEditor/src/ui/datetimes/datesList/tableView/useHeaderRowGenerator.tsx:108
615
-	__( 'Reg list', 'event_espresso' ),
615
+	__('Reg list', 'event_espresso'),
616 616
 
617 617
 	// Reference: domains/core/admin/eventEditor/src/ui/datetimes/datesList/tableView/useHeaderRowGenerator.tsx:109
618
-	__( 'Regs', 'event_espresso' ),
618
+	__('Regs', 'event_espresso'),
619 619
 
620 620
 	// Reference: domains/core/admin/eventEditor/src/ui/datetimes/datesList/tableView/useHeaderRowGenerator.tsx:124
621 621
 	// Reference: domains/core/admin/eventEditor/src/ui/tickets/ticketsList/tableView/useHeaderRowGenerator.tsx:123
622 622
 	// Reference: packages/tpc/src/components/table/useHeaderRowGenerator.ts:59
623
-	__( 'Actions', 'event_espresso' ),
623
+	__('Actions', 'event_espresso'),
624 624
 
625 625
 	// Reference: domains/core/admin/eventEditor/src/ui/datetimes/datesList/tableView/useHeaderRowGenerator.tsx:54
626
-	__( 'Start', 'event_espresso' ),
626
+	__('Start', 'event_espresso'),
627 627
 
628 628
 	// Reference: domains/core/admin/eventEditor/src/ui/datetimes/datesList/tableView/useHeaderRowGenerator.tsx:68
629
-	__( 'End', 'event_espresso' ),
629
+	__('End', 'event_espresso'),
630 630
 
631 631
 	// Reference: domains/core/admin/eventEditor/src/ui/datetimes/datesList/tableView/useHeaderRowGenerator.tsx:84
632
-	__( 'Cap', 'event_espresso' ),
632
+	__('Cap', 'event_espresso'),
633 633
 
634 634
 	// Reference: domains/core/admin/eventEditor/src/ui/datetimes/datesList/tableView/useHeaderRowGenerator.tsx:96
635 635
 	// Reference: domains/core/admin/eventEditor/src/ui/tickets/ticketsList/tableView/useHeaderRowGenerator.tsx:100
636
-	__( 'Sold', 'event_espresso' ),
636
+	__('Sold', 'event_espresso'),
637 637
 
638 638
 	// Reference: domains/core/admin/eventEditor/src/ui/registrationForm/ErrorMessage.tsx:33
639 639
 	// Reference: packages/form-builder/src/constants.ts:67
640
-	__( 'Text Input', 'event_espresso' ),
640
+	__('Text Input', 'event_espresso'),
641 641
 
642 642
 	// Reference: domains/core/admin/eventEditor/src/ui/registrationForm/ErrorMessage.tsx:34
643 643
 	// Reference: domains/core/admin/eventEditor/src/ui/registrationForm/constants.ts:32
644
-	__( 'Attendee First Name', 'event_espresso' ),
644
+	__('Attendee First Name', 'event_espresso'),
645 645
 
646 646
 	// Reference: domains/core/admin/eventEditor/src/ui/registrationForm/ErrorMessage.tsx:39
647 647
 	/* translators: field name */
648
-	__( 'Registration form must have a field of type "%1$s" which maps to "%2$s"', 'event_espresso' ),
648
+	__('Registration form must have a field of type "%1$s" which maps to "%2$s"', 'event_espresso'),
649 649
 
650 650
 	// Reference: domains/core/admin/eventEditor/src/ui/registrationForm/ErrorMessage.tsx:40
651 651
 	// Reference: packages/form-builder/src/constants.ts:82
652
-	__( 'Email Address', 'event_espresso' ),
652
+	__('Email Address', 'event_espresso'),
653 653
 
654 654
 	// Reference: domains/core/admin/eventEditor/src/ui/registrationForm/ErrorMessage.tsx:41
655 655
 	// Reference: domains/core/admin/eventEditor/src/ui/registrationForm/constants.ts:40
656
-	__( 'Attendee Email Address', 'event_espresso' ),
656
+	__('Attendee Email Address', 'event_espresso'),
657 657
 
658 658
 	// Reference: domains/core/admin/eventEditor/src/ui/registrationForm/ErrorMessage.tsx:49
659
-	__( 'Please add the required fields', 'event_espresso' ),
659
+	__('Please add the required fields', 'event_espresso'),
660 660
 
661 661
 	// Reference: domains/core/admin/eventEditor/src/ui/registrationForm/RegistrationForm.tsx:12
662
-	__( 'Registration Form', 'event_espresso' ),
662
+	__('Registration Form', 'event_espresso'),
663 663
 
664 664
 	// Reference: domains/core/admin/eventEditor/src/ui/registrationForm/constants.ts:13
665
-	__( 'primary registrant', 'event_espresso' ),
665
+	__('primary registrant', 'event_espresso'),
666 666
 
667 667
 	// Reference: domains/core/admin/eventEditor/src/ui/registrationForm/constants.ts:17
668
-	__( 'purchaser', 'event_espresso' ),
668
+	__('purchaser', 'event_espresso'),
669 669
 
670 670
 	// Reference: domains/core/admin/eventEditor/src/ui/registrationForm/constants.ts:21
671
-	__( 'registrants', 'event_espresso' ),
671
+	__('registrants', 'event_espresso'),
672 672
 
673 673
 	// Reference: domains/core/admin/eventEditor/src/ui/registrationForm/constants.ts:36
674
-	__( 'Attendee Last Name', 'event_espresso' ),
674
+	__('Attendee Last Name', 'event_espresso'),
675 675
 
676 676
 	// Reference: domains/core/admin/eventEditor/src/ui/registrationForm/constants.ts:44
677
-	__( 'Attendee Address', 'event_espresso' ),
677
+	__('Attendee Address', 'event_espresso'),
678 678
 
679 679
 	// Reference: domains/core/admin/eventEditor/src/ui/registrationForm/constants.ts:9
680
-	__( 'all', 'event_espresso' ),
680
+	__('all', 'event_espresso'),
681 681
 
682 682
 	// Reference: domains/core/admin/eventEditor/src/ui/ticketAssignmentsManager/components/ErrorMessage.tsx:18
683
-	__( 'Tickets must always have at least one date assigned to them but one or more of the tickets below does not have any. 
684
-Please correct the assignments for the highlighted cells.', 'event_espresso' ),
683
+	__('Tickets must always have at least one date assigned to them but one or more of the tickets below does not have any. 
684
+Please correct the assignments for the highlighted cells.', 'event_espresso'),
685 685
 
686 686
 	// Reference: domains/core/admin/eventEditor/src/ui/ticketAssignmentsManager/components/ErrorMessage.tsx:22
687
-	__( 'Event Dates must always have at least one Ticket assigned to them but one or more of the Event Dates below does not have any. 
688
-Please correct the assignments for the highlighted cells.', 'event_espresso' ),
687
+	__('Event Dates must always have at least one Ticket assigned to them but one or more of the Event Dates below does not have any. 
688
+Please correct the assignments for the highlighted cells.', 'event_espresso'),
689 689
 
690 690
 	// Reference: domains/core/admin/eventEditor/src/ui/ticketAssignmentsManager/components/ErrorMessage.tsx:32
691
-	__( 'Please Update Assignments', 'event_espresso' ),
691
+	__('Please Update Assignments', 'event_espresso'),
692 692
 
693 693
 	// Reference: domains/core/admin/eventEditor/src/ui/ticketAssignmentsManager/components/ModalContainer.tsx:26
694
-	__( 'There seem to be some dates/tickets which have no tickets/dates assigned. Do you want to fix them now?', 'event_espresso' ),
694
+	__('There seem to be some dates/tickets which have no tickets/dates assigned. Do you want to fix them now?', 'event_espresso'),
695 695
 
696 696
 	// Reference: domains/core/admin/eventEditor/src/ui/ticketAssignmentsManager/components/ModalContainer.tsx:29
697
-	__( 'Alert!', 'event_espresso' ),
697
+	__('Alert!', 'event_espresso'),
698 698
 
699 699
 	// Reference: domains/core/admin/eventEditor/src/ui/ticketAssignmentsManager/components/ModalContainer.tsx:42
700 700
 	/* translators: 1 entity id, 2 entity name */
701
-	__( 'Ticket Assignment Manager for Datetime: %1$s - %2$s', 'event_espresso' ),
701
+	__('Ticket Assignment Manager for Datetime: %1$s - %2$s', 'event_espresso'),
702 702
 
703 703
 	// Reference: domains/core/admin/eventEditor/src/ui/ticketAssignmentsManager/components/ModalContainer.tsx:49
704 704
 	/* translators: 1 entity id, 2 entity name */
705
-	__( 'Ticket Assignment Manager for Ticket: %1$s - %2$s', 'event_espresso' ),
705
+	__('Ticket Assignment Manager for Ticket: %1$s - %2$s', 'event_espresso'),
706 706
 
707 707
 	// Reference: domains/core/admin/eventEditor/src/ui/ticketAssignmentsManager/components/TicketAssignmentsManagerModal.tsx:45
708 708
 	// Reference: domains/core/admin/eventEditor/src/ui/ticketAssignmentsManager/components/table/Table.tsx:13
709
-	__( 'Ticket Assignment Manager', 'event_espresso' ),
709
+	__('Ticket Assignment Manager', 'event_espresso'),
710 710
 
711 711
 	// Reference: domains/core/admin/eventEditor/src/ui/ticketAssignmentsManager/components/config.ts:10
712
-	__( 'existing relation', 'event_espresso' ),
712
+	__('existing relation', 'event_espresso'),
713 713
 
714 714
 	// Reference: domains/core/admin/eventEditor/src/ui/ticketAssignmentsManager/components/config.ts:15
715
-	__( 'remove existing relation', 'event_espresso' ),
715
+	__('remove existing relation', 'event_espresso'),
716 716
 
717 717
 	// Reference: domains/core/admin/eventEditor/src/ui/ticketAssignmentsManager/components/config.ts:20
718
-	__( 'add new relation', 'event_espresso' ),
718
+	__('add new relation', 'event_espresso'),
719 719
 
720 720
 	// Reference: domains/core/admin/eventEditor/src/ui/ticketAssignmentsManager/components/config.ts:25
721
-	__( 'invalid relation', 'event_espresso' ),
721
+	__('invalid relation', 'event_espresso'),
722 722
 
723 723
 	// Reference: domains/core/admin/eventEditor/src/ui/ticketAssignmentsManager/components/config.ts:29
724
-	__( 'no relation', 'event_espresso' ),
724
+	__('no relation', 'event_espresso'),
725 725
 
726 726
 	// Reference: domains/core/admin/eventEditor/src/ui/ticketAssignmentsManager/components/table/useGetHeaderRows.tsx:15
727
-	__( 'Assignments', 'event_espresso' ),
727
+	__('Assignments', 'event_espresso'),
728 728
 
729 729
 	// Reference: domains/core/admin/eventEditor/src/ui/ticketAssignmentsManager/components/table/useGetHeaderRows.tsx:16
730
-	__( 'Event Dates are listed below', 'event_espresso' ),
730
+	__('Event Dates are listed below', 'event_espresso'),
731 731
 
732 732
 	// Reference: domains/core/admin/eventEditor/src/ui/ticketAssignmentsManager/components/table/useGetHeaderRows.tsx:17
733
-	__( 'Tickets are listed along the top', 'event_espresso' ),
733
+	__('Tickets are listed along the top', 'event_espresso'),
734 734
 
735 735
 	// Reference: domains/core/admin/eventEditor/src/ui/ticketAssignmentsManager/components/table/useGetHeaderRows.tsx:18
736
-	__( 'Click the cell buttons to toggle assigments', 'event_espresso' ),
736
+	__('Click the cell buttons to toggle assigments', 'event_espresso'),
737 737
 
738 738
 	// Reference: domains/core/admin/eventEditor/src/ui/ticketAssignmentsManager/components/useSubmitButtonProps.ts:29
739 739
 	// Reference: domains/core/admin/eventEditor/src/ui/tickets/ticketsList/bulkEdit/prices/buttons/FooterButtons.tsx:16
@@ -742,1570 +742,1570 @@  discard block
 block discarded – undo
742 742
 	// Reference: packages/tpc/src/buttons/useSubmitButtonProps.tsx:29
743 743
 	// Reference: packages/ui-components/src/Modal/useSubmitButtonProps.tsx:13
744 744
 	// Reference: packages/ui-components/src/Stepper/buttons/Submit.tsx:7
745
-	__( 'Submit', 'event_espresso' ),
745
+	__('Submit', 'event_espresso'),
746 746
 
747 747
 	// Reference: domains/core/admin/eventEditor/src/ui/ticketAssignmentsManager/filters/controls/DatesByMonthControl.tsx:20
748
-	__( 'All Dates', 'event_espresso' ),
748
+	__('All Dates', 'event_espresso'),
749 749
 
750 750
 	// Reference: domains/core/admin/eventEditor/src/ui/ticketAssignmentsManager/filters/controls/DatesByMonthControl.tsx:27
751
-	__( 'dates by month', 'event_espresso' ),
751
+	__('dates by month', 'event_espresso'),
752 752
 
753 753
 	// Reference: domains/core/admin/eventEditor/src/ui/ticketAssignmentsManager/filters/controls/ShowExpiredTicketsControl.tsx:16
754
-	__( 'show expired tickets', 'event_espresso' ),
754
+	__('show expired tickets', 'event_espresso'),
755 755
 
756 756
 	// Reference: domains/core/admin/eventEditor/src/ui/ticketAssignmentsManager/filters/controls/ShowTrashedDatesControl.tsx:13
757
-	__( 'show trashed dates', 'event_espresso' ),
757
+	__('show trashed dates', 'event_espresso'),
758 758
 
759 759
 	// Reference: domains/core/admin/eventEditor/src/ui/ticketAssignmentsManager/filters/controls/ShowTrashedTicketsControl.tsx:16
760
-	__( 'show trashed tickets', 'event_espresso' ),
760
+	__('show trashed tickets', 'event_espresso'),
761 761
 
762 762
 	// Reference: domains/core/admin/eventEditor/src/ui/tickets/defaultTickets/Container.tsx:38
763 763
 	// Reference: domains/core/admin/eventEditor/src/ui/tickets/ticketsList/actions/Actions.tsx:25
764
-	__( 'Default tickets', 'event_espresso' ),
764
+	__('Default tickets', 'event_espresso'),
765 765
 
766 766
 	// Reference: domains/core/admin/eventEditor/src/ui/tickets/defaultTickets/ModalBody.tsx:63
767 767
 	// Reference: packages/edtr-services/src/constants.ts:26
768
-	__( 'ticket', 'event_espresso' ),
768
+	__('ticket', 'event_espresso'),
769 769
 
770 770
 	// Reference: domains/core/admin/eventEditor/src/ui/tickets/defaultTickets/multiStep/FooterButtons.tsx:26
771 771
 	// Reference: domains/core/admin/eventEditor/src/ui/tickets/ticketForm/multiStep/FooterButtons.tsx:33
772
-	__( 'Set ticket prices', 'event_espresso' ),
772
+	__('Set ticket prices', 'event_espresso'),
773 773
 
774 774
 	// Reference: domains/core/admin/eventEditor/src/ui/tickets/defaultTickets/multiStep/FooterButtons.tsx:31
775
-	__( 'Skip prices - Save', 'event_espresso' ),
775
+	__('Skip prices - Save', 'event_espresso'),
776 776
 
777 777
 	// Reference: domains/core/admin/eventEditor/src/ui/tickets/defaultTickets/multiStep/FooterButtons.tsx:37
778 778
 	// Reference: domains/core/admin/eventEditor/src/ui/tickets/ticketForm/multiStep/FooterButtons.tsx:57
779
-	__( 'Ticket details', 'event_espresso' ),
779
+	__('Ticket details', 'event_espresso'),
780 780
 
781 781
 	// Reference: domains/core/admin/eventEditor/src/ui/tickets/defaultTickets/multiStep/FooterButtons.tsx:38
782
-	__( 'Save', 'event_espresso' ),
782
+	__('Save', 'event_espresso'),
783 783
 
784 784
 	// Reference: domains/core/admin/eventEditor/src/ui/tickets/defaultTickets/multiStep/Modal.tsx:22
785 785
 	/* translators: %s ticket id */
786
-	__( 'Edit ticket %s', 'event_espresso' ),
786
+	__('Edit ticket %s', 'event_espresso'),
787 787
 
788 788
 	// Reference: domains/core/admin/eventEditor/src/ui/tickets/defaultTickets/multiStep/Modal.tsx:25
789 789
 	// Reference: domains/core/admin/eventEditor/src/ui/tickets/ticketForm/multiStep/Modal.tsx:33
790
-	__( 'New Ticket Details', 'event_espresso' ),
790
+	__('New Ticket Details', 'event_espresso'),
791 791
 
792 792
 	// Reference: domains/core/admin/eventEditor/src/ui/tickets/defaultTickets/multiStep/TicketFormSteps.tsx:10
793 793
 	// Reference: domains/core/admin/eventEditor/src/ui/tickets/ticketForm/multiStep/TicketFormSteps.tsx:10
794
-	__( 'primary information about the ticket', 'event_espresso' ),
794
+	__('primary information about the ticket', 'event_espresso'),
795 795
 
796 796
 	// Reference: domains/core/admin/eventEditor/src/ui/tickets/defaultTickets/multiStep/TicketFormSteps.tsx:10
797 797
 	// Reference: domains/core/admin/eventEditor/src/ui/tickets/ticketForm/multiStep/TicketFormSteps.tsx:10
798
-	__( 'Ticket Details', 'event_espresso' ),
798
+	__('Ticket Details', 'event_espresso'),
799 799
 
800 800
 	// Reference: domains/core/admin/eventEditor/src/ui/tickets/defaultTickets/multiStep/TicketFormSteps.tsx:12
801 801
 	// Reference: domains/core/admin/eventEditor/src/ui/tickets/ticketForm/multiStep/TicketFormSteps.tsx:12
802
-	__( 'apply ticket price modifiers and taxes', 'event_espresso' ),
802
+	__('apply ticket price modifiers and taxes', 'event_espresso'),
803 803
 
804 804
 	// Reference: domains/core/admin/eventEditor/src/ui/tickets/defaultTickets/multiStep/TicketFormSteps.tsx:14
805 805
 	// Reference: domains/core/admin/eventEditor/src/ui/tickets/ticketForm/multiStep/TicketFormSteps.tsx:14
806
-	__( 'Price Calculator', 'event_espresso' ),
806
+	__('Price Calculator', 'event_espresso'),
807 807
 
808 808
 	// Reference: domains/core/admin/eventEditor/src/ui/tickets/defaultTickets/multiStep/TicketFormSteps.tsx:16
809 809
 	// Reference: domains/core/admin/eventEditor/src/ui/tickets/ticketForm/multiStep/TicketFormSteps.tsx:16
810
-	__( 'Assign Dates', 'event_espresso' ),
810
+	__('Assign Dates', 'event_espresso'),
811 811
 
812 812
 	// Reference: domains/core/admin/eventEditor/src/ui/tickets/ticketForm/multiStep/FooterButtons.tsx:39
813
-	__( 'Skip prices - assign dates', 'event_espresso' ),
813
+	__('Skip prices - assign dates', 'event_espresso'),
814 814
 
815 815
 	// Reference: domains/core/admin/eventEditor/src/ui/tickets/ticketForm/multiStep/FooterButtons.tsx:50
816
-	__( 'Save and assign dates', 'event_espresso' ),
816
+	__('Save and assign dates', 'event_espresso'),
817 817
 
818 818
 	// Reference: domains/core/admin/eventEditor/src/ui/tickets/ticketForm/multiStep/Modal.tsx:29
819 819
 	/* translators: %1$s ticket name, %2$s ticket id */
820
-	__( 'Edit ticket "%1$s" - %2$s', 'event_espresso' ),
820
+	__('Edit ticket "%1$s" - %2$s', 'event_espresso'),
821 821
 
822 822
 	// Reference: domains/core/admin/eventEditor/src/ui/tickets/ticketForm/multiStep/Modal.tsx:43
823
-	__( 'modal for ticket', 'event_espresso' ),
823
+	__('modal for ticket', 'event_espresso'),
824 824
 
825 825
 	// Reference: domains/core/admin/eventEditor/src/ui/tickets/ticketForm/useTicketFormConfig.ts:101
826
-	__( 'The maximum number of this ticket available for sale.', 'event_espresso' ),
826
+	__('The maximum number of this ticket available for sale.', 'event_espresso'),
827 827
 
828 828
 	// Reference: domains/core/admin/eventEditor/src/ui/tickets/ticketForm/useTicketFormConfig.ts:103
829
-	__( 'Set to 0 to stop sales, or leave blank for no limit.', 'event_espresso' ),
829
+	__('Set to 0 to stop sales, or leave blank for no limit.', 'event_espresso'),
830 830
 
831 831
 	// Reference: domains/core/admin/eventEditor/src/ui/tickets/ticketForm/useTicketFormConfig.ts:114
832 832
 	// Reference: domains/core/admin/eventEditor/src/ui/tickets/ticketsList/bulkEdit/details/useBulkEditFormConfig.ts:119
833
-	__( 'Number of Uses', 'event_espresso' ),
833
+	__('Number of Uses', 'event_espresso'),
834 834
 
835 835
 	// Reference: domains/core/admin/eventEditor/src/ui/tickets/ticketForm/useTicketFormConfig.ts:120
836
-	__( 'Controls the total number of times this ticket can be used, regardless of the number of dates it is assigned to.', 'event_espresso' ),
836
+	__('Controls the total number of times this ticket can be used, regardless of the number of dates it is assigned to.', 'event_espresso'),
837 837
 
838 838
 	// Reference: domains/core/admin/eventEditor/src/ui/tickets/ticketForm/useTicketFormConfig.ts:124
839
-	__( 'Example: A ticket might have access to 4 different dates, but setting this field to 2 would mean that the ticket could only be used twice. Leave blank for no limit.', 'event_espresso' ),
839
+	__('Example: A ticket might have access to 4 different dates, but setting this field to 2 would mean that the ticket could only be used twice. Leave blank for no limit.', 'event_espresso'),
840 840
 
841 841
 	// Reference: domains/core/admin/eventEditor/src/ui/tickets/ticketForm/useTicketFormConfig.ts:132
842 842
 	// Reference: domains/core/admin/eventEditor/src/ui/tickets/ticketsList/bulkEdit/details/useBulkEditFormConfig.ts:127
843
-	__( 'Minimum Quantity', 'event_espresso' ),
843
+	__('Minimum Quantity', 'event_espresso'),
844 844
 
845 845
 	// Reference: domains/core/admin/eventEditor/src/ui/tickets/ticketForm/useTicketFormConfig.ts:137
846
-	__( 'The minimum quantity that can be selected for this ticket. Use this to create ticket bundles or graduated pricing.', 'event_espresso' ),
846
+	__('The minimum quantity that can be selected for this ticket. Use this to create ticket bundles or graduated pricing.', 'event_espresso'),
847 847
 
848 848
 	// Reference: domains/core/admin/eventEditor/src/ui/tickets/ticketForm/useTicketFormConfig.ts:141
849
-	__( 'Leave blank for no minimum.', 'event_espresso' ),
849
+	__('Leave blank for no minimum.', 'event_espresso'),
850 850
 
851 851
 	// Reference: domains/core/admin/eventEditor/src/ui/tickets/ticketForm/useTicketFormConfig.ts:147
852 852
 	// Reference: domains/core/admin/eventEditor/src/ui/tickets/ticketsList/bulkEdit/details/useBulkEditFormConfig.ts:135
853
-	__( 'Maximum Quantity', 'event_espresso' ),
853
+	__('Maximum Quantity', 'event_espresso'),
854 854
 
855 855
 	// Reference: domains/core/admin/eventEditor/src/ui/tickets/ticketForm/useTicketFormConfig.ts:153
856
-	__( 'The maximum quantity that can be selected for this ticket. Use this to create ticket bundles or graduated pricing.', 'event_espresso' ),
856
+	__('The maximum quantity that can be selected for this ticket. Use this to create ticket bundles or graduated pricing.', 'event_espresso'),
857 857
 
858 858
 	// Reference: domains/core/admin/eventEditor/src/ui/tickets/ticketForm/useTicketFormConfig.ts:157
859
-	__( 'Leave blank for no maximum.', 'event_espresso' ),
859
+	__('Leave blank for no maximum.', 'event_espresso'),
860 860
 
861 861
 	// Reference: domains/core/admin/eventEditor/src/ui/tickets/ticketForm/useTicketFormConfig.ts:163
862 862
 	// Reference: domains/core/admin/eventEditor/src/ui/tickets/ticketsList/bulkEdit/details/useBulkEditFormConfig.ts:144
863
-	__( 'Required Ticket', 'event_espresso' ),
863
+	__('Required Ticket', 'event_espresso'),
864 864
 
865 865
 	// Reference: domains/core/admin/eventEditor/src/ui/tickets/ticketForm/useTicketFormConfig.ts:165
866
-	__( 'If enabled, the ticket must be selected and will appear first in ticket lists.', 'event_espresso' ),
866
+	__('If enabled, the ticket must be selected and will appear first in ticket lists.', 'event_espresso'),
867 867
 
868 868
 	// Reference: domains/core/admin/eventEditor/src/ui/tickets/ticketForm/useTicketFormConfig.ts:177
869
-	__( 'Visibility', 'event_espresso' ),
869
+	__('Visibility', 'event_espresso'),
870 870
 
871 871
 	// Reference: domains/core/admin/eventEditor/src/ui/tickets/ticketForm/useTicketFormConfig.ts:211
872
-	__( 'Ticket Sales', 'event_espresso' ),
872
+	__('Ticket Sales', 'event_espresso'),
873 873
 
874 874
 	// Reference: domains/core/admin/eventEditor/src/ui/tickets/ticketForm/useTicketFormConfig.ts:95
875 875
 	// Reference: domains/core/admin/eventEditor/src/ui/tickets/ticketsList/bulkEdit/details/useBulkEditFormConfig.ts:110
876
-	__( 'Quantity For Sale', 'event_espresso' ),
876
+	__('Quantity For Sale', 'event_espresso'),
877 877
 
878 878
 	// Reference: domains/core/admin/eventEditor/src/ui/tickets/ticketsList/TicketRegistrationsLink.tsx:14
879
-	__( 'view ALL registrations for this ticket.', 'event_espresso' ),
879
+	__('view ALL registrations for this ticket.', 'event_espresso'),
880 880
 
881 881
 	// Reference: domains/core/admin/eventEditor/src/ui/tickets/ticketsList/TicketSoldLink.tsx:13
882
-	__( 'view approved registrations for this ticket.', 'event_espresso' ),
882
+	__('view approved registrations for this ticket.', 'event_espresso'),
883 883
 
884 884
 	// Reference: domains/core/admin/eventEditor/src/ui/tickets/ticketsList/TicketsList.tsx:36
885
-	__( 'Available Tickets', 'event_espresso' ),
885
+	__('Available Tickets', 'event_espresso'),
886 886
 
887 887
 	// Reference: domains/core/admin/eventEditor/src/ui/tickets/ticketsList/TicketsList.tsx:39
888
-	__( 'loading tickets…', 'event_espresso' ),
888
+	__('loading tickets…', 'event_espresso'),
889 889
 
890 890
 	// Reference: domains/core/admin/eventEditor/src/ui/tickets/ticketsList/actionsMenu/AssignDatesButton.tsx:26
891
-	__( 'Number of related dates', 'event_espresso' ),
891
+	__('Number of related dates', 'event_espresso'),
892 892
 
893 893
 	// Reference: domains/core/admin/eventEditor/src/ui/tickets/ticketsList/actionsMenu/AssignDatesButton.tsx:27
894
-	__( 'There are no event dates assigned to this ticket. Please click the calendar icon to update the assignments.', 'event_espresso' ),
894
+	__('There are no event dates assigned to this ticket. Please click the calendar icon to update the assignments.', 'event_espresso'),
895 895
 
896 896
 	// Reference: domains/core/admin/eventEditor/src/ui/tickets/ticketsList/actionsMenu/AssignDatesButton.tsx:37
897
-	__( 'assign dates', 'event_espresso' ),
897
+	__('assign dates', 'event_espresso'),
898 898
 
899 899
 	// Reference: domains/core/admin/eventEditor/src/ui/tickets/ticketsList/actionsMenu/dropdown/DeleteTicket.tsx:19
900
-	__( 'Permanently Delete Ticket?', 'event_espresso' ),
900
+	__('Permanently Delete Ticket?', 'event_espresso'),
901 901
 
902 902
 	// Reference: domains/core/admin/eventEditor/src/ui/tickets/ticketsList/actionsMenu/dropdown/DeleteTicket.tsx:19
903
-	__( 'Move Ticket to Trash?', 'event_espresso' ),
903
+	__('Move Ticket to Trash?', 'event_espresso'),
904 904
 
905 905
 	// Reference: domains/core/admin/eventEditor/src/ui/tickets/ticketsList/actionsMenu/dropdown/DeleteTicket.tsx:22
906
-	__( 'Are you sure you want to permanently delete this ticket? This action is permanent and can not be undone.', 'event_espresso' ),
906
+	__('Are you sure you want to permanently delete this ticket? This action is permanent and can not be undone.', 'event_espresso'),
907 907
 
908 908
 	// Reference: domains/core/admin/eventEditor/src/ui/tickets/ticketsList/actionsMenu/dropdown/DeleteTicket.tsx:48
909 909
 	// Reference: packages/ee-components/src/SimpleTicketCard/actions/Trash.tsx:6
910
-	__( 'trash ticket', 'event_espresso' ),
910
+	__('trash ticket', 'event_espresso'),
911 911
 
912 912
 	// Reference: domains/core/admin/eventEditor/src/ui/tickets/ticketsList/actionsMenu/dropdown/TicketMainMenu.tsx:25
913
-	__( 'ticket main menu', 'event_espresso' ),
913
+	__('ticket main menu', 'event_espresso'),
914 914
 
915 915
 	// Reference: domains/core/admin/eventEditor/src/ui/tickets/ticketsList/actionsMenu/dropdown/TicketMainMenu.tsx:38
916 916
 	// Reference: packages/ee-components/src/SimpleTicketCard/actions/Edit.tsx:15
917
-	__( 'edit ticket', 'event_espresso' ),
917
+	__('edit ticket', 'event_espresso'),
918 918
 
919 919
 	// Reference: domains/core/admin/eventEditor/src/ui/tickets/ticketsList/actionsMenu/dropdown/TicketMainMenu.tsx:39
920
-	__( 'copy ticket', 'event_espresso' ),
920
+	__('copy ticket', 'event_espresso'),
921 921
 
922 922
 	// Reference: domains/core/admin/eventEditor/src/ui/tickets/ticketsList/bulkEdit/actions/Actions.tsx:46
923
-	__( 'edit ticket details', 'event_espresso' ),
923
+	__('edit ticket details', 'event_espresso'),
924 924
 
925 925
 	// Reference: domains/core/admin/eventEditor/src/ui/tickets/ticketsList/bulkEdit/actions/Actions.tsx:50
926
-	__( 'delete tickets', 'event_espresso' ),
926
+	__('delete tickets', 'event_espresso'),
927 927
 
928 928
 	// Reference: domains/core/admin/eventEditor/src/ui/tickets/ticketsList/bulkEdit/actions/Actions.tsx:50
929
-	__( 'trash tickets', 'event_espresso' ),
929
+	__('trash tickets', 'event_espresso'),
930 930
 
931 931
 	// Reference: domains/core/admin/eventEditor/src/ui/tickets/ticketsList/bulkEdit/actions/Actions.tsx:54
932
-	__( 'edit ticket prices', 'event_espresso' ),
932
+	__('edit ticket prices', 'event_espresso'),
933 933
 
934 934
 	// Reference: domains/core/admin/eventEditor/src/ui/tickets/ticketsList/bulkEdit/delete/Delete.tsx:14
935
-	__( 'Are you sure you want to permanently delete these tickets? This action can NOT be undone!', 'event_espresso' ),
935
+	__('Are you sure you want to permanently delete these tickets? This action can NOT be undone!', 'event_espresso'),
936 936
 
937 937
 	// Reference: domains/core/admin/eventEditor/src/ui/tickets/ticketsList/bulkEdit/delete/Delete.tsx:15
938
-	__( 'Are you sure you want to trash these tickets?', 'event_espresso' ),
938
+	__('Are you sure you want to trash these tickets?', 'event_espresso'),
939 939
 
940 940
 	// Reference: domains/core/admin/eventEditor/src/ui/tickets/ticketsList/bulkEdit/delete/Delete.tsx:16
941
-	__( 'Delete tickets permanently', 'event_espresso' ),
941
+	__('Delete tickets permanently', 'event_espresso'),
942 942
 
943 943
 	// Reference: domains/core/admin/eventEditor/src/ui/tickets/ticketsList/bulkEdit/delete/Delete.tsx:16
944
-	__( 'Trash tickets', 'event_espresso' ),
944
+	__('Trash tickets', 'event_espresso'),
945 945
 
946 946
 	// Reference: domains/core/admin/eventEditor/src/ui/tickets/ticketsList/bulkEdit/details/EditDetails.tsx:21
947
-	__( 'Bulk edit ticket details', 'event_espresso' ),
947
+	__('Bulk edit ticket details', 'event_espresso'),
948 948
 
949 949
 	// Reference: domains/core/admin/eventEditor/src/ui/tickets/ticketsList/bulkEdit/details/EditDetails.tsx:22
950
-	__( 'any changes will be applied to ALL of the selected tickets.', 'event_espresso' ),
950
+	__('any changes will be applied to ALL of the selected tickets.', 'event_espresso'),
951 951
 
952 952
 	// Reference: domains/core/admin/eventEditor/src/ui/tickets/ticketsList/bulkEdit/prices/EditPrices.tsx:19
953
-	__( 'Bulk edit ticket prices', 'event_espresso' ),
953
+	__('Bulk edit ticket prices', 'event_espresso'),
954 954
 
955 955
 	// Reference: domains/core/admin/eventEditor/src/ui/tickets/ticketsList/bulkEdit/prices/buttons/EditModeButtons.tsx:20
956
-	__( 'Edit all prices together', 'event_espresso' ),
956
+	__('Edit all prices together', 'event_espresso'),
957 957
 
958 958
 	// Reference: domains/core/admin/eventEditor/src/ui/tickets/ticketsList/bulkEdit/prices/buttons/EditModeButtons.tsx:21
959
-	__( 'Edit all the selected ticket prices dynamically', 'event_espresso' ),
959
+	__('Edit all the selected ticket prices dynamically', 'event_espresso'),
960 960
 
961 961
 	// Reference: domains/core/admin/eventEditor/src/ui/tickets/ticketsList/bulkEdit/prices/buttons/EditModeButtons.tsx:25
962
-	__( 'Edit prices individually', 'event_espresso' ),
962
+	__('Edit prices individually', 'event_espresso'),
963 963
 
964 964
 	// Reference: domains/core/admin/eventEditor/src/ui/tickets/ticketsList/bulkEdit/prices/buttons/EditModeButtons.tsx:26
965
-	__( 'Edit prices for each ticket individually', 'event_espresso' ),
965
+	__('Edit prices for each ticket individually', 'event_espresso'),
966 966
 
967 967
 	// Reference: domains/core/admin/eventEditor/src/ui/tickets/ticketsList/bulkEdit/prices/buttons/FooterButtons.tsx:14
968 968
 	// Reference: packages/ee-components/src/bulkEdit/details/Submit.tsx:34
969 969
 	// Reference: packages/form/src/ResetButton.tsx:18
970 970
 	// Reference: packages/tpc/src/buttons/useResetButtonProps.tsx:12
971
-	__( 'Reset', 'event_espresso' ),
971
+	__('Reset', 'event_espresso'),
972 972
 
973 973
 	// Reference: domains/core/admin/eventEditor/src/ui/tickets/ticketsList/bulkEdit/prices/buttons/FooterButtons.tsx:15
974 974
 	// Reference: packages/tpc/src/hooks/useLockedTicketAction.ts:76
975 975
 	// Reference: packages/ui-components/src/Modal/useCancelButtonProps.tsx:10
976
-	__( 'Cancel', 'event_espresso' ),
976
+	__('Cancel', 'event_espresso'),
977 977
 
978 978
 	// Reference: domains/core/admin/eventEditor/src/ui/tickets/ticketsList/bulkEdit/prices/editSeparately/TPCInstance.tsx:26
979 979
 	/* translators: %s ticket name */
980
-	__( 'Edit prices for Ticket: %s', 'event_espresso' ),
980
+	__('Edit prices for Ticket: %s', 'event_espresso'),
981 981
 
982 982
 	// Reference: domains/core/admin/eventEditor/src/ui/tickets/ticketsList/cardView/TicketCardSidebar.tsx:30
983
-	__( 'sales start', 'event_espresso' ),
983
+	__('sales start', 'event_espresso'),
984 984
 
985 985
 	// Reference: domains/core/admin/eventEditor/src/ui/tickets/ticketsList/cardView/TicketCardSidebar.tsx:33
986
-	__( 'sales began', 'event_espresso' ),
986
+	__('sales began', 'event_espresso'),
987 987
 
988 988
 	// Reference: domains/core/admin/eventEditor/src/ui/tickets/ticketsList/cardView/TicketCardSidebar.tsx:35
989
-	__( 'sales ended', 'event_espresso' ),
989
+	__('sales ended', 'event_espresso'),
990 990
 
991 991
 	// Reference: domains/core/admin/eventEditor/src/ui/tickets/ticketsList/cardView/TicketCardSidebar.tsx:36
992
-	__( 'sales end', 'event_espresso' ),
992
+	__('sales end', 'event_espresso'),
993 993
 
994 994
 	// Reference: domains/core/admin/eventEditor/src/ui/tickets/ticketsList/cardView/TicketCardSidebar.tsx:50
995
-	__( 'Edit Ticket Sale Dates', 'event_espresso' ),
995
+	__('Edit Ticket Sale Dates', 'event_espresso'),
996 996
 
997 997
 	// Reference: domains/core/admin/eventEditor/src/ui/tickets/ticketsList/cardView/TicketCardSidebar.tsx:54
998
-	__( 'edit ticket sales start and end dates', 'event_espresso' ),
998
+	__('edit ticket sales start and end dates', 'event_espresso'),
999 999
 
1000 1000
 	// Reference: domains/core/admin/eventEditor/src/ui/tickets/ticketsList/cardView/TicketDetailsPanel.tsx:21
1001
-	__( 'quantity', 'event_espresso' ),
1001
+	__('quantity', 'event_espresso'),
1002 1002
 
1003 1003
 	// Reference: domains/core/admin/eventEditor/src/ui/tickets/ticketsList/cardView/TicketQuantity.tsx:28
1004 1004
 	// Reference: packages/edtr-services/src/apollo/mutations/tickets/useUpdateTicketQtyByCapacity.ts:78
1005
-	__( 'Ticket quantity has been adjusted because it cannot be more than the related event date capacity.', 'event_espresso' ),
1005
+	__('Ticket quantity has been adjusted because it cannot be more than the related event date capacity.', 'event_espresso'),
1006 1006
 
1007 1007
 	// Reference: domains/core/admin/eventEditor/src/ui/tickets/ticketsList/cardView/TicketQuantity.tsx:51
1008
-	__( 'edit quantity of tickets available…', 'event_espresso' ),
1008
+	__('edit quantity of tickets available…', 'event_espresso'),
1009 1009
 
1010 1010
 	// Reference: domains/core/admin/eventEditor/src/ui/tickets/ticketsList/config.ts:10
1011
-	__( 'Move Ticket to Trash', 'event_espresso' ),
1011
+	__('Move Ticket to Trash', 'event_espresso'),
1012 1012
 
1013 1013
 	// Reference: domains/core/admin/eventEditor/src/ui/tickets/ticketsList/config.ts:15
1014 1014
 	// Reference: domains/core/admin/eventEditor/src/ui/tickets/ticketsList/tableView/useHeaderRowGenerator.tsx:54
1015
-	__( 'On Sale', 'event_espresso' ),
1015
+	__('On Sale', 'event_espresso'),
1016 1016
 
1017 1017
 	// Reference: domains/core/admin/eventEditor/src/ui/tickets/ticketsList/config.ts:17
1018
-	__( 'Pending', 'event_espresso' ),
1018
+	__('Pending', 'event_espresso'),
1019 1019
 
1020 1020
 	// Reference: domains/core/admin/eventEditor/src/ui/tickets/ticketsList/config.ts:7
1021
-	__( 'Edit Ticket Details', 'event_espresso' ),
1021
+	__('Edit Ticket Details', 'event_espresso'),
1022 1022
 
1023 1023
 	// Reference: domains/core/admin/eventEditor/src/ui/tickets/ticketsList/config.ts:8
1024
-	__( 'Manage Date Assignments', 'event_espresso' ),
1024
+	__('Manage Date Assignments', 'event_espresso'),
1025 1025
 
1026 1026
 	// Reference: domains/core/admin/eventEditor/src/ui/tickets/ticketsList/config.ts:9
1027 1027
 	// Reference: packages/tpc/src/components/table/Table.tsx:43
1028
-	__( 'Ticket Price Calculator', 'event_espresso' ),
1028
+	__('Ticket Price Calculator', 'event_espresso'),
1029 1029
 
1030 1030
 	// Reference: domains/core/admin/eventEditor/src/ui/tickets/ticketsList/editable/EditablePrice.tsx:39
1031
-	__( 'edit ticket total…', 'event_espresso' ),
1031
+	__('edit ticket total…', 'event_espresso'),
1032 1032
 
1033 1033
 	// Reference: domains/core/admin/eventEditor/src/ui/tickets/ticketsList/editable/EditablePrice.tsx:53
1034
-	__( 'set price…', 'event_espresso' ),
1034
+	__('set price…', 'event_espresso'),
1035 1035
 
1036 1036
 	// Reference: domains/core/admin/eventEditor/src/ui/tickets/ticketsList/filterBar/controls/IsChainedButton.tsx:23
1037
-	__( 'tickets list is linked to dates list and is showing tickets for above dates only', 'event_espresso' ),
1037
+	__('tickets list is linked to dates list and is showing tickets for above dates only', 'event_espresso'),
1038 1038
 
1039 1039
 	// Reference: domains/core/admin/eventEditor/src/ui/tickets/ticketsList/filterBar/controls/IsChainedButton.tsx:24
1040
-	__( 'tickets list is unlinked and is showing tickets for all event dates', 'event_espresso' ),
1040
+	__('tickets list is unlinked and is showing tickets for all event dates', 'event_espresso'),
1041 1041
 
1042 1042
 	// Reference: domains/core/admin/eventEditor/src/ui/tickets/ticketsList/filterBar/controls/options.ts:10
1043
-	__( 'ticket sales start and end dates', 'event_espresso' ),
1043
+	__('ticket sales start and end dates', 'event_espresso'),
1044 1044
 
1045 1045
 	// Reference: domains/core/admin/eventEditor/src/ui/tickets/ticketsList/filterBar/controls/options.ts:15
1046
-	__( 'tickets with 90% or more sold', 'event_espresso' ),
1046
+	__('tickets with 90% or more sold', 'event_espresso'),
1047 1047
 
1048 1048
 	// Reference: domains/core/admin/eventEditor/src/ui/tickets/ticketsList/filterBar/controls/options.ts:16
1049
-	__( 'tickets with 75% or more sold', 'event_espresso' ),
1049
+	__('tickets with 75% or more sold', 'event_espresso'),
1050 1050
 
1051 1051
 	// Reference: domains/core/admin/eventEditor/src/ui/tickets/ticketsList/filterBar/controls/options.ts:17
1052
-	__( 'tickets with 50% or more sold', 'event_espresso' ),
1052
+	__('tickets with 50% or more sold', 'event_espresso'),
1053 1053
 
1054 1054
 	// Reference: domains/core/admin/eventEditor/src/ui/tickets/ticketsList/filterBar/controls/options.ts:19
1055
-	__( 'tickets with less than 50% sold', 'event_espresso' ),
1055
+	__('tickets with less than 50% sold', 'event_espresso'),
1056 1056
 
1057 1057
 	// Reference: domains/core/admin/eventEditor/src/ui/tickets/ticketsList/filterBar/controls/options.ts:28
1058
-	__( 'all tickets for all dates', 'event_espresso' ),
1058
+	__('all tickets for all dates', 'event_espresso'),
1059 1059
 
1060 1060
 	// Reference: domains/core/admin/eventEditor/src/ui/tickets/ticketsList/filterBar/controls/options.ts:29
1061
-	__( 'all on sale and sale pending', 'event_espresso' ),
1061
+	__('all on sale and sale pending', 'event_espresso'),
1062 1062
 
1063 1063
 	// Reference: domains/core/admin/eventEditor/src/ui/tickets/ticketsList/filterBar/controls/options.ts:30
1064
-	__( 'on sale tickets only', 'event_espresso' ),
1064
+	__('on sale tickets only', 'event_espresso'),
1065 1065
 
1066 1066
 	// Reference: domains/core/admin/eventEditor/src/ui/tickets/ticketsList/filterBar/controls/options.ts:31
1067
-	__( 'sale pending tickets only', 'event_espresso' ),
1067
+	__('sale pending tickets only', 'event_espresso'),
1068 1068
 
1069 1069
 	// Reference: domains/core/admin/eventEditor/src/ui/tickets/ticketsList/filterBar/controls/options.ts:32
1070
-	__( 'next on sale or sale pending only', 'event_espresso' ),
1070
+	__('next on sale or sale pending only', 'event_espresso'),
1071 1071
 
1072 1072
 	// Reference: domains/core/admin/eventEditor/src/ui/tickets/ticketsList/filterBar/controls/options.ts:33
1073
-	__( 'sold out tickets only', 'event_espresso' ),
1073
+	__('sold out tickets only', 'event_espresso'),
1074 1074
 
1075 1075
 	// Reference: domains/core/admin/eventEditor/src/ui/tickets/ticketsList/filterBar/controls/options.ts:34
1076
-	__( 'expired tickets only', 'event_espresso' ),
1076
+	__('expired tickets only', 'event_espresso'),
1077 1077
 
1078 1078
 	// Reference: domains/core/admin/eventEditor/src/ui/tickets/ticketsList/filterBar/controls/options.ts:35
1079
-	__( 'trashed tickets only', 'event_espresso' ),
1079
+	__('trashed tickets only', 'event_espresso'),
1080 1080
 
1081 1081
 	// Reference: domains/core/admin/eventEditor/src/ui/tickets/ticketsList/filterBar/controls/options.ts:40
1082
-	__( 'all tickets for above dates', 'event_espresso' ),
1082
+	__('all tickets for above dates', 'event_espresso'),
1083 1083
 
1084 1084
 	// Reference: domains/core/admin/eventEditor/src/ui/tickets/ticketsList/filterBar/controls/options.ts:44
1085
-	__( 'ticket sale date', 'event_espresso' ),
1085
+	__('ticket sale date', 'event_espresso'),
1086 1086
 
1087 1087
 	// Reference: domains/core/admin/eventEditor/src/ui/tickets/ticketsList/filterBar/controls/options.ts:45
1088
-	__( 'ticket name', 'event_espresso' ),
1088
+	__('ticket name', 'event_espresso'),
1089 1089
 
1090 1090
 	// Reference: domains/core/admin/eventEditor/src/ui/tickets/ticketsList/filterBar/controls/options.ts:46
1091
-	__( 'ticket ID', 'event_espresso' ),
1091
+	__('ticket ID', 'event_espresso'),
1092 1092
 
1093 1093
 	// Reference: domains/core/admin/eventEditor/src/ui/tickets/ticketsList/filterBar/controls/options.ts:52
1094
-	__( 'linked', 'event_espresso' ),
1094
+	__('linked', 'event_espresso'),
1095 1095
 
1096 1096
 	// Reference: domains/core/admin/eventEditor/src/ui/tickets/ticketsList/filterBar/controls/options.ts:8
1097
-	__( 'ticket sales start date only', 'event_espresso' ),
1097
+	__('ticket sales start date only', 'event_espresso'),
1098 1098
 
1099 1099
 	// Reference: domains/core/admin/eventEditor/src/ui/tickets/ticketsList/filterBar/controls/options.ts:9
1100
-	__( 'ticket sales end date only', 'event_espresso' ),
1100
+	__('ticket sales end date only', 'event_espresso'),
1101 1101
 
1102 1102
 	// Reference: domains/core/admin/eventEditor/src/ui/tickets/ticketsList/newTicketOptions/AddSingleTicket.tsx:18
1103
-	__( 'Add New Ticket', 'event_espresso' ),
1103
+	__('Add New Ticket', 'event_espresso'),
1104 1104
 
1105 1105
 	// Reference: domains/core/admin/eventEditor/src/ui/tickets/ticketsList/newTicketOptions/AddSingleTicket.tsx:32
1106
-	__( 'Add a single ticket and assign the dates to it', 'event_espresso' ),
1106
+	__('Add a single ticket and assign the dates to it', 'event_espresso'),
1107 1107
 
1108 1108
 	// Reference: domains/core/admin/eventEditor/src/ui/tickets/ticketsList/newTicketOptions/AddSingleTicket.tsx:34
1109
-	__( 'Single Ticket', 'event_espresso' ),
1109
+	__('Single Ticket', 'event_espresso'),
1110 1110
 
1111 1111
 	// Reference: domains/core/admin/eventEditor/src/ui/tickets/ticketsList/tableView/TableView.tsx:39
1112
-	__( 'Tickets', 'event_espresso' ),
1112
+	__('Tickets', 'event_espresso'),
1113 1113
 
1114 1114
 	// Reference: domains/core/admin/eventEditor/src/ui/tickets/ticketsList/tableView/useHeaderRowGenerator.tsx:110
1115
-	__( 'Reg List', 'event_espresso' ),
1115
+	__('Reg List', 'event_espresso'),
1116 1116
 
1117 1117
 	// Reference: domains/core/admin/eventEditor/src/ui/tickets/ticketsList/tableView/useHeaderRowGenerator.tsx:53
1118
-	__( 'Goes on Sale', 'event_espresso' ),
1118
+	__('Goes on Sale', 'event_espresso'),
1119 1119
 
1120 1120
 	// Reference: domains/core/admin/eventEditor/src/ui/tickets/ticketsList/tableView/useHeaderRowGenerator.tsx:67
1121
-	__( 'Sale Ends', 'event_espresso' ),
1121
+	__('Sale Ends', 'event_espresso'),
1122 1122
 
1123 1123
 	// Reference: domains/core/admin/eventEditor/src/ui/tickets/ticketsList/tableView/useHeaderRowGenerator.tsx:68
1124
-	__( 'Ends', 'event_espresso' ),
1124
+	__('Ends', 'event_espresso'),
1125 1125
 
1126 1126
 	// Reference: domains/core/admin/eventEditor/src/ui/tickets/ticketsList/tableView/useHeaderRowGenerator.tsx:80
1127
-	__( 'Price', 'event_espresso' ),
1127
+	__('Price', 'event_espresso'),
1128 1128
 
1129 1129
 	// Reference: domains/core/admin/eventEditor/src/ui/tickets/ticketsList/tableView/useHeaderRowGenerator.tsx:90
1130
-	__( 'Qty', 'event_espresso' ),
1130
+	__('Qty', 'event_espresso'),
1131 1131
 
1132 1132
 	// Reference: domains/core/admin/eventEditor/src/ui/venue/VenueDetails.tsx:104
1133
-	__( 'Venue telephone', 'event_espresso' ),
1133
+	__('Venue telephone', 'event_espresso'),
1134 1134
 
1135 1135
 	// Reference: domains/core/admin/eventEditor/src/ui/venue/VenueDetails.tsx:111
1136
-	__( 'Edit this Venue', 'event_espresso' ),
1136
+	__('Edit this Venue', 'event_espresso'),
1137 1137
 
1138 1138
 	// Reference: domains/core/admin/eventEditor/src/ui/venue/VenueDetails.tsx:120
1139
-	__( 'Select a Venue for the Event', 'event_espresso' ),
1139
+	__('Select a Venue for the Event', 'event_espresso'),
1140 1140
 
1141 1141
 	// Reference: domains/core/admin/eventEditor/src/ui/venue/VenueDetails.tsx:21
1142
-	__( 'Venue Details', 'event_espresso' ),
1142
+	__('Venue Details', 'event_espresso'),
1143 1143
 
1144 1144
 	// Reference: domains/core/admin/eventEditor/src/ui/venue/VenueDetails.tsx:39
1145
-	__( 'unlimited space', 'event_espresso' ),
1145
+	__('unlimited space', 'event_espresso'),
1146 1146
 
1147 1147
 	// Reference: domains/core/admin/eventEditor/src/ui/venue/VenueDetails.tsx:42
1148 1148
 	/* translators: %d venue capacity */
1149
-	__( 'Space for up to %d people', 'event_espresso' ),
1149
+	__('Space for up to %d people', 'event_espresso'),
1150 1150
 
1151 1151
 	// Reference: domains/core/admin/eventEditor/src/ui/venue/VenueDetails.tsx:53
1152
-	__( 'Venue address', 'event_espresso' ),
1152
+	__('Venue address', 'event_espresso'),
1153 1153
 
1154 1154
 	// Reference: domains/core/admin/eventEditor/src/ui/venue/VenueDetails.tsx:59
1155
-	__( 'Venue Details card', 'event_espresso' ),
1155
+	__('Venue Details card', 'event_espresso'),
1156 1156
 
1157 1157
 	// Reference: domains/core/admin/eventEditor/src/ui/venue/VenueDetails.tsx:68
1158
-	__( 'no image', 'event_espresso' ),
1158
+	__('no image', 'event_espresso'),
1159 1159
 
1160 1160
 	// Reference: domains/core/admin/eventEditor/src/ui/venue/VenueDetails.tsx:72
1161
-	__( 'Venue name', 'event_espresso' ),
1161
+	__('Venue name', 'event_espresso'),
1162 1162
 
1163 1163
 	// Reference: domains/core/admin/eventEditor/src/ui/venue/VenueDetails.tsx:96
1164
-	__( 'Venue capacity', 'event_espresso' ),
1164
+	__('Venue capacity', 'event_espresso'),
1165 1165
 
1166 1166
 	// Reference: domains/core/admin/wpPluginsPage/src/exitSurvey/Popup.tsx:29
1167
-	__( 'Do you have a moment to share why you are deactivating Event Espresso?', 'event_espresso' ),
1167
+	__('Do you have a moment to share why you are deactivating Event Espresso?', 'event_espresso'),
1168 1168
 
1169 1169
 	// Reference: domains/core/admin/wpPluginsPage/src/exitSurvey/Popup.tsx:40
1170
-	__( 'Skip', 'event_espresso' ),
1170
+	__('Skip', 'event_espresso'),
1171 1171
 
1172 1172
 	// Reference: domains/core/admin/wpPluginsPage/src/exitSurvey/Popup.tsx:42
1173
-	__( 'Sure I\'ll help', 'event_espresso' ),
1173
+	__('Sure I\'ll help', 'event_espresso'),
1174 1174
 
1175 1175
 	// Reference: packages/adapters/src/Pagination/Pagination.tsx:23
1176
-	__( 'pagination', 'event_espresso' ),
1176
+	__('pagination', 'event_espresso'),
1177 1177
 
1178 1178
 	// Reference: packages/adapters/src/TagSelector/TagSelector.tsx:113
1179
-	__( 'toggle menu', 'event_espresso' ),
1179
+	__('toggle menu', 'event_espresso'),
1180 1180
 
1181 1181
 	// Reference: packages/constants/src/datetime.ts:10
1182
-	__( 'Postponed', 'event_espresso' ),
1182
+	__('Postponed', 'event_espresso'),
1183 1183
 
1184 1184
 	// Reference: packages/constants/src/datetime.ts:11
1185
-	__( 'SoldOut', 'event_espresso' ),
1185
+	__('SoldOut', 'event_espresso'),
1186 1186
 
1187 1187
 	// Reference: packages/constants/src/datetime.ts:7
1188 1188
 	// Reference: packages/predicates/src/registration/statusOptions.ts:11
1189
-	__( 'Cancelled', 'event_espresso' ),
1189
+	__('Cancelled', 'event_espresso'),
1190 1190
 
1191 1191
 	// Reference: packages/constants/src/datetime.ts:9
1192
-	__( 'Inactive', 'event_espresso' ),
1192
+	__('Inactive', 'event_espresso'),
1193 1193
 
1194 1194
 	// Reference: packages/data/src/mutations/useMutationWithFeedback.ts:25
1195
-	__( 'error creating %s', 'event_espresso' ),
1195
+	__('error creating %s', 'event_espresso'),
1196 1196
 
1197 1197
 	// Reference: packages/data/src/mutations/useMutationWithFeedback.ts:26
1198
-	__( 'error deleting %s', 'event_espresso' ),
1198
+	__('error deleting %s', 'event_espresso'),
1199 1199
 
1200 1200
 	// Reference: packages/data/src/mutations/useMutationWithFeedback.ts:27
1201
-	__( 'error updating %s', 'event_espresso' ),
1201
+	__('error updating %s', 'event_espresso'),
1202 1202
 
1203 1203
 	// Reference: packages/data/src/mutations/useMutationWithFeedback.ts:28
1204
-	__( 'creating %s', 'event_espresso' ),
1204
+	__('creating %s', 'event_espresso'),
1205 1205
 
1206 1206
 	// Reference: packages/data/src/mutations/useMutationWithFeedback.ts:29
1207
-	__( 'deleting %s', 'event_espresso' ),
1207
+	__('deleting %s', 'event_espresso'),
1208 1208
 
1209 1209
 	// Reference: packages/data/src/mutations/useMutationWithFeedback.ts:30
1210
-	__( 'updating %s', 'event_espresso' ),
1210
+	__('updating %s', 'event_espresso'),
1211 1211
 
1212 1212
 	// Reference: packages/data/src/mutations/useMutationWithFeedback.ts:31
1213
-	__( 'successfully created %s', 'event_espresso' ),
1213
+	__('successfully created %s', 'event_espresso'),
1214 1214
 
1215 1215
 	// Reference: packages/data/src/mutations/useMutationWithFeedback.ts:32
1216
-	__( 'successfully deleted %s', 'event_espresso' ),
1216
+	__('successfully deleted %s', 'event_espresso'),
1217 1217
 
1218 1218
 	// Reference: packages/data/src/mutations/useMutationWithFeedback.ts:33
1219
-	__( 'successfully updated %s', 'event_espresso' ),
1219
+	__('successfully updated %s', 'event_espresso'),
1220 1220
 
1221 1221
 	// Reference: packages/dates/src/components/DateRangePicker/DateRangePickerLegend.tsx:13
1222
-	__( 'day in range', 'event_espresso' ),
1222
+	__('day in range', 'event_espresso'),
1223 1223
 
1224 1224
 	// Reference: packages/dates/src/components/DateRangePicker/DateRangePickerLegend.tsx:17
1225 1225
 	// Reference: packages/dates/src/components/DateRangePicker/index.tsx:79
1226
-	__( 'end date', 'event_espresso' ),
1226
+	__('end date', 'event_espresso'),
1227 1227
 
1228 1228
 	// Reference: packages/dates/src/components/DateTimePicker.tsx:17
1229 1229
 	// Reference: packages/dates/src/components/TimePicker.tsx:17
1230 1230
 	// Reference: packages/form-builder/src/state/utils.ts:433
1231
-	__( 'time', 'event_espresso' ),
1231
+	__('time', 'event_espresso'),
1232 1232
 
1233 1233
 	// Reference: packages/dates/src/constants.ts:7
1234
-	__( 'End Date & Time must be set later than the Start Date & Time', 'event_espresso' ),
1234
+	__('End Date & Time must be set later than the Start Date & Time', 'event_espresso'),
1235 1235
 
1236 1236
 	// Reference: packages/dates/src/constants.ts:9
1237
-	__( 'Start Date & Time must be set before the End Date & Time', 'event_espresso' ),
1237
+	__('Start Date & Time must be set before the End Date & Time', 'event_espresso'),
1238 1238
 
1239 1239
 	// Reference: packages/dates/src/utils/misc.ts:16
1240
-	__( 'month(s)', 'event_espresso' ),
1240
+	__('month(s)', 'event_espresso'),
1241 1241
 
1242 1242
 	// Reference: packages/dates/src/utils/misc.ts:17
1243
-	__( 'week(s)', 'event_espresso' ),
1243
+	__('week(s)', 'event_espresso'),
1244 1244
 
1245 1245
 	// Reference: packages/dates/src/utils/misc.ts:18
1246
-	__( 'day(s)', 'event_espresso' ),
1246
+	__('day(s)', 'event_espresso'),
1247 1247
 
1248 1248
 	// Reference: packages/dates/src/utils/misc.ts:19
1249
-	__( 'hour(s)', 'event_espresso' ),
1249
+	__('hour(s)', 'event_espresso'),
1250 1250
 
1251 1251
 	// Reference: packages/dates/src/utils/misc.ts:20
1252
-	__( 'minute(s)', 'event_espresso' ),
1252
+	__('minute(s)', 'event_espresso'),
1253 1253
 
1254 1254
 	// Reference: packages/edtr-services/src/apollo/mutations/useReorderEntities.ts:63
1255
-	__( 'order updated', 'event_espresso' ),
1255
+	__('order updated', 'event_espresso'),
1256 1256
 
1257 1257
 	// Reference: packages/edtr-services/src/constants.ts:24
1258
-	__( 'datetime', 'event_espresso' ),
1258
+	__('datetime', 'event_espresso'),
1259 1259
 
1260 1260
 	// Reference: packages/edtr-services/src/constants.ts:27
1261
-	__( 'price', 'event_espresso' ),
1261
+	__('price', 'event_espresso'),
1262 1262
 
1263 1263
 	// Reference: packages/edtr-services/src/constants.ts:28
1264 1264
 	// Reference: packages/tpc/src/inputs/PriceTypeInput.tsx:20
1265
-	__( 'price type', 'event_espresso' ),
1265
+	__('price type', 'event_espresso'),
1266 1266
 
1267 1267
 	// Reference: packages/edtr-services/src/utils/dateAndTime.ts:38
1268 1268
 	// Reference: packages/ui-components/src/EditDateRangeButton/EditDateRangeButton.tsx:39
1269
-	__( 'End date has been adjusted', 'event_espresso' ),
1269
+	__('End date has been adjusted', 'event_espresso'),
1270 1270
 
1271 1271
 	// Reference: packages/edtr-services/src/utils/dateAndTime.ts:59
1272
-	__( 'Required', 'event_espresso' ),
1272
+	__('Required', 'event_espresso'),
1273 1273
 
1274 1274
 	// Reference: packages/edtr-services/src/utils/dateAndTime.ts:64
1275
-	__( 'Start Date is required', 'event_espresso' ),
1275
+	__('Start Date is required', 'event_espresso'),
1276 1276
 
1277 1277
 	// Reference: packages/edtr-services/src/utils/dateAndTime.ts:68
1278
-	__( 'End Date is required', 'event_espresso' ),
1278
+	__('End Date is required', 'event_espresso'),
1279 1279
 
1280 1280
 	// Reference: packages/ee-components/src/EntityList/EntityList.tsx:30
1281
-	__( 'no results found', 'event_espresso' ),
1281
+	__('no results found', 'event_espresso'),
1282 1282
 
1283 1283
 	// Reference: packages/ee-components/src/EntityList/EntityList.tsx:31
1284
-	__( 'try changing filter settings', 'event_espresso' ),
1284
+	__('try changing filter settings', 'event_espresso'),
1285 1285
 
1286 1286
 	// Reference: packages/ee-components/src/bulkEdit/ActionCheckbox.tsx:38
1287 1287
 	/* translators: %d entity id */
1288
-	__( 'select entity with id %d', 'event_espresso' ),
1288
+	__('select entity with id %d', 'event_espresso'),
1289 1289
 
1290 1290
 	// Reference: packages/ee-components/src/bulkEdit/ActionCheckbox.tsx:41
1291
-	__( 'select all entities', 'event_espresso' ),
1291
+	__('select all entities', 'event_espresso'),
1292 1292
 
1293 1293
 	// Reference: packages/ee-components/src/bulkEdit/details/BulkEditDetails.tsx:20
1294
-	__( 'Note: ', 'event_espresso' ),
1294
+	__('Note: ', 'event_espresso'),
1295 1295
 
1296 1296
 	// Reference: packages/ee-components/src/bulkEdit/details/BulkEditDetails.tsx:20
1297
-	__( 'any changes will be applied to ALL of the selected entities.', 'event_espresso' ),
1297
+	__('any changes will be applied to ALL of the selected entities.', 'event_espresso'),
1298 1298
 
1299 1299
 	// Reference: packages/ee-components/src/bulkEdit/details/BulkEditDetails.tsx:27
1300
-	__( 'Bulk edit details', 'event_espresso' ),
1300
+	__('Bulk edit details', 'event_espresso'),
1301 1301
 
1302 1302
 	// Reference: packages/ee-components/src/bulkEdit/details/Submit.tsx:17
1303
-	__( 'Are you sure you want to bulk update the details?', 'event_espresso' ),
1303
+	__('Are you sure you want to bulk update the details?', 'event_espresso'),
1304 1304
 
1305 1305
 	// Reference: packages/ee-components/src/bulkEdit/details/Submit.tsx:18
1306
-	__( 'Bulk update details', 'event_espresso' ),
1306
+	__('Bulk update details', 'event_espresso'),
1307 1307
 
1308 1308
 	// Reference: packages/ee-components/src/filterBar/SortByControl/index.tsx:26
1309
-	__( 'set order', 'event_espresso' ),
1309
+	__('set order', 'event_espresso'),
1310 1310
 
1311 1311
 	// Reference: packages/ee-components/src/filterBar/SortByControl/index.tsx:28
1312
-	__( 'Set Custom Dates Order - this is how dates are ordered on the frontend', 'event_espresso' ),
1312
+	__('Set Custom Dates Order - this is how dates are ordered on the frontend', 'event_espresso'),
1313 1313
 
1314 1314
 	// Reference: packages/ee-components/src/filterBar/SortByControl/index.tsx:29
1315
-	__( 'Set Custom Tickets Order - this is how tickets are ordered on the frontend', 'event_espresso' ),
1315
+	__('Set Custom Tickets Order - this is how tickets are ordered on the frontend', 'event_espresso'),
1316 1316
 
1317 1317
 	// Reference: packages/form-builder/src/FormElement/FormElementToolbar.tsx:32
1318
-	__( 'delete form element', 'event_espresso' ),
1318
+	__('delete form element', 'event_espresso'),
1319 1319
 
1320 1320
 	// Reference: packages/form-builder/src/FormElement/FormElementToolbar.tsx:49
1321
-	__( 'form element settings', 'event_espresso' ),
1321
+	__('form element settings', 'event_espresso'),
1322 1322
 
1323 1323
 	// Reference: packages/form-builder/src/FormElement/FormElementToolbar.tsx:59
1324
-	__( 'copy form element', 'event_espresso' ),
1324
+	__('copy form element', 'event_espresso'),
1325 1325
 
1326 1326
 	// Reference: packages/form-builder/src/FormElement/FormElementToolbar.tsx:69
1327
-	__( 'click, hold, and drag to reorder form element', 'event_espresso' ),
1327
+	__('click, hold, and drag to reorder form element', 'event_espresso'),
1328 1328
 
1329 1329
 	// Reference: packages/form-builder/src/FormElement/Tabs/FieldOption.tsx:20
1330
-	__( 'remove option', 'event_espresso' ),
1330
+	__('remove option', 'event_espresso'),
1331 1331
 
1332 1332
 	// Reference: packages/form-builder/src/FormElement/Tabs/FieldOption.tsx:42
1333
-	__( 'value', 'event_espresso' ),
1333
+	__('value', 'event_espresso'),
1334 1334
 
1335 1335
 	// Reference: packages/form-builder/src/FormElement/Tabs/FieldOption.tsx:52
1336
-	__( 'label', 'event_espresso' ),
1336
+	__('label', 'event_espresso'),
1337 1337
 
1338 1338
 	// Reference: packages/form-builder/src/FormElement/Tabs/FieldOption.tsx:63
1339
-	__( 'click, hold, and drag to reorder field option', 'event_espresso' ),
1339
+	__('click, hold, and drag to reorder field option', 'event_espresso'),
1340 1340
 
1341 1341
 	// Reference: packages/form-builder/src/FormElement/Tabs/FieldOptions.tsx:61
1342
-	__( 'Options are the choices you give people to select from.', 'event_espresso' ),
1342
+	__('Options are the choices you give people to select from.', 'event_espresso'),
1343 1343
 
1344 1344
 	// Reference: packages/form-builder/src/FormElement/Tabs/FieldOptions.tsx:63
1345
-	__( 'The value is a simple key that will be saved to the database and the label is what is shown to the user.', 'event_espresso' ),
1345
+	__('The value is a simple key that will be saved to the database and the label is what is shown to the user.', 'event_espresso'),
1346 1346
 
1347 1347
 	// Reference: packages/form-builder/src/FormElement/Tabs/FieldOptions.tsx:96
1348
-	__( 'add new option', 'event_espresso' ),
1348
+	__('add new option', 'event_espresso'),
1349 1349
 
1350 1350
 	// Reference: packages/form-builder/src/FormElement/Tabs/FormElementTabs.tsx:26
1351 1351
 	// Reference: packages/form-builder/src/FormSection/Tabs/FormSectionTabs.tsx:25
1352
-	__( 'Styles', 'event_espresso' ),
1352
+	__('Styles', 'event_espresso'),
1353 1353
 
1354 1354
 	// Reference: packages/form-builder/src/FormElement/Tabs/FormElementTabs.tsx:30
1355
-	__( 'Validation', 'event_espresso' ),
1355
+	__('Validation', 'event_espresso'),
1356 1356
 
1357 1357
 	// Reference: packages/form-builder/src/FormElement/Tabs/InputType.tsx:18
1358
-	__( 'Change input type', 'event_espresso' ),
1358
+	__('Change input type', 'event_espresso'),
1359 1359
 
1360 1360
 	// Reference: packages/form-builder/src/FormElement/Tabs/InputType.tsx:19
1361
-	__( 'Some configurations might be lost. Are you sure you want to change the input type?', 'event_espresso' ),
1361
+	__('Some configurations might be lost. Are you sure you want to change the input type?', 'event_espresso'),
1362 1362
 
1363 1363
 	// Reference: packages/form-builder/src/FormElement/Tabs/InputType.tsx:40
1364
-	__( 'type', 'event_espresso' ),
1364
+	__('type', 'event_espresso'),
1365 1365
 
1366 1366
 	// Reference: packages/form-builder/src/FormElement/Tabs/Settings.tsx:26
1367 1367
 	// Reference: packages/form-builder/src/FormSection/Tabs/Settings.tsx:17
1368
-	__( 'public label', 'event_espresso' ),
1368
+	__('public label', 'event_espresso'),
1369 1369
 
1370 1370
 	// Reference: packages/form-builder/src/FormElement/Tabs/Settings.tsx:33
1371 1371
 	// Reference: packages/form-builder/src/FormSection/Tabs/Settings.tsx:22
1372
-	__( 'admin label', 'event_espresso' ),
1372
+	__('admin label', 'event_espresso'),
1373 1373
 
1374 1374
 	// Reference: packages/form-builder/src/FormElement/Tabs/Settings.tsx:40
1375
-	__( 'content', 'event_espresso' ),
1375
+	__('content', 'event_espresso'),
1376 1376
 
1377 1377
 	// Reference: packages/form-builder/src/FormElement/Tabs/Settings.tsx:48
1378
-	__( 'options', 'event_espresso' ),
1378
+	__('options', 'event_espresso'),
1379 1379
 
1380 1380
 	// Reference: packages/form-builder/src/FormElement/Tabs/Settings.tsx:51
1381
-	__( 'placeholder', 'event_espresso' ),
1381
+	__('placeholder', 'event_espresso'),
1382 1382
 
1383 1383
 	// Reference: packages/form-builder/src/FormElement/Tabs/Settings.tsx:57
1384
-	__( 'admin only', 'event_espresso' ),
1384
+	__('admin only', 'event_espresso'),
1385 1385
 
1386 1386
 	// Reference: packages/form-builder/src/FormElement/Tabs/Settings.tsx:62
1387
-	__( 'help text', 'event_espresso' ),
1387
+	__('help text', 'event_espresso'),
1388 1388
 
1389 1389
 	// Reference: packages/form-builder/src/FormElement/Tabs/Settings.tsx:71
1390
-	__( 'maps to', 'event_espresso' ),
1390
+	__('maps to', 'event_espresso'),
1391 1391
 
1392 1392
 	// Reference: packages/form-builder/src/FormElement/Tabs/Styles.tsx:15
1393 1393
 	// Reference: packages/form-builder/src/FormSection/Tabs/Styles.tsx:13
1394
-	__( 'css class', 'event_espresso' ),
1394
+	__('css class', 'event_espresso'),
1395 1395
 
1396 1396
 	// Reference: packages/form-builder/src/FormElement/Tabs/Styles.tsx:20
1397
-	__( 'help text css class', 'event_espresso' ),
1397
+	__('help text css class', 'event_espresso'),
1398 1398
 
1399 1399
 	// Reference: packages/form-builder/src/FormElement/Tabs/Styles.tsx:27
1400
-	__( 'size', 'event_espresso' ),
1400
+	__('size', 'event_espresso'),
1401 1401
 
1402 1402
 	// Reference: packages/form-builder/src/FormElement/Tabs/Styles.tsx:35
1403
-	__( 'step', 'event_espresso' ),
1403
+	__('step', 'event_espresso'),
1404 1404
 
1405 1405
 	// Reference: packages/form-builder/src/FormElement/Tabs/Styles.tsx:41
1406
-	__( 'maxlength', 'event_espresso' ),
1406
+	__('maxlength', 'event_espresso'),
1407 1407
 
1408 1408
 	// Reference: packages/form-builder/src/FormElement/Tabs/Validation.tsx:123
1409
-	__( 'min', 'event_espresso' ),
1409
+	__('min', 'event_espresso'),
1410 1410
 
1411 1411
 	// Reference: packages/form-builder/src/FormElement/Tabs/Validation.tsx:128
1412
-	__( 'max', 'event_espresso' ),
1412
+	__('max', 'event_espresso'),
1413 1413
 
1414 1414
 	// Reference: packages/form-builder/src/FormElement/Tabs/Validation.tsx:28
1415
-	__( 'Germany', 'event_espresso' ),
1415
+	__('Germany', 'event_espresso'),
1416 1416
 
1417 1417
 	// Reference: packages/form-builder/src/FormElement/Tabs/Validation.tsx:32
1418
-	__( 'France', 'event_espresso' ),
1418
+	__('France', 'event_espresso'),
1419 1419
 
1420 1420
 	// Reference: packages/form-builder/src/FormElement/Tabs/Validation.tsx:36
1421
-	__( 'United Kingdom', 'event_espresso' ),
1421
+	__('United Kingdom', 'event_espresso'),
1422 1422
 
1423 1423
 	// Reference: packages/form-builder/src/FormElement/Tabs/Validation.tsx:40
1424
-	__( 'United States', 'event_espresso' ),
1424
+	__('United States', 'event_espresso'),
1425 1425
 
1426 1426
 	// Reference: packages/form-builder/src/FormElement/Tabs/Validation.tsx:44
1427
-	__( 'Custom', 'event_espresso' ),
1427
+	__('Custom', 'event_espresso'),
1428 1428
 
1429 1429
 	// Reference: packages/form-builder/src/FormElement/Tabs/Validation.tsx:54
1430
-	__( 'required', 'event_espresso' ),
1430
+	__('required', 'event_espresso'),
1431 1431
 
1432 1432
 	// Reference: packages/form-builder/src/FormElement/Tabs/Validation.tsx:59
1433
-	__( 'required text', 'event_espresso' ),
1433
+	__('required text', 'event_espresso'),
1434 1434
 
1435 1435
 	// Reference: packages/form-builder/src/FormElement/Tabs/Validation.tsx:66
1436
-	__( 'autocomplete', 'event_espresso' ),
1436
+	__('autocomplete', 'event_espresso'),
1437 1437
 
1438 1438
 	// Reference: packages/form-builder/src/FormElement/Tabs/Validation.tsx:74
1439
-	__( 'custom format', 'event_espresso' ),
1439
+	__('custom format', 'event_espresso'),
1440 1440
 
1441 1441
 	// Reference: packages/form-builder/src/FormElement/Tabs/Validation.tsx:75
1442
-	__( 'format', 'event_espresso' ),
1442
+	__('format', 'event_espresso'),
1443 1443
 
1444 1444
 	// Reference: packages/form-builder/src/FormElement/Tabs/Validation.tsx:83
1445
-	__( 'pattern', 'event_espresso' ),
1445
+	__('pattern', 'event_espresso'),
1446 1446
 
1447 1447
 	// Reference: packages/form-builder/src/FormSection/AddFormElementPopover.tsx:110
1448
-	__( 'add new form element', 'event_espresso' ),
1448
+	__('add new form element', 'event_espresso'),
1449 1449
 
1450 1450
 	// Reference: packages/form-builder/src/FormSection/AddFormElementPopover.tsx:117
1451 1451
 	// Reference: packages/form/src/renderers/RepeatableRenderer.tsx:52
1452
-	__( 'Add', 'event_espresso' ),
1452
+	__('Add', 'event_espresso'),
1453 1453
 
1454 1454
 	// Reference: packages/form-builder/src/FormSection/AddFormElementPopover.tsx:76
1455
-	__( 'Add Form Element', 'event_espresso' ),
1455
+	__('Add Form Element', 'event_espresso'),
1456 1456
 
1457 1457
 	// Reference: packages/form-builder/src/FormSection/AddFormElementPopover.tsx:85
1458
-	__( 'form element order can be changed after adding by using the drag handles in the form element toolbar', 'event_espresso' ),
1458
+	__('form element order can be changed after adding by using the drag handles in the form element toolbar', 'event_espresso'),
1459 1459
 
1460 1460
 	// Reference: packages/form-builder/src/FormSection/AddFormElementPopover.tsx:92
1461
-	__( 'load existing form section', 'event_espresso' ),
1461
+	__('load existing form section', 'event_espresso'),
1462 1462
 
1463 1463
 	// Reference: packages/form-builder/src/FormSection/FormSectionToolbar.tsx:32
1464
-	__( 'delete form section', 'event_espresso' ),
1464
+	__('delete form section', 'event_espresso'),
1465 1465
 
1466 1466
 	// Reference: packages/form-builder/src/FormSection/FormSectionToolbar.tsx:47
1467
-	__( 'form section settings', 'event_espresso' ),
1467
+	__('form section settings', 'event_espresso'),
1468 1468
 
1469 1469
 	// Reference: packages/form-builder/src/FormSection/FormSectionToolbar.tsx:57
1470
-	__( 'copy form section', 'event_espresso' ),
1470
+	__('copy form section', 'event_espresso'),
1471 1471
 
1472 1472
 	// Reference: packages/form-builder/src/FormSection/FormSectionToolbar.tsx:74
1473
-	__( 'click, hold, and drag to reorder form section', 'event_espresso' ),
1473
+	__('click, hold, and drag to reorder form section', 'event_espresso'),
1474 1474
 
1475 1475
 	// Reference: packages/form-builder/src/FormSection/FormSections.tsx:26
1476
-	__( 'Add Form Section', 'event_espresso' ),
1476
+	__('Add Form Section', 'event_espresso'),
1477 1477
 
1478 1478
 	// Reference: packages/form-builder/src/FormSection/SaveSection.tsx:47
1479
-	__( 'save form section for use in other forms', 'event_espresso' ),
1479
+	__('save form section for use in other forms', 'event_espresso'),
1480 1480
 
1481 1481
 	// Reference: packages/form-builder/src/FormSection/SaveSection.tsx:51
1482
-	__( 'save as', 'event_espresso' ),
1482
+	__('save as', 'event_espresso'),
1483 1483
 
1484 1484
 	// Reference: packages/form-builder/src/FormSection/SaveSection.tsx:55
1485
-	__( 'default', 'event_espresso' ),
1485
+	__('default', 'event_espresso'),
1486 1486
 
1487 1487
 	// Reference: packages/form-builder/src/FormSection/SaveSection.tsx:58
1488
-	__( ' a copy of this form section will be automatically added to ALL new events', 'event_espresso' ),
1488
+	__(' a copy of this form section will be automatically added to ALL new events', 'event_espresso'),
1489 1489
 
1490 1490
 	// Reference: packages/form-builder/src/FormSection/SaveSection.tsx:61
1491
-	__( 'shared', 'event_espresso' ),
1491
+	__('shared', 'event_espresso'),
1492 1492
 
1493 1493
 	// Reference: packages/form-builder/src/FormSection/SaveSection.tsx:64
1494
-	__( 'a copy of this form section will be saved for use in other events but not loaded by default', 'event_espresso' ),
1494
+	__('a copy of this form section will be saved for use in other events but not loaded by default', 'event_espresso'),
1495 1495
 
1496 1496
 	// Reference: packages/form-builder/src/FormSection/Tabs/Settings.tsx:27
1497
-	__( 'show label', 'event_espresso' ),
1497
+	__('show label', 'event_espresso'),
1498 1498
 
1499 1499
 	// Reference: packages/form-builder/src/FormSection/Tabs/Settings.tsx:33
1500
-	__( 'applies to', 'event_espresso' ),
1500
+	__('applies to', 'event_espresso'),
1501 1501
 
1502 1502
 	// Reference: packages/form-builder/src/constants.ts:102
1503 1503
 	// Reference: packages/form-builder/src/state/utils.ts:436
1504
-	__( 'URL', 'event_espresso' ),
1504
+	__('URL', 'event_espresso'),
1505 1505
 
1506 1506
 	// Reference: packages/form-builder/src/constants.ts:104
1507
-	__( 'adds a text input for entering a URL address', 'event_espresso' ),
1507
+	__('adds a text input for entering a URL address', 'event_espresso'),
1508 1508
 
1509 1509
 	// Reference: packages/form-builder/src/constants.ts:107
1510
-	__( 'Date', 'event_espresso' ),
1510
+	__('Date', 'event_espresso'),
1511 1511
 
1512 1512
 	// Reference: packages/form-builder/src/constants.ts:109
1513
-	__( 'adds a text input that allows users to enter a date directly via keyboard or a datepicker', 'event_espresso' ),
1513
+	__('adds a text input that allows users to enter a date directly via keyboard or a datepicker', 'event_espresso'),
1514 1514
 
1515 1515
 	// Reference: packages/form-builder/src/constants.ts:112
1516 1516
 	// Reference: packages/form-builder/src/state/utils.ts:369
1517
-	__( 'Local Date', 'event_espresso' ),
1517
+	__('Local Date', 'event_espresso'),
1518 1518
 
1519 1519
 	// Reference: packages/form-builder/src/constants.ts:117
1520
-	__( 'Month', 'event_espresso' ),
1520
+	__('Month', 'event_espresso'),
1521 1521
 
1522 1522
 	// Reference: packages/form-builder/src/constants.ts:119
1523
-	__( 'adds a text input that allows users to enter a month and year directly via keyboard or a datepicker', 'event_espresso' ),
1523
+	__('adds a text input that allows users to enter a month and year directly via keyboard or a datepicker', 'event_espresso'),
1524 1524
 
1525 1525
 	// Reference: packages/form-builder/src/constants.ts:122
1526
-	__( 'Time', 'event_espresso' ),
1526
+	__('Time', 'event_espresso'),
1527 1527
 
1528 1528
 	// Reference: packages/form-builder/src/constants.ts:124
1529
-	__( 'adds a text input that allows users to enter a time directly via keyboard or a timepicker', 'event_espresso' ),
1529
+	__('adds a text input that allows users to enter a time directly via keyboard or a timepicker', 'event_espresso'),
1530 1530
 
1531 1531
 	// Reference: packages/form-builder/src/constants.ts:127
1532
-	__( 'Week', 'event_espresso' ),
1532
+	__('Week', 'event_espresso'),
1533 1533
 
1534 1534
 	// Reference: packages/form-builder/src/constants.ts:129
1535
-	__( 'adds a text input that allows users to enter a week and year directly via keyboard or a datepicker', 'event_espresso' ),
1535
+	__('adds a text input that allows users to enter a week and year directly via keyboard or a datepicker', 'event_espresso'),
1536 1536
 
1537 1537
 	// Reference: packages/form-builder/src/constants.ts:132
1538
-	__( 'Day Selector', 'event_espresso' ),
1538
+	__('Day Selector', 'event_espresso'),
1539 1539
 
1540 1540
 	// Reference: packages/form-builder/src/constants.ts:134
1541
-	__( 'adds a dropdown selector that allows users to select the day of the month (01 to 31)', 'event_espresso' ),
1541
+	__('adds a dropdown selector that allows users to select the day of the month (01 to 31)', 'event_espresso'),
1542 1542
 
1543 1543
 	// Reference: packages/form-builder/src/constants.ts:137
1544
-	__( 'Month Selector', 'event_espresso' ),
1544
+	__('Month Selector', 'event_espresso'),
1545 1545
 
1546 1546
 	// Reference: packages/form-builder/src/constants.ts:139
1547
-	__( 'adds a dropdown selector that allows users to select the month of the year (01 to 12)', 'event_espresso' ),
1547
+	__('adds a dropdown selector that allows users to select the month of the year (01 to 12)', 'event_espresso'),
1548 1548
 
1549 1549
 	// Reference: packages/form-builder/src/constants.ts:142
1550
-	__( 'Year Selector', 'event_espresso' ),
1550
+	__('Year Selector', 'event_espresso'),
1551 1551
 
1552 1552
 	// Reference: packages/form-builder/src/constants.ts:144
1553
-	__( 'adds a dropdown selector that allows users to select the year from a configurable range', 'event_espresso' ),
1553
+	__('adds a dropdown selector that allows users to select the year from a configurable range', 'event_espresso'),
1554 1554
 
1555 1555
 	// Reference: packages/form-builder/src/constants.ts:147
1556
-	__( 'Radio Buttons', 'event_espresso' ),
1556
+	__('Radio Buttons', 'event_espresso'),
1557 1557
 
1558 1558
 	// Reference: packages/form-builder/src/constants.ts:149
1559
-	__( 'adds one or more radio buttons that allow users to only select one option from those provided', 'event_espresso' ),
1559
+	__('adds one or more radio buttons that allow users to only select one option from those provided', 'event_espresso'),
1560 1560
 
1561 1561
 	// Reference: packages/form-builder/src/constants.ts:152
1562 1562
 	// Reference: packages/form-builder/src/state/utils.ts:375
1563
-	__( 'Decimal Number', 'event_espresso' ),
1563
+	__('Decimal Number', 'event_espresso'),
1564 1564
 
1565 1565
 	// Reference: packages/form-builder/src/constants.ts:154
1566
-	__( 'adds a text input that only accepts numbers whose value is a decimal (float)', 'event_espresso' ),
1566
+	__('adds a text input that only accepts numbers whose value is a decimal (float)', 'event_espresso'),
1567 1567
 
1568 1568
 	// Reference: packages/form-builder/src/constants.ts:157
1569 1569
 	// Reference: packages/form-builder/src/state/utils.ts:378
1570
-	__( 'Whole Number', 'event_espresso' ),
1570
+	__('Whole Number', 'event_espresso'),
1571 1571
 
1572 1572
 	// Reference: packages/form-builder/src/constants.ts:159
1573
-	__( 'adds a text input that only accepts numbers whose value is an integer (whole number)', 'event_espresso' ),
1573
+	__('adds a text input that only accepts numbers whose value is an integer (whole number)', 'event_espresso'),
1574 1574
 
1575 1575
 	// Reference: packages/form-builder/src/constants.ts:162
1576
-	__( 'Number Range', 'event_espresso' ),
1576
+	__('Number Range', 'event_espresso'),
1577 1577
 
1578 1578
 	// Reference: packages/form-builder/src/constants.ts:167
1579
-	__( 'Phone Number', 'event_espresso' ),
1579
+	__('Phone Number', 'event_espresso'),
1580 1580
 
1581 1581
 	// Reference: packages/form-builder/src/constants.ts:172
1582
-	__( 'Dropdown', 'event_espresso' ),
1582
+	__('Dropdown', 'event_espresso'),
1583 1583
 
1584 1584
 	// Reference: packages/form-builder/src/constants.ts:174
1585
-	__( 'adds a dropdown selector that accepts a single value', 'event_espresso' ),
1585
+	__('adds a dropdown selector that accepts a single value', 'event_espresso'),
1586 1586
 
1587 1587
 	// Reference: packages/form-builder/src/constants.ts:177
1588
-	__( 'Multi Select', 'event_espresso' ),
1588
+	__('Multi Select', 'event_espresso'),
1589 1589
 
1590 1590
 	// Reference: packages/form-builder/src/constants.ts:179
1591
-	__( 'adds a dropdown selector that accepts multiple values', 'event_espresso' ),
1591
+	__('adds a dropdown selector that accepts multiple values', 'event_espresso'),
1592 1592
 
1593 1593
 	// Reference: packages/form-builder/src/constants.ts:182
1594
-	__( 'Toggle/Switch', 'event_espresso' ),
1594
+	__('Toggle/Switch', 'event_espresso'),
1595 1595
 
1596 1596
 	// Reference: packages/form-builder/src/constants.ts:184
1597
-	__( 'adds a toggle or a switch to accept true or false value', 'event_espresso' ),
1597
+	__('adds a toggle or a switch to accept true or false value', 'event_espresso'),
1598 1598
 
1599 1599
 	// Reference: packages/form-builder/src/constants.ts:187
1600
-	__( 'Multi Checkbox', 'event_espresso' ),
1600
+	__('Multi Checkbox', 'event_espresso'),
1601 1601
 
1602 1602
 	// Reference: packages/form-builder/src/constants.ts:189
1603
-	__( 'adds checkboxes that allow users to select zero or more options from those provided', 'event_espresso' ),
1603
+	__('adds checkboxes that allow users to select zero or more options from those provided', 'event_espresso'),
1604 1604
 
1605 1605
 	// Reference: packages/form-builder/src/constants.ts:192
1606
-	__( 'Country Selector', 'event_espresso' ),
1606
+	__('Country Selector', 'event_espresso'),
1607 1607
 
1608 1608
 	// Reference: packages/form-builder/src/constants.ts:194
1609
-	__( 'adds a dropdown selector populated with names of countries that are enabled for the site', 'event_espresso' ),
1609
+	__('adds a dropdown selector populated with names of countries that are enabled for the site', 'event_espresso'),
1610 1610
 
1611 1611
 	// Reference: packages/form-builder/src/constants.ts:197
1612
-	__( 'State Selector', 'event_espresso' ),
1612
+	__('State Selector', 'event_espresso'),
1613 1613
 
1614 1614
 	// Reference: packages/form-builder/src/constants.ts:202
1615
-	__( 'Button', 'event_espresso' ),
1615
+	__('Button', 'event_espresso'),
1616 1616
 
1617 1617
 	// Reference: packages/form-builder/src/constants.ts:204
1618
-	__( 'adds a button to the form that can be used for triggering fucntionality (requires custom coding)', 'event_espresso' ),
1618
+	__('adds a button to the form that can be used for triggering fucntionality (requires custom coding)', 'event_espresso'),
1619 1619
 
1620 1620
 	// Reference: packages/form-builder/src/constants.ts:207
1621
-	__( 'Reset Button', 'event_espresso' ),
1621
+	__('Reset Button', 'event_espresso'),
1622 1622
 
1623 1623
 	// Reference: packages/form-builder/src/constants.ts:209
1624
-	__( 'adds a button that will reset the form back to its original state.', 'event_espresso' ),
1624
+	__('adds a button that will reset the form back to its original state.', 'event_espresso'),
1625 1625
 
1626 1626
 	// Reference: packages/form-builder/src/constants.ts:55
1627
-	__( 'Form Section', 'event_espresso' ),
1627
+	__('Form Section', 'event_espresso'),
1628 1628
 
1629 1629
 	// Reference: packages/form-builder/src/constants.ts:57
1630
-	__( 'Used for creating logical groupings for questions and form elements. Need to add a heading or description? Use the HTML form element.', 'event_espresso' ),
1630
+	__('Used for creating logical groupings for questions and form elements. Need to add a heading or description? Use the HTML form element.', 'event_espresso'),
1631 1631
 
1632 1632
 	// Reference: packages/form-builder/src/constants.ts:62
1633
-	__( 'HTML Block', 'event_espresso' ),
1633
+	__('HTML Block', 'event_espresso'),
1634 1634
 
1635 1635
 	// Reference: packages/form-builder/src/constants.ts:64
1636
-	__( 'allows you to add HTML like headings or text paragraphs to your form', 'event_espresso' ),
1636
+	__('allows you to add HTML like headings or text paragraphs to your form', 'event_espresso'),
1637 1637
 
1638 1638
 	// Reference: packages/form-builder/src/constants.ts:69
1639
-	__( 'adds a text input that only accepts plain text', 'event_espresso' ),
1639
+	__('adds a text input that only accepts plain text', 'event_espresso'),
1640 1640
 
1641 1641
 	// Reference: packages/form-builder/src/constants.ts:72
1642
-	__( 'Plain Text Area', 'event_espresso' ),
1642
+	__('Plain Text Area', 'event_espresso'),
1643 1643
 
1644 1644
 	// Reference: packages/form-builder/src/constants.ts:74
1645
-	__( 'adds a textarea block that only accepts plain text', 'event_espresso' ),
1645
+	__('adds a textarea block that only accepts plain text', 'event_espresso'),
1646 1646
 
1647 1647
 	// Reference: packages/form-builder/src/constants.ts:77
1648
-	__( 'HTML Text Area', 'event_espresso' ),
1648
+	__('HTML Text Area', 'event_espresso'),
1649 1649
 
1650 1650
 	// Reference: packages/form-builder/src/constants.ts:79
1651
-	__( 'adds a textarea block that accepts text including simple HTML markup', 'event_espresso' ),
1651
+	__('adds a textarea block that accepts text including simple HTML markup', 'event_espresso'),
1652 1652
 
1653 1653
 	// Reference: packages/form-builder/src/constants.ts:84
1654
-	__( 'adds a text input that only accepts a valid email address', 'event_espresso' ),
1654
+	__('adds a text input that only accepts a valid email address', 'event_espresso'),
1655 1655
 
1656 1656
 	// Reference: packages/form-builder/src/constants.ts:87
1657
-	__( 'Email Confirmation', 'event_espresso' ),
1657
+	__('Email Confirmation', 'event_espresso'),
1658 1658
 
1659 1659
 	// Reference: packages/form-builder/src/constants.ts:92
1660
-	__( 'Password', 'event_espresso' ),
1660
+	__('Password', 'event_espresso'),
1661 1661
 
1662 1662
 	// Reference: packages/form-builder/src/constants.ts:94
1663
-	__( 'adds a text input that accepts text but masks what the user enters', 'event_espresso' ),
1663
+	__('adds a text input that accepts text but masks what the user enters', 'event_espresso'),
1664 1664
 
1665 1665
 	// Reference: packages/form-builder/src/constants.ts:97
1666
-	__( 'Password Confirmation', 'event_espresso' ),
1666
+	__('Password Confirmation', 'event_espresso'),
1667 1667
 
1668 1668
 	// Reference: packages/form-builder/src/data/useElementMutator.ts:54
1669
-	__( 'element', 'event_espresso' ),
1669
+	__('element', 'event_espresso'),
1670 1670
 
1671 1671
 	// Reference: packages/form-builder/src/data/useSectionMutator.ts:54
1672
-	__( 'section', 'event_espresso' ),
1672
+	__('section', 'event_espresso'),
1673 1673
 
1674 1674
 	// Reference: packages/form-builder/src/state/utils.ts:360
1675
-	__( 'click', 'event_espresso' ),
1675
+	__('click', 'event_espresso'),
1676 1676
 
1677 1677
 	// Reference: packages/form-builder/src/state/utils.ts:363
1678
-	__( 'checkboxes', 'event_espresso' ),
1678
+	__('checkboxes', 'event_espresso'),
1679 1679
 
1680 1680
 	// Reference: packages/form-builder/src/state/utils.ts:366
1681
-	__( 'date', 'event_espresso' ),
1681
+	__('date', 'event_espresso'),
1682 1682
 
1683 1683
 	// Reference: packages/form-builder/src/state/utils.ts:372
1684
-	__( 'day', 'event_espresso' ),
1684
+	__('day', 'event_espresso'),
1685 1685
 
1686 1686
 	// Reference: packages/form-builder/src/state/utils.ts:381
1687
-	__( 'email address', 'event_espresso' ),
1687
+	__('email address', 'event_espresso'),
1688 1688
 
1689 1689
 	// Reference: packages/form-builder/src/state/utils.ts:384
1690
-	__( 'confirm email address', 'event_espresso' ),
1690
+	__('confirm email address', 'event_espresso'),
1691 1691
 
1692 1692
 	// Reference: packages/form-builder/src/state/utils.ts:388
1693
-	__( 'month', 'event_espresso' ),
1693
+	__('month', 'event_espresso'),
1694 1694
 
1695 1695
 	// Reference: packages/form-builder/src/state/utils.ts:391
1696
-	__( 'password', 'event_espresso' ),
1696
+	__('password', 'event_espresso'),
1697 1697
 
1698 1698
 	// Reference: packages/form-builder/src/state/utils.ts:394
1699
-	__( 'confirm password', 'event_espresso' ),
1699
+	__('confirm password', 'event_espresso'),
1700 1700
 
1701 1701
 	// Reference: packages/form-builder/src/state/utils.ts:397
1702
-	__( 'radio buttons', 'event_espresso' ),
1702
+	__('radio buttons', 'event_espresso'),
1703 1703
 
1704 1704
 	// Reference: packages/form-builder/src/state/utils.ts:400
1705
-	__( 'number range', 'event_espresso' ),
1705
+	__('number range', 'event_espresso'),
1706 1706
 
1707 1707
 	// Reference: packages/form-builder/src/state/utils.ts:403
1708
-	__( 'selection dropdown', 'event_espresso' ),
1708
+	__('selection dropdown', 'event_espresso'),
1709 1709
 
1710 1710
 	// Reference: packages/form-builder/src/state/utils.ts:406
1711
-	__( 'country', 'event_espresso' ),
1711
+	__('country', 'event_espresso'),
1712 1712
 
1713 1713
 	// Reference: packages/form-builder/src/state/utils.ts:409
1714
-	__( 'multi-select dropdown', 'event_espresso' ),
1714
+	__('multi-select dropdown', 'event_espresso'),
1715 1715
 
1716 1716
 	// Reference: packages/form-builder/src/state/utils.ts:412
1717
-	__( 'state/province', 'event_espresso' ),
1717
+	__('state/province', 'event_espresso'),
1718 1718
 
1719 1719
 	// Reference: packages/form-builder/src/state/utils.ts:415
1720
-	__( 'on/off switch', 'event_espresso' ),
1720
+	__('on/off switch', 'event_espresso'),
1721 1721
 
1722 1722
 	// Reference: packages/form-builder/src/state/utils.ts:418
1723
-	__( 'reset', 'event_espresso' ),
1723
+	__('reset', 'event_espresso'),
1724 1724
 
1725 1725
 	// Reference: packages/form-builder/src/state/utils.ts:421
1726
-	__( 'phone number', 'event_espresso' ),
1726
+	__('phone number', 'event_espresso'),
1727 1727
 
1728 1728
 	// Reference: packages/form-builder/src/state/utils.ts:424
1729
-	__( 'text', 'event_espresso' ),
1729
+	__('text', 'event_espresso'),
1730 1730
 
1731 1731
 	// Reference: packages/form-builder/src/state/utils.ts:427
1732
-	__( 'simple textarea', 'event_espresso' ),
1732
+	__('simple textarea', 'event_espresso'),
1733 1733
 
1734 1734
 	// Reference: packages/form-builder/src/state/utils.ts:430
1735
-	__( 'html textarea', 'event_espresso' ),
1735
+	__('html textarea', 'event_espresso'),
1736 1736
 
1737 1737
 	// Reference: packages/form-builder/src/state/utils.ts:439
1738
-	__( 'week', 'event_espresso' ),
1738
+	__('week', 'event_espresso'),
1739 1739
 
1740 1740
 	// Reference: packages/form-builder/src/state/utils.ts:442
1741
-	__( 'year', 'event_espresso' ),
1741
+	__('year', 'event_espresso'),
1742 1742
 
1743 1743
 	// Reference: packages/form/src/adapters/WPMediaImage.tsx:13
1744
-	__( 'Select Image', 'event_espresso' ),
1744
+	__('Select Image', 'event_espresso'),
1745 1745
 
1746 1746
 	// Reference: packages/form/src/adapters/WPMediaImage.tsx:45
1747 1747
 	// Reference: packages/rich-text-editor/src/components/AdvancedTextEditor/toolbarButtons/WPMedia.tsx:11
1748 1748
 	// Reference: packages/rich-text-editor/src/rte-old/components/toolbarButtons/WPMedia.tsx:12
1749 1749
 	// Reference: packages/ui-components/src/SimpleEntityList/EntityTemplate.tsx:32
1750
-	__( 'Select', 'event_espresso' ),
1750
+	__('Select', 'event_espresso'),
1751 1751
 
1752 1752
 	// Reference: packages/form/src/renderers/FormRenderer.tsx:51
1753
-	__( 'Form Errors', 'event_espresso' ),
1753
+	__('Form Errors', 'event_espresso'),
1754 1754
 
1755 1755
 	// Reference: packages/form/src/renderers/RepeatableRenderer.tsx:36
1756 1756
 	/* translators: %d the entry number */
1757
-	__( 'Entry %d', 'event_espresso' ),
1757
+	__('Entry %d', 'event_espresso'),
1758 1758
 
1759 1759
 	// Reference: packages/helpers/src/datetimes/getStatusTextLabel.ts:11
1760 1760
 	// Reference: packages/helpers/src/tickets/getStatusTextLabel.ts:17
1761
-	__( 'sold out', 'event_espresso' ),
1761
+	__('sold out', 'event_espresso'),
1762 1762
 
1763 1763
 	// Reference: packages/helpers/src/datetimes/getStatusTextLabel.ts:14
1764 1764
 	// Reference: packages/helpers/src/tickets/getStatusTextLabel.ts:14
1765
-	__( 'expired', 'event_espresso' ),
1765
+	__('expired', 'event_espresso'),
1766 1766
 
1767 1767
 	// Reference: packages/helpers/src/datetimes/getStatusTextLabel.ts:17
1768
-	__( 'upcoming', 'event_espresso' ),
1768
+	__('upcoming', 'event_espresso'),
1769 1769
 
1770 1770
 	// Reference: packages/helpers/src/datetimes/getStatusTextLabel.ts:20
1771
-	__( 'active', 'event_espresso' ),
1771
+	__('active', 'event_espresso'),
1772 1772
 
1773 1773
 	// Reference: packages/helpers/src/datetimes/getStatusTextLabel.ts:23
1774 1774
 	// Reference: packages/helpers/src/tickets/getStatusTextLabel.ts:11
1775
-	__( 'trashed', 'event_espresso' ),
1775
+	__('trashed', 'event_espresso'),
1776 1776
 
1777 1777
 	// Reference: packages/helpers/src/datetimes/getStatusTextLabel.ts:26
1778
-	__( 'cancelled', 'event_espresso' ),
1778
+	__('cancelled', 'event_espresso'),
1779 1779
 
1780 1780
 	// Reference: packages/helpers/src/datetimes/getStatusTextLabel.ts:29
1781
-	__( 'postponed', 'event_espresso' ),
1781
+	__('postponed', 'event_espresso'),
1782 1782
 
1783 1783
 	// Reference: packages/helpers/src/datetimes/getStatusTextLabel.ts:33
1784
-	__( 'inactive', 'event_espresso' ),
1784
+	__('inactive', 'event_espresso'),
1785 1785
 
1786 1786
 	// Reference: packages/helpers/src/tickets/getStatusTextLabel.ts:20
1787
-	__( 'pending', 'event_espresso' ),
1787
+	__('pending', 'event_espresso'),
1788 1788
 
1789 1789
 	// Reference: packages/helpers/src/tickets/getStatusTextLabel.ts:23
1790
-	__( 'on sale', 'event_espresso' ),
1790
+	__('on sale', 'event_espresso'),
1791 1791
 
1792 1792
 	// Reference: packages/helpers/src/tickets/ticketVisibilityOptions.ts:6
1793
-	__( 'Where the ticket can be viewed throughout the UI. ', 'event_espresso' ),
1793
+	__('Where the ticket can be viewed throughout the UI. ', 'event_espresso'),
1794 1794
 
1795 1795
 	// Reference: packages/predicates/src/registration/statusOptions.ts:16
1796
-	__( 'Declined', 'event_espresso' ),
1796
+	__('Declined', 'event_espresso'),
1797 1797
 
1798 1798
 	// Reference: packages/predicates/src/registration/statusOptions.ts:21
1799
-	__( 'Incomplete', 'event_espresso' ),
1799
+	__('Incomplete', 'event_espresso'),
1800 1800
 
1801 1801
 	// Reference: packages/predicates/src/registration/statusOptions.ts:26
1802
-	__( 'Not Approved', 'event_espresso' ),
1802
+	__('Not Approved', 'event_espresso'),
1803 1803
 
1804 1804
 	// Reference: packages/predicates/src/registration/statusOptions.ts:31
1805
-	__( 'Pending Payment', 'event_espresso' ),
1805
+	__('Pending Payment', 'event_espresso'),
1806 1806
 
1807 1807
 	// Reference: packages/predicates/src/registration/statusOptions.ts:36
1808
-	__( 'Wait List', 'event_espresso' ),
1808
+	__('Wait List', 'event_espresso'),
1809 1809
 
1810 1810
 	// Reference: packages/predicates/src/registration/statusOptions.ts:6
1811
-	__( 'Approved', 'event_espresso' ),
1811
+	__('Approved', 'event_espresso'),
1812 1812
 
1813 1813
 	// Reference: packages/rich-text-editor/src/components/AdvancedTextEditor/toolbarButtons/WPMedia.tsx:9
1814 1814
 	// Reference: packages/rich-text-editor/src/rte-old/components/toolbarButtons/WPMedia.tsx:10
1815
-	__( 'Select media', 'event_espresso' ),
1815
+	__('Select media', 'event_espresso'),
1816 1816
 
1817 1817
 	// Reference: packages/rich-text-editor/src/components/RichTextEditor/RichTextEditor.tsx:84
1818
-	__( 'Write something…', 'event_espresso' ),
1818
+	__('Write something…', 'event_espresso'),
1819 1819
 
1820 1820
 	// Reference: packages/rich-text-editor/src/components/RichTextEditor/Toolbar/Toolbar.tsx:20
1821
-	__( 'RTE Toolbar', 'event_espresso' ),
1821
+	__('RTE Toolbar', 'event_espresso'),
1822 1822
 
1823 1823
 	// Reference: packages/rich-text-editor/src/components/RichTextEditor/Toolbar/controls/blockType/Component.tsx:11
1824
-	__( 'Normal', 'event_espresso' ),
1824
+	__('Normal', 'event_espresso'),
1825 1825
 
1826 1826
 	// Reference: packages/rich-text-editor/src/components/RichTextEditor/Toolbar/controls/blockType/Component.tsx:12
1827
-	__( 'H1', 'event_espresso' ),
1827
+	__('H1', 'event_espresso'),
1828 1828
 
1829 1829
 	// Reference: packages/rich-text-editor/src/components/RichTextEditor/Toolbar/controls/blockType/Component.tsx:13
1830
-	__( 'H2', 'event_espresso' ),
1830
+	__('H2', 'event_espresso'),
1831 1831
 
1832 1832
 	// Reference: packages/rich-text-editor/src/components/RichTextEditor/Toolbar/controls/blockType/Component.tsx:14
1833
-	__( 'H3', 'event_espresso' ),
1833
+	__('H3', 'event_espresso'),
1834 1834
 
1835 1835
 	// Reference: packages/rich-text-editor/src/components/RichTextEditor/Toolbar/controls/blockType/Component.tsx:15
1836
-	__( 'H4', 'event_espresso' ),
1836
+	__('H4', 'event_espresso'),
1837 1837
 
1838 1838
 	// Reference: packages/rich-text-editor/src/components/RichTextEditor/Toolbar/controls/blockType/Component.tsx:16
1839
-	__( 'H5', 'event_espresso' ),
1839
+	__('H5', 'event_espresso'),
1840 1840
 
1841 1841
 	// Reference: packages/rich-text-editor/src/components/RichTextEditor/Toolbar/controls/blockType/Component.tsx:17
1842
-	__( 'H6', 'event_espresso' ),
1842
+	__('H6', 'event_espresso'),
1843 1843
 
1844 1844
 	// Reference: packages/rich-text-editor/src/components/RichTextEditor/Toolbar/controls/blockType/Component.tsx:18
1845
-	__( 'Block quote', 'event_espresso' ),
1845
+	__('Block quote', 'event_espresso'),
1846 1846
 
1847 1847
 	// Reference: packages/rich-text-editor/src/components/RichTextEditor/Toolbar/controls/blockType/Component.tsx:19
1848
-	__( 'Code', 'event_espresso' ),
1848
+	__('Code', 'event_espresso'),
1849 1849
 
1850 1850
 	// Reference: packages/rich-text-editor/src/components/RichTextEditor/Toolbar/controls/colorPicker/Component.tsx:36
1851
-	__( 'Set color', 'event_espresso' ),
1851
+	__('Set color', 'event_espresso'),
1852 1852
 
1853 1853
 	// Reference: packages/rich-text-editor/src/components/RichTextEditor/Toolbar/controls/colorPicker/Component.tsx:45
1854
-	__( 'Text color', 'event_espresso' ),
1854
+	__('Text color', 'event_espresso'),
1855 1855
 
1856 1856
 	// Reference: packages/rich-text-editor/src/components/RichTextEditor/Toolbar/controls/colorPicker/Component.tsx:47
1857
-	__( 'Background color', 'event_espresso' ),
1857
+	__('Background color', 'event_espresso'),
1858 1858
 
1859 1859
 	// Reference: packages/rich-text-editor/src/components/RichTextEditor/Toolbar/controls/image/Component.tsx:39
1860
-	__( 'Add image', 'event_espresso' ),
1860
+	__('Add image', 'event_espresso'),
1861 1861
 
1862 1862
 	// Reference: packages/rich-text-editor/src/components/RichTextEditor/Toolbar/controls/image/Component.tsx:51
1863
-	__( 'Image URL', 'event_espresso' ),
1863
+	__('Image URL', 'event_espresso'),
1864 1864
 
1865 1865
 	// Reference: packages/rich-text-editor/src/components/RichTextEditor/Toolbar/controls/image/Component.tsx:55
1866
-	__( 'Alt text', 'event_espresso' ),
1866
+	__('Alt text', 'event_espresso'),
1867 1867
 
1868 1868
 	// Reference: packages/rich-text-editor/src/components/RichTextEditor/Toolbar/controls/image/Component.tsx:56
1869
-	__( 'Width', 'event_espresso' ),
1869
+	__('Width', 'event_espresso'),
1870 1870
 
1871 1871
 	// Reference: packages/rich-text-editor/src/components/RichTextEditor/Toolbar/controls/image/Component.tsx:60
1872
-	__( 'Height', 'event_espresso' ),
1872
+	__('Height', 'event_espresso'),
1873 1873
 
1874 1874
 	// Reference: packages/rich-text-editor/src/components/RichTextEditor/Toolbar/controls/link/Component.tsx:54
1875
-	__( 'Edit link', 'event_espresso' ),
1875
+	__('Edit link', 'event_espresso'),
1876 1876
 
1877 1877
 	// Reference: packages/rich-text-editor/src/components/RichTextEditor/Toolbar/controls/link/Component.tsx:64
1878
-	__( 'URL title', 'event_espresso' ),
1878
+	__('URL title', 'event_espresso'),
1879 1879
 
1880 1880
 	// Reference: packages/rich-text-editor/src/components/RichTextEditor/Toolbar/controls/list/Component.tsx:11
1881
-	__( 'Unordered list', 'event_espresso' ),
1881
+	__('Unordered list', 'event_espresso'),
1882 1882
 
1883 1883
 	// Reference: packages/rich-text-editor/src/components/RichTextEditor/Toolbar/controls/list/Component.tsx:12
1884
-	__( 'Ordered list', 'event_espresso' ),
1884
+	__('Ordered list', 'event_espresso'),
1885 1885
 
1886 1886
 	// Reference: packages/rich-text-editor/src/components/RichTextEditor/Toolbar/controls/list/Component.tsx:13
1887 1887
 	// Reference: packages/rich-text-editor/src/components/RichTextEditor/Toolbar/controls/textAlign/Component.tsx:13
1888
-	__( 'Indent', 'event_espresso' ),
1888
+	__('Indent', 'event_espresso'),
1889 1889
 
1890 1890
 	// Reference: packages/rich-text-editor/src/components/RichTextEditor/Toolbar/controls/list/Component.tsx:14
1891 1891
 	// Reference: packages/rich-text-editor/src/components/RichTextEditor/Toolbar/controls/textAlign/Component.tsx:14
1892
-	__( 'Outdent', 'event_espresso' ),
1892
+	__('Outdent', 'event_espresso'),
1893 1893
 
1894 1894
 	// Reference: packages/rich-text-editor/src/components/RichTextEditor/Toolbar/controls/textAlign/Component.tsx:11
1895
-	__( 'Unordered textalign', 'event_espresso' ),
1895
+	__('Unordered textalign', 'event_espresso'),
1896 1896
 
1897 1897
 	// Reference: packages/rich-text-editor/src/components/RichTextEditor/Toolbar/controls/textAlign/Component.tsx:12
1898
-	__( 'Ordered textalign', 'event_espresso' ),
1898
+	__('Ordered textalign', 'event_espresso'),
1899 1899
 
1900 1900
 	// Reference: packages/rich-text-editor/src/components/RichTextEditor/render/Image/Toolbar.tsx:32
1901
-	__( 'Image toolbar', 'event_espresso' ),
1901
+	__('Image toolbar', 'event_espresso'),
1902 1902
 
1903 1903
 	// Reference: packages/rich-text-editor/src/components/WithEditMode/WithEditMode.tsx:62
1904 1904
 	// Reference: packages/rich-text-editor/src/rte-old/components/RTEWithEditMode/RTEWithEditMode.tsx:35
1905
-	__( 'Visual editor', 'event_espresso' ),
1905
+	__('Visual editor', 'event_espresso'),
1906 1906
 
1907 1907
 	// Reference: packages/rich-text-editor/src/components/WithEditMode/WithEditMode.tsx:66
1908 1908
 	// Reference: packages/rich-text-editor/src/rte-old/components/RTEWithEditMode/RTEWithEditMode.tsx:39
1909
-	__( 'HTML editor', 'event_espresso' ),
1909
+	__('HTML editor', 'event_espresso'),
1910 1910
 
1911 1911
 	// Reference: packages/rich-text-editor/src/rte-old/components/toolbarButtons/WPMedia.tsx:68
1912
-	__( 'Add Media', 'event_espresso' ),
1912
+	__('Add Media', 'event_espresso'),
1913 1913
 
1914 1914
 	// Reference: packages/tpc/src/buttons/AddPriceModifierButton.tsx:16
1915
-	__( 'add new price modifier after this row', 'event_espresso' ),
1915
+	__('add new price modifier after this row', 'event_espresso'),
1916 1916
 
1917 1917
 	// Reference: packages/tpc/src/buttons/DeleteAllPricesButton.tsx:14
1918
-	__( 'Delete all prices', 'event_espresso' ),
1918
+	__('Delete all prices', 'event_espresso'),
1919 1919
 
1920 1920
 	// Reference: packages/tpc/src/buttons/DeleteAllPricesButton.tsx:27
1921
-	__( 'Are you sure you want to delete all of this ticket\'s prices and make it free? This action is permanent and can not be undone.', 'event_espresso' ),
1921
+	__('Are you sure you want to delete all of this ticket\'s prices and make it free? This action is permanent and can not be undone.', 'event_espresso'),
1922 1922
 
1923 1923
 	// Reference: packages/tpc/src/buttons/DeleteAllPricesButton.tsx:31
1924
-	__( 'Delete all prices?', 'event_espresso' ),
1924
+	__('Delete all prices?', 'event_espresso'),
1925 1925
 
1926 1926
 	// Reference: packages/tpc/src/buttons/DeletePriceModifierButton.tsx:12
1927
-	__( 'delete price modifier', 'event_espresso' ),
1927
+	__('delete price modifier', 'event_espresso'),
1928 1928
 
1929 1929
 	// Reference: packages/tpc/src/buttons/ReverseCalculateButton.tsx:14
1930
-	__( 'Ticket base price is being reverse calculated from bottom to top starting with the ticket total. Entering a new ticket total will reverse calculate the ticket base price after applying all price modifiers in reverse. Click to turn off reverse calculations', 'event_espresso' ),
1930
+	__('Ticket base price is being reverse calculated from bottom to top starting with the ticket total. Entering a new ticket total will reverse calculate the ticket base price after applying all price modifiers in reverse. Click to turn off reverse calculations', 'event_espresso'),
1931 1931
 
1932 1932
 	// Reference: packages/tpc/src/buttons/ReverseCalculateButton.tsx:17
1933
-	__( 'Ticket total is being calculated normally from top to bottom starting from the base price. Entering a new ticket base price will recalculate the ticket total after applying all price modifiers. Click to turn on reverse calculations', 'event_espresso' ),
1933
+	__('Ticket total is being calculated normally from top to bottom starting from the base price. Entering a new ticket base price will recalculate the ticket total after applying all price modifiers. Click to turn on reverse calculations', 'event_espresso'),
1934 1934
 
1935 1935
 	// Reference: packages/tpc/src/buttons/ReverseCalculateButton.tsx:21
1936
-	__( 'Disable reverse calculate', 'event_espresso' ),
1936
+	__('Disable reverse calculate', 'event_espresso'),
1937 1937
 
1938 1938
 	// Reference: packages/tpc/src/buttons/ReverseCalculateButton.tsx:21
1939
-	__( 'Enable reverse calculate', 'event_espresso' ),
1939
+	__('Enable reverse calculate', 'event_espresso'),
1940 1940
 
1941 1941
 	// Reference: packages/tpc/src/buttons/TicketPriceCalculatorButton.tsx:28
1942
-	__( 'ticket price calculator', 'event_espresso' ),
1942
+	__('ticket price calculator', 'event_espresso'),
1943 1943
 
1944 1944
 	// Reference: packages/tpc/src/buttons/taxes/AddDefaultTaxesButton.tsx:9
1945
-	__( 'Add default taxes', 'event_espresso' ),
1945
+	__('Add default taxes', 'event_espresso'),
1946 1946
 
1947 1947
 	// Reference: packages/tpc/src/buttons/taxes/RemoveTaxesButton.tsx:10
1948
-	__( 'Are you sure you want to remove all of this ticket\'s taxes?', 'event_espresso' ),
1948
+	__('Are you sure you want to remove all of this ticket\'s taxes?', 'event_espresso'),
1949 1949
 
1950 1950
 	// Reference: packages/tpc/src/buttons/taxes/RemoveTaxesButton.tsx:14
1951
-	__( 'Remove all taxes?', 'event_espresso' ),
1951
+	__('Remove all taxes?', 'event_espresso'),
1952 1952
 
1953 1953
 	// Reference: packages/tpc/src/buttons/taxes/RemoveTaxesButton.tsx:7
1954
-	__( 'Remove taxes', 'event_espresso' ),
1954
+	__('Remove taxes', 'event_espresso'),
1955 1955
 
1956 1956
 	// Reference: packages/tpc/src/components/AddDefaultPricesButton.tsx:9
1957
-	__( 'Add default prices', 'event_espresso' ),
1957
+	__('Add default prices', 'event_espresso'),
1958 1958
 
1959 1959
 	// Reference: packages/tpc/src/components/DefaultPricesInfo.tsx:29
1960
-	__( 'Modify default prices.', 'event_espresso' ),
1960
+	__('Modify default prices.', 'event_espresso'),
1961 1961
 
1962 1962
 	// Reference: packages/tpc/src/components/DefaultTaxesInfo.tsx:29
1963
-	__( 'New default taxes are available. Click the - Add default taxes - button to add them now.', 'event_espresso' ),
1963
+	__('New default taxes are available. Click the - Add default taxes - button to add them now.', 'event_espresso'),
1964 1964
 
1965 1965
 	// Reference: packages/tpc/src/components/LockedTicketsBanner.tsx:12
1966 1966
 	// Reference: packages/tpc/src/hooks/useLockedTicketAction.ts:74
1967
-	__( 'Price editing is disabled!', 'event_espresso' ),
1967
+	__('Price editing is disabled!', 'event_espresso'),
1968 1968
 
1969 1969
 	// Reference: packages/tpc/src/components/NoPriceTypesBanner.tsx:12
1970
-	__( 'One or more price types are missing. Maybe they were placed in the trash?', 'event_espresso' ),
1970
+	__('One or more price types are missing. Maybe they were placed in the trash?', 'event_espresso'),
1971 1971
 
1972 1972
 	// Reference: packages/tpc/src/components/NoPriceTypesBanner.tsx:17
1973 1973
 	/* translators: %s link to price types admin */
1974
-	__( 'Go to the%sto restore (untrash) your price types and/or create some new ones.', 'event_espresso' ),
1974
+	__('Go to the%sto restore (untrash) your price types and/or create some new ones.', 'event_espresso'),
1975 1975
 
1976 1976
 	// Reference: packages/tpc/src/components/NoPriceTypesBanner.tsx:18
1977
-	__( 'price types admin page', 'event_espresso' ),
1977
+	__('price types admin page', 'event_espresso'),
1978 1978
 
1979 1979
 	// Reference: packages/tpc/src/components/NoPriceTypesBanner.tsx:26
1980
-	__( 'Missing Price Types!', 'event_espresso' ),
1980
+	__('Missing Price Types!', 'event_espresso'),
1981 1981
 
1982 1982
 	// Reference: packages/tpc/src/components/NoPricesBanner.tsx:14
1983
-	__( 'This Ticket is Currently Free', 'event_espresso' ),
1983
+	__('This Ticket is Currently Free', 'event_espresso'),
1984 1984
 
1985 1985
 	// Reference: packages/tpc/src/components/NoPricesBanner.tsx:21
1986 1986
 	/* translators: %s default prices */
1987
-	__( 'Click the button below to load your %s into the calculator.', 'event_espresso' ),
1987
+	__('Click the button below to load your %s into the calculator.', 'event_espresso'),
1988 1988
 
1989 1989
 	// Reference: packages/tpc/src/components/NoPricesBanner.tsx:22
1990
-	__( 'default prices', 'event_espresso' ),
1990
+	__('default prices', 'event_espresso'),
1991 1991
 
1992 1992
 	// Reference: packages/tpc/src/components/NoPricesBanner.tsx:29
1993
-	__( 'Additional ticket price modifiers can be added or removed.', 'event_espresso' ),
1993
+	__('Additional ticket price modifiers can be added or removed.', 'event_espresso'),
1994 1994
 
1995 1995
 	// Reference: packages/tpc/src/components/NoPricesBanner.tsx:31
1996
-	__( 'Click the save button below to assign which dates this ticket will be available for purchase on.', 'event_espresso' ),
1996
+	__('Click the save button below to assign which dates this ticket will be available for purchase on.', 'event_espresso'),
1997 1997
 
1998 1998
 	// Reference: packages/tpc/src/components/TicketPriceCalculatorModal.tsx:22
1999 1999
 	// Reference: packages/ui-components/src/Confirm/ConfirmClose.tsx:7
2000 2000
 	// Reference: packages/ui-components/src/Confirm/useConfirmWithButton.tsx:10
2001 2001
 	// Reference: packages/ui-components/src/Confirm/useConfirmationDialog.tsx:52
2002
-	__( 'Changes will be lost if you proceed.', 'event_espresso' ),
2002
+	__('Changes will be lost if you proceed.', 'event_espresso'),
2003 2003
 
2004 2004
 	// Reference: packages/tpc/src/components/TicketPriceCalculatorModal.tsx:33
2005 2005
 	/* translators: %s ticket name */
2006
-	__( 'Price Calculator for Ticket: %s', 'event_espresso' ),
2006
+	__('Price Calculator for Ticket: %s', 'event_espresso'),
2007 2007
 
2008 2008
 	// Reference: packages/tpc/src/components/table/useFooterRowGenerator.tsx:48
2009
-	__( 'Total', 'event_espresso' ),
2009
+	__('Total', 'event_espresso'),
2010 2010
 
2011 2011
 	// Reference: packages/tpc/src/components/table/useFooterRowGenerator.tsx:57
2012
-	__( 'ticket total', 'event_espresso' ),
2012
+	__('ticket total', 'event_espresso'),
2013 2013
 
2014 2014
 	// Reference: packages/tpc/src/components/table/useHeaderRowGenerator.ts:29
2015
-	__( 'Order', 'event_espresso' ),
2015
+	__('Order', 'event_espresso'),
2016 2016
 
2017 2017
 	// Reference: packages/tpc/src/components/table/useHeaderRowGenerator.ts:35
2018
-	__( 'Price Type', 'event_espresso' ),
2018
+	__('Price Type', 'event_espresso'),
2019 2019
 
2020 2020
 	// Reference: packages/tpc/src/components/table/useHeaderRowGenerator.ts:41
2021
-	__( 'Label', 'event_espresso' ),
2021
+	__('Label', 'event_espresso'),
2022 2022
 
2023 2023
 	// Reference: packages/tpc/src/components/table/useHeaderRowGenerator.ts:53
2024
-	__( 'Amount', 'event_espresso' ),
2024
+	__('Amount', 'event_espresso'),
2025 2025
 
2026 2026
 	// Reference: packages/tpc/src/hooks/useLockedTicketAction.ts:22
2027
-	__( 'Copy ticket', 'event_espresso' ),
2027
+	__('Copy ticket', 'event_espresso'),
2028 2028
 
2029 2029
 	// Reference: packages/tpc/src/hooks/useLockedTicketAction.ts:26
2030
-	__( 'Copy and archive this ticket', 'event_espresso' ),
2030
+	__('Copy and archive this ticket', 'event_espresso'),
2031 2031
 
2032 2032
 	// Reference: packages/tpc/src/hooks/useLockedTicketAction.ts:29
2033
-	__( 'OK', 'event_espresso' ),
2033
+	__('OK', 'event_espresso'),
2034 2034
 
2035 2035
 	// Reference: packages/tpc/src/inputs/PriceAmountInput.tsx:34
2036
-	__( 'amount', 'event_espresso' ),
2036
+	__('amount', 'event_espresso'),
2037 2037
 
2038 2038
 	// Reference: packages/tpc/src/inputs/PriceAmountInput.tsx:46
2039
-	__( 'amount…', 'event_espresso' ),
2039
+	__('amount…', 'event_espresso'),
2040 2040
 
2041 2041
 	// Reference: packages/tpc/src/inputs/PriceDescriptionInput.tsx:14
2042
-	__( 'description…', 'event_espresso' ),
2042
+	__('description…', 'event_espresso'),
2043 2043
 
2044 2044
 	// Reference: packages/tpc/src/inputs/PriceDescriptionInput.tsx:9
2045
-	__( 'price description', 'event_espresso' ),
2045
+	__('price description', 'event_espresso'),
2046 2046
 
2047 2047
 	// Reference: packages/tpc/src/inputs/PriceIdInput.tsx:6
2048
-	__( 'price id', 'event_espresso' ),
2048
+	__('price id', 'event_espresso'),
2049 2049
 
2050 2050
 	// Reference: packages/tpc/src/inputs/PriceNameInput.tsx:13
2051
-	__( 'label…', 'event_espresso' ),
2051
+	__('label…', 'event_espresso'),
2052 2052
 
2053 2053
 	// Reference: packages/tpc/src/inputs/PriceNameInput.tsx:8
2054
-	__( 'price name', 'event_espresso' ),
2054
+	__('price name', 'event_espresso'),
2055 2055
 
2056 2056
 	// Reference: packages/tpc/src/inputs/PriceOrderInput.tsx:14
2057
-	__( 'price order', 'event_espresso' ),
2057
+	__('price order', 'event_espresso'),
2058 2058
 
2059 2059
 	// Reference: packages/tpc/src/utils/constants.ts:8
2060
-	__( 'Ticket price modifications are blocked for Tickets that have already been sold to registrants, because doing so would negatively affect internal accounting for the event. If you still need to modify ticket prices, then create a copy of those tickets, edit the prices for the new tickets, and then trash the old tickets.', 'event_espresso' ),
2060
+	__('Ticket price modifications are blocked for Tickets that have already been sold to registrants, because doing so would negatively affect internal accounting for the event. If you still need to modify ticket prices, then create a copy of those tickets, edit the prices for the new tickets, and then trash the old tickets.', 'event_espresso'),
2061 2061
 
2062 2062
 	// Reference: packages/ui-components/src/ActiveFilters/ActiveFilters.tsx:8
2063
-	__( 'active filters:', 'event_espresso' ),
2063
+	__('active filters:', 'event_espresso'),
2064 2064
 
2065 2065
 	// Reference: packages/ui-components/src/ActiveFilters/FilterTag/index.tsx:15
2066 2066
 	/* translators: %s filter name */
2067
-	__( 'remove filter - %s', 'event_espresso' ),
2067
+	__('remove filter - %s', 'event_espresso'),
2068 2068
 
2069 2069
 	// Reference: packages/ui-components/src/Address/Address.tsx:105
2070
-	__( 'Country:', 'event_espresso' ),
2070
+	__('Country:', 'event_espresso'),
2071 2071
 
2072 2072
 	// Reference: packages/ui-components/src/Address/Address.tsx:113
2073
-	__( 'Zip:', 'event_espresso' ),
2073
+	__('Zip:', 'event_espresso'),
2074 2074
 
2075 2075
 	// Reference: packages/ui-components/src/Address/Address.tsx:81
2076
-	__( 'Address:', 'event_espresso' ),
2076
+	__('Address:', 'event_espresso'),
2077 2077
 
2078 2078
 	// Reference: packages/ui-components/src/Address/Address.tsx:89
2079
-	__( 'City:', 'event_espresso' ),
2079
+	__('City:', 'event_espresso'),
2080 2080
 
2081 2081
 	// Reference: packages/ui-components/src/Address/Address.tsx:97
2082
-	__( 'State:', 'event_espresso' ),
2082
+	__('State:', 'event_espresso'),
2083 2083
 
2084 2084
 	// Reference: packages/ui-components/src/CalendarDateRange/CalendarDateRange.tsx:37
2085
-	__( 'to', 'event_espresso' ),
2085
+	__('to', 'event_espresso'),
2086 2086
 
2087 2087
 	// Reference: packages/ui-components/src/CalendarPageDate/CalendarPageDate.tsx:54
2088
-	__( 'TO', 'event_espresso' ),
2088
+	__('TO', 'event_espresso'),
2089 2089
 
2090 2090
 	// Reference: packages/ui-components/src/ColorPicker/ColorPicker.tsx:60
2091
-	__( 'Custom color', 'event_espresso' ),
2091
+	__('Custom color', 'event_espresso'),
2092 2092
 
2093 2093
 	// Reference: packages/ui-components/src/ColorPicker/Swatch.tsx:23
2094 2094
 	/* translators: color name */
2095
-	__( 'Color: %s', 'event_espresso' ),
2095
+	__('Color: %s', 'event_espresso'),
2096 2096
 
2097 2097
 	// Reference: packages/ui-components/src/ColorPicker/constants.ts:13
2098
-	__( 'Cyan bluish gray', 'event_espresso' ),
2098
+	__('Cyan bluish gray', 'event_espresso'),
2099 2099
 
2100 2100
 	// Reference: packages/ui-components/src/ColorPicker/constants.ts:17
2101
-	__( 'White', 'event_espresso' ),
2101
+	__('White', 'event_espresso'),
2102 2102
 
2103 2103
 	// Reference: packages/ui-components/src/ColorPicker/constants.ts:21
2104
-	__( 'Pale pink', 'event_espresso' ),
2104
+	__('Pale pink', 'event_espresso'),
2105 2105
 
2106 2106
 	// Reference: packages/ui-components/src/ColorPicker/constants.ts:25
2107
-	__( 'Vivid red', 'event_espresso' ),
2107
+	__('Vivid red', 'event_espresso'),
2108 2108
 
2109 2109
 	// Reference: packages/ui-components/src/ColorPicker/constants.ts:29
2110
-	__( 'Luminous vivid orange', 'event_espresso' ),
2110
+	__('Luminous vivid orange', 'event_espresso'),
2111 2111
 
2112 2112
 	// Reference: packages/ui-components/src/ColorPicker/constants.ts:33
2113
-	__( 'Luminous vivid amber', 'event_espresso' ),
2113
+	__('Luminous vivid amber', 'event_espresso'),
2114 2114
 
2115 2115
 	// Reference: packages/ui-components/src/ColorPicker/constants.ts:37
2116
-	__( 'Light green cyan', 'event_espresso' ),
2116
+	__('Light green cyan', 'event_espresso'),
2117 2117
 
2118 2118
 	// Reference: packages/ui-components/src/ColorPicker/constants.ts:41
2119
-	__( 'Vivid green cyan', 'event_espresso' ),
2119
+	__('Vivid green cyan', 'event_espresso'),
2120 2120
 
2121 2121
 	// Reference: packages/ui-components/src/ColorPicker/constants.ts:45
2122
-	__( 'Pale cyan blue', 'event_espresso' ),
2122
+	__('Pale cyan blue', 'event_espresso'),
2123 2123
 
2124 2124
 	// Reference: packages/ui-components/src/ColorPicker/constants.ts:49
2125
-	__( 'Vivid cyan blue', 'event_espresso' ),
2125
+	__('Vivid cyan blue', 'event_espresso'),
2126 2126
 
2127 2127
 	// Reference: packages/ui-components/src/ColorPicker/constants.ts:53
2128
-	__( 'Vivid purple', 'event_espresso' ),
2128
+	__('Vivid purple', 'event_espresso'),
2129 2129
 
2130 2130
 	// Reference: packages/ui-components/src/ColorPicker/constants.ts:9
2131
-	__( 'Black', 'event_espresso' ),
2131
+	__('Black', 'event_espresso'),
2132 2132
 
2133 2133
 	// Reference: packages/ui-components/src/Confirm/ConfirmClose.tsx:8
2134 2134
 	// Reference: packages/ui-components/src/Modal/ModalWithAlert.tsx:24
2135
-	__( 'Are you sure you want to close this?', 'event_espresso' ),
2135
+	__('Are you sure you want to close this?', 'event_espresso'),
2136 2136
 
2137 2137
 	// Reference: packages/ui-components/src/Confirm/ConfirmClose.tsx:9
2138 2138
 	// Reference: packages/ui-components/src/Modal/ModalWithAlert.tsx:25
2139
-	__( 'Yes, discard changes', 'event_espresso' ),
2139
+	__('Yes, discard changes', 'event_espresso'),
2140 2140
 
2141 2141
 	// Reference: packages/ui-components/src/Confirm/ConfirmDelete.tsx:7
2142
-	__( 'Are you sure you want to delete this?', 'event_espresso' ),
2142
+	__('Are you sure you want to delete this?', 'event_espresso'),
2143 2143
 
2144 2144
 	// Reference: packages/ui-components/src/Confirm/useConfirmWithButton.tsx:11
2145
-	__( 'Please confirm this action.', 'event_espresso' ),
2145
+	__('Please confirm this action.', 'event_espresso'),
2146 2146
 
2147 2147
 	// Reference: packages/ui-components/src/Confirm/useConfirmationDialog.tsx:39
2148
-	__( 'cancel', 'event_espresso' ),
2148
+	__('cancel', 'event_espresso'),
2149 2149
 
2150 2150
 	// Reference: packages/ui-components/src/Confirm/useConfirmationDialog.tsx:40
2151
-	__( 'confirm', 'event_espresso' ),
2151
+	__('confirm', 'event_espresso'),
2152 2152
 
2153 2153
 	// Reference: packages/ui-components/src/CurrencyDisplay/CurrencyDisplay.tsx:34
2154
-	__( 'free', 'event_espresso' ),
2154
+	__('free', 'event_espresso'),
2155 2155
 
2156 2156
 	// Reference: packages/ui-components/src/DateTimeRangePicker/DateTimeRangePicker.tsx:117
2157 2157
 	// Reference: packages/ui-components/src/Popover/PopoverForm/PopoverForm.tsx:44
2158
-	__( 'save', 'event_espresso' ),
2158
+	__('save', 'event_espresso'),
2159 2159
 
2160 2160
 	// Reference: packages/ui-components/src/DebugInfo/DebugInfo.tsx:36
2161
-	__( 'Hide Debug Info', 'event_espresso' ),
2161
+	__('Hide Debug Info', 'event_espresso'),
2162 2162
 
2163 2163
 	// Reference: packages/ui-components/src/DebugInfo/DebugInfo.tsx:36
2164
-	__( 'Show Debug Info', 'event_espresso' ),
2164
+	__('Show Debug Info', 'event_espresso'),
2165 2165
 
2166 2166
 	// Reference: packages/ui-components/src/EditDateRangeButton/EditDateRangeButton.tsx:49
2167
-	__( 'Edit Start and End Dates and Times', 'event_espresso' ),
2167
+	__('Edit Start and End Dates and Times', 'event_espresso'),
2168 2168
 
2169 2169
 	// Reference: packages/ui-components/src/EntityActionsMenu/entityMenuItems/CopyEntity.tsx:8
2170
-	__( 'copy', 'event_espresso' ),
2170
+	__('copy', 'event_espresso'),
2171 2171
 
2172 2172
 	// Reference: packages/ui-components/src/EntityActionsMenu/entityMenuItems/EditEntity.tsx:8
2173
-	__( 'edit', 'event_espresso' ),
2173
+	__('edit', 'event_espresso'),
2174 2174
 
2175 2175
 	// Reference: packages/ui-components/src/EntityActionsMenu/entityMenuItems/TrashEntity.tsx:8
2176
-	__( 'trash', 'event_espresso' ),
2176
+	__('trash', 'event_espresso'),
2177 2177
 
2178 2178
 	// Reference: packages/ui-components/src/EntityActionsMenu/entityMenuItems/Untrash.tsx:8
2179
-	__( 'untrash', 'event_espresso' ),
2179
+	__('untrash', 'event_espresso'),
2180 2180
 
2181 2181
 	// Reference: packages/ui-components/src/EntityList/EntityList.tsx:23
2182
-	__( 'OOPS!', 'event_espresso' ),
2182
+	__('OOPS!', 'event_espresso'),
2183 2183
 
2184 2184
 	// Reference: packages/ui-components/src/EntityList/EntityList.tsx:23
2185
-	__( 'Error Loading Entites List', 'event_espresso' ),
2185
+	__('Error Loading Entites List', 'event_espresso'),
2186 2186
 
2187 2187
 	// Reference: packages/ui-components/src/EntityList/RegistrationsLink/index.tsx:12
2188
-	__( 'click to open the registrations admin page in a new tab or window', 'event_espresso' ),
2188
+	__('click to open the registrations admin page in a new tab or window', 'event_espresso'),
2189 2189
 
2190 2190
 	// Reference: packages/ui-components/src/EntityList/filterBar/buttons/CardViewFilterButton.tsx:22
2191
-	__( 'card view', 'event_espresso' ),
2191
+	__('card view', 'event_espresso'),
2192 2192
 
2193 2193
 	// Reference: packages/ui-components/src/EntityList/filterBar/buttons/TableViewFilterButton.tsx:21
2194
-	__( 'table view', 'event_espresso' ),
2194
+	__('table view', 'event_espresso'),
2195 2195
 
2196 2196
 	// Reference: packages/ui-components/src/EntityList/filterBar/buttons/ToggleBulkActionsButton.tsx:8
2197
-	__( 'hide bulk actions', 'event_espresso' ),
2197
+	__('hide bulk actions', 'event_espresso'),
2198 2198
 
2199 2199
 	// Reference: packages/ui-components/src/EntityList/filterBar/buttons/ToggleBulkActionsButton.tsx:8
2200
-	__( 'show bulk actions', 'event_espresso' ),
2200
+	__('show bulk actions', 'event_espresso'),
2201 2201
 
2202 2202
 	// Reference: packages/ui-components/src/EntityList/filterBar/buttons/ToggleFiltersButton.tsx:23
2203
-	__( 'filters', 'event_espresso' ),
2203
+	__('filters', 'event_espresso'),
2204 2204
 
2205 2205
 	// Reference: packages/ui-components/src/Legend/ToggleLegendButton.tsx:38
2206
-	__( 'legend', 'event_espresso' ),
2206
+	__('legend', 'event_espresso'),
2207 2207
 
2208 2208
 	// Reference: packages/ui-components/src/LoadingNotice/LoadingNotice.tsx:11
2209
-	__( 'loading…', 'event_espresso' ),
2209
+	__('loading…', 'event_espresso'),
2210 2210
 
2211 2211
 	// Reference: packages/ui-components/src/Modal/Modal.tsx:59
2212
-	__( 'close modal', 'event_espresso' ),
2212
+	__('close modal', 'event_espresso'),
2213 2213
 
2214 2214
 	// Reference: packages/ui-components/src/Pagination/ItemRender.tsx:10
2215
-	__( 'jump to previous', 'event_espresso' ),
2215
+	__('jump to previous', 'event_espresso'),
2216 2216
 
2217 2217
 	// Reference: packages/ui-components/src/Pagination/ItemRender.tsx:11
2218
-	__( 'jump to next', 'event_espresso' ),
2218
+	__('jump to next', 'event_espresso'),
2219 2219
 
2220 2220
 	// Reference: packages/ui-components/src/Pagination/ItemRender.tsx:12
2221
-	__( 'page', 'event_espresso' ),
2221
+	__('page', 'event_espresso'),
2222 2222
 
2223 2223
 	// Reference: packages/ui-components/src/Pagination/ItemRender.tsx:8
2224
-	__( 'previous', 'event_espresso' ),
2224
+	__('previous', 'event_espresso'),
2225 2225
 
2226 2226
 	// Reference: packages/ui-components/src/Pagination/ItemRender.tsx:9
2227
-	__( 'next', 'event_espresso' ),
2227
+	__('next', 'event_espresso'),
2228 2228
 
2229 2229
 	// Reference: packages/ui-components/src/Pagination/PerPage.tsx:45
2230 2230
 	/* translators: %1$d is first item #, %2$d is last item #, %3$d is total items, ex: 20-30 of 100 items */
2231
-	__( '%1$d-%2$d of %3$d items', 'event_espresso' ),
2231
+	__('%1$d-%2$d of %3$d items', 'event_espresso'),
2232 2232
 
2233 2233
 	// Reference: packages/ui-components/src/Pagination/PerPage.tsx:54
2234
-	__( 'items per page', 'event_espresso' ),
2234
+	__('items per page', 'event_espresso'),
2235 2235
 
2236 2236
 	// Reference: packages/ui-components/src/Pagination/constants.ts:11
2237 2237
 	/* translators: %s is per page value */
2238
-	__( '%s / page', 'event_espresso' ),
2238
+	__('%s / page', 'event_espresso'),
2239 2239
 
2240 2240
 	// Reference: packages/ui-components/src/Pagination/constants.ts:12
2241
-	__( 'show all', 'event_espresso' ),
2241
+	__('show all', 'event_espresso'),
2242 2242
 
2243 2243
 	// Reference: packages/ui-components/src/Pagination/constants.ts:15
2244
-	__( 'Next Page', 'event_espresso' ),
2244
+	__('Next Page', 'event_espresso'),
2245 2245
 
2246 2246
 	// Reference: packages/ui-components/src/Pagination/constants.ts:16
2247
-	__( 'Previous Page', 'event_espresso' ),
2247
+	__('Previous Page', 'event_espresso'),
2248 2248
 
2249 2249
 	// Reference: packages/ui-components/src/PercentSign/index.tsx:10
2250
-	__( '%', 'event_espresso' ),
2250
+	__('%', 'event_espresso'),
2251 2251
 
2252 2252
 	// Reference: packages/ui-components/src/SimpleEntityList/EntityOptionsRow/index.tsx:31
2253 2253
 	/* translators: entity type to select */
2254
-	__( 'Select an existing %s to use as a template.', 'event_espresso' ),
2254
+	__('Select an existing %s to use as a template.', 'event_espresso'),
2255 2255
 
2256 2256
 	// Reference: packages/ui-components/src/SimpleEntityList/EntityOptionsRow/index.tsx:38
2257
-	__( 'or', 'event_espresso' ),
2257
+	__('or', 'event_espresso'),
2258 2258
 
2259 2259
 	// Reference: packages/ui-components/src/SimpleEntityList/EntityOptionsRow/index.tsx:43
2260 2260
 	/* translators: entity type to add */
2261
-	__( 'Add a new %s and insert details manually', 'event_espresso' ),
2261
+	__('Add a new %s and insert details manually', 'event_espresso'),
2262 2262
 
2263 2263
 	// Reference: packages/ui-components/src/SimpleEntityList/EntityOptionsRow/index.tsx:48
2264
-	__( 'Add New', 'event_espresso' ),
2264
+	__('Add New', 'event_espresso'),
2265 2265
 
2266 2266
 	// Reference: packages/ui-components/src/Stepper/buttons/Next.tsx:8
2267
-	__( 'Next', 'event_espresso' ),
2267
+	__('Next', 'event_espresso'),
2268 2268
 
2269 2269
 	// Reference: packages/ui-components/src/Stepper/buttons/Previous.tsx:8
2270
-	__( 'Previous', 'event_espresso' ),
2270
+	__('Previous', 'event_espresso'),
2271 2271
 
2272 2272
 	// Reference: packages/ui-components/src/Steps/Steps.tsx:31
2273
-	__( 'Steps', 'event_espresso' ),
2273
+	__('Steps', 'event_espresso'),
2274 2274
 
2275 2275
 	// Reference: packages/ui-components/src/TabbableText/index.tsx:21
2276
-	__( 'click to edit…', 'event_espresso' ),
2276
+	__('click to edit…', 'event_espresso'),
2277 2277
 
2278 2278
 	// Reference: packages/ui-components/src/TimezoneTimeInfo/Content.tsx:14
2279
-	__( 'The Website\'s Time Zone', 'event_espresso' ),
2279
+	__('The Website\'s Time Zone', 'event_espresso'),
2280 2280
 
2281 2281
 	// Reference: packages/ui-components/src/TimezoneTimeInfo/Content.tsx:19
2282
-	__( 'UTC (Greenwich Mean Time)', 'event_espresso' ),
2282
+	__('UTC (Greenwich Mean Time)', 'event_espresso'),
2283 2283
 
2284 2284
 	// Reference: packages/ui-components/src/TimezoneTimeInfo/Content.tsx:9
2285
-	__( 'Your Local Time Zone', 'event_espresso' ),
2285
+	__('Your Local Time Zone', 'event_espresso'),
2286 2286
 
2287 2287
 	// Reference: packages/ui-components/src/TimezoneTimeInfo/TimezoneTimeInfo.tsx:25
2288
-	__( 'click for timezone information', 'event_espresso' ),
2288
+	__('click for timezone information', 'event_espresso'),
2289 2289
 
2290 2290
 	// Reference: packages/ui-components/src/TimezoneTimeInfo/TimezoneTimeInfo.tsx:30
2291
-	__( 'This Date Converted To:', 'event_espresso' ),
2291
+	__('This Date Converted To:', 'event_espresso'),
2292 2292
 
2293 2293
 	// Reference: packages/ui-components/src/VenueSelector/VenueSelector.tsx:120
2294
-	__( 'Add New Venue', 'event_espresso' ),
2294
+	__('Add New Venue', 'event_espresso'),
2295 2295
 
2296 2296
 	// Reference: packages/ui-components/src/VenueSelector/VenueSelector.tsx:36
2297
-	__( '~ no venue ~', 'event_espresso' ),
2297
+	__('~ no venue ~', 'event_espresso'),
2298 2298
 
2299 2299
 	// Reference: packages/ui-components/src/VenueSelector/VenueSelector.tsx:43
2300
-	__( 'assign venue…', 'event_espresso' ),
2300
+	__('assign venue…', 'event_espresso'),
2301 2301
 
2302 2302
 	// Reference: packages/ui-components/src/VenueSelector/VenueSelector.tsx:44
2303
-	__( 'click to select a venue…', 'event_espresso' ),
2303
+	__('click to select a venue…', 'event_espresso'),
2304 2304
 
2305 2305
 	// Reference: packages/ui-components/src/bulkEdit/BulkActions.tsx:51
2306
-	__( 'select all', 'event_espresso' ),
2306
+	__('select all', 'event_espresso'),
2307 2307
 
2308 2308
 	// Reference: packages/ui-components/src/bulkEdit/BulkActions.tsx:54
2309
-	__( 'apply', 'event_espresso' )
2309
+	__('apply', 'event_espresso')
2310 2310
 );
2311 2311
 /* THIS IS THE END OF THE GENERATED FILE */
Please login to merge, or discard this patch.
languages/ee-js.pot.php 1 patch
Spacing   +101 added lines, -101 removed lines patch added patch discarded remove patch
@@ -2,306 +2,306 @@
 block discarded – undo
2 2
 /* THIS IS A GENERATED FILE. DO NOT EDIT DIRECTLY. */
3 3
 $generated_i18n_strings = array(
4 4
 	// Reference: assets/src/blocks/event-attendees/edit.js:279
5
-	__( 'To get started, select what event you want to show attendees from in the block settings.', 'event_espresso' ),
5
+	__('To get started, select what event you want to show attendees from in the block settings.', 'event_espresso'),
6 6
 
7 7
 	// Reference: assets/src/blocks/event-attendees/edit.js:290
8
-	__( 'There are no attendees for selected options.', 'event_espresso' ),
8
+	__('There are no attendees for selected options.', 'event_espresso'),
9 9
 
10 10
 	// Reference: assets/src/blocks/event-attendees/edit.js:334
11
-	__( 'Filter By Settings', 'event_espresso' ),
11
+	__('Filter By Settings', 'event_espresso'),
12 12
 
13 13
 	// Reference: assets/src/blocks/event-attendees/edit.js:362
14
-	__( 'Select Registration Status', 'event_espresso' ),
14
+	__('Select Registration Status', 'event_espresso'),
15 15
 
16 16
 	// Reference: assets/src/blocks/event-attendees/edit.js:368
17
-	__( 'Number of Attendees to Display:', 'event_espresso' ),
17
+	__('Number of Attendees to Display:', 'event_espresso'),
18 18
 
19 19
 	// Reference: assets/src/blocks/event-attendees/edit.js:377
20
-	_n_noop( 'Used to adjust the number of attendees displayed (There is %d total attendee for the current filter settings).', 'Used to adjust the number of attendees displayed (There are %d total attendees for the current filter settings).', 'event_espresso' ),
20
+	_n_noop('Used to adjust the number of attendees displayed (There is %d total attendee for the current filter settings).', 'Used to adjust the number of attendees displayed (There are %d total attendees for the current filter settings).', 'event_espresso'),
21 21
 
22 22
 	// Reference: assets/src/blocks/event-attendees/edit.js:387
23
-	__( 'Order Attendees by:', 'event_espresso' ),
23
+	__('Order Attendees by:', 'event_espresso'),
24 24
 
25 25
 	// Reference: assets/src/blocks/event-attendees/edit.js:391
26
-	__( 'Attendee id', 'event_espresso' ),
26
+	__('Attendee id', 'event_espresso'),
27 27
 
28 28
 	// Reference: assets/src/blocks/event-attendees/edit.js:395
29
-	__( 'Last name only', 'event_espresso' ),
29
+	__('Last name only', 'event_espresso'),
30 30
 
31 31
 	// Reference: assets/src/blocks/event-attendees/edit.js:399
32
-	__( 'First name only', 'event_espresso' ),
32
+	__('First name only', 'event_espresso'),
33 33
 
34 34
 	// Reference: assets/src/blocks/event-attendees/edit.js:403
35
-	__( 'First, then Last name', 'event_espresso' ),
35
+	__('First, then Last name', 'event_espresso'),
36 36
 
37 37
 	// Reference: assets/src/blocks/event-attendees/edit.js:410
38
-	__( 'Last, then First name', 'event_espresso' ),
38
+	__('Last, then First name', 'event_espresso'),
39 39
 
40 40
 	// Reference: assets/src/blocks/event-attendees/edit.js:420
41
-	__( 'Sort order:', 'event_espresso' ),
41
+	__('Sort order:', 'event_espresso'),
42 42
 
43 43
 	// Reference: assets/src/blocks/event-attendees/edit.js:424
44
-	__( 'Ascending', 'event_espresso' ),
44
+	__('Ascending', 'event_espresso'),
45 45
 
46 46
 	// Reference: assets/src/blocks/event-attendees/edit.js:428
47
-	__( 'Descending', 'event_espresso' ),
47
+	__('Descending', 'event_espresso'),
48 48
 
49 49
 	// Reference: assets/src/blocks/event-attendees/edit.js:435
50
-	__( 'Gravatar Setttings', 'event_espresso' ),
50
+	__('Gravatar Setttings', 'event_espresso'),
51 51
 
52 52
 	// Reference: assets/src/blocks/event-attendees/edit.js:437
53
-	__( 'Display Gravatar', 'event_espresso' ),
53
+	__('Display Gravatar', 'event_espresso'),
54 54
 
55 55
 	// Reference: assets/src/blocks/event-attendees/edit.js:442
56
-	__( 'Gravatar images are shown for each attendee.', 'event_espresso' ),
56
+	__('Gravatar images are shown for each attendee.', 'event_espresso'),
57 57
 
58 58
 	// Reference: assets/src/blocks/event-attendees/edit.js:446
59
-	__( 'No gravatar images are shown for each attendee.', 'event_espresso' ),
59
+	__('No gravatar images are shown for each attendee.', 'event_espresso'),
60 60
 
61 61
 	// Reference: assets/src/blocks/event-attendees/edit.js:454
62
-	__( 'Size of Gravatar', 'event_espresso' ),
62
+	__('Size of Gravatar', 'event_espresso'),
63 63
 
64 64
 	// Reference: assets/src/blocks/event-attendees/edit.js:463
65
-	__( 'Archive Settings', 'event_espresso' ),
65
+	__('Archive Settings', 'event_espresso'),
66 66
 
67 67
 	// Reference: assets/src/blocks/event-attendees/edit.js:465
68
-	__( 'Display on Archives', 'event_espresso' ),
68
+	__('Display on Archives', 'event_espresso'),
69 69
 
70 70
 	// Reference: assets/src/blocks/event-attendees/edit.js:470
71
-	__( 'Attendees are shown whenever this post is listed in an archive view.', 'event_espresso' ),
71
+	__('Attendees are shown whenever this post is listed in an archive view.', 'event_espresso'),
72 72
 
73 73
 	// Reference: assets/src/blocks/event-attendees/edit.js:474
74
-	__( 'Attendees are hidden whenever this post is listed in an archive view.', 'event_espresso' ),
74
+	__('Attendees are hidden whenever this post is listed in an archive view.', 'event_espresso'),
75 75
 
76 76
 	// Reference: assets/src/blocks/event-attendees/index.js:20
77
-	__( 'Event Attendees', 'event_espresso' ),
77
+	__('Event Attendees', 'event_espresso'),
78 78
 
79 79
 	// Reference: assets/src/blocks/event-attendees/index.js:22
80
-	__( 'Displays a list of people that have registered for the specified event', 'event_espresso' ),
80
+	__('Displays a list of people that have registered for the specified event', 'event_espresso'),
81 81
 
82 82
 	// Reference: assets/src/blocks/event-attendees/index.js:32
83
-	__( 'event', 'event_espresso' ),
83
+	__('event', 'event_espresso'),
84 84
 
85 85
 	// Reference: assets/src/blocks/event-attendees/index.js:33
86
-	__( 'attendees', 'event_espresso' ),
86
+	__('attendees', 'event_espresso'),
87 87
 
88 88
 	// Reference: assets/src/blocks/event-attendees/index.js:34
89
-	__( 'list', 'event_espresso' ),
89
+	__('list', 'event_espresso'),
90 90
 
91 91
 	// Reference: assets/src/components/form/model/base/default-select-configuration.js:97
92
-	__( 'Select…', 'event_espresso' ),
92
+	__('Select…', 'event_espresso'),
93 93
 
94 94
 	// Reference: assets/src/components/form/model/select/datetime.js:31
95
-	__( 'Retrieving Datetimes.', 'event_espresso' ),
95
+	__('Retrieving Datetimes.', 'event_espresso'),
96 96
 
97 97
 	// Reference: assets/src/components/form/model/select/datetime.js:32
98
-	__( 'No Datetimes.', 'event_espresso' ),
98
+	__('No Datetimes.', 'event_espresso'),
99 99
 
100 100
 	// Reference: assets/src/components/form/model/select/datetime.js:33
101
-	__( 'Select Datetime…', 'event_espresso' ),
101
+	__('Select Datetime…', 'event_espresso'),
102 102
 
103 103
 	// Reference: assets/src/components/form/model/select/datetime.js:37
104
-	__( 'Select Datetime', 'event_espresso' ),
104
+	__('Select Datetime', 'event_espresso'),
105 105
 
106 106
 	// Reference: assets/src/components/form/model/select/event.js:24
107
-	__( 'Retrieving Events.', 'event_espresso' ),
107
+	__('Retrieving Events.', 'event_espresso'),
108 108
 
109 109
 	// Reference: assets/src/components/form/model/select/event.js:25
110
-	__( 'No Events.', 'event_espresso' ),
110
+	__('No Events.', 'event_espresso'),
111 111
 
112 112
 	// Reference: assets/src/components/form/model/select/event.js:26
113
-	__( 'Select Event…', 'event_espresso' ),
113
+	__('Select Event…', 'event_espresso'),
114 114
 
115 115
 	// Reference: assets/src/components/form/model/select/event.js:30
116
-	__( 'Select Event', 'event_espresso' ),
116
+	__('Select Event', 'event_espresso'),
117 117
 
118 118
 	// Reference: assets/src/components/form/model/select/status.js:29
119
-	__( 'Retrieving Statuses.', 'event_espresso' ),
119
+	__('Retrieving Statuses.', 'event_espresso'),
120 120
 
121 121
 	// Reference: assets/src/components/form/model/select/status.js:30
122
-	__( 'No Statuses.', 'event_espresso' ),
122
+	__('No Statuses.', 'event_espresso'),
123 123
 
124 124
 	// Reference: assets/src/components/form/model/select/status.js:31
125
-	__( 'Select Status…', 'event_espresso' ),
125
+	__('Select Status…', 'event_espresso'),
126 126
 
127 127
 	// Reference: assets/src/components/form/model/select/status.js:35
128
-	__( 'Select Status', 'event_espresso' ),
128
+	__('Select Status', 'event_espresso'),
129 129
 
130 130
 	// Reference: assets/src/components/form/model/select/ticket.js:25
131
-	__( 'Retrieving Tickets.', 'event_espresso' ),
131
+	__('Retrieving Tickets.', 'event_espresso'),
132 132
 
133 133
 	// Reference: assets/src/components/form/model/select/ticket.js:26
134
-	__( 'No Tickets.', 'event_espresso' ),
134
+	__('No Tickets.', 'event_espresso'),
135 135
 
136 136
 	// Reference: assets/src/components/form/model/select/ticket.js:27
137
-	__( 'Select Ticket…', 'event_espresso' ),
137
+	__('Select Ticket…', 'event_espresso'),
138 138
 
139 139
 	// Reference: assets/src/components/form/model/select/ticket.js:31
140
-	__( 'Select Ticket', 'event_espresso' ),
140
+	__('Select Ticket', 'event_espresso'),
141 141
 
142 142
 	// Reference: assets/src/components/query/limit/index.js:12
143
-	__( 'Limit', 'event_espresso' ),
143
+	__('Limit', 'event_espresso'),
144 144
 
145 145
 	// Reference: assets/src/components/ui/image/avatar.js:36
146
-	__( 'contact avatar', 'event_espresso' ),
146
+	__('contact avatar', 'event_espresso'),
147 147
 
148 148
 	// Reference: assets/src/data/eventespresso/core/model/checkin/actions.js:88
149
-	__( 'Toggling the checkin failed. Usually this is due to the checkin not having access', 'event_espresso' ),
149
+	__('Toggling the checkin failed. Usually this is due to the checkin not having access', 'event_espresso'),
150 150
 
151 151
 	// Reference: assets/src/data/eventespresso/lists/selectors.js:100
152
-	__( 'The given identifier (%s) does not exist in the state.', 'event_espresso' ),
152
+	__('The given identifier (%s) does not exist in the state.', 'event_espresso'),
153 153
 
154 154
 	// Reference: assets/src/data/model/assertions.js:111
155
-	__( 'The provided item must be a Map object', 'event_espresso' ),
155
+	__('The provided item must be a Map object', 'event_espresso'),
156 156
 
157 157
 	// Reference: assets/src/data/model/assertions.js:21
158
-	__( 'The provided entity (%s) does not have the given property (%s)', 'event_espresso' ),
158
+	__('The provided entity (%s) does not have the given property (%s)', 'event_espresso'),
159 159
 
160 160
 	// Reference: assets/src/data/model/assertions.js:54
161
-	__( 'The provided immutable object (%s) does not have the given path (%s)', 'event_espresso' ),
161
+	__('The provided immutable object (%s) does not have the given path (%s)', 'event_espresso'),
162 162
 
163 163
 	// Reference: assets/src/data/model/assertions.js:77
164
-	__( 'The provided value is not an array.', 'event_espresso' ),
164
+	__('The provided value is not an array.', 'event_espresso'),
165 165
 
166 166
 	// Reference: assets/src/data/model/assertions.js:95
167
-	__( 'The provided items must not be empty', 'event_espresso' ),
167
+	__('The provided items must not be empty', 'event_espresso'),
168 168
 
169 169
 	// Reference: assets/src/data/model/primary-keys.js:109
170
-	__( 'The provided array of entities must not be empty', 'event_espresso' ),
170
+	__('The provided array of entities must not be empty', 'event_espresso'),
171 171
 
172 172
 	// Reference: assets/src/data/model/primary-keys.js:135
173
-	__( 'The provided object of entities must be a Map object', 'event_espresso' ),
173
+	__('The provided object of entities must be a Map object', 'event_espresso'),
174 174
 
175 175
 	// Reference: assets/src/data/model/status/helpers.js:102
176
-	__( 'sent', 'event_espresso' ),
176
+	__('sent', 'event_espresso'),
177 177
 
178 178
 	// Reference: assets/src/data/model/status/helpers.js:105
179
-	__( 'queued for sending', 'event_espresso' ),
179
+	__('queued for sending', 'event_espresso'),
180 180
 
181 181
 	// Reference: assets/src/data/model/status/helpers.js:108
182
-	__( 'failed', 'event_espresso' ),
182
+	__('failed', 'event_espresso'),
183 183
 
184 184
 	// Reference: assets/src/data/model/status/helpers.js:111
185
-	__( 'debug only', 'event_espresso' ),
185
+	__('debug only', 'event_espresso'),
186 186
 
187 187
 	// Reference: assets/src/data/model/status/helpers.js:114
188
-	__( 'messenger is executing', 'event_espresso' ),
188
+	__('messenger is executing', 'event_espresso'),
189 189
 
190 190
 	// Reference: assets/src/data/model/status/helpers.js:117
191
-	__( 'queued for resending', 'event_espresso' ),
191
+	__('queued for resending', 'event_espresso'),
192 192
 
193 193
 	// Reference: assets/src/data/model/status/helpers.js:120
194
-	__( 'queued for generating', 'event_espresso' ),
194
+	__('queued for generating', 'event_espresso'),
195 195
 
196 196
 	// Reference: assets/src/data/model/status/helpers.js:123
197
-	__( 'failed sending, can be retried', 'event_espresso' ),
197
+	__('failed sending, can be retried', 'event_espresso'),
198 198
 
199 199
 	// Reference: assets/src/data/model/status/helpers.js:134
200
-	__( 'published', 'event_espresso' ),
200
+	__('published', 'event_espresso'),
201 201
 
202 202
 	// Reference: assets/src/data/model/status/helpers.js:137
203
-	__( 'scheduled', 'event_espresso' ),
203
+	__('scheduled', 'event_espresso'),
204 204
 
205 205
 	// Reference: assets/src/data/model/status/helpers.js:140
206
-	__( 'draft', 'event_espresso' ),
206
+	__('draft', 'event_espresso'),
207 207
 
208 208
 	// Reference: assets/src/data/model/status/helpers.js:143
209
-	__( 'pending', 'event_espresso' ),
209
+	__('pending', 'event_espresso'),
210 210
 
211 211
 	// Reference: assets/src/data/model/status/helpers.js:146
212
-	__( 'private', 'event_espresso' ),
212
+	__('private', 'event_espresso'),
213 213
 
214 214
 	// Reference: assets/src/data/model/status/helpers.js:149
215
-	__( 'trashed', 'event_espresso' ),
215
+	__('trashed', 'event_espresso'),
216 216
 
217 217
 	// Reference: assets/src/data/model/status/helpers.js:180
218
-	__( 'archived', 'event_espresso' ),
218
+	__('archived', 'event_espresso'),
219 219
 
220 220
 	// Reference: assets/src/data/model/status/helpers.js:192
221
-	__( 'on sale', 'event_espresso' ),
221
+	__('on sale', 'event_espresso'),
222 222
 
223 223
 	// Reference: assets/src/data/model/status/helpers.js:203
224
-	__( 'cancelled', 'event_espresso' ),
224
+	__('cancelled', 'event_espresso'),
225 225
 
226 226
 	// Reference: assets/src/data/model/status/helpers.js:206
227
-	__( 'sold out', 'event_espresso' ),
227
+	__('sold out', 'event_espresso'),
228 228
 
229 229
 	// Reference: assets/src/data/model/status/helpers.js:209
230
-	__( 'expired', 'event_espresso' ),
230
+	__('expired', 'event_espresso'),
231 231
 
232 232
 	// Reference: assets/src/data/model/status/helpers.js:212
233
-	__( 'inactive', 'event_espresso' ),
233
+	__('inactive', 'event_espresso'),
234 234
 
235 235
 	// Reference: assets/src/data/model/status/helpers.js:215
236
-	__( 'upcoming', 'event_espresso' ),
236
+	__('upcoming', 'event_espresso'),
237 237
 
238 238
 	// Reference: assets/src/data/model/status/helpers.js:218
239
-	__( 'active', 'event_espresso' ),
239
+	__('active', 'event_espresso'),
240 240
 
241 241
 	// Reference: assets/src/data/model/status/helpers.js:221
242
-	__( 'postponed', 'event_espresso' ),
242
+	__('postponed', 'event_espresso'),
243 243
 
244 244
 	// Reference: assets/src/data/model/status/helpers.js:232
245
-	__( 'check-in', 'event_espresso' ),
245
+	__('check-in', 'event_espresso'),
246 246
 
247 247
 	// Reference: assets/src/data/model/status/helpers.js:233
248
-	__( 'check-ins', 'event_espresso' ),
248
+	__('check-ins', 'event_espresso'),
249 249
 
250 250
 	// Reference: assets/src/data/model/status/helpers.js:236
251
-	__( 'check-out', 'event_espresso' ),
251
+	__('check-out', 'event_espresso'),
252 252
 
253 253
 	// Reference: assets/src/data/model/status/helpers.js:237
254
-	__( 'check-outs', 'event_espresso' ),
254
+	__('check-outs', 'event_espresso'),
255 255
 
256 256
 	// Reference: assets/src/data/model/status/helpers.js:24
257
-	__( 'pending payment', 'event_espresso' ),
257
+	__('pending payment', 'event_espresso'),
258 258
 
259 259
 	// Reference: assets/src/data/model/status/helpers.js:240
260
-	__( 'never checked in', 'event_espresso' ),
260
+	__('never checked in', 'event_espresso'),
261 261
 
262 262
 	// Reference: assets/src/data/model/status/helpers.js:25
263
-	__( 'pending payments', 'event_espresso' ),
263
+	__('pending payments', 'event_espresso'),
264 264
 
265 265
 	// Reference: assets/src/data/model/status/helpers.js:260
266
-	__( 'unknown', 'event_espresso' ),
266
+	__('unknown', 'event_espresso'),
267 267
 
268 268
 	// Reference: assets/src/data/model/status/helpers.js:28
269
-	__( 'approved', 'event_espresso' ),
269
+	__('approved', 'event_espresso'),
270 270
 
271 271
 	// Reference: assets/src/data/model/status/helpers.js:31
272
-	__( 'not approved / awaiting review', 'event_espresso' ),
272
+	__('not approved / awaiting review', 'event_espresso'),
273 273
 
274 274
 	// Reference: assets/src/data/model/status/helpers.js:43
275
-	__( 'wait list', 'event_espresso' ),
275
+	__('wait list', 'event_espresso'),
276 276
 
277 277
 	// Reference: assets/src/data/model/status/helpers.js:44
278
-	__( 'wait lists', 'event_espresso' ),
278
+	__('wait lists', 'event_espresso'),
279 279
 
280 280
 	// Reference: assets/src/data/model/status/helpers.js:56
281
-	__( 'overpaid', 'event_espresso' ),
281
+	__('overpaid', 'event_espresso'),
282 282
 
283 283
 	// Reference: assets/src/data/model/status/helpers.js:59
284
-	__( 'complete', 'event_espresso' ),
284
+	__('complete', 'event_espresso'),
285 285
 
286 286
 	// Reference: assets/src/data/model/status/helpers.js:62
287
-	__( 'incomplete', 'event_espresso' ),
287
+	__('incomplete', 'event_espresso'),
288 288
 
289 289
 	// Reference: assets/src/data/model/status/helpers.js:68
290
-	__( 'abandoned', 'event_espresso' ),
290
+	__('abandoned', 'event_espresso'),
291 291
 
292 292
 	// Reference: assets/src/data/model/status/helpers.js:79
293
-	__( 'accepted', 'event_espresso' ),
293
+	__('accepted', 'event_espresso'),
294 294
 
295 295
 	// Reference: assets/src/data/model/status/helpers.js:88
296
-	__( 'declined', 'event_espresso' ),
296
+	__('declined', 'event_espresso'),
297 297
 
298 298
 	// Reference: assets/src/exit-modal-survey/index.js:40
299
-	__( 'Do you have a moment to share why you are deactivating Event Espresso?', 'event_espresso' ),
299
+	__('Do you have a moment to share why you are deactivating Event Espresso?', 'event_espresso'),
300 300
 
301 301
 	// Reference: assets/src/exit-modal-survey/index.js:44
302
-	__( 'Sure I\'ll help', 'event_espresso' ),
302
+	__('Sure I\'ll help', 'event_espresso'),
303 303
 
304 304
 	// Reference: assets/src/exit-modal-survey/index.js:45
305
-	__( 'Skip', 'event_espresso' )
305
+	__('Skip', 'event_espresso')
306 306
 );
307 307
 /* THIS IS THE END OF THE GENERATED FILE */
Please login to merge, or discard this patch.
payment_methods/Paypal_Standard/EEG_Paypal_Standard.gateway.php 1 patch
Indentation   +548 added lines, -548 removed lines patch added patch discarded remove patch
@@ -20,552 +20,552 @@
 block discarded – undo
20 20
  */
21 21
 class EEG_Paypal_Standard extends EE_Offsite_Gateway
22 22
 {
23
-    /**
24
-     * Name for the wp option used to save the itemized payment
25
-     */
26
-    const itemized_payment_option_name = '_itemized_payment';
27
-
28
-    protected $_paypal_id;
29
-
30
-    protected $_image_url;
31
-
32
-    protected $_shipping_details;
33
-
34
-    protected $_paypal_shipping;
35
-
36
-    protected $_paypal_taxes;
37
-
38
-    protected $_gateway_url;
39
-
40
-    protected $_currencies_supported = array(
41
-        'USD',
42
-        'GBP',
43
-        'CAD',
44
-        'AUD',
45
-        'BRL',
46
-        'CHF',
47
-        'CZK',
48
-        'DKK',
49
-        'EUR',
50
-        'HKD',
51
-        'HUF',
52
-        'ILS',
53
-        'JPY',
54
-        'MXN',
55
-        'MYR',
56
-        'NOK',
57
-        'NZD',
58
-        'PHP',
59
-        'PLN',
60
-        'SEK',
61
-        'SGD',
62
-        'THB',
63
-        'TRY',
64
-        'TWD',
65
-        'RUB'
66
-    );
67
-
68
-    /**
69
-     * @var ItemizedOrder
70
-     * @since 5.0.0.p
71
-     */
72
-    protected $itemized_order;
73
-
74
-
75
-    /**
76
-     * EEG_Paypal_Standard constructor.
77
-     */
78
-    public function __construct()
79
-    {
80
-        $this->set_uses_separate_IPN_request(true);
81
-        parent::__construct();
82
-    }
83
-
84
-
85
-    /**
86
-     * @return mixed
87
-     */
88
-    public function gatewayUrl()
89
-    {
90
-        return $this->_gateway_url;
91
-    }
92
-
93
-
94
-    /**
95
-     * @return mixed
96
-     */
97
-    public function imageUrl()
98
-    {
99
-        return $this->_image_url;
100
-    }
101
-
102
-
103
-    /**
104
-     * @return mixed
105
-     */
106
-    public function paypalId()
107
-    {
108
-        return $this->_paypal_id;
109
-    }
110
-
111
-
112
-    /**
113
-     * @return mixed
114
-     */
115
-    public function paypalShipping()
116
-    {
117
-        return $this->_paypal_shipping;
118
-    }
119
-
120
-
121
-
122
-    /**
123
-     * @return mixed
124
-     */
125
-    public function paypalTaxes()
126
-    {
127
-        return $this->_paypal_taxes;
128
-    }
129
-
130
-
131
-    /**
132
-     * @return mixed
133
-     */
134
-    public function shippingDetails()
135
-    {
136
-        return $this->_shipping_details;
137
-    }
138
-
139
-
140
-    /**
141
-     * Also sets the gateway url class variable based on whether debug mode is enabled or not.
142
-     *
143
-     * @param array $settings_array
144
-     */
145
-    public function set_settings(array $settings_array)
146
-    {
147
-        parent::set_settings($settings_array);
148
-        $this->_gateway_url = $this->_debug_mode
149
-            ? 'https://www.sandbox.paypal.com/cgi-bin/webscr'
150
-            : 'https://www.paypal.com/cgi-bin/webscr';
151
-    }
152
-
153
-
154
-    /**
155
-     * @param EEI_Payment $payment      the payment to process
156
-     * @param array       $billing_info but should be empty for this gateway
157
-     * @param string      $return_url   URL to send the user to after payment on the payment provider's website
158
-     * @param string      $notify_url   URL to send the instant payment notification
159
-     * @param string      $cancel_url   URL to send the user to after a cancelled payment attempt
160
-     *                                  on the payment provider's website
161
-     * @return EEI_Payment
162
-     * @throws EE_Error
163
-     * @throws ReflectionException
164
-     */
165
-    public function set_redirection_info(
166
-        $payment,
167
-        $billing_info = array(),
168
-        $return_url = null,
169
-        $notify_url = null,
170
-        $cancel_url = null
171
-    ) {
172
-        $this->itemized_order = new ItemizedOrder($this->_get_gateway_formatter(), $this);
173
-        $redirect_args = apply_filters(
174
-            "FHEE__EEG_Paypal_Standard__set_redirection_info__arguments",
175
-            $this->itemized_order->generateItemizedOrderForPayment(
176
-                $payment,
177
-                $return_url,
178
-                $notify_url,
179
-                $cancel_url
180
-            ),
181
-            $this
182
-        );
183
-
184
-        $payment->set_redirect_url($this->_gateway_url);
185
-        $payment->set_redirect_args($redirect_args);
186
-        // log the results
187
-        $this->log(
188
-            [
189
-                'message'     => esc_html__('PayPal payment request initiated.', 'event_espresso'),
190
-                'transaction' => $payment->transaction()->model_field_array(),
191
-            ],
192
-            $payment
193
-        );
194
-        return $payment;
195
-    }
196
-
197
-
198
-    /**
199
-     * Often used for IPNs. But applies the info in $update_info to the payment.
200
-     * What is $update_info? Often the contents of $_REQUEST, but not necessarily. Whatever
201
-     * the payment method passes in.
202
-     *
203
-     * @param array $update_info like $_POST
204
-     * @param EE_Transaction $transaction
205
-     * @return EEI_Payment updated
206
-     * @throws EE_Error, IpnException
207
-     */
208
-    public function handle_payment_update($update_info, $transaction)
209
-    {
210
-        // verify there's payment data that's been sent
211
-        if (empty($update_info['payment_status']) || empty($update_info['txn_id'])) {
212
-            // log the results
213
-            $this->log(
214
-                array(
215
-                    'message'     => esc_html__(
216
-                        'PayPal IPN response is missing critical payment data. This may indicate a PDT request and require your PayPal account settings to be corrected.',
217
-                        'event_espresso'
218
-                    ),
219
-                    'update_info' => $update_info,
220
-                ),
221
-                $transaction
222
-            );
223
-            // waaaait... is this a PDT request? (see https://developer.paypal.com/docs/classic/products/payment-data-transfer/)
224
-            // indicated by the "tx" argument? If so, we don't need it. We'll just use the IPN data when it comes
225
-            if (isset($update_info['tx'])) {
226
-                return $transaction->last_payment();
227
-            } else {
228
-                return null;
229
-            }
230
-        }
231
-        $payment = $this->_pay_model->get_payment_by_txn_id_chq_nmbr($update_info['txn_id']);
232
-        if (! $payment instanceof EEI_Payment) {
233
-            $payment = $transaction->last_payment();
234
-        }
235
-        // ok, then validate the IPN. Even if we've already processed this payment,
236
-        // let PayPal know we don't want to hear from them anymore!
237
-        if (! $this->validate_ipn($update_info, $payment)) {
238
-            return $payment;
239
-        }
240
-        // kill request here if this is a refund, we don't support them yet (we'd need to adjust the transaction,
241
-        // registrations, ticket counts, etc)
242
-        if (
243
-            (
244
-                $update_info['payment_status'] === 'Refunded'
245
-                || $update_info['payment_status'] === 'Partially_Refunded'
246
-            )
247
-            && apply_filters('FHEE__EEG_Paypal_Standard__handle_payment_update__kill_refund_request', true)
248
-        ) {
249
-            throw new EventEspresso\core\exceptions\IpnException(
250
-                sprintf(
251
-                    esc_html__('Event Espresso does not yet support %1$s IPNs from PayPal', 'event_espresso'),
252
-                    $update_info['payment_status']
253
-                ),
254
-                EventEspresso\core\exceptions\IpnException::UNSUPPORTED,
255
-                null,
256
-                $payment,
257
-                $update_info
258
-            );
259
-        }
260
-        // ok, well let's process this payment then!
261
-        switch ($update_info['payment_status']) {
262
-            case 'Completed':
263
-                $status = $this->_pay_model->approved_status();
264
-                $gateway_response = esc_html__('The payment is approved.', 'event_espresso');
265
-                break;
266
-
267
-            case 'Pending':
268
-                $status = $this->_pay_model->pending_status();
269
-                $gateway_response = esc_html__(
270
-                    'The payment is in progress. Another message will be sent when payment is approved.',
271
-                    'event_espresso'
272
-                );
273
-                break;
274
-
275
-            case 'Denied':
276
-                $status = $this->_pay_model->declined_status();
277
-                $gateway_response = esc_html__('The payment has been declined.', 'event_espresso');
278
-                break;
279
-
280
-            case 'Expired':
281
-            case 'Failed':
282
-                $status = $this->_pay_model->failed_status();
283
-                $gateway_response = esc_html__('The payment failed for technical reasons or expired.', 'event_espresso');
284
-                break;
285
-
286
-            case 'Refunded':
287
-            case 'Partially_Refunded':
288
-                // even though it's a refund, we consider the payment as approved, it just has a negative value
289
-                $status = $this->_pay_model->approved_status();
290
-                $gateway_response = esc_html__(
291
-                    'The payment has been refunded. Please update registrations accordingly.',
292
-                    'event_espresso'
293
-                );
294
-                break;
295
-
296
-            case 'Voided':
297
-            case 'Reversed':
298
-            case 'Canceled_Reversal':
299
-            default:
300
-                $status = $this->_pay_model->cancelled_status();
301
-                $gateway_response = esc_html__(
302
-                    'The payment was cancelled, reversed, or voided. Please update registrations accordingly.',
303
-                    'event_espresso'
304
-                );
305
-                break;
306
-        }
307
-
308
-        // check if we've already processed this payment
309
-        if ($payment instanceof EEI_Payment) {
310
-            // payment exists. if this has the exact same status and amount, don't bother updating. just return
311
-            if ($payment->status() === $status && $payment->amount() === (float) $update_info['mc_gross']) {
312
-                // DUPLICATED IPN! don't bother updating transaction
313
-                throw new IpnException(
314
-                    sprintf(
315
-                        esc_html__(
316
-                            'It appears we have received a duplicate IPN from PayPal for payment %d',
317
-                            'event_espresso'
318
-                        ),
319
-                        $payment->ID()
320
-                    ),
321
-                    IpnException::DUPLICATE,
322
-                    null,
323
-                    $payment,
324
-                    $update_info
325
-                );
326
-            } else {
327
-                // new payment yippee !!!
328
-                $payment->set_status($status);
329
-                $payment->set_amount((float) $update_info['mc_gross']);
330
-                $payment->set_gateway_response($gateway_response);
331
-                $payment->set_details($update_info);
332
-                $payment->set_txn_id_chq_nmbr($update_info['txn_id']);
333
-                $this->log(
334
-                    array(
335
-                        'message'  => esc_html__(
336
-                            'Updated payment either from IPN or as part of POST from PayPal',
337
-                            'event_espresso'
338
-                        ),
339
-                        'url'      => $this->_process_response_url(),
340
-                        'payment'  => $payment->model_field_array(),
341
-                        'IPN_data' => $update_info
342
-                    ),
343
-                    $payment
344
-                );
345
-            }
346
-        }
347
-        do_action('FHEE__EEG_Paypal_Standard__handle_payment_update__payment_processed', $payment, $this);
348
-        return $payment;
349
-    }
350
-
351
-
352
-    /**
353
-     * Validate the IPN notification.
354
-     *
355
-     * @param array                  $update_info like $_REQUEST
356
-     * @param EE_Payment $payment
357
-     * @return boolean
358
-     * @throws EE_Error
359
-     */
360
-    public function validate_ipn($update_info, $payment)
361
-    {
362
-        // allow us to skip validating IPNs with PayPal (useful for testing)
363
-        if (apply_filters('FHEE__EEG_Paypal_Standard__validate_ipn__skip', false)) {
364
-            return true;
365
-        }
366
-        // ...otherwise, we actually don't care what the $update_info is, we need to look
367
-        // at the request directly because we can't use $update_info because it has issues with quotes
368
-        // Reading POSTed data directly from $_POST causes serialization issues with array data in the POST.
369
-        // Instead, read raw POST data from the input stream.
370
-        // @see https://gist.github.com/xcommerce-gists/3440401
371
-        $raw_post_data = file_get_contents('php://input');
372
-        $raw_post_array = explode('&', $raw_post_data);
373
-        $update_info = array();
374
-        foreach ($raw_post_array as $keyval) {
375
-            $keyval = explode('=', $keyval);
376
-            if (count($keyval) === 2) {
377
-                $update_info[ $keyval[0] ] = urldecode($keyval[1]);
378
-            }
379
-        }
380
-        // read the IPN message sent from PayPal and prepend 'cmd=_notify-validate'
381
-        $req = 'cmd=_notify-validate';
382
-        foreach ($update_info as $key => $value) {
383
-            $value = urlencode($value);
384
-            $req .= "&$key=$value";
385
-        }
386
-        // HTTP POST the complete, unaltered IPN back to PayPal
387
-        $response = wp_remote_post(
388
-            $this->_gateway_url,
389
-            array(
390
-                'body'              => $req,
391
-                'sslverify'         => Manager::verifySSL(),
392
-                'timeout'           => 60,
393
-                // make sure to set a site specific unique "user-agent" string since the WordPres default gets declined by PayPal
394
-                // plz see: https://github.com/websharks/s2member/issues/610
395
-                'user-agent'        => 'Event Espresso v' . EVENT_ESPRESSO_VERSION . '; ' . home_url(),
396
-                'httpversion'       => '1.1'
397
-            )
398
-        );
399
-        // then check the response
400
-        if (
401
-            array_key_exists('body', $response)
402
-            && ! is_wp_error($response)
403
-            && strcmp($response['body'], "VERIFIED") === 0
404
-        ) {
405
-            return true;
406
-        }
407
-        // huh, something's wack... the IPN didn't validate. We must have replied to the IPN incorrectly,
408
-        // or their API must have changed: http://www.paypalobjects.com/en_US/ebook/PP_OrderManagement_IntegrationGuide/ipn.html
409
-        if ($response instanceof WP_Error) {
410
-            $error_msg = sprintf(
411
-                esc_html__('WP Error. Code: "%1$s", Message: "%2$s", Data: "%3$s"', 'event_espresso'),
412
-                $response->get_error_code(),
413
-                $response->get_error_message(),
414
-                print_r($response->get_error_data(), true)
415
-            );
416
-        } elseif (is_array($response) && isset($response['body'])) {
417
-            $error_msg = $response['body'];
418
-        } else {
419
-            $error_msg = print_r($response, true);
420
-        }
421
-        $payment->set_gateway_response(
422
-            sprintf(
423
-                esc_html__("IPN Validation failed! Paypal responded with '%s'", "event_espresso"),
424
-                $error_msg
425
-            )
426
-        );
427
-        $payment->set_details(array('REQUEST' => $update_info, 'VALIDATION_RESPONSE' => $response));
428
-        $payment->set_status(EEM_Payment::status_id_failed);
429
-        // log the results
430
-        $this->log(
431
-            array(
432
-                'url'     => $this->_process_response_url(),
433
-                'message' => $payment->gateway_response(),
434
-                'details' => $payment->details(),
435
-            ),
436
-            $payment
437
-        );
438
-        return false;
439
-    }
440
-
441
-
442
-    /**
443
-     * _process_response_url
444
-     * @return string
445
-     */
446
-    protected function _process_response_url(): string
447
-    {
448
-        if (isset($_SERVER['HTTP_HOST'], $_SERVER['REQUEST_URI'])) {
449
-            $url = is_ssl() ? 'https://' : 'http://';
450
-            $url .= EEH_URL::filter_input_server_url('HTTP_HOST');
451
-            $url .= EEH_URL::filter_input_server_url();
452
-        } else {
453
-            $url = 'unknown';
454
-        }
455
-        return $url;
456
-    }
457
-
458
-
459
-    /**
460
-     * Updates the transaction and line items based on the payment IPN data from PayPal,
461
-     * like the taxes or shipping
462
-     *
463
-     * @param EE_Payment $payment
464
-     * @throws EE_Error
465
-     * @throws ReflectionException
466
-     */
467
-    public function update_txn_based_on_payment($payment)
468
-    {
469
-        $update_info = $payment->details();
470
-        $transaction = $payment->transaction();
471
-        $payment_was_itemized = $payment->get_extra_meta(EEG_Paypal_Standard::itemized_payment_option_name, true, false);
472
-        if (! $transaction) {
473
-            $this->log(
474
-                esc_html__(
475
-                    // @codingStandardsIgnoreStart
476
-                    'Payment with ID %d has no related transaction, and so update_txn_based_on_payment couldn\'t be executed properly',
477
-                    // @codingStandardsIgnoreEnd
478
-                    'event_espresso'
479
-                ),
480
-                $payment
481
-            );
482
-            return;
483
-        }
484
-        if (
485
-            ! is_array($update_info)
486
-            || ! isset($update_info['mc_shipping'])
487
-            || ! isset($update_info['tax'])
488
-        ) {
489
-            $this->log(
490
-                array(
491
-                    'message' => esc_html__(
492
-                        // @codingStandardsIgnoreStart
493
-                        'Could not update transaction based on payment because the payment details have not yet been put on the payment. This normally happens during the IPN or returning from PayPal',
494
-                        // @codingStandardsIgnoreEnd
495
-                        'event_espresso'
496
-                    ),
497
-                    'url'     => $this->_process_response_url(),
498
-                    'payment' => $payment->model_field_array()
499
-                ),
500
-                $payment
501
-            );
502
-            return;
503
-        }
504
-        if ($payment->status() !== $this->_pay_model->approved_status()) {
505
-            $this->log(
506
-                array(
507
-                    'message' => esc_html__(
508
-                        'We shouldn\'t update transactions taxes or shipping data from non-approved payments',
509
-                        'event_espresso'
510
-                    ),
511
-                    'url'     => $this->_process_response_url(),
512
-                    'payment' => $payment->model_field_array()
513
-                ),
514
-                $payment
515
-            );
516
-            return;
517
-        }
518
-        $grand_total_needs_resaving = false;
519
-        /** @var EE_Line_Item $transaction_total_line_item */
520
-        $transaction_total_line_item = $transaction->total_line_item();
521
-
522
-        // might paypal have changed the taxes?
523
-        if ($this->_paypal_taxes && $payment_was_itemized) {
524
-            // note that we're doing this BEFORE adding shipping;
525
-            // we actually want PayPal's shipping to remain non-taxable
526
-            $this->_line_item->set_line_items_taxable($transaction_total_line_item, true, 'paypal_shipping');
527
-            $this->_line_item->set_total_tax_to(
528
-                $transaction_total_line_item,
529
-                (float) $update_info['tax'],
530
-                esc_html__('Taxes', 'event_espresso'),
531
-                esc_html__('Calculated by Paypal', 'event_espresso'),
532
-                'paypal_tax'
533
-            );
534
-            $grand_total_needs_resaving = true;
535
-        }
536
-
537
-        $shipping_amount = (float) $update_info['mc_shipping'];
538
-        // might paypal have added shipping?
539
-        if ($this->_paypal_shipping && $shipping_amount && $payment_was_itemized) {
540
-            $this->_line_item->add_unrelated_item(
541
-                $transaction_total_line_item,
542
-                sprintf(esc_html__('Shipping for transaction %1$s', 'event_espresso'), $transaction->ID()),
543
-                $shipping_amount,
544
-                esc_html__('Shipping charges calculated by Paypal', 'event_espresso'),
545
-                1,
546
-                false,
547
-                'paypal_shipping_' . $transaction->ID()
548
-            );
549
-            $grand_total_needs_resaving = true;
550
-        }
551
-
552
-        if ($grand_total_needs_resaving) {
553
-            $transaction_total_line_item->save_this_and_descendants_to_txn($transaction->ID());
554
-            /** @var EE_Registration_Processor $registration_processor */
555
-            $registration_processor = EE_Registry::instance()->load_class('Registration_Processor');
556
-            $registration_processor->update_registration_final_prices($transaction);
557
-        }
558
-        $this->log(
559
-            array(
560
-                'message'                     => esc_html__('Updated transaction related to payment', 'event_espresso'),
561
-                'url'                         => $this->_process_response_url(),
562
-                'transaction (updated)'       => $transaction->model_field_array(),
563
-                'payment (updated)'           => $payment->model_field_array(),
564
-                'use_paypal_shipping'         => $this->_paypal_shipping,
565
-                'use_paypal_tax'              => $this->_paypal_taxes,
566
-                'grand_total_needed_resaving' => $grand_total_needs_resaving,
567
-            ),
568
-            $payment
569
-        );
570
-    }
23
+	/**
24
+	 * Name for the wp option used to save the itemized payment
25
+	 */
26
+	const itemized_payment_option_name = '_itemized_payment';
27
+
28
+	protected $_paypal_id;
29
+
30
+	protected $_image_url;
31
+
32
+	protected $_shipping_details;
33
+
34
+	protected $_paypal_shipping;
35
+
36
+	protected $_paypal_taxes;
37
+
38
+	protected $_gateway_url;
39
+
40
+	protected $_currencies_supported = array(
41
+		'USD',
42
+		'GBP',
43
+		'CAD',
44
+		'AUD',
45
+		'BRL',
46
+		'CHF',
47
+		'CZK',
48
+		'DKK',
49
+		'EUR',
50
+		'HKD',
51
+		'HUF',
52
+		'ILS',
53
+		'JPY',
54
+		'MXN',
55
+		'MYR',
56
+		'NOK',
57
+		'NZD',
58
+		'PHP',
59
+		'PLN',
60
+		'SEK',
61
+		'SGD',
62
+		'THB',
63
+		'TRY',
64
+		'TWD',
65
+		'RUB'
66
+	);
67
+
68
+	/**
69
+	 * @var ItemizedOrder
70
+	 * @since 5.0.0.p
71
+	 */
72
+	protected $itemized_order;
73
+
74
+
75
+	/**
76
+	 * EEG_Paypal_Standard constructor.
77
+	 */
78
+	public function __construct()
79
+	{
80
+		$this->set_uses_separate_IPN_request(true);
81
+		parent::__construct();
82
+	}
83
+
84
+
85
+	/**
86
+	 * @return mixed
87
+	 */
88
+	public function gatewayUrl()
89
+	{
90
+		return $this->_gateway_url;
91
+	}
92
+
93
+
94
+	/**
95
+	 * @return mixed
96
+	 */
97
+	public function imageUrl()
98
+	{
99
+		return $this->_image_url;
100
+	}
101
+
102
+
103
+	/**
104
+	 * @return mixed
105
+	 */
106
+	public function paypalId()
107
+	{
108
+		return $this->_paypal_id;
109
+	}
110
+
111
+
112
+	/**
113
+	 * @return mixed
114
+	 */
115
+	public function paypalShipping()
116
+	{
117
+		return $this->_paypal_shipping;
118
+	}
119
+
120
+
121
+
122
+	/**
123
+	 * @return mixed
124
+	 */
125
+	public function paypalTaxes()
126
+	{
127
+		return $this->_paypal_taxes;
128
+	}
129
+
130
+
131
+	/**
132
+	 * @return mixed
133
+	 */
134
+	public function shippingDetails()
135
+	{
136
+		return $this->_shipping_details;
137
+	}
138
+
139
+
140
+	/**
141
+	 * Also sets the gateway url class variable based on whether debug mode is enabled or not.
142
+	 *
143
+	 * @param array $settings_array
144
+	 */
145
+	public function set_settings(array $settings_array)
146
+	{
147
+		parent::set_settings($settings_array);
148
+		$this->_gateway_url = $this->_debug_mode
149
+			? 'https://www.sandbox.paypal.com/cgi-bin/webscr'
150
+			: 'https://www.paypal.com/cgi-bin/webscr';
151
+	}
152
+
153
+
154
+	/**
155
+	 * @param EEI_Payment $payment      the payment to process
156
+	 * @param array       $billing_info but should be empty for this gateway
157
+	 * @param string      $return_url   URL to send the user to after payment on the payment provider's website
158
+	 * @param string      $notify_url   URL to send the instant payment notification
159
+	 * @param string      $cancel_url   URL to send the user to after a cancelled payment attempt
160
+	 *                                  on the payment provider's website
161
+	 * @return EEI_Payment
162
+	 * @throws EE_Error
163
+	 * @throws ReflectionException
164
+	 */
165
+	public function set_redirection_info(
166
+		$payment,
167
+		$billing_info = array(),
168
+		$return_url = null,
169
+		$notify_url = null,
170
+		$cancel_url = null
171
+	) {
172
+		$this->itemized_order = new ItemizedOrder($this->_get_gateway_formatter(), $this);
173
+		$redirect_args = apply_filters(
174
+			"FHEE__EEG_Paypal_Standard__set_redirection_info__arguments",
175
+			$this->itemized_order->generateItemizedOrderForPayment(
176
+				$payment,
177
+				$return_url,
178
+				$notify_url,
179
+				$cancel_url
180
+			),
181
+			$this
182
+		);
183
+
184
+		$payment->set_redirect_url($this->_gateway_url);
185
+		$payment->set_redirect_args($redirect_args);
186
+		// log the results
187
+		$this->log(
188
+			[
189
+				'message'     => esc_html__('PayPal payment request initiated.', 'event_espresso'),
190
+				'transaction' => $payment->transaction()->model_field_array(),
191
+			],
192
+			$payment
193
+		);
194
+		return $payment;
195
+	}
196
+
197
+
198
+	/**
199
+	 * Often used for IPNs. But applies the info in $update_info to the payment.
200
+	 * What is $update_info? Often the contents of $_REQUEST, but not necessarily. Whatever
201
+	 * the payment method passes in.
202
+	 *
203
+	 * @param array $update_info like $_POST
204
+	 * @param EE_Transaction $transaction
205
+	 * @return EEI_Payment updated
206
+	 * @throws EE_Error, IpnException
207
+	 */
208
+	public function handle_payment_update($update_info, $transaction)
209
+	{
210
+		// verify there's payment data that's been sent
211
+		if (empty($update_info['payment_status']) || empty($update_info['txn_id'])) {
212
+			// log the results
213
+			$this->log(
214
+				array(
215
+					'message'     => esc_html__(
216
+						'PayPal IPN response is missing critical payment data. This may indicate a PDT request and require your PayPal account settings to be corrected.',
217
+						'event_espresso'
218
+					),
219
+					'update_info' => $update_info,
220
+				),
221
+				$transaction
222
+			);
223
+			// waaaait... is this a PDT request? (see https://developer.paypal.com/docs/classic/products/payment-data-transfer/)
224
+			// indicated by the "tx" argument? If so, we don't need it. We'll just use the IPN data when it comes
225
+			if (isset($update_info['tx'])) {
226
+				return $transaction->last_payment();
227
+			} else {
228
+				return null;
229
+			}
230
+		}
231
+		$payment = $this->_pay_model->get_payment_by_txn_id_chq_nmbr($update_info['txn_id']);
232
+		if (! $payment instanceof EEI_Payment) {
233
+			$payment = $transaction->last_payment();
234
+		}
235
+		// ok, then validate the IPN. Even if we've already processed this payment,
236
+		// let PayPal know we don't want to hear from them anymore!
237
+		if (! $this->validate_ipn($update_info, $payment)) {
238
+			return $payment;
239
+		}
240
+		// kill request here if this is a refund, we don't support them yet (we'd need to adjust the transaction,
241
+		// registrations, ticket counts, etc)
242
+		if (
243
+			(
244
+				$update_info['payment_status'] === 'Refunded'
245
+				|| $update_info['payment_status'] === 'Partially_Refunded'
246
+			)
247
+			&& apply_filters('FHEE__EEG_Paypal_Standard__handle_payment_update__kill_refund_request', true)
248
+		) {
249
+			throw new EventEspresso\core\exceptions\IpnException(
250
+				sprintf(
251
+					esc_html__('Event Espresso does not yet support %1$s IPNs from PayPal', 'event_espresso'),
252
+					$update_info['payment_status']
253
+				),
254
+				EventEspresso\core\exceptions\IpnException::UNSUPPORTED,
255
+				null,
256
+				$payment,
257
+				$update_info
258
+			);
259
+		}
260
+		// ok, well let's process this payment then!
261
+		switch ($update_info['payment_status']) {
262
+			case 'Completed':
263
+				$status = $this->_pay_model->approved_status();
264
+				$gateway_response = esc_html__('The payment is approved.', 'event_espresso');
265
+				break;
266
+
267
+			case 'Pending':
268
+				$status = $this->_pay_model->pending_status();
269
+				$gateway_response = esc_html__(
270
+					'The payment is in progress. Another message will be sent when payment is approved.',
271
+					'event_espresso'
272
+				);
273
+				break;
274
+
275
+			case 'Denied':
276
+				$status = $this->_pay_model->declined_status();
277
+				$gateway_response = esc_html__('The payment has been declined.', 'event_espresso');
278
+				break;
279
+
280
+			case 'Expired':
281
+			case 'Failed':
282
+				$status = $this->_pay_model->failed_status();
283
+				$gateway_response = esc_html__('The payment failed for technical reasons or expired.', 'event_espresso');
284
+				break;
285
+
286
+			case 'Refunded':
287
+			case 'Partially_Refunded':
288
+				// even though it's a refund, we consider the payment as approved, it just has a negative value
289
+				$status = $this->_pay_model->approved_status();
290
+				$gateway_response = esc_html__(
291
+					'The payment has been refunded. Please update registrations accordingly.',
292
+					'event_espresso'
293
+				);
294
+				break;
295
+
296
+			case 'Voided':
297
+			case 'Reversed':
298
+			case 'Canceled_Reversal':
299
+			default:
300
+				$status = $this->_pay_model->cancelled_status();
301
+				$gateway_response = esc_html__(
302
+					'The payment was cancelled, reversed, or voided. Please update registrations accordingly.',
303
+					'event_espresso'
304
+				);
305
+				break;
306
+		}
307
+
308
+		// check if we've already processed this payment
309
+		if ($payment instanceof EEI_Payment) {
310
+			// payment exists. if this has the exact same status and amount, don't bother updating. just return
311
+			if ($payment->status() === $status && $payment->amount() === (float) $update_info['mc_gross']) {
312
+				// DUPLICATED IPN! don't bother updating transaction
313
+				throw new IpnException(
314
+					sprintf(
315
+						esc_html__(
316
+							'It appears we have received a duplicate IPN from PayPal for payment %d',
317
+							'event_espresso'
318
+						),
319
+						$payment->ID()
320
+					),
321
+					IpnException::DUPLICATE,
322
+					null,
323
+					$payment,
324
+					$update_info
325
+				);
326
+			} else {
327
+				// new payment yippee !!!
328
+				$payment->set_status($status);
329
+				$payment->set_amount((float) $update_info['mc_gross']);
330
+				$payment->set_gateway_response($gateway_response);
331
+				$payment->set_details($update_info);
332
+				$payment->set_txn_id_chq_nmbr($update_info['txn_id']);
333
+				$this->log(
334
+					array(
335
+						'message'  => esc_html__(
336
+							'Updated payment either from IPN or as part of POST from PayPal',
337
+							'event_espresso'
338
+						),
339
+						'url'      => $this->_process_response_url(),
340
+						'payment'  => $payment->model_field_array(),
341
+						'IPN_data' => $update_info
342
+					),
343
+					$payment
344
+				);
345
+			}
346
+		}
347
+		do_action('FHEE__EEG_Paypal_Standard__handle_payment_update__payment_processed', $payment, $this);
348
+		return $payment;
349
+	}
350
+
351
+
352
+	/**
353
+	 * Validate the IPN notification.
354
+	 *
355
+	 * @param array                  $update_info like $_REQUEST
356
+	 * @param EE_Payment $payment
357
+	 * @return boolean
358
+	 * @throws EE_Error
359
+	 */
360
+	public function validate_ipn($update_info, $payment)
361
+	{
362
+		// allow us to skip validating IPNs with PayPal (useful for testing)
363
+		if (apply_filters('FHEE__EEG_Paypal_Standard__validate_ipn__skip', false)) {
364
+			return true;
365
+		}
366
+		// ...otherwise, we actually don't care what the $update_info is, we need to look
367
+		// at the request directly because we can't use $update_info because it has issues with quotes
368
+		// Reading POSTed data directly from $_POST causes serialization issues with array data in the POST.
369
+		// Instead, read raw POST data from the input stream.
370
+		// @see https://gist.github.com/xcommerce-gists/3440401
371
+		$raw_post_data = file_get_contents('php://input');
372
+		$raw_post_array = explode('&', $raw_post_data);
373
+		$update_info = array();
374
+		foreach ($raw_post_array as $keyval) {
375
+			$keyval = explode('=', $keyval);
376
+			if (count($keyval) === 2) {
377
+				$update_info[ $keyval[0] ] = urldecode($keyval[1]);
378
+			}
379
+		}
380
+		// read the IPN message sent from PayPal and prepend 'cmd=_notify-validate'
381
+		$req = 'cmd=_notify-validate';
382
+		foreach ($update_info as $key => $value) {
383
+			$value = urlencode($value);
384
+			$req .= "&$key=$value";
385
+		}
386
+		// HTTP POST the complete, unaltered IPN back to PayPal
387
+		$response = wp_remote_post(
388
+			$this->_gateway_url,
389
+			array(
390
+				'body'              => $req,
391
+				'sslverify'         => Manager::verifySSL(),
392
+				'timeout'           => 60,
393
+				// make sure to set a site specific unique "user-agent" string since the WordPres default gets declined by PayPal
394
+				// plz see: https://github.com/websharks/s2member/issues/610
395
+				'user-agent'        => 'Event Espresso v' . EVENT_ESPRESSO_VERSION . '; ' . home_url(),
396
+				'httpversion'       => '1.1'
397
+			)
398
+		);
399
+		// then check the response
400
+		if (
401
+			array_key_exists('body', $response)
402
+			&& ! is_wp_error($response)
403
+			&& strcmp($response['body'], "VERIFIED") === 0
404
+		) {
405
+			return true;
406
+		}
407
+		// huh, something's wack... the IPN didn't validate. We must have replied to the IPN incorrectly,
408
+		// or their API must have changed: http://www.paypalobjects.com/en_US/ebook/PP_OrderManagement_IntegrationGuide/ipn.html
409
+		if ($response instanceof WP_Error) {
410
+			$error_msg = sprintf(
411
+				esc_html__('WP Error. Code: "%1$s", Message: "%2$s", Data: "%3$s"', 'event_espresso'),
412
+				$response->get_error_code(),
413
+				$response->get_error_message(),
414
+				print_r($response->get_error_data(), true)
415
+			);
416
+		} elseif (is_array($response) && isset($response['body'])) {
417
+			$error_msg = $response['body'];
418
+		} else {
419
+			$error_msg = print_r($response, true);
420
+		}
421
+		$payment->set_gateway_response(
422
+			sprintf(
423
+				esc_html__("IPN Validation failed! Paypal responded with '%s'", "event_espresso"),
424
+				$error_msg
425
+			)
426
+		);
427
+		$payment->set_details(array('REQUEST' => $update_info, 'VALIDATION_RESPONSE' => $response));
428
+		$payment->set_status(EEM_Payment::status_id_failed);
429
+		// log the results
430
+		$this->log(
431
+			array(
432
+				'url'     => $this->_process_response_url(),
433
+				'message' => $payment->gateway_response(),
434
+				'details' => $payment->details(),
435
+			),
436
+			$payment
437
+		);
438
+		return false;
439
+	}
440
+
441
+
442
+	/**
443
+	 * _process_response_url
444
+	 * @return string
445
+	 */
446
+	protected function _process_response_url(): string
447
+	{
448
+		if (isset($_SERVER['HTTP_HOST'], $_SERVER['REQUEST_URI'])) {
449
+			$url = is_ssl() ? 'https://' : 'http://';
450
+			$url .= EEH_URL::filter_input_server_url('HTTP_HOST');
451
+			$url .= EEH_URL::filter_input_server_url();
452
+		} else {
453
+			$url = 'unknown';
454
+		}
455
+		return $url;
456
+	}
457
+
458
+
459
+	/**
460
+	 * Updates the transaction and line items based on the payment IPN data from PayPal,
461
+	 * like the taxes or shipping
462
+	 *
463
+	 * @param EE_Payment $payment
464
+	 * @throws EE_Error
465
+	 * @throws ReflectionException
466
+	 */
467
+	public function update_txn_based_on_payment($payment)
468
+	{
469
+		$update_info = $payment->details();
470
+		$transaction = $payment->transaction();
471
+		$payment_was_itemized = $payment->get_extra_meta(EEG_Paypal_Standard::itemized_payment_option_name, true, false);
472
+		if (! $transaction) {
473
+			$this->log(
474
+				esc_html__(
475
+					// @codingStandardsIgnoreStart
476
+					'Payment with ID %d has no related transaction, and so update_txn_based_on_payment couldn\'t be executed properly',
477
+					// @codingStandardsIgnoreEnd
478
+					'event_espresso'
479
+				),
480
+				$payment
481
+			);
482
+			return;
483
+		}
484
+		if (
485
+			! is_array($update_info)
486
+			|| ! isset($update_info['mc_shipping'])
487
+			|| ! isset($update_info['tax'])
488
+		) {
489
+			$this->log(
490
+				array(
491
+					'message' => esc_html__(
492
+						// @codingStandardsIgnoreStart
493
+						'Could not update transaction based on payment because the payment details have not yet been put on the payment. This normally happens during the IPN or returning from PayPal',
494
+						// @codingStandardsIgnoreEnd
495
+						'event_espresso'
496
+					),
497
+					'url'     => $this->_process_response_url(),
498
+					'payment' => $payment->model_field_array()
499
+				),
500
+				$payment
501
+			);
502
+			return;
503
+		}
504
+		if ($payment->status() !== $this->_pay_model->approved_status()) {
505
+			$this->log(
506
+				array(
507
+					'message' => esc_html__(
508
+						'We shouldn\'t update transactions taxes or shipping data from non-approved payments',
509
+						'event_espresso'
510
+					),
511
+					'url'     => $this->_process_response_url(),
512
+					'payment' => $payment->model_field_array()
513
+				),
514
+				$payment
515
+			);
516
+			return;
517
+		}
518
+		$grand_total_needs_resaving = false;
519
+		/** @var EE_Line_Item $transaction_total_line_item */
520
+		$transaction_total_line_item = $transaction->total_line_item();
521
+
522
+		// might paypal have changed the taxes?
523
+		if ($this->_paypal_taxes && $payment_was_itemized) {
524
+			// note that we're doing this BEFORE adding shipping;
525
+			// we actually want PayPal's shipping to remain non-taxable
526
+			$this->_line_item->set_line_items_taxable($transaction_total_line_item, true, 'paypal_shipping');
527
+			$this->_line_item->set_total_tax_to(
528
+				$transaction_total_line_item,
529
+				(float) $update_info['tax'],
530
+				esc_html__('Taxes', 'event_espresso'),
531
+				esc_html__('Calculated by Paypal', 'event_espresso'),
532
+				'paypal_tax'
533
+			);
534
+			$grand_total_needs_resaving = true;
535
+		}
536
+
537
+		$shipping_amount = (float) $update_info['mc_shipping'];
538
+		// might paypal have added shipping?
539
+		if ($this->_paypal_shipping && $shipping_amount && $payment_was_itemized) {
540
+			$this->_line_item->add_unrelated_item(
541
+				$transaction_total_line_item,
542
+				sprintf(esc_html__('Shipping for transaction %1$s', 'event_espresso'), $transaction->ID()),
543
+				$shipping_amount,
544
+				esc_html__('Shipping charges calculated by Paypal', 'event_espresso'),
545
+				1,
546
+				false,
547
+				'paypal_shipping_' . $transaction->ID()
548
+			);
549
+			$grand_total_needs_resaving = true;
550
+		}
551
+
552
+		if ($grand_total_needs_resaving) {
553
+			$transaction_total_line_item->save_this_and_descendants_to_txn($transaction->ID());
554
+			/** @var EE_Registration_Processor $registration_processor */
555
+			$registration_processor = EE_Registry::instance()->load_class('Registration_Processor');
556
+			$registration_processor->update_registration_final_prices($transaction);
557
+		}
558
+		$this->log(
559
+			array(
560
+				'message'                     => esc_html__('Updated transaction related to payment', 'event_espresso'),
561
+				'url'                         => $this->_process_response_url(),
562
+				'transaction (updated)'       => $transaction->model_field_array(),
563
+				'payment (updated)'           => $payment->model_field_array(),
564
+				'use_paypal_shipping'         => $this->_paypal_shipping,
565
+				'use_paypal_tax'              => $this->_paypal_taxes,
566
+				'grand_total_needed_resaving' => $grand_total_needs_resaving,
567
+			),
568
+			$payment
569
+		);
570
+	}
571 571
 }
Please login to merge, or discard this patch.