Completed
Branch BUG/update-unit-tests (7b5400)
by
unknown
07:51 queued 05:38
created
display_strategies/number_bubbles/NumberBubblesProgressStepsDisplay.php 2 patches
Spacing   +2 added lines, -2 removed lines patch added patch discarded remove patch
@@ -26,7 +26,7 @@  discard block
 block discarded – undo
26 26
         // core/services/progress_steps/display_strategies/number_bubbles/number_bubbles.css
27 27
         wp_enqueue_style(
28 28
             'ee_progress_steps_display_number_bubbles',
29
-            plugin_dir_url(__FILE__) . 'number_bubbles.css'
29
+            plugin_dir_url(__FILE__).'number_bubbles.css'
30 30
         );
31 31
     }
32 32
 
@@ -39,6 +39,6 @@  discard block
 block discarded – undo
39 39
     public function getTemplate()
40 40
     {
41 41
         // return plugin_dir_path( __FILE__ ) . 'number_bubbles.template.php';
42
-        return __DIR__ . '/number_bubbles.template.php';
42
+        return __DIR__.'/number_bubbles.template.php';
43 43
     }
44 44
 }
Please login to merge, or discard this patch.
Indentation   +23 added lines, -23 removed lines patch added patch discarded remove patch
@@ -14,29 +14,29 @@
 block discarded – undo
14 14
  */
15 15
 class NumberBubblesProgressStepsDisplay implements ProgressStepsDisplayInterface
16 16
 {
17
-    /**
18
-     * used for setting up css and js required for the display strategy
19
-     *
20
-     * @return void
21
-     */
22
-    public function enqueueStylesAndScripts()
23
-    {
24
-        // core/services/progress_steps/display_strategies/number_bubbles/number_bubbles.css
25
-        wp_enqueue_style(
26
-            'ee_progress_steps_display_number_bubbles',
27
-            plugin_dir_url(__FILE__) . 'number_bubbles.css'
28
-        );
29
-    }
17
+	/**
18
+	 * used for setting up css and js required for the display strategy
19
+	 *
20
+	 * @return void
21
+	 */
22
+	public function enqueueStylesAndScripts()
23
+	{
24
+		// core/services/progress_steps/display_strategies/number_bubbles/number_bubbles.css
25
+		wp_enqueue_style(
26
+			'ee_progress_steps_display_number_bubbles',
27
+			plugin_dir_url(__FILE__) . 'number_bubbles.css'
28
+		);
29
+	}
30 30
 
31 31
 
32
-    /**
33
-     * loads and returns a full server path to the template used for the display strategy
34
-     *
35
-     * @return string
36
-     */
37
-    public function getTemplate()
38
-    {
39
-        // return plugin_dir_path( __FILE__ ) . 'number_bubbles.template.php';
40
-        return __DIR__ . '/number_bubbles.template.php';
41
-    }
32
+	/**
33
+	 * loads and returns a full server path to the template used for the display strategy
34
+	 *
35
+	 * @return string
36
+	 */
37
+	public function getTemplate()
38
+	{
39
+		// return plugin_dir_path( __FILE__ ) . 'number_bubbles.template.php';
40
+		return __DIR__ . '/number_bubbles.template.php';
41
+	}
42 42
 }
Please login to merge, or discard this patch.
core/libraries/form_sections/base/EE_Form_Section_Proper.form.php 2 patches
Spacing   +38 added lines, -38 removed lines patch added patch discarded remove patch
@@ -111,8 +111,8 @@  discard block
 block discarded – undo
111 111
             // AND we are going to make sure they're in that specified order
112 112
             $reordered_subsections = array();
113 113
             foreach ($options_array['include'] as $input_name) {
114
-                if (isset($this->_subsections[ $input_name ])) {
115
-                    $reordered_subsections[ $input_name ] = $this->_subsections[ $input_name ];
114
+                if (isset($this->_subsections[$input_name])) {
115
+                    $reordered_subsections[$input_name] = $this->_subsections[$input_name];
116 116
                 }
117 117
             }
118 118
             $this->_subsections = $reordered_subsections;
@@ -124,7 +124,7 @@  discard block
 block discarded – undo
124 124
         if (isset($options_array['layout_strategy'])) {
125 125
             $this->_layout_strategy = $options_array['layout_strategy'];
126 126
         }
127
-        if (! $this->_layout_strategy) {
127
+        if ( ! $this->_layout_strategy) {
128 128
             $this->_layout_strategy = is_admin() ? new EE_Admin_Two_Column_Layout() : new EE_Two_Column_Layout();
129 129
         }
130 130
         $this->_layout_strategy->_construct_finalize($this);
@@ -313,7 +313,7 @@  discard block
 block discarded – undo
313 313
         if ($validate) {
314 314
             $this->_validate();
315 315
             // if it's invalid, we're going to want to re-display so remember what they submitted
316
-            if (! $this->is_valid()) {
316
+            if ( ! $this->is_valid()) {
317 317
                 $this->store_submitted_form_data_in_session();
318 318
             }
319 319
         }
@@ -426,11 +426,11 @@  discard block
 block discarded – undo
426 426
     public function populate_defaults($default_data)
427 427
     {
428 428
         foreach ($this->subsections(false) as $subsection_name => $subsection) {
429
-            if (isset($default_data[ $subsection_name ])) {
429
+            if (isset($default_data[$subsection_name])) {
430 430
                 if ($subsection instanceof EE_Form_Input_Base) {
431
-                    $subsection->set_default($default_data[ $subsection_name ]);
431
+                    $subsection->set_default($default_data[$subsection_name]);
432 432
                 } elseif ($subsection instanceof EE_Form_Section_Proper) {
433
-                    $subsection->populate_defaults($default_data[ $subsection_name ]);
433
+                    $subsection->populate_defaults($default_data[$subsection_name]);
434 434
                 }
435 435
             }
436 436
         }
@@ -445,7 +445,7 @@  discard block
 block discarded – undo
445 445
      */
446 446
     public function subsection_exists($name)
447 447
     {
448
-        return isset($this->_subsections[ $name ]) ? true : false;
448
+        return isset($this->_subsections[$name]) ? true : false;
449 449
     }
450 450
 
451 451
 
@@ -467,7 +467,7 @@  discard block
 block discarded – undo
467 467
         if ($require_construction_to_be_finalized) {
468 468
             $this->ensure_construct_finalized_called();
469 469
         }
470
-        return $this->subsection_exists($name) ? $this->_subsections[ $name ] : null;
470
+        return $this->subsection_exists($name) ? $this->_subsections[$name] : null;
471 471
     }
472 472
 
473 473
 
@@ -482,7 +482,7 @@  discard block
 block discarded – undo
482 482
         $validatable_subsections = array();
483 483
         foreach ($this->subsections() as $name => $obj) {
484 484
             if ($obj instanceof EE_Form_Section_Validatable) {
485
-                $validatable_subsections[ $name ] = $obj;
485
+                $validatable_subsections[$name] = $obj;
486 486
             }
487 487
         }
488 488
         return $validatable_subsections;
@@ -509,7 +509,7 @@  discard block
 block discarded – undo
509 509
             $name,
510 510
             $require_construction_to_be_finalized
511 511
         );
512
-        if (! $subsection instanceof EE_Form_Input_Base) {
512
+        if ( ! $subsection instanceof EE_Form_Input_Base) {
513 513
             throw new EE_Error(
514 514
                 sprintf(
515 515
                     esc_html__(
@@ -546,7 +546,7 @@  discard block
 block discarded – undo
546 546
             $name,
547 547
             $require_construction_to_be_finalized
548 548
         );
549
-        if (! $subsection instanceof EE_Form_Section_Proper) {
549
+        if ( ! $subsection instanceof EE_Form_Section_Proper) {
550 550
             throw new EE_Error(
551 551
                 sprintf(
552 552
                     esc_html__(
@@ -586,7 +586,7 @@  discard block
 block discarded – undo
586 586
     public function is_valid()
587 587
     {
588 588
         if ($this->is_valid === null) {
589
-            if (! $this->has_received_submission()) {
589
+            if ( ! $this->has_received_submission()) {
590 590
                 throw new EE_Error(
591 591
                     sprintf(
592 592
                         esc_html__(
@@ -596,14 +596,14 @@  discard block
 block discarded – undo
596 596
                     )
597 597
                 );
598 598
             }
599
-            if (! parent::is_valid()) {
599
+            if ( ! parent::is_valid()) {
600 600
                 $this->is_valid = false;
601 601
             } else {
602 602
                 // ok so no general errors to this entire form section.
603 603
                 // so let's check the subsections, but only set errors if that hasn't been done yet
604 604
                 $this->is_valid = true;
605 605
                 foreach ($this->get_validatable_subsections() as $subsection) {
606
-                    if (! $subsection->is_valid()) {
606
+                    if ( ! $subsection->is_valid()) {
607 607
                         $this->is_valid = false;
608 608
                     }
609 609
                 }
@@ -620,7 +620,7 @@  discard block
 block discarded – undo
620 620
      */
621 621
     protected function _set_default_name_if_empty()
622 622
     {
623
-        if (! $this->_name) {
623
+        if ( ! $this->_name) {
624 624
             $classname    = get_class($this);
625 625
             $default_name = str_replace('EE_', '', $classname);
626 626
             $this->_name  = $default_name;
@@ -710,7 +710,7 @@  discard block
 block discarded – undo
710 710
     {
711 711
         wp_register_script(
712 712
             'ee_form_section_validation',
713
-            EE_GLOBAL_ASSETS_URL . 'scripts' . '/form_section_validation.js',
713
+            EE_GLOBAL_ASSETS_URL.'scripts'.'/form_section_validation.js',
714 714
             array('jquery-validate', 'jquery-ui-datepicker', 'jquery-validate-extra-methods'),
715 715
             EVENT_ESPRESSO_VERSION,
716 716
             true
@@ -754,13 +754,13 @@  discard block
 block discarded – undo
754 754
         // we only want to localize vars ONCE for the entire form,
755 755
         // so if the form section doesn't have a parent, then it must be the top dog
756 756
         if ($return_for_subsection || ! $this->parent_section()) {
757
-            EE_Form_Section_Proper::$_js_localization['form_data'][ $this->html_id() ] = array(
757
+            EE_Form_Section_Proper::$_js_localization['form_data'][$this->html_id()] = array(
758 758
                 'form_section_id'  => $this->html_id(true),
759 759
                 'validation_rules' => $this->get_jquery_validation_rules(),
760 760
                 'other_data'       => $this->get_other_js_data(),
761 761
                 'errors'           => $this->subsection_validation_errors_by_html_name(),
762 762
             );
763
-            EE_Form_Section_Proper::$_scripts_localized                                = true;
763
+            EE_Form_Section_Proper::$_scripts_localized = true;
764 764
         }
765 765
     }
766 766
 
@@ -795,7 +795,7 @@  discard block
 block discarded – undo
795 795
         $inputs = array();
796 796
         foreach ($this->subsections() as $subsection) {
797 797
             if ($subsection instanceof EE_Form_Input_Base) {
798
-                $inputs[ $subsection->html_name() ] = $subsection;
798
+                $inputs[$subsection->html_name()] = $subsection;
799 799
             } elseif ($subsection instanceof EE_Form_Section_Proper) {
800 800
                 $inputs += $subsection->inputs_in_subsections();
801 801
             }
@@ -818,7 +818,7 @@  discard block
 block discarded – undo
818 818
         $errors = array();
819 819
         foreach ($inputs as $form_input) {
820 820
             if ($form_input instanceof EE_Form_Input_Base && $form_input->get_validation_errors()) {
821
-                $errors[ $form_input->html_name() ] = $form_input->get_validation_error_string();
821
+                $errors[$form_input->html_name()] = $form_input->get_validation_error_string();
822 822
             }
823 823
         }
824 824
         return $errors;
@@ -841,7 +841,7 @@  discard block
 block discarded – undo
841 841
         $email_validation_level = isset(EE_Registry::instance()->CFG->registration->email_validation_level)
842 842
             ? EE_Registry::instance()->CFG->registration->email_validation_level
843 843
             : 'wp_default';
844
-        EE_Form_Section_Proper::$_js_localization['email_validation_level']   = $email_validation_level;
844
+        EE_Form_Section_Proper::$_js_localization['email_validation_level'] = $email_validation_level;
845 845
         wp_enqueue_script('ee_form_section_validation');
846 846
         wp_localize_script(
847 847
             'ee_form_section_validation',
@@ -858,7 +858,7 @@  discard block
 block discarded – undo
858 858
      */
859 859
     public function ensure_scripts_localized()
860 860
     {
861
-        if (! EE_Form_Section_Proper::$_scripts_localized) {
861
+        if ( ! EE_Form_Section_Proper::$_scripts_localized) {
862 862
             $this->_enqueue_and_localize_form_js();
863 863
         }
864 864
     }
@@ -954,8 +954,8 @@  discard block
 block discarded – undo
954 954
         // reset the cache of whether this form is valid or not- we're re-validating it now
955 955
         $this->is_valid = null;
956 956
         foreach ($this->get_validatable_subsections() as $subsection_name => $subsection) {
957
-            if (method_exists($this, '_validate_' . $subsection_name)) {
958
-                call_user_func_array(array($this, '_validate_' . $subsection_name), array($subsection));
957
+            if (method_exists($this, '_validate_'.$subsection_name)) {
958
+                call_user_func_array(array($this, '_validate_'.$subsection_name), array($subsection));
959 959
             }
960 960
             $subsection->_validate();
961 961
         }
@@ -973,9 +973,9 @@  discard block
 block discarded – undo
973 973
         $inputs = array();
974 974
         foreach ($this->subsections() as $subsection_name => $subsection) {
975 975
             if ($subsection instanceof EE_Form_Section_Proper) {
976
-                $inputs[ $subsection_name ] = $subsection->valid_data();
976
+                $inputs[$subsection_name] = $subsection->valid_data();
977 977
             } elseif ($subsection instanceof EE_Form_Input_Base) {
978
-                $inputs[ $subsection_name ] = $subsection->normalized_value();
978
+                $inputs[$subsection_name] = $subsection->normalized_value();
979 979
             }
980 980
         }
981 981
         return $inputs;
@@ -993,7 +993,7 @@  discard block
 block discarded – undo
993 993
         $inputs = array();
994 994
         foreach ($this->subsections() as $subsection_name => $subsection) {
995 995
             if ($subsection instanceof EE_Form_Input_Base) {
996
-                $inputs[ $subsection_name ] = $subsection;
996
+                $inputs[$subsection_name] = $subsection;
997 997
             }
998 998
         }
999 999
         return $inputs;
@@ -1011,7 +1011,7 @@  discard block
 block discarded – undo
1011 1011
         $form_sections = array();
1012 1012
         foreach ($this->subsections() as $name => $obj) {
1013 1013
             if ($obj instanceof EE_Form_Section_Proper) {
1014
-                $form_sections[ $name ] = $obj;
1014
+                $form_sections[$name] = $obj;
1015 1015
             }
1016 1016
         }
1017 1017
         return $form_sections;
@@ -1118,7 +1118,7 @@  discard block
 block discarded – undo
1118 1118
         $input_values = array();
1119 1119
         foreach ($this->subsections() as $subsection_name => $subsection) {
1120 1120
             if ($subsection instanceof EE_Form_Input_Base) {
1121
-                $input_values[ $subsection_name ] = $pretty
1121
+                $input_values[$subsection_name] = $pretty
1122 1122
                     ? $subsection->pretty_value()
1123 1123
                     : $subsection->normalized_value();
1124 1124
             } elseif ($subsection instanceof EE_Form_Section_Proper && $include_subform_inputs) {
@@ -1130,7 +1130,7 @@  discard block
 block discarded – undo
1130 1130
                 if ($flatten) {
1131 1131
                     $input_values = array_merge($input_values, $subform_input_values);
1132 1132
                 } else {
1133
-                    $input_values[ $subsection_name ] = $subform_input_values;
1133
+                    $input_values[$subsection_name] = $subform_input_values;
1134 1134
                 }
1135 1135
             }
1136 1136
         }
@@ -1158,7 +1158,7 @@  discard block
 block discarded – undo
1158 1158
             if ($subsection instanceof EE_Form_Input_Base) {
1159 1159
                 // is this input part of an array of inputs?
1160 1160
                 if (strpos($subsection->html_name(), '[') !== false) {
1161
-                    $full_input_name  = EEH_Array::convert_array_values_to_keys(
1161
+                    $full_input_name = EEH_Array::convert_array_values_to_keys(
1162 1162
                         explode(
1163 1163
                             '[',
1164 1164
                             str_replace(']', '', $subsection->html_name())
@@ -1167,7 +1167,7 @@  discard block
 block discarded – undo
1167 1167
                     );
1168 1168
                     $submitted_values = array_replace_recursive($submitted_values, $full_input_name);
1169 1169
                 } else {
1170
-                    $submitted_values[ $subsection->html_name() ] = $subsection->raw_value();
1170
+                    $submitted_values[$subsection->html_name()] = $subsection->raw_value();
1171 1171
                 }
1172 1172
             } elseif ($subsection instanceof EE_Form_Section_Proper && $include_subforms) {
1173 1173
                 $subform_input_values = $subsection->submitted_values($include_subforms);
@@ -1202,7 +1202,7 @@  discard block
 block discarded – undo
1202 1202
     public function exclude(array $inputs_to_exclude = array())
1203 1203
     {
1204 1204
         foreach ($inputs_to_exclude as $input_to_exclude_name) {
1205
-            unset($this->_subsections[ $input_to_exclude_name ]);
1205
+            unset($this->_subsections[$input_to_exclude_name]);
1206 1206
         }
1207 1207
     }
1208 1208
 
@@ -1245,7 +1245,7 @@  discard block
 block discarded – undo
1245 1245
     public function add_subsections($new_subsections, $subsection_name_to_target = null, $add_before = true)
1246 1246
     {
1247 1247
         foreach ($new_subsections as $subsection_name => $subsection) {
1248
-            if (! $subsection instanceof EE_Form_Section_Base) {
1248
+            if ( ! $subsection instanceof EE_Form_Section_Base) {
1249 1249
                 EE_Error::add_error(
1250 1250
                     sprintf(
1251 1251
                         esc_html__(
@@ -1257,7 +1257,7 @@  discard block
 block discarded – undo
1257 1257
                         $this->name()
1258 1258
                     )
1259 1259
                 );
1260
-                unset($new_subsections[ $subsection_name ]);
1260
+                unset($new_subsections[$subsection_name]);
1261 1261
             }
1262 1262
         }
1263 1263
         $this->_subsections = EEH_Array::insert_into_array(
@@ -1372,7 +1372,7 @@  discard block
 block discarded – undo
1372 1372
     public function html_name_prefix()
1373 1373
     {
1374 1374
         if ($this->parent_section() instanceof EE_Form_Section_Proper) {
1375
-            return $this->parent_section()->html_name_prefix() . '[' . $this->name() . ']';
1375
+            return $this->parent_section()->html_name_prefix().'['.$this->name().']';
1376 1376
         }
1377 1377
         return $this->name();
1378 1378
     }
@@ -1412,7 +1412,7 @@  discard block
 block discarded – undo
1412 1412
      */
1413 1413
     public function ensure_construct_finalized_called()
1414 1414
     {
1415
-        if (! $this->_construction_finalized) {
1415
+        if ( ! $this->_construction_finalized) {
1416 1416
             $this->_construct_finalize($this->_parent_section, $this->_name);
1417 1417
         }
1418 1418
     }
Please login to merge, or discard this patch.
Indentation   +1528 added lines, -1528 removed lines patch added patch discarded remove patch
@@ -15,1532 +15,1532 @@
 block discarded – undo
15 15
  */
16 16
 class EE_Form_Section_Proper extends EE_Form_Section_Validatable
17 17
 {
18
-    const SUBMITTED_FORM_DATA_SSN_KEY = 'submitted_form_data';
19
-
20
-    /**
21
-     * Subsections
22
-     *
23
-     * @var EE_Form_Section_Validatable[]
24
-     */
25
-    protected $_subsections = array();
26
-
27
-    /**
28
-     * Strategy for laying out the form
29
-     *
30
-     * @var EE_Form_Section_Layout_Base
31
-     */
32
-    protected $_layout_strategy;
33
-
34
-    /**
35
-     * Whether or not this form has received and validated a form submission yet
36
-     *
37
-     * @var boolean
38
-     */
39
-    protected $_received_submission = false;
40
-
41
-    /**
42
-     * message displayed to users upon successful form submission
43
-     *
44
-     * @var string
45
-     */
46
-    protected $_form_submission_success_message = '';
47
-
48
-    /**
49
-     * message displayed to users upon unsuccessful form submission
50
-     *
51
-     * @var string
52
-     */
53
-    protected $_form_submission_error_message = '';
54
-
55
-    /**
56
-     * @var array like post / request
57
-     */
58
-    protected $cached_request_data;
59
-
60
-    /**
61
-     * Stores whether this form (and its sub-sections) were found to be valid or not.
62
-     * Starts off as null, but once the form is validated, it set to either true or false
63
-     * @var boolean|null
64
-     */
65
-    protected $is_valid;
66
-
67
-    /**
68
-     * Stores all the data that will localized for form validation
69
-     *
70
-     * @var array
71
-     */
72
-    protected static $_js_localization = array();
73
-
74
-    /**
75
-     * whether or not the form's localized validation JS vars have been set
76
-     *
77
-     * @type boolean
78
-     */
79
-    protected static $_scripts_localized = false;
80
-
81
-
82
-    /**
83
-     * when constructing a proper form section, calls _construct_finalize on children
84
-     * so that they know who their parent is, and what name they've been given.
85
-     *
86
-     * @param array[] $options_array   {
87
-     * @type          $subsections     EE_Form_Section_Validatable[] where keys are the section's name
88
-     * @type          $include         string[] numerically-indexed where values are section names to be included,
89
-     *                                 and in that order. This is handy if you want
90
-     *                                 the subsections to be ordered differently than the default, and if you override
91
-     *                                 which fields are shown
92
-     * @type          $exclude         string[] values are subsections to be excluded. This is handy if you want
93
-     *                                 to remove certain default subsections (note: if you specify BOTH 'include' AND
94
-     *                                 'exclude', the inclusions will be applied first, and the exclusions will exclude
95
-     *                                 items from that list of inclusions)
96
-     * @type          $layout_strategy EE_Form_Section_Layout_Base strategy for laying out the form
97
-     *                                 } @see EE_Form_Section_Validatable::__construct()
98
-     * @throws EE_Error
99
-     */
100
-    public function __construct($options_array = array())
101
-    {
102
-        $options_array = (array) apply_filters(
103
-            'FHEE__EE_Form_Section_Proper___construct__options_array',
104
-            $options_array,
105
-            $this
106
-        );
107
-        // call parent first, as it may be setting the name
108
-        parent::__construct($options_array);
109
-        // if they've included subsections in the constructor, add them now
110
-        if (isset($options_array['include'])) {
111
-            // we are going to make sure we ONLY have those subsections to include
112
-            // AND we are going to make sure they're in that specified order
113
-            $reordered_subsections = array();
114
-            foreach ($options_array['include'] as $input_name) {
115
-                if (isset($this->_subsections[ $input_name ])) {
116
-                    $reordered_subsections[ $input_name ] = $this->_subsections[ $input_name ];
117
-                }
118
-            }
119
-            $this->_subsections = $reordered_subsections;
120
-        }
121
-        if (isset($options_array['exclude'])) {
122
-            $exclude            = $options_array['exclude'];
123
-            $this->_subsections = array_diff_key($this->_subsections, array_flip($exclude));
124
-        }
125
-        if (isset($options_array['layout_strategy'])) {
126
-            $this->_layout_strategy = $options_array['layout_strategy'];
127
-        }
128
-        if (! $this->_layout_strategy) {
129
-            $this->_layout_strategy = is_admin() ? new EE_Admin_Two_Column_Layout() : new EE_Two_Column_Layout();
130
-        }
131
-        $this->_layout_strategy->_construct_finalize($this);
132
-        // ok so we are definitely going to want the forms JS,
133
-        // so enqueue it or remember to enqueue it during wp_enqueue_scripts
134
-        if (did_action('wp_enqueue_scripts') || did_action('admin_enqueue_scripts')) {
135
-            // ok so they've constructed this object after when they should have.
136
-            // just enqueue the generic form scripts and initialize the form immediately in the JS
137
-            EE_Form_Section_Proper::wp_enqueue_scripts(true);
138
-        } else {
139
-            add_action('wp_enqueue_scripts', array('EE_Form_Section_Proper', 'wp_enqueue_scripts'));
140
-            add_action('admin_enqueue_scripts', array('EE_Form_Section_Proper', 'wp_enqueue_scripts'));
141
-        }
142
-        add_action('wp_footer', array($this, 'ensure_scripts_localized'), 1);
143
-        /**
144
-         * Gives other plugins a chance to hook in before construct finalize is called.
145
-         * The form probably doesn't yet have a parent form section.
146
-         * Since 4.9.32, when this action was introduced, this is the best place to add a subsection onto a form,
147
-         * assuming you don't care what the form section's name, HTML ID, or HTML name etc are.
148
-         * Also see AHEE__EE_Form_Section_Proper___construct_finalize__end
149
-         *
150
-         * @since 4.9.32
151
-         * @param EE_Form_Section_Proper $this          before __construct is done, but all of its logic,
152
-         *                                              except maybe calling _construct_finalize has been done
153
-         * @param array                  $options_array options passed into the constructor
154
-         */
155
-        do_action(
156
-            'AHEE__EE_Form_Input_Base___construct__before_construct_finalize_called',
157
-            $this,
158
-            $options_array
159
-        );
160
-        if (isset($options_array['name'])) {
161
-            $this->_construct_finalize(null, $options_array['name']);
162
-        }
163
-    }
164
-
165
-
166
-    /**
167
-     * Finishes construction given the parent form section and this form section's name
168
-     *
169
-     * @param EE_Form_Section_Proper $parent_form_section
170
-     * @param string                 $name
171
-     * @throws EE_Error
172
-     */
173
-    public function _construct_finalize($parent_form_section, $name)
174
-    {
175
-        parent::_construct_finalize($parent_form_section, $name);
176
-        $this->_set_default_name_if_empty();
177
-        $this->_set_default_html_id_if_empty();
178
-        foreach ($this->_subsections as $subsection_name => $subsection) {
179
-            if ($subsection instanceof EE_Form_Section_Base) {
180
-                $subsection->_construct_finalize($this, $subsection_name);
181
-            } else {
182
-                throw new EE_Error(
183
-                    sprintf(
184
-                        esc_html__(
185
-                            'Subsection "%s" is not an instanceof EE_Form_Section_Base on form "%s". It is a "%s"',
186
-                            'event_espresso'
187
-                        ),
188
-                        $subsection_name,
189
-                        get_class($this),
190
-                        $subsection ? get_class($subsection) : esc_html__('NULL', 'event_espresso')
191
-                    )
192
-                );
193
-            }
194
-        }
195
-        /**
196
-         * Action performed just after form has been given a name (and HTML ID etc) and is fully constructed.
197
-         * If you have code that should modify the form and needs it and its subsections to have a name, HTML ID
198
-         * (or other attributes derived from the name like the HTML label id, etc), this is where it should be done.
199
-         * This might only happen just before displaying the form, or just before it receives form submission data.
200
-         * If you need to modify the form or its subsections before _construct_finalize is called on it (and we've
201
-         * ensured it has a name, HTML IDs, etc
202
-         *
203
-         * @param EE_Form_Section_Proper      $this
204
-         * @param EE_Form_Section_Proper|null $parent_form_section
205
-         * @param string                      $name
206
-         */
207
-        do_action(
208
-            'AHEE__EE_Form_Section_Proper___construct_finalize__end',
209
-            $this,
210
-            $parent_form_section,
211
-            $name
212
-        );
213
-    }
214
-
215
-
216
-    /**
217
-     * Gets the layout strategy for this form section
218
-     *
219
-     * @return EE_Form_Section_Layout_Base
220
-     */
221
-    public function get_layout_strategy()
222
-    {
223
-        return $this->_layout_strategy;
224
-    }
225
-
226
-
227
-    /**
228
-     * Gets the HTML for a single input for this form section according
229
-     * to the layout strategy
230
-     *
231
-     * @param EE_Form_Input_Base $input
232
-     * @return string
233
-     */
234
-    public function get_html_for_input($input)
235
-    {
236
-        return $this->_layout_strategy->layout_input($input);
237
-    }
238
-
239
-
240
-    /**
241
-     * was_submitted - checks if form inputs are present in request data
242
-     * Basically an alias for form_data_present_in() (which is used by both
243
-     * proper form sections and form inputs)
244
-     *
245
-     * @param null $form_data
246
-     * @return boolean
247
-     * @throws EE_Error
248
-     */
249
-    public function was_submitted($form_data = null)
250
-    {
251
-        return $this->form_data_present_in($form_data);
252
-    }
253
-
254
-    /**
255
-     * Gets the cached request data; but if there is none, or $req_data was set with
256
-     * something different, refresh the cache, and then return it
257
-     * @param null $req_data
258
-     * @return array
259
-     */
260
-    protected function getCachedRequest($req_data = null)
261
-    {
262
-        if (
263
-            $this->cached_request_data === null
264
-            || (
265
-                $req_data !== null
266
-                && $req_data !== $this->cached_request_data
267
-            )
268
-        ) {
269
-            $req_data = apply_filters(
270
-                'FHEE__EE_Form_Section_Proper__receive_form_submission__req_data',
271
-                $req_data,
272
-                $this
273
-            );
274
-            if ($req_data === null) {
275
-                /** @var RequestInterface $request */
276
-                $request = LoaderFactory::getLoader()->getShared(RequestInterface::class);
277
-                $req_data = $request->requestParams();
278
-            }
279
-            $req_data = apply_filters(
280
-                'FHEE__EE_Form_Section_Proper__receive_form_submission__request_data',
281
-                $req_data,
282
-                $this
283
-            );
284
-            $this->cached_request_data = (array) $req_data;
285
-        }
286
-        return $this->cached_request_data;
287
-    }
288
-
289
-
290
-    /**
291
-     * After the form section is initially created, call this to sanitize the data in the submission
292
-     * which relates to this form section, validate it, and set it as properties on the form.
293
-     *
294
-     * @param array|null $req_data should usually be post data (the default).
295
-     *                             However, you CAN supply a different array.
296
-     *                             Consider using set_defaults() instead however.
297
-     *                             (If you rendered the form in the page using echo $form_x->get_html()
298
-     *                             the inputs will have the correct name in the request data for this function
299
-     *                             to find them and populate the form with them.
300
-     *                             If you have a flat form (with only input subsections),
301
-     *                             you can supply a flat array where keys
302
-     *                             are the form input names and values are their values)
303
-     * @param boolean    $validate whether or not to perform validation on this data. Default is,
304
-     *                             of course, to validate that data, and set errors on the invalid values.
305
-     *                             But if the data has already been validated
306
-     *                             (eg you validated the data then stored it in the DB)
307
-     *                             you may want to skip this step.
308
-     * @throws InvalidArgumentException
309
-     * @throws InvalidInterfaceException
310
-     * @throws InvalidDataTypeException
311
-     * @throws EE_Error
312
-     */
313
-    public function receive_form_submission($req_data = null, $validate = true)
314
-    {
315
-        $req_data = $this->getCachedRequest($req_data);
316
-        $this->_normalize($req_data);
317
-        if ($validate) {
318
-            $this->_validate();
319
-            // if it's invalid, we're going to want to re-display so remember what they submitted
320
-            if (! $this->is_valid()) {
321
-                $this->store_submitted_form_data_in_session();
322
-            }
323
-        }
324
-        if ($this->submission_error_message() === '' && ! $this->is_valid()) {
325
-            $this->set_submission_error_message();
326
-        }
327
-        do_action(
328
-            'AHEE__EE_Form_Section_Proper__receive_form_submission__end',
329
-            $req_data,
330
-            $this,
331
-            $validate
332
-        );
333
-    }
334
-
335
-
336
-    /**
337
-     * caches the originally submitted input values in the session
338
-     * so that they can be used to repopulate the form if it failed validation
339
-     *
340
-     * @return boolean whether or not the data was successfully stored in the session
341
-     * @throws InvalidArgumentException
342
-     * @throws InvalidInterfaceException
343
-     * @throws InvalidDataTypeException
344
-     * @throws EE_Error
345
-     */
346
-    protected function store_submitted_form_data_in_session()
347
-    {
348
-        return EE_Registry::instance()->SSN->set_session_data(
349
-            array(
350
-                EE_Form_Section_Proper::SUBMITTED_FORM_DATA_SSN_KEY => $this->submitted_values(true),
351
-            )
352
-        );
353
-    }
354
-
355
-
356
-    /**
357
-     * retrieves the originally submitted input values in the session
358
-     * so that they can be used to repopulate the form if it failed validation
359
-     *
360
-     * @return array
361
-     * @throws InvalidArgumentException
362
-     * @throws InvalidInterfaceException
363
-     * @throws InvalidDataTypeException
364
-     */
365
-    protected function get_submitted_form_data_from_session()
366
-    {
367
-        $session = EE_Registry::instance()->SSN;
368
-        if ($session instanceof EE_Session) {
369
-            return $session->get_session_data(
370
-                EE_Form_Section_Proper::SUBMITTED_FORM_DATA_SSN_KEY
371
-            );
372
-        }
373
-        return array();
374
-    }
375
-
376
-
377
-    /**
378
-     * flushed the originally submitted input values from the session
379
-     *
380
-     * @return boolean whether or not the data was successfully removed from the session
381
-     * @throws InvalidArgumentException
382
-     * @throws InvalidInterfaceException
383
-     * @throws InvalidDataTypeException
384
-     */
385
-    public static function flush_submitted_form_data_from_session()
386
-    {
387
-        return EE_Registry::instance()->SSN->reset_data(
388
-            array(EE_Form_Section_Proper::SUBMITTED_FORM_DATA_SSN_KEY)
389
-        );
390
-    }
391
-
392
-
393
-    /**
394
-     * Populates this form and its subsections with data from the session.
395
-     * (Wrapper for EE_Form_Section_Proper::receive_form_submission, so it shows
396
-     * validation errors when displaying too)
397
-     * Returns true if the form was populated from the session, false otherwise
398
-     *
399
-     * @return boolean
400
-     * @throws InvalidArgumentException
401
-     * @throws InvalidInterfaceException
402
-     * @throws InvalidDataTypeException
403
-     * @throws EE_Error
404
-     */
405
-    public function populate_from_session()
406
-    {
407
-        $form_data_in_session = $this->get_submitted_form_data_from_session();
408
-        if (empty($form_data_in_session)) {
409
-            return false;
410
-        }
411
-        $this->receive_form_submission($form_data_in_session);
412
-        add_action('shutdown', array('EE_Form_Section_Proper', 'flush_submitted_form_data_from_session'));
413
-        if ($this->form_data_present_in($form_data_in_session)) {
414
-            return true;
415
-        }
416
-        return false;
417
-    }
418
-
419
-
420
-    /**
421
-     * Populates the default data for the form, given an array where keys are
422
-     * the input names, and values are their values (preferably normalized to be their
423
-     * proper PHP types, not all strings... although that should be ok too).
424
-     * Proper subsections are sub-arrays, the key being the subsection's name, and
425
-     * the value being an array formatted in teh same way
426
-     *
427
-     * @param array $default_data
428
-     * @throws EE_Error
429
-     */
430
-    public function populate_defaults($default_data)
431
-    {
432
-        foreach ($this->subsections(false) as $subsection_name => $subsection) {
433
-            if (isset($default_data[ $subsection_name ])) {
434
-                if ($subsection instanceof EE_Form_Input_Base) {
435
-                    $subsection->set_default($default_data[ $subsection_name ]);
436
-                } elseif ($subsection instanceof EE_Form_Section_Proper) {
437
-                    $subsection->populate_defaults($default_data[ $subsection_name ]);
438
-                }
439
-            }
440
-        }
441
-    }
442
-
443
-
444
-    /**
445
-     * returns true if subsection exists
446
-     *
447
-     * @param string $name
448
-     * @return boolean
449
-     */
450
-    public function subsection_exists($name)
451
-    {
452
-        return isset($this->_subsections[ $name ]) ? true : false;
453
-    }
454
-
455
-
456
-    /**
457
-     * Gets the subsection specified by its name
458
-     *
459
-     * @param string  $name
460
-     * @param boolean $require_construction_to_be_finalized most client code should leave this as TRUE
461
-     *                                                      so that the inputs will be properly configured.
462
-     *                                                      However, some client code may be ok
463
-     *                                                      with construction finalize being called later
464
-     *                                                      (realizing that the subsections' html names
465
-     *                                                      might not be set yet, etc.)
466
-     * @return EE_Form_Section_Base
467
-     * @throws EE_Error
468
-     */
469
-    public function get_subsection($name, $require_construction_to_be_finalized = true)
470
-    {
471
-        if ($require_construction_to_be_finalized) {
472
-            $this->ensure_construct_finalized_called();
473
-        }
474
-        return $this->subsection_exists($name) ? $this->_subsections[ $name ] : null;
475
-    }
476
-
477
-
478
-    /**
479
-     * Gets all the validatable subsections of this form section
480
-     *
481
-     * @return EE_Form_Section_Validatable[]
482
-     * @throws EE_Error
483
-     */
484
-    public function get_validatable_subsections()
485
-    {
486
-        $validatable_subsections = array();
487
-        foreach ($this->subsections() as $name => $obj) {
488
-            if ($obj instanceof EE_Form_Section_Validatable) {
489
-                $validatable_subsections[ $name ] = $obj;
490
-            }
491
-        }
492
-        return $validatable_subsections;
493
-    }
494
-
495
-
496
-    /**
497
-     * Gets an input by the given name. If not found, or if its not an EE_FOrm_Input_Base child,
498
-     * throw an EE_Error.
499
-     *
500
-     * @param string  $name
501
-     * @param boolean $require_construction_to_be_finalized most client code should
502
-     *                                                      leave this as TRUE so that the inputs will be properly
503
-     *                                                      configured. However, some client code may be ok with
504
-     *                                                      construction finalize being called later
505
-     *                                                      (realizing that the subsections' html names might not be
506
-     *                                                      set yet, etc.)
507
-     * @return EE_Form_Input_Base
508
-     * @throws EE_Error
509
-     */
510
-    public function get_input($name, $require_construction_to_be_finalized = true)
511
-    {
512
-        $subsection = $this->get_subsection(
513
-            $name,
514
-            $require_construction_to_be_finalized
515
-        );
516
-        if (! $subsection instanceof EE_Form_Input_Base) {
517
-            throw new EE_Error(
518
-                sprintf(
519
-                    esc_html__(
520
-                        "Subsection '%s' is not an instanceof EE_Form_Input_Base on form '%s'. It is a '%s'",
521
-                        'event_espresso'
522
-                    ),
523
-                    $name,
524
-                    get_class($this),
525
-                    $subsection ? get_class($subsection) : esc_html__('NULL', 'event_espresso')
526
-                )
527
-            );
528
-        }
529
-        return $subsection;
530
-    }
531
-
532
-
533
-    /**
534
-     * Like get_input(), gets the proper subsection of the form given the name,
535
-     * otherwise throws an EE_Error
536
-     *
537
-     * @param string  $name
538
-     * @param boolean $require_construction_to_be_finalized most client code should
539
-     *                                                      leave this as TRUE so that the inputs will be properly
540
-     *                                                      configured. However, some client code may be ok with
541
-     *                                                      construction finalize being called later
542
-     *                                                      (realizing that the subsections' html names might not be
543
-     *                                                      set yet, etc.)
544
-     * @return EE_Form_Section_Proper
545
-     * @throws EE_Error
546
-     */
547
-    public function get_proper_subsection($name, $require_construction_to_be_finalized = true)
548
-    {
549
-        $subsection = $this->get_subsection(
550
-            $name,
551
-            $require_construction_to_be_finalized
552
-        );
553
-        if (! $subsection instanceof EE_Form_Section_Proper) {
554
-            throw new EE_Error(
555
-                sprintf(
556
-                    esc_html__(
557
-                        "Subsection '%'s is not an instanceof EE_Form_Section_Proper on form '%s'",
558
-                        'event_espresso'
559
-                    ),
560
-                    $name,
561
-                    get_class($this)
562
-                )
563
-            );
564
-        }
565
-        return $subsection;
566
-    }
567
-
568
-
569
-    /**
570
-     * Gets the value of the specified input. Should be called after receive_form_submission()
571
-     * or populate_defaults() on the form, where the normalized value on the input is set.
572
-     *
573
-     * @param string $name
574
-     * @return mixed depending on the input's type and its normalization strategy
575
-     * @throws EE_Error
576
-     */
577
-    public function get_input_value($name)
578
-    {
579
-        $input = $this->get_input($name);
580
-        return $input->normalized_value();
581
-    }
582
-
583
-
584
-    /**
585
-     * Checks if this form section itself is valid, and then checks its subsections
586
-     *
587
-     * @throws EE_Error
588
-     * @return boolean
589
-     */
590
-    public function is_valid()
591
-    {
592
-        if ($this->is_valid === null) {
593
-            if (! $this->has_received_submission()) {
594
-                throw new EE_Error(
595
-                    sprintf(
596
-                        esc_html__(
597
-                            'You cannot check if a form is valid before receiving the form submission using receive_form_submission',
598
-                            'event_espresso'
599
-                        )
600
-                    )
601
-                );
602
-            }
603
-            if (! parent::is_valid()) {
604
-                $this->is_valid = false;
605
-            } else {
606
-                // ok so no general errors to this entire form section.
607
-                // so let's check the subsections, but only set errors if that hasn't been done yet
608
-                $this->is_valid = true;
609
-                foreach ($this->get_validatable_subsections() as $subsection) {
610
-                    if (! $subsection->is_valid()) {
611
-                        $this->is_valid = false;
612
-                    }
613
-                }
614
-            }
615
-        }
616
-        return $this->is_valid;
617
-    }
618
-
619
-
620
-    /**
621
-     * gets the default name of this form section if none is specified
622
-     *
623
-     * @return void
624
-     */
625
-    protected function _set_default_name_if_empty()
626
-    {
627
-        if (! $this->_name) {
628
-            $classname    = get_class($this);
629
-            $default_name = str_replace('EE_', '', $classname);
630
-            $this->_name  = $default_name;
631
-        }
632
-    }
633
-
634
-
635
-    /**
636
-     * Returns the HTML for the form, except for the form opening and closing tags
637
-     * (as the form section doesn't know where you necessarily want to send the information to),
638
-     * and except for a submit button. Enqueues JS and CSS; if called early enough we will
639
-     * try to enqueue them in the header, otherwise they'll be enqueued in the footer.
640
-     * Not doing_it_wrong because theoretically this CAN be used properly,
641
-     * provided its used during "wp_enqueue_scripts", or it doesn't need to enqueue
642
-     * any CSS.
643
-     *
644
-     * @throws InvalidArgumentException
645
-     * @throws InvalidInterfaceException
646
-     * @throws InvalidDataTypeException
647
-     * @throws EE_Error
648
-     */
649
-    public function get_html_and_js()
650
-    {
651
-        $this->enqueue_js();
652
-        return $this->get_html();
653
-    }
654
-
655
-
656
-    /**
657
-     * returns HTML for displaying this form section. recursively calls display_section() on all subsections
658
-     *
659
-     * @param bool $display_previously_submitted_data
660
-     * @return string
661
-     * @throws InvalidArgumentException
662
-     * @throws InvalidInterfaceException
663
-     * @throws InvalidDataTypeException
664
-     * @throws EE_Error
665
-     * @throws EE_Error
666
-     * @throws EE_Error
667
-     */
668
-    public function get_html($display_previously_submitted_data = true)
669
-    {
670
-        $this->ensure_construct_finalized_called();
671
-        if ($display_previously_submitted_data) {
672
-            $this->populate_from_session();
673
-        }
674
-        return $this->_form_html_filter
675
-            ? $this->_form_html_filter->filterHtml($this->_layout_strategy->layout_form(), $this)
676
-            : $this->_layout_strategy->layout_form();
677
-    }
678
-
679
-
680
-    /**
681
-     * enqueues JS and CSS for the form.
682
-     * It is preferred to call this before wp_enqueue_scripts so the
683
-     * scripts and styles can be put in the header, but if called later
684
-     * they will be put in the footer (which is OK for JS, but in HTML4 CSS should
685
-     * only be in the header; but in HTML5 its ok in the body.
686
-     * See http://stackoverflow.com/questions/4957446/load-external-css-file-in-body-tag.
687
-     * So if your form enqueues CSS, it's preferred to call this before wp_enqueue_scripts.)
688
-     *
689
-     * @return void
690
-     * @throws EE_Error
691
-     */
692
-    public function enqueue_js()
693
-    {
694
-        $this->_enqueue_and_localize_form_js();
695
-        foreach ($this->subsections() as $subsection) {
696
-            $subsection->enqueue_js();
697
-        }
698
-    }
699
-
700
-
701
-    /**
702
-     * adds a filter so that jquery validate gets enqueued in EE_System::wp_enqueue_scripts().
703
-     * This must be done BEFORE wp_enqueue_scripts() gets called, which is on
704
-     * the wp_enqueue_scripts hook.
705
-     * However, registering the form js and localizing it can happen when we
706
-     * actually output the form (which is preferred, seeing how teh form's fields
707
-     * could change until it's actually outputted)
708
-     *
709
-     * @param boolean $init_form_validation_automatically whether or not we want the form validation
710
-     *                                                    to be triggered automatically or not
711
-     * @return void
712
-     */
713
-    public static function wp_enqueue_scripts($init_form_validation_automatically = true)
714
-    {
715
-        wp_register_script(
716
-            'ee_form_section_validation',
717
-            EE_GLOBAL_ASSETS_URL . 'scripts' . '/form_section_validation.js',
718
-            array('jquery-validate', 'jquery-ui-datepicker', 'jquery-validate-extra-methods'),
719
-            EVENT_ESPRESSO_VERSION,
720
-            true
721
-        );
722
-        wp_localize_script(
723
-            'ee_form_section_validation',
724
-            'ee_form_section_validation_init',
725
-            array('init' => $init_form_validation_automatically ? '1' : '0')
726
-        );
727
-    }
728
-
729
-
730
-    /**
731
-     * gets the variables used by form_section_validation.js.
732
-     * This needs to be called AFTER we've called $this->_enqueue_jquery_validate_script,
733
-     * but before the wordpress hook wp_loaded
734
-     *
735
-     * @throws EE_Error
736
-     */
737
-    public function _enqueue_and_localize_form_js()
738
-    {
739
-        $this->ensure_construct_finalized_called();
740
-        // actually, we don't want to localize just yet. There may be other forms on the page.
741
-        // so we need to add our form section data to a static variable accessible by all form sections
742
-        // and localize it just before the footer
743
-        $this->localize_validation_rules();
744
-        add_action('wp_footer', array('EE_Form_Section_Proper', 'localize_script_for_all_forms'), 2);
745
-        add_action('admin_footer', array('EE_Form_Section_Proper', 'localize_script_for_all_forms'));
746
-    }
747
-
748
-
749
-    /**
750
-     * add our form section data to a static variable accessible by all form sections
751
-     *
752
-     * @param bool $return_for_subsection
753
-     * @return void
754
-     * @throws EE_Error
755
-     */
756
-    public function localize_validation_rules($return_for_subsection = false)
757
-    {
758
-        // we only want to localize vars ONCE for the entire form,
759
-        // so if the form section doesn't have a parent, then it must be the top dog
760
-        if ($return_for_subsection || ! $this->parent_section()) {
761
-            EE_Form_Section_Proper::$_js_localization['form_data'][ $this->html_id() ] = array(
762
-                'form_section_id'  => $this->html_id(true),
763
-                'validation_rules' => $this->get_jquery_validation_rules(),
764
-                'other_data'       => $this->get_other_js_data(),
765
-                'errors'           => $this->subsection_validation_errors_by_html_name(),
766
-            );
767
-            EE_Form_Section_Proper::$_scripts_localized                                = true;
768
-        }
769
-    }
770
-
771
-
772
-    /**
773
-     * Gets an array of extra data that will be useful for client-side javascript.
774
-     * This is primarily data added by inputs and forms in addition to any
775
-     * scripts they might enqueue
776
-     *
777
-     * @param array $form_other_js_data
778
-     * @return array
779
-     * @throws EE_Error
780
-     */
781
-    public function get_other_js_data($form_other_js_data = array())
782
-    {
783
-        foreach ($this->subsections() as $subsection) {
784
-            $form_other_js_data = $subsection->get_other_js_data($form_other_js_data);
785
-        }
786
-        return $form_other_js_data;
787
-    }
788
-
789
-
790
-    /**
791
-     * Gets a flat array of inputs for this form section and its subsections.
792
-     * Keys are their form names, and values are the inputs themselves
793
-     *
794
-     * @return EE_Form_Input_Base
795
-     * @throws EE_Error
796
-     */
797
-    public function inputs_in_subsections()
798
-    {
799
-        $inputs = array();
800
-        foreach ($this->subsections() as $subsection) {
801
-            if ($subsection instanceof EE_Form_Input_Base) {
802
-                $inputs[ $subsection->html_name() ] = $subsection;
803
-            } elseif ($subsection instanceof EE_Form_Section_Proper) {
804
-                $inputs += $subsection->inputs_in_subsections();
805
-            }
806
-        }
807
-        return $inputs;
808
-    }
809
-
810
-
811
-    /**
812
-     * Gets a flat array of all the validation errors.
813
-     * Keys are html names (because those should be unique)
814
-     * and values are a string of all their validation errors
815
-     *
816
-     * @return string[]
817
-     * @throws EE_Error
818
-     */
819
-    public function subsection_validation_errors_by_html_name()
820
-    {
821
-        $inputs = $this->inputs();
822
-        $errors = array();
823
-        foreach ($inputs as $form_input) {
824
-            if ($form_input instanceof EE_Form_Input_Base && $form_input->get_validation_errors()) {
825
-                $errors[ $form_input->html_name() ] = $form_input->get_validation_error_string();
826
-            }
827
-        }
828
-        return $errors;
829
-    }
830
-
831
-
832
-    /**
833
-     * passes all the form data required by the JS to the JS, and enqueues the few required JS files.
834
-     * Should be setup by each form during the _enqueues_and_localize_form_js
835
-     *
836
-     * @throws InvalidArgumentException
837
-     * @throws InvalidInterfaceException
838
-     * @throws InvalidDataTypeException
839
-     */
840
-    public static function localize_script_for_all_forms()
841
-    {
842
-        // allow inputs and stuff to hook in their JS and stuff here
843
-        do_action('AHEE__EE_Form_Section_Proper__localize_script_for_all_forms__begin');
844
-        EE_Form_Section_Proper::$_js_localization['localized_error_messages'] = EE_Form_Section_Proper::_get_localized_error_messages();
845
-        $email_validation_level = isset(EE_Registry::instance()->CFG->registration->email_validation_level)
846
-            ? EE_Registry::instance()->CFG->registration->email_validation_level
847
-            : 'wp_default';
848
-        EE_Form_Section_Proper::$_js_localization['email_validation_level']   = $email_validation_level;
849
-        wp_enqueue_script('ee_form_section_validation');
850
-        wp_localize_script(
851
-            'ee_form_section_validation',
852
-            'ee_form_section_vars',
853
-            EE_Form_Section_Proper::$_js_localization
854
-        );
855
-    }
856
-
857
-
858
-    /**
859
-     * ensure_scripts_localized
860
-     *
861
-     * @throws EE_Error
862
-     */
863
-    public function ensure_scripts_localized()
864
-    {
865
-        if (! EE_Form_Section_Proper::$_scripts_localized) {
866
-            $this->_enqueue_and_localize_form_js();
867
-        }
868
-    }
869
-
870
-
871
-    /**
872
-     * Gets the hard-coded validation error messages to be used in the JS. The convention
873
-     * is that the key here should be the same as the custom validation rule put in the JS file
874
-     *
875
-     * @return array keys are custom validation rules, and values are internationalized strings
876
-     */
877
-    private static function _get_localized_error_messages()
878
-    {
879
-        return array(
880
-            'validUrl' => wp_strip_all_tags(__('This is not a valid absolute URL. Eg, http://domain.com/monkey.jpg', 'event_espresso')),
881
-            'regex'    => wp_strip_all_tags(__('Please check your input', 'event_espresso'))
882
-        );
883
-    }
884
-
885
-
886
-    /**
887
-     * @return array
888
-     */
889
-    public static function js_localization()
890
-    {
891
-        return self::$_js_localization;
892
-    }
893
-
894
-
895
-    /**
896
-     * @return void
897
-     */
898
-    public static function reset_js_localization()
899
-    {
900
-        self::$_js_localization = array();
901
-    }
902
-
903
-
904
-    /**
905
-     * Gets the JS to put inside the jquery validation rules for subsection of this form section.
906
-     * See parent function for more...
907
-     *
908
-     * @return array
909
-     * @throws EE_Error
910
-     */
911
-    public function get_jquery_validation_rules()
912
-    {
913
-        $jquery_validation_rules = array();
914
-        foreach ($this->get_validatable_subsections() as $subsection) {
915
-            $jquery_validation_rules = array_merge(
916
-                $jquery_validation_rules,
917
-                $subsection->get_jquery_validation_rules()
918
-            );
919
-        }
920
-        return $jquery_validation_rules;
921
-    }
922
-
923
-
924
-    /**
925
-     * Sanitizes all the data and sets the sanitized value of each field
926
-     *
927
-     * @param array $req_data
928
-     * @return void
929
-     * @throws EE_Error
930
-     */
931
-    protected function _normalize($req_data)
932
-    {
933
-        $this->_received_submission = true;
934
-        $this->_validation_errors   = array();
935
-        foreach ($this->get_validatable_subsections() as $subsection) {
936
-            try {
937
-                $subsection->_normalize($req_data);
938
-            } catch (EE_Validation_Error $e) {
939
-                $subsection->add_validation_error($e);
940
-            }
941
-        }
942
-    }
943
-
944
-
945
-    /**
946
-     * Performs validation on this form section and its subsections.
947
-     * For each subsection,
948
-     * calls _validate_{subsection_name} on THIS form (if the function exists)
949
-     * and passes it the subsection, then calls _validate on that subsection.
950
-     * If you need to perform validation on the form as a whole (considering multiple)
951
-     * you would be best to override this _validate method,
952
-     * calling parent::_validate() first.
953
-     *
954
-     * @throws EE_Error
955
-     */
956
-    protected function _validate()
957
-    {
958
-        // reset the cache of whether this form is valid or not- we're re-validating it now
959
-        $this->is_valid = null;
960
-        foreach ($this->get_validatable_subsections() as $subsection_name => $subsection) {
961
-            if (method_exists($this, '_validate_' . $subsection_name)) {
962
-                call_user_func_array(array($this, '_validate_' . $subsection_name), array($subsection));
963
-            }
964
-            $subsection->_validate();
965
-        }
966
-    }
967
-
968
-
969
-    /**
970
-     * Gets all the validated inputs for the form section
971
-     *
972
-     * @return array
973
-     * @throws EE_Error
974
-     */
975
-    public function valid_data()
976
-    {
977
-        $inputs = array();
978
-        foreach ($this->subsections() as $subsection_name => $subsection) {
979
-            if ($subsection instanceof EE_Form_Section_Proper) {
980
-                $inputs[ $subsection_name ] = $subsection->valid_data();
981
-            } elseif ($subsection instanceof EE_Form_Input_Base) {
982
-                $inputs[ $subsection_name ] = $subsection->normalized_value();
983
-            }
984
-        }
985
-        return $inputs;
986
-    }
987
-
988
-
989
-    /**
990
-     * Gets all the inputs on this form section
991
-     *
992
-     * @return EE_Form_Input_Base[]
993
-     * @throws EE_Error
994
-     */
995
-    public function inputs()
996
-    {
997
-        $inputs = array();
998
-        foreach ($this->subsections() as $subsection_name => $subsection) {
999
-            if ($subsection instanceof EE_Form_Input_Base) {
1000
-                $inputs[ $subsection_name ] = $subsection;
1001
-            }
1002
-        }
1003
-        return $inputs;
1004
-    }
1005
-
1006
-
1007
-    /**
1008
-     * Gets all the subsections which are a proper form
1009
-     *
1010
-     * @return EE_Form_Section_Proper[]
1011
-     * @throws EE_Error
1012
-     */
1013
-    public function subforms()
1014
-    {
1015
-        $form_sections = array();
1016
-        foreach ($this->subsections() as $name => $obj) {
1017
-            if ($obj instanceof EE_Form_Section_Proper) {
1018
-                $form_sections[ $name ] = $obj;
1019
-            }
1020
-        }
1021
-        return $form_sections;
1022
-    }
1023
-
1024
-
1025
-    /**
1026
-     * Gets all the subsections (inputs, proper subsections, or html-only sections).
1027
-     * Consider using inputs() or subforms()
1028
-     * if you only want form inputs or proper form sections.
1029
-     *
1030
-     * @param boolean $require_construction_to_be_finalized most client code should
1031
-     *                                                      leave this as TRUE so that the inputs will be properly
1032
-     *                                                      configured. However, some client code may be ok with
1033
-     *                                                      construction finalize being called later
1034
-     *                                                      (realizing that the subsections' html names might not be
1035
-     *                                                      set yet, etc.)
1036
-     * @return EE_Form_Section_Proper[]
1037
-     * @throws EE_Error
1038
-     */
1039
-    public function subsections($require_construction_to_be_finalized = true)
1040
-    {
1041
-        if ($require_construction_to_be_finalized) {
1042
-            $this->ensure_construct_finalized_called();
1043
-        }
1044
-        return $this->_subsections;
1045
-    }
1046
-
1047
-
1048
-    /**
1049
-     * Returns whether this form has any subforms or inputs
1050
-     * @return bool
1051
-     */
1052
-    public function hasSubsections()
1053
-    {
1054
-        return ! empty($this->_subsections);
1055
-    }
1056
-
1057
-
1058
-    /**
1059
-     * Returns a simple array where keys are input names, and values are their normalized
1060
-     * values. (Similar to calling get_input_value on inputs)
1061
-     *
1062
-     * @param boolean $include_subform_inputs Whether to include inputs from subforms,
1063
-     *                                        or just this forms' direct children inputs
1064
-     * @param boolean $flatten                Whether to force the results into 1-dimensional array,
1065
-     *                                        or allow multidimensional array
1066
-     * @return array if $flatten is TRUE it will always be a 1-dimensional array
1067
-     *                                        with array keys being input names
1068
-     *                                        (regardless of whether they are from a subsection or not),
1069
-     *                                        and if $flatten is FALSE it can be a multidimensional array
1070
-     *                                        where keys are always subsection names and values are either
1071
-     *                                        the input's normalized value, or an array like the top-level array
1072
-     * @throws EE_Error
1073
-     */
1074
-    public function input_values($include_subform_inputs = false, $flatten = false)
1075
-    {
1076
-        return $this->_input_values(false, $include_subform_inputs, $flatten);
1077
-    }
1078
-
1079
-
1080
-    /**
1081
-     * Similar to EE_Form_Section_Proper::input_values(), except this returns the 'display_value'
1082
-     * of each input. On some inputs (especially radio boxes or checkboxes), the value stored
1083
-     * is not necessarily the value we want to display to users. This creates an array
1084
-     * where keys are the input names, and values are their display values
1085
-     *
1086
-     * @param boolean $include_subform_inputs Whether to include inputs from subforms,
1087
-     *                                        or just this forms' direct children inputs
1088
-     * @param boolean $flatten                Whether to force the results into 1-dimensional array,
1089
-     *                                        or allow multidimensional array
1090
-     * @return array if $flatten is TRUE it will always be a 1-dimensional array
1091
-     *                                        with array keys being input names
1092
-     *                                        (regardless of whether they are from a subsection or not),
1093
-     *                                        and if $flatten is FALSE it can be a multidimensional array
1094
-     *                                        where keys are always subsection names and values are either
1095
-     *                                        the input's normalized value, or an array like the top-level array
1096
-     * @throws EE_Error
1097
-     */
1098
-    public function input_pretty_values($include_subform_inputs = false, $flatten = false)
1099
-    {
1100
-        return $this->_input_values(true, $include_subform_inputs, $flatten);
1101
-    }
1102
-
1103
-
1104
-    /**
1105
-     * Gets the input values from the form
1106
-     *
1107
-     * @param boolean $pretty                 Whether to retrieve the pretty value,
1108
-     *                                        or just the normalized value
1109
-     * @param boolean $include_subform_inputs Whether to include inputs from subforms,
1110
-     *                                        or just this forms' direct children inputs
1111
-     * @param boolean $flatten                Whether to force the results into 1-dimensional array,
1112
-     *                                        or allow multidimensional array
1113
-     * @return array if $flatten is TRUE it will always be a 1-dimensional array with array keys being
1114
-     *                                        input names (regardless of whether they are from a subsection or not),
1115
-     *                                        and if $flatten is FALSE it can be a multidimensional array
1116
-     *                                        where keys are always subsection names and values are either
1117
-     *                                        the input's normalized value, or an array like the top-level array
1118
-     * @throws EE_Error
1119
-     */
1120
-    public function _input_values($pretty = false, $include_subform_inputs = false, $flatten = false)
1121
-    {
1122
-        $input_values = array();
1123
-        foreach ($this->subsections() as $subsection_name => $subsection) {
1124
-            if ($subsection instanceof EE_Form_Input_Base) {
1125
-                $input_values[ $subsection_name ] = $pretty
1126
-                    ? $subsection->pretty_value()
1127
-                    : $subsection->normalized_value();
1128
-            } elseif ($subsection instanceof EE_Form_Section_Proper && $include_subform_inputs) {
1129
-                $subform_input_values = $subsection->_input_values(
1130
-                    $pretty,
1131
-                    $include_subform_inputs,
1132
-                    $flatten
1133
-                );
1134
-                if ($flatten) {
1135
-                    $input_values = array_merge($input_values, $subform_input_values);
1136
-                } else {
1137
-                    $input_values[ $subsection_name ] = $subform_input_values;
1138
-                }
1139
-            }
1140
-        }
1141
-        return $input_values;
1142
-    }
1143
-
1144
-
1145
-    /**
1146
-     * Gets the originally submitted input values from the form
1147
-     *
1148
-     * @param boolean $include_subforms  Whether to include inputs from subforms,
1149
-     *                                   or just this forms' direct children inputs
1150
-     * @return array                     if $flatten is TRUE it will always be a 1-dimensional array
1151
-     *                                   with array keys being input names
1152
-     *                                   (regardless of whether they are from a subsection or not),
1153
-     *                                   and if $flatten is FALSE it can be a multidimensional array
1154
-     *                                   where keys are always subsection names and values are either
1155
-     *                                   the input's normalized value, or an array like the top-level array
1156
-     * @throws EE_Error
1157
-     */
1158
-    public function submitted_values($include_subforms = false)
1159
-    {
1160
-        $submitted_values = array();
1161
-        foreach ($this->subsections() as $subsection) {
1162
-            if ($subsection instanceof EE_Form_Input_Base) {
1163
-                // is this input part of an array of inputs?
1164
-                if (strpos($subsection->html_name(), '[') !== false) {
1165
-                    $full_input_name  = EEH_Array::convert_array_values_to_keys(
1166
-                        explode(
1167
-                            '[',
1168
-                            str_replace(']', '', $subsection->html_name())
1169
-                        ),
1170
-                        $subsection->raw_value()
1171
-                    );
1172
-                    $submitted_values = array_replace_recursive($submitted_values, $full_input_name);
1173
-                } else {
1174
-                    $submitted_values[ $subsection->html_name() ] = $subsection->raw_value();
1175
-                }
1176
-            } elseif ($subsection instanceof EE_Form_Section_Proper && $include_subforms) {
1177
-                $subform_input_values = $subsection->submitted_values($include_subforms);
1178
-                $submitted_values     = array_replace_recursive($submitted_values, $subform_input_values);
1179
-            }
1180
-        }
1181
-        return $submitted_values;
1182
-    }
1183
-
1184
-
1185
-    /**
1186
-     * Indicates whether or not this form has received a submission yet
1187
-     * (ie, had receive_form_submission called on it yet)
1188
-     *
1189
-     * @return boolean
1190
-     * @throws EE_Error
1191
-     */
1192
-    public function has_received_submission()
1193
-    {
1194
-        $this->ensure_construct_finalized_called();
1195
-        return $this->_received_submission;
1196
-    }
1197
-
1198
-
1199
-    /**
1200
-     * Equivalent to passing 'exclude' in the constructor's options array.
1201
-     * Removes the listed inputs from the form
1202
-     *
1203
-     * @param array $inputs_to_exclude values are the input names
1204
-     * @return void
1205
-     */
1206
-    public function exclude(array $inputs_to_exclude = array())
1207
-    {
1208
-        foreach ($inputs_to_exclude as $input_to_exclude_name) {
1209
-            unset($this->_subsections[ $input_to_exclude_name ]);
1210
-        }
1211
-    }
1212
-
1213
-
1214
-    /**
1215
-     * Changes these inputs' display strategy to be EE_Hidden_Display_Strategy.
1216
-     * @param array $inputs_to_hide
1217
-     * @throws EE_Error
1218
-     */
1219
-    public function hide(array $inputs_to_hide = array())
1220
-    {
1221
-        foreach ($inputs_to_hide as $input_to_hide) {
1222
-            $input = $this->get_input($input_to_hide);
1223
-            $input->set_display_strategy(new EE_Hidden_Display_Strategy());
1224
-        }
1225
-    }
1226
-
1227
-
1228
-    /**
1229
-     * add_subsections
1230
-     * Adds the listed subsections to the form section.
1231
-     * If $subsection_name_to_target is provided,
1232
-     * then new subsections are added before or after that subsection,
1233
-     * otherwise to the start or end of the entire subsections array.
1234
-     *
1235
-     * @param EE_Form_Section_Base[] $new_subsections           array of new form subsections
1236
-     *                                                          where keys are their names
1237
-     * @param string                 $subsection_name_to_target an existing for section that $new_subsections
1238
-     *                                                          should be added before or after
1239
-     *                                                          IF $subsection_name_to_target is null,
1240
-     *                                                          then $new_subsections will be added to
1241
-     *                                                          the beginning or end of the entire subsections array
1242
-     * @param boolean                $add_before                whether to add $new_subsections, before or after
1243
-     *                                                          $subsection_name_to_target,
1244
-     *                                                          or if $subsection_name_to_target is null,
1245
-     *                                                          before or after entire subsections array
1246
-     * @return void
1247
-     * @throws EE_Error
1248
-     */
1249
-    public function add_subsections($new_subsections, $subsection_name_to_target = null, $add_before = true)
1250
-    {
1251
-        foreach ($new_subsections as $subsection_name => $subsection) {
1252
-            if (! $subsection instanceof EE_Form_Section_Base) {
1253
-                EE_Error::add_error(
1254
-                    sprintf(
1255
-                        esc_html__(
1256
-                            "Trying to add a %s as a subsection (it was named '%s') to the form section '%s'. It was removed.",
1257
-                            'event_espresso'
1258
-                        ),
1259
-                        get_class($subsection),
1260
-                        $subsection_name,
1261
-                        $this->name()
1262
-                    )
1263
-                );
1264
-                unset($new_subsections[ $subsection_name ]);
1265
-            }
1266
-        }
1267
-        $this->_subsections = EEH_Array::insert_into_array(
1268
-            $this->_subsections,
1269
-            $new_subsections,
1270
-            $subsection_name_to_target,
1271
-            $add_before
1272
-        );
1273
-        if ($this->_construction_finalized) {
1274
-            foreach ($this->_subsections as $name => $subsection) {
1275
-                $subsection->_construct_finalize($this, $name);
1276
-            }
1277
-        }
1278
-    }
1279
-
1280
-
1281
-    /**
1282
-     * @param string $subsection_name
1283
-     * @param bool   $recursive
1284
-     * @return bool
1285
-     */
1286
-    public function has_subsection($subsection_name, $recursive = false)
1287
-    {
1288
-        foreach ($this->_subsections as $name => $subsection) {
1289
-            if (
1290
-                $name === $subsection_name
1291
-                || (
1292
-                    $recursive
1293
-                    && $subsection instanceof EE_Form_Section_Proper
1294
-                    && $subsection->has_subsection($subsection_name, $recursive)
1295
-                )
1296
-            ) {
1297
-                return true;
1298
-            }
1299
-        }
1300
-        return false;
1301
-    }
1302
-
1303
-
1304
-
1305
-    /**
1306
-     * Just gets all validatable subsections to clean their sensitive data
1307
-     *
1308
-     * @throws EE_Error
1309
-     */
1310
-    public function clean_sensitive_data()
1311
-    {
1312
-        foreach ($this->get_validatable_subsections() as $subsection) {
1313
-            $subsection->clean_sensitive_data();
1314
-        }
1315
-    }
1316
-
1317
-
1318
-    /**
1319
-     * Sets the submission error message (aka validation error message for this form section and all sub-sections)
1320
-     * @param string                           $form_submission_error_message
1321
-     * @param EE_Form_Section_Validatable $form_section unused
1322
-     * @throws EE_Error
1323
-     */
1324
-    public function set_submission_error_message(
1325
-        $form_submission_error_message = ''
1326
-    ) {
1327
-        $this->_form_submission_error_message = ! empty($form_submission_error_message)
1328
-            ? $form_submission_error_message
1329
-            : $this->getAllValidationErrorsString();
1330
-    }
1331
-
1332
-
1333
-    /**
1334
-     * Returns the cached error message. A default value is set for this during _validate(),
1335
-     * (called during receive_form_submission) but it can be explicitly set using
1336
-     * set_submission_error_message
1337
-     *
1338
-     * @return string
1339
-     */
1340
-    public function submission_error_message()
1341
-    {
1342
-        return $this->_form_submission_error_message;
1343
-    }
1344
-
1345
-
1346
-    /**
1347
-     * Sets a message to display if the data submitted to the form was valid.
1348
-     * @param string $form_submission_success_message
1349
-     */
1350
-    public function set_submission_success_message($form_submission_success_message = '')
1351
-    {
1352
-        $this->_form_submission_success_message = ! empty($form_submission_success_message)
1353
-            ? $form_submission_success_message
1354
-            : esc_html__('Form submitted successfully', 'event_espresso');
1355
-    }
1356
-
1357
-
1358
-    /**
1359
-     * Gets a message appropriate for display when the form is correctly submitted
1360
-     * @return string
1361
-     */
1362
-    public function submission_success_message()
1363
-    {
1364
-        return $this->_form_submission_success_message;
1365
-    }
1366
-
1367
-
1368
-    /**
1369
-     * Returns the prefix that should be used on child of this form section for
1370
-     * their html names. If this form section itself has a parent, prepends ITS
1371
-     * prefix onto this form section's prefix. Used primarily by
1372
-     * EE_Form_Input_Base::_set_default_html_name_if_empty
1373
-     *
1374
-     * @return string
1375
-     * @throws EE_Error
1376
-     */
1377
-    public function html_name_prefix()
1378
-    {
1379
-        if ($this->parent_section() instanceof EE_Form_Section_Proper) {
1380
-            return $this->parent_section()->html_name_prefix() . '[' . $this->name() . ']';
1381
-        }
1382
-        return $this->name();
1383
-    }
1384
-
1385
-
1386
-    /**
1387
-     * Gets the name, but first checks _construct_finalize has been called. If not,
1388
-     * calls it (assumes there is no parent and that we want the name to be whatever
1389
-     * was set, which is probably nothing, or the classname)
1390
-     *
1391
-     * @return string
1392
-     * @throws EE_Error
1393
-     */
1394
-    public function name()
1395
-    {
1396
-        $this->ensure_construct_finalized_called();
1397
-        return parent::name();
1398
-    }
1399
-
1400
-
1401
-    /**
1402
-     * @return EE_Form_Section_Proper
1403
-     * @throws EE_Error
1404
-     */
1405
-    public function parent_section()
1406
-    {
1407
-        $this->ensure_construct_finalized_called();
1408
-        return parent::parent_section();
1409
-    }
1410
-
1411
-
1412
-    /**
1413
-     * make sure construction finalized was called, otherwise children might not be ready
1414
-     *
1415
-     * @return void
1416
-     * @throws EE_Error
1417
-     */
1418
-    public function ensure_construct_finalized_called()
1419
-    {
1420
-        if (! $this->_construction_finalized) {
1421
-            $this->_construct_finalize($this->_parent_section, $this->_name);
1422
-        }
1423
-    }
1424
-
1425
-
1426
-    /**
1427
-     * Checks if any of this form section's inputs, or any of its children's inputs,
1428
-     * are in teh form data. If any are found, returns true. Else false
1429
-     *
1430
-     * @param array $req_data
1431
-     * @return boolean
1432
-     * @throws EE_Error
1433
-     */
1434
-    public function form_data_present_in($req_data = null)
1435
-    {
1436
-        $req_data = $this->getCachedRequest($req_data);
1437
-        foreach ($this->subsections() as $subsection) {
1438
-            if ($subsection instanceof EE_Form_Input_Base) {
1439
-                if ($subsection->form_data_present_in($req_data)) {
1440
-                    return true;
1441
-                }
1442
-            } elseif ($subsection instanceof EE_Form_Section_Proper) {
1443
-                if ($subsection->form_data_present_in($req_data)) {
1444
-                    return true;
1445
-                }
1446
-            }
1447
-        }
1448
-        return false;
1449
-    }
1450
-
1451
-
1452
-    /**
1453
-     * Gets validation errors for this form section and subsections
1454
-     * Similar to EE_Form_Section_Validatable::get_validation_errors() except this
1455
-     * gets the validation errors for ALL subsection
1456
-     *
1457
-     * @return EE_Validation_Error[]
1458
-     * @throws EE_Error
1459
-     */
1460
-    public function get_validation_errors_accumulated()
1461
-    {
1462
-        $validation_errors = $this->get_validation_errors();
1463
-        foreach ($this->get_validatable_subsections() as $subsection) {
1464
-            if ($subsection instanceof EE_Form_Section_Proper) {
1465
-                $validation_errors_on_this_subsection = $subsection->get_validation_errors_accumulated();
1466
-            } else {
1467
-                $validation_errors_on_this_subsection = $subsection->get_validation_errors();
1468
-            }
1469
-            if ($validation_errors_on_this_subsection) {
1470
-                $validation_errors = array_merge($validation_errors, $validation_errors_on_this_subsection);
1471
-            }
1472
-        }
1473
-        return $validation_errors;
1474
-    }
1475
-
1476
-    /**
1477
-     * Fetch validation errors from children and grandchildren and puts them in a single string.
1478
-     * This traverses the form section tree to generate this, but you probably want to instead use
1479
-     * get_form_submission_error_message() which is usually this message cached (or a custom validation error message)
1480
-     *
1481
-     * @return string
1482
-     * @since 4.9.59.p
1483
-     */
1484
-    protected function getAllValidationErrorsString()
1485
-    {
1486
-        $submission_error_messages = array();
1487
-        // bad, bad, bad registrant
1488
-        foreach ($this->get_validation_errors_accumulated() as $validation_error) {
1489
-            if ($validation_error instanceof EE_Validation_Error) {
1490
-                $form_section = $validation_error->get_form_section();
1491
-                if ($form_section instanceof EE_Form_Input_Base) {
1492
-                    $label = $validation_error->get_form_section()->html_label_text();
1493
-                } elseif ($form_section instanceof EE_Form_Section_Validatable) {
1494
-                    $label = $validation_error->get_form_section()->name();
1495
-                } else {
1496
-                    $label = esc_html__('Unknown', 'event_espresso');
1497
-                }
1498
-                $submission_error_messages[] = sprintf(
1499
-                    esc_html__('%s : %s', 'event_espresso'),
1500
-                    $label,
1501
-                    $validation_error->getMessage()
1502
-                );
1503
-            }
1504
-        }
1505
-        return implode('<br>', $submission_error_messages);
1506
-    }
1507
-
1508
-
1509
-    /**
1510
-     * This isn't just the name of an input, it's a path pointing to an input. The
1511
-     * path is similar to a folder path: slash (/) means to descend into a subsection,
1512
-     * dot-dot-slash (../) means to ascend into the parent section.
1513
-     * After a series of slashes and dot-dot-slashes, there should be the name of an input,
1514
-     * which will be returned.
1515
-     * Eg, if you want the related input to be conditional on a sibling input name 'foobar'
1516
-     * just use 'foobar'. If you want it to be conditional on an aunt/uncle input name
1517
-     * 'baz', use '../baz'. If you want it to be conditional on a cousin input,
1518
-     * the child of 'baz_section' named 'baz_child', use '../baz_section/baz_child'.
1519
-     * Etc
1520
-     *
1521
-     * @param string|false $form_section_path we accept false also because substr( '../', '../' ) = false
1522
-     * @return EE_Form_Section_Base
1523
-     * @throws EE_Error
1524
-     */
1525
-    public function find_section_from_path($form_section_path)
1526
-    {
1527
-        // check if we can find the input from purely going straight up the tree
1528
-        $input = parent::find_section_from_path($form_section_path);
1529
-        if ($input instanceof EE_Form_Section_Base) {
1530
-            return $input;
1531
-        }
1532
-        $next_slash_pos = strpos($form_section_path, '/');
1533
-        if ($next_slash_pos !== false) {
1534
-            $child_section_name = substr($form_section_path, 0, $next_slash_pos);
1535
-            $subpath            = substr($form_section_path, $next_slash_pos + 1);
1536
-        } else {
1537
-            $child_section_name = $form_section_path;
1538
-            $subpath            = '';
1539
-        }
1540
-        $child_section = $this->get_subsection($child_section_name);
1541
-        if ($child_section instanceof EE_Form_Section_Base) {
1542
-            return $child_section->find_section_from_path($subpath);
1543
-        }
1544
-        return null;
1545
-    }
18
+	const SUBMITTED_FORM_DATA_SSN_KEY = 'submitted_form_data';
19
+
20
+	/**
21
+	 * Subsections
22
+	 *
23
+	 * @var EE_Form_Section_Validatable[]
24
+	 */
25
+	protected $_subsections = array();
26
+
27
+	/**
28
+	 * Strategy for laying out the form
29
+	 *
30
+	 * @var EE_Form_Section_Layout_Base
31
+	 */
32
+	protected $_layout_strategy;
33
+
34
+	/**
35
+	 * Whether or not this form has received and validated a form submission yet
36
+	 *
37
+	 * @var boolean
38
+	 */
39
+	protected $_received_submission = false;
40
+
41
+	/**
42
+	 * message displayed to users upon successful form submission
43
+	 *
44
+	 * @var string
45
+	 */
46
+	protected $_form_submission_success_message = '';
47
+
48
+	/**
49
+	 * message displayed to users upon unsuccessful form submission
50
+	 *
51
+	 * @var string
52
+	 */
53
+	protected $_form_submission_error_message = '';
54
+
55
+	/**
56
+	 * @var array like post / request
57
+	 */
58
+	protected $cached_request_data;
59
+
60
+	/**
61
+	 * Stores whether this form (and its sub-sections) were found to be valid or not.
62
+	 * Starts off as null, but once the form is validated, it set to either true or false
63
+	 * @var boolean|null
64
+	 */
65
+	protected $is_valid;
66
+
67
+	/**
68
+	 * Stores all the data that will localized for form validation
69
+	 *
70
+	 * @var array
71
+	 */
72
+	protected static $_js_localization = array();
73
+
74
+	/**
75
+	 * whether or not the form's localized validation JS vars have been set
76
+	 *
77
+	 * @type boolean
78
+	 */
79
+	protected static $_scripts_localized = false;
80
+
81
+
82
+	/**
83
+	 * when constructing a proper form section, calls _construct_finalize on children
84
+	 * so that they know who their parent is, and what name they've been given.
85
+	 *
86
+	 * @param array[] $options_array   {
87
+	 * @type          $subsections     EE_Form_Section_Validatable[] where keys are the section's name
88
+	 * @type          $include         string[] numerically-indexed where values are section names to be included,
89
+	 *                                 and in that order. This is handy if you want
90
+	 *                                 the subsections to be ordered differently than the default, and if you override
91
+	 *                                 which fields are shown
92
+	 * @type          $exclude         string[] values are subsections to be excluded. This is handy if you want
93
+	 *                                 to remove certain default subsections (note: if you specify BOTH 'include' AND
94
+	 *                                 'exclude', the inclusions will be applied first, and the exclusions will exclude
95
+	 *                                 items from that list of inclusions)
96
+	 * @type          $layout_strategy EE_Form_Section_Layout_Base strategy for laying out the form
97
+	 *                                 } @see EE_Form_Section_Validatable::__construct()
98
+	 * @throws EE_Error
99
+	 */
100
+	public function __construct($options_array = array())
101
+	{
102
+		$options_array = (array) apply_filters(
103
+			'FHEE__EE_Form_Section_Proper___construct__options_array',
104
+			$options_array,
105
+			$this
106
+		);
107
+		// call parent first, as it may be setting the name
108
+		parent::__construct($options_array);
109
+		// if they've included subsections in the constructor, add them now
110
+		if (isset($options_array['include'])) {
111
+			// we are going to make sure we ONLY have those subsections to include
112
+			// AND we are going to make sure they're in that specified order
113
+			$reordered_subsections = array();
114
+			foreach ($options_array['include'] as $input_name) {
115
+				if (isset($this->_subsections[ $input_name ])) {
116
+					$reordered_subsections[ $input_name ] = $this->_subsections[ $input_name ];
117
+				}
118
+			}
119
+			$this->_subsections = $reordered_subsections;
120
+		}
121
+		if (isset($options_array['exclude'])) {
122
+			$exclude            = $options_array['exclude'];
123
+			$this->_subsections = array_diff_key($this->_subsections, array_flip($exclude));
124
+		}
125
+		if (isset($options_array['layout_strategy'])) {
126
+			$this->_layout_strategy = $options_array['layout_strategy'];
127
+		}
128
+		if (! $this->_layout_strategy) {
129
+			$this->_layout_strategy = is_admin() ? new EE_Admin_Two_Column_Layout() : new EE_Two_Column_Layout();
130
+		}
131
+		$this->_layout_strategy->_construct_finalize($this);
132
+		// ok so we are definitely going to want the forms JS,
133
+		// so enqueue it or remember to enqueue it during wp_enqueue_scripts
134
+		if (did_action('wp_enqueue_scripts') || did_action('admin_enqueue_scripts')) {
135
+			// ok so they've constructed this object after when they should have.
136
+			// just enqueue the generic form scripts and initialize the form immediately in the JS
137
+			EE_Form_Section_Proper::wp_enqueue_scripts(true);
138
+		} else {
139
+			add_action('wp_enqueue_scripts', array('EE_Form_Section_Proper', 'wp_enqueue_scripts'));
140
+			add_action('admin_enqueue_scripts', array('EE_Form_Section_Proper', 'wp_enqueue_scripts'));
141
+		}
142
+		add_action('wp_footer', array($this, 'ensure_scripts_localized'), 1);
143
+		/**
144
+		 * Gives other plugins a chance to hook in before construct finalize is called.
145
+		 * The form probably doesn't yet have a parent form section.
146
+		 * Since 4.9.32, when this action was introduced, this is the best place to add a subsection onto a form,
147
+		 * assuming you don't care what the form section's name, HTML ID, or HTML name etc are.
148
+		 * Also see AHEE__EE_Form_Section_Proper___construct_finalize__end
149
+		 *
150
+		 * @since 4.9.32
151
+		 * @param EE_Form_Section_Proper $this          before __construct is done, but all of its logic,
152
+		 *                                              except maybe calling _construct_finalize has been done
153
+		 * @param array                  $options_array options passed into the constructor
154
+		 */
155
+		do_action(
156
+			'AHEE__EE_Form_Input_Base___construct__before_construct_finalize_called',
157
+			$this,
158
+			$options_array
159
+		);
160
+		if (isset($options_array['name'])) {
161
+			$this->_construct_finalize(null, $options_array['name']);
162
+		}
163
+	}
164
+
165
+
166
+	/**
167
+	 * Finishes construction given the parent form section and this form section's name
168
+	 *
169
+	 * @param EE_Form_Section_Proper $parent_form_section
170
+	 * @param string                 $name
171
+	 * @throws EE_Error
172
+	 */
173
+	public function _construct_finalize($parent_form_section, $name)
174
+	{
175
+		parent::_construct_finalize($parent_form_section, $name);
176
+		$this->_set_default_name_if_empty();
177
+		$this->_set_default_html_id_if_empty();
178
+		foreach ($this->_subsections as $subsection_name => $subsection) {
179
+			if ($subsection instanceof EE_Form_Section_Base) {
180
+				$subsection->_construct_finalize($this, $subsection_name);
181
+			} else {
182
+				throw new EE_Error(
183
+					sprintf(
184
+						esc_html__(
185
+							'Subsection "%s" is not an instanceof EE_Form_Section_Base on form "%s". It is a "%s"',
186
+							'event_espresso'
187
+						),
188
+						$subsection_name,
189
+						get_class($this),
190
+						$subsection ? get_class($subsection) : esc_html__('NULL', 'event_espresso')
191
+					)
192
+				);
193
+			}
194
+		}
195
+		/**
196
+		 * Action performed just after form has been given a name (and HTML ID etc) and is fully constructed.
197
+		 * If you have code that should modify the form and needs it and its subsections to have a name, HTML ID
198
+		 * (or other attributes derived from the name like the HTML label id, etc), this is where it should be done.
199
+		 * This might only happen just before displaying the form, or just before it receives form submission data.
200
+		 * If you need to modify the form or its subsections before _construct_finalize is called on it (and we've
201
+		 * ensured it has a name, HTML IDs, etc
202
+		 *
203
+		 * @param EE_Form_Section_Proper      $this
204
+		 * @param EE_Form_Section_Proper|null $parent_form_section
205
+		 * @param string                      $name
206
+		 */
207
+		do_action(
208
+			'AHEE__EE_Form_Section_Proper___construct_finalize__end',
209
+			$this,
210
+			$parent_form_section,
211
+			$name
212
+		);
213
+	}
214
+
215
+
216
+	/**
217
+	 * Gets the layout strategy for this form section
218
+	 *
219
+	 * @return EE_Form_Section_Layout_Base
220
+	 */
221
+	public function get_layout_strategy()
222
+	{
223
+		return $this->_layout_strategy;
224
+	}
225
+
226
+
227
+	/**
228
+	 * Gets the HTML for a single input for this form section according
229
+	 * to the layout strategy
230
+	 *
231
+	 * @param EE_Form_Input_Base $input
232
+	 * @return string
233
+	 */
234
+	public function get_html_for_input($input)
235
+	{
236
+		return $this->_layout_strategy->layout_input($input);
237
+	}
238
+
239
+
240
+	/**
241
+	 * was_submitted - checks if form inputs are present in request data
242
+	 * Basically an alias for form_data_present_in() (which is used by both
243
+	 * proper form sections and form inputs)
244
+	 *
245
+	 * @param null $form_data
246
+	 * @return boolean
247
+	 * @throws EE_Error
248
+	 */
249
+	public function was_submitted($form_data = null)
250
+	{
251
+		return $this->form_data_present_in($form_data);
252
+	}
253
+
254
+	/**
255
+	 * Gets the cached request data; but if there is none, or $req_data was set with
256
+	 * something different, refresh the cache, and then return it
257
+	 * @param null $req_data
258
+	 * @return array
259
+	 */
260
+	protected function getCachedRequest($req_data = null)
261
+	{
262
+		if (
263
+			$this->cached_request_data === null
264
+			|| (
265
+				$req_data !== null
266
+				&& $req_data !== $this->cached_request_data
267
+			)
268
+		) {
269
+			$req_data = apply_filters(
270
+				'FHEE__EE_Form_Section_Proper__receive_form_submission__req_data',
271
+				$req_data,
272
+				$this
273
+			);
274
+			if ($req_data === null) {
275
+				/** @var RequestInterface $request */
276
+				$request = LoaderFactory::getLoader()->getShared(RequestInterface::class);
277
+				$req_data = $request->requestParams();
278
+			}
279
+			$req_data = apply_filters(
280
+				'FHEE__EE_Form_Section_Proper__receive_form_submission__request_data',
281
+				$req_data,
282
+				$this
283
+			);
284
+			$this->cached_request_data = (array) $req_data;
285
+		}
286
+		return $this->cached_request_data;
287
+	}
288
+
289
+
290
+	/**
291
+	 * After the form section is initially created, call this to sanitize the data in the submission
292
+	 * which relates to this form section, validate it, and set it as properties on the form.
293
+	 *
294
+	 * @param array|null $req_data should usually be post data (the default).
295
+	 *                             However, you CAN supply a different array.
296
+	 *                             Consider using set_defaults() instead however.
297
+	 *                             (If you rendered the form in the page using echo $form_x->get_html()
298
+	 *                             the inputs will have the correct name in the request data for this function
299
+	 *                             to find them and populate the form with them.
300
+	 *                             If you have a flat form (with only input subsections),
301
+	 *                             you can supply a flat array where keys
302
+	 *                             are the form input names and values are their values)
303
+	 * @param boolean    $validate whether or not to perform validation on this data. Default is,
304
+	 *                             of course, to validate that data, and set errors on the invalid values.
305
+	 *                             But if the data has already been validated
306
+	 *                             (eg you validated the data then stored it in the DB)
307
+	 *                             you may want to skip this step.
308
+	 * @throws InvalidArgumentException
309
+	 * @throws InvalidInterfaceException
310
+	 * @throws InvalidDataTypeException
311
+	 * @throws EE_Error
312
+	 */
313
+	public function receive_form_submission($req_data = null, $validate = true)
314
+	{
315
+		$req_data = $this->getCachedRequest($req_data);
316
+		$this->_normalize($req_data);
317
+		if ($validate) {
318
+			$this->_validate();
319
+			// if it's invalid, we're going to want to re-display so remember what they submitted
320
+			if (! $this->is_valid()) {
321
+				$this->store_submitted_form_data_in_session();
322
+			}
323
+		}
324
+		if ($this->submission_error_message() === '' && ! $this->is_valid()) {
325
+			$this->set_submission_error_message();
326
+		}
327
+		do_action(
328
+			'AHEE__EE_Form_Section_Proper__receive_form_submission__end',
329
+			$req_data,
330
+			$this,
331
+			$validate
332
+		);
333
+	}
334
+
335
+
336
+	/**
337
+	 * caches the originally submitted input values in the session
338
+	 * so that they can be used to repopulate the form if it failed validation
339
+	 *
340
+	 * @return boolean whether or not the data was successfully stored in the session
341
+	 * @throws InvalidArgumentException
342
+	 * @throws InvalidInterfaceException
343
+	 * @throws InvalidDataTypeException
344
+	 * @throws EE_Error
345
+	 */
346
+	protected function store_submitted_form_data_in_session()
347
+	{
348
+		return EE_Registry::instance()->SSN->set_session_data(
349
+			array(
350
+				EE_Form_Section_Proper::SUBMITTED_FORM_DATA_SSN_KEY => $this->submitted_values(true),
351
+			)
352
+		);
353
+	}
354
+
355
+
356
+	/**
357
+	 * retrieves the originally submitted input values in the session
358
+	 * so that they can be used to repopulate the form if it failed validation
359
+	 *
360
+	 * @return array
361
+	 * @throws InvalidArgumentException
362
+	 * @throws InvalidInterfaceException
363
+	 * @throws InvalidDataTypeException
364
+	 */
365
+	protected function get_submitted_form_data_from_session()
366
+	{
367
+		$session = EE_Registry::instance()->SSN;
368
+		if ($session instanceof EE_Session) {
369
+			return $session->get_session_data(
370
+				EE_Form_Section_Proper::SUBMITTED_FORM_DATA_SSN_KEY
371
+			);
372
+		}
373
+		return array();
374
+	}
375
+
376
+
377
+	/**
378
+	 * flushed the originally submitted input values from the session
379
+	 *
380
+	 * @return boolean whether or not the data was successfully removed from the session
381
+	 * @throws InvalidArgumentException
382
+	 * @throws InvalidInterfaceException
383
+	 * @throws InvalidDataTypeException
384
+	 */
385
+	public static function flush_submitted_form_data_from_session()
386
+	{
387
+		return EE_Registry::instance()->SSN->reset_data(
388
+			array(EE_Form_Section_Proper::SUBMITTED_FORM_DATA_SSN_KEY)
389
+		);
390
+	}
391
+
392
+
393
+	/**
394
+	 * Populates this form and its subsections with data from the session.
395
+	 * (Wrapper for EE_Form_Section_Proper::receive_form_submission, so it shows
396
+	 * validation errors when displaying too)
397
+	 * Returns true if the form was populated from the session, false otherwise
398
+	 *
399
+	 * @return boolean
400
+	 * @throws InvalidArgumentException
401
+	 * @throws InvalidInterfaceException
402
+	 * @throws InvalidDataTypeException
403
+	 * @throws EE_Error
404
+	 */
405
+	public function populate_from_session()
406
+	{
407
+		$form_data_in_session = $this->get_submitted_form_data_from_session();
408
+		if (empty($form_data_in_session)) {
409
+			return false;
410
+		}
411
+		$this->receive_form_submission($form_data_in_session);
412
+		add_action('shutdown', array('EE_Form_Section_Proper', 'flush_submitted_form_data_from_session'));
413
+		if ($this->form_data_present_in($form_data_in_session)) {
414
+			return true;
415
+		}
416
+		return false;
417
+	}
418
+
419
+
420
+	/**
421
+	 * Populates the default data for the form, given an array where keys are
422
+	 * the input names, and values are their values (preferably normalized to be their
423
+	 * proper PHP types, not all strings... although that should be ok too).
424
+	 * Proper subsections are sub-arrays, the key being the subsection's name, and
425
+	 * the value being an array formatted in teh same way
426
+	 *
427
+	 * @param array $default_data
428
+	 * @throws EE_Error
429
+	 */
430
+	public function populate_defaults($default_data)
431
+	{
432
+		foreach ($this->subsections(false) as $subsection_name => $subsection) {
433
+			if (isset($default_data[ $subsection_name ])) {
434
+				if ($subsection instanceof EE_Form_Input_Base) {
435
+					$subsection->set_default($default_data[ $subsection_name ]);
436
+				} elseif ($subsection instanceof EE_Form_Section_Proper) {
437
+					$subsection->populate_defaults($default_data[ $subsection_name ]);
438
+				}
439
+			}
440
+		}
441
+	}
442
+
443
+
444
+	/**
445
+	 * returns true if subsection exists
446
+	 *
447
+	 * @param string $name
448
+	 * @return boolean
449
+	 */
450
+	public function subsection_exists($name)
451
+	{
452
+		return isset($this->_subsections[ $name ]) ? true : false;
453
+	}
454
+
455
+
456
+	/**
457
+	 * Gets the subsection specified by its name
458
+	 *
459
+	 * @param string  $name
460
+	 * @param boolean $require_construction_to_be_finalized most client code should leave this as TRUE
461
+	 *                                                      so that the inputs will be properly configured.
462
+	 *                                                      However, some client code may be ok
463
+	 *                                                      with construction finalize being called later
464
+	 *                                                      (realizing that the subsections' html names
465
+	 *                                                      might not be set yet, etc.)
466
+	 * @return EE_Form_Section_Base
467
+	 * @throws EE_Error
468
+	 */
469
+	public function get_subsection($name, $require_construction_to_be_finalized = true)
470
+	{
471
+		if ($require_construction_to_be_finalized) {
472
+			$this->ensure_construct_finalized_called();
473
+		}
474
+		return $this->subsection_exists($name) ? $this->_subsections[ $name ] : null;
475
+	}
476
+
477
+
478
+	/**
479
+	 * Gets all the validatable subsections of this form section
480
+	 *
481
+	 * @return EE_Form_Section_Validatable[]
482
+	 * @throws EE_Error
483
+	 */
484
+	public function get_validatable_subsections()
485
+	{
486
+		$validatable_subsections = array();
487
+		foreach ($this->subsections() as $name => $obj) {
488
+			if ($obj instanceof EE_Form_Section_Validatable) {
489
+				$validatable_subsections[ $name ] = $obj;
490
+			}
491
+		}
492
+		return $validatable_subsections;
493
+	}
494
+
495
+
496
+	/**
497
+	 * Gets an input by the given name. If not found, or if its not an EE_FOrm_Input_Base child,
498
+	 * throw an EE_Error.
499
+	 *
500
+	 * @param string  $name
501
+	 * @param boolean $require_construction_to_be_finalized most client code should
502
+	 *                                                      leave this as TRUE so that the inputs will be properly
503
+	 *                                                      configured. However, some client code may be ok with
504
+	 *                                                      construction finalize being called later
505
+	 *                                                      (realizing that the subsections' html names might not be
506
+	 *                                                      set yet, etc.)
507
+	 * @return EE_Form_Input_Base
508
+	 * @throws EE_Error
509
+	 */
510
+	public function get_input($name, $require_construction_to_be_finalized = true)
511
+	{
512
+		$subsection = $this->get_subsection(
513
+			$name,
514
+			$require_construction_to_be_finalized
515
+		);
516
+		if (! $subsection instanceof EE_Form_Input_Base) {
517
+			throw new EE_Error(
518
+				sprintf(
519
+					esc_html__(
520
+						"Subsection '%s' is not an instanceof EE_Form_Input_Base on form '%s'. It is a '%s'",
521
+						'event_espresso'
522
+					),
523
+					$name,
524
+					get_class($this),
525
+					$subsection ? get_class($subsection) : esc_html__('NULL', 'event_espresso')
526
+				)
527
+			);
528
+		}
529
+		return $subsection;
530
+	}
531
+
532
+
533
+	/**
534
+	 * Like get_input(), gets the proper subsection of the form given the name,
535
+	 * otherwise throws an EE_Error
536
+	 *
537
+	 * @param string  $name
538
+	 * @param boolean $require_construction_to_be_finalized most client code should
539
+	 *                                                      leave this as TRUE so that the inputs will be properly
540
+	 *                                                      configured. However, some client code may be ok with
541
+	 *                                                      construction finalize being called later
542
+	 *                                                      (realizing that the subsections' html names might not be
543
+	 *                                                      set yet, etc.)
544
+	 * @return EE_Form_Section_Proper
545
+	 * @throws EE_Error
546
+	 */
547
+	public function get_proper_subsection($name, $require_construction_to_be_finalized = true)
548
+	{
549
+		$subsection = $this->get_subsection(
550
+			$name,
551
+			$require_construction_to_be_finalized
552
+		);
553
+		if (! $subsection instanceof EE_Form_Section_Proper) {
554
+			throw new EE_Error(
555
+				sprintf(
556
+					esc_html__(
557
+						"Subsection '%'s is not an instanceof EE_Form_Section_Proper on form '%s'",
558
+						'event_espresso'
559
+					),
560
+					$name,
561
+					get_class($this)
562
+				)
563
+			);
564
+		}
565
+		return $subsection;
566
+	}
567
+
568
+
569
+	/**
570
+	 * Gets the value of the specified input. Should be called after receive_form_submission()
571
+	 * or populate_defaults() on the form, where the normalized value on the input is set.
572
+	 *
573
+	 * @param string $name
574
+	 * @return mixed depending on the input's type and its normalization strategy
575
+	 * @throws EE_Error
576
+	 */
577
+	public function get_input_value($name)
578
+	{
579
+		$input = $this->get_input($name);
580
+		return $input->normalized_value();
581
+	}
582
+
583
+
584
+	/**
585
+	 * Checks if this form section itself is valid, and then checks its subsections
586
+	 *
587
+	 * @throws EE_Error
588
+	 * @return boolean
589
+	 */
590
+	public function is_valid()
591
+	{
592
+		if ($this->is_valid === null) {
593
+			if (! $this->has_received_submission()) {
594
+				throw new EE_Error(
595
+					sprintf(
596
+						esc_html__(
597
+							'You cannot check if a form is valid before receiving the form submission using receive_form_submission',
598
+							'event_espresso'
599
+						)
600
+					)
601
+				);
602
+			}
603
+			if (! parent::is_valid()) {
604
+				$this->is_valid = false;
605
+			} else {
606
+				// ok so no general errors to this entire form section.
607
+				// so let's check the subsections, but only set errors if that hasn't been done yet
608
+				$this->is_valid = true;
609
+				foreach ($this->get_validatable_subsections() as $subsection) {
610
+					if (! $subsection->is_valid()) {
611
+						$this->is_valid = false;
612
+					}
613
+				}
614
+			}
615
+		}
616
+		return $this->is_valid;
617
+	}
618
+
619
+
620
+	/**
621
+	 * gets the default name of this form section if none is specified
622
+	 *
623
+	 * @return void
624
+	 */
625
+	protected function _set_default_name_if_empty()
626
+	{
627
+		if (! $this->_name) {
628
+			$classname    = get_class($this);
629
+			$default_name = str_replace('EE_', '', $classname);
630
+			$this->_name  = $default_name;
631
+		}
632
+	}
633
+
634
+
635
+	/**
636
+	 * Returns the HTML for the form, except for the form opening and closing tags
637
+	 * (as the form section doesn't know where you necessarily want to send the information to),
638
+	 * and except for a submit button. Enqueues JS and CSS; if called early enough we will
639
+	 * try to enqueue them in the header, otherwise they'll be enqueued in the footer.
640
+	 * Not doing_it_wrong because theoretically this CAN be used properly,
641
+	 * provided its used during "wp_enqueue_scripts", or it doesn't need to enqueue
642
+	 * any CSS.
643
+	 *
644
+	 * @throws InvalidArgumentException
645
+	 * @throws InvalidInterfaceException
646
+	 * @throws InvalidDataTypeException
647
+	 * @throws EE_Error
648
+	 */
649
+	public function get_html_and_js()
650
+	{
651
+		$this->enqueue_js();
652
+		return $this->get_html();
653
+	}
654
+
655
+
656
+	/**
657
+	 * returns HTML for displaying this form section. recursively calls display_section() on all subsections
658
+	 *
659
+	 * @param bool $display_previously_submitted_data
660
+	 * @return string
661
+	 * @throws InvalidArgumentException
662
+	 * @throws InvalidInterfaceException
663
+	 * @throws InvalidDataTypeException
664
+	 * @throws EE_Error
665
+	 * @throws EE_Error
666
+	 * @throws EE_Error
667
+	 */
668
+	public function get_html($display_previously_submitted_data = true)
669
+	{
670
+		$this->ensure_construct_finalized_called();
671
+		if ($display_previously_submitted_data) {
672
+			$this->populate_from_session();
673
+		}
674
+		return $this->_form_html_filter
675
+			? $this->_form_html_filter->filterHtml($this->_layout_strategy->layout_form(), $this)
676
+			: $this->_layout_strategy->layout_form();
677
+	}
678
+
679
+
680
+	/**
681
+	 * enqueues JS and CSS for the form.
682
+	 * It is preferred to call this before wp_enqueue_scripts so the
683
+	 * scripts and styles can be put in the header, but if called later
684
+	 * they will be put in the footer (which is OK for JS, but in HTML4 CSS should
685
+	 * only be in the header; but in HTML5 its ok in the body.
686
+	 * See http://stackoverflow.com/questions/4957446/load-external-css-file-in-body-tag.
687
+	 * So if your form enqueues CSS, it's preferred to call this before wp_enqueue_scripts.)
688
+	 *
689
+	 * @return void
690
+	 * @throws EE_Error
691
+	 */
692
+	public function enqueue_js()
693
+	{
694
+		$this->_enqueue_and_localize_form_js();
695
+		foreach ($this->subsections() as $subsection) {
696
+			$subsection->enqueue_js();
697
+		}
698
+	}
699
+
700
+
701
+	/**
702
+	 * adds a filter so that jquery validate gets enqueued in EE_System::wp_enqueue_scripts().
703
+	 * This must be done BEFORE wp_enqueue_scripts() gets called, which is on
704
+	 * the wp_enqueue_scripts hook.
705
+	 * However, registering the form js and localizing it can happen when we
706
+	 * actually output the form (which is preferred, seeing how teh form's fields
707
+	 * could change until it's actually outputted)
708
+	 *
709
+	 * @param boolean $init_form_validation_automatically whether or not we want the form validation
710
+	 *                                                    to be triggered automatically or not
711
+	 * @return void
712
+	 */
713
+	public static function wp_enqueue_scripts($init_form_validation_automatically = true)
714
+	{
715
+		wp_register_script(
716
+			'ee_form_section_validation',
717
+			EE_GLOBAL_ASSETS_URL . 'scripts' . '/form_section_validation.js',
718
+			array('jquery-validate', 'jquery-ui-datepicker', 'jquery-validate-extra-methods'),
719
+			EVENT_ESPRESSO_VERSION,
720
+			true
721
+		);
722
+		wp_localize_script(
723
+			'ee_form_section_validation',
724
+			'ee_form_section_validation_init',
725
+			array('init' => $init_form_validation_automatically ? '1' : '0')
726
+		);
727
+	}
728
+
729
+
730
+	/**
731
+	 * gets the variables used by form_section_validation.js.
732
+	 * This needs to be called AFTER we've called $this->_enqueue_jquery_validate_script,
733
+	 * but before the wordpress hook wp_loaded
734
+	 *
735
+	 * @throws EE_Error
736
+	 */
737
+	public function _enqueue_and_localize_form_js()
738
+	{
739
+		$this->ensure_construct_finalized_called();
740
+		// actually, we don't want to localize just yet. There may be other forms on the page.
741
+		// so we need to add our form section data to a static variable accessible by all form sections
742
+		// and localize it just before the footer
743
+		$this->localize_validation_rules();
744
+		add_action('wp_footer', array('EE_Form_Section_Proper', 'localize_script_for_all_forms'), 2);
745
+		add_action('admin_footer', array('EE_Form_Section_Proper', 'localize_script_for_all_forms'));
746
+	}
747
+
748
+
749
+	/**
750
+	 * add our form section data to a static variable accessible by all form sections
751
+	 *
752
+	 * @param bool $return_for_subsection
753
+	 * @return void
754
+	 * @throws EE_Error
755
+	 */
756
+	public function localize_validation_rules($return_for_subsection = false)
757
+	{
758
+		// we only want to localize vars ONCE for the entire form,
759
+		// so if the form section doesn't have a parent, then it must be the top dog
760
+		if ($return_for_subsection || ! $this->parent_section()) {
761
+			EE_Form_Section_Proper::$_js_localization['form_data'][ $this->html_id() ] = array(
762
+				'form_section_id'  => $this->html_id(true),
763
+				'validation_rules' => $this->get_jquery_validation_rules(),
764
+				'other_data'       => $this->get_other_js_data(),
765
+				'errors'           => $this->subsection_validation_errors_by_html_name(),
766
+			);
767
+			EE_Form_Section_Proper::$_scripts_localized                                = true;
768
+		}
769
+	}
770
+
771
+
772
+	/**
773
+	 * Gets an array of extra data that will be useful for client-side javascript.
774
+	 * This is primarily data added by inputs and forms in addition to any
775
+	 * scripts they might enqueue
776
+	 *
777
+	 * @param array $form_other_js_data
778
+	 * @return array
779
+	 * @throws EE_Error
780
+	 */
781
+	public function get_other_js_data($form_other_js_data = array())
782
+	{
783
+		foreach ($this->subsections() as $subsection) {
784
+			$form_other_js_data = $subsection->get_other_js_data($form_other_js_data);
785
+		}
786
+		return $form_other_js_data;
787
+	}
788
+
789
+
790
+	/**
791
+	 * Gets a flat array of inputs for this form section and its subsections.
792
+	 * Keys are their form names, and values are the inputs themselves
793
+	 *
794
+	 * @return EE_Form_Input_Base
795
+	 * @throws EE_Error
796
+	 */
797
+	public function inputs_in_subsections()
798
+	{
799
+		$inputs = array();
800
+		foreach ($this->subsections() as $subsection) {
801
+			if ($subsection instanceof EE_Form_Input_Base) {
802
+				$inputs[ $subsection->html_name() ] = $subsection;
803
+			} elseif ($subsection instanceof EE_Form_Section_Proper) {
804
+				$inputs += $subsection->inputs_in_subsections();
805
+			}
806
+		}
807
+		return $inputs;
808
+	}
809
+
810
+
811
+	/**
812
+	 * Gets a flat array of all the validation errors.
813
+	 * Keys are html names (because those should be unique)
814
+	 * and values are a string of all their validation errors
815
+	 *
816
+	 * @return string[]
817
+	 * @throws EE_Error
818
+	 */
819
+	public function subsection_validation_errors_by_html_name()
820
+	{
821
+		$inputs = $this->inputs();
822
+		$errors = array();
823
+		foreach ($inputs as $form_input) {
824
+			if ($form_input instanceof EE_Form_Input_Base && $form_input->get_validation_errors()) {
825
+				$errors[ $form_input->html_name() ] = $form_input->get_validation_error_string();
826
+			}
827
+		}
828
+		return $errors;
829
+	}
830
+
831
+
832
+	/**
833
+	 * passes all the form data required by the JS to the JS, and enqueues the few required JS files.
834
+	 * Should be setup by each form during the _enqueues_and_localize_form_js
835
+	 *
836
+	 * @throws InvalidArgumentException
837
+	 * @throws InvalidInterfaceException
838
+	 * @throws InvalidDataTypeException
839
+	 */
840
+	public static function localize_script_for_all_forms()
841
+	{
842
+		// allow inputs and stuff to hook in their JS and stuff here
843
+		do_action('AHEE__EE_Form_Section_Proper__localize_script_for_all_forms__begin');
844
+		EE_Form_Section_Proper::$_js_localization['localized_error_messages'] = EE_Form_Section_Proper::_get_localized_error_messages();
845
+		$email_validation_level = isset(EE_Registry::instance()->CFG->registration->email_validation_level)
846
+			? EE_Registry::instance()->CFG->registration->email_validation_level
847
+			: 'wp_default';
848
+		EE_Form_Section_Proper::$_js_localization['email_validation_level']   = $email_validation_level;
849
+		wp_enqueue_script('ee_form_section_validation');
850
+		wp_localize_script(
851
+			'ee_form_section_validation',
852
+			'ee_form_section_vars',
853
+			EE_Form_Section_Proper::$_js_localization
854
+		);
855
+	}
856
+
857
+
858
+	/**
859
+	 * ensure_scripts_localized
860
+	 *
861
+	 * @throws EE_Error
862
+	 */
863
+	public function ensure_scripts_localized()
864
+	{
865
+		if (! EE_Form_Section_Proper::$_scripts_localized) {
866
+			$this->_enqueue_and_localize_form_js();
867
+		}
868
+	}
869
+
870
+
871
+	/**
872
+	 * Gets the hard-coded validation error messages to be used in the JS. The convention
873
+	 * is that the key here should be the same as the custom validation rule put in the JS file
874
+	 *
875
+	 * @return array keys are custom validation rules, and values are internationalized strings
876
+	 */
877
+	private static function _get_localized_error_messages()
878
+	{
879
+		return array(
880
+			'validUrl' => wp_strip_all_tags(__('This is not a valid absolute URL. Eg, http://domain.com/monkey.jpg', 'event_espresso')),
881
+			'regex'    => wp_strip_all_tags(__('Please check your input', 'event_espresso'))
882
+		);
883
+	}
884
+
885
+
886
+	/**
887
+	 * @return array
888
+	 */
889
+	public static function js_localization()
890
+	{
891
+		return self::$_js_localization;
892
+	}
893
+
894
+
895
+	/**
896
+	 * @return void
897
+	 */
898
+	public static function reset_js_localization()
899
+	{
900
+		self::$_js_localization = array();
901
+	}
902
+
903
+
904
+	/**
905
+	 * Gets the JS to put inside the jquery validation rules for subsection of this form section.
906
+	 * See parent function for more...
907
+	 *
908
+	 * @return array
909
+	 * @throws EE_Error
910
+	 */
911
+	public function get_jquery_validation_rules()
912
+	{
913
+		$jquery_validation_rules = array();
914
+		foreach ($this->get_validatable_subsections() as $subsection) {
915
+			$jquery_validation_rules = array_merge(
916
+				$jquery_validation_rules,
917
+				$subsection->get_jquery_validation_rules()
918
+			);
919
+		}
920
+		return $jquery_validation_rules;
921
+	}
922
+
923
+
924
+	/**
925
+	 * Sanitizes all the data and sets the sanitized value of each field
926
+	 *
927
+	 * @param array $req_data
928
+	 * @return void
929
+	 * @throws EE_Error
930
+	 */
931
+	protected function _normalize($req_data)
932
+	{
933
+		$this->_received_submission = true;
934
+		$this->_validation_errors   = array();
935
+		foreach ($this->get_validatable_subsections() as $subsection) {
936
+			try {
937
+				$subsection->_normalize($req_data);
938
+			} catch (EE_Validation_Error $e) {
939
+				$subsection->add_validation_error($e);
940
+			}
941
+		}
942
+	}
943
+
944
+
945
+	/**
946
+	 * Performs validation on this form section and its subsections.
947
+	 * For each subsection,
948
+	 * calls _validate_{subsection_name} on THIS form (if the function exists)
949
+	 * and passes it the subsection, then calls _validate on that subsection.
950
+	 * If you need to perform validation on the form as a whole (considering multiple)
951
+	 * you would be best to override this _validate method,
952
+	 * calling parent::_validate() first.
953
+	 *
954
+	 * @throws EE_Error
955
+	 */
956
+	protected function _validate()
957
+	{
958
+		// reset the cache of whether this form is valid or not- we're re-validating it now
959
+		$this->is_valid = null;
960
+		foreach ($this->get_validatable_subsections() as $subsection_name => $subsection) {
961
+			if (method_exists($this, '_validate_' . $subsection_name)) {
962
+				call_user_func_array(array($this, '_validate_' . $subsection_name), array($subsection));
963
+			}
964
+			$subsection->_validate();
965
+		}
966
+	}
967
+
968
+
969
+	/**
970
+	 * Gets all the validated inputs for the form section
971
+	 *
972
+	 * @return array
973
+	 * @throws EE_Error
974
+	 */
975
+	public function valid_data()
976
+	{
977
+		$inputs = array();
978
+		foreach ($this->subsections() as $subsection_name => $subsection) {
979
+			if ($subsection instanceof EE_Form_Section_Proper) {
980
+				$inputs[ $subsection_name ] = $subsection->valid_data();
981
+			} elseif ($subsection instanceof EE_Form_Input_Base) {
982
+				$inputs[ $subsection_name ] = $subsection->normalized_value();
983
+			}
984
+		}
985
+		return $inputs;
986
+	}
987
+
988
+
989
+	/**
990
+	 * Gets all the inputs on this form section
991
+	 *
992
+	 * @return EE_Form_Input_Base[]
993
+	 * @throws EE_Error
994
+	 */
995
+	public function inputs()
996
+	{
997
+		$inputs = array();
998
+		foreach ($this->subsections() as $subsection_name => $subsection) {
999
+			if ($subsection instanceof EE_Form_Input_Base) {
1000
+				$inputs[ $subsection_name ] = $subsection;
1001
+			}
1002
+		}
1003
+		return $inputs;
1004
+	}
1005
+
1006
+
1007
+	/**
1008
+	 * Gets all the subsections which are a proper form
1009
+	 *
1010
+	 * @return EE_Form_Section_Proper[]
1011
+	 * @throws EE_Error
1012
+	 */
1013
+	public function subforms()
1014
+	{
1015
+		$form_sections = array();
1016
+		foreach ($this->subsections() as $name => $obj) {
1017
+			if ($obj instanceof EE_Form_Section_Proper) {
1018
+				$form_sections[ $name ] = $obj;
1019
+			}
1020
+		}
1021
+		return $form_sections;
1022
+	}
1023
+
1024
+
1025
+	/**
1026
+	 * Gets all the subsections (inputs, proper subsections, or html-only sections).
1027
+	 * Consider using inputs() or subforms()
1028
+	 * if you only want form inputs or proper form sections.
1029
+	 *
1030
+	 * @param boolean $require_construction_to_be_finalized most client code should
1031
+	 *                                                      leave this as TRUE so that the inputs will be properly
1032
+	 *                                                      configured. However, some client code may be ok with
1033
+	 *                                                      construction finalize being called later
1034
+	 *                                                      (realizing that the subsections' html names might not be
1035
+	 *                                                      set yet, etc.)
1036
+	 * @return EE_Form_Section_Proper[]
1037
+	 * @throws EE_Error
1038
+	 */
1039
+	public function subsections($require_construction_to_be_finalized = true)
1040
+	{
1041
+		if ($require_construction_to_be_finalized) {
1042
+			$this->ensure_construct_finalized_called();
1043
+		}
1044
+		return $this->_subsections;
1045
+	}
1046
+
1047
+
1048
+	/**
1049
+	 * Returns whether this form has any subforms or inputs
1050
+	 * @return bool
1051
+	 */
1052
+	public function hasSubsections()
1053
+	{
1054
+		return ! empty($this->_subsections);
1055
+	}
1056
+
1057
+
1058
+	/**
1059
+	 * Returns a simple array where keys are input names, and values are their normalized
1060
+	 * values. (Similar to calling get_input_value on inputs)
1061
+	 *
1062
+	 * @param boolean $include_subform_inputs Whether to include inputs from subforms,
1063
+	 *                                        or just this forms' direct children inputs
1064
+	 * @param boolean $flatten                Whether to force the results into 1-dimensional array,
1065
+	 *                                        or allow multidimensional array
1066
+	 * @return array if $flatten is TRUE it will always be a 1-dimensional array
1067
+	 *                                        with array keys being input names
1068
+	 *                                        (regardless of whether they are from a subsection or not),
1069
+	 *                                        and if $flatten is FALSE it can be a multidimensional array
1070
+	 *                                        where keys are always subsection names and values are either
1071
+	 *                                        the input's normalized value, or an array like the top-level array
1072
+	 * @throws EE_Error
1073
+	 */
1074
+	public function input_values($include_subform_inputs = false, $flatten = false)
1075
+	{
1076
+		return $this->_input_values(false, $include_subform_inputs, $flatten);
1077
+	}
1078
+
1079
+
1080
+	/**
1081
+	 * Similar to EE_Form_Section_Proper::input_values(), except this returns the 'display_value'
1082
+	 * of each input. On some inputs (especially radio boxes or checkboxes), the value stored
1083
+	 * is not necessarily the value we want to display to users. This creates an array
1084
+	 * where keys are the input names, and values are their display values
1085
+	 *
1086
+	 * @param boolean $include_subform_inputs Whether to include inputs from subforms,
1087
+	 *                                        or just this forms' direct children inputs
1088
+	 * @param boolean $flatten                Whether to force the results into 1-dimensional array,
1089
+	 *                                        or allow multidimensional array
1090
+	 * @return array if $flatten is TRUE it will always be a 1-dimensional array
1091
+	 *                                        with array keys being input names
1092
+	 *                                        (regardless of whether they are from a subsection or not),
1093
+	 *                                        and if $flatten is FALSE it can be a multidimensional array
1094
+	 *                                        where keys are always subsection names and values are either
1095
+	 *                                        the input's normalized value, or an array like the top-level array
1096
+	 * @throws EE_Error
1097
+	 */
1098
+	public function input_pretty_values($include_subform_inputs = false, $flatten = false)
1099
+	{
1100
+		return $this->_input_values(true, $include_subform_inputs, $flatten);
1101
+	}
1102
+
1103
+
1104
+	/**
1105
+	 * Gets the input values from the form
1106
+	 *
1107
+	 * @param boolean $pretty                 Whether to retrieve the pretty value,
1108
+	 *                                        or just the normalized value
1109
+	 * @param boolean $include_subform_inputs Whether to include inputs from subforms,
1110
+	 *                                        or just this forms' direct children inputs
1111
+	 * @param boolean $flatten                Whether to force the results into 1-dimensional array,
1112
+	 *                                        or allow multidimensional array
1113
+	 * @return array if $flatten is TRUE it will always be a 1-dimensional array with array keys being
1114
+	 *                                        input names (regardless of whether they are from a subsection or not),
1115
+	 *                                        and if $flatten is FALSE it can be a multidimensional array
1116
+	 *                                        where keys are always subsection names and values are either
1117
+	 *                                        the input's normalized value, or an array like the top-level array
1118
+	 * @throws EE_Error
1119
+	 */
1120
+	public function _input_values($pretty = false, $include_subform_inputs = false, $flatten = false)
1121
+	{
1122
+		$input_values = array();
1123
+		foreach ($this->subsections() as $subsection_name => $subsection) {
1124
+			if ($subsection instanceof EE_Form_Input_Base) {
1125
+				$input_values[ $subsection_name ] = $pretty
1126
+					? $subsection->pretty_value()
1127
+					: $subsection->normalized_value();
1128
+			} elseif ($subsection instanceof EE_Form_Section_Proper && $include_subform_inputs) {
1129
+				$subform_input_values = $subsection->_input_values(
1130
+					$pretty,
1131
+					$include_subform_inputs,
1132
+					$flatten
1133
+				);
1134
+				if ($flatten) {
1135
+					$input_values = array_merge($input_values, $subform_input_values);
1136
+				} else {
1137
+					$input_values[ $subsection_name ] = $subform_input_values;
1138
+				}
1139
+			}
1140
+		}
1141
+		return $input_values;
1142
+	}
1143
+
1144
+
1145
+	/**
1146
+	 * Gets the originally submitted input values from the form
1147
+	 *
1148
+	 * @param boolean $include_subforms  Whether to include inputs from subforms,
1149
+	 *                                   or just this forms' direct children inputs
1150
+	 * @return array                     if $flatten is TRUE it will always be a 1-dimensional array
1151
+	 *                                   with array keys being input names
1152
+	 *                                   (regardless of whether they are from a subsection or not),
1153
+	 *                                   and if $flatten is FALSE it can be a multidimensional array
1154
+	 *                                   where keys are always subsection names and values are either
1155
+	 *                                   the input's normalized value, or an array like the top-level array
1156
+	 * @throws EE_Error
1157
+	 */
1158
+	public function submitted_values($include_subforms = false)
1159
+	{
1160
+		$submitted_values = array();
1161
+		foreach ($this->subsections() as $subsection) {
1162
+			if ($subsection instanceof EE_Form_Input_Base) {
1163
+				// is this input part of an array of inputs?
1164
+				if (strpos($subsection->html_name(), '[') !== false) {
1165
+					$full_input_name  = EEH_Array::convert_array_values_to_keys(
1166
+						explode(
1167
+							'[',
1168
+							str_replace(']', '', $subsection->html_name())
1169
+						),
1170
+						$subsection->raw_value()
1171
+					);
1172
+					$submitted_values = array_replace_recursive($submitted_values, $full_input_name);
1173
+				} else {
1174
+					$submitted_values[ $subsection->html_name() ] = $subsection->raw_value();
1175
+				}
1176
+			} elseif ($subsection instanceof EE_Form_Section_Proper && $include_subforms) {
1177
+				$subform_input_values = $subsection->submitted_values($include_subforms);
1178
+				$submitted_values     = array_replace_recursive($submitted_values, $subform_input_values);
1179
+			}
1180
+		}
1181
+		return $submitted_values;
1182
+	}
1183
+
1184
+
1185
+	/**
1186
+	 * Indicates whether or not this form has received a submission yet
1187
+	 * (ie, had receive_form_submission called on it yet)
1188
+	 *
1189
+	 * @return boolean
1190
+	 * @throws EE_Error
1191
+	 */
1192
+	public function has_received_submission()
1193
+	{
1194
+		$this->ensure_construct_finalized_called();
1195
+		return $this->_received_submission;
1196
+	}
1197
+
1198
+
1199
+	/**
1200
+	 * Equivalent to passing 'exclude' in the constructor's options array.
1201
+	 * Removes the listed inputs from the form
1202
+	 *
1203
+	 * @param array $inputs_to_exclude values are the input names
1204
+	 * @return void
1205
+	 */
1206
+	public function exclude(array $inputs_to_exclude = array())
1207
+	{
1208
+		foreach ($inputs_to_exclude as $input_to_exclude_name) {
1209
+			unset($this->_subsections[ $input_to_exclude_name ]);
1210
+		}
1211
+	}
1212
+
1213
+
1214
+	/**
1215
+	 * Changes these inputs' display strategy to be EE_Hidden_Display_Strategy.
1216
+	 * @param array $inputs_to_hide
1217
+	 * @throws EE_Error
1218
+	 */
1219
+	public function hide(array $inputs_to_hide = array())
1220
+	{
1221
+		foreach ($inputs_to_hide as $input_to_hide) {
1222
+			$input = $this->get_input($input_to_hide);
1223
+			$input->set_display_strategy(new EE_Hidden_Display_Strategy());
1224
+		}
1225
+	}
1226
+
1227
+
1228
+	/**
1229
+	 * add_subsections
1230
+	 * Adds the listed subsections to the form section.
1231
+	 * If $subsection_name_to_target is provided,
1232
+	 * then new subsections are added before or after that subsection,
1233
+	 * otherwise to the start or end of the entire subsections array.
1234
+	 *
1235
+	 * @param EE_Form_Section_Base[] $new_subsections           array of new form subsections
1236
+	 *                                                          where keys are their names
1237
+	 * @param string                 $subsection_name_to_target an existing for section that $new_subsections
1238
+	 *                                                          should be added before or after
1239
+	 *                                                          IF $subsection_name_to_target is null,
1240
+	 *                                                          then $new_subsections will be added to
1241
+	 *                                                          the beginning or end of the entire subsections array
1242
+	 * @param boolean                $add_before                whether to add $new_subsections, before or after
1243
+	 *                                                          $subsection_name_to_target,
1244
+	 *                                                          or if $subsection_name_to_target is null,
1245
+	 *                                                          before or after entire subsections array
1246
+	 * @return void
1247
+	 * @throws EE_Error
1248
+	 */
1249
+	public function add_subsections($new_subsections, $subsection_name_to_target = null, $add_before = true)
1250
+	{
1251
+		foreach ($new_subsections as $subsection_name => $subsection) {
1252
+			if (! $subsection instanceof EE_Form_Section_Base) {
1253
+				EE_Error::add_error(
1254
+					sprintf(
1255
+						esc_html__(
1256
+							"Trying to add a %s as a subsection (it was named '%s') to the form section '%s'. It was removed.",
1257
+							'event_espresso'
1258
+						),
1259
+						get_class($subsection),
1260
+						$subsection_name,
1261
+						$this->name()
1262
+					)
1263
+				);
1264
+				unset($new_subsections[ $subsection_name ]);
1265
+			}
1266
+		}
1267
+		$this->_subsections = EEH_Array::insert_into_array(
1268
+			$this->_subsections,
1269
+			$new_subsections,
1270
+			$subsection_name_to_target,
1271
+			$add_before
1272
+		);
1273
+		if ($this->_construction_finalized) {
1274
+			foreach ($this->_subsections as $name => $subsection) {
1275
+				$subsection->_construct_finalize($this, $name);
1276
+			}
1277
+		}
1278
+	}
1279
+
1280
+
1281
+	/**
1282
+	 * @param string $subsection_name
1283
+	 * @param bool   $recursive
1284
+	 * @return bool
1285
+	 */
1286
+	public function has_subsection($subsection_name, $recursive = false)
1287
+	{
1288
+		foreach ($this->_subsections as $name => $subsection) {
1289
+			if (
1290
+				$name === $subsection_name
1291
+				|| (
1292
+					$recursive
1293
+					&& $subsection instanceof EE_Form_Section_Proper
1294
+					&& $subsection->has_subsection($subsection_name, $recursive)
1295
+				)
1296
+			) {
1297
+				return true;
1298
+			}
1299
+		}
1300
+		return false;
1301
+	}
1302
+
1303
+
1304
+
1305
+	/**
1306
+	 * Just gets all validatable subsections to clean their sensitive data
1307
+	 *
1308
+	 * @throws EE_Error
1309
+	 */
1310
+	public function clean_sensitive_data()
1311
+	{
1312
+		foreach ($this->get_validatable_subsections() as $subsection) {
1313
+			$subsection->clean_sensitive_data();
1314
+		}
1315
+	}
1316
+
1317
+
1318
+	/**
1319
+	 * Sets the submission error message (aka validation error message for this form section and all sub-sections)
1320
+	 * @param string                           $form_submission_error_message
1321
+	 * @param EE_Form_Section_Validatable $form_section unused
1322
+	 * @throws EE_Error
1323
+	 */
1324
+	public function set_submission_error_message(
1325
+		$form_submission_error_message = ''
1326
+	) {
1327
+		$this->_form_submission_error_message = ! empty($form_submission_error_message)
1328
+			? $form_submission_error_message
1329
+			: $this->getAllValidationErrorsString();
1330
+	}
1331
+
1332
+
1333
+	/**
1334
+	 * Returns the cached error message. A default value is set for this during _validate(),
1335
+	 * (called during receive_form_submission) but it can be explicitly set using
1336
+	 * set_submission_error_message
1337
+	 *
1338
+	 * @return string
1339
+	 */
1340
+	public function submission_error_message()
1341
+	{
1342
+		return $this->_form_submission_error_message;
1343
+	}
1344
+
1345
+
1346
+	/**
1347
+	 * Sets a message to display if the data submitted to the form was valid.
1348
+	 * @param string $form_submission_success_message
1349
+	 */
1350
+	public function set_submission_success_message($form_submission_success_message = '')
1351
+	{
1352
+		$this->_form_submission_success_message = ! empty($form_submission_success_message)
1353
+			? $form_submission_success_message
1354
+			: esc_html__('Form submitted successfully', 'event_espresso');
1355
+	}
1356
+
1357
+
1358
+	/**
1359
+	 * Gets a message appropriate for display when the form is correctly submitted
1360
+	 * @return string
1361
+	 */
1362
+	public function submission_success_message()
1363
+	{
1364
+		return $this->_form_submission_success_message;
1365
+	}
1366
+
1367
+
1368
+	/**
1369
+	 * Returns the prefix that should be used on child of this form section for
1370
+	 * their html names. If this form section itself has a parent, prepends ITS
1371
+	 * prefix onto this form section's prefix. Used primarily by
1372
+	 * EE_Form_Input_Base::_set_default_html_name_if_empty
1373
+	 *
1374
+	 * @return string
1375
+	 * @throws EE_Error
1376
+	 */
1377
+	public function html_name_prefix()
1378
+	{
1379
+		if ($this->parent_section() instanceof EE_Form_Section_Proper) {
1380
+			return $this->parent_section()->html_name_prefix() . '[' . $this->name() . ']';
1381
+		}
1382
+		return $this->name();
1383
+	}
1384
+
1385
+
1386
+	/**
1387
+	 * Gets the name, but first checks _construct_finalize has been called. If not,
1388
+	 * calls it (assumes there is no parent and that we want the name to be whatever
1389
+	 * was set, which is probably nothing, or the classname)
1390
+	 *
1391
+	 * @return string
1392
+	 * @throws EE_Error
1393
+	 */
1394
+	public function name()
1395
+	{
1396
+		$this->ensure_construct_finalized_called();
1397
+		return parent::name();
1398
+	}
1399
+
1400
+
1401
+	/**
1402
+	 * @return EE_Form_Section_Proper
1403
+	 * @throws EE_Error
1404
+	 */
1405
+	public function parent_section()
1406
+	{
1407
+		$this->ensure_construct_finalized_called();
1408
+		return parent::parent_section();
1409
+	}
1410
+
1411
+
1412
+	/**
1413
+	 * make sure construction finalized was called, otherwise children might not be ready
1414
+	 *
1415
+	 * @return void
1416
+	 * @throws EE_Error
1417
+	 */
1418
+	public function ensure_construct_finalized_called()
1419
+	{
1420
+		if (! $this->_construction_finalized) {
1421
+			$this->_construct_finalize($this->_parent_section, $this->_name);
1422
+		}
1423
+	}
1424
+
1425
+
1426
+	/**
1427
+	 * Checks if any of this form section's inputs, or any of its children's inputs,
1428
+	 * are in teh form data. If any are found, returns true. Else false
1429
+	 *
1430
+	 * @param array $req_data
1431
+	 * @return boolean
1432
+	 * @throws EE_Error
1433
+	 */
1434
+	public function form_data_present_in($req_data = null)
1435
+	{
1436
+		$req_data = $this->getCachedRequest($req_data);
1437
+		foreach ($this->subsections() as $subsection) {
1438
+			if ($subsection instanceof EE_Form_Input_Base) {
1439
+				if ($subsection->form_data_present_in($req_data)) {
1440
+					return true;
1441
+				}
1442
+			} elseif ($subsection instanceof EE_Form_Section_Proper) {
1443
+				if ($subsection->form_data_present_in($req_data)) {
1444
+					return true;
1445
+				}
1446
+			}
1447
+		}
1448
+		return false;
1449
+	}
1450
+
1451
+
1452
+	/**
1453
+	 * Gets validation errors for this form section and subsections
1454
+	 * Similar to EE_Form_Section_Validatable::get_validation_errors() except this
1455
+	 * gets the validation errors for ALL subsection
1456
+	 *
1457
+	 * @return EE_Validation_Error[]
1458
+	 * @throws EE_Error
1459
+	 */
1460
+	public function get_validation_errors_accumulated()
1461
+	{
1462
+		$validation_errors = $this->get_validation_errors();
1463
+		foreach ($this->get_validatable_subsections() as $subsection) {
1464
+			if ($subsection instanceof EE_Form_Section_Proper) {
1465
+				$validation_errors_on_this_subsection = $subsection->get_validation_errors_accumulated();
1466
+			} else {
1467
+				$validation_errors_on_this_subsection = $subsection->get_validation_errors();
1468
+			}
1469
+			if ($validation_errors_on_this_subsection) {
1470
+				$validation_errors = array_merge($validation_errors, $validation_errors_on_this_subsection);
1471
+			}
1472
+		}
1473
+		return $validation_errors;
1474
+	}
1475
+
1476
+	/**
1477
+	 * Fetch validation errors from children and grandchildren and puts them in a single string.
1478
+	 * This traverses the form section tree to generate this, but you probably want to instead use
1479
+	 * get_form_submission_error_message() which is usually this message cached (or a custom validation error message)
1480
+	 *
1481
+	 * @return string
1482
+	 * @since 4.9.59.p
1483
+	 */
1484
+	protected function getAllValidationErrorsString()
1485
+	{
1486
+		$submission_error_messages = array();
1487
+		// bad, bad, bad registrant
1488
+		foreach ($this->get_validation_errors_accumulated() as $validation_error) {
1489
+			if ($validation_error instanceof EE_Validation_Error) {
1490
+				$form_section = $validation_error->get_form_section();
1491
+				if ($form_section instanceof EE_Form_Input_Base) {
1492
+					$label = $validation_error->get_form_section()->html_label_text();
1493
+				} elseif ($form_section instanceof EE_Form_Section_Validatable) {
1494
+					$label = $validation_error->get_form_section()->name();
1495
+				} else {
1496
+					$label = esc_html__('Unknown', 'event_espresso');
1497
+				}
1498
+				$submission_error_messages[] = sprintf(
1499
+					esc_html__('%s : %s', 'event_espresso'),
1500
+					$label,
1501
+					$validation_error->getMessage()
1502
+				);
1503
+			}
1504
+		}
1505
+		return implode('<br>', $submission_error_messages);
1506
+	}
1507
+
1508
+
1509
+	/**
1510
+	 * This isn't just the name of an input, it's a path pointing to an input. The
1511
+	 * path is similar to a folder path: slash (/) means to descend into a subsection,
1512
+	 * dot-dot-slash (../) means to ascend into the parent section.
1513
+	 * After a series of slashes and dot-dot-slashes, there should be the name of an input,
1514
+	 * which will be returned.
1515
+	 * Eg, if you want the related input to be conditional on a sibling input name 'foobar'
1516
+	 * just use 'foobar'. If you want it to be conditional on an aunt/uncle input name
1517
+	 * 'baz', use '../baz'. If you want it to be conditional on a cousin input,
1518
+	 * the child of 'baz_section' named 'baz_child', use '../baz_section/baz_child'.
1519
+	 * Etc
1520
+	 *
1521
+	 * @param string|false $form_section_path we accept false also because substr( '../', '../' ) = false
1522
+	 * @return EE_Form_Section_Base
1523
+	 * @throws EE_Error
1524
+	 */
1525
+	public function find_section_from_path($form_section_path)
1526
+	{
1527
+		// check if we can find the input from purely going straight up the tree
1528
+		$input = parent::find_section_from_path($form_section_path);
1529
+		if ($input instanceof EE_Form_Section_Base) {
1530
+			return $input;
1531
+		}
1532
+		$next_slash_pos = strpos($form_section_path, '/');
1533
+		if ($next_slash_pos !== false) {
1534
+			$child_section_name = substr($form_section_path, 0, $next_slash_pos);
1535
+			$subpath            = substr($form_section_path, $next_slash_pos + 1);
1536
+		} else {
1537
+			$child_section_name = $form_section_path;
1538
+			$subpath            = '';
1539
+		}
1540
+		$child_section = $this->get_subsection($child_section_name);
1541
+		if ($child_section instanceof EE_Form_Section_Base) {
1542
+			return $child_section->find_section_from_path($subpath);
1543
+		}
1544
+		return null;
1545
+	}
1546 1546
 }
Please login to merge, or discard this patch.
modules/venue_single/EED_Venue_Single.module.php 2 patches
Spacing   +5 added lines, -5 removed lines patch added patch discarded remove patch
@@ -162,7 +162,7 @@  discard block
 block discarded – undo
162 162
      */
163 163
     public function venue_location($content)
164 164
     {
165
-        return $content . EEH_Template::locate_template('content-espresso_venues-location.php');
165
+        return $content.EEH_Template::locate_template('content-espresso_venues-location.php');
166 166
     }
167 167
 
168 168
 
@@ -177,16 +177,16 @@  discard block
 block discarded – undo
177 177
         // get some style
178 178
         if (apply_filters('FHEE_enable_default_espresso_css', true) && is_single()) {
179 179
             // first check theme folder
180
-            if (is_readable(get_stylesheet_directory() . $this->theme . '/style.css')) {
180
+            if (is_readable(get_stylesheet_directory().$this->theme.'/style.css')) {
181 181
                 wp_register_style(
182 182
                     $this->theme,
183
-                    get_stylesheet_directory_uri() . $this->theme . '/style.css',
183
+                    get_stylesheet_directory_uri().$this->theme.'/style.css',
184 184
                     array('dashicons', 'espresso_default')
185 185
                 );
186
-            } elseif (is_readable(EE_TEMPLATES . $this->theme . '/style.css')) {
186
+            } elseif (is_readable(EE_TEMPLATES.$this->theme.'/style.css')) {
187 187
                 wp_register_style(
188 188
                     $this->theme,
189
-                    EE_TEMPLATES_URL . $this->theme . '/style.css',
189
+                    EE_TEMPLATES_URL.$this->theme.'/style.css',
190 190
                     array('dashicons', 'espresso_default')
191 191
                 );
192 192
             }
Please login to merge, or discard this patch.
Indentation   +169 added lines, -169 removed lines patch added patch discarded remove patch
@@ -28,173 +28,173 @@
 block discarded – undo
28 28
  */
29 29
 class EED_Venue_Single extends EED_Module
30 30
 {
31
-    /**
32
-     * @return EED_Venue_Single
33
-     */
34
-    public static function instance()
35
-    {
36
-        return parent::get_instance(__CLASS__);
37
-    }
38
-
39
-
40
-    /**
41
-     * set_hooks - for hooking into EE Core, other modules, etc
42
-     *
43
-     * @return void
44
-     * @throws InvalidArgumentException
45
-     * @throws InvalidDataTypeException
46
-     * @throws InvalidInterfaceException
47
-     */
48
-    public static function set_hooks()
49
-    {
50
-        /** @var EventEspresso\core\domain\entities\custom_post_types\CustomPostTypeDefinitions $custom_post_type_definitions */
51
-        $custom_post_type_definitions = LoaderFactory::getLoader()->getShared(
52
-            'EventEspresso\core\domain\entities\custom_post_types\CustomPostTypeDefinitions'
53
-        );
54
-        $custom_post_types = $custom_post_type_definitions->getDefinitions();
55
-        EE_Config::register_route(
56
-            $custom_post_types['espresso_venues']['singular_slug'],
57
-            'Venue_Single',
58
-            'run'
59
-        );
60
-    }
61
-
62
-    /**
63
-     *    set_hooks_admin - for hooking into EE Admin Core, other modules, etc
64
-     *
65
-     * @access    public
66
-     * @return    void
67
-     */
68
-    public static function set_hooks_admin()
69
-    {
70
-    }
71
-
72
-
73
-    /**
74
-     * run - initial module setup
75
-     *
76
-     * @access    public
77
-     * @param \WP $WP
78
-     */
79
-    public function run($WP)
80
-    {
81
-        // check what template is loaded
82
-        add_filter('template_include', array($this, 'template_include'), 999, 1);
83
-        add_action('wp_enqueue_scripts', array($this, 'wp_enqueue_scripts'), 10);
84
-    }
85
-
86
-
87
-    /**
88
-     * template_include
89
-     *
90
-     * @access public
91
-     * @param  string $template
92
-     * @return string
93
-     */
94
-    public function template_include($template)
95
-    {
96
-        // not a custom template?
97
-        if (
98
-            EE_Registry::instance()
99
-                       ->load_core('Front_Controller', array(), false, true)
100
-                       ->get_selected_template() != 'single-espresso_venues.php'
101
-        ) {
102
-            EEH_Template::load_espresso_theme_functions();
103
-            // then add extra event data via hooks
104
-            add_filter('the_title', array($this, 'the_title'), 100, 1);
105
-            add_filter('the_content', array($this, 'venue_details'), 100);
106
-            // don't display entry meta because the existing theme will take car of that
107
-            add_filter('FHEE__content_espresso_venues_details_template__display_entry_meta', '__return_false');
108
-        }
109
-        return $template;
110
-    }
111
-
112
-
113
-    /**
114
-     * the_title
115
-     *
116
-     * @access public
117
-     * @param  string $title
118
-     * @return string
119
-     */
120
-    public function the_title($title = '')
121
-    {
122
-        return $title;
123
-    }
124
-
125
-
126
-    /**
127
-     *    venue_details
128
-     *
129
-     * @access public
130
-     * @param  string $content
131
-     * @return string
132
-     */
133
-    public function venue_details($content)
134
-    {
135
-        global $post;
136
-        if (
137
-            $post->post_type == 'espresso_venues'
138
-            && ! post_password_required()
139
-        ) {
140
-            // since the 'content-espresso_venues-details.php' template might be used directly from within a theme,
141
-            // it uses the_content() for displaying the $post->post_content
142
-            // so in order to load a template that uses the_content() from within a callback being used to filter the_content(),
143
-            // we need to first remove this callback from being applied to the_content() (otherwise it will recurse and blow up the interweb)
144
-            remove_filter('the_content', array($this, 'venue_details'), 100);
145
-            // add filters we want
146
-            add_filter('the_content', array($this, 'venue_location'), 110);
147
-            // now load our template
148
-            $template = EEH_Template::locate_template('content-espresso_venues-details.php');
149
-            // remove other filters we added so they won't get applied to the next post
150
-            remove_filter('the_content', array($this, 'venue_location'), 110);
151
-        }
152
-        // we're not returning the $content directly because the template we are loading uses the_content (or the_excerpt)
153
-        return ! empty($template) ? $template : $content;
154
-    }
155
-
156
-
157
-    /**
158
-     * venue_location
159
-     *
160
-     * @access public
161
-     * @param  string $content
162
-     * @return string
163
-     */
164
-    public function venue_location($content)
165
-    {
166
-        return $content . EEH_Template::locate_template('content-espresso_venues-location.php');
167
-    }
168
-
169
-
170
-    /**
171
-     *    wp_enqueue_scripts
172
-     *
173
-     * @access public
174
-     * @return void
175
-     */
176
-    public function wp_enqueue_scripts()
177
-    {
178
-        // get some style
179
-        if (apply_filters('FHEE_enable_default_espresso_css', true) && is_single()) {
180
-            // first check theme folder
181
-            if (is_readable(get_stylesheet_directory() . $this->theme . '/style.css')) {
182
-                wp_register_style(
183
-                    $this->theme,
184
-                    get_stylesheet_directory_uri() . $this->theme . '/style.css',
185
-                    array('dashicons', 'espresso_default')
186
-                );
187
-            } elseif (is_readable(EE_TEMPLATES . $this->theme . '/style.css')) {
188
-                wp_register_style(
189
-                    $this->theme,
190
-                    EE_TEMPLATES_URL . $this->theme . '/style.css',
191
-                    array('dashicons', 'espresso_default')
192
-                );
193
-            }
194
-            wp_enqueue_style($this->theme);
195
-            if (EE_Registry::instance()->CFG->map_settings->use_google_maps) {
196
-                add_action('wp_enqueue_scripts', array('EEH_Maps', 'espresso_google_map_js'), 11);
197
-            }
198
-        }
199
-    }
31
+	/**
32
+	 * @return EED_Venue_Single
33
+	 */
34
+	public static function instance()
35
+	{
36
+		return parent::get_instance(__CLASS__);
37
+	}
38
+
39
+
40
+	/**
41
+	 * set_hooks - for hooking into EE Core, other modules, etc
42
+	 *
43
+	 * @return void
44
+	 * @throws InvalidArgumentException
45
+	 * @throws InvalidDataTypeException
46
+	 * @throws InvalidInterfaceException
47
+	 */
48
+	public static function set_hooks()
49
+	{
50
+		/** @var EventEspresso\core\domain\entities\custom_post_types\CustomPostTypeDefinitions $custom_post_type_definitions */
51
+		$custom_post_type_definitions = LoaderFactory::getLoader()->getShared(
52
+			'EventEspresso\core\domain\entities\custom_post_types\CustomPostTypeDefinitions'
53
+		);
54
+		$custom_post_types = $custom_post_type_definitions->getDefinitions();
55
+		EE_Config::register_route(
56
+			$custom_post_types['espresso_venues']['singular_slug'],
57
+			'Venue_Single',
58
+			'run'
59
+		);
60
+	}
61
+
62
+	/**
63
+	 *    set_hooks_admin - for hooking into EE Admin Core, other modules, etc
64
+	 *
65
+	 * @access    public
66
+	 * @return    void
67
+	 */
68
+	public static function set_hooks_admin()
69
+	{
70
+	}
71
+
72
+
73
+	/**
74
+	 * run - initial module setup
75
+	 *
76
+	 * @access    public
77
+	 * @param \WP $WP
78
+	 */
79
+	public function run($WP)
80
+	{
81
+		// check what template is loaded
82
+		add_filter('template_include', array($this, 'template_include'), 999, 1);
83
+		add_action('wp_enqueue_scripts', array($this, 'wp_enqueue_scripts'), 10);
84
+	}
85
+
86
+
87
+	/**
88
+	 * template_include
89
+	 *
90
+	 * @access public
91
+	 * @param  string $template
92
+	 * @return string
93
+	 */
94
+	public function template_include($template)
95
+	{
96
+		// not a custom template?
97
+		if (
98
+			EE_Registry::instance()
99
+					   ->load_core('Front_Controller', array(), false, true)
100
+					   ->get_selected_template() != 'single-espresso_venues.php'
101
+		) {
102
+			EEH_Template::load_espresso_theme_functions();
103
+			// then add extra event data via hooks
104
+			add_filter('the_title', array($this, 'the_title'), 100, 1);
105
+			add_filter('the_content', array($this, 'venue_details'), 100);
106
+			// don't display entry meta because the existing theme will take car of that
107
+			add_filter('FHEE__content_espresso_venues_details_template__display_entry_meta', '__return_false');
108
+		}
109
+		return $template;
110
+	}
111
+
112
+
113
+	/**
114
+	 * the_title
115
+	 *
116
+	 * @access public
117
+	 * @param  string $title
118
+	 * @return string
119
+	 */
120
+	public function the_title($title = '')
121
+	{
122
+		return $title;
123
+	}
124
+
125
+
126
+	/**
127
+	 *    venue_details
128
+	 *
129
+	 * @access public
130
+	 * @param  string $content
131
+	 * @return string
132
+	 */
133
+	public function venue_details($content)
134
+	{
135
+		global $post;
136
+		if (
137
+			$post->post_type == 'espresso_venues'
138
+			&& ! post_password_required()
139
+		) {
140
+			// since the 'content-espresso_venues-details.php' template might be used directly from within a theme,
141
+			// it uses the_content() for displaying the $post->post_content
142
+			// so in order to load a template that uses the_content() from within a callback being used to filter the_content(),
143
+			// we need to first remove this callback from being applied to the_content() (otherwise it will recurse and blow up the interweb)
144
+			remove_filter('the_content', array($this, 'venue_details'), 100);
145
+			// add filters we want
146
+			add_filter('the_content', array($this, 'venue_location'), 110);
147
+			// now load our template
148
+			$template = EEH_Template::locate_template('content-espresso_venues-details.php');
149
+			// remove other filters we added so they won't get applied to the next post
150
+			remove_filter('the_content', array($this, 'venue_location'), 110);
151
+		}
152
+		// we're not returning the $content directly because the template we are loading uses the_content (or the_excerpt)
153
+		return ! empty($template) ? $template : $content;
154
+	}
155
+
156
+
157
+	/**
158
+	 * venue_location
159
+	 *
160
+	 * @access public
161
+	 * @param  string $content
162
+	 * @return string
163
+	 */
164
+	public function venue_location($content)
165
+	{
166
+		return $content . EEH_Template::locate_template('content-espresso_venues-location.php');
167
+	}
168
+
169
+
170
+	/**
171
+	 *    wp_enqueue_scripts
172
+	 *
173
+	 * @access public
174
+	 * @return void
175
+	 */
176
+	public function wp_enqueue_scripts()
177
+	{
178
+		// get some style
179
+		if (apply_filters('FHEE_enable_default_espresso_css', true) && is_single()) {
180
+			// first check theme folder
181
+			if (is_readable(get_stylesheet_directory() . $this->theme . '/style.css')) {
182
+				wp_register_style(
183
+					$this->theme,
184
+					get_stylesheet_directory_uri() . $this->theme . '/style.css',
185
+					array('dashicons', 'espresso_default')
186
+				);
187
+			} elseif (is_readable(EE_TEMPLATES . $this->theme . '/style.css')) {
188
+				wp_register_style(
189
+					$this->theme,
190
+					EE_TEMPLATES_URL . $this->theme . '/style.css',
191
+					array('dashicons', 'espresso_default')
192
+				);
193
+			}
194
+			wp_enqueue_style($this->theme);
195
+			if (EE_Registry::instance()->CFG->map_settings->use_google_maps) {
196
+				add_action('wp_enqueue_scripts', array('EEH_Maps', 'espresso_google_map_js'), 11);
197
+			}
198
+		}
199
+	}
200 200
 }
Please login to merge, or discard this patch.
modules/venues_archive/EED_Venues_Archive.module.php 2 patches
Spacing   +5 added lines, -5 removed lines patch added patch discarded remove patch
@@ -170,7 +170,7 @@  discard block
 block discarded – undo
170 170
      */
171 171
     public function venue_location($content)
172 172
     {
173
-        return $content . EEH_Template::locate_template('content-espresso_venues-location.php');
173
+        return $content.EEH_Template::locate_template('content-espresso_venues-location.php');
174 174
     }
175 175
 
176 176
 
@@ -185,16 +185,16 @@  discard block
 block discarded – undo
185 185
         // get some style
186 186
         if (apply_filters('FHEE_enable_default_espresso_css', true) && is_archive()) {
187 187
             // first check theme folder
188
-            if (is_readable(get_stylesheet_directory() . $this->theme . '/style.css')) {
188
+            if (is_readable(get_stylesheet_directory().$this->theme.'/style.css')) {
189 189
                 wp_register_style(
190 190
                     $this->theme,
191
-                    get_stylesheet_directory_uri() . $this->theme . '/style.css',
191
+                    get_stylesheet_directory_uri().$this->theme.'/style.css',
192 192
                     array('dashicons', 'espresso_default')
193 193
                 );
194
-            } elseif (is_readable(EE_TEMPLATES . $this->theme . '/style.css')) {
194
+            } elseif (is_readable(EE_TEMPLATES.$this->theme.'/style.css')) {
195 195
                 wp_register_style(
196 196
                     $this->theme,
197
-                    EE_TEMPLATES_URL . $this->theme . '/style.css',
197
+                    EE_TEMPLATES_URL.$this->theme.'/style.css',
198 198
                     array('dashicons', 'espresso_default')
199 199
                 );
200 200
             }
Please login to merge, or discard this patch.
Indentation   +174 added lines, -174 removed lines patch added patch discarded remove patch
@@ -28,178 +28,178 @@
 block discarded – undo
28 28
  */
29 29
 class EED_Venues_Archive extends EED_Module
30 30
 {
31
-    /**
32
-     * @return EED_Venues_Archive
33
-     */
34
-    public static function instance()
35
-    {
36
-        return parent::get_instance(__CLASS__);
37
-    }
38
-
39
-
40
-    /**
41
-     * set_hooks - for hooking into EE Core, other modules, etc
42
-     *
43
-     * @return void
44
-     * @throws InvalidArgumentException
45
-     * @throws InvalidDataTypeException
46
-     * @throws InvalidInterfaceException
47
-     */
48
-    public static function set_hooks()
49
-    {
50
-        /** @var EventEspresso\core\domain\entities\custom_post_types\CustomPostTypeDefinitions $custom_post_type_definitions */
51
-        $custom_post_type_definitions = LoaderFactory::getLoader()->getShared(
52
-            'EventEspresso\core\domain\entities\custom_post_types\CustomPostTypeDefinitions'
53
-        );
54
-        $custom_post_types = $custom_post_type_definitions->getDefinitions();
55
-        EE_Config::register_route(
56
-            $custom_post_types['espresso_venues']['plural_slug'],
57
-            'Venues_Archive',
58
-            'run'
59
-        );
60
-    }
61
-
62
-    /**
63
-     *    set_hooks_admin - for hooking into EE Admin Core, other modules, etc
64
-     *
65
-     * @access    public
66
-     * @return    void
67
-     */
68
-    public static function set_hooks_admin()
69
-    {
70
-    }
71
-
72
-
73
-    /**
74
-     * run - initial module setup
75
-     *
76
-     * @access    public
77
-     * @param \WP $WP
78
-     */
79
-    public function run($WP)
80
-    {
81
-        // check what template is loaded
82
-        add_filter('template_include', array($this, 'template_include'), 999, 1);
83
-        add_action('wp_enqueue_scripts', array($this, 'wp_enqueue_scripts'), 10);
84
-    }
85
-
86
-
87
-    /**
88
-     * template_include
89
-     *
90
-     * @access public
91
-     * @param  string $template
92
-     * @return string
93
-     */
94
-    public function template_include($template)
95
-    {
96
-        // not a custom template?
97
-        if (
98
-            EE_Registry::instance()->load_core('Front_Controller', array(), false, true)
99
-                                   ->get_selected_template() != 'archive-espresso_venues.php'
100
-        ) {
101
-            EEH_Template::load_espresso_theme_functions();
102
-            // then add extra event data via hooks
103
-            add_filter('the_title', array($this, 'the_title'), 100, 1);
104
-            // don't know if theme uses the_excerpt
105
-            add_filter('the_excerpt', array($this, 'venue_details'), 100);
106
-            // or the_content
107
-            add_filter('the_content', array($this, 'venue_details'), 100);
108
-            // don't display entry meta because the existing theme will take care of that
109
-            add_filter('FHEE__content_espresso_venues_details_template__display_entry_meta', '__return_false');
110
-        }
111
-        return $template;
112
-    }
113
-
114
-
115
-    /**
116
-     * the_title
117
-     *
118
-     * @access public
119
-     * @param  string $title
120
-     * @return string
121
-     */
122
-    public function the_title($title = '')
123
-    {
124
-        return $title;
125
-    }
126
-
127
-
128
-    /**
129
-     *    venue_details
130
-     *
131
-     * @access public
132
-     * @param  string $content
133
-     * @return string
134
-     */
135
-    public function venue_details($content)
136
-    {
137
-        global $post;
138
-        if (
139
-            $post->post_type == 'espresso_venues'
140
-            && ! post_password_required()
141
-        ) {
142
-            // since the 'content-espresso_venues-details.php' template might be used directly from within a theme,
143
-            // it uses the_content() for displaying the $post->post_content
144
-            // so in order to load a template that uses the_content() from within a callback being used to filter the_content(),
145
-            // we need to first remove this callback from being applied to the_content() (otherwise it will recurse and blow up the interweb)
146
-            remove_filter('the_excerpt', array($this, 'venue_details'), 100);
147
-            remove_filter('the_content', array($this, 'venue_details'), 100);
148
-            // add filters we want
149
-            add_filter('the_content', array($this, 'venue_location'), 110);
150
-            add_filter('the_excerpt', array($this, 'venue_location'), 110);
151
-            // now load our template
152
-            $template = EEH_Template::locate_template('content-espresso_venues-details.php');
153
-            // now add our filter back in, plus some others
154
-            add_filter('the_excerpt', array($this, 'venue_details'), 100);
155
-            add_filter('the_content', array($this, 'venue_details'), 100);
156
-            // remove other filters we added so they won't get applied to the next post
157
-            remove_filter('the_content', array($this, 'venue_location'), 110);
158
-            remove_filter('the_excerpt', array($this, 'venue_location'), 110);
159
-            // we're not returning the $content directly because the template we are loading uses the_content (or the_excerpt)
160
-        }
161
-        return ! empty($template) ? $template : $content;
162
-    }
163
-
164
-
165
-    /**
166
-     * venue_location
167
-     *
168
-     * @access public
169
-     * @param  string $content
170
-     * @return string
171
-     */
172
-    public function venue_location($content)
173
-    {
174
-        return $content . EEH_Template::locate_template('content-espresso_venues-location.php');
175
-    }
176
-
177
-
178
-    /**
179
-     *    wp_enqueue_scripts
180
-     *
181
-     * @access    public
182
-     * @return    void
183
-     */
184
-    public function wp_enqueue_scripts()
185
-    {
186
-        // get some style
187
-        if (apply_filters('FHEE_enable_default_espresso_css', true) && is_archive()) {
188
-            // first check theme folder
189
-            if (is_readable(get_stylesheet_directory() . $this->theme . '/style.css')) {
190
-                wp_register_style(
191
-                    $this->theme,
192
-                    get_stylesheet_directory_uri() . $this->theme . '/style.css',
193
-                    array('dashicons', 'espresso_default')
194
-                );
195
-            } elseif (is_readable(EE_TEMPLATES . $this->theme . '/style.css')) {
196
-                wp_register_style(
197
-                    $this->theme,
198
-                    EE_TEMPLATES_URL . $this->theme . '/style.css',
199
-                    array('dashicons', 'espresso_default')
200
-                );
201
-            }
202
-            wp_enqueue_style($this->theme);
203
-        }
204
-    }
31
+	/**
32
+	 * @return EED_Venues_Archive
33
+	 */
34
+	public static function instance()
35
+	{
36
+		return parent::get_instance(__CLASS__);
37
+	}
38
+
39
+
40
+	/**
41
+	 * set_hooks - for hooking into EE Core, other modules, etc
42
+	 *
43
+	 * @return void
44
+	 * @throws InvalidArgumentException
45
+	 * @throws InvalidDataTypeException
46
+	 * @throws InvalidInterfaceException
47
+	 */
48
+	public static function set_hooks()
49
+	{
50
+		/** @var EventEspresso\core\domain\entities\custom_post_types\CustomPostTypeDefinitions $custom_post_type_definitions */
51
+		$custom_post_type_definitions = LoaderFactory::getLoader()->getShared(
52
+			'EventEspresso\core\domain\entities\custom_post_types\CustomPostTypeDefinitions'
53
+		);
54
+		$custom_post_types = $custom_post_type_definitions->getDefinitions();
55
+		EE_Config::register_route(
56
+			$custom_post_types['espresso_venues']['plural_slug'],
57
+			'Venues_Archive',
58
+			'run'
59
+		);
60
+	}
61
+
62
+	/**
63
+	 *    set_hooks_admin - for hooking into EE Admin Core, other modules, etc
64
+	 *
65
+	 * @access    public
66
+	 * @return    void
67
+	 */
68
+	public static function set_hooks_admin()
69
+	{
70
+	}
71
+
72
+
73
+	/**
74
+	 * run - initial module setup
75
+	 *
76
+	 * @access    public
77
+	 * @param \WP $WP
78
+	 */
79
+	public function run($WP)
80
+	{
81
+		// check what template is loaded
82
+		add_filter('template_include', array($this, 'template_include'), 999, 1);
83
+		add_action('wp_enqueue_scripts', array($this, 'wp_enqueue_scripts'), 10);
84
+	}
85
+
86
+
87
+	/**
88
+	 * template_include
89
+	 *
90
+	 * @access public
91
+	 * @param  string $template
92
+	 * @return string
93
+	 */
94
+	public function template_include($template)
95
+	{
96
+		// not a custom template?
97
+		if (
98
+			EE_Registry::instance()->load_core('Front_Controller', array(), false, true)
99
+								   ->get_selected_template() != 'archive-espresso_venues.php'
100
+		) {
101
+			EEH_Template::load_espresso_theme_functions();
102
+			// then add extra event data via hooks
103
+			add_filter('the_title', array($this, 'the_title'), 100, 1);
104
+			// don't know if theme uses the_excerpt
105
+			add_filter('the_excerpt', array($this, 'venue_details'), 100);
106
+			// or the_content
107
+			add_filter('the_content', array($this, 'venue_details'), 100);
108
+			// don't display entry meta because the existing theme will take care of that
109
+			add_filter('FHEE__content_espresso_venues_details_template__display_entry_meta', '__return_false');
110
+		}
111
+		return $template;
112
+	}
113
+
114
+
115
+	/**
116
+	 * the_title
117
+	 *
118
+	 * @access public
119
+	 * @param  string $title
120
+	 * @return string
121
+	 */
122
+	public function the_title($title = '')
123
+	{
124
+		return $title;
125
+	}
126
+
127
+
128
+	/**
129
+	 *    venue_details
130
+	 *
131
+	 * @access public
132
+	 * @param  string $content
133
+	 * @return string
134
+	 */
135
+	public function venue_details($content)
136
+	{
137
+		global $post;
138
+		if (
139
+			$post->post_type == 'espresso_venues'
140
+			&& ! post_password_required()
141
+		) {
142
+			// since the 'content-espresso_venues-details.php' template might be used directly from within a theme,
143
+			// it uses the_content() for displaying the $post->post_content
144
+			// so in order to load a template that uses the_content() from within a callback being used to filter the_content(),
145
+			// we need to first remove this callback from being applied to the_content() (otherwise it will recurse and blow up the interweb)
146
+			remove_filter('the_excerpt', array($this, 'venue_details'), 100);
147
+			remove_filter('the_content', array($this, 'venue_details'), 100);
148
+			// add filters we want
149
+			add_filter('the_content', array($this, 'venue_location'), 110);
150
+			add_filter('the_excerpt', array($this, 'venue_location'), 110);
151
+			// now load our template
152
+			$template = EEH_Template::locate_template('content-espresso_venues-details.php');
153
+			// now add our filter back in, plus some others
154
+			add_filter('the_excerpt', array($this, 'venue_details'), 100);
155
+			add_filter('the_content', array($this, 'venue_details'), 100);
156
+			// remove other filters we added so they won't get applied to the next post
157
+			remove_filter('the_content', array($this, 'venue_location'), 110);
158
+			remove_filter('the_excerpt', array($this, 'venue_location'), 110);
159
+			// we're not returning the $content directly because the template we are loading uses the_content (or the_excerpt)
160
+		}
161
+		return ! empty($template) ? $template : $content;
162
+	}
163
+
164
+
165
+	/**
166
+	 * venue_location
167
+	 *
168
+	 * @access public
169
+	 * @param  string $content
170
+	 * @return string
171
+	 */
172
+	public function venue_location($content)
173
+	{
174
+		return $content . EEH_Template::locate_template('content-espresso_venues-location.php');
175
+	}
176
+
177
+
178
+	/**
179
+	 *    wp_enqueue_scripts
180
+	 *
181
+	 * @access    public
182
+	 * @return    void
183
+	 */
184
+	public function wp_enqueue_scripts()
185
+	{
186
+		// get some style
187
+		if (apply_filters('FHEE_enable_default_espresso_css', true) && is_archive()) {
188
+			// first check theme folder
189
+			if (is_readable(get_stylesheet_directory() . $this->theme . '/style.css')) {
190
+				wp_register_style(
191
+					$this->theme,
192
+					get_stylesheet_directory_uri() . $this->theme . '/style.css',
193
+					array('dashicons', 'espresso_default')
194
+				);
195
+			} elseif (is_readable(EE_TEMPLATES . $this->theme . '/style.css')) {
196
+				wp_register_style(
197
+					$this->theme,
198
+					EE_TEMPLATES_URL . $this->theme . '/style.css',
199
+					array('dashicons', 'espresso_default')
200
+				);
201
+			}
202
+			wp_enqueue_style($this->theme);
203
+		}
204
+	}
205 205
 }
Please login to merge, or discard this patch.
line_item_display/EE_Default_Line_Item_Display_Strategy.strategy.php 2 patches
Indentation   +218 added lines, -218 removed lines patch added patch discarded remove patch
@@ -1,225 +1,225 @@
 block discarded – undo
1 1
 <?php
2 2
  /**
3
- *
4
- * Class EE_Default_Line_Item_Display_Strategy
5
- *
6
- * Description
7
- *
8
- * @package         Event Espresso
9
- * @subpackage    core
10
- * @author              Brent Christensen
11
- *
12
- *
13
- */
3
+  *
4
+  * Class EE_Default_Line_Item_Display_Strategy
5
+  *
6
+  * Description
7
+  *
8
+  * @package         Event Espresso
9
+  * @subpackage    core
10
+  * @author              Brent Christensen
11
+  *
12
+  *
13
+  */
14 14
 
15 15
 class EE_Default_Line_Item_Display_Strategy implements EEI_Line_Item_Display
16 16
 {
17 17
 
18
-    /**
19
-     * total amount of tax to apply
20
-     * @type float $_tax_rate
21
-     */
22
-    private $_tax_rate = 0;
23
-
24
-    /**
25
-     * total amount including tax we can bill for at this time
26
-     * @type float $_grand_total
27
-     */
28
-    private $_grand_total = 0.00;
29
-
30
-    /**
31
-     * total number of items being billed for
32
-     * @type int $_total_items
33
-     */
34
-    private $_total_items = 0;
35
-
36
-
37
-
38
-    /**
39
-     * @return float
40
-     */
41
-    public function grand_total()
42
-    {
43
-        return $this->_grand_total;
44
-    }
45
-
46
-
47
-
48
-    /**
49
-     * @return int
50
-     */
51
-    public function total_items()
52
-    {
53
-        return $this->_total_items;
54
-    }
55
-
56
-
57
-
58
-    /**
59
-     * @param EE_Line_Item $line_item
60
-     * @param array        $options
61
-     * @return mixed
62
-     */
63
-    public function display_line_item(EE_Line_Item $line_item, $options = array())
64
-    {
65
-
66
-        $html = '';
67
-        // set some default options and merge with incoming
68
-        $default_options = array(
69
-            'show_desc' => true,  //    TRUE        FALSE
70
-            'odd' => false
71
-        );
72
-        $options = array_merge($default_options, (array) $options);
73
-
74
-        switch ($line_item->type()) {
75
-            case EEM_Line_Item::type_line_item:
76
-                // item row
77
-                $html .= $this->_item_row($line_item, $options);
78
-                // got any kids?
79
-                foreach ($line_item->children() as $child_line_item) {
80
-                    $this->display_line_item($child_line_item, $options);
81
-                }
82
-                break;
83
-
84
-            case EEM_Line_Item::type_sub_line_item:
85
-                $html .= $this->_sub_item_row($line_item, $options);
86
-                break;
87
-
88
-            case EEM_Line_Item::type_sub_total:
89
-                break;
90
-
91
-            case EEM_Line_Item::type_tax:
92
-                $this->_tax_rate += $line_item->percent();
93
-                break;
94
-
95
-            case EEM_Line_Item::type_tax_sub_total:
96
-                foreach ($line_item->children() as $child_line_item) {
97
-                    if ($child_line_item->type() == EEM_Line_Item::type_tax) {
98
-                        // recursively feed children back into this method
99
-                        $this->display_line_item($child_line_item, $options);
100
-                    }
101
-                }
102
-                break;
103
-
104
-            case EEM_Line_Item::type_total:
105
-                // get all child line items
106
-                $children = $line_item->children();
107
-                if ($options['set_tax_rate'] === true) {
108
-                    // loop thru tax child line items just to determine tax rate
109
-                    foreach ($children as $child_line_item) {
110
-                        if ($child_line_item->type() == EEM_Line_Item::type_tax_sub_total) {
111
-                            // recursively feed children back into this method
112
-                            $this->display_line_item($child_line_item, $options);
113
-                        }
114
-                    }
115
-                } else {
116
-                    // now loop thru all non-tax child line items
117
-                    foreach ($children as $child_line_item) {
118
-                        if ($child_line_item->type() != EEM_Line_Item::type_tax_sub_total) {
119
-                            // recursively feed children back into this method
120
-                            $html .= $this->display_line_item($child_line_item, $options);
121
-                        }
122
-                    }
123
-                }
124
-                break;
125
-        }
126
-
127
-        return $html;
128
-    }
129
-
130
-
131
-
132
-    /**
133
-     *  _total_row
134
-     *
135
-     * @param EE_Line_Item $line_item
136
-     * @param array        $options
137
-     * @return mixed
138
-     */
139
-    private function _item_row(EE_Line_Item $line_item, $options = array())
140
-    {
141
-        // start of row
142
-        $row_class = $options['odd'] ? 'item odd' : 'item';
143
-        $html = EEH_HTML::tr('', '', $row_class);
144
-        // name && desc
145
-        $name_and_desc = apply_filters(
146
-            'FHEE__EE_Default_Line_Item_Display_Strategy__item_row__name',
147
-            $line_item->name(),
148
-            $line_item
149
-        );
150
-        $name_and_desc .= apply_filters(
151
-            'FHEE__EE_Default_Line_Item_Display_Strategy__item_row__desc',
152
-            ( $options['show_desc'] ? '<span class="line-item-desc-spn smaller-text">: ' . $line_item->desc() . '</span>' : '' ),
153
-            $line_item,
154
-            $options
155
-        );
156
-        if ($line_item->is_taxable()) {
157
-            $ticket_price_includes_taxes = EE_Registry::instance()->CFG->tax_settings->prices_displayed_including_taxes
158
-                ? esc_html__('* price includes taxes', 'event_espresso')
159
-                : esc_html__('* price does not include taxes', 'event_espresso');
160
-            $name_and_desc .= '<span class="smaller-text lt-grey-text" style="margin:0 0 0 2em;">'
161
-                  . $ticket_price_includes_taxes
162
-                  . '</span>';
163
-        }
164
-
165
-        // name td
166
-        $html .= EEH_HTML::td($name_and_desc, '', 'item_l');
167
-        // quantity td
168
-        $html .= EEH_HTML::td($line_item->quantity(), '', 'item_l jst-rght');
169
-        $tax_rate = $line_item->is_taxable()
170
-                    && EE_Registry::instance()->CFG->tax_settings->prices_displayed_including_taxes
171
-            ? 1 + ( $this->_tax_rate / 100 )
172
-            : 1;
173
-        // price td
174
-        $unit_price = apply_filters(
175
-            'FHEE__EE_Default_Line_Item_Display_Strategy___item_row__unit_price',
176
-            EEH_Template::format_currency($line_item->unit_price() * $tax_rate, false, false),
177
-            $line_item,
178
-            $tax_rate
179
-        );
180
-        $html .= EEH_HTML::td($unit_price, '', 'item_c jst-rght');
181
-        // total td
182
-        $total = apply_filters(
183
-            'FHEE__EE_Default_Line_Item_Display_Strategy___item_row__total',
184
-            EEH_Template::format_currency($line_item->unit_price() * $line_item->quantity() * $tax_rate, false, false),
185
-            $line_item,
186
-            $tax_rate
187
-        );
188
-        $html .= EEH_HTML::td($total, '', 'item_r jst-rght');
189
-        // end of row
190
-        $html .= EEH_HTML::trx();
191
-
192
-        return $html;
193
-    }
194
-
195
-
196
-
197
-    /**
198
-     *  _sub_item_row
199
-     *
200
-     * @param EE_Line_Item $line_item
201
-     * @param array        $options
202
-     * @return mixed
203
-     */
204
-    private function _sub_item_row(EE_Line_Item $line_item, $options = array())
205
-    {
206
-        // start of row
207
-        $html = EEH_HTML::tr('', 'item sub-item-row');
208
-        // name && desc
209
-        $name_and_desc = $line_item->name();
210
-        $name_and_desc .= $options['show_desc'] ? '<span class="line-sub-item-desc-spn smaller-text">: ' . $line_item->desc() . '</span>' : '';
211
-        // name td
212
-        $html .= EEH_HTML::td(/*__FUNCTION__ .*/ $name_and_desc, '', 'item_l sub-item');
213
-        // discount/surcharge td
214
-        if ($line_item->is_percent()) {
215
-            $html .= EEH_HTML::td($line_item->percent() . '%', '', 'item_c');
216
-        } else {
217
-            $html .= EEH_HTML::td($line_item->unit_price_no_code(), '', 'item_c jst-rght');
218
-        }
219
-        // total td
220
-        $html .= EEH_HTML::td(EEH_Template::format_currency($line_item->total(), false, false), '', 'item_r jst-rght');
221
-        // end of row
222
-        $html .= EEH_HTML::trx();
223
-        return $html;
224
-    }
18
+	/**
19
+	 * total amount of tax to apply
20
+	 * @type float $_tax_rate
21
+	 */
22
+	private $_tax_rate = 0;
23
+
24
+	/**
25
+	 * total amount including tax we can bill for at this time
26
+	 * @type float $_grand_total
27
+	 */
28
+	private $_grand_total = 0.00;
29
+
30
+	/**
31
+	 * total number of items being billed for
32
+	 * @type int $_total_items
33
+	 */
34
+	private $_total_items = 0;
35
+
36
+
37
+
38
+	/**
39
+	 * @return float
40
+	 */
41
+	public function grand_total()
42
+	{
43
+		return $this->_grand_total;
44
+	}
45
+
46
+
47
+
48
+	/**
49
+	 * @return int
50
+	 */
51
+	public function total_items()
52
+	{
53
+		return $this->_total_items;
54
+	}
55
+
56
+
57
+
58
+	/**
59
+	 * @param EE_Line_Item $line_item
60
+	 * @param array        $options
61
+	 * @return mixed
62
+	 */
63
+	public function display_line_item(EE_Line_Item $line_item, $options = array())
64
+	{
65
+
66
+		$html = '';
67
+		// set some default options and merge with incoming
68
+		$default_options = array(
69
+			'show_desc' => true,  //    TRUE        FALSE
70
+			'odd' => false
71
+		);
72
+		$options = array_merge($default_options, (array) $options);
73
+
74
+		switch ($line_item->type()) {
75
+			case EEM_Line_Item::type_line_item:
76
+				// item row
77
+				$html .= $this->_item_row($line_item, $options);
78
+				// got any kids?
79
+				foreach ($line_item->children() as $child_line_item) {
80
+					$this->display_line_item($child_line_item, $options);
81
+				}
82
+				break;
83
+
84
+			case EEM_Line_Item::type_sub_line_item:
85
+				$html .= $this->_sub_item_row($line_item, $options);
86
+				break;
87
+
88
+			case EEM_Line_Item::type_sub_total:
89
+				break;
90
+
91
+			case EEM_Line_Item::type_tax:
92
+				$this->_tax_rate += $line_item->percent();
93
+				break;
94
+
95
+			case EEM_Line_Item::type_tax_sub_total:
96
+				foreach ($line_item->children() as $child_line_item) {
97
+					if ($child_line_item->type() == EEM_Line_Item::type_tax) {
98
+						// recursively feed children back into this method
99
+						$this->display_line_item($child_line_item, $options);
100
+					}
101
+				}
102
+				break;
103
+
104
+			case EEM_Line_Item::type_total:
105
+				// get all child line items
106
+				$children = $line_item->children();
107
+				if ($options['set_tax_rate'] === true) {
108
+					// loop thru tax child line items just to determine tax rate
109
+					foreach ($children as $child_line_item) {
110
+						if ($child_line_item->type() == EEM_Line_Item::type_tax_sub_total) {
111
+							// recursively feed children back into this method
112
+							$this->display_line_item($child_line_item, $options);
113
+						}
114
+					}
115
+				} else {
116
+					// now loop thru all non-tax child line items
117
+					foreach ($children as $child_line_item) {
118
+						if ($child_line_item->type() != EEM_Line_Item::type_tax_sub_total) {
119
+							// recursively feed children back into this method
120
+							$html .= $this->display_line_item($child_line_item, $options);
121
+						}
122
+					}
123
+				}
124
+				break;
125
+		}
126
+
127
+		return $html;
128
+	}
129
+
130
+
131
+
132
+	/**
133
+	 *  _total_row
134
+	 *
135
+	 * @param EE_Line_Item $line_item
136
+	 * @param array        $options
137
+	 * @return mixed
138
+	 */
139
+	private function _item_row(EE_Line_Item $line_item, $options = array())
140
+	{
141
+		// start of row
142
+		$row_class = $options['odd'] ? 'item odd' : 'item';
143
+		$html = EEH_HTML::tr('', '', $row_class);
144
+		// name && desc
145
+		$name_and_desc = apply_filters(
146
+			'FHEE__EE_Default_Line_Item_Display_Strategy__item_row__name',
147
+			$line_item->name(),
148
+			$line_item
149
+		);
150
+		$name_and_desc .= apply_filters(
151
+			'FHEE__EE_Default_Line_Item_Display_Strategy__item_row__desc',
152
+			( $options['show_desc'] ? '<span class="line-item-desc-spn smaller-text">: ' . $line_item->desc() . '</span>' : '' ),
153
+			$line_item,
154
+			$options
155
+		);
156
+		if ($line_item->is_taxable()) {
157
+			$ticket_price_includes_taxes = EE_Registry::instance()->CFG->tax_settings->prices_displayed_including_taxes
158
+				? esc_html__('* price includes taxes', 'event_espresso')
159
+				: esc_html__('* price does not include taxes', 'event_espresso');
160
+			$name_and_desc .= '<span class="smaller-text lt-grey-text" style="margin:0 0 0 2em;">'
161
+				  . $ticket_price_includes_taxes
162
+				  . '</span>';
163
+		}
164
+
165
+		// name td
166
+		$html .= EEH_HTML::td($name_and_desc, '', 'item_l');
167
+		// quantity td
168
+		$html .= EEH_HTML::td($line_item->quantity(), '', 'item_l jst-rght');
169
+		$tax_rate = $line_item->is_taxable()
170
+					&& EE_Registry::instance()->CFG->tax_settings->prices_displayed_including_taxes
171
+			? 1 + ( $this->_tax_rate / 100 )
172
+			: 1;
173
+		// price td
174
+		$unit_price = apply_filters(
175
+			'FHEE__EE_Default_Line_Item_Display_Strategy___item_row__unit_price',
176
+			EEH_Template::format_currency($line_item->unit_price() * $tax_rate, false, false),
177
+			$line_item,
178
+			$tax_rate
179
+		);
180
+		$html .= EEH_HTML::td($unit_price, '', 'item_c jst-rght');
181
+		// total td
182
+		$total = apply_filters(
183
+			'FHEE__EE_Default_Line_Item_Display_Strategy___item_row__total',
184
+			EEH_Template::format_currency($line_item->unit_price() * $line_item->quantity() * $tax_rate, false, false),
185
+			$line_item,
186
+			$tax_rate
187
+		);
188
+		$html .= EEH_HTML::td($total, '', 'item_r jst-rght');
189
+		// end of row
190
+		$html .= EEH_HTML::trx();
191
+
192
+		return $html;
193
+	}
194
+
195
+
196
+
197
+	/**
198
+	 *  _sub_item_row
199
+	 *
200
+	 * @param EE_Line_Item $line_item
201
+	 * @param array        $options
202
+	 * @return mixed
203
+	 */
204
+	private function _sub_item_row(EE_Line_Item $line_item, $options = array())
205
+	{
206
+		// start of row
207
+		$html = EEH_HTML::tr('', 'item sub-item-row');
208
+		// name && desc
209
+		$name_and_desc = $line_item->name();
210
+		$name_and_desc .= $options['show_desc'] ? '<span class="line-sub-item-desc-spn smaller-text">: ' . $line_item->desc() . '</span>' : '';
211
+		// name td
212
+		$html .= EEH_HTML::td(/*__FUNCTION__ .*/ $name_and_desc, '', 'item_l sub-item');
213
+		// discount/surcharge td
214
+		if ($line_item->is_percent()) {
215
+			$html .= EEH_HTML::td($line_item->percent() . '%', '', 'item_c');
216
+		} else {
217
+			$html .= EEH_HTML::td($line_item->unit_price_no_code(), '', 'item_c jst-rght');
218
+		}
219
+		// total td
220
+		$html .= EEH_HTML::td(EEH_Template::format_currency($line_item->total(), false, false), '', 'item_r jst-rght');
221
+		// end of row
222
+		$html .= EEH_HTML::trx();
223
+		return $html;
224
+	}
225 225
 }
Please login to merge, or discard this patch.
Spacing   +5 added lines, -5 removed lines patch added patch discarded remove patch
@@ -66,7 +66,7 @@  discard block
 block discarded – undo
66 66
         $html = '';
67 67
         // set some default options and merge with incoming
68 68
         $default_options = array(
69
-            'show_desc' => true,  //    TRUE        FALSE
69
+            'show_desc' => true, //    TRUE        FALSE
70 70
             'odd' => false
71 71
         );
72 72
         $options = array_merge($default_options, (array) $options);
@@ -149,7 +149,7 @@  discard block
 block discarded – undo
149 149
         );
150 150
         $name_and_desc .= apply_filters(
151 151
             'FHEE__EE_Default_Line_Item_Display_Strategy__item_row__desc',
152
-            ( $options['show_desc'] ? '<span class="line-item-desc-spn smaller-text">: ' . $line_item->desc() . '</span>' : '' ),
152
+            ($options['show_desc'] ? '<span class="line-item-desc-spn smaller-text">: '.$line_item->desc().'</span>' : ''),
153 153
             $line_item,
154 154
             $options
155 155
         );
@@ -168,7 +168,7 @@  discard block
 block discarded – undo
168 168
         $html .= EEH_HTML::td($line_item->quantity(), '', 'item_l jst-rght');
169 169
         $tax_rate = $line_item->is_taxable()
170 170
                     && EE_Registry::instance()->CFG->tax_settings->prices_displayed_including_taxes
171
-            ? 1 + ( $this->_tax_rate / 100 )
171
+            ? 1 + ($this->_tax_rate / 100)
172 172
             : 1;
173 173
         // price td
174 174
         $unit_price = apply_filters(
@@ -207,12 +207,12 @@  discard block
 block discarded – undo
207 207
         $html = EEH_HTML::tr('', 'item sub-item-row');
208 208
         // name && desc
209 209
         $name_and_desc = $line_item->name();
210
-        $name_and_desc .= $options['show_desc'] ? '<span class="line-sub-item-desc-spn smaller-text">: ' . $line_item->desc() . '</span>' : '';
210
+        $name_and_desc .= $options['show_desc'] ? '<span class="line-sub-item-desc-spn smaller-text">: '.$line_item->desc().'</span>' : '';
211 211
         // name td
212 212
         $html .= EEH_HTML::td(/*__FUNCTION__ .*/ $name_and_desc, '', 'item_l sub-item');
213 213
         // discount/surcharge td
214 214
         if ($line_item->is_percent()) {
215
-            $html .= EEH_HTML::td($line_item->percent() . '%', '', 'item_c');
215
+            $html .= EEH_HTML::td($line_item->percent().'%', '', 'item_c');
216 216
         } else {
217 217
             $html .= EEH_HTML::td($line_item->unit_price_no_code(), '', 'item_c jst-rght');
218 218
         }
Please login to merge, or discard this patch.
core/domain/services/pue/StatsGatherer.php 2 patches
Indentation   +288 added lines, -288 removed lines patch added patch discarded remove patch
@@ -16,314 +16,314 @@
 block discarded – undo
16 16
 class StatsGatherer
17 17
 {
18 18
 
19
-    const COUNT_ALL_EVENTS = 'event';
20
-    const COUNT_ACTIVE_EVENTS = 'active_event';
21
-    const COUNT_DATETIMES = 'datetime';
22
-    const COUNT_TICKETS = 'ticket';
23
-    const COUNT_DATETIMES_SOLD = 'datetime_sold';
24
-    const COUNT_TICKETS_FREE = 'free_ticket';
25
-    const COUNT_TICKETS_PAID = 'paid_ticket';
26
-    const COUNT_TICKETS_SOLD = 'ticket_sold';
27
-    const COUNT_REGISTRATIONS_APPROVED = 'registrations_approved';
28
-    const COUNT_REGISTRATIONS_NOT_APPROVED = 'registrations_not_approved';
29
-    const COUNT_REGISTRATIONS_PENDING = 'registrations_pending';
30
-    const COUNT_REGISTRATIONS_INCOMPLETE = 'registrations_incomplete';
31
-    const COUNT_REGISTRATIONS_ALL = 'registrations_all';
32
-    const COUNT_REGISTRATIONS_CANCELLED = 'registrations_cancelled';
33
-    const COUNT_REGISTRATIONS_DECLINED = 'registrations_declined';
34
-    const SUM_TRANSACTIONS_COMPLETE_TOTAL = 'transactions_complete_total_sum';
35
-    const SUM_TRANSACTIONS_ALL_PAID = 'transactions_all_paid';
36
-    const INFO_SITE_CURRENCY = 'site_currency';
19
+	const COUNT_ALL_EVENTS = 'event';
20
+	const COUNT_ACTIVE_EVENTS = 'active_event';
21
+	const COUNT_DATETIMES = 'datetime';
22
+	const COUNT_TICKETS = 'ticket';
23
+	const COUNT_DATETIMES_SOLD = 'datetime_sold';
24
+	const COUNT_TICKETS_FREE = 'free_ticket';
25
+	const COUNT_TICKETS_PAID = 'paid_ticket';
26
+	const COUNT_TICKETS_SOLD = 'ticket_sold';
27
+	const COUNT_REGISTRATIONS_APPROVED = 'registrations_approved';
28
+	const COUNT_REGISTRATIONS_NOT_APPROVED = 'registrations_not_approved';
29
+	const COUNT_REGISTRATIONS_PENDING = 'registrations_pending';
30
+	const COUNT_REGISTRATIONS_INCOMPLETE = 'registrations_incomplete';
31
+	const COUNT_REGISTRATIONS_ALL = 'registrations_all';
32
+	const COUNT_REGISTRATIONS_CANCELLED = 'registrations_cancelled';
33
+	const COUNT_REGISTRATIONS_DECLINED = 'registrations_declined';
34
+	const SUM_TRANSACTIONS_COMPLETE_TOTAL = 'transactions_complete_total_sum';
35
+	const SUM_TRANSACTIONS_ALL_PAID = 'transactions_all_paid';
36
+	const INFO_SITE_CURRENCY = 'site_currency';
37 37
 
38 38
 
39
-    /**
40
-     * @var EEM_Payment_Method
41
-     */
42
-    private $payment_method_model;
39
+	/**
40
+	 * @var EEM_Payment_Method
41
+	 */
42
+	private $payment_method_model;
43 43
 
44 44
 
45
-    /**
46
-     * @var EEM_Event
47
-     */
48
-    private $event_model;
45
+	/**
46
+	 * @var EEM_Event
47
+	 */
48
+	private $event_model;
49 49
 
50
-    /**
51
-     * @var EEM_Datetime
52
-     */
53
-    private $datetime_model;
50
+	/**
51
+	 * @var EEM_Datetime
52
+	 */
53
+	private $datetime_model;
54 54
 
55 55
 
56
-    /**
57
-     * @var EEM_Ticket
58
-     */
59
-    private $ticket_model;
56
+	/**
57
+	 * @var EEM_Ticket
58
+	 */
59
+	private $ticket_model;
60 60
 
61 61
 
62
-    /**
63
-     * @var EEM_Registration
64
-     */
65
-    private $registration_model;
62
+	/**
63
+	 * @var EEM_Registration
64
+	 */
65
+	private $registration_model;
66 66
 
67 67
 
68
-    /**
69
-     * @var EEM_Transaction
70
-     */
71
-    private $transaction_model;
68
+	/**
69
+	 * @var EEM_Transaction
70
+	 */
71
+	private $transaction_model;
72 72
 
73 73
 
74
-    /**
75
-     * @var EE_Config
76
-     */
77
-    private $config;
74
+	/**
75
+	 * @var EE_Config
76
+	 */
77
+	private $config;
78 78
 
79 79
 
80
-    /**
81
-     * StatsGatherer constructor.
82
-     *
83
-     * @param EEM_Payment_Method $payment_method_model
84
-     * @param EEM_Event          $event_model
85
-     * @param EEM_Datetime       $datetime_model
86
-     * @param EEM_Ticket         $ticket_model
87
-     * @param EEM_Registration   $registration_model
88
-     * @param EEM_Transaction    $transaction_model
89
-     * @param EE_Config          $config
90
-     */
91
-    public function __construct(
92
-        EEM_Payment_Method $payment_method_model,
93
-        EEM_Event $event_model,
94
-        EEM_Datetime $datetime_model,
95
-        EEM_Ticket $ticket_model,
96
-        EEM_Registration $registration_model,
97
-        EEM_Transaction $transaction_model,
98
-        EE_Config $config
99
-    ) {
100
-        $this->payment_method_model = $payment_method_model;
101
-        $this->event_model = $event_model;
102
-        $this->datetime_model = $datetime_model;
103
-        $this->ticket_model = $ticket_model;
104
-        $this->registration_model = $registration_model;
105
-        $this->transaction_model = $transaction_model;
106
-        $this->config = $config;
107
-    }
80
+	/**
81
+	 * StatsGatherer constructor.
82
+	 *
83
+	 * @param EEM_Payment_Method $payment_method_model
84
+	 * @param EEM_Event          $event_model
85
+	 * @param EEM_Datetime       $datetime_model
86
+	 * @param EEM_Ticket         $ticket_model
87
+	 * @param EEM_Registration   $registration_model
88
+	 * @param EEM_Transaction    $transaction_model
89
+	 * @param EE_Config          $config
90
+	 */
91
+	public function __construct(
92
+		EEM_Payment_Method $payment_method_model,
93
+		EEM_Event $event_model,
94
+		EEM_Datetime $datetime_model,
95
+		EEM_Ticket $ticket_model,
96
+		EEM_Registration $registration_model,
97
+		EEM_Transaction $transaction_model,
98
+		EE_Config $config
99
+	) {
100
+		$this->payment_method_model = $payment_method_model;
101
+		$this->event_model = $event_model;
102
+		$this->datetime_model = $datetime_model;
103
+		$this->ticket_model = $ticket_model;
104
+		$this->registration_model = $registration_model;
105
+		$this->transaction_model = $transaction_model;
106
+		$this->config = $config;
107
+	}
108 108
 
109 109
 
110
-    /**
111
-     * Return the stats array for PUE UXIP stats.
112
-     *
113
-     * @return array
114
-     */
115
-    public function stats()
116
-    {
117
-        global $wp_version;
118
-        $stats = $this->paymentMethodStats();
119
-        // a-ok so let's setup our stats.
120
-        $stats = array_merge($stats, array(
121
-            'is_multisite'                    => is_multisite() && is_main_site(),
122
-            'active_theme'                    => $this->getActiveThemeStat(),
123
-            'ee4_all_events_count'            => $this->getCountFor(self::COUNT_ALL_EVENTS),
124
-            'ee4_active_events_count'         => $this->getCountFor(self::COUNT_ACTIVE_EVENTS),
125
-            'all_dtts_count'                  => $this->getCountFor(self::COUNT_DATETIMES),
126
-            'dtt_sold'                        => $this->getCountFor(self::COUNT_DATETIMES_SOLD),
127
-            'all_tkt_count'                   => $this->getCountFor(self::COUNT_TICKETS),
128
-            'free_tkt_count'                  => $this->getCountFor(self::COUNT_TICKETS_FREE),
129
-            'paid_tkt_count'                  => $this->getCountFor(self::COUNT_TICKETS_PAID),
130
-            'tkt_sold'                        => $this->getCountFor(self::COUNT_TICKETS_SOLD),
131
-            'approve_registration_count'      => $this->getCountFor(self::COUNT_REGISTRATIONS_APPROVED),
132
-            'pending_registration_count'      => $this->getCountFor(self::COUNT_REGISTRATIONS_PENDING),
133
-            'not_approved_registration_count' => $this->getCountFor(self::COUNT_REGISTRATIONS_NOT_APPROVED),
134
-            'incomplete_registration_count'   => $this->getCountFor(self::COUNT_REGISTRATIONS_INCOMPLETE),
135
-            'cancelled_registration_count'    => $this->getCountFor(self::COUNT_REGISTRATIONS_CANCELLED),
136
-            'declined_registration_count'     => $this->getCountFor(self::COUNT_REGISTRATIONS_DECLINED),
137
-            'all_registration_count'          => $this->getCountFor(self::COUNT_REGISTRATIONS_ALL),
138
-            'completed_transaction_total_sum' => $this->getCountFor(self::SUM_TRANSACTIONS_COMPLETE_TOTAL),
139
-            'all_transaction_paid_sum'        => $this->getCountFor(self::SUM_TRANSACTIONS_ALL_PAID),
140
-            self::INFO_SITE_CURRENCY          => $this->config->currency instanceof EE_Currency_Config
141
-                ? $this->config->currency->code
142
-                : 'unknown',
143
-            'phpversion'                      => implode(
144
-                '.',
145
-                array(PHP_MAJOR_VERSION, PHP_MINOR_VERSION, PHP_RELEASE_VERSION)
146
-            ),
147
-            'wpversion'                       => $wp_version,
148
-            'active_addons'                   => $this->getActiveAddons(),
149
-        ));
150
-        // remove any values that equal null.  This ensures any stats that weren't retrieved successfully are excluded.
151
-        return array_filter($stats, function ($value) {
152
-            return $value !== null;
153
-        });
154
-    }
110
+	/**
111
+	 * Return the stats array for PUE UXIP stats.
112
+	 *
113
+	 * @return array
114
+	 */
115
+	public function stats()
116
+	{
117
+		global $wp_version;
118
+		$stats = $this->paymentMethodStats();
119
+		// a-ok so let's setup our stats.
120
+		$stats = array_merge($stats, array(
121
+			'is_multisite'                    => is_multisite() && is_main_site(),
122
+			'active_theme'                    => $this->getActiveThemeStat(),
123
+			'ee4_all_events_count'            => $this->getCountFor(self::COUNT_ALL_EVENTS),
124
+			'ee4_active_events_count'         => $this->getCountFor(self::COUNT_ACTIVE_EVENTS),
125
+			'all_dtts_count'                  => $this->getCountFor(self::COUNT_DATETIMES),
126
+			'dtt_sold'                        => $this->getCountFor(self::COUNT_DATETIMES_SOLD),
127
+			'all_tkt_count'                   => $this->getCountFor(self::COUNT_TICKETS),
128
+			'free_tkt_count'                  => $this->getCountFor(self::COUNT_TICKETS_FREE),
129
+			'paid_tkt_count'                  => $this->getCountFor(self::COUNT_TICKETS_PAID),
130
+			'tkt_sold'                        => $this->getCountFor(self::COUNT_TICKETS_SOLD),
131
+			'approve_registration_count'      => $this->getCountFor(self::COUNT_REGISTRATIONS_APPROVED),
132
+			'pending_registration_count'      => $this->getCountFor(self::COUNT_REGISTRATIONS_PENDING),
133
+			'not_approved_registration_count' => $this->getCountFor(self::COUNT_REGISTRATIONS_NOT_APPROVED),
134
+			'incomplete_registration_count'   => $this->getCountFor(self::COUNT_REGISTRATIONS_INCOMPLETE),
135
+			'cancelled_registration_count'    => $this->getCountFor(self::COUNT_REGISTRATIONS_CANCELLED),
136
+			'declined_registration_count'     => $this->getCountFor(self::COUNT_REGISTRATIONS_DECLINED),
137
+			'all_registration_count'          => $this->getCountFor(self::COUNT_REGISTRATIONS_ALL),
138
+			'completed_transaction_total_sum' => $this->getCountFor(self::SUM_TRANSACTIONS_COMPLETE_TOTAL),
139
+			'all_transaction_paid_sum'        => $this->getCountFor(self::SUM_TRANSACTIONS_ALL_PAID),
140
+			self::INFO_SITE_CURRENCY          => $this->config->currency instanceof EE_Currency_Config
141
+				? $this->config->currency->code
142
+				: 'unknown',
143
+			'phpversion'                      => implode(
144
+				'.',
145
+				array(PHP_MAJOR_VERSION, PHP_MINOR_VERSION, PHP_RELEASE_VERSION)
146
+			),
147
+			'wpversion'                       => $wp_version,
148
+			'active_addons'                   => $this->getActiveAddons(),
149
+		));
150
+		// remove any values that equal null.  This ensures any stats that weren't retrieved successfully are excluded.
151
+		return array_filter($stats, function ($value) {
152
+			return $value !== null;
153
+		});
154
+	}
155 155
 
156
-    /**
157
-     * @param string $which enum (@see constants prefixed with COUNT)
158
-     * @return int|null
159
-     */
160
-    private function getCountFor($which)
161
-    {
162
-        try {
163
-            switch ($which) {
164
-                case self::COUNT_ALL_EVENTS:
165
-                    $count = $this->event_model->count();
166
-                    break;
167
-                case self::COUNT_TICKETS:
168
-                    $count = $this->ticket_model->count();
169
-                    break;
170
-                case self::COUNT_DATETIMES:
171
-                    $count = $this->datetime_model->count();
172
-                    break;
173
-                case self::COUNT_ACTIVE_EVENTS:
174
-                    $count = $this->event_model->get_active_events(array(), true);
175
-                    break;
176
-                case self::COUNT_DATETIMES_SOLD:
177
-                    $count = $this->datetime_model->sum(array(), 'DTT_sold');
178
-                    break;
179
-                case self::COUNT_TICKETS_FREE:
180
-                    $count = $this->ticket_model->count(array(
181
-                        array(
182
-                            'TKT_price' => 0,
183
-                        ),
184
-                    ));
185
-                    break;
186
-                case self::COUNT_TICKETS_PAID:
187
-                    $count = $this->ticket_model->count(array(
188
-                        array(
189
-                            'TKT_price' => array('>', 0),
190
-                        ),
191
-                    ));
192
-                    break;
193
-                case self::COUNT_TICKETS_SOLD:
194
-                    $count = $this->ticket_model->sum(array(), 'TKT_sold');
195
-                    break;
196
-                case self::COUNT_REGISTRATIONS_ALL:
197
-                    $count = $this->registration_model->count();
198
-                    break;
199
-                case self::COUNT_REGISTRATIONS_CANCELLED:
200
-                    $count = $this->registration_model->count(
201
-                        array(
202
-                            array(
203
-                                'STS_ID' => EEM_Registration::status_id_cancelled,
204
-                            ),
205
-                        )
206
-                    );
207
-                    break;
208
-                case self::COUNT_REGISTRATIONS_INCOMPLETE:
209
-                    $count = $this->registration_model->count(
210
-                        array(
211
-                            array(
212
-                                'STS_ID' => EEM_Registration::status_id_incomplete,
213
-                            ),
214
-                        )
215
-                    );
216
-                    break;
217
-                case self::COUNT_REGISTRATIONS_NOT_APPROVED:
218
-                    $count = $this->registration_model->count(
219
-                        array(
220
-                            array(
221
-                                'STS_ID' => EEM_Registration::status_id_not_approved,
222
-                            ),
223
-                        )
224
-                    );
225
-                    break;
226
-                case self::COUNT_REGISTRATIONS_DECLINED:
227
-                    $count = $this->registration_model->count(
228
-                        array(
229
-                            array(
230
-                                'STS_ID' => EEM_Registration::status_id_declined,
231
-                            ),
232
-                        )
233
-                    );
234
-                    break;
235
-                case self::COUNT_REGISTRATIONS_PENDING:
236
-                    $count = $this->registration_model->count(
237
-                        array(
238
-                            array(
239
-                                'STS_ID' => EEM_Registration::status_id_pending_payment,
240
-                            ),
241
-                        )
242
-                    );
243
-                    break;
244
-                case self::COUNT_REGISTRATIONS_APPROVED:
245
-                    $count = $this->registration_model->count(
246
-                        array(
247
-                            array(
248
-                                'STS_ID' => EEM_Registration::status_id_approved,
249
-                            ),
250
-                        )
251
-                    );
252
-                    break;
253
-                case self::SUM_TRANSACTIONS_COMPLETE_TOTAL:
254
-                    $count = $this->transaction_model->sum(
255
-                        array(
256
-                            array(
257
-                                'STS_ID' => EEM_Transaction::complete_status_code,
258
-                            ),
259
-                        ),
260
-                        'TXN_total'
261
-                    );
262
-                    break;
263
-                case self::SUM_TRANSACTIONS_ALL_PAID:
264
-                    $count = $this->transaction_model->sum(
265
-                        array(),
266
-                        'TXN_paid'
267
-                    );
268
-                    break;
269
-                default:
270
-                    $count = null;
271
-                    break;
272
-            }
273
-        } catch (Exception $e) {
274
-            $count = null;
275
-        }
276
-        return $count;
277
-    }
156
+	/**
157
+	 * @param string $which enum (@see constants prefixed with COUNT)
158
+	 * @return int|null
159
+	 */
160
+	private function getCountFor($which)
161
+	{
162
+		try {
163
+			switch ($which) {
164
+				case self::COUNT_ALL_EVENTS:
165
+					$count = $this->event_model->count();
166
+					break;
167
+				case self::COUNT_TICKETS:
168
+					$count = $this->ticket_model->count();
169
+					break;
170
+				case self::COUNT_DATETIMES:
171
+					$count = $this->datetime_model->count();
172
+					break;
173
+				case self::COUNT_ACTIVE_EVENTS:
174
+					$count = $this->event_model->get_active_events(array(), true);
175
+					break;
176
+				case self::COUNT_DATETIMES_SOLD:
177
+					$count = $this->datetime_model->sum(array(), 'DTT_sold');
178
+					break;
179
+				case self::COUNT_TICKETS_FREE:
180
+					$count = $this->ticket_model->count(array(
181
+						array(
182
+							'TKT_price' => 0,
183
+						),
184
+					));
185
+					break;
186
+				case self::COUNT_TICKETS_PAID:
187
+					$count = $this->ticket_model->count(array(
188
+						array(
189
+							'TKT_price' => array('>', 0),
190
+						),
191
+					));
192
+					break;
193
+				case self::COUNT_TICKETS_SOLD:
194
+					$count = $this->ticket_model->sum(array(), 'TKT_sold');
195
+					break;
196
+				case self::COUNT_REGISTRATIONS_ALL:
197
+					$count = $this->registration_model->count();
198
+					break;
199
+				case self::COUNT_REGISTRATIONS_CANCELLED:
200
+					$count = $this->registration_model->count(
201
+						array(
202
+							array(
203
+								'STS_ID' => EEM_Registration::status_id_cancelled,
204
+							),
205
+						)
206
+					);
207
+					break;
208
+				case self::COUNT_REGISTRATIONS_INCOMPLETE:
209
+					$count = $this->registration_model->count(
210
+						array(
211
+							array(
212
+								'STS_ID' => EEM_Registration::status_id_incomplete,
213
+							),
214
+						)
215
+					);
216
+					break;
217
+				case self::COUNT_REGISTRATIONS_NOT_APPROVED:
218
+					$count = $this->registration_model->count(
219
+						array(
220
+							array(
221
+								'STS_ID' => EEM_Registration::status_id_not_approved,
222
+							),
223
+						)
224
+					);
225
+					break;
226
+				case self::COUNT_REGISTRATIONS_DECLINED:
227
+					$count = $this->registration_model->count(
228
+						array(
229
+							array(
230
+								'STS_ID' => EEM_Registration::status_id_declined,
231
+							),
232
+						)
233
+					);
234
+					break;
235
+				case self::COUNT_REGISTRATIONS_PENDING:
236
+					$count = $this->registration_model->count(
237
+						array(
238
+							array(
239
+								'STS_ID' => EEM_Registration::status_id_pending_payment,
240
+							),
241
+						)
242
+					);
243
+					break;
244
+				case self::COUNT_REGISTRATIONS_APPROVED:
245
+					$count = $this->registration_model->count(
246
+						array(
247
+							array(
248
+								'STS_ID' => EEM_Registration::status_id_approved,
249
+							),
250
+						)
251
+					);
252
+					break;
253
+				case self::SUM_TRANSACTIONS_COMPLETE_TOTAL:
254
+					$count = $this->transaction_model->sum(
255
+						array(
256
+							array(
257
+								'STS_ID' => EEM_Transaction::complete_status_code,
258
+							),
259
+						),
260
+						'TXN_total'
261
+					);
262
+					break;
263
+				case self::SUM_TRANSACTIONS_ALL_PAID:
264
+					$count = $this->transaction_model->sum(
265
+						array(),
266
+						'TXN_paid'
267
+					);
268
+					break;
269
+				default:
270
+					$count = null;
271
+					break;
272
+			}
273
+		} catch (Exception $e) {
274
+			$count = null;
275
+		}
276
+		return $count;
277
+	}
278 278
 
279
-    /**
280
-     * Return the active theme.
281
-     *
282
-     * @return false|string
283
-     */
284
-    private function getActiveThemeStat()
285
-    {
286
-        $theme = wp_get_theme();
287
-        return $theme->get('Name');
288
-    }
279
+	/**
280
+	 * Return the active theme.
281
+	 *
282
+	 * @return false|string
283
+	 */
284
+	private function getActiveThemeStat()
285
+	{
286
+		$theme = wp_get_theme();
287
+		return $theme->get('Name');
288
+	}
289 289
 
290
-    /**
291
-     * @return array
292
-     */
293
-    private function paymentMethodStats()
294
-    {
295
-        $payment_method_stats = array();
296
-        try {
297
-            $active_payment_methods = $this->payment_method_model->get_all_active(
298
-                null,
299
-                array('group_by' => 'PMD_type')
300
-            );
301
-            if ($active_payment_methods) {
302
-                foreach ($active_payment_methods as $payment_method) {
303
-                    $payment_method_stats[ $payment_method->name() . '_active_payment_method' ] = 1;
304
-                }
305
-            }
306
-        } catch (Exception $e) {
307
-            // do nothing just prevents fatals.
308
-        }
309
-        return $payment_method_stats;
310
-    }
290
+	/**
291
+	 * @return array
292
+	 */
293
+	private function paymentMethodStats()
294
+	{
295
+		$payment_method_stats = array();
296
+		try {
297
+			$active_payment_methods = $this->payment_method_model->get_all_active(
298
+				null,
299
+				array('group_by' => 'PMD_type')
300
+			);
301
+			if ($active_payment_methods) {
302
+				foreach ($active_payment_methods as $payment_method) {
303
+					$payment_method_stats[ $payment_method->name() . '_active_payment_method' ] = 1;
304
+				}
305
+			}
306
+		} catch (Exception $e) {
307
+			// do nothing just prevents fatals.
308
+		}
309
+		return $payment_method_stats;
310
+	}
311 311
 
312 312
 
313
-    /**
314
-     * Return a list of active EE add-ons and their versions.
315
-     *
316
-     * @return string
317
-     */
318
-    private function getActiveAddons()
319
-    {
320
-        $activeAddons = [];
321
-        $addOns = EE_Registry::instance()->addons;
322
-        if (! empty($addOns)) {
323
-            foreach ($addOns as $addon) {
324
-                $activeAddons[] = $addon->name() . '@' . $addon->version();
325
-            }
326
-        }
327
-        return implode(',', $activeAddons);
328
-    }
313
+	/**
314
+	 * Return a list of active EE add-ons and their versions.
315
+	 *
316
+	 * @return string
317
+	 */
318
+	private function getActiveAddons()
319
+	{
320
+		$activeAddons = [];
321
+		$addOns = EE_Registry::instance()->addons;
322
+		if (! empty($addOns)) {
323
+			foreach ($addOns as $addon) {
324
+				$activeAddons[] = $addon->name() . '@' . $addon->version();
325
+			}
326
+		}
327
+		return implode(',', $activeAddons);
328
+	}
329 329
 }
Please login to merge, or discard this patch.
Spacing   +4 added lines, -4 removed lines patch added patch discarded remove patch
@@ -148,7 +148,7 @@  discard block
 block discarded – undo
148 148
             'active_addons'                   => $this->getActiveAddons(),
149 149
         ));
150 150
         // remove any values that equal null.  This ensures any stats that weren't retrieved successfully are excluded.
151
-        return array_filter($stats, function ($value) {
151
+        return array_filter($stats, function($value) {
152 152
             return $value !== null;
153 153
         });
154 154
     }
@@ -300,7 +300,7 @@  discard block
 block discarded – undo
300 300
             );
301 301
             if ($active_payment_methods) {
302 302
                 foreach ($active_payment_methods as $payment_method) {
303
-                    $payment_method_stats[ $payment_method->name() . '_active_payment_method' ] = 1;
303
+                    $payment_method_stats[$payment_method->name().'_active_payment_method'] = 1;
304 304
                 }
305 305
             }
306 306
         } catch (Exception $e) {
@@ -319,9 +319,9 @@  discard block
 block discarded – undo
319 319
     {
320 320
         $activeAddons = [];
321 321
         $addOns = EE_Registry::instance()->addons;
322
-        if (! empty($addOns)) {
322
+        if ( ! empty($addOns)) {
323 323
             foreach ($addOns as $addon) {
324
-                $activeAddons[] = $addon->name() . '@' . $addon->version();
324
+                $activeAddons[] = $addon->name().'@'.$addon->version();
325 325
             }
326 326
         }
327 327
         return implode(',', $activeAddons);
Please login to merge, or discard this patch.
core/data_migration_scripts/EE_DMS_Core_4_8_0.dms.php 2 patches
Spacing   +10 added lines, -10 removed lines patch added patch discarded remove patch
@@ -14,12 +14,12 @@  discard block
 block discarded – undo
14 14
 // unfortunately, this needs to be done upon INCLUSION of this file,
15 15
 // instead of construction, because it only gets constructed on first page load
16 16
 // (all other times it gets resurrected from a wordpress option)
17
-$stages = glob(EE_CORE . 'data_migration_scripts/4_8_0_stages/*');
17
+$stages = glob(EE_CORE.'data_migration_scripts/4_8_0_stages/*');
18 18
 $class_to_filepath = array();
19 19
 foreach ($stages as $filepath) {
20 20
     $matches = array();
21 21
     preg_match('~4_8_0_stages/(.*).dmsstage.php~', $filepath, $matches);
22
-    $class_to_filepath[ $matches[1] ] = $filepath;
22
+    $class_to_filepath[$matches[1]] = $filepath;
23 23
 }
24 24
 // give addons a chance to autoload their stages too
25 25
 $class_to_filepath = apply_filters('FHEE__EE_DMS_4_8_0__autoloaded_stages', $class_to_filepath);
@@ -72,10 +72,10 @@  discard block
 block discarded – undo
72 72
         if (version_compare($version_string, '4.8.0.decaf', '<') && version_compare($version_string, '4.7.0.decaf', '>=')) {
73 73
 //          echo "$version_string can be migrated from";
74 74
             return true;
75
-        } elseif (! $version_string) {
75
+        } elseif ( ! $version_string) {
76 76
 //          echo "no version string provided: $version_string";
77 77
             // no version string provided... this must be pre 4.3
78
-            return false;// changed mind. dont want people thinking they should migrate yet because they cant
78
+            return false; // changed mind. dont want people thinking they should migrate yet because they cant
79 79
         } else {
80 80
 //          echo "$version_string doesnt apply";
81 81
             return false;
@@ -89,9 +89,9 @@  discard block
 block discarded – undo
89 89
      */
90 90
     public function schema_changes_before_migration()
91 91
     {
92
-        require_once(EE_HELPERS . 'EEH_Activation.helper.php');
92
+        require_once(EE_HELPERS.'EEH_Activation.helper.php');
93 93
         $now_in_mysql = current_time('mysql', true);
94
-        require_once(EE_HELPERS . 'EEH_Activation.helper.php');
94
+        require_once(EE_HELPERS.'EEH_Activation.helper.php');
95 95
         $table_name = 'esp_answer';
96 96
         $sql = " ANS_ID int(10) unsigned NOT NULL AUTO_INCREMENT,
97 97
 					REG_ID int(10) unsigned NOT NULL,
@@ -685,7 +685,7 @@  discard block
 block discarded – undo
685 685
             ),
686 686
         );
687 687
         global $wpdb;
688
-        $country_table = $wpdb->prefix . "esp_country";
688
+        $country_table = $wpdb->prefix."esp_country";
689 689
         $country_format = array(
690 690
             "CNT_ISO"         => '%s',
691 691
             "CNT_ISO3"        => '%s',
@@ -705,7 +705,7 @@  discard block
 block discarded – undo
705 705
             foreach ($newer_countries as $country) {
706 706
                 $SQL = "SELECT COUNT('CNT_ISO') FROM {$country_table} WHERE CNT_ISO='{$country[0]}' LIMIT 1";
707 707
                 $countries = $wpdb->get_var($SQL);
708
-                if (! $countries) {
708
+                if ( ! $countries) {
709 709
                     $wpdb->insert(
710 710
                         $country_table,
711 711
                         array_combine(array_keys($country_format), $country),
@@ -732,7 +732,7 @@  discard block
 block discarded – undo
732 732
             array('RSD', 'Dinar', 'Dinars', '', 3, 1),
733 733
         );
734 734
         global $wpdb;
735
-        $currency_table = $wpdb->prefix . "esp_currency";
735
+        $currency_table = $wpdb->prefix."esp_currency";
736 736
         $currency_format = array(
737 737
             "CUR_code"    => '%s',
738 738
             "CUR_single"  => '%s',
@@ -745,7 +745,7 @@  discard block
 block discarded – undo
745 745
             foreach ($newer_currencies as $currency) {
746 746
                 $SQL = "SELECT COUNT('CUR_code') FROM {$currency_table} WHERE CUR_code='{$currency[0]}' LIMIT 1";
747 747
                 $countries = $wpdb->get_var($SQL);
748
-                if (! $countries) {
748
+                if ( ! $countries) {
749 749
                     $wpdb->insert(
750 750
                         $currency_table,
751 751
                         array_combine(array_keys($currency_format), $currency),
Please login to merge, or discard this patch.
Indentation   +357 added lines, -357 removed lines patch added patch discarded remove patch
@@ -10,9 +10,9 @@  discard block
 block discarded – undo
10 10
 $stages = glob(EE_CORE . 'data_migration_scripts/4_8_0_stages/*');
11 11
 $class_to_filepath = array();
12 12
 foreach ($stages as $filepath) {
13
-    $matches = array();
14
-    preg_match('~4_8_0_stages/(.*).dmsstage.php~', $filepath, $matches);
15
-    $class_to_filepath[ $matches[1] ] = $filepath;
13
+	$matches = array();
14
+	preg_match('~4_8_0_stages/(.*).dmsstage.php~', $filepath, $matches);
15
+	$class_to_filepath[ $matches[1] ] = $filepath;
16 16
 }
17 17
 // give addons a chance to autoload their stages too
18 18
 $class_to_filepath = apply_filters('FHEE__EE_DMS_4_8_0__autoloaded_stages', $class_to_filepath);
@@ -34,71 +34,71 @@  discard block
 block discarded – undo
34 34
  */
35 35
 class EE_DMS_Core_4_8_0 extends EE_Data_Migration_Script_Base
36 36
 {
37
-    /**
38
-     * return EE_DMS_Core_4_8_0
39
-     *
40
-     * @param TableManager  $table_manager
41
-     * @param TableAnalysis $table_analysis
42
-     */
43
-    public function __construct(TableManager $table_manager = null, TableAnalysis $table_analysis = null)
44
-    {
45
-        $this->_pretty_name = esc_html__("Data Update to Event Espresso 4.8.0", "event_espresso");
46
-        $this->_priority = 10;
47
-        $this->_migration_stages = array(
48
-            new EE_DMS_4_8_0_pretax_totals(),
49
-            new EE_DMS_4_8_0_event_subtotals(),
50
-        );
51
-        parent::__construct($table_manager, $table_analysis);
52
-    }
37
+	/**
38
+	 * return EE_DMS_Core_4_8_0
39
+	 *
40
+	 * @param TableManager  $table_manager
41
+	 * @param TableAnalysis $table_analysis
42
+	 */
43
+	public function __construct(TableManager $table_manager = null, TableAnalysis $table_analysis = null)
44
+	{
45
+		$this->_pretty_name = esc_html__("Data Update to Event Espresso 4.8.0", "event_espresso");
46
+		$this->_priority = 10;
47
+		$this->_migration_stages = array(
48
+			new EE_DMS_4_8_0_pretax_totals(),
49
+			new EE_DMS_4_8_0_event_subtotals(),
50
+		);
51
+		parent::__construct($table_manager, $table_analysis);
52
+	}
53 53
 
54 54
 
55 55
 
56
-    /**
57
-     * Because this is being done at basically the same time as the MER-ready branch
58
-     * of core, it's possible people might have installed MEr-ready branch first,
59
-     * and then this one, in which case we still want to perform this migration,
60
-     * even though the version might not have increased
61
-     *
62
-     * @param array $version_array
63
-     * @return bool
64
-     */
65
-    public function can_migrate_from_version($version_array)
66
-    {
67
-        $version_string = $version_array['Core'];
68
-        if (version_compare($version_string, '4.8.0.decaf', '<') && version_compare($version_string, '4.7.0.decaf', '>=')) {
56
+	/**
57
+	 * Because this is being done at basically the same time as the MER-ready branch
58
+	 * of core, it's possible people might have installed MEr-ready branch first,
59
+	 * and then this one, in which case we still want to perform this migration,
60
+	 * even though the version might not have increased
61
+	 *
62
+	 * @param array $version_array
63
+	 * @return bool
64
+	 */
65
+	public function can_migrate_from_version($version_array)
66
+	{
67
+		$version_string = $version_array['Core'];
68
+		if (version_compare($version_string, '4.8.0.decaf', '<') && version_compare($version_string, '4.7.0.decaf', '>=')) {
69 69
 //          echo "$version_string can be migrated from";
70
-            return true;
71
-        } elseif (! $version_string) {
70
+			return true;
71
+		} elseif (! $version_string) {
72 72
 //          echo "no version string provided: $version_string";
73
-            // no version string provided... this must be pre 4.3
74
-            return false;// changed mind. dont want people thinking they should migrate yet because they cant
75
-        } else {
73
+			// no version string provided... this must be pre 4.3
74
+			return false;// changed mind. dont want people thinking they should migrate yet because they cant
75
+		} else {
76 76
 //          echo "$version_string doesnt apply";
77
-            return false;
78
-        }
79
-    }
77
+			return false;
78
+		}
79
+	}
80 80
 
81 81
 
82 82
 
83
-    /**
84
-     * @return bool
85
-     */
86
-    public function schema_changes_before_migration()
87
-    {
88
-        require_once(EE_HELPERS . 'EEH_Activation.helper.php');
89
-        $now_in_mysql = current_time('mysql', true);
90
-        require_once(EE_HELPERS . 'EEH_Activation.helper.php');
91
-        $table_name = 'esp_answer';
92
-        $sql = " ANS_ID int(10) unsigned NOT NULL AUTO_INCREMENT,
83
+	/**
84
+	 * @return bool
85
+	 */
86
+	public function schema_changes_before_migration()
87
+	{
88
+		require_once(EE_HELPERS . 'EEH_Activation.helper.php');
89
+		$now_in_mysql = current_time('mysql', true);
90
+		require_once(EE_HELPERS . 'EEH_Activation.helper.php');
91
+		$table_name = 'esp_answer';
92
+		$sql = " ANS_ID int(10) unsigned NOT NULL AUTO_INCREMENT,
93 93
 					REG_ID int(10) unsigned NOT NULL,
94 94
 					QST_ID int(10) unsigned NOT NULL,
95 95
 					ANS_value text NOT NULL,
96 96
 					PRIMARY KEY  (ANS_ID),
97 97
 					KEY REG_ID (REG_ID),
98 98
 					KEY QST_ID (QST_ID)";
99
-        $this->_table_is_changed_in_this_version($table_name, $sql, 'ENGINE=InnoDB');
100
-        $table_name = 'esp_attendee_meta';
101
-        $sql = "ATTM_ID int(10) unsigned NOT	NULL AUTO_INCREMENT,
99
+		$this->_table_is_changed_in_this_version($table_name, $sql, 'ENGINE=InnoDB');
100
+		$table_name = 'esp_attendee_meta';
101
+		$sql = "ATTM_ID int(10) unsigned NOT	NULL AUTO_INCREMENT,
102 102
 						ATT_ID bigint(20) unsigned NOT NULL,
103 103
 						ATT_fname varchar(45) NOT NULL,
104 104
 						ATT_lname varchar(45) NOT	NULL,
@@ -113,9 +113,9 @@  discard block
 block discarded – undo
113 113
 							PRIMARY KEY  (ATTM_ID),
114 114
 								KEY ATT_ID (ATT_ID),
115 115
 								KEY ATT_email (ATT_email(191))";
116
-        $this->_table_is_changed_in_this_version($table_name, $sql, 'ENGINE=InnoDB ');
117
-        $table_name = 'esp_country';
118
-        $sql = "CNT_ISO varchar(2) collate utf8_bin NOT NULL,
116
+		$this->_table_is_changed_in_this_version($table_name, $sql, 'ENGINE=InnoDB ');
117
+		$table_name = 'esp_country';
118
+		$sql = "CNT_ISO varchar(2) collate utf8_bin NOT NULL,
119 119
 					  CNT_ISO3 varchar(3) collate utf8_bin NOT NULL,
120 120
 					  RGN_ID tinyint(3) unsigned DEFAULT NULL,
121 121
 					  CNT_name varchar(45) collate utf8_bin NOT NULL,
@@ -131,25 +131,25 @@  discard block
 block discarded – undo
131 131
 					  CNT_is_EU tinyint(1) DEFAULT '0',
132 132
 					  CNT_active tinyint(1) DEFAULT '0',
133 133
 					  PRIMARY KEY  (CNT_ISO)";
134
-        $this->_table_has_not_changed_since_previous($table_name, $sql, 'ENGINE=InnoDB');
135
-        $table_name = 'esp_currency';
136
-        $sql = "CUR_code varchar(6) collate utf8_bin NOT NULL,
134
+		$this->_table_has_not_changed_since_previous($table_name, $sql, 'ENGINE=InnoDB');
135
+		$table_name = 'esp_currency';
136
+		$sql = "CUR_code varchar(6) collate utf8_bin NOT NULL,
137 137
 				CUR_single varchar(45) collate utf8_bin DEFAULT 'dollar',
138 138
 				CUR_plural varchar(45) collate utf8_bin DEFAULT 'dollars',
139 139
 				CUR_sign varchar(45) collate utf8_bin DEFAULT '$',
140 140
 				CUR_dec_plc varchar(1) collate utf8_bin NOT NULL DEFAULT '2',
141 141
 				CUR_active tinyint(1) DEFAULT '0',
142 142
 				PRIMARY KEY  (CUR_code)";
143
-        $this->_table_has_not_changed_since_previous($table_name, $sql, 'ENGINE=InnoDB');
144
-        $table_name = 'esp_currency_payment_method';
145
-        $sql = "CPM_ID int(11) NOT NULL AUTO_INCREMENT,
143
+		$this->_table_has_not_changed_since_previous($table_name, $sql, 'ENGINE=InnoDB');
144
+		$table_name = 'esp_currency_payment_method';
145
+		$sql = "CPM_ID int(11) NOT NULL AUTO_INCREMENT,
146 146
 				CUR_code varchar(6) collate utf8_bin NOT NULL,
147 147
 				PMD_ID int(11) NOT NULL,
148 148
 				PRIMARY KEY  (CPM_ID),
149 149
 				KEY PMD_ID (PMD_ID)";
150
-        $this->_table_is_changed_in_this_version($table_name, $sql, 'ENGINE=InnoDB ');
151
-        $table_name = 'esp_datetime';
152
-        $sql = "DTT_ID int(10) unsigned NOT NULL AUTO_INCREMENT,
150
+		$this->_table_is_changed_in_this_version($table_name, $sql, 'ENGINE=InnoDB ');
151
+		$table_name = 'esp_datetime';
152
+		$sql = "DTT_ID int(10) unsigned NOT NULL AUTO_INCREMENT,
153 153
 				  EVT_ID bigint(20) unsigned NOT NULL,
154 154
 				  DTT_name varchar(255) NOT NULL DEFAULT '',
155 155
 				  DTT_description text NOT NULL,
@@ -165,9 +165,9 @@  discard block
 block discarded – undo
165 165
 						KEY DTT_EVT_start (DTT_EVT_start),
166 166
 						KEY EVT_ID (EVT_ID),
167 167
 						KEY DTT_is_primary (DTT_is_primary)";
168
-        $this->_table_is_changed_in_this_version($table_name, $sql, 'ENGINE=InnoDB');
169
-        $table_name = 'esp_event_meta';
170
-        $sql = "
168
+		$this->_table_is_changed_in_this_version($table_name, $sql, 'ENGINE=InnoDB');
169
+		$table_name = 'esp_event_meta';
170
+		$sql = "
171 171
 			EVTM_ID int(10) NOT NULL AUTO_INCREMENT,
172 172
 			EVT_ID bigint(20) unsigned NOT NULL,
173 173
 			EVT_display_desc tinyint(1) unsigned NOT NULL DEFAULT 1,
@@ -183,34 +183,34 @@  discard block
 block discarded – undo
183 183
 			EVT_donations tinyint(1) NULL,
184 184
 			PRIMARY KEY  (EVTM_ID),
185 185
 			KEY EVT_ID (EVT_ID)";
186
-        $this->_table_is_changed_in_this_version($table_name, $sql, 'ENGINE=InnoDB');
187
-        $table_name = 'esp_event_question_group';
188
-        $sql = "EQG_ID int(10) unsigned NOT NULL AUTO_INCREMENT,
186
+		$this->_table_is_changed_in_this_version($table_name, $sql, 'ENGINE=InnoDB');
187
+		$table_name = 'esp_event_question_group';
188
+		$sql = "EQG_ID int(10) unsigned NOT NULL AUTO_INCREMENT,
189 189
 					EVT_ID bigint(20) unsigned NOT NULL,
190 190
 					QSG_ID int(10) unsigned NOT NULL,
191 191
 					EQG_primary tinyint(1) unsigned NOT NULL DEFAULT 0,
192 192
 					PRIMARY KEY  (EQG_ID),
193 193
 					KEY EVT_ID (EVT_ID),
194 194
 					KEY QSG_ID (QSG_ID)";
195
-        $this->_table_is_changed_in_this_version($table_name, $sql, 'ENGINE=InnoDB');
196
-        $table_name = 'esp_event_venue';
197
-        $sql = "EVV_ID int(11) NOT NULL AUTO_INCREMENT,
195
+		$this->_table_is_changed_in_this_version($table_name, $sql, 'ENGINE=InnoDB');
196
+		$table_name = 'esp_event_venue';
197
+		$sql = "EVV_ID int(11) NOT NULL AUTO_INCREMENT,
198 198
 				EVT_ID bigint(20) unsigned NOT NULL,
199 199
 				VNU_ID bigint(20) unsigned NOT NULL,
200 200
 				EVV_primary tinyint(1) unsigned NOT NULL DEFAULT 0,
201 201
 				PRIMARY KEY  (EVV_ID)";
202
-        $this->_table_has_not_changed_since_previous($table_name, $sql, 'ENGINE=InnoDB');
203
-        $table_name = 'esp_extra_meta';
204
-        $sql = "EXM_ID int(11) NOT NULL AUTO_INCREMENT,
202
+		$this->_table_has_not_changed_since_previous($table_name, $sql, 'ENGINE=InnoDB');
203
+		$table_name = 'esp_extra_meta';
204
+		$sql = "EXM_ID int(11) NOT NULL AUTO_INCREMENT,
205 205
 				OBJ_ID int(11) DEFAULT NULL,
206 206
 				EXM_type varchar(45) DEFAULT NULL,
207 207
 				EXM_key varchar(45) DEFAULT NULL,
208 208
 				EXM_value text,
209 209
 				PRIMARY KEY  (EXM_ID),
210 210
 				KEY EXM_type (EXM_type,OBJ_ID,EXM_key)";
211
-        $this->_table_is_changed_in_this_version($table_name, $sql, 'ENGINE=InnoDB');
212
-        $table_name = 'esp_extra_join';
213
-        $sql = "EXJ_ID int(11) NOT NULL AUTO_INCREMENT,
211
+		$this->_table_is_changed_in_this_version($table_name, $sql, 'ENGINE=InnoDB');
212
+		$table_name = 'esp_extra_join';
213
+		$sql = "EXJ_ID int(11) NOT NULL AUTO_INCREMENT,
214 214
 				EXJ_first_model_id varchar(6) NOT NULL,
215 215
 				EXJ_first_model_name varchar(20) NOT NULL,
216 216
 				EXJ_second_model_id varchar(6) NOT NULL,
@@ -218,9 +218,9 @@  discard block
 block discarded – undo
218 218
 				PRIMARY KEY  (EXJ_ID),
219 219
 				KEY first_model (EXJ_first_model_name,EXJ_first_model_id),
220 220
 				KEY second_model (EXJ_second_model_name,EXJ_second_model_id)";
221
-        $this->_table_is_new_in_this_version($table_name, $sql, 'ENGINE=InnoDB ');
222
-        $table_name = 'esp_line_item';
223
-        $sql = "LIN_ID int(11) NOT NULL AUTO_INCREMENT,
221
+		$this->_table_is_new_in_this_version($table_name, $sql, 'ENGINE=InnoDB ');
222
+		$table_name = 'esp_line_item';
223
+		$sql = "LIN_ID int(11) NOT NULL AUTO_INCREMENT,
224 224
 				LIN_code varchar(245) NOT NULL DEFAULT '',
225 225
 				TXN_ID int(11) DEFAULT NULL,
226 226
 				LIN_name varchar(245) NOT NULL DEFAULT '',
@@ -239,9 +239,9 @@  discard block
 block discarded – undo
239 239
 				PRIMARY KEY  (LIN_ID),
240 240
 				KEY LIN_code (LIN_code(191)),
241 241
 				KEY TXN_ID (TXN_ID)";
242
-        $this->_table_is_changed_in_this_version($table_name, $sql, 'ENGINE=InnoDB');
243
-        $table_name = 'esp_log';
244
-        $sql = "LOG_ID int(11) NOT NULL AUTO_INCREMENT,
242
+		$this->_table_is_changed_in_this_version($table_name, $sql, 'ENGINE=InnoDB');
243
+		$table_name = 'esp_log';
244
+		$sql = "LOG_ID int(11) NOT NULL AUTO_INCREMENT,
245 245
 				LOG_time datetime DEFAULT NULL,
246 246
 				OBJ_ID varchar(45) DEFAULT NULL,
247 247
 				OBJ_type varchar(45) DEFAULT NULL,
@@ -252,18 +252,18 @@  discard block
 block discarded – undo
252 252
 				KEY LOG_time (LOG_time),
253 253
 				KEY OBJ (OBJ_type,OBJ_ID),
254 254
 				KEY LOG_type (LOG_type)";
255
-        $this->_table_is_changed_in_this_version($table_name, $sql, 'ENGINE=InnoDB');
256
-        $table_name = 'esp_message_template';
257
-        $sql = "MTP_ID int(10) unsigned NOT NULL AUTO_INCREMENT,
255
+		$this->_table_is_changed_in_this_version($table_name, $sql, 'ENGINE=InnoDB');
256
+		$table_name = 'esp_message_template';
257
+		$sql = "MTP_ID int(10) unsigned NOT NULL AUTO_INCREMENT,
258 258
 					GRP_ID int(10) unsigned NOT NULL,
259 259
 					MTP_context varchar(50) NOT NULL,
260 260
 					MTP_template_field varchar(30) NOT NULL,
261 261
 					MTP_content text NOT NULL,
262 262
 					PRIMARY KEY  (MTP_ID),
263 263
 					KEY GRP_ID (GRP_ID)";
264
-        $this->_table_has_not_changed_since_previous($table_name, $sql, 'ENGINE=InnoDB');
265
-        $table_name = 'esp_message_template_group';
266
-        $sql = "GRP_ID int(10) unsigned NOT NULL AUTO_INCREMENT,
264
+		$this->_table_has_not_changed_since_previous($table_name, $sql, 'ENGINE=InnoDB');
265
+		$table_name = 'esp_message_template_group';
266
+		$sql = "GRP_ID int(10) unsigned NOT NULL AUTO_INCREMENT,
267 267
 					MTP_user_id int(10) NOT NULL DEFAULT '1',
268 268
 					MTP_name varchar(245) NOT NULL DEFAULT '',
269 269
 					MTP_description varchar(245) NOT NULL DEFAULT '',
@@ -275,17 +275,17 @@  discard block
 block discarded – undo
275 275
 					MTP_is_active tinyint(1) NOT NULL DEFAULT '1',
276 276
 					PRIMARY KEY  (GRP_ID),
277 277
 					KEY MTP_user_id (MTP_user_id)";
278
-        $this->_table_has_not_changed_since_previous($table_name, $sql, 'ENGINE=InnoDB');
279
-        $table_name = 'esp_event_message_template';
280
-        $sql = "EMT_ID bigint(20) unsigned NOT NULL AUTO_INCREMENT,
278
+		$this->_table_has_not_changed_since_previous($table_name, $sql, 'ENGINE=InnoDB');
279
+		$table_name = 'esp_event_message_template';
280
+		$sql = "EMT_ID bigint(20) unsigned NOT NULL AUTO_INCREMENT,
281 281
 					EVT_ID bigint(20) unsigned NOT NULL DEFAULT 0,
282 282
 					GRP_ID int(10) unsigned NOT NULL DEFAULT 0,
283 283
 					PRIMARY KEY  (EMT_ID),
284 284
 					KEY EVT_ID (EVT_ID),
285 285
 					KEY GRP_ID (GRP_ID)";
286
-        $this->_table_has_not_changed_since_previous($table_name, $sql, 'ENGINE=InnoDB');
287
-        $table_name = 'esp_payment';
288
-        $sql = "PAY_ID int(10) unsigned NOT NULL AUTO_INCREMENT,
286
+		$this->_table_has_not_changed_since_previous($table_name, $sql, 'ENGINE=InnoDB');
287
+		$table_name = 'esp_payment';
288
+		$sql = "PAY_ID int(10) unsigned NOT NULL AUTO_INCREMENT,
289 289
 					TXN_ID int(10) unsigned DEFAULT NULL,
290 290
 					STS_ID varchar(3) collate utf8_bin DEFAULT NULL,
291 291
 					PAY_timestamp datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
@@ -302,9 +302,9 @@  discard block
 block discarded – undo
302 302
 					PRIMARY KEY  (PAY_ID),
303 303
 					KEY PAY_timestamp (PAY_timestamp),
304 304
 					KEY TXN_ID (TXN_ID)";
305
-        $this->_table_is_changed_in_this_version($table_name, $sql, 'ENGINE=InnoDB ');
306
-        $table_name = 'esp_payment_method';
307
-        $sql = "PMD_ID int(11) NOT NULL AUTO_INCREMENT,
305
+		$this->_table_is_changed_in_this_version($table_name, $sql, 'ENGINE=InnoDB ');
306
+		$table_name = 'esp_payment_method';
307
+		$sql = "PMD_ID int(11) NOT NULL AUTO_INCREMENT,
308 308
 				PMD_type varchar(124) DEFAULT NULL,
309 309
 				PMD_name varchar(255) DEFAULT NULL,
310 310
 				PMD_desc text,
@@ -320,32 +320,32 @@  discard block
 block discarded – undo
320 320
 				PRIMARY KEY  (PMD_ID),
321 321
 				UNIQUE KEY PMD_slug_UNIQUE (PMD_slug),
322 322
 				KEY PMD_type (PMD_type)";
323
-        $this->_table_is_changed_in_this_version($table_name, $sql, 'ENGINE=InnoDB ');
324
-        $table_name = "esp_ticket_price";
325
-        $sql = "TKP_ID int(10) unsigned NOT NULL AUTO_INCREMENT,
323
+		$this->_table_is_changed_in_this_version($table_name, $sql, 'ENGINE=InnoDB ');
324
+		$table_name = "esp_ticket_price";
325
+		$sql = "TKP_ID int(10) unsigned NOT NULL AUTO_INCREMENT,
326 326
 					  TKT_ID int(10) unsigned NOT NULL,
327 327
 					  PRC_ID int(10) unsigned NOT NULL,
328 328
 					  PRIMARY KEY  (TKP_ID),
329 329
 					  KEY TKT_ID (TKT_ID),
330 330
 					  KEY PRC_ID (PRC_ID)";
331
-        $this->_table_is_changed_in_this_version($table_name, $sql, 'ENGINE=InnoDB');
332
-        $table_name = "esp_datetime_ticket";
333
-        $sql = "DTK_ID int(10) unsigned NOT NULL AUTO_INCREMENT,
331
+		$this->_table_is_changed_in_this_version($table_name, $sql, 'ENGINE=InnoDB');
332
+		$table_name = "esp_datetime_ticket";
333
+		$sql = "DTK_ID int(10) unsigned NOT NULL AUTO_INCREMENT,
334 334
 					  DTT_ID int(10) unsigned NOT NULL,
335 335
 					  TKT_ID int(10) unsigned NOT NULL,
336 336
 					  PRIMARY KEY  (DTK_ID),
337 337
 					  KEY DTT_ID (DTT_ID),
338 338
 					  KEY TKT_ID (TKT_ID)";
339
-        $this->_table_is_changed_in_this_version($table_name, $sql, 'ENGINE=InnoDB');
340
-        $table_name = "esp_ticket_template";
341
-        $sql = "TTM_ID int(10) unsigned NOT NULL AUTO_INCREMENT,
339
+		$this->_table_is_changed_in_this_version($table_name, $sql, 'ENGINE=InnoDB');
340
+		$table_name = "esp_ticket_template";
341
+		$sql = "TTM_ID int(10) unsigned NOT NULL AUTO_INCREMENT,
342 342
 					  TTM_name varchar(45) NOT NULL,
343 343
 					  TTM_description text,
344 344
 					  TTM_file varchar(45),
345 345
 					  PRIMARY KEY  (TTM_ID)";
346
-        $this->_table_has_not_changed_since_previous($table_name, $sql, 'ENGINE=InnoDB');
347
-        $table_name = 'esp_question';
348
-        $sql = 'QST_ID int(10) unsigned NOT NULL AUTO_INCREMENT,
346
+		$this->_table_has_not_changed_since_previous($table_name, $sql, 'ENGINE=InnoDB');
347
+		$table_name = 'esp_question';
348
+		$sql = 'QST_ID int(10) unsigned NOT NULL AUTO_INCREMENT,
349 349
 					QST_display_text text NOT NULL,
350 350
 					QST_admin_label varchar(255) NOT NULL,
351 351
 					QST_system varchar(25) NOT NULL DEFAULT "",
@@ -359,18 +359,18 @@  discard block
 block discarded – undo
359 359
 					QST_deleted tinyint(2) unsigned NOT NULL DEFAULT 0,
360 360
 					PRIMARY KEY  (QST_ID),
361 361
 					KEY QST_order (QST_order)';
362
-        $this->_table_is_changed_in_this_version($table_name, $sql, 'ENGINE=InnoDB');
363
-        $table_name = 'esp_question_group_question';
364
-        $sql = "QGQ_ID int(10) unsigned NOT NULL AUTO_INCREMENT,
362
+		$this->_table_is_changed_in_this_version($table_name, $sql, 'ENGINE=InnoDB');
363
+		$table_name = 'esp_question_group_question';
364
+		$sql = "QGQ_ID int(10) unsigned NOT NULL AUTO_INCREMENT,
365 365
 					QSG_ID int(10) unsigned NOT NULL,
366 366
 					QST_ID int(10) unsigned NOT NULL,
367 367
 					QGQ_order int(10) unsigned NOT NULL DEFAULT 0,
368 368
 					PRIMARY KEY  (QGQ_ID),
369 369
 					KEY QST_ID (QST_ID),
370 370
 					KEY QSG_ID_order (QSG_ID,QGQ_order)";
371
-        $this->_table_is_changed_in_this_version($table_name, $sql, 'ENGINE=InnoDB');
372
-        $table_name = 'esp_question_option';
373
-        $sql = "QSO_ID int(10) unsigned NOT NULL AUTO_INCREMENT,
371
+		$this->_table_is_changed_in_this_version($table_name, $sql, 'ENGINE=InnoDB');
372
+		$table_name = 'esp_question_option';
373
+		$sql = "QSO_ID int(10) unsigned NOT NULL AUTO_INCREMENT,
374 374
 					QSO_value varchar(255) NOT NULL,
375 375
 					QSO_desc text NOT NULL,
376 376
 					QST_ID int(10) unsigned NOT NULL,
@@ -380,9 +380,9 @@  discard block
 block discarded – undo
380 380
 					PRIMARY KEY  (QSO_ID),
381 381
 					KEY QST_ID (QST_ID),
382 382
 					KEY QSO_order (QSO_order)";
383
-        $this->_table_is_changed_in_this_version($table_name, $sql, 'ENGINE=InnoDB');
384
-        $table_name = 'esp_registration';
385
-        $sql = "REG_ID int(10) unsigned NOT NULL AUTO_INCREMENT,
383
+		$this->_table_is_changed_in_this_version($table_name, $sql, 'ENGINE=InnoDB');
384
+		$table_name = 'esp_registration';
385
+		$sql = "REG_ID int(10) unsigned NOT NULL AUTO_INCREMENT,
386 386
 					  EVT_ID bigint(20) unsigned NOT NULL,
387 387
 					  ATT_ID bigint(20) unsigned NOT NULL,
388 388
 					  TXN_ID int(10) unsigned NOT NULL,
@@ -406,18 +406,18 @@  discard block
 block discarded – undo
406 406
 					  KEY TKT_ID (TKT_ID),
407 407
 					  KEY EVT_ID (EVT_ID),
408 408
 					  KEY STS_ID (STS_ID)";
409
-        $this->_table_is_changed_in_this_version($table_name, $sql, 'ENGINE=InnoDB ');
410
-        $table_name = 'esp_registration_payment';
411
-        $sql = "RPY_ID int(10) unsigned NOT NULL AUTO_INCREMENT,
409
+		$this->_table_is_changed_in_this_version($table_name, $sql, 'ENGINE=InnoDB ');
410
+		$table_name = 'esp_registration_payment';
411
+		$sql = "RPY_ID int(10) unsigned NOT NULL AUTO_INCREMENT,
412 412
 					  REG_ID int(10) unsigned NOT NULL,
413 413
 					  PAY_ID int(10) unsigned NULL,
414 414
 					  RPY_amount decimal(10,3) NOT NULL DEFAULT '0.00',
415 415
 					  PRIMARY KEY  (RPY_ID),
416 416
 					  KEY REG_ID (REG_ID),
417 417
 					  KEY PAY_ID (PAY_ID)";
418
-        $this->_table_is_changed_in_this_version($table_name, $sql, 'ENGINE=InnoDB ');
419
-        $table_name = 'esp_checkin';
420
-        $sql = "CHK_ID int(10) unsigned NOT NULL AUTO_INCREMENT,
418
+		$this->_table_is_changed_in_this_version($table_name, $sql, 'ENGINE=InnoDB ');
419
+		$table_name = 'esp_checkin';
420
+		$sql = "CHK_ID int(10) unsigned NOT NULL AUTO_INCREMENT,
421 421
 					REG_ID int(10) unsigned NOT NULL,
422 422
 					DTT_ID int(10) unsigned NOT NULL,
423 423
 					CHK_in tinyint(1) unsigned NOT NULL DEFAULT 1,
@@ -425,9 +425,9 @@  discard block
 block discarded – undo
425 425
 					PRIMARY KEY  (CHK_ID),
426 426
 					KEY REG_ID (REG_ID),
427 427
 					KEY DTT_ID (DTT_ID)";
428
-        $this->_table_is_changed_in_this_version($table_name, $sql, 'ENGINE=InnoDB');
429
-        $table_name = 'esp_state';
430
-        $sql = "STA_ID smallint(5) unsigned NOT NULL AUTO_INCREMENT,
428
+		$this->_table_is_changed_in_this_version($table_name, $sql, 'ENGINE=InnoDB');
429
+		$table_name = 'esp_state';
430
+		$sql = "STA_ID smallint(5) unsigned NOT NULL AUTO_INCREMENT,
431 431
 					  CNT_ISO varchar(2) collate utf8_bin NOT NULL,
432 432
 					  STA_abbrev varchar(24) collate utf8_bin NOT NULL,
433 433
 					  STA_name varchar(100) collate utf8_bin NOT NULL,
@@ -435,9 +435,9 @@  discard block
 block discarded – undo
435 435
 					  PRIMARY KEY  (STA_ID),
436 436
 					  KEY STA_abbrev (STA_abbrev),
437 437
 					  KEY CNT_ISO (CNT_ISO)";
438
-        $this->_table_is_changed_in_this_version($table_name, $sql, 'ENGINE=InnoDB');
439
-        $table_name = 'esp_status';
440
-        $sql = "STS_ID varchar(3) NOT NULL,
438
+		$this->_table_is_changed_in_this_version($table_name, $sql, 'ENGINE=InnoDB');
439
+		$table_name = 'esp_status';
440
+		$sql = "STS_ID varchar(3) NOT NULL,
441 441
 					  STS_code varchar(45) NOT NULL,
442 442
 					  STS_type varchar(45) NOT NULL,
443 443
 					  STS_can_edit tinyint(1) NOT NULL DEFAULT 0,
@@ -445,9 +445,9 @@  discard block
 block discarded – undo
445 445
 					  STS_open tinyint(1) NOT NULL DEFAULT 1,
446 446
 					  UNIQUE KEY STS_ID_UNIQUE (STS_ID),
447 447
 					  KEY STS_type (STS_type)";
448
-        $this->_table_is_changed_in_this_version($table_name, $sql, 'ENGINE=InnoDB');
449
-        $table_name = 'esp_transaction';
450
-        $sql = "TXN_ID int(10) unsigned NOT NULL AUTO_INCREMENT,
448
+		$this->_table_is_changed_in_this_version($table_name, $sql, 'ENGINE=InnoDB');
449
+		$table_name = 'esp_transaction';
450
+		$sql = "TXN_ID int(10) unsigned NOT NULL AUTO_INCREMENT,
451 451
 					  TXN_timestamp datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
452 452
 					  TXN_total decimal(10,3) DEFAULT '0.00',
453 453
 					  TXN_paid decimal(10,3) NOT NULL DEFAULT '0.00',
@@ -459,9 +459,9 @@  discard block
 block discarded – undo
459 459
 					  PRIMARY KEY  (TXN_ID),
460 460
 					  KEY TXN_timestamp (TXN_timestamp),
461 461
 					  KEY STS_ID (STS_ID)";
462
-        $this->_table_has_not_changed_since_previous($table_name, $sql, 'ENGINE=InnoDB');
463
-        $table_name = 'esp_venue_meta';
464
-        $sql = "VNUM_ID int(11) NOT NULL AUTO_INCREMENT,
462
+		$this->_table_has_not_changed_since_previous($table_name, $sql, 'ENGINE=InnoDB');
463
+		$table_name = 'esp_venue_meta';
464
+		$sql = "VNUM_ID int(11) NOT NULL AUTO_INCREMENT,
465 465
 			VNU_ID bigint(20) unsigned NOT NULL DEFAULT 0,
466 466
 			VNU_address varchar(255) DEFAULT NULL,
467 467
 			VNU_address2 varchar(255) DEFAULT NULL,
@@ -480,10 +480,10 @@  discard block
 block discarded – undo
480 480
 			KEY VNU_ID (VNU_ID),
481 481
 			KEY STA_ID (STA_ID),
482 482
 			KEY CNT_ISO (CNT_ISO)";
483
-        $this->_table_is_changed_in_this_version($table_name, $sql, 'ENGINE=InnoDB');
484
-        // modified tables
485
-        $table_name = "esp_price";
486
-        $sql = "PRC_ID int(10) unsigned NOT NULL AUTO_INCREMENT,
483
+		$this->_table_is_changed_in_this_version($table_name, $sql, 'ENGINE=InnoDB');
484
+		// modified tables
485
+		$table_name = "esp_price";
486
+		$sql = "PRC_ID int(10) unsigned NOT NULL AUTO_INCREMENT,
487 487
 					  PRT_ID tinyint(3) unsigned NOT NULL,
488 488
 					  PRC_amount decimal(10,3) NOT NULL DEFAULT '0.00',
489 489
 					  PRC_name varchar(245) NOT NULL,
@@ -496,9 +496,9 @@  discard block
 block discarded – undo
496 496
 					  PRC_parent int(10) unsigned DEFAULT 0,
497 497
 					  PRIMARY KEY  (PRC_ID),
498 498
 					  KEY PRT_ID (PRT_ID)";
499
-        $this->_table_is_changed_in_this_version($table_name, $sql, 'ENGINE=InnoDB');
500
-        $table_name = "esp_price_type";
501
-        $sql = "PRT_ID tinyint(3) unsigned NOT NULL AUTO_INCREMENT,
499
+		$this->_table_is_changed_in_this_version($table_name, $sql, 'ENGINE=InnoDB');
500
+		$table_name = "esp_price_type";
501
+		$sql = "PRT_ID tinyint(3) unsigned NOT NULL AUTO_INCREMENT,
502 502
 				  PRT_name varchar(45) NOT NULL,
503 503
 				  PBT_ID tinyint(3) unsigned NOT NULL DEFAULT '1',
504 504
 				  PRT_is_percent tinyint(1) NOT NULL DEFAULT '0',
@@ -507,9 +507,9 @@  discard block
 block discarded – undo
507 507
 				  PRT_deleted tinyint(1) NOT NULL DEFAULT '0',
508 508
 				  UNIQUE KEY PRT_name_UNIQUE (PRT_name),
509 509
 				  PRIMARY KEY  (PRT_ID)";
510
-        $this->_table_has_not_changed_since_previous($table_name, $sql, 'ENGINE=InnoDB ');
511
-        $table_name = "esp_ticket";
512
-        $sql = "TKT_ID int(10) unsigned NOT NULL AUTO_INCREMENT,
510
+		$this->_table_has_not_changed_since_previous($table_name, $sql, 'ENGINE=InnoDB ');
511
+		$table_name = "esp_ticket";
512
+		$sql = "TKT_ID int(10) unsigned NOT NULL AUTO_INCREMENT,
513 513
 					  TTM_ID int(10) unsigned NOT NULL,
514 514
 					  TKT_name varchar(245) NOT NULL DEFAULT '',
515 515
 					  TKT_description text NOT NULL,
@@ -531,9 +531,9 @@  discard block
 block discarded – undo
531 531
 					  TKT_deleted tinyint(1) NOT NULL DEFAULT '0',
532 532
 					  PRIMARY KEY  (TKT_ID),
533 533
 					  KEY TKT_start_date (TKT_start_date)";
534
-        $this->_table_is_changed_in_this_version($table_name, $sql, 'ENGINE=InnoDB');
535
-        $table_name = 'esp_question_group';
536
-        $sql = 'QSG_ID int(10) unsigned NOT NULL AUTO_INCREMENT,
534
+		$this->_table_is_changed_in_this_version($table_name, $sql, 'ENGINE=InnoDB');
535
+		$table_name = 'esp_question_group';
536
+		$sql = 'QSG_ID int(10) unsigned NOT NULL AUTO_INCREMENT,
537 537
 					QSG_name varchar(255) NOT NULL,
538 538
 					QSG_identifier varchar(100) NOT NULL,
539 539
 					QSG_desc text NULL,
@@ -546,223 +546,223 @@  discard block
 block discarded – undo
546 546
 					PRIMARY KEY  (QSG_ID),
547 547
 					UNIQUE KEY QSG_identifier_UNIQUE (QSG_identifier),
548 548
 					KEY QSG_order (QSG_order)';
549
-        $this->_table_is_changed_in_this_version($table_name, $sql, 'ENGINE=InnoDB');
550
-        /** @var EE_DMS_Core_4_1_0 $script_4_1_defaults */
551
-        $script_4_1_defaults = EE_Registry::instance()->load_dms('Core_4_1_0');
552
-        // (because many need to convert old string states to foreign keys into the states table)
553
-        $script_4_1_defaults->insert_default_states();
554
-        $script_4_1_defaults->insert_default_countries();
555
-        /** @var EE_DMS_Core_4_5_0 $script_4_5_defaults */
556
-        $script_4_5_defaults = EE_Registry::instance()->load_dms('Core_4_5_0');
557
-        $script_4_5_defaults->insert_default_price_types();
558
-        $script_4_5_defaults->insert_default_prices();
559
-        $script_4_5_defaults->insert_default_tickets();
560
-        /** @var EE_DMS_Core_4_6_0 $script_4_6_defaults */
561
-        $script_4_6_defaults = EE_Registry::instance()->load_dms('Core_4_6_0');
562
-        $script_4_6_defaults->add_default_admin_only_payments();
563
-        $script_4_6_defaults->insert_default_currencies();
564
-        $this->verify_new_countries();
565
-        $this->verify_new_currencies();
566
-        return true;
567
-    }
549
+		$this->_table_is_changed_in_this_version($table_name, $sql, 'ENGINE=InnoDB');
550
+		/** @var EE_DMS_Core_4_1_0 $script_4_1_defaults */
551
+		$script_4_1_defaults = EE_Registry::instance()->load_dms('Core_4_1_0');
552
+		// (because many need to convert old string states to foreign keys into the states table)
553
+		$script_4_1_defaults->insert_default_states();
554
+		$script_4_1_defaults->insert_default_countries();
555
+		/** @var EE_DMS_Core_4_5_0 $script_4_5_defaults */
556
+		$script_4_5_defaults = EE_Registry::instance()->load_dms('Core_4_5_0');
557
+		$script_4_5_defaults->insert_default_price_types();
558
+		$script_4_5_defaults->insert_default_prices();
559
+		$script_4_5_defaults->insert_default_tickets();
560
+		/** @var EE_DMS_Core_4_6_0 $script_4_6_defaults */
561
+		$script_4_6_defaults = EE_Registry::instance()->load_dms('Core_4_6_0');
562
+		$script_4_6_defaults->add_default_admin_only_payments();
563
+		$script_4_6_defaults->insert_default_currencies();
564
+		$this->verify_new_countries();
565
+		$this->verify_new_currencies();
566
+		return true;
567
+	}
568 568
 
569 569
 
570 570
 
571
-    /**
572
-     * @return boolean
573
-     */
574
-    public function schema_changes_after_migration()
575
-    {
576
-        $this->fix_non_default_taxes();
577
-        // this is actually the same as the last DMS
578
-        /** @var EE_DMS_Core_4_7_0 $script_4_7_defaults */
579
-        $script_4_7_defaults = EE_Registry::instance()->load_dms('Core_4_7_0');
580
-        return $script_4_7_defaults->schema_changes_after_migration();
581
-    }
571
+	/**
572
+	 * @return boolean
573
+	 */
574
+	public function schema_changes_after_migration()
575
+	{
576
+		$this->fix_non_default_taxes();
577
+		// this is actually the same as the last DMS
578
+		/** @var EE_DMS_Core_4_7_0 $script_4_7_defaults */
579
+		$script_4_7_defaults = EE_Registry::instance()->load_dms('Core_4_7_0');
580
+		return $script_4_7_defaults->schema_changes_after_migration();
581
+	}
582 582
 
583 583
 
584 584
 
585
-    public function migration_page_hooks()
586
-    {
587
-    }
585
+	public function migration_page_hooks()
586
+	{
587
+	}
588 588
 
589 589
 
590 590
 
591
-    /**
592
-     * verifies each of the new countries exists that somehow we missed in 4.1
593
-     */
594
-    public function verify_new_countries()
595
-    {
596
-        // a list of countries (and specifically some which were missed in another list):https://gist.github.com/adhipg/1600028
597
-        // how many decimal places? https://en.wikipedia.org/wiki/ISO_4217
598
-        // currency symbols: http://www.xe.com/symbols.php
599
-        // CNT_ISO, CNT_ISO3, RGN_ID, CNT_name, CNT_cur_code, CNT_cur_single, CNT_cur_plural, CNT_cur_sign, CNT_cur_sign_b4, CNT_cur_dec_plc, CNT_tel_code, CNT_is_EU, CNT_active
600
-        // ('AD', 'AND', 0, 'Andorra', 'EUR', 'Euro', 'Euros', '€', 1, 2, '+376', 0, 0),
601
-        $newer_countries = array(
602
-            array('AX', 'ALA', 0, 'Åland Islands', 'EUR', 'Euro', 'Euros', '€', 1, 2, '+358', 1, 0),
603
-            array('BL', 'BLM', 0, 'Saint Barthelemy', 'EUR', 'Euro', 'Euros', '€', 1, 2, '+590', 1, 0),
604
-            array('CW', 'CUW', 0, 'Curacao', 'ANG', 'Guilder', 'Guilders', 'ƒ', 1, 2, '+599', 1, 0),
605
-            array('GG', 'GGY', 0, 'Guernsey', 'EUR', 'Euro', 'Euros', '€', 1, 2, '+44', 0, 0),
606
-            array('IM', 'IMN', 0, 'Isle of Man', 'GBP', 'Pound', 'Pounds', '£', 1, 2, '+44', 0, 0),
607
-            array('JE', 'JEY', 0, 'Jersey', 'GBP', 'Pound', 'Pounds', '£', 1, 2, '+44', 0, 0),
608
-            array('MF', 'MAF', 0, 'Saint Martin', 'EUR', 'Euro', 'Euros', '€', 1, 2, '+590', 1, 0),
609
-            array('ME', 'MNE', 0, 'Montenegro', 'EUR', 'Euro', 'Euros', '€', 1, 2, '+382', 0, 0),
610
-            array('RS', 'SRB', 0, 'Serbia', 'RSD', 'Dinar', 'Dinars', '', 0, 2, '+381', 1, 0),
611
-            array('SS', 'SSD', 0, 'South Sudan', 'SSP', 'Pound', 'Pounds', '£', 1, 2, '+211', 0, 0),
612
-            array('SX', 'SXM', 0, 'Sint Maarten', 'ANG', 'Guilder', 'Guilders', 'ƒ', 1, 2, '+1', 1, 0),
613
-            array('XK', 'XKX', 0, 'Kosovo', 'EUR', 'Euro', 'Euros', '€', 1, 2, '+383', 0, 0),
614
-            array('YT', 'MYT', 0, 'Mayotte', 'EUR', 'Euro', 'Euros', '€', 0, 2, '+262', 1, 0),
615
-            array(
616
-                'BQ',
617
-                'BES',
618
-                0,
619
-                'Bonaire, Saint Eustatius and Saba',
620
-                'USD',
621
-                'Dollar',
622
-                'Dollars',
623
-                '$',
624
-                1,
625
-                2,
626
-                '+599',
627
-                0,
628
-                0,
629
-            ),
630
-            array('BV', 'BVT', 0, 'Bouvet Island', 'NOK', 'Krone', 'Krones', 'kr', 1, 2, '+47', 0, 0),
631
-            array('IO', 'IOT', 0, 'British Indian Ocean Territory', 'GBP', 'Pound', 'Pounds', '£', 1, 2, '+246', 0, 0),
632
-            array('CX', 'CXR', 0, 'Christmas Island', 'AUD', 'Dollar', 'Dollars', '$', 1, 2, '+61', 0, 0),
633
-            array('CC', 'CCK', 0, 'Cocos (Keeling) Islands', 'AUD', 'Dollar', 'Dollars', '$', 1, 2, '+891', 0, 0),
634
-            array(
635
-                'HM',
636
-                'HMD',
637
-                0,
638
-                'Heard Island and McDonald Islands',
639
-                'AUD',
640
-                'Dollar',
641
-                'Dollars',
642
-                '$',
643
-                1,
644
-                2,
645
-                '+891',
646
-                0,
647
-                0,
648
-            ),
649
-            array('PS', 'PSE', 0, 'Palestinian Territory', 'ILS', 'Shekel', 'Shekels', '₪', 1, 2, '+970', 0, 0),
650
-            array(
651
-                'GS',
652
-                'SGS',
653
-                0,
654
-                'South Georgia and the South Sandwich Islands',
655
-                'GBP',
656
-                'Pound',
657
-                'Pounds',
658
-                '£',
659
-                1,
660
-                2,
661
-                '+500',
662
-                0,
663
-                0,
664
-            ),
665
-            array('TL', 'TLS', 0, 'Timor-Leste', 'USD', 'Dollar', 'Dollars', '$', 1, 2, '+670', 0, 0),
666
-            array('TF', 'ATF', 0, 'French Southern Territories', 'EUR', 'Euro', 'Euros', '€', 1, 2, '+262', 0, 0),
667
-            array(
668
-                'UM',
669
-                'UMI',
670
-                0,
671
-                'United States Minor Outlying Islands',
672
-                'USD',
673
-                'Dollar',
674
-                'Dollars',
675
-                '$',
676
-                1,
677
-                2,
678
-                '+1',
679
-                0,
680
-                0,
681
-            ),
682
-        );
683
-        global $wpdb;
684
-        $country_table = $wpdb->prefix . "esp_country";
685
-        $country_format = array(
686
-            "CNT_ISO"         => '%s',
687
-            "CNT_ISO3"        => '%s',
688
-            "RGN_ID"          => '%d',
689
-            "CNT_name"        => '%s',
690
-            "CNT_cur_code"    => '%s',
691
-            "CNT_cur_single"  => '%s',
692
-            "CNT_cur_plural"  => '%s',
693
-            "CNT_cur_sign"    => '%s',
694
-            "CNT_cur_sign_b4" => '%d',
695
-            "CNT_cur_dec_plc" => '%d',
696
-            "CNT_tel_code"    => '%s',
697
-            "CNT_is_EU"       => '%d',
698
-            "CNT_active"      => '%d',
699
-        );
700
-        if ($this->_get_table_analysis()->tableExists($country_table)) {
701
-            foreach ($newer_countries as $country) {
702
-                $SQL = "SELECT COUNT('CNT_ISO') FROM {$country_table} WHERE CNT_ISO='{$country[0]}' LIMIT 1";
703
-                $countries = $wpdb->get_var($SQL);
704
-                if (! $countries) {
705
-                    $wpdb->insert(
706
-                        $country_table,
707
-                        array_combine(array_keys($country_format), $country),
708
-                        $country_format
709
-                    );
710
-                }
711
-            }
712
-        }
713
-    }
591
+	/**
592
+	 * verifies each of the new countries exists that somehow we missed in 4.1
593
+	 */
594
+	public function verify_new_countries()
595
+	{
596
+		// a list of countries (and specifically some which were missed in another list):https://gist.github.com/adhipg/1600028
597
+		// how many decimal places? https://en.wikipedia.org/wiki/ISO_4217
598
+		// currency symbols: http://www.xe.com/symbols.php
599
+		// CNT_ISO, CNT_ISO3, RGN_ID, CNT_name, CNT_cur_code, CNT_cur_single, CNT_cur_plural, CNT_cur_sign, CNT_cur_sign_b4, CNT_cur_dec_plc, CNT_tel_code, CNT_is_EU, CNT_active
600
+		// ('AD', 'AND', 0, 'Andorra', 'EUR', 'Euro', 'Euros', '€', 1, 2, '+376', 0, 0),
601
+		$newer_countries = array(
602
+			array('AX', 'ALA', 0, 'Åland Islands', 'EUR', 'Euro', 'Euros', '€', 1, 2, '+358', 1, 0),
603
+			array('BL', 'BLM', 0, 'Saint Barthelemy', 'EUR', 'Euro', 'Euros', '€', 1, 2, '+590', 1, 0),
604
+			array('CW', 'CUW', 0, 'Curacao', 'ANG', 'Guilder', 'Guilders', 'ƒ', 1, 2, '+599', 1, 0),
605
+			array('GG', 'GGY', 0, 'Guernsey', 'EUR', 'Euro', 'Euros', '€', 1, 2, '+44', 0, 0),
606
+			array('IM', 'IMN', 0, 'Isle of Man', 'GBP', 'Pound', 'Pounds', '£', 1, 2, '+44', 0, 0),
607
+			array('JE', 'JEY', 0, 'Jersey', 'GBP', 'Pound', 'Pounds', '£', 1, 2, '+44', 0, 0),
608
+			array('MF', 'MAF', 0, 'Saint Martin', 'EUR', 'Euro', 'Euros', '€', 1, 2, '+590', 1, 0),
609
+			array('ME', 'MNE', 0, 'Montenegro', 'EUR', 'Euro', 'Euros', '€', 1, 2, '+382', 0, 0),
610
+			array('RS', 'SRB', 0, 'Serbia', 'RSD', 'Dinar', 'Dinars', '', 0, 2, '+381', 1, 0),
611
+			array('SS', 'SSD', 0, 'South Sudan', 'SSP', 'Pound', 'Pounds', '£', 1, 2, '+211', 0, 0),
612
+			array('SX', 'SXM', 0, 'Sint Maarten', 'ANG', 'Guilder', 'Guilders', 'ƒ', 1, 2, '+1', 1, 0),
613
+			array('XK', 'XKX', 0, 'Kosovo', 'EUR', 'Euro', 'Euros', '€', 1, 2, '+383', 0, 0),
614
+			array('YT', 'MYT', 0, 'Mayotte', 'EUR', 'Euro', 'Euros', '€', 0, 2, '+262', 1, 0),
615
+			array(
616
+				'BQ',
617
+				'BES',
618
+				0,
619
+				'Bonaire, Saint Eustatius and Saba',
620
+				'USD',
621
+				'Dollar',
622
+				'Dollars',
623
+				'$',
624
+				1,
625
+				2,
626
+				'+599',
627
+				0,
628
+				0,
629
+			),
630
+			array('BV', 'BVT', 0, 'Bouvet Island', 'NOK', 'Krone', 'Krones', 'kr', 1, 2, '+47', 0, 0),
631
+			array('IO', 'IOT', 0, 'British Indian Ocean Territory', 'GBP', 'Pound', 'Pounds', '£', 1, 2, '+246', 0, 0),
632
+			array('CX', 'CXR', 0, 'Christmas Island', 'AUD', 'Dollar', 'Dollars', '$', 1, 2, '+61', 0, 0),
633
+			array('CC', 'CCK', 0, 'Cocos (Keeling) Islands', 'AUD', 'Dollar', 'Dollars', '$', 1, 2, '+891', 0, 0),
634
+			array(
635
+				'HM',
636
+				'HMD',
637
+				0,
638
+				'Heard Island and McDonald Islands',
639
+				'AUD',
640
+				'Dollar',
641
+				'Dollars',
642
+				'$',
643
+				1,
644
+				2,
645
+				'+891',
646
+				0,
647
+				0,
648
+			),
649
+			array('PS', 'PSE', 0, 'Palestinian Territory', 'ILS', 'Shekel', 'Shekels', '₪', 1, 2, '+970', 0, 0),
650
+			array(
651
+				'GS',
652
+				'SGS',
653
+				0,
654
+				'South Georgia and the South Sandwich Islands',
655
+				'GBP',
656
+				'Pound',
657
+				'Pounds',
658
+				'£',
659
+				1,
660
+				2,
661
+				'+500',
662
+				0,
663
+				0,
664
+			),
665
+			array('TL', 'TLS', 0, 'Timor-Leste', 'USD', 'Dollar', 'Dollars', '$', 1, 2, '+670', 0, 0),
666
+			array('TF', 'ATF', 0, 'French Southern Territories', 'EUR', 'Euro', 'Euros', '€', 1, 2, '+262', 0, 0),
667
+			array(
668
+				'UM',
669
+				'UMI',
670
+				0,
671
+				'United States Minor Outlying Islands',
672
+				'USD',
673
+				'Dollar',
674
+				'Dollars',
675
+				'$',
676
+				1,
677
+				2,
678
+				'+1',
679
+				0,
680
+				0,
681
+			),
682
+		);
683
+		global $wpdb;
684
+		$country_table = $wpdb->prefix . "esp_country";
685
+		$country_format = array(
686
+			"CNT_ISO"         => '%s',
687
+			"CNT_ISO3"        => '%s',
688
+			"RGN_ID"          => '%d',
689
+			"CNT_name"        => '%s',
690
+			"CNT_cur_code"    => '%s',
691
+			"CNT_cur_single"  => '%s',
692
+			"CNT_cur_plural"  => '%s',
693
+			"CNT_cur_sign"    => '%s',
694
+			"CNT_cur_sign_b4" => '%d',
695
+			"CNT_cur_dec_plc" => '%d',
696
+			"CNT_tel_code"    => '%s',
697
+			"CNT_is_EU"       => '%d',
698
+			"CNT_active"      => '%d',
699
+		);
700
+		if ($this->_get_table_analysis()->tableExists($country_table)) {
701
+			foreach ($newer_countries as $country) {
702
+				$SQL = "SELECT COUNT('CNT_ISO') FROM {$country_table} WHERE CNT_ISO='{$country[0]}' LIMIT 1";
703
+				$countries = $wpdb->get_var($SQL);
704
+				if (! $countries) {
705
+					$wpdb->insert(
706
+						$country_table,
707
+						array_combine(array_keys($country_format), $country),
708
+						$country_format
709
+					);
710
+				}
711
+			}
712
+		}
713
+	}
714 714
 
715 715
 
716 716
 
717
-    /**
718
-     * verifies each of the new currencies exists that somehow we missed in 4.6
719
-     */
720
-    public function verify_new_currencies()
721
-    {
722
-        // a list of countries (and specifically some which were missed in another list):https://gist.github.com/adhipg/1600028
723
-        // how many decimal places? https://en.wikipedia.org/wiki/ISO_4217
724
-        // currency symbols: http://www.xe.com/symbols.php
725
-        // CUR_code, CUR_single, CUR_plural, CUR_sign, CUR_dec_plc, CUR_active
726
-        // ( 'EUR',  'Euro',  'Euros',  '€',  2,1),
727
-        $newer_currencies = array(
728
-            array('RSD', 'Dinar', 'Dinars', '', 3, 1),
729
-        );
730
-        global $wpdb;
731
-        $currency_table = $wpdb->prefix . "esp_currency";
732
-        $currency_format = array(
733
-            "CUR_code"    => '%s',
734
-            "CUR_single"  => '%s',
735
-            "CUR_plural"  => '%s',
736
-            "CUR_sign"    => '%s',
737
-            "CUR_dec_plc" => '%d',
738
-            "CUR_active"  => '%d',
739
-        );
740
-        if ($this->_get_table_analysis()->tableExists($currency_table)) {
741
-            foreach ($newer_currencies as $currency) {
742
-                $SQL = "SELECT COUNT('CUR_code') FROM {$currency_table} WHERE CUR_code='{$currency[0]}' LIMIT 1";
743
-                $countries = $wpdb->get_var($SQL);
744
-                if (! $countries) {
745
-                    $wpdb->insert(
746
-                        $currency_table,
747
-                        array_combine(array_keys($currency_format), $currency),
748
-                        $currency_format
749
-                    );
750
-                }
751
-            }
752
-        }
753
-    }
717
+	/**
718
+	 * verifies each of the new currencies exists that somehow we missed in 4.6
719
+	 */
720
+	public function verify_new_currencies()
721
+	{
722
+		// a list of countries (and specifically some which were missed in another list):https://gist.github.com/adhipg/1600028
723
+		// how many decimal places? https://en.wikipedia.org/wiki/ISO_4217
724
+		// currency symbols: http://www.xe.com/symbols.php
725
+		// CUR_code, CUR_single, CUR_plural, CUR_sign, CUR_dec_plc, CUR_active
726
+		// ( 'EUR',  'Euro',  'Euros',  '€',  2,1),
727
+		$newer_currencies = array(
728
+			array('RSD', 'Dinar', 'Dinars', '', 3, 1),
729
+		);
730
+		global $wpdb;
731
+		$currency_table = $wpdb->prefix . "esp_currency";
732
+		$currency_format = array(
733
+			"CUR_code"    => '%s',
734
+			"CUR_single"  => '%s',
735
+			"CUR_plural"  => '%s',
736
+			"CUR_sign"    => '%s',
737
+			"CUR_dec_plc" => '%d',
738
+			"CUR_active"  => '%d',
739
+		);
740
+		if ($this->_get_table_analysis()->tableExists($currency_table)) {
741
+			foreach ($newer_currencies as $currency) {
742
+				$SQL = "SELECT COUNT('CUR_code') FROM {$currency_table} WHERE CUR_code='{$currency[0]}' LIMIT 1";
743
+				$countries = $wpdb->get_var($SQL);
744
+				if (! $countries) {
745
+					$wpdb->insert(
746
+						$currency_table,
747
+						array_combine(array_keys($currency_format), $currency),
748
+						$currency_format
749
+					);
750
+				}
751
+			}
752
+		}
753
+	}
754 754
 
755 755
 
756 756
 
757
-    /**
758
-     * addresses https://events.codebasehq.com/projects/event-espresso/tickets/8731
759
-     * which should just be a temporary issue for folks who installed 4.8.0-4.8.5;
760
-     * we should be able to stop doing this in 4.9
761
-     */
762
-    public function fix_non_default_taxes()
763
-    {
764
-        global $wpdb;
765
-        $query = $wpdb->prepare("UPDATE
757
+	/**
758
+	 * addresses https://events.codebasehq.com/projects/event-espresso/tickets/8731
759
+	 * which should just be a temporary issue for folks who installed 4.8.0-4.8.5;
760
+	 * we should be able to stop doing this in 4.9
761
+	 */
762
+	public function fix_non_default_taxes()
763
+	{
764
+		global $wpdb;
765
+		$query = $wpdb->prepare("UPDATE
766 766
 				{$wpdb->prefix}esp_price p INNER JOIN
767 767
 				{$wpdb->prefix}esp_price_type pt ON p.PRT_ID = pt.PRT_ID
768 768
 			SET
@@ -771,6 +771,6 @@  discard block
 block discarded – undo
771 771
 				p.PRC_is_default = 0 AND
772 772
 				pt.PBT_ID = %d
773 773
 					", EEM_Price_Type::base_type_tax);
774
-        $wpdb->query($query);
775
-    }
774
+		$wpdb->query($query);
775
+	}
776 776
 }
Please login to merge, or discard this patch.
core/data_migration_scripts/EE_DMS_Core_4_1_0.dms.php 2 patches
Spacing   +76 added lines, -76 removed lines patch added patch discarded remove patch
@@ -9,13 +9,13 @@  discard block
 block discarded – undo
9 9
 // unfortunately, this needs to be done upon INCLUSION of this file,
10 10
 // instead of construction, because it only gets constructed on first page load
11 11
 // (all other times it gets resurrected from a wordpress option)
12
-$stages = glob(EE_CORE . 'data_migration_scripts/4_1_0_stages/*');
12
+$stages = glob(EE_CORE.'data_migration_scripts/4_1_0_stages/*');
13 13
 $class_to_filepath = array();
14
-if (! empty($stages)) {
14
+if ( ! empty($stages)) {
15 15
     foreach ($stages as $filepath) {
16 16
         $matches = array();
17 17
         preg_match('~4_1_0_stages/(.*).dmsstage.php~', $filepath, $matches);
18
-        $class_to_filepath[ $matches[1] ] = $filepath;
18
+        $class_to_filepath[$matches[1]] = $filepath;
19 19
     }
20 20
 }
21 21
 // give addons a chance to autoload their stages too
@@ -87,7 +87,7 @@  discard block
 block discarded – undo
87 87
     private function _checkin_table_exists()
88 88
     {
89 89
         global $wpdb;
90
-        $results = $wpdb->get_results("SHOW TABLES LIKE '" . $wpdb->prefix . "events_attendee_checkin" . "'");
90
+        $results = $wpdb->get_results("SHOW TABLES LIKE '".$wpdb->prefix."events_attendee_checkin"."'");
91 91
         if ($results) {
92 92
             return true;
93 93
         } else {
@@ -103,11 +103,11 @@  discard block
 block discarded – undo
103 103
         if (version_compare($version_string, '4.0.0.decaf', '<') && version_compare($version_string, '3.1.26', '>=')) {
104 104
 //          echo "$version_string can be migrated fro";
105 105
             return true;
106
-        } elseif (! $version_string) {
106
+        } elseif ( ! $version_string) {
107 107
 //          echo "no version string provided: $version_string";
108 108
             // no version string provided... this must be pre 4.1
109 109
             // because since 4.1 we're
110
-            return false;// changed mind. dont want people thinking they should migrate yet because they cant
110
+            return false; // changed mind. dont want people thinking they should migrate yet because they cant
111 111
         } else {
112 112
 //          echo "$version_string doesnt apply";
113 113
             return false;
@@ -119,7 +119,7 @@  discard block
 block discarded – undo
119 119
     public function schema_changes_before_migration()
120 120
     {
121 121
         // relies on 4.1's EEH_Activation::create_table
122
-        require_once(EE_HELPERS . 'EEH_Activation.helper.php');
122
+        require_once(EE_HELPERS.'EEH_Activation.helper.php');
123 123
         $table_name = 'esp_answer';
124 124
         $sql = "ANS_ID int(10) unsigned NOT NULL AUTO_INCREMENT,
125 125
 					REG_ID int(10) unsigned NOT NULL,
@@ -503,12 +503,12 @@  discard block
 block discarded – undo
503 503
     public function insert_default_states()
504 504
     {
505 505
         global $wpdb;
506
-        $state_table = $wpdb->prefix . "esp_state";
506
+        $state_table = $wpdb->prefix."esp_state";
507 507
         if ($this->_get_table_analysis()->tableExists($state_table)) {
508
-            $SQL = "SELECT COUNT('STA_ID') FROM " . $state_table;
508
+            $SQL = "SELECT COUNT('STA_ID') FROM ".$state_table;
509 509
             $states = $wpdb->get_var($SQL);
510
-            if (! $states) {
511
-                $SQL = "INSERT INTO " . $state_table . "
510
+            if ( ! $states) {
511
+                $SQL = "INSERT INTO ".$state_table."
512 512
 				(STA_ID, CNT_ISO, STA_abbrev, STA_name, STA_active) VALUES
513 513
 				(1, 'US', 'AK', 'Alaska', 1),
514 514
 				(2, 'US', 'AL', 'Alabama', 1),
@@ -596,12 +596,12 @@  discard block
 block discarded – undo
596 596
     public function insert_default_countries()
597 597
     {
598 598
         global $wpdb;
599
-        $country_table = $wpdb->prefix . "esp_country";
599
+        $country_table = $wpdb->prefix."esp_country";
600 600
         if ($this->_get_table_analysis()->tableExists($country_table)) {
601
-            $SQL = "SELECT COUNT('CNT_ISO') FROM " . $country_table;
601
+            $SQL = "SELECT COUNT('CNT_ISO') FROM ".$country_table;
602 602
             $countries = $wpdb->get_var($SQL);
603
-            if (! $countries) {
604
-                $SQL = "INSERT INTO " . $country_table . "
603
+            if ( ! $countries) {
604
+                $SQL = "INSERT INTO ".$country_table."
605 605
 				(CNT_ISO, CNT_ISO3, RGN_ID, CNT_name, CNT_cur_code, CNT_cur_single, CNT_cur_plural, CNT_cur_sign, CNT_cur_sign_b4, CNT_cur_dec_plc, CNT_tel_code, CNT_is_EU, CNT_active) VALUES
606 606
 				('AD', 'AND', 0, 'Andorra', 'EUR', 'Euro', 'Euros', '€', 1, 2, '+376', 0, 0),
607 607
 				('AE', 'ARE', 0, 'United Arab Emirates', 'AED', 'Dirham', 'Dirhams', 'د.إ', 1, 2, '+971', 0, 0),
@@ -846,17 +846,17 @@  discard block
 block discarded – undo
846 846
     public function insert_default_price_types()
847 847
     {
848 848
         global $wpdb;
849
-        $price_type_table = $wpdb->prefix . "esp_price_type";
849
+        $price_type_table = $wpdb->prefix."esp_price_type";
850 850
         if ($this->_get_table_analysis()->tableExists($price_type_table)) {
851
-            $SQL = 'SELECT COUNT(PRT_ID) FROM ' . $price_type_table;
851
+            $SQL = 'SELECT COUNT(PRT_ID) FROM '.$price_type_table;
852 852
             $price_types_exist = $wpdb->get_var($SQL);
853
-            if (! $price_types_exist) {
853
+            if ( ! $price_types_exist) {
854 854
                 $SQL = "INSERT INTO $price_type_table ( PRT_ID, PRT_name, PBT_ID, PRT_is_percent, PRT_order, PRT_deleted ) VALUES
855
-							(1, '" . esc_html__('Base Price', 'event_espresso') . "', 1,  0, 0, 0),
856
-							(2, '" . esc_html__('Percent Discount', 'event_espresso') . "', 2,  1, 20, 0),
857
-							(3, '" . esc_html__('Fixed Discount', 'event_espresso') . "', 2,  0, 30, 0),
858
-							(4, '" . esc_html__('Percent Surcharge', 'event_espresso') . "', 3,  1, 40, 0),
859
-							(5, '" . esc_html__('Fixed Surcharge', 'event_espresso') . "', 3,  0, 50, 0);";
855
+							(1, '".esc_html__('Base Price', 'event_espresso')."', 1,  0, 0, 0),
856
+							(2, '" . esc_html__('Percent Discount', 'event_espresso')."', 2,  1, 20, 0),
857
+							(3, '" . esc_html__('Fixed Discount', 'event_espresso')."', 2,  0, 30, 0),
858
+							(4, '" . esc_html__('Percent Surcharge', 'event_espresso')."', 3,  1, 40, 0),
859
+							(5, '" . esc_html__('Fixed Surcharge', 'event_espresso')."', 3,  0, 50, 0);";
860 860
                 $SQL = apply_filters('FHEE__EE_DMS_4_1_0__insert_default_price_types__SQL', $SQL);
861 861
                 $wpdb->query($SQL);
862 862
             }
@@ -878,11 +878,11 @@  discard block
 block discarded – undo
878 878
     public function insert_default_prices()
879 879
     {
880 880
         global $wpdb;
881
-        $price_table = $wpdb->prefix . "esp_price";
881
+        $price_table = $wpdb->prefix."esp_price";
882 882
         if ($this->_get_table_analysis()->tableExists($price_table)) {
883
-            $SQL = 'SELECT COUNT(PRC_ID) FROM ' . $price_table;
883
+            $SQL = 'SELECT COUNT(PRC_ID) FROM '.$price_table;
884 884
             $prices_exist = $wpdb->get_var($SQL);
885
-            if (! $prices_exist) {
885
+            if ( ! $prices_exist) {
886 886
                 $SQL = "INSERT INTO $price_table
887 887
 							(PRC_ID, PRT_ID, PRC_amount, PRC_name, PRC_desc,  PRC_is_default, PRC_overrides, PRC_order, PRC_deleted, PRC_parent ) VALUES
888 888
 							(1, 1, '0.00', 'Free Admission', '', 1, null, 0, 0, 0);";
@@ -904,11 +904,11 @@  discard block
 block discarded – undo
904 904
     public function insert_default_tickets()
905 905
     {
906 906
         global $wpdb;
907
-        $ticket_table = $wpdb->prefix . "esp_ticket";
907
+        $ticket_table = $wpdb->prefix."esp_ticket";
908 908
         if ($this->_get_table_analysis()->tableExists($ticket_table)) {
909
-            $SQL = 'SELECT COUNT(TKT_ID) FROM ' . $ticket_table;
909
+            $SQL = 'SELECT COUNT(TKT_ID) FROM '.$ticket_table;
910 910
             $tickets_exist = $wpdb->get_var($SQL);
911
-            if (! $tickets_exist) {
911
+            if ( ! $tickets_exist) {
912 912
                 $SQL = "INSERT INTO $ticket_table
913 913
 					( TKT_ID, TTM_ID, TKT_name, TKT_description, TKT_qty, TKT_sold, TKT_uses, TKT_min, TKT_max, TKT_price, TKT_start_date, TKT_end_date, TKT_taxable, TKT_order, TKT_row, TKT_is_default, TKT_parent, TKT_deleted ) VALUES
914 914
 					( 1, 0, '"
@@ -918,11 +918,11 @@  discard block
 block discarded – undo
918 918
                 $wpdb->query($SQL);
919 919
             }
920 920
         }
921
-        $ticket_price_table = $wpdb->prefix . "esp_ticket_price";
921
+        $ticket_price_table = $wpdb->prefix."esp_ticket_price";
922 922
         if ($this->_get_table_analysis()->tableExists($ticket_price_table)) {
923
-            $SQL = 'SELECT COUNT(TKP_ID) FROM ' . $ticket_price_table;
923
+            $SQL = 'SELECT COUNT(TKP_ID) FROM '.$ticket_price_table;
924 924
             $ticket_prc_exist = $wpdb->get_var($SQL);
925
-            if (! $ticket_prc_exist) {
925
+            if ( ! $ticket_prc_exist) {
926 926
                 $SQL = "INSERT INTO $ticket_price_table
927 927
 				( TKP_ID, TKT_ID, PRC_ID ) VALUES
928 928
 				( 1, 1, 1 )
@@ -946,11 +946,11 @@  discard block
 block discarded – undo
946 946
      */
947 947
     public function get_or_create_country($country_name)
948 948
     {
949
-        if (! $country_name) {
949
+        if ( ! $country_name) {
950 950
             throw new EE_Error(esc_html__("Could not get a country because country name is blank", "event_espresso"));
951 951
         }
952 952
         global $wpdb;
953
-        $country_table = $wpdb->prefix . "esp_country";
953
+        $country_table = $wpdb->prefix."esp_country";
954 954
         if (is_int($country_name)) {
955 955
             $country_name = $this->get_iso_from_3_1_country_id($country_name);
956 956
         }
@@ -958,7 +958,7 @@  discard block
 block discarded – undo
958 958
 			CNT_ISO LIKE %s OR
959 959
 			CNT_ISO3 LIKE %s OR
960 960
 			CNT_name LIKE %s LIMIT 1", $country_name, $country_name, $country_name), ARRAY_A);
961
-        if (! $country) {
961
+        if ( ! $country) {
962 962
             // insert a new one then
963 963
             $cols_n_values = array(
964 964
                     'CNT_ISO'         => $this->_find_available_country_iso(2),
@@ -978,28 +978,28 @@  discard block
 block discarded – undo
978 978
                     'CNT_active'      => true,
979 979
             );
980 980
             $data_types = array(
981
-                    '%s',// CNT_ISO
982
-                    '%s',// CNT_ISO3
983
-                    '%d',// RGN_ID
984
-                    '%s',// CNT_name
985
-                    '%s',// CNT_cur_code
986
-                    '%s',// CNT_cur_single
987
-                    '%s',// CNT_cur_plural
988
-                    '%s',// CNT_cur_sign
989
-                    '%d',// CNT_cur_sign_b4
990
-                    '%d',// CNT_cur_dec_plc
991
-                    '%s',// CNT_cur_dec_mrk
992
-                    '%s',// CNT_cur_thsnds
993
-                    '%s',// CNT_tel_code
994
-                    '%d',// CNT_is_EU
995
-                    '%d',// CNT_active
981
+                    '%s', // CNT_ISO
982
+                    '%s', // CNT_ISO3
983
+                    '%d', // RGN_ID
984
+                    '%s', // CNT_name
985
+                    '%s', // CNT_cur_code
986
+                    '%s', // CNT_cur_single
987
+                    '%s', // CNT_cur_plural
988
+                    '%s', // CNT_cur_sign
989
+                    '%d', // CNT_cur_sign_b4
990
+                    '%d', // CNT_cur_dec_plc
991
+                    '%s', // CNT_cur_dec_mrk
992
+                    '%s', // CNT_cur_thsnds
993
+                    '%s', // CNT_tel_code
994
+                    '%d', // CNT_is_EU
995
+                    '%d', // CNT_active
996 996
             );
997 997
             $success = $wpdb->insert(
998 998
                 $country_table,
999 999
                 $cols_n_values,
1000 1000
                 $data_types
1001 1001
             );
1002
-            if (! $success) {
1002
+            if ( ! $success) {
1003 1003
                 throw new EE_Error($this->_create_error_message_for_db_insertion(
1004 1004
                     'N/A',
1005 1005
                     array('country_id' => $country_name),
@@ -1024,7 +1024,7 @@  discard block
 block discarded – undo
1024 1024
     private function _find_available_country_iso($num_letters = 2)
1025 1025
     {
1026 1026
         global $wpdb;
1027
-        $country_table = $wpdb->prefix . "esp_country";
1027
+        $country_table = $wpdb->prefix."esp_country";
1028 1028
         $attempts = 0;
1029 1029
         do {
1030 1030
             $current_iso = strtoupper(wp_generate_password($num_letters, false));
@@ -1035,7 +1035,7 @@  discard block
 block discarded – undo
1035 1035
             // keep going until we find an available country code, or we arbitrarily
1036 1036
             // decide we've tried this enough. Somehow they have way too many countries
1037 1037
             // (probably because they're mis-using the EE3 country_id like a custom question)
1038
-        } while (intval($country_with_that_iso) && $attempts < 200);
1038
+        }while (intval($country_with_that_iso) && $attempts < 200);
1039 1039
         return $current_iso;
1040 1040
     }
1041 1041
 
@@ -1051,7 +1051,7 @@  discard block
 block discarded – undo
1051 1051
      */
1052 1052
     public function get_or_create_state($state_name, $country_name = '')
1053 1053
     {
1054
-        if (! $state_name) {
1054
+        if ( ! $state_name) {
1055 1055
             throw new EE_Error(esc_html__(
1056 1056
                 "Could not get-or-create state because no state name was provided",
1057 1057
                 "event_espresso"
@@ -1064,12 +1064,12 @@  discard block
 block discarded – undo
1064 1064
             $country_iso = $this->get_default_country_iso();
1065 1065
         }
1066 1066
         global $wpdb;
1067
-        $state_table = $wpdb->prefix . "esp_state";
1067
+        $state_table = $wpdb->prefix."esp_state";
1068 1068
         $state = $wpdb->get_row($wpdb->prepare("SELECT * FROM $state_table WHERE
1069 1069
 			(STA_abbrev LIKE %s OR
1070 1070
 			STA_name LIKE %s) AND
1071 1071
 			CNT_ISO LIKE %s LIMIT 1", $state_name, $state_name, $country_iso), ARRAY_A);
1072
-        if (! $state) {
1072
+        if ( ! $state) {
1073 1073
             // insert a new one then
1074 1074
             $cols_n_values = array(
1075 1075
                     'CNT_ISO'    => $country_iso,
@@ -1078,13 +1078,13 @@  discard block
 block discarded – undo
1078 1078
                     'STA_active' => true,
1079 1079
             );
1080 1080
             $data_types = array(
1081
-                    '%s',// CNT_ISO
1082
-                    '%s',// STA_abbrev
1083
-                    '%s',// STA_name
1084
-                    '%d',// STA_active
1081
+                    '%s', // CNT_ISO
1082
+                    '%s', // STA_abbrev
1083
+                    '%s', // STA_name
1084
+                    '%d', // STA_active
1085 1085
             );
1086 1086
             $success = $wpdb->insert($state_table, $cols_n_values, $data_types);
1087
-            if (! $success) {
1087
+            if ( ! $success) {
1088 1088
                 throw new EE_Error($this->_create_error_message_for_db_insertion(
1089 1089
                     'N/A',
1090 1090
                     array('state' => $state_name, 'country_id' => $country_name),
@@ -1113,7 +1113,7 @@  discard block
 block discarded – undo
1113 1113
     {
1114 1114
         $matches = array();
1115 1115
         preg_match("~(\\d*):(\\d*)~", $timeString, $matches);
1116
-        if (! $matches || count($matches) < 3) {
1116
+        if ( ! $matches || count($matches) < 3) {
1117 1117
             $hour = '00';
1118 1118
             $minutes = '00';
1119 1119
         } else {
@@ -1418,7 +1418,7 @@  discard block
 block discarded – undo
1418 1418
                     'Declined'         => 'RPP',
1419 1419
             );
1420 1420
         }
1421
-        return isset($mapping[ $payment_status ]) ? $mapping[ $payment_status ] : 'RNA';
1421
+        return isset($mapping[$payment_status]) ? $mapping[$payment_status] : 'RNA';
1422 1422
     }
1423 1423
 
1424 1424
 
@@ -1442,7 +1442,7 @@  discard block
 block discarded – undo
1442 1442
         if ($guid) {
1443 1443
             // check for an existing attachment post with this guid
1444 1444
             $attachment_post_id = $this->_get_image_attachment_id_by_GUID($guid);
1445
-            if (! $attachment_post_id) {
1445
+            if ( ! $attachment_post_id) {
1446 1446
                 // post thumbnail with that GUID doesn't exist, we should create one
1447 1447
                 $attachment_post_id = $this->_create_image_attachment_from_GUID($guid, $migration_stage);
1448 1448
                 $created_attachment_post = true;
@@ -1477,7 +1477,7 @@  discard block
 block discarded – undo
1477 1477
         $original_guid = preg_replace('~-\d*x\d*\.~', '.', $guid_in_old_event, 1);
1478 1478
         // do a head request to verify the file exists
1479 1479
         $head_response = wp_remote_head($original_guid);
1480
-        if (! $head_response instanceof WP_Error && $head_response['response']['message'] == 'OK') {
1480
+        if ( ! $head_response instanceof WP_Error && $head_response['response']['message'] == 'OK') {
1481 1481
             return $original_guid;
1482 1482
         } else {
1483 1483
             return $guid_in_old_event;
@@ -1497,7 +1497,7 @@  discard block
 block discarded – undo
1497 1497
      */
1498 1498
     private function _create_image_attachment_from_GUID($guid, EE_Data_Migration_Script_Stage $migration_stage)
1499 1499
     {
1500
-        if (! $guid) {
1500
+        if ( ! $guid) {
1501 1501
             $migration_stage->add_error(sprintf(esc_html__(
1502 1502
                 "Cannot create image attachment for a blank GUID!",
1503 1503
                 "event_espresso"
@@ -1509,7 +1509,7 @@  discard block
 block discarded – undo
1509 1509
         // if the file is located remotely, download it to our uploads DIR, because wp_genereate_attachmnet_metadata needs the file to be local
1510 1510
         if (strpos($guid, $wp_upload_dir['url']) === false) {
1511 1511
             // image is located remotely. download it and place it in the uploads directory
1512
-            if (! is_readable($guid)) {
1512
+            if ( ! is_readable($guid)) {
1513 1513
                 $migration_stage->add_error(sprintf(esc_html__(
1514 1514
                     "Could not create image attachment from non-existent file: %s",
1515 1515
                     "event_espresso"
@@ -1524,7 +1524,7 @@  discard block
 block discarded – undo
1524 1524
                 ), $guid));
1525 1525
                 return false;
1526 1526
             }
1527
-            $local_filepath = $wp_upload_dir['path'] . '/' . basename($guid);
1527
+            $local_filepath = $wp_upload_dir['path'].'/'.basename($guid);
1528 1528
             $savefile = fopen($local_filepath, 'w');
1529 1529
             fwrite($savefile, $contents);
1530 1530
             fclose($savefile);
@@ -1540,7 +1540,7 @@  discard block
 block discarded – undo
1540 1540
                 'post_status'    => 'inherit',
1541 1541
         );
1542 1542
         $attach_id = wp_insert_attachment($attachment, $guid);
1543
-        if (! $attach_id) {
1543
+        if ( ! $attach_id) {
1544 1544
             $migration_stage->add_error(sprintf(esc_html__(
1545 1545
                 "Could not create image attachment post from image '%s'. Attachment data was %s.",
1546 1546
                 "event_espresso"
@@ -1549,9 +1549,9 @@  discard block
 block discarded – undo
1549 1549
         }
1550 1550
         // you must first include the image.php file
1551 1551
         // for the function wp_generate_attachment_metadata() to work
1552
-        require_once(ABSPATH . 'wp-admin/includes/image.php');
1552
+        require_once(ABSPATH.'wp-admin/includes/image.php');
1553 1553
         $attach_data = wp_generate_attachment_metadata($attach_id, $local_filepath);
1554
-        if (! $attach_data) {
1554
+        if ( ! $attach_data) {
1555 1555
             $migration_stage->add_error(sprintf(esc_html__(
1556 1556
                 "Coudl not genereate attachment metadata for attachment post %d with filepath %s and GUID %s. Please check the file was downloaded properly.",
1557 1557
                 "event_espresso"
@@ -1559,7 +1559,7 @@  discard block
 block discarded – undo
1559 1559
             return $attach_id;
1560 1560
         }
1561 1561
         $metadata_save_result = wp_update_attachment_metadata($attach_id, $attach_data);
1562
-        if (! $metadata_save_result) {
1562
+        if ( ! $metadata_save_result) {
1563 1563
             $migration_stage->add_error(sprintf(esc_html__(
1564 1564
                 "Could not update attachment metadata for attachment %d with data %s",
1565 1565
                 "event_espresso"
@@ -1605,10 +1605,10 @@  discard block
 block discarded – undo
1605 1605
         $timezone = null
1606 1606
     ) {
1607 1607
         $original_tz = $timezone;
1608
-        if (! $timezone) {
1608
+        if ( ! $timezone) {
1609 1609
             $timezone = $this->_get_wp_timezone();
1610 1610
         }
1611
-        if (! $timezone) {
1611
+        if ( ! $timezone) {
1612 1612
             $stage->add_error(sprintf(
1613 1613
                 esc_html__("Could not find timezone given %s for %s", "event_espresso"),
1614 1614
                 $original_tz,
@@ -1741,7 +1741,7 @@  discard block
 block discarded – undo
1741 1741
         );
1742 1742
         add_filter(
1743 1743
             'FHEE__ee_migration_page__migration_options_template',
1744
-            array($this,'use_migration_options_from_ee3_template')
1744
+            array($this, 'use_migration_options_from_ee3_template')
1745 1745
         );
1746 1746
     }
1747 1747
 
@@ -1807,6 +1807,6 @@  discard block
 block discarded – undo
1807 1807
      */
1808 1808
     public function use_migration_options_from_ee3_template($template_filepath)
1809 1809
     {
1810
-        return EE_MAINTENANCE_TEMPLATE_PATH . 'migration_options_from_ee3.template.php';
1810
+        return EE_MAINTENANCE_TEMPLATE_PATH.'migration_options_from_ee3.template.php';
1811 1811
     }
1812 1812
 }
Please login to merge, or discard this patch.
Indentation   +1178 added lines, -1178 removed lines patch added patch discarded remove patch
@@ -10,11 +10,11 @@  discard block
 block discarded – undo
10 10
 $stages = glob(EE_CORE . 'data_migration_scripts/4_1_0_stages/*');
11 11
 $class_to_filepath = array();
12 12
 if (! empty($stages)) {
13
-    foreach ($stages as $filepath) {
14
-        $matches = array();
15
-        preg_match('~4_1_0_stages/(.*).dmsstage.php~', $filepath, $matches);
16
-        $class_to_filepath[ $matches[1] ] = $filepath;
17
-    }
13
+	foreach ($stages as $filepath) {
14
+		$matches = array();
15
+		preg_match('~4_1_0_stages/(.*).dmsstage.php~', $filepath, $matches);
16
+		$class_to_filepath[ $matches[1] ] = $filepath;
17
+	}
18 18
 }
19 19
 // give addons a chance to autoload their stages too
20 20
 $class_to_filepath = apply_filters('FHEE__EE_DMS_4_1_0__autoloaded_stages', $class_to_filepath);
@@ -38,91 +38,91 @@  discard block
 block discarded – undo
38 38
  */
39 39
 class EE_DMS_Core_4_1_0 extends EE_Data_Migration_Script_Base
40 40
 {
41
-    /**
42
-     * EE_DMS_Core_4_1_0 constructor.
43
-     *
44
-     * @param TableManager  $table_manager
45
-     * @param TableAnalysis $table_analysis
46
-     */
47
-    public function __construct(TableManager $table_manager = null, TableAnalysis $table_analysis = null)
48
-    {
49
-        $this->_pretty_name = esc_html__("Data Migration from Event Espresso 3 to Event Espresso 4.1.0", "event_espresso");
50
-        $this->_priority = 10;
51
-        $this->_migration_stages = array(
52
-                new EE_DMS_4_1_0_org_options(),
53
-                new EE_DMS_4_1_0_shortcodes(),
54
-                new EE_DMS_4_1_0_gateways(),
55
-                new EE_DMS_4_1_0_events(),
56
-                new EE_DMS_4_1_0_prices(),
57
-                new EE_DMS_4_1_0_category_details(),
58
-                new EE_DMS_4_1_0_event_category(),
59
-                new EE_DMS_4_1_0_venues(),
60
-                new EE_DMS_4_1_0_event_venue(),
61
-                new EE_DMS_4_1_0_question_groups(),
62
-                new EE_DMS_4_1_0_questions(),
63
-                new EE_DMS_4_1_0_question_group_question(),
64
-                new EE_DMS_4_1_0_event_question_group(),
65
-                new EE_DMS_4_1_0_attendees(),
66
-                new EE_DMS_4_1_0_line_items(),
67
-                new EE_DMS_4_1_0_answers(),
68
-                new EE_DMS_4_1_0_checkins(),
69
-        );
70
-        parent::__construct($table_manager, $table_analysis);
71
-    }
72
-
73
-
74
-
75
-    /**
76
-     * Checks if this 3.1 Check-in table exists. If it doesn't we can't migrate Check-ins
77
-     *
78
-     * @global wpdb $wpdb
79
-     * @return boolean
80
-     */
81
-    private function _checkin_table_exists()
82
-    {
83
-        global $wpdb;
84
-        $results = $wpdb->get_results("SHOW TABLES LIKE '" . $wpdb->prefix . "events_attendee_checkin" . "'");
85
-        if ($results) {
86
-            return true;
87
-        } else {
88
-            return false;
89
-        }
90
-    }
91
-
92
-
93
-
94
-    public function can_migrate_from_version($version_array)
95
-    {
96
-        $version_string = $version_array['Core'];
97
-        if (version_compare($version_string, '4.0.0.decaf', '<') && version_compare($version_string, '3.1.26', '>=')) {
41
+	/**
42
+	 * EE_DMS_Core_4_1_0 constructor.
43
+	 *
44
+	 * @param TableManager  $table_manager
45
+	 * @param TableAnalysis $table_analysis
46
+	 */
47
+	public function __construct(TableManager $table_manager = null, TableAnalysis $table_analysis = null)
48
+	{
49
+		$this->_pretty_name = esc_html__("Data Migration from Event Espresso 3 to Event Espresso 4.1.0", "event_espresso");
50
+		$this->_priority = 10;
51
+		$this->_migration_stages = array(
52
+				new EE_DMS_4_1_0_org_options(),
53
+				new EE_DMS_4_1_0_shortcodes(),
54
+				new EE_DMS_4_1_0_gateways(),
55
+				new EE_DMS_4_1_0_events(),
56
+				new EE_DMS_4_1_0_prices(),
57
+				new EE_DMS_4_1_0_category_details(),
58
+				new EE_DMS_4_1_0_event_category(),
59
+				new EE_DMS_4_1_0_venues(),
60
+				new EE_DMS_4_1_0_event_venue(),
61
+				new EE_DMS_4_1_0_question_groups(),
62
+				new EE_DMS_4_1_0_questions(),
63
+				new EE_DMS_4_1_0_question_group_question(),
64
+				new EE_DMS_4_1_0_event_question_group(),
65
+				new EE_DMS_4_1_0_attendees(),
66
+				new EE_DMS_4_1_0_line_items(),
67
+				new EE_DMS_4_1_0_answers(),
68
+				new EE_DMS_4_1_0_checkins(),
69
+		);
70
+		parent::__construct($table_manager, $table_analysis);
71
+	}
72
+
73
+
74
+
75
+	/**
76
+	 * Checks if this 3.1 Check-in table exists. If it doesn't we can't migrate Check-ins
77
+	 *
78
+	 * @global wpdb $wpdb
79
+	 * @return boolean
80
+	 */
81
+	private function _checkin_table_exists()
82
+	{
83
+		global $wpdb;
84
+		$results = $wpdb->get_results("SHOW TABLES LIKE '" . $wpdb->prefix . "events_attendee_checkin" . "'");
85
+		if ($results) {
86
+			return true;
87
+		} else {
88
+			return false;
89
+		}
90
+	}
91
+
92
+
93
+
94
+	public function can_migrate_from_version($version_array)
95
+	{
96
+		$version_string = $version_array['Core'];
97
+		if (version_compare($version_string, '4.0.0.decaf', '<') && version_compare($version_string, '3.1.26', '>=')) {
98 98
 //          echo "$version_string can be migrated fro";
99
-            return true;
100
-        } elseif (! $version_string) {
99
+			return true;
100
+		} elseif (! $version_string) {
101 101
 //          echo "no version string provided: $version_string";
102
-            // no version string provided... this must be pre 4.1
103
-            // because since 4.1 we're
104
-            return false;// changed mind. dont want people thinking they should migrate yet because they cant
105
-        } else {
102
+			// no version string provided... this must be pre 4.1
103
+			// because since 4.1 we're
104
+			return false;// changed mind. dont want people thinking they should migrate yet because they cant
105
+		} else {
106 106
 //          echo "$version_string doesnt apply";
107
-            return false;
108
-        }
109
-    }
107
+			return false;
108
+		}
109
+	}
110 110
 
111 111
 
112 112
 
113
-    public function schema_changes_before_migration()
114
-    {
115
-        // relies on 4.1's EEH_Activation::create_table
116
-        require_once(EE_HELPERS . 'EEH_Activation.helper.php');
117
-        $table_name = 'esp_answer';
118
-        $sql = "ANS_ID int(10) unsigned NOT NULL AUTO_INCREMENT,
113
+	public function schema_changes_before_migration()
114
+	{
115
+		// relies on 4.1's EEH_Activation::create_table
116
+		require_once(EE_HELPERS . 'EEH_Activation.helper.php');
117
+		$table_name = 'esp_answer';
118
+		$sql = "ANS_ID int(10) unsigned NOT NULL AUTO_INCREMENT,
119 119
 					REG_ID int(10) unsigned NOT NULL,
120 120
 					QST_ID int(10) unsigned NOT NULL,
121 121
 					ANS_value text NOT NULL,
122 122
 					PRIMARY KEY  (ANS_ID)";
123
-        $this->_table_is_new_in_this_version($table_name, $sql, 'ENGINE=InnoDB');
124
-        $table_name = 'esp_attendee_meta';
125
-        $sql = "ATTM_ID int(10) unsigned NOT NULL AUTO_INCREMENT,
123
+		$this->_table_is_new_in_this_version($table_name, $sql, 'ENGINE=InnoDB');
124
+		$table_name = 'esp_attendee_meta';
125
+		$sql = "ATTM_ID int(10) unsigned NOT NULL AUTO_INCREMENT,
126 126
 						ATT_ID bigint(20) unsigned NOT NULL,
127 127
 						ATT_fname varchar(45) NOT NULL,
128 128
 						ATT_lname varchar(45) NOT NULL,
@@ -138,9 +138,9 @@  discard block
 block discarded – undo
138 138
 								KEY ATT_fname (ATT_fname),
139 139
 								KEY ATT_lname (ATT_lname),
140 140
 								KEY ATT_email (ATT_email(191))";
141
-        $this->_table_is_new_in_this_version($table_name, $sql, 'ENGINE=InnoDB ');
142
-        $table_name = 'esp_country';
143
-        $sql = "CNT_ISO varchar(2) COLLATE utf8_bin NOT NULL,
141
+		$this->_table_is_new_in_this_version($table_name, $sql, 'ENGINE=InnoDB ');
142
+		$table_name = 'esp_country';
143
+		$sql = "CNT_ISO varchar(2) COLLATE utf8_bin NOT NULL,
144 144
 					  CNT_ISO3 varchar(3) COLLATE utf8_bin NOT NULL,
145 145
 					  RGN_ID tinyint(3) unsigned DEFAULT NULL,
146 146
 					  CNT_name varchar(45) COLLATE utf8_bin NOT NULL,
@@ -156,9 +156,9 @@  discard block
 block discarded – undo
156 156
 					  CNT_is_EU tinyint(1) DEFAULT '0',
157 157
 					  CNT_active tinyint(1) DEFAULT '0',
158 158
 					  PRIMARY KEY  (CNT_ISO)";
159
-        $this->_table_is_new_in_this_version($table_name, $sql, 'ENGINE=InnoDB');
160
-        $table_name = 'esp_datetime';
161
-        $sql = "DTT_ID int(10) unsigned NOT NULL AUTO_INCREMENT,
159
+		$this->_table_is_new_in_this_version($table_name, $sql, 'ENGINE=InnoDB');
160
+		$table_name = 'esp_datetime';
161
+		$sql = "DTT_ID int(10) unsigned NOT NULL AUTO_INCREMENT,
162 162
 				  EVT_ID bigint(20) unsigned NOT NULL,
163 163
 				  DTT_EVT_start datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
164 164
 				  DTT_EVT_end datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
@@ -171,9 +171,9 @@  discard block
 block discarded – undo
171 171
 						PRIMARY KEY  (DTT_ID),
172 172
 						KEY EVT_ID (EVT_ID),
173 173
 						KEY DTT_is_primary (DTT_is_primary)";
174
-        $this->_table_is_new_in_this_version($table_name, $sql, 'ENGINE=InnoDB');
175
-        $table_name = 'esp_event_meta';
176
-        $sql = "
174
+		$this->_table_is_new_in_this_version($table_name, $sql, 'ENGINE=InnoDB');
175
+		$table_name = 'esp_event_meta';
176
+		$sql = "
177 177
 			EVTM_ID int(10) NOT NULL AUTO_INCREMENT,
178 178
 			EVT_ID bigint(20) unsigned NOT NULL,
179 179
 			EVT_display_desc tinyint(1) unsigned NOT NULL DEFAULT 1,
@@ -188,31 +188,31 @@  discard block
 block discarded – undo
188 188
 			EVT_external_URL varchar(200) NULL,
189 189
 			EVT_donations tinyint(1) NULL,
190 190
 			PRIMARY KEY  (EVTM_ID)";
191
-        $this->_table_is_new_in_this_version($table_name, $sql, 'ENGINE=InnoDB');
192
-        $table_name = 'esp_event_question_group';
193
-        $sql = "EQG_ID int(10) unsigned NOT NULL AUTO_INCREMENT,
191
+		$this->_table_is_new_in_this_version($table_name, $sql, 'ENGINE=InnoDB');
192
+		$table_name = 'esp_event_question_group';
193
+		$sql = "EQG_ID int(10) unsigned NOT NULL AUTO_INCREMENT,
194 194
 					EVT_ID bigint(20) unsigned NOT NULL,
195 195
 					QSG_ID int(10) unsigned NOT NULL,
196 196
 					EQG_primary tinyint(1) unsigned NOT NULL DEFAULT 0,
197 197
 					PRIMARY KEY  (EQG_ID)";
198
-        $this->_table_is_new_in_this_version($table_name, $sql, 'ENGINE=InnoDB');
199
-        $table_name = 'esp_event_venue';
200
-        $sql = "EVV_ID int(11) NOT NULL AUTO_INCREMENT,
198
+		$this->_table_is_new_in_this_version($table_name, $sql, 'ENGINE=InnoDB');
199
+		$table_name = 'esp_event_venue';
200
+		$sql = "EVV_ID int(11) NOT NULL AUTO_INCREMENT,
201 201
 				EVT_ID bigint(20) unsigned NOT NULL,
202 202
 				VNU_ID bigint(20) unsigned NOT NULL,
203 203
 				EVV_primary tinyint(1) unsigned NOT NULL DEFAULT 0,
204 204
 				PRIMARY KEY  (EVV_ID)";
205
-        $this->_table_is_new_in_this_version($table_name, $sql, 'ENGINE=InnoDB');
206
-        $table_name = 'esp_extra_meta';
207
-        $sql = "EXM_ID int(11) NOT NULL AUTO_INCREMENT,
205
+		$this->_table_is_new_in_this_version($table_name, $sql, 'ENGINE=InnoDB');
206
+		$table_name = 'esp_extra_meta';
207
+		$sql = "EXM_ID int(11) NOT NULL AUTO_INCREMENT,
208 208
 				OBJ_ID int(11) DEFAULT NULL,
209 209
 				EXM_type varchar(45) DEFAULT NULL,
210 210
 				EXM_key varchar(45) DEFAULT NULL,
211 211
 				EXM_value text,
212 212
 				PRIMARY KEY  (EXM_ID)";
213
-        $this->_table_is_new_in_this_version($table_name, $sql, 'ENGINE=InnoDB');
214
-        $table_name = 'esp_line_item';
215
-        $sql = "LIN_ID int(11) NOT NULL AUTO_INCREMENT,
213
+		$this->_table_is_new_in_this_version($table_name, $sql, 'ENGINE=InnoDB');
214
+		$table_name = 'esp_line_item';
215
+		$sql = "LIN_ID int(11) NOT NULL AUTO_INCREMENT,
216 216
 				LIN_code varchar(245) NOT NULL DEFAULT '',
217 217
 				TXN_ID int(11) DEFAULT NULL,
218 218
 				LIN_name varchar(245) NOT NULL DEFAULT '',
@@ -228,18 +228,18 @@  discard block
 block discarded – undo
228 228
 				OBJ_ID int(11) DEFAULT NULL,
229 229
 				OBJ_type varchar(45)DEFAULT NULL,
230 230
 				PRIMARY KEY  (LIN_ID)";
231
-        $this->_table_is_new_in_this_version($table_name, $sql, 'ENGINE=InnoDB');
232
-        $table_name = 'esp_message_template';
233
-        $sql = "MTP_ID int(10) unsigned NOT NULL AUTO_INCREMENT,
231
+		$this->_table_is_new_in_this_version($table_name, $sql, 'ENGINE=InnoDB');
232
+		$table_name = 'esp_message_template';
233
+		$sql = "MTP_ID int(10) unsigned NOT NULL AUTO_INCREMENT,
234 234
 					GRP_ID int(10) unsigned NOT NULL,
235 235
 					MTP_context varchar(50) NOT NULL,
236 236
 					MTP_template_field varchar(30) NOT NULL,
237 237
 					MTP_content text NOT NULL,
238 238
 					PRIMARY KEY  (MTP_ID),
239 239
 					KEY GRP_ID (GRP_ID)";
240
-        $this->_table_is_new_in_this_version($table_name, $sql, 'ENGINE=InnoDB');
241
-        $table_name = 'esp_message_template_group';
242
-        $sql = "GRP_ID int(10) unsigned NOT NULL AUTO_INCREMENT,
240
+		$this->_table_is_new_in_this_version($table_name, $sql, 'ENGINE=InnoDB');
241
+		$table_name = 'esp_message_template_group';
242
+		$sql = "GRP_ID int(10) unsigned NOT NULL AUTO_INCREMENT,
243 243
 					EVT_ID bigint(20) unsigned DEFAULT NULL,
244 244
 					MTP_user_id int(10) NOT NULL DEFAULT '1',
245 245
 					MTP_messenger varchar(30) NOT NULL,
@@ -251,9 +251,9 @@  discard block
 block discarded – undo
251 251
 					PRIMARY KEY  (GRP_ID),
252 252
 					KEY EVT_ID (EVT_ID),
253 253
 					KEY MTP_user_id (MTP_user_id)";
254
-        $this->_table_is_new_in_this_version($table_name, $sql, 'ENGINE=InnoDB');
255
-        $table_name = 'esp_payment';
256
-        $sql = "PAY_ID int(10) unsigned NOT NULL AUTO_INCREMENT,
254
+		$this->_table_is_new_in_this_version($table_name, $sql, 'ENGINE=InnoDB');
255
+		$table_name = 'esp_payment';
256
+		$sql = "PAY_ID int(10) unsigned NOT NULL AUTO_INCREMENT,
257 257
 					TXN_ID int(10) unsigned DEFAULT NULL,
258 258
 					STS_ID varchar(3) COLLATE utf8_bin DEFAULT NULL,
259 259
 					PAY_timestamp datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
@@ -269,9 +269,9 @@  discard block
 block discarded – undo
269 269
 					PRIMARY KEY  (PAY_ID),
270 270
 					KEY TXN_ID (TXN_ID),
271 271
 					KEY PAY_timestamp (PAY_timestamp)";
272
-        $this->_table_is_new_in_this_version($table_name, $sql, 'ENGINE=InnoDB ');
273
-        $table_name = "esp_ticket";
274
-        $sql = "TKT_ID int(10) unsigned NOT NULL AUTO_INCREMENT,
272
+		$this->_table_is_new_in_this_version($table_name, $sql, 'ENGINE=InnoDB ');
273
+		$table_name = "esp_ticket";
274
+		$sql = "TKT_ID int(10) unsigned NOT NULL AUTO_INCREMENT,
275 275
 					  TTM_ID int(10) unsigned NOT NULL,
276 276
 					  TKT_name varchar(245) NOT NULL DEFAULT '',
277 277
 					  TKT_description text NOT NULL,
@@ -290,28 +290,28 @@  discard block
 block discarded – undo
290 290
 					  TKT_parent int(10) unsigned DEFAULT '0',
291 291
 					  TKT_deleted tinyint(1) NOT NULL DEFAULT '0',
292 292
 					  PRIMARY KEY  (TKT_ID)";
293
-        $this->_table_is_new_in_this_version($table_name, $sql, 'ENGINE=InnoDB');
294
-        $table_name = "esp_ticket_price";
295
-        $sql = "TKP_ID int(10) unsigned NOT NULL AUTO_INCREMENT,
293
+		$this->_table_is_new_in_this_version($table_name, $sql, 'ENGINE=InnoDB');
294
+		$table_name = "esp_ticket_price";
295
+		$sql = "TKP_ID int(10) unsigned NOT NULL AUTO_INCREMENT,
296 296
 					  TKT_ID int(10) unsigned NOT NULL,
297 297
 					  PRC_ID int(10) unsigned NOT NULL,
298 298
 					  PRIMARY KEY  (TKP_ID)";
299
-        $this->_table_is_new_in_this_version($table_name, $sql, 'ENGINE=InnoDB');
300
-        $table_name = "esp_datetime_ticket";
301
-        $sql = "DTK_ID int(10) unsigned NOT NULL AUTO_INCREMENT,
299
+		$this->_table_is_new_in_this_version($table_name, $sql, 'ENGINE=InnoDB');
300
+		$table_name = "esp_datetime_ticket";
301
+		$sql = "DTK_ID int(10) unsigned NOT NULL AUTO_INCREMENT,
302 302
 					  DTT_ID int(10) unsigned NOT NULL,
303 303
 					  TKT_ID int(10) unsigned NOT NULL,
304 304
 					  PRIMARY KEY  (DTK_ID)";
305
-        $this->_table_is_new_in_this_version($table_name, $sql, 'ENGINE=InnoDB');
306
-        $table_name = "esp_ticket_template";
307
-        $sql = "TTM_ID int(10) unsigned NOT NULL AUTO_INCREMENT,
305
+		$this->_table_is_new_in_this_version($table_name, $sql, 'ENGINE=InnoDB');
306
+		$table_name = "esp_ticket_template";
307
+		$sql = "TTM_ID int(10) unsigned NOT NULL AUTO_INCREMENT,
308 308
 					  TTM_name varchar(45) NOT NULL,
309 309
 					  TTM_description text,
310 310
 					  TTM_file varchar(45),
311 311
 					  PRIMARY KEY  (TTM_ID)";
312
-        $this->_table_is_new_in_this_version($table_name, $sql, 'ENGINE=InnoDB');
313
-        $table_name = "esp_price";
314
-        $sql = "PRC_ID int(10) unsigned NOT NULL AUTO_INCREMENT,
312
+		$this->_table_is_new_in_this_version($table_name, $sql, 'ENGINE=InnoDB');
313
+		$table_name = "esp_price";
314
+		$sql = "PRC_ID int(10) unsigned NOT NULL AUTO_INCREMENT,
315 315
 					  PRT_ID tinyint(3) unsigned NOT NULL,
316 316
 					  PRC_amount decimal(10,3) NOT NULL DEFAULT '0.00',
317 317
 					  PRC_name varchar(245) NOT NULL,
@@ -322,9 +322,9 @@  discard block
 block discarded – undo
322 322
 					  PRC_order tinyint(3) unsigned NOT NULL DEFAULT '0',
323 323
 					  PRC_parent int(10) unsigned DEFAULT 0,
324 324
 					  PRIMARY KEY  (PRC_ID)";
325
-        $this->_table_is_new_in_this_version($table_name, $sql, 'ENGINE=InnoDB');
326
-        $table_name = "esp_price_type";
327
-        $sql = "PRT_ID tinyint(3) unsigned NOT NULL AUTO_INCREMENT,
325
+		$this->_table_is_new_in_this_version($table_name, $sql, 'ENGINE=InnoDB');
326
+		$table_name = "esp_price_type";
327
+		$sql = "PRT_ID tinyint(3) unsigned NOT NULL AUTO_INCREMENT,
328 328
 				  PRT_name varchar(45) NOT NULL,
329 329
 				  PBT_ID tinyint(3) unsigned NOT NULL DEFAULT '1',
330 330
 				  PRT_is_percent tinyint(1) NOT NULL DEFAULT '0',
@@ -332,9 +332,9 @@  discard block
 block discarded – undo
332 332
 				  PRT_deleted tinyint(1) NOT NULL DEFAULT '0',
333 333
 				  UNIQUE KEY PRT_name_UNIQUE (PRT_name),
334 334
 				  PRIMARY KEY  (PRT_ID)";
335
-        $this->_table_is_new_in_this_version($table_name, $sql, 'ENGINE=InnoDB');
336
-        $table_name = 'esp_question';
337
-        $sql = 'QST_ID int(10) unsigned NOT NULL AUTO_INCREMENT,
335
+		$this->_table_is_new_in_this_version($table_name, $sql, 'ENGINE=InnoDB');
336
+		$table_name = 'esp_question';
337
+		$sql = 'QST_ID int(10) unsigned NOT NULL AUTO_INCREMENT,
338 338
 					QST_display_text text NOT NULL,
339 339
 					QST_admin_label varchar(255) NOT NULL,
340 340
 					QST_system varchar(25) DEFAULT NULL,
@@ -346,10 +346,10 @@  discard block
 block discarded – undo
346 346
 					QST_wp_user bigint(20) unsigned NULL,
347 347
 					QST_deleted tinyint(1) unsigned NOT NULL DEFAULT 0,
348 348
 					PRIMARY KEY  (QST_ID)';
349
-        $this->_table_is_new_in_this_version($table_name, $sql, 'ENGINE=InnoDB');
350
-        $this->_get_table_manager()->dropIndex('esp_question_group', 'QSG_identifier_UNIQUE');
351
-        $table_name = 'esp_question_group';
352
-        $sql = 'QSG_ID int(10) unsigned NOT NULL AUTO_INCREMENT,
349
+		$this->_table_is_new_in_this_version($table_name, $sql, 'ENGINE=InnoDB');
350
+		$this->_get_table_manager()->dropIndex('esp_question_group', 'QSG_identifier_UNIQUE');
351
+		$table_name = 'esp_question_group';
352
+		$sql = 'QSG_ID int(10) unsigned NOT NULL AUTO_INCREMENT,
353 353
 					QSG_name varchar(255) NOT NULL,
354 354
 					QSG_identifier varchar(100) NOT NULL,
355 355
 					QSG_desc text NULL,
@@ -360,23 +360,23 @@  discard block
 block discarded – undo
360 360
 					QSG_deleted tinyint(1) unsigned NOT NULL DEFAULT 0,
361 361
 					PRIMARY KEY  (QSG_ID),
362 362
 					UNIQUE KEY QSG_identifier_UNIQUE (QSG_identifier ASC)';
363
-        $this->_table_is_new_in_this_version($table_name, $sql, 'ENGINE=InnoDB');
364
-        $table_name = 'esp_question_group_question';
365
-        $sql = "QGQ_ID int(10) unsigned NOT NULL AUTO_INCREMENT,
363
+		$this->_table_is_new_in_this_version($table_name, $sql, 'ENGINE=InnoDB');
364
+		$table_name = 'esp_question_group_question';
365
+		$sql = "QGQ_ID int(10) unsigned NOT NULL AUTO_INCREMENT,
366 366
 					QSG_ID int(10) unsigned NOT NULL,
367 367
 					QST_ID int(10) unsigned NOT NULL,
368 368
 					PRIMARY KEY  (QGQ_ID) ";
369
-        $this->_table_is_new_in_this_version($table_name, $sql, 'ENGINE=InnoDB');
370
-        $table_name = 'esp_question_option';
371
-        $sql = "QSO_ID int(10) unsigned NOT NULL AUTO_INCREMENT,
369
+		$this->_table_is_new_in_this_version($table_name, $sql, 'ENGINE=InnoDB');
370
+		$table_name = 'esp_question_option';
371
+		$sql = "QSO_ID int(10) unsigned NOT NULL AUTO_INCREMENT,
372 372
 					QSO_value varchar(255) NOT NULL,
373 373
 					QSO_desc text NOT NULL,
374 374
 					QST_ID int(10) unsigned NOT NULL,
375 375
 					QSO_deleted tinyint(1) unsigned NOT NULL DEFAULT 0,
376 376
 					PRIMARY KEY  (QSO_ID)";
377
-        $this->_table_is_new_in_this_version($table_name, $sql, 'ENGINE=InnoDB');
378
-        $table_name = 'esp_registration';
379
-        $sql = "REG_ID int(10) unsigned NOT NULL AUTO_INCREMENT,
377
+		$this->_table_is_new_in_this_version($table_name, $sql, 'ENGINE=InnoDB');
378
+		$table_name = 'esp_registration';
379
+		$sql = "REG_ID int(10) unsigned NOT NULL AUTO_INCREMENT,
380 380
 					  EVT_ID bigint(20) unsigned NOT NULL,
381 381
 					  ATT_ID bigint(20) unsigned NOT NULL,
382 382
 					  TXN_ID int(10) unsigned NOT NULL,
@@ -399,25 +399,25 @@  discard block
 block discarded – undo
399 399
 					  KEY STS_ID (STS_ID),
400 400
 					  KEY REG_url_link (REG_url_link),
401 401
 					  KEY REG_code (REG_code)";
402
-        $this->_table_is_new_in_this_version($table_name, $sql, 'ENGINE=InnoDB ');
403
-        $table_name = 'esp_checkin';
404
-        $sql = "CHK_ID int(10) unsigned NOT NULL AUTO_INCREMENT,
402
+		$this->_table_is_new_in_this_version($table_name, $sql, 'ENGINE=InnoDB ');
403
+		$table_name = 'esp_checkin';
404
+		$sql = "CHK_ID int(10) unsigned NOT NULL AUTO_INCREMENT,
405 405
 					REG_ID int(10) unsigned NOT NULL,
406 406
 					DTT_ID int(10) unsigned NOT NULL,
407 407
 					CHK_in tinyint(1) unsigned NOT NULL DEFAULT 1,
408 408
 					CHK_timestamp datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
409 409
 					PRIMARY KEY  (CHK_ID)";
410
-        $this->_table_is_new_in_this_version($table_name, $sql, 'ENGINE=InnoDB');
411
-        $table_name = 'esp_state';
412
-        $sql = "STA_ID smallint(5) unsigned NOT NULL AUTO_INCREMENT,
410
+		$this->_table_is_new_in_this_version($table_name, $sql, 'ENGINE=InnoDB');
411
+		$table_name = 'esp_state';
412
+		$sql = "STA_ID smallint(5) unsigned NOT NULL AUTO_INCREMENT,
413 413
 					  CNT_ISO varchar(2) COLLATE utf8_bin NOT NULL,
414 414
 					  STA_abbrev varchar(6) COLLATE utf8_bin NOT NULL,
415 415
 					  STA_name varchar(100) COLLATE utf8_bin NOT NULL,
416 416
 					  STA_active tinyint(1) DEFAULT '1',
417 417
 					  PRIMARY KEY  (STA_ID)";
418
-        $this->_table_is_new_in_this_version($table_name, $sql, 'ENGINE=InnoDB');
419
-        $table_name = 'esp_status';
420
-        $sql = "STS_ID varchar(3) COLLATE utf8_bin NOT NULL,
418
+		$this->_table_is_new_in_this_version($table_name, $sql, 'ENGINE=InnoDB');
419
+		$table_name = 'esp_status';
420
+		$sql = "STS_ID varchar(3) COLLATE utf8_bin NOT NULL,
421 421
 					  STS_code varchar(45) COLLATE utf8_bin NOT NULL,
422 422
 					  STS_type set('event','registration','transaction','payment','email') COLLATE utf8_bin NOT NULL,
423 423
 					  STS_can_edit tinyint(1) NOT NULL DEFAULT 0,
@@ -425,9 +425,9 @@  discard block
 block discarded – undo
425 425
 					  STS_open tinyint(1) NOT NULL DEFAULT 1,
426 426
 					  UNIQUE KEY STS_ID_UNIQUE (STS_ID),
427 427
 					  KEY STS_type (STS_type)";
428
-        $this->_table_is_new_in_this_version($table_name, $sql, 'ENGINE=InnoDB');
429
-        $table_name = 'esp_transaction';
430
-        $sql = "TXN_ID int(10) unsigned NOT NULL AUTO_INCREMENT,
428
+		$this->_table_is_new_in_this_version($table_name, $sql, 'ENGINE=InnoDB');
429
+		$table_name = 'esp_transaction';
430
+		$sql = "TXN_ID int(10) unsigned NOT NULL AUTO_INCREMENT,
431 431
 					  TXN_timestamp datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
432 432
 					  TXN_total decimal(10,3) DEFAULT '0.00',
433 433
 					  TXN_paid decimal(10,3) NOT NULL DEFAULT '0.00',
@@ -437,9 +437,9 @@  discard block
 block discarded – undo
437 437
 					  PRIMARY KEY  (TXN_ID),
438 438
 					  KEY TXN_timestamp (TXN_timestamp),
439 439
 					  KEY STS_ID (STS_ID)";
440
-        $this->_table_is_new_in_this_version($table_name, $sql, 'ENGINE=InnoDB');
441
-        $table_name = 'esp_venue_meta';
442
-        $sql = "VNUM_ID int(11) NOT NULL AUTO_INCREMENT,
440
+		$this->_table_is_new_in_this_version($table_name, $sql, 'ENGINE=InnoDB');
441
+		$table_name = 'esp_venue_meta';
442
+		$sql = "VNUM_ID int(11) NOT NULL AUTO_INCREMENT,
443 443
 			VNU_ID bigint(20) unsigned NOT NULL DEFAULT 0,
444 444
 			VNU_address varchar(255) DEFAULT NULL,
445 445
 			VNU_address2 varchar(255) DEFAULT NULL,
@@ -457,52 +457,52 @@  discard block
 block discarded – undo
457 457
 			PRIMARY KEY  (VNUM_ID),
458 458
 			KEY STA_ID (STA_ID),
459 459
 			KEY CNT_ISO (CNT_ISO)";
460
-        $this->_table_is_new_in_this_version($table_name, $sql, 'ENGINE=InnoDB');
461
-        // setting up the default stats and countries is also essential for the data migrations to run
462
-        // (because many need to convert old string states to foreign keys into the states table)
463
-        $this->insert_default_states();
464
-        $this->insert_default_countries();
465
-        // setting up default prices, price types, and tickets is also essential for the price migrations
466
-        $this->insert_default_price_types();
467
-        $this->insert_default_prices();
468
-        $this->insert_default_tickets();
469
-        // setting up the config wp option pretty well counts as a 'schema change', or at least should happen ehre
470
-        EE_Config::instance()->update_espresso_config(false, true);
471
-        return true;
472
-    }
473
-
474
-
475
-
476
-    /**
477
-     * Yes we could have cleaned up the ee3 tables here. But just in case someone
478
-     * didn't backup their DB, and decides they want ot keep using EE3, we'll
479
-     * leave them for now. Mayeb remove them in 4.5 or something.
480
-     *
481
-     * @return boolean
482
-     */
483
-    public function schema_changes_after_migration()
484
-    {
485
-        return true;
486
-    }
487
-
488
-
489
-
490
-    /**
491
-     * insert_default_states
492
-     *
493
-     * @access public
494
-     * @static
495
-     * @return void
496
-     */
497
-    public function insert_default_states()
498
-    {
499
-        global $wpdb;
500
-        $state_table = $wpdb->prefix . "esp_state";
501
-        if ($this->_get_table_analysis()->tableExists($state_table)) {
502
-            $SQL = "SELECT COUNT('STA_ID') FROM " . $state_table;
503
-            $states = $wpdb->get_var($SQL);
504
-            if (! $states) {
505
-                $SQL = "INSERT INTO " . $state_table . "
460
+		$this->_table_is_new_in_this_version($table_name, $sql, 'ENGINE=InnoDB');
461
+		// setting up the default stats and countries is also essential for the data migrations to run
462
+		// (because many need to convert old string states to foreign keys into the states table)
463
+		$this->insert_default_states();
464
+		$this->insert_default_countries();
465
+		// setting up default prices, price types, and tickets is also essential for the price migrations
466
+		$this->insert_default_price_types();
467
+		$this->insert_default_prices();
468
+		$this->insert_default_tickets();
469
+		// setting up the config wp option pretty well counts as a 'schema change', or at least should happen ehre
470
+		EE_Config::instance()->update_espresso_config(false, true);
471
+		return true;
472
+	}
473
+
474
+
475
+
476
+	/**
477
+	 * Yes we could have cleaned up the ee3 tables here. But just in case someone
478
+	 * didn't backup their DB, and decides they want ot keep using EE3, we'll
479
+	 * leave them for now. Mayeb remove them in 4.5 or something.
480
+	 *
481
+	 * @return boolean
482
+	 */
483
+	public function schema_changes_after_migration()
484
+	{
485
+		return true;
486
+	}
487
+
488
+
489
+
490
+	/**
491
+	 * insert_default_states
492
+	 *
493
+	 * @access public
494
+	 * @static
495
+	 * @return void
496
+	 */
497
+	public function insert_default_states()
498
+	{
499
+		global $wpdb;
500
+		$state_table = $wpdb->prefix . "esp_state";
501
+		if ($this->_get_table_analysis()->tableExists($state_table)) {
502
+			$SQL = "SELECT COUNT('STA_ID') FROM " . $state_table;
503
+			$states = $wpdb->get_var($SQL);
504
+			if (! $states) {
505
+				$SQL = "INSERT INTO " . $state_table . "
506 506
 				(STA_ID, CNT_ISO, STA_abbrev, STA_name, STA_active) VALUES
507 507
 				(1, 'US', 'AK', 'Alaska', 1),
508 508
 				(2, 'US', 'AL', 'Alabama', 1),
@@ -576,29 +576,29 @@  discard block
 block discarded – undo
576 576
 				(70, 'CA', 'NT', 'Northwest Territories', 1),
577 577
 				(71, 'CA', 'NU', 'Nunavut', 1),
578 578
 				(72, 'CA', 'YT', 'Yukon', 1);";
579
-                $wpdb->query($SQL);
580
-            }
581
-        }
582
-    }
583
-
584
-
585
-
586
-    /**
587
-     * insert_default_countries
588
-     *
589
-     * @access public
590
-     * @static
591
-     * @return void
592
-     */
593
-    public function insert_default_countries()
594
-    {
595
-        global $wpdb;
596
-        $country_table = $wpdb->prefix . "esp_country";
597
-        if ($this->_get_table_analysis()->tableExists($country_table)) {
598
-            $SQL = "SELECT COUNT('CNT_ISO') FROM " . $country_table;
599
-            $countries = $wpdb->get_var($SQL);
600
-            if (! $countries) {
601
-                $SQL = "INSERT INTO " . $country_table . "
579
+				$wpdb->query($SQL);
580
+			}
581
+		}
582
+	}
583
+
584
+
585
+
586
+	/**
587
+	 * insert_default_countries
588
+	 *
589
+	 * @access public
590
+	 * @static
591
+	 * @return void
592
+	 */
593
+	public function insert_default_countries()
594
+	{
595
+		global $wpdb;
596
+		$country_table = $wpdb->prefix . "esp_country";
597
+		if ($this->_get_table_analysis()->tableExists($country_table)) {
598
+			$SQL = "SELECT COUNT('CNT_ISO') FROM " . $country_table;
599
+			$countries = $wpdb->get_var($SQL);
600
+			if (! $countries) {
601
+				$SQL = "INSERT INTO " . $country_table . "
602 602
 				(CNT_ISO, CNT_ISO3, RGN_ID, CNT_name, CNT_cur_code, CNT_cur_single, CNT_cur_plural, CNT_cur_sign, CNT_cur_sign_b4, CNT_cur_dec_plc, CNT_tel_code, CNT_is_EU, CNT_active) VALUES
603 603
 				('AD', 'AND', 0, 'Andorra', 'EUR', 'Euro', 'Euros', '€', 1, 2, '+376', 0, 0),
604 604
 				('AE', 'ARE', 0, 'United Arab Emirates', 'AED', 'Dirham', 'Dirhams', 'د.إ', 1, 2, '+971', 0, 0),
@@ -826,984 +826,984 @@  discard block
 block discarded – undo
826 826
 				('ZA', 'ZAF', 0, 'South Africa', 'ZAR', 'Rand', 'Rands', 'R', 1, 2, '+27', 0, 0),
827 827
 				('ZM', 'ZMB', 0, 'Zambia', 'ZMK', 'Kwacha', 'Kwachas', '', 1, 2, '+260', 0, 0),
828 828
 				('ZW', 'ZWE', 0, 'Zimbabwe', 'ZWD', 'Dollar', 'Dollars', 'Z$', 1, 2, '+263', 0, 0);";
829
-                $wpdb->query($SQL);
830
-            }
831
-        }
832
-    }
833
-
834
-
835
-
836
-    /**
837
-     * insert_default_price_types
838
-     *
839
-     * @access public
840
-     * @static
841
-     * @return void
842
-     */
843
-    public function insert_default_price_types()
844
-    {
845
-        global $wpdb;
846
-        $price_type_table = $wpdb->prefix . "esp_price_type";
847
-        if ($this->_get_table_analysis()->tableExists($price_type_table)) {
848
-            $SQL = 'SELECT COUNT(PRT_ID) FROM ' . $price_type_table;
849
-            $price_types_exist = $wpdb->get_var($SQL);
850
-            if (! $price_types_exist) {
851
-                $SQL = "INSERT INTO $price_type_table ( PRT_ID, PRT_name, PBT_ID, PRT_is_percent, PRT_order, PRT_deleted ) VALUES
829
+				$wpdb->query($SQL);
830
+			}
831
+		}
832
+	}
833
+
834
+
835
+
836
+	/**
837
+	 * insert_default_price_types
838
+	 *
839
+	 * @access public
840
+	 * @static
841
+	 * @return void
842
+	 */
843
+	public function insert_default_price_types()
844
+	{
845
+		global $wpdb;
846
+		$price_type_table = $wpdb->prefix . "esp_price_type";
847
+		if ($this->_get_table_analysis()->tableExists($price_type_table)) {
848
+			$SQL = 'SELECT COUNT(PRT_ID) FROM ' . $price_type_table;
849
+			$price_types_exist = $wpdb->get_var($SQL);
850
+			if (! $price_types_exist) {
851
+				$SQL = "INSERT INTO $price_type_table ( PRT_ID, PRT_name, PBT_ID, PRT_is_percent, PRT_order, PRT_deleted ) VALUES
852 852
 							(1, '" . esc_html__('Base Price', 'event_espresso') . "', 1,  0, 0, 0),
853 853
 							(2, '" . esc_html__('Percent Discount', 'event_espresso') . "', 2,  1, 20, 0),
854 854
 							(3, '" . esc_html__('Fixed Discount', 'event_espresso') . "', 2,  0, 30, 0),
855 855
 							(4, '" . esc_html__('Percent Surcharge', 'event_espresso') . "', 3,  1, 40, 0),
856 856
 							(5, '" . esc_html__('Fixed Surcharge', 'event_espresso') . "', 3,  0, 50, 0);";
857
-                $SQL = apply_filters('FHEE__EE_DMS_4_1_0__insert_default_price_types__SQL', $SQL);
858
-                $wpdb->query($SQL);
859
-            }
860
-        }
861
-    }
862
-
863
-
864
-
865
-    /**
866
-     * insert_default_prices. We assume we're upgrading to regular here.
867
-     * If we're INSTALLING 4.1 CAF, then we add a few extra default prices
868
-     * when EEH_Activaion's initialize_db_content is called via  ahook in
869
-     * EE_BRewing_regular
870
-     *
871
-     * @access public
872
-     * @static
873
-     * @return void
874
-     */
875
-    public function insert_default_prices()
876
-    {
877
-        global $wpdb;
878
-        $price_table = $wpdb->prefix . "esp_price";
879
-        if ($this->_get_table_analysis()->tableExists($price_table)) {
880
-            $SQL = 'SELECT COUNT(PRC_ID) FROM ' . $price_table;
881
-            $prices_exist = $wpdb->get_var($SQL);
882
-            if (! $prices_exist) {
883
-                $SQL = "INSERT INTO $price_table
857
+				$SQL = apply_filters('FHEE__EE_DMS_4_1_0__insert_default_price_types__SQL', $SQL);
858
+				$wpdb->query($SQL);
859
+			}
860
+		}
861
+	}
862
+
863
+
864
+
865
+	/**
866
+	 * insert_default_prices. We assume we're upgrading to regular here.
867
+	 * If we're INSTALLING 4.1 CAF, then we add a few extra default prices
868
+	 * when EEH_Activaion's initialize_db_content is called via  ahook in
869
+	 * EE_BRewing_regular
870
+	 *
871
+	 * @access public
872
+	 * @static
873
+	 * @return void
874
+	 */
875
+	public function insert_default_prices()
876
+	{
877
+		global $wpdb;
878
+		$price_table = $wpdb->prefix . "esp_price";
879
+		if ($this->_get_table_analysis()->tableExists($price_table)) {
880
+			$SQL = 'SELECT COUNT(PRC_ID) FROM ' . $price_table;
881
+			$prices_exist = $wpdb->get_var($SQL);
882
+			if (! $prices_exist) {
883
+				$SQL = "INSERT INTO $price_table
884 884
 							(PRC_ID, PRT_ID, PRC_amount, PRC_name, PRC_desc,  PRC_is_default, PRC_overrides, PRC_order, PRC_deleted, PRC_parent ) VALUES
885 885
 							(1, 1, '0.00', 'Free Admission', '', 1, null, 0, 0, 0);";
886
-                $SQL = apply_filters('FHEE__EE_DMS_4_1_0__insert_default_prices__SQL', $SQL);
887
-                $wpdb->query($SQL);
888
-            }
889
-        }
890
-    }
891
-
892
-
893
-
894
-    /**
895
-     * insert default ticket
896
-     *
897
-     * @access public
898
-     * @static
899
-     * @return void
900
-     */
901
-    public function insert_default_tickets()
902
-    {
903
-        global $wpdb;
904
-        $ticket_table = $wpdb->prefix . "esp_ticket";
905
-        if ($this->_get_table_analysis()->tableExists($ticket_table)) {
906
-            $SQL = 'SELECT COUNT(TKT_ID) FROM ' . $ticket_table;
907
-            $tickets_exist = $wpdb->get_var($SQL);
908
-            if (! $tickets_exist) {
909
-                $SQL = "INSERT INTO $ticket_table
886
+				$SQL = apply_filters('FHEE__EE_DMS_4_1_0__insert_default_prices__SQL', $SQL);
887
+				$wpdb->query($SQL);
888
+			}
889
+		}
890
+	}
891
+
892
+
893
+
894
+	/**
895
+	 * insert default ticket
896
+	 *
897
+	 * @access public
898
+	 * @static
899
+	 * @return void
900
+	 */
901
+	public function insert_default_tickets()
902
+	{
903
+		global $wpdb;
904
+		$ticket_table = $wpdb->prefix . "esp_ticket";
905
+		if ($this->_get_table_analysis()->tableExists($ticket_table)) {
906
+			$SQL = 'SELECT COUNT(TKT_ID) FROM ' . $ticket_table;
907
+			$tickets_exist = $wpdb->get_var($SQL);
908
+			if (! $tickets_exist) {
909
+				$SQL = "INSERT INTO $ticket_table
910 910
 					( TKT_ID, TTM_ID, TKT_name, TKT_description, TKT_qty, TKT_sold, TKT_uses, TKT_min, TKT_max, TKT_price, TKT_start_date, TKT_end_date, TKT_taxable, TKT_order, TKT_row, TKT_is_default, TKT_parent, TKT_deleted ) VALUES
911 911
 					( 1, 0, '"
912
-                       . esc_html__("Free Ticket", "event_espresso")
913
-                       . "', '', 100, 0, -1, 0, -1, 0.00, '0000-00-00 00:00:00', '0000-00-00 00:00:00', 0, 0, 1, 1, 0, 0);";
914
-                $SQL = apply_filters('FHEE__EE_DMS_4_1_0__insert_default_tickets__SQL', $SQL);
915
-                $wpdb->query($SQL);
916
-            }
917
-        }
918
-        $ticket_price_table = $wpdb->prefix . "esp_ticket_price";
919
-        if ($this->_get_table_analysis()->tableExists($ticket_price_table)) {
920
-            $SQL = 'SELECT COUNT(TKP_ID) FROM ' . $ticket_price_table;
921
-            $ticket_prc_exist = $wpdb->get_var($SQL);
922
-            if (! $ticket_prc_exist) {
923
-                $SQL = "INSERT INTO $ticket_price_table
912
+					   . esc_html__("Free Ticket", "event_espresso")
913
+					   . "', '', 100, 0, -1, 0, -1, 0.00, '0000-00-00 00:00:00', '0000-00-00 00:00:00', 0, 0, 1, 1, 0, 0);";
914
+				$SQL = apply_filters('FHEE__EE_DMS_4_1_0__insert_default_tickets__SQL', $SQL);
915
+				$wpdb->query($SQL);
916
+			}
917
+		}
918
+		$ticket_price_table = $wpdb->prefix . "esp_ticket_price";
919
+		if ($this->_get_table_analysis()->tableExists($ticket_price_table)) {
920
+			$SQL = 'SELECT COUNT(TKP_ID) FROM ' . $ticket_price_table;
921
+			$ticket_prc_exist = $wpdb->get_var($SQL);
922
+			if (! $ticket_prc_exist) {
923
+				$SQL = "INSERT INTO $ticket_price_table
924 924
 				( TKP_ID, TKT_ID, PRC_ID ) VALUES
925 925
 				( 1, 1, 1 )
926 926
 				";
927
-                $SQL = apply_filters('FHEE__EE_DMS_4_1_0__insert_default_tickets__SQL__ticket_price', $SQL);
928
-                $wpdb->query($SQL);
929
-            }
930
-        }
931
-    }
932
-
933
-
934
-
935
-    /**
936
-     * Gets a country entry as an array, or creates one if none is found. Much like EEM_Country::instance()->get_one(),
937
-     * but is independent of outside code which can change in future versions of EE. Also, $country_name CAN be a 3.1
938
-     * country ID (int), a 2-letter ISO, 3-letter ISO, or name
939
-     *
940
-     * @global type  $wpdb
941
-     * @param string $country_name
942
-     * @return array where keys are columns, values are column values
943
-     */
944
-    public function get_or_create_country($country_name)
945
-    {
946
-        if (! $country_name) {
947
-            throw new EE_Error(esc_html__("Could not get a country because country name is blank", "event_espresso"));
948
-        }
949
-        global $wpdb;
950
-        $country_table = $wpdb->prefix . "esp_country";
951
-        if (is_int($country_name)) {
952
-            $country_name = $this->get_iso_from_3_1_country_id($country_name);
953
-        }
954
-        $country = $wpdb->get_row($wpdb->prepare("SELECT * FROM $country_table WHERE
927
+				$SQL = apply_filters('FHEE__EE_DMS_4_1_0__insert_default_tickets__SQL__ticket_price', $SQL);
928
+				$wpdb->query($SQL);
929
+			}
930
+		}
931
+	}
932
+
933
+
934
+
935
+	/**
936
+	 * Gets a country entry as an array, or creates one if none is found. Much like EEM_Country::instance()->get_one(),
937
+	 * but is independent of outside code which can change in future versions of EE. Also, $country_name CAN be a 3.1
938
+	 * country ID (int), a 2-letter ISO, 3-letter ISO, or name
939
+	 *
940
+	 * @global type  $wpdb
941
+	 * @param string $country_name
942
+	 * @return array where keys are columns, values are column values
943
+	 */
944
+	public function get_or_create_country($country_name)
945
+	{
946
+		if (! $country_name) {
947
+			throw new EE_Error(esc_html__("Could not get a country because country name is blank", "event_espresso"));
948
+		}
949
+		global $wpdb;
950
+		$country_table = $wpdb->prefix . "esp_country";
951
+		if (is_int($country_name)) {
952
+			$country_name = $this->get_iso_from_3_1_country_id($country_name);
953
+		}
954
+		$country = $wpdb->get_row($wpdb->prepare("SELECT * FROM $country_table WHERE
955 955
 			CNT_ISO LIKE %s OR
956 956
 			CNT_ISO3 LIKE %s OR
957 957
 			CNT_name LIKE %s LIMIT 1", $country_name, $country_name, $country_name), ARRAY_A);
958
-        if (! $country) {
959
-            // insert a new one then
960
-            $cols_n_values = array(
961
-                    'CNT_ISO'         => $this->_find_available_country_iso(2),
962
-                    'CNT_ISO3'        => $this->_find_available_country_iso(3),
963
-                    'RGN_ID'          => 0,
964
-                    'CNT_name'        => $country_name,
965
-                    'CNT_cur_code'    => 'USD',
966
-                    'CNT_cur_single'  => 'Dollar',
967
-                    'CNT_cur_plural'  => 'Dollars',
968
-                    'CNT_cur_sign'    => '&#36;',
969
-                    'CNT_cur_sign_b4' => true,
970
-                    'CNT_cur_dec_plc' => 2,
971
-                    'CNT_cur_dec_mrk' => '.',
972
-                    'CNT_cur_thsnds'  => ',',
973
-                    'CNT_tel_code'    => '+1',
974
-                    'CNT_is_EU'       => false,
975
-                    'CNT_active'      => true,
976
-            );
977
-            $data_types = array(
978
-                    '%s',// CNT_ISO
979
-                    '%s',// CNT_ISO3
980
-                    '%d',// RGN_ID
981
-                    '%s',// CNT_name
982
-                    '%s',// CNT_cur_code
983
-                    '%s',// CNT_cur_single
984
-                    '%s',// CNT_cur_plural
985
-                    '%s',// CNT_cur_sign
986
-                    '%d',// CNT_cur_sign_b4
987
-                    '%d',// CNT_cur_dec_plc
988
-                    '%s',// CNT_cur_dec_mrk
989
-                    '%s',// CNT_cur_thsnds
990
-                    '%s',// CNT_tel_code
991
-                    '%d',// CNT_is_EU
992
-                    '%d',// CNT_active
993
-            );
994
-            $success = $wpdb->insert(
995
-                $country_table,
996
-                $cols_n_values,
997
-                $data_types
998
-            );
999
-            if (! $success) {
1000
-                throw new EE_Error($this->_create_error_message_for_db_insertion(
1001
-                    'N/A',
1002
-                    array('country_id' => $country_name),
1003
-                    $country_table,
1004
-                    $cols_n_values,
1005
-                    $data_types
1006
-                ));
1007
-            }
1008
-            $country = $cols_n_values;
1009
-        }
1010
-        return $country;
1011
-    }
1012
-
1013
-
1014
-
1015
-    /**
1016
-     * finds a country iso which hasnt been used yet
1017
-     *
1018
-     * @global type $wpdb
1019
-     * @return string
1020
-     */
1021
-    private function _find_available_country_iso($num_letters = 2)
1022
-    {
1023
-        global $wpdb;
1024
-        $country_table = $wpdb->prefix . "esp_country";
1025
-        $attempts = 0;
1026
-        do {
1027
-            $current_iso = strtoupper(wp_generate_password($num_letters, false));
1028
-            $country_with_that_iso = $wpdb->get_var($wpdb->prepare("SELECT count(CNT_ISO) FROM "
1029
-                                                                   . $country_table
1030
-                                                                   . " WHERE CNT_ISO=%s", $current_iso));
1031
-            $attempts++;
1032
-            // keep going until we find an available country code, or we arbitrarily
1033
-            // decide we've tried this enough. Somehow they have way too many countries
1034
-            // (probably because they're mis-using the EE3 country_id like a custom question)
1035
-        } while (intval($country_with_that_iso) && $attempts < 200);
1036
-        return $current_iso;
1037
-    }
1038
-
1039
-
1040
-
1041
-    /**
1042
-     * Gets a state entry as an array, or creates one if none is found. Much like EEM_State::instance()->get_one(), but
1043
-     * is independent of outside code which can change in future versions of EE
1044
-     *
1045
-     * @global type  $wpdb
1046
-     * @param string $state_name
1047
-     * @return array where keys are columns, values are column values
1048
-     */
1049
-    public function get_or_create_state($state_name, $country_name = '')
1050
-    {
1051
-        if (! $state_name) {
1052
-            throw new EE_Error(esc_html__(
1053
-                "Could not get-or-create state because no state name was provided",
1054
-                "event_espresso"
1055
-            ));
1056
-        }
1057
-        try {
1058
-            $country = $this->get_or_create_country($country_name);
1059
-            $country_iso = $country['CNT_ISO'];
1060
-        } catch (EE_Error $e) {
1061
-            $country_iso = $this->get_default_country_iso();
1062
-        }
1063
-        global $wpdb;
1064
-        $state_table = $wpdb->prefix . "esp_state";
1065
-        $state = $wpdb->get_row($wpdb->prepare("SELECT * FROM $state_table WHERE
958
+		if (! $country) {
959
+			// insert a new one then
960
+			$cols_n_values = array(
961
+					'CNT_ISO'         => $this->_find_available_country_iso(2),
962
+					'CNT_ISO3'        => $this->_find_available_country_iso(3),
963
+					'RGN_ID'          => 0,
964
+					'CNT_name'        => $country_name,
965
+					'CNT_cur_code'    => 'USD',
966
+					'CNT_cur_single'  => 'Dollar',
967
+					'CNT_cur_plural'  => 'Dollars',
968
+					'CNT_cur_sign'    => '&#36;',
969
+					'CNT_cur_sign_b4' => true,
970
+					'CNT_cur_dec_plc' => 2,
971
+					'CNT_cur_dec_mrk' => '.',
972
+					'CNT_cur_thsnds'  => ',',
973
+					'CNT_tel_code'    => '+1',
974
+					'CNT_is_EU'       => false,
975
+					'CNT_active'      => true,
976
+			);
977
+			$data_types = array(
978
+					'%s',// CNT_ISO
979
+					'%s',// CNT_ISO3
980
+					'%d',// RGN_ID
981
+					'%s',// CNT_name
982
+					'%s',// CNT_cur_code
983
+					'%s',// CNT_cur_single
984
+					'%s',// CNT_cur_plural
985
+					'%s',// CNT_cur_sign
986
+					'%d',// CNT_cur_sign_b4
987
+					'%d',// CNT_cur_dec_plc
988
+					'%s',// CNT_cur_dec_mrk
989
+					'%s',// CNT_cur_thsnds
990
+					'%s',// CNT_tel_code
991
+					'%d',// CNT_is_EU
992
+					'%d',// CNT_active
993
+			);
994
+			$success = $wpdb->insert(
995
+				$country_table,
996
+				$cols_n_values,
997
+				$data_types
998
+			);
999
+			if (! $success) {
1000
+				throw new EE_Error($this->_create_error_message_for_db_insertion(
1001
+					'N/A',
1002
+					array('country_id' => $country_name),
1003
+					$country_table,
1004
+					$cols_n_values,
1005
+					$data_types
1006
+				));
1007
+			}
1008
+			$country = $cols_n_values;
1009
+		}
1010
+		return $country;
1011
+	}
1012
+
1013
+
1014
+
1015
+	/**
1016
+	 * finds a country iso which hasnt been used yet
1017
+	 *
1018
+	 * @global type $wpdb
1019
+	 * @return string
1020
+	 */
1021
+	private function _find_available_country_iso($num_letters = 2)
1022
+	{
1023
+		global $wpdb;
1024
+		$country_table = $wpdb->prefix . "esp_country";
1025
+		$attempts = 0;
1026
+		do {
1027
+			$current_iso = strtoupper(wp_generate_password($num_letters, false));
1028
+			$country_with_that_iso = $wpdb->get_var($wpdb->prepare("SELECT count(CNT_ISO) FROM "
1029
+																   . $country_table
1030
+																   . " WHERE CNT_ISO=%s", $current_iso));
1031
+			$attempts++;
1032
+			// keep going until we find an available country code, or we arbitrarily
1033
+			// decide we've tried this enough. Somehow they have way too many countries
1034
+			// (probably because they're mis-using the EE3 country_id like a custom question)
1035
+		} while (intval($country_with_that_iso) && $attempts < 200);
1036
+		return $current_iso;
1037
+	}
1038
+
1039
+
1040
+
1041
+	/**
1042
+	 * Gets a state entry as an array, or creates one if none is found. Much like EEM_State::instance()->get_one(), but
1043
+	 * is independent of outside code which can change in future versions of EE
1044
+	 *
1045
+	 * @global type  $wpdb
1046
+	 * @param string $state_name
1047
+	 * @return array where keys are columns, values are column values
1048
+	 */
1049
+	public function get_or_create_state($state_name, $country_name = '')
1050
+	{
1051
+		if (! $state_name) {
1052
+			throw new EE_Error(esc_html__(
1053
+				"Could not get-or-create state because no state name was provided",
1054
+				"event_espresso"
1055
+			));
1056
+		}
1057
+		try {
1058
+			$country = $this->get_or_create_country($country_name);
1059
+			$country_iso = $country['CNT_ISO'];
1060
+		} catch (EE_Error $e) {
1061
+			$country_iso = $this->get_default_country_iso();
1062
+		}
1063
+		global $wpdb;
1064
+		$state_table = $wpdb->prefix . "esp_state";
1065
+		$state = $wpdb->get_row($wpdb->prepare("SELECT * FROM $state_table WHERE
1066 1066
 			(STA_abbrev LIKE %s OR
1067 1067
 			STA_name LIKE %s) AND
1068 1068
 			CNT_ISO LIKE %s LIMIT 1", $state_name, $state_name, $country_iso), ARRAY_A);
1069
-        if (! $state) {
1070
-            // insert a new one then
1071
-            $cols_n_values = array(
1072
-                    'CNT_ISO'    => $country_iso,
1073
-                    'STA_abbrev' => substr($state_name, 0, 6),
1074
-                    'STA_name'   => $state_name,
1075
-                    'STA_active' => true,
1076
-            );
1077
-            $data_types = array(
1078
-                    '%s',// CNT_ISO
1079
-                    '%s',// STA_abbrev
1080
-                    '%s',// STA_name
1081
-                    '%d',// STA_active
1082
-            );
1083
-            $success = $wpdb->insert($state_table, $cols_n_values, $data_types);
1084
-            if (! $success) {
1085
-                throw new EE_Error($this->_create_error_message_for_db_insertion(
1086
-                    'N/A',
1087
-                    array('state' => $state_name, 'country_id' => $country_name),
1088
-                    $state_table,
1089
-                    $cols_n_values,
1090
-                    $data_types
1091
-                ));
1092
-            }
1093
-            $state = $cols_n_values;
1094
-            $state['STA_ID'] = $wpdb->insert_id;
1095
-        }
1096
-        return $state;
1097
-    }
1098
-
1099
-
1100
-
1101
-    /**
1102
-     * Fixes times like "5:00 PM" into the expected 24-hour format "17:00".
1103
-     * THis is actually just copied from the 3.1 JSON API because it needed to do the exact same thing
1104
-     *
1105
-     * @param type $timeString
1106
-     * @return string in the php DATETIME format: "G:i" (24-hour format hour with leading zeros, a colon, and minutes
1107
-     *                with leading zeros)
1108
-     */
1109
-    public function convertTimeFromAMPM($timeString)
1110
-    {
1111
-        $matches = array();
1112
-        preg_match("~(\\d*):(\\d*)~", $timeString, $matches);
1113
-        if (! $matches || count($matches) < 3) {
1114
-            $hour = '00';
1115
-            $minutes = '00';
1116
-        } else {
1117
-            $hour = intval($matches[1]);
1118
-            $minutes = $matches[2];
1119
-        }
1120
-        if (strpos($timeString, 'PM') || strpos($timeString, 'pm')) {
1121
-            $hour = intval($hour) + 12;
1122
-        }
1123
-        $hour = str_pad("$hour", 2, '0', STR_PAD_LEFT);
1124
-        $minutes = str_pad("$minutes", 2, '0', STR_PAD_LEFT);
1125
-        return "$hour:$minutes";
1126
-    }
1127
-
1128
-
1129
-
1130
-    /**
1131
-     * Gets the ISO3 fora country given its 3.1 country ID.
1132
-     *
1133
-     * @param int $country_id
1134
-     * @return string the country's ISO3 code
1135
-     */
1136
-    public function get_iso_from_3_1_country_id($country_id)
1137
-    {
1138
-        $old_countries = array(
1139
-                array(64, 'United States', 'US', 'USA', 1),
1140
-                array(15, 'Australia', 'AU', 'AUS', 1),
1141
-                array(39, 'Canada', 'CA', 'CAN', 1),
1142
-                array(171, 'United Kingdom', 'GB', 'GBR', 1),
1143
-                array(70, 'France', 'FR', 'FRA', 2),
1144
-                array(111, 'Italy', 'IT', 'ITA', 2),
1145
-                array(63, 'Spain', 'ES', 'ESP', 2),
1146
-                array(1, 'Afghanistan', 'AF', 'AFG', 1),
1147
-                array(2, 'Albania', 'AL', 'ALB', 1),
1148
-                array(3, 'Germany', 'DE', 'DEU', 2),
1149
-                array(198, 'Switzerland', 'CH', 'CHE', 1),
1150
-                array(87, 'Netherlands', 'NL', 'NLD', 2),
1151
-                array(197, 'Sweden', 'SE', 'SWE', 1),
1152
-                array(230, 'Akrotiri and Dhekelia', 'CY', 'CYP', 2),
1153
-                array(4, 'Andorra', 'AD', 'AND', 2),
1154
-                array(5, 'Angola', 'AO', 'AGO', 1),
1155
-                array(6, 'Anguilla', 'AI', 'AIA', 1),
1156
-                array(7, 'Antarctica', 'AQ', 'ATA', 1),
1157
-                array(8, 'Antigua and Barbuda', 'AG', 'ATG', 1),
1158
-                array(10, 'Saudi Arabia', 'SA', 'SAU', 1),
1159
-                array(11, 'Algeria', 'DZ', 'DZA', 1),
1160
-                array(12, 'Argentina', 'AR', 'ARG', 1),
1161
-                array(13, 'Armenia', 'AM', 'ARM', 1),
1162
-                array(14, 'Aruba', 'AW', 'ABW', 1),
1163
-                array(16, 'Austria', 'AT', 'AUT', 2),
1164
-                array(17, 'Azerbaijan', 'AZ', 'AZE', 1),
1165
-                array(18, 'Bahamas', 'BS', 'BHS', 1),
1166
-                array(19, 'Bahrain', 'BH', 'BHR', 1),
1167
-                array(20, 'Bangladesh', 'BD', 'BGD', 1),
1168
-                array(21, 'Barbados', 'BB', 'BRB', 1),
1169
-                array(22, 'Belgium ', 'BE', 'BEL', 2),
1170
-                array(23, 'Belize', 'BZ', 'BLZ', 1),
1171
-                array(24, 'Benin', 'BJ', 'BEN', 1),
1172
-                array(25, 'Bermudas', 'BM', 'BMU', 1),
1173
-                array(26, 'Belarus', 'BY', 'BLR', 1),
1174
-                array(27, 'Bolivia', 'BO', 'BOL', 1),
1175
-                array(28, 'Bosnia and Herzegovina', 'BA', 'BIH', 1),
1176
-                array(29, 'Botswana', 'BW', 'BWA', 1),
1177
-                array(96, 'Bouvet Island', 'BV', 'BVT', 1),
1178
-                array(30, 'Brazil', 'BR', 'BRA', 1),
1179
-                array(31, 'Brunei', 'BN', 'BRN', 1),
1180
-                array(32, 'Bulgaria', 'BG', 'BGR', 1),
1181
-                array(33, 'Burkina Faso', 'BF', 'BFA', 1),
1182
-                array(34, 'Burundi', 'BI', 'BDI', 1),
1183
-                array(35, 'Bhutan', 'BT', 'BTN', 1),
1184
-                array(36, 'Cape Verde', 'CV', 'CPV', 1),
1185
-                array(37, 'Cambodia', 'KH', 'KHM', 1),
1186
-                array(38, 'Cameroon', 'CM', 'CMR', 1),
1187
-                array(98, 'Cayman Islands', 'KY', 'CYM', 1),
1188
-                array(172, 'Central African Republic', 'CF', 'CAF', 1),
1189
-                array(40, 'Chad', 'TD', 'TCD', 1),
1190
-                array(41, 'Chile', 'CL', 'CHL', 1),
1191
-                array(42, 'China', 'CN', 'CHN', 1),
1192
-                array(105, 'Christmas Island', 'CX', 'CXR', 1),
1193
-                array(43, 'Cyprus', 'CY', 'CYP', 2),
1194
-                array(99, 'Cocos Island', 'CC', 'CCK', 1),
1195
-                array(100, 'Cook Islands', 'CK', 'COK', 1),
1196
-                array(44, 'Colombia', 'CO', 'COL', 1),
1197
-                array(45, 'Comoros', 'KM', 'COM', 1),
1198
-                array(46, 'Congo', 'CG', 'COG', 1),
1199
-                array(47, 'North Korea', 'KP', 'PRK', 1),
1200
-                array(50, 'Costa Rica', 'CR', 'CRI', 1),
1201
-                array(51, 'Croatia', 'HR', 'HRV', 1),
1202
-                array(52, 'Cuba', 'CU', 'CUB', 1),
1203
-                array(173, 'Czech Republic', 'CZ', 'CZE', 1),
1204
-                array(53, 'Denmark', 'DK', 'DNK', 1),
1205
-                array(54, 'Djibouti', 'DJ', 'DJI', 1),
1206
-                array(55, 'Dominica', 'DM', 'DMA', 1),
1207
-                array(174, 'Dominican Republic', 'DO', 'DOM', 1),
1208
-                array(56, 'Ecuador', 'EC', 'ECU', 1),
1209
-                array(57, 'Egypt', 'EG', 'EGY', 1),
1210
-                array(58, 'El Salvador', 'SV', 'SLV', 1),
1211
-                array(60, 'Eritrea', 'ER', 'ERI', 1),
1212
-                array(61, 'Slovakia', 'SK', 'SVK', 2),
1213
-                array(62, 'Slovenia', 'SI', 'SVN', 2),
1214
-                array(65, 'Estonia', 'EE', 'EST', 2),
1215
-                array(66, 'Ethiopia', 'ET', 'ETH', 1),
1216
-                array(102, 'Faroe islands', 'FO', 'FRO', 1),
1217
-                array(103, 'Falkland Islands', 'FK', 'FLK', 1),
1218
-                array(67, 'Fiji', 'FJ', 'FJI', 1),
1219
-                array(69, 'Finland', 'FI', 'FIN', 2),
1220
-                array(71, 'Gabon', 'GA', 'GAB', 1),
1221
-                array(72, 'Gambia', 'GM', 'GMB', 1),
1222
-                array(73, 'Georgia', 'GE', 'GEO', 1),
1223
-                array(74, 'Ghana', 'GH', 'GHA', 1),
1224
-                array(75, 'Gibraltar', 'GI', 'GIB', 1),
1225
-                array(76, 'Greece', 'GR', 'GRC', 2),
1226
-                array(77, 'Grenada', 'GD', 'GRD', 1),
1227
-                array(78, 'Greenland', 'GL', 'GRL', 1),
1228
-                array(79, 'Guadeloupe', 'GP', 'GLP', 1),
1229
-                array(80, 'Guam', 'GU', 'GUM', 1),
1230
-                array(81, 'Guatemala', 'GT', 'GTM', 1),
1231
-                array(82, 'Guinea', 'GN', 'GIN', 1),
1232
-                array(83, 'Equatorial Guinea', 'GQ', 'GNQ', 1),
1233
-                array(84, 'Guinea-Bissau', 'GW', 'GNB', 1),
1234
-                array(85, 'Guyana', 'GY', 'GUY', 1),
1235
-                array(86, 'Haiti', 'HT', 'HTI', 1),
1236
-                array(88, 'Honduras', 'HN', 'HND', 1),
1237
-                array(89, 'Hong Kong', 'HK', 'HKG', 1),
1238
-                array(90, 'Hungary', 'HU', 'HUN', 1),
1239
-                array(91, 'India', 'IN', 'IND', 1),
1240
-                array(205, 'British Indian Ocean Territory', 'IO', 'IOT', 1),
1241
-                array(92, 'Indonesia', 'ID', 'IDN', 1),
1242
-                array(93, 'Iraq', 'IQ', 'IRQ', 1),
1243
-                array(94, 'Iran', 'IR', 'IRN', 1),
1244
-                array(95, 'Ireland', 'IE', 'IRL', 2),
1245
-                array(97, 'Iceland', 'IS', 'ISL', 1),
1246
-                array(110, 'Israel', 'IL', 'ISR', 1),
1247
-                array(49, 'Ivory Coast ', 'CI', 'CIV', 1),
1248
-                array(112, 'Jamaica', 'JM', 'JAM', 1),
1249
-                array(113, 'Japan', 'JP', 'JPN', 1),
1250
-                array(114, 'Jordan', 'JO', 'JOR', 1),
1251
-                array(115, 'Kazakhstan', 'KZ', 'KAZ', 1),
1252
-                array(116, 'Kenya', 'KE', 'KEN', 1),
1253
-                array(117, 'Kyrgyzstan', 'KG', 'KGZ', 1),
1254
-                array(118, 'Kiribati', 'KI', 'KIR', 1),
1255
-                array(48, 'South Korea', 'KR', 'KOR', 1),
1256
-                array(228, 'Kosovo', 'XK', 'XKV', 2),
1257
-                // there is no official ISO code for Kosovo yet (http://geonames.wordpress.com/2010/03/08/xk-country-code-for-kosovo/) so using a temporary country code and a modified 3 character code for ISO code -- this should be updated if/when Kosovo gets its own ISO code
1258
-                array(119, 'Kuwait', 'KW', 'KWT', 1),
1259
-                array(120, 'Laos', 'LA', 'LAO', 1),
1260
-                array(121, 'Latvia', 'LV', 'LVA', 2),
1261
-                array(122, 'Lesotho', 'LS', 'LSO', 1),
1262
-                array(123, 'Lebanon', 'LB', 'LBN', 1),
1263
-                array(124, 'Liberia', 'LR', 'LBR', 1),
1264
-                array(125, 'Libya', 'LY', 'LBY', 1),
1265
-                array(126, 'Liechtenstein', 'LI', 'LIE', 1),
1266
-                array(127, 'Lithuania', 'LT', 'LTU', 2),
1267
-                array(128, 'Luxemburg', 'LU', 'LUX', 2),
1268
-                array(129, 'Macao', 'MO', 'MAC', 1),
1269
-                array(130, 'Macedonia', 'MK', 'MKD', 1),
1270
-                array(131, 'Madagascar', 'MG', 'MDG', 1),
1271
-                array(132, 'Malaysia', 'MY', 'MYS', 1),
1272
-                array(133, 'Malawi', 'MW', 'MWI', 1),
1273
-                array(134, 'Maldivas', 'MV', 'MDV', 1),
1274
-                array(135, 'Mali', 'ML', 'MLI', 1),
1275
-                array(136, 'Malta', 'MT', 'MLT', 2),
1276
-                array(101, 'Northern Marianas', 'MP', 'MNP', 1),
1277
-                array(137, 'Morocco', 'MA', 'MAR', 1),
1278
-                array(104, 'Marshall islands', 'MH', 'MHL', 1),
1279
-                array(138, 'Martinique', 'MQ', 'MTQ', 1),
1280
-                array(139, 'Mauritius', 'MU', 'MUS', 1),
1281
-                array(140, 'Mauritania', 'MR', 'MRT', 1),
1282
-                array(141, 'Mayote', 'YT', 'MYT', 2),
1283
-                array(142, 'Mexico', 'MX', 'MEX', 1),
1284
-                array(143, 'Micronesia', 'FM', 'FSM', 1),
1285
-                array(144, 'Moldova', 'MD', 'MDA', 1),
1286
-                array(145, 'Monaco', 'MC', 'MCO', 2),
1287
-                array(146, 'Mongolia', 'MN', 'MNG', 1),
1288
-                array(147, 'Montserrat', 'MS', 'MSR', 1),
1289
-                array(227, 'Montenegro', 'ME', 'MNE', 2),
1290
-                array(148, 'Mozambique', 'MZ', 'MOZ', 1),
1291
-                array(149, 'Myanmar', 'MM', 'MMR', 1),
1292
-                array(150, 'Namibia', 'NA', 'NAM', 1),
1293
-                array(151, 'Nauru', 'NR', 'NRU', 1),
1294
-                array(152, 'Nepal', 'NP', 'NPL', 1),
1295
-                array(9, 'Netherlands Antilles', 'AN', 'ANT', 1),
1296
-                array(153, 'Nicaragua', 'NI', 'NIC', 1),
1297
-                array(154, 'Niger', 'NE', 'NER', 1),
1298
-                array(155, 'Nigeria', 'NG', 'NGA', 1),
1299
-                array(156, 'Niue', 'NU', 'NIU', 1),
1300
-                array(157, 'Norway', 'NO', 'NOR', 1),
1301
-                array(158, 'New Caledonia', 'NC', 'NCL', 1),
1302
-                array(159, 'New Zealand', 'NZ', 'NZL', 1),
1303
-                array(160, 'Oman', 'OM', 'OMN', 1),
1304
-                array(161, 'Pakistan', 'PK', 'PAK', 1),
1305
-                array(162, 'Palau', 'PW', 'PLW', 1),
1306
-                array(163, 'Panama', 'PA', 'PAN', 1),
1307
-                array(164, 'Papua New Guinea', 'PG', 'PNG', 1),
1308
-                array(165, 'Paraguay', 'PY', 'PRY', 1),
1309
-                array(166, 'Peru', 'PE', 'PER', 1),
1310
-                array(68, 'Philippines', 'PH', 'PHL', 1),
1311
-                array(167, 'Poland', 'PL', 'POL', 1),
1312
-                array(168, 'Portugal', 'PT', 'PRT', 2),
1313
-                array(169, 'Puerto Rico', 'PR', 'PRI', 1),
1314
-                array(170, 'Qatar', 'QA', 'QAT', 1),
1315
-                array(176, 'Rwanda', 'RW', 'RWA', 1),
1316
-                array(177, 'Romania', 'RO', 'ROM', 2),
1317
-                array(178, 'Russia', 'RU', 'RUS', 1),
1318
-                array(229, 'Saint Pierre and Miquelon', 'PM', 'SPM', 2),
1319
-                array(180, 'Samoa', 'WS', 'WSM', 1),
1320
-                array(181, 'American Samoa', 'AS', 'ASM', 1),
1321
-                array(183, 'San Marino', 'SM', 'SMR', 2),
1322
-                array(184, 'Saint Vincent and the Grenadines', 'VC', 'VCT', 1),
1323
-                array(185, 'Saint Helena', 'SH', 'SHN', 1),
1324
-                array(186, 'Saint Lucia', 'LC', 'LCA', 1),
1325
-                array(188, 'Senegal', 'SN', 'SEN', 1),
1326
-                array(189, 'Seychelles', 'SC', 'SYC', 1),
1327
-                array(190, 'Sierra Leona', 'SL', 'SLE', 1),
1328
-                array(191, 'Singapore', 'SG', 'SGP', 1),
1329
-                array(192, 'Syria', 'SY', 'SYR', 1),
1330
-                array(193, 'Somalia', 'SO', 'SOM', 1),
1331
-                array(194, 'Sri Lanka', 'LK', 'LKA', 1),
1332
-                array(195, 'South Africa', 'ZA', 'ZAF', 1),
1333
-                array(196, 'Sudan', 'SD', 'SDN', 1),
1334
-                array(199, 'Suriname', 'SR', 'SUR', 1),
1335
-                array(200, 'Swaziland', 'SZ', 'SWZ', 1),
1336
-                array(201, 'Thailand', 'TH', 'THA', 1),
1337
-                array(202, 'Taiwan', 'TW', 'TWN', 1),
1338
-                array(203, 'Tanzania', 'TZ', 'TZA', 1),
1339
-                array(204, 'Tajikistan', 'TJ', 'TJK', 1),
1340
-                array(206, 'Timor-Leste', 'TL', 'TLS', 1),
1341
-                array(207, 'Togo', 'TG', 'TGO', 1),
1342
-                array(208, 'Tokelau', 'TK', 'TKL', 1),
1343
-                array(209, 'Tonga', 'TO', 'TON', 1),
1344
-                array(210, 'Trinidad and Tobago', 'TT', 'TTO', 1),
1345
-                array(211, 'Tunisia', 'TN', 'TUN', 1),
1346
-                array(212, 'Turkmenistan', 'TM', 'TKM', 1),
1347
-                array(213, 'Turkey', 'TR', 'TUR', 1),
1348
-                array(214, 'Tuvalu', 'TV', 'TUV', 1),
1349
-                array(215, 'Ukraine', 'UA', 'UKR', 1),
1350
-                array(216, 'Uganda', 'UG', 'UGA', 1),
1351
-                array(59, 'United Arab Emirates', 'AE', 'ARE', 1),
1352
-                array(217, 'Uruguay', 'UY', 'URY', 1),
1353
-                array(218, 'Uzbekistan', 'UZ', 'UZB', 1),
1354
-                array(219, 'Vanuatu', 'VU', 'VUT', 1),
1355
-                array(220, 'Vatican City', 'VA', 'VAT', 2),
1356
-                array(221, 'Venezuela', 'VE', 'VEN', 1),
1357
-                array(222, 'Vietnam', 'VN', 'VNM', 1),
1358
-                array(108, 'Virgin Islands', 'VI', 'VIR', 1),
1359
-                array(223, 'Yemen', 'YE', 'YEM', 1),
1360
-                array(225, 'Zambia', 'ZM', 'ZMB', 1),
1361
-                array(226, 'Zimbabwe', 'ZW', 'ZWE', 1),
1362
-        );
1363
-        $country_iso = 'US';
1364
-        foreach ($old_countries as $country_array) {
1365
-            // note: index 0 is the 3.1 country ID
1366
-            if ($country_array[0] == $country_id) {
1367
-                // note: index 2 is the ISO
1368
-                $country_iso = $country_array[2];
1369
-                break;
1370
-            }
1371
-        }
1372
-        return $country_iso;
1373
-    }
1374
-
1375
-
1376
-
1377
-    /**
1378
-     * Gets the ISO3 for the
1379
-     *
1380
-     * @return string
1381
-     */
1382
-    public function get_default_country_iso()
1383
-    {
1384
-        $old_org_options = get_option('events_organization_settings');
1385
-        $iso = $this->get_iso_from_3_1_country_id($old_org_options['organization_country']);
1386
-        return $iso;
1387
-    }
1388
-
1389
-
1390
-
1391
-    /**
1392
-     * Converst a 3.1 payment status to its equivalent 4.1 regisration status
1393
-     *
1394
-     * @param string  $payment_status                   possible value for 3.1's evens_attendee.payment_status
1395
-     * @param boolean $this_thing_required_pre_approval whether the thing we're considering (the general setting's
1396
-     *                                                  default payment status, the event's default payment status, or
1397
-     *                                                  the attendee's payment status) required pre-approval.
1398
-     * @return string STS_ID for use in 4.1
1399
-     */
1400
-    public function convert_3_1_payment_status_to_4_1_STS_ID($payment_status, $this_thing_required_pre_approval = false)
1401
-    {
1402
-        // EE team can read the related discussion: https://app.asana.com/0/2400967562914/9418495544455
1403
-        if ($this_thing_required_pre_approval) {
1404
-            return 'RNA';
1405
-        } else {
1406
-            $mapping = $default_reg_stati_conversions = array(
1407
-                    'Completed'        => 'RAP',
1408
-                    ''                 => 'RPP',
1409
-                    'Incomplete'       => 'RPP',
1410
-                    'Pending'          => 'RAP',
1411
-                    // stati that only occurred on 3.1 attendees:
1412
-                    'Payment Declined' => 'RPP',
1413
-                    'Not Completed'    => 'RPP',
1414
-                    'Cancelled'        => 'RPP',
1415
-                    'Declined'         => 'RPP',
1416
-            );
1417
-        }
1418
-        return isset($mapping[ $payment_status ]) ? $mapping[ $payment_status ] : 'RNA';
1419
-    }
1420
-
1421
-
1422
-
1423
-    /**
1424
-     * Makes sure the 3.1's image url is converted to an image attachment post to the 4.1 CPT event
1425
-     * and sets it as the featured image on the CPT event
1426
-     *
1427
-     * @param type                            $old_event
1428
-     * @param type                            $new_cpt_id
1429
-     * @param  EE_Data_Migration_Script_Stage $migration_stage the stage which called this, where errors should be added
1430
-     * @return boolean whether or not we had to do the big job of creating an image attachment
1431
-     */
1432
-    public function convert_image_url_to_attachment_and_attach_to_post(
1433
-        $guid,
1434
-        $new_cpt_id,
1435
-        EE_Data_Migration_Script_Stage $migration_stage
1436
-    ) {
1437
-        $created_attachment_post = false;
1438
-        $guid = $this->_get_original_guid($guid);
1439
-        if ($guid) {
1440
-            // check for an existing attachment post with this guid
1441
-            $attachment_post_id = $this->_get_image_attachment_id_by_GUID($guid);
1442
-            if (! $attachment_post_id) {
1443
-                // post thumbnail with that GUID doesn't exist, we should create one
1444
-                $attachment_post_id = $this->_create_image_attachment_from_GUID($guid, $migration_stage);
1445
-                $created_attachment_post = true;
1446
-            }
1447
-            // double-check we actually have an attachment post
1448
-            if ($attachment_post_id) {
1449
-                update_post_meta($new_cpt_id, '_thumbnail_id', $attachment_post_id);
1450
-            } else {
1451
-                $migration_stage->add_error(sprintf(esc_html__(
1452
-                    "Could not update event image %s for CPT with ID %d, but attachments post ID is %d",
1453
-                    "event_espresso"
1454
-                ), $guid, $new_cpt_id, $attachment_post_id));
1455
-            }
1456
-        }
1457
-        return $created_attachment_post;
1458
-    }
1459
-
1460
-
1461
-
1462
-    /**
1463
-     * In 3.1, the event thumbnail image DOESN'T point to the orignal image, but instead
1464
-     * to a large thumbnail (which has nearly the same GUID, except it adds "-{width}x{height}" before the filetype,
1465
-     * or whatever dimensions it is. Eg 'http://mysite.com/image1-300x400.jpg' instead of
1466
-     * 'http://mysite.com/image1.jpg' ). This function attempts to strip that off and get the original file, if it
1467
-     * exists
1468
-     *
1469
-     * @param string $guid_in_old_event
1470
-     * @return string either the original guid, or $guid_in_old_event if we couldn't figure out what the original was
1471
-     */
1472
-    private function _get_original_guid($guid_in_old_event)
1473
-    {
1474
-        $original_guid = preg_replace('~-\d*x\d*\.~', '.', $guid_in_old_event, 1);
1475
-        // do a head request to verify the file exists
1476
-        $head_response = wp_remote_head($original_guid);
1477
-        if (! $head_response instanceof WP_Error && $head_response['response']['message'] == 'OK') {
1478
-            return $original_guid;
1479
-        } else {
1480
-            return $guid_in_old_event;
1481
-        }
1482
-    }
1483
-
1484
-
1485
-
1486
-    /**
1487
-     * Creates an image attachment post for the GUID. If the GUID points to a remote image,
1488
-     * we download it to our uploads directory so that it can be properly processed (eg, creates different sizes of
1489
-     * thumbnails)
1490
-     *
1491
-     * @param type                           $guid
1492
-     * @param EE_Data_Migration_Script_Stage $migration_stage
1493
-     * @return int
1494
-     */
1495
-    private function _create_image_attachment_from_GUID($guid, EE_Data_Migration_Script_Stage $migration_stage)
1496
-    {
1497
-        if (! $guid) {
1498
-            $migration_stage->add_error(sprintf(esc_html__(
1499
-                "Cannot create image attachment for a blank GUID!",
1500
-                "event_espresso"
1501
-            )));
1502
-            return 0;
1503
-        }
1504
-        $wp_filetype = wp_check_filetype(basename($guid), null);
1505
-        $wp_upload_dir = wp_upload_dir();
1506
-        // if the file is located remotely, download it to our uploads DIR, because wp_genereate_attachmnet_metadata needs the file to be local
1507
-        if (strpos($guid, $wp_upload_dir['url']) === false) {
1508
-            // image is located remotely. download it and place it in the uploads directory
1509
-            if (! is_readable($guid)) {
1510
-                $migration_stage->add_error(sprintf(esc_html__(
1511
-                    "Could not create image attachment from non-existent file: %s",
1512
-                    "event_espresso"
1513
-                ), $guid));
1514
-                return 0;
1515
-            }
1516
-            $contents = file_get_contents($guid);
1517
-            if ($contents === false) {
1518
-                $migration_stage->add_error(sprintf(esc_html__(
1519
-                    "Could not read image at %s, and therefore couldnt create an attachment post for it.",
1520
-                    "event_espresso"
1521
-                ), $guid));
1522
-                return false;
1523
-            }
1524
-            $local_filepath = $wp_upload_dir['path'] . '/' . basename($guid);
1525
-            $savefile = fopen($local_filepath, 'w');
1526
-            fwrite($savefile, $contents);
1527
-            fclose($savefile);
1528
-            $guid = str_replace($wp_upload_dir['path'], $wp_upload_dir['url'], $local_filepath);
1529
-        } else {
1530
-            $local_filepath = str_replace($wp_upload_dir['url'], $wp_upload_dir['path'], $guid);
1531
-        }
1532
-        $attachment = array(
1533
-                'guid'           => $guid,
1534
-                'post_mime_type' => $wp_filetype['type'],
1535
-                'post_title'     => preg_replace('/\.[^.]+$/', '', basename($guid)),
1536
-                'post_content'   => '',
1537
-                'post_status'    => 'inherit',
1538
-        );
1539
-        $attach_id = wp_insert_attachment($attachment, $guid);
1540
-        if (! $attach_id) {
1541
-            $migration_stage->add_error(sprintf(esc_html__(
1542
-                "Could not create image attachment post from image '%s'. Attachment data was %s.",
1543
-                "event_espresso"
1544
-            ), $guid, $this->_json_encode($attachment)));
1545
-            return $attach_id;
1546
-        }
1547
-        // you must first include the image.php file
1548
-        // for the function wp_generate_attachment_metadata() to work
1549
-        require_once(ABSPATH . 'wp-admin/includes/image.php');
1550
-        $attach_data = wp_generate_attachment_metadata($attach_id, $local_filepath);
1551
-        if (! $attach_data) {
1552
-            $migration_stage->add_error(sprintf(esc_html__(
1553
-                "Coudl not genereate attachment metadata for attachment post %d with filepath %s and GUID %s. Please check the file was downloaded properly.",
1554
-                "event_espresso"
1555
-            ), $attach_id, $local_filepath, $guid));
1556
-            return $attach_id;
1557
-        }
1558
-        $metadata_save_result = wp_update_attachment_metadata($attach_id, $attach_data);
1559
-        if (! $metadata_save_result) {
1560
-            $migration_stage->add_error(sprintf(esc_html__(
1561
-                "Could not update attachment metadata for attachment %d with data %s",
1562
-                "event_espresso"
1563
-            ), $attach_id, $this->_json_encode($attach_data)));
1564
-        }
1565
-        return $attach_id;
1566
-    }
1567
-
1568
-
1569
-
1570
-    /**
1571
-     * Finds the attachment post containing info about an image attachment given the GUID (link to the image itself),
1572
-     * and returns its ID.
1573
-     *
1574
-     * @global type  $wpdb
1575
-     * @param string $guid
1576
-     * @return int
1577
-     */
1578
-    private function _get_image_attachment_id_by_GUID($guid)
1579
-    {
1580
-        global $wpdb;
1581
-        $attachment_id = $wpdb->get_var($wpdb->prepare("SELECT ID FROM $wpdb->posts WHERE guid=%s LIMIT 1", $guid));
1582
-        return $attachment_id;
1583
-    }
1584
-
1585
-
1586
-
1587
-    /**
1588
-     * Returns a mysql-formatted DATETIME in UTC time, given a $DATETIME_string
1589
-     * (and optionally a timezone; if none is given, the wp default is used)
1590
-     *
1591
-     * @param EE_Data_Migration_Script_base $stage
1592
-     * @param array                         $row_of_data , the row from the DB (as an array) we're trying to find the
1593
-     *                                                   UTC time for
1594
-     * @param string                        $DATETIME_string
1595
-     * @param string                        $timezone
1596
-     * @return string
1597
-     */
1598
-    public function convert_date_string_to_utc(
1599
-        EE_Data_Migration_Script_Stage $stage,
1600
-        $row_of_data,
1601
-        $DATETIME_string,
1602
-        $timezone = null
1603
-    ) {
1604
-        $original_tz = $timezone;
1605
-        if (! $timezone) {
1606
-            $timezone = $this->_get_wp_timezone();
1607
-        }
1608
-        if (! $timezone) {
1609
-            $stage->add_error(sprintf(
1610
-                esc_html__("Could not find timezone given %s for %s", "event_espresso"),
1611
-                $original_tz,
1612
-                $row_of_data
1613
-            ));
1614
-            $timezone = 'UTC';
1615
-        }
1616
-        try {
1617
-            $date_obj = new DateTime($DATETIME_string, new DateTimeZone($timezone));
1618
-            EEH_DTT_Helper::setTimezone($date_obj, new DateTimeZone('UTC'));
1619
-        } catch (Exception $e) {
1620
-            $stage->add_error(sprintf(esc_html__(
1621
-                "Could not convert time string '%s' using timezone '%s' into a proper DATETIME. Using current time instead.",
1622
-                "event_espresso"
1623
-            ), $DATETIME_string, $timezone));
1624
-            $date_obj = new DateTime();
1625
-        }
1626
-        return $date_obj->format('Y-m-d H:i:s');
1627
-    }
1628
-
1629
-
1630
-
1631
-    /**
1632
-     * Gets the default timezone string from wordpress (even if they set a gmt offset)
1633
-     *
1634
-     * @return string
1635
-     */
1636
-    private function _get_wp_timezone()
1637
-    {
1638
-        $timezone = empty($timezone) ? get_option('timezone_string') : $timezone;
1639
-        // if timezone is STILL empty then let's get the GMT offset and then set the timezone_string using our converter
1640
-        if (empty($timezone)) {
1641
-            // let's get a the WordPress UTC offset
1642
-            $offset = get_option('gmt_offset');
1643
-            $timezone = $this->timezone_convert_to_string_from_offset($offset);
1644
-        }
1645
-        return $timezone;
1646
-    }
1647
-
1648
-
1649
-
1650
-    /**
1651
-     * Gets the wordpress timezone string from a UTC offset
1652
-     *
1653
-     * @param int $offset
1654
-     * @return boolean
1655
-     */
1656
-    private function timezone_convert_to_string_from_offset($offset)
1657
-    {
1658
-        // shamelessly taken from bottom comment at http://ca1.php.net/manual/en/function.timezone-name-from-abbr.php because timezone_name_from_abbr() did not work as expected - its not reliable
1659
-        $offset *= 3600; // convert hour offset to seconds
1660
-        $abbrarray = timezone_abbreviations_list();
1661
-        foreach ($abbrarray as $abbr) {
1662
-            foreach ($abbr as $city) {
1663
-                if ($city['offset'] == $offset) {
1664
-                    return $city['timezone_id'];
1665
-                }
1666
-            }
1667
-        }
1668
-        return false;
1669
-    }
1670
-
1671
-
1672
-
1673
-    public function migration_page_hooks()
1674
-    {
1675
-        add_filter(
1676
-            'FHEE__ee_migration_page__header',
1677
-            array($this, '_migrate_page_hook_simplify_version_strings'),
1678
-            10,
1679
-            3
1680
-        );
1681
-        add_filter(
1682
-            'FHEE__ee_migration_page__p_after_header',
1683
-            array($this, '_migration_page_hook_simplify_next_db_state'),
1684
-            10,
1685
-            2
1686
-        );
1687
-        add_filter(
1688
-            'FHEE__ee_migration_page__option_1_main',
1689
-            array($this, '_migrate_page_hook_simplify_version_strings'),
1690
-            10,
1691
-            3
1692
-        );
1693
-        add_filter(
1694
-            'FHEE__ee_migration_page__option_1_button_text',
1695
-            array($this, '_migrate_page_hook_simplify_version_strings'),
1696
-            10,
1697
-            3
1698
-        );
1699
-        add_action(
1700
-            'AHEE__ee_migration_page__option_1_extra_details',
1701
-            array($this, '_migration_page_hook_option_1_extra_details'),
1702
-            10,
1703
-            3
1704
-        );
1705
-        add_filter(
1706
-            'FHEE__ee_migration_page__option_2_main',
1707
-            array($this, '_migrate_page_hook_simplify_version_strings'),
1708
-            10,
1709
-            4
1710
-        );
1711
-        add_filter(
1712
-            'FHEE__ee_migration_page__option_2_button_text',
1713
-            array($this, '_migration_page_hook_simplify_next_db_state'),
1714
-            10,
1715
-            2
1716
-        );
1717
-        add_filter(
1718
-            'FHEE__ee_migration_page__option_2_details',
1719
-            array($this, '_migration_page_hook_simplify_next_db_state'),
1720
-            10,
1721
-            2
1722
-        );
1723
-        add_action(
1724
-            'AHEE__ee_migration_page__after_migration_options_table',
1725
-            array($this, '_migration_page_hook_after_migration_options_table')
1726
-        );
1727
-        add_filter(
1728
-            'FHEE__ee_migration_page__done_migration_header',
1729
-            array($this, '_migration_page_hook_simplify_next_db_state'),
1730
-            10,
1731
-            2
1732
-        );
1733
-        add_filter(
1734
-            'FHEE__ee_migration_page__p_after_done_migration_header',
1735
-            array($this, '_migration_page_hook_simplify_next_db_state'),
1736
-            10,
1737
-            2
1738
-        );
1739
-        add_filter(
1740
-            'FHEE__ee_migration_page__migration_options_template',
1741
-            array($this,'use_migration_options_from_ee3_template')
1742
-        );
1743
-    }
1744
-
1745
-
1746
-
1747
-    public function _migrate_page_hook_simplify_version_strings(
1748
-        $old_content,
1749
-        $current_db_state,
1750
-        $next_db_state,
1751
-        $ultimate_db_state = null
1752
-    ) {
1753
-        return str_replace(
1754
-            array($current_db_state, $next_db_state, $ultimate_db_state),
1755
-            array(esc_html__('EE3', 'event_espresso'), esc_html__('EE4', 'event_espresso'), esc_html__("EE4", 'event_espresso')),
1756
-            $old_content
1757
-        );
1758
-    }
1759
-
1760
-
1761
-
1762
-    public function _migration_page_hook_simplify_next_db_state($old_content, $next_db_state)
1763
-    {
1764
-        return str_replace($next_db_state, esc_html__("EE4", 'event_espresso'), $old_content);
1765
-    }
1766
-
1767
-
1768
-
1769
-    public function _migration_page_hook_option_1_extra_details()
1770
-    {
1771
-        ?>
1069
+		if (! $state) {
1070
+			// insert a new one then
1071
+			$cols_n_values = array(
1072
+					'CNT_ISO'    => $country_iso,
1073
+					'STA_abbrev' => substr($state_name, 0, 6),
1074
+					'STA_name'   => $state_name,
1075
+					'STA_active' => true,
1076
+			);
1077
+			$data_types = array(
1078
+					'%s',// CNT_ISO
1079
+					'%s',// STA_abbrev
1080
+					'%s',// STA_name
1081
+					'%d',// STA_active
1082
+			);
1083
+			$success = $wpdb->insert($state_table, $cols_n_values, $data_types);
1084
+			if (! $success) {
1085
+				throw new EE_Error($this->_create_error_message_for_db_insertion(
1086
+					'N/A',
1087
+					array('state' => $state_name, 'country_id' => $country_name),
1088
+					$state_table,
1089
+					$cols_n_values,
1090
+					$data_types
1091
+				));
1092
+			}
1093
+			$state = $cols_n_values;
1094
+			$state['STA_ID'] = $wpdb->insert_id;
1095
+		}
1096
+		return $state;
1097
+	}
1098
+
1099
+
1100
+
1101
+	/**
1102
+	 * Fixes times like "5:00 PM" into the expected 24-hour format "17:00".
1103
+	 * THis is actually just copied from the 3.1 JSON API because it needed to do the exact same thing
1104
+	 *
1105
+	 * @param type $timeString
1106
+	 * @return string in the php DATETIME format: "G:i" (24-hour format hour with leading zeros, a colon, and minutes
1107
+	 *                with leading zeros)
1108
+	 */
1109
+	public function convertTimeFromAMPM($timeString)
1110
+	{
1111
+		$matches = array();
1112
+		preg_match("~(\\d*):(\\d*)~", $timeString, $matches);
1113
+		if (! $matches || count($matches) < 3) {
1114
+			$hour = '00';
1115
+			$minutes = '00';
1116
+		} else {
1117
+			$hour = intval($matches[1]);
1118
+			$minutes = $matches[2];
1119
+		}
1120
+		if (strpos($timeString, 'PM') || strpos($timeString, 'pm')) {
1121
+			$hour = intval($hour) + 12;
1122
+		}
1123
+		$hour = str_pad("$hour", 2, '0', STR_PAD_LEFT);
1124
+		$minutes = str_pad("$minutes", 2, '0', STR_PAD_LEFT);
1125
+		return "$hour:$minutes";
1126
+	}
1127
+
1128
+
1129
+
1130
+	/**
1131
+	 * Gets the ISO3 fora country given its 3.1 country ID.
1132
+	 *
1133
+	 * @param int $country_id
1134
+	 * @return string the country's ISO3 code
1135
+	 */
1136
+	public function get_iso_from_3_1_country_id($country_id)
1137
+	{
1138
+		$old_countries = array(
1139
+				array(64, 'United States', 'US', 'USA', 1),
1140
+				array(15, 'Australia', 'AU', 'AUS', 1),
1141
+				array(39, 'Canada', 'CA', 'CAN', 1),
1142
+				array(171, 'United Kingdom', 'GB', 'GBR', 1),
1143
+				array(70, 'France', 'FR', 'FRA', 2),
1144
+				array(111, 'Italy', 'IT', 'ITA', 2),
1145
+				array(63, 'Spain', 'ES', 'ESP', 2),
1146
+				array(1, 'Afghanistan', 'AF', 'AFG', 1),
1147
+				array(2, 'Albania', 'AL', 'ALB', 1),
1148
+				array(3, 'Germany', 'DE', 'DEU', 2),
1149
+				array(198, 'Switzerland', 'CH', 'CHE', 1),
1150
+				array(87, 'Netherlands', 'NL', 'NLD', 2),
1151
+				array(197, 'Sweden', 'SE', 'SWE', 1),
1152
+				array(230, 'Akrotiri and Dhekelia', 'CY', 'CYP', 2),
1153
+				array(4, 'Andorra', 'AD', 'AND', 2),
1154
+				array(5, 'Angola', 'AO', 'AGO', 1),
1155
+				array(6, 'Anguilla', 'AI', 'AIA', 1),
1156
+				array(7, 'Antarctica', 'AQ', 'ATA', 1),
1157
+				array(8, 'Antigua and Barbuda', 'AG', 'ATG', 1),
1158
+				array(10, 'Saudi Arabia', 'SA', 'SAU', 1),
1159
+				array(11, 'Algeria', 'DZ', 'DZA', 1),
1160
+				array(12, 'Argentina', 'AR', 'ARG', 1),
1161
+				array(13, 'Armenia', 'AM', 'ARM', 1),
1162
+				array(14, 'Aruba', 'AW', 'ABW', 1),
1163
+				array(16, 'Austria', 'AT', 'AUT', 2),
1164
+				array(17, 'Azerbaijan', 'AZ', 'AZE', 1),
1165
+				array(18, 'Bahamas', 'BS', 'BHS', 1),
1166
+				array(19, 'Bahrain', 'BH', 'BHR', 1),
1167
+				array(20, 'Bangladesh', 'BD', 'BGD', 1),
1168
+				array(21, 'Barbados', 'BB', 'BRB', 1),
1169
+				array(22, 'Belgium ', 'BE', 'BEL', 2),
1170
+				array(23, 'Belize', 'BZ', 'BLZ', 1),
1171
+				array(24, 'Benin', 'BJ', 'BEN', 1),
1172
+				array(25, 'Bermudas', 'BM', 'BMU', 1),
1173
+				array(26, 'Belarus', 'BY', 'BLR', 1),
1174
+				array(27, 'Bolivia', 'BO', 'BOL', 1),
1175
+				array(28, 'Bosnia and Herzegovina', 'BA', 'BIH', 1),
1176
+				array(29, 'Botswana', 'BW', 'BWA', 1),
1177
+				array(96, 'Bouvet Island', 'BV', 'BVT', 1),
1178
+				array(30, 'Brazil', 'BR', 'BRA', 1),
1179
+				array(31, 'Brunei', 'BN', 'BRN', 1),
1180
+				array(32, 'Bulgaria', 'BG', 'BGR', 1),
1181
+				array(33, 'Burkina Faso', 'BF', 'BFA', 1),
1182
+				array(34, 'Burundi', 'BI', 'BDI', 1),
1183
+				array(35, 'Bhutan', 'BT', 'BTN', 1),
1184
+				array(36, 'Cape Verde', 'CV', 'CPV', 1),
1185
+				array(37, 'Cambodia', 'KH', 'KHM', 1),
1186
+				array(38, 'Cameroon', 'CM', 'CMR', 1),
1187
+				array(98, 'Cayman Islands', 'KY', 'CYM', 1),
1188
+				array(172, 'Central African Republic', 'CF', 'CAF', 1),
1189
+				array(40, 'Chad', 'TD', 'TCD', 1),
1190
+				array(41, 'Chile', 'CL', 'CHL', 1),
1191
+				array(42, 'China', 'CN', 'CHN', 1),
1192
+				array(105, 'Christmas Island', 'CX', 'CXR', 1),
1193
+				array(43, 'Cyprus', 'CY', 'CYP', 2),
1194
+				array(99, 'Cocos Island', 'CC', 'CCK', 1),
1195
+				array(100, 'Cook Islands', 'CK', 'COK', 1),
1196
+				array(44, 'Colombia', 'CO', 'COL', 1),
1197
+				array(45, 'Comoros', 'KM', 'COM', 1),
1198
+				array(46, 'Congo', 'CG', 'COG', 1),
1199
+				array(47, 'North Korea', 'KP', 'PRK', 1),
1200
+				array(50, 'Costa Rica', 'CR', 'CRI', 1),
1201
+				array(51, 'Croatia', 'HR', 'HRV', 1),
1202
+				array(52, 'Cuba', 'CU', 'CUB', 1),
1203
+				array(173, 'Czech Republic', 'CZ', 'CZE', 1),
1204
+				array(53, 'Denmark', 'DK', 'DNK', 1),
1205
+				array(54, 'Djibouti', 'DJ', 'DJI', 1),
1206
+				array(55, 'Dominica', 'DM', 'DMA', 1),
1207
+				array(174, 'Dominican Republic', 'DO', 'DOM', 1),
1208
+				array(56, 'Ecuador', 'EC', 'ECU', 1),
1209
+				array(57, 'Egypt', 'EG', 'EGY', 1),
1210
+				array(58, 'El Salvador', 'SV', 'SLV', 1),
1211
+				array(60, 'Eritrea', 'ER', 'ERI', 1),
1212
+				array(61, 'Slovakia', 'SK', 'SVK', 2),
1213
+				array(62, 'Slovenia', 'SI', 'SVN', 2),
1214
+				array(65, 'Estonia', 'EE', 'EST', 2),
1215
+				array(66, 'Ethiopia', 'ET', 'ETH', 1),
1216
+				array(102, 'Faroe islands', 'FO', 'FRO', 1),
1217
+				array(103, 'Falkland Islands', 'FK', 'FLK', 1),
1218
+				array(67, 'Fiji', 'FJ', 'FJI', 1),
1219
+				array(69, 'Finland', 'FI', 'FIN', 2),
1220
+				array(71, 'Gabon', 'GA', 'GAB', 1),
1221
+				array(72, 'Gambia', 'GM', 'GMB', 1),
1222
+				array(73, 'Georgia', 'GE', 'GEO', 1),
1223
+				array(74, 'Ghana', 'GH', 'GHA', 1),
1224
+				array(75, 'Gibraltar', 'GI', 'GIB', 1),
1225
+				array(76, 'Greece', 'GR', 'GRC', 2),
1226
+				array(77, 'Grenada', 'GD', 'GRD', 1),
1227
+				array(78, 'Greenland', 'GL', 'GRL', 1),
1228
+				array(79, 'Guadeloupe', 'GP', 'GLP', 1),
1229
+				array(80, 'Guam', 'GU', 'GUM', 1),
1230
+				array(81, 'Guatemala', 'GT', 'GTM', 1),
1231
+				array(82, 'Guinea', 'GN', 'GIN', 1),
1232
+				array(83, 'Equatorial Guinea', 'GQ', 'GNQ', 1),
1233
+				array(84, 'Guinea-Bissau', 'GW', 'GNB', 1),
1234
+				array(85, 'Guyana', 'GY', 'GUY', 1),
1235
+				array(86, 'Haiti', 'HT', 'HTI', 1),
1236
+				array(88, 'Honduras', 'HN', 'HND', 1),
1237
+				array(89, 'Hong Kong', 'HK', 'HKG', 1),
1238
+				array(90, 'Hungary', 'HU', 'HUN', 1),
1239
+				array(91, 'India', 'IN', 'IND', 1),
1240
+				array(205, 'British Indian Ocean Territory', 'IO', 'IOT', 1),
1241
+				array(92, 'Indonesia', 'ID', 'IDN', 1),
1242
+				array(93, 'Iraq', 'IQ', 'IRQ', 1),
1243
+				array(94, 'Iran', 'IR', 'IRN', 1),
1244
+				array(95, 'Ireland', 'IE', 'IRL', 2),
1245
+				array(97, 'Iceland', 'IS', 'ISL', 1),
1246
+				array(110, 'Israel', 'IL', 'ISR', 1),
1247
+				array(49, 'Ivory Coast ', 'CI', 'CIV', 1),
1248
+				array(112, 'Jamaica', 'JM', 'JAM', 1),
1249
+				array(113, 'Japan', 'JP', 'JPN', 1),
1250
+				array(114, 'Jordan', 'JO', 'JOR', 1),
1251
+				array(115, 'Kazakhstan', 'KZ', 'KAZ', 1),
1252
+				array(116, 'Kenya', 'KE', 'KEN', 1),
1253
+				array(117, 'Kyrgyzstan', 'KG', 'KGZ', 1),
1254
+				array(118, 'Kiribati', 'KI', 'KIR', 1),
1255
+				array(48, 'South Korea', 'KR', 'KOR', 1),
1256
+				array(228, 'Kosovo', 'XK', 'XKV', 2),
1257
+				// there is no official ISO code for Kosovo yet (http://geonames.wordpress.com/2010/03/08/xk-country-code-for-kosovo/) so using a temporary country code and a modified 3 character code for ISO code -- this should be updated if/when Kosovo gets its own ISO code
1258
+				array(119, 'Kuwait', 'KW', 'KWT', 1),
1259
+				array(120, 'Laos', 'LA', 'LAO', 1),
1260
+				array(121, 'Latvia', 'LV', 'LVA', 2),
1261
+				array(122, 'Lesotho', 'LS', 'LSO', 1),
1262
+				array(123, 'Lebanon', 'LB', 'LBN', 1),
1263
+				array(124, 'Liberia', 'LR', 'LBR', 1),
1264
+				array(125, 'Libya', 'LY', 'LBY', 1),
1265
+				array(126, 'Liechtenstein', 'LI', 'LIE', 1),
1266
+				array(127, 'Lithuania', 'LT', 'LTU', 2),
1267
+				array(128, 'Luxemburg', 'LU', 'LUX', 2),
1268
+				array(129, 'Macao', 'MO', 'MAC', 1),
1269
+				array(130, 'Macedonia', 'MK', 'MKD', 1),
1270
+				array(131, 'Madagascar', 'MG', 'MDG', 1),
1271
+				array(132, 'Malaysia', 'MY', 'MYS', 1),
1272
+				array(133, 'Malawi', 'MW', 'MWI', 1),
1273
+				array(134, 'Maldivas', 'MV', 'MDV', 1),
1274
+				array(135, 'Mali', 'ML', 'MLI', 1),
1275
+				array(136, 'Malta', 'MT', 'MLT', 2),
1276
+				array(101, 'Northern Marianas', 'MP', 'MNP', 1),
1277
+				array(137, 'Morocco', 'MA', 'MAR', 1),
1278
+				array(104, 'Marshall islands', 'MH', 'MHL', 1),
1279
+				array(138, 'Martinique', 'MQ', 'MTQ', 1),
1280
+				array(139, 'Mauritius', 'MU', 'MUS', 1),
1281
+				array(140, 'Mauritania', 'MR', 'MRT', 1),
1282
+				array(141, 'Mayote', 'YT', 'MYT', 2),
1283
+				array(142, 'Mexico', 'MX', 'MEX', 1),
1284
+				array(143, 'Micronesia', 'FM', 'FSM', 1),
1285
+				array(144, 'Moldova', 'MD', 'MDA', 1),
1286
+				array(145, 'Monaco', 'MC', 'MCO', 2),
1287
+				array(146, 'Mongolia', 'MN', 'MNG', 1),
1288
+				array(147, 'Montserrat', 'MS', 'MSR', 1),
1289
+				array(227, 'Montenegro', 'ME', 'MNE', 2),
1290
+				array(148, 'Mozambique', 'MZ', 'MOZ', 1),
1291
+				array(149, 'Myanmar', 'MM', 'MMR', 1),
1292
+				array(150, 'Namibia', 'NA', 'NAM', 1),
1293
+				array(151, 'Nauru', 'NR', 'NRU', 1),
1294
+				array(152, 'Nepal', 'NP', 'NPL', 1),
1295
+				array(9, 'Netherlands Antilles', 'AN', 'ANT', 1),
1296
+				array(153, 'Nicaragua', 'NI', 'NIC', 1),
1297
+				array(154, 'Niger', 'NE', 'NER', 1),
1298
+				array(155, 'Nigeria', 'NG', 'NGA', 1),
1299
+				array(156, 'Niue', 'NU', 'NIU', 1),
1300
+				array(157, 'Norway', 'NO', 'NOR', 1),
1301
+				array(158, 'New Caledonia', 'NC', 'NCL', 1),
1302
+				array(159, 'New Zealand', 'NZ', 'NZL', 1),
1303
+				array(160, 'Oman', 'OM', 'OMN', 1),
1304
+				array(161, 'Pakistan', 'PK', 'PAK', 1),
1305
+				array(162, 'Palau', 'PW', 'PLW', 1),
1306
+				array(163, 'Panama', 'PA', 'PAN', 1),
1307
+				array(164, 'Papua New Guinea', 'PG', 'PNG', 1),
1308
+				array(165, 'Paraguay', 'PY', 'PRY', 1),
1309
+				array(166, 'Peru', 'PE', 'PER', 1),
1310
+				array(68, 'Philippines', 'PH', 'PHL', 1),
1311
+				array(167, 'Poland', 'PL', 'POL', 1),
1312
+				array(168, 'Portugal', 'PT', 'PRT', 2),
1313
+				array(169, 'Puerto Rico', 'PR', 'PRI', 1),
1314
+				array(170, 'Qatar', 'QA', 'QAT', 1),
1315
+				array(176, 'Rwanda', 'RW', 'RWA', 1),
1316
+				array(177, 'Romania', 'RO', 'ROM', 2),
1317
+				array(178, 'Russia', 'RU', 'RUS', 1),
1318
+				array(229, 'Saint Pierre and Miquelon', 'PM', 'SPM', 2),
1319
+				array(180, 'Samoa', 'WS', 'WSM', 1),
1320
+				array(181, 'American Samoa', 'AS', 'ASM', 1),
1321
+				array(183, 'San Marino', 'SM', 'SMR', 2),
1322
+				array(184, 'Saint Vincent and the Grenadines', 'VC', 'VCT', 1),
1323
+				array(185, 'Saint Helena', 'SH', 'SHN', 1),
1324
+				array(186, 'Saint Lucia', 'LC', 'LCA', 1),
1325
+				array(188, 'Senegal', 'SN', 'SEN', 1),
1326
+				array(189, 'Seychelles', 'SC', 'SYC', 1),
1327
+				array(190, 'Sierra Leona', 'SL', 'SLE', 1),
1328
+				array(191, 'Singapore', 'SG', 'SGP', 1),
1329
+				array(192, 'Syria', 'SY', 'SYR', 1),
1330
+				array(193, 'Somalia', 'SO', 'SOM', 1),
1331
+				array(194, 'Sri Lanka', 'LK', 'LKA', 1),
1332
+				array(195, 'South Africa', 'ZA', 'ZAF', 1),
1333
+				array(196, 'Sudan', 'SD', 'SDN', 1),
1334
+				array(199, 'Suriname', 'SR', 'SUR', 1),
1335
+				array(200, 'Swaziland', 'SZ', 'SWZ', 1),
1336
+				array(201, 'Thailand', 'TH', 'THA', 1),
1337
+				array(202, 'Taiwan', 'TW', 'TWN', 1),
1338
+				array(203, 'Tanzania', 'TZ', 'TZA', 1),
1339
+				array(204, 'Tajikistan', 'TJ', 'TJK', 1),
1340
+				array(206, 'Timor-Leste', 'TL', 'TLS', 1),
1341
+				array(207, 'Togo', 'TG', 'TGO', 1),
1342
+				array(208, 'Tokelau', 'TK', 'TKL', 1),
1343
+				array(209, 'Tonga', 'TO', 'TON', 1),
1344
+				array(210, 'Trinidad and Tobago', 'TT', 'TTO', 1),
1345
+				array(211, 'Tunisia', 'TN', 'TUN', 1),
1346
+				array(212, 'Turkmenistan', 'TM', 'TKM', 1),
1347
+				array(213, 'Turkey', 'TR', 'TUR', 1),
1348
+				array(214, 'Tuvalu', 'TV', 'TUV', 1),
1349
+				array(215, 'Ukraine', 'UA', 'UKR', 1),
1350
+				array(216, 'Uganda', 'UG', 'UGA', 1),
1351
+				array(59, 'United Arab Emirates', 'AE', 'ARE', 1),
1352
+				array(217, 'Uruguay', 'UY', 'URY', 1),
1353
+				array(218, 'Uzbekistan', 'UZ', 'UZB', 1),
1354
+				array(219, 'Vanuatu', 'VU', 'VUT', 1),
1355
+				array(220, 'Vatican City', 'VA', 'VAT', 2),
1356
+				array(221, 'Venezuela', 'VE', 'VEN', 1),
1357
+				array(222, 'Vietnam', 'VN', 'VNM', 1),
1358
+				array(108, 'Virgin Islands', 'VI', 'VIR', 1),
1359
+				array(223, 'Yemen', 'YE', 'YEM', 1),
1360
+				array(225, 'Zambia', 'ZM', 'ZMB', 1),
1361
+				array(226, 'Zimbabwe', 'ZW', 'ZWE', 1),
1362
+		);
1363
+		$country_iso = 'US';
1364
+		foreach ($old_countries as $country_array) {
1365
+			// note: index 0 is the 3.1 country ID
1366
+			if ($country_array[0] == $country_id) {
1367
+				// note: index 2 is the ISO
1368
+				$country_iso = $country_array[2];
1369
+				break;
1370
+			}
1371
+		}
1372
+		return $country_iso;
1373
+	}
1374
+
1375
+
1376
+
1377
+	/**
1378
+	 * Gets the ISO3 for the
1379
+	 *
1380
+	 * @return string
1381
+	 */
1382
+	public function get_default_country_iso()
1383
+	{
1384
+		$old_org_options = get_option('events_organization_settings');
1385
+		$iso = $this->get_iso_from_3_1_country_id($old_org_options['organization_country']);
1386
+		return $iso;
1387
+	}
1388
+
1389
+
1390
+
1391
+	/**
1392
+	 * Converst a 3.1 payment status to its equivalent 4.1 regisration status
1393
+	 *
1394
+	 * @param string  $payment_status                   possible value for 3.1's evens_attendee.payment_status
1395
+	 * @param boolean $this_thing_required_pre_approval whether the thing we're considering (the general setting's
1396
+	 *                                                  default payment status, the event's default payment status, or
1397
+	 *                                                  the attendee's payment status) required pre-approval.
1398
+	 * @return string STS_ID for use in 4.1
1399
+	 */
1400
+	public function convert_3_1_payment_status_to_4_1_STS_ID($payment_status, $this_thing_required_pre_approval = false)
1401
+	{
1402
+		// EE team can read the related discussion: https://app.asana.com/0/2400967562914/9418495544455
1403
+		if ($this_thing_required_pre_approval) {
1404
+			return 'RNA';
1405
+		} else {
1406
+			$mapping = $default_reg_stati_conversions = array(
1407
+					'Completed'        => 'RAP',
1408
+					''                 => 'RPP',
1409
+					'Incomplete'       => 'RPP',
1410
+					'Pending'          => 'RAP',
1411
+					// stati that only occurred on 3.1 attendees:
1412
+					'Payment Declined' => 'RPP',
1413
+					'Not Completed'    => 'RPP',
1414
+					'Cancelled'        => 'RPP',
1415
+					'Declined'         => 'RPP',
1416
+			);
1417
+		}
1418
+		return isset($mapping[ $payment_status ]) ? $mapping[ $payment_status ] : 'RNA';
1419
+	}
1420
+
1421
+
1422
+
1423
+	/**
1424
+	 * Makes sure the 3.1's image url is converted to an image attachment post to the 4.1 CPT event
1425
+	 * and sets it as the featured image on the CPT event
1426
+	 *
1427
+	 * @param type                            $old_event
1428
+	 * @param type                            $new_cpt_id
1429
+	 * @param  EE_Data_Migration_Script_Stage $migration_stage the stage which called this, where errors should be added
1430
+	 * @return boolean whether or not we had to do the big job of creating an image attachment
1431
+	 */
1432
+	public function convert_image_url_to_attachment_and_attach_to_post(
1433
+		$guid,
1434
+		$new_cpt_id,
1435
+		EE_Data_Migration_Script_Stage $migration_stage
1436
+	) {
1437
+		$created_attachment_post = false;
1438
+		$guid = $this->_get_original_guid($guid);
1439
+		if ($guid) {
1440
+			// check for an existing attachment post with this guid
1441
+			$attachment_post_id = $this->_get_image_attachment_id_by_GUID($guid);
1442
+			if (! $attachment_post_id) {
1443
+				// post thumbnail with that GUID doesn't exist, we should create one
1444
+				$attachment_post_id = $this->_create_image_attachment_from_GUID($guid, $migration_stage);
1445
+				$created_attachment_post = true;
1446
+			}
1447
+			// double-check we actually have an attachment post
1448
+			if ($attachment_post_id) {
1449
+				update_post_meta($new_cpt_id, '_thumbnail_id', $attachment_post_id);
1450
+			} else {
1451
+				$migration_stage->add_error(sprintf(esc_html__(
1452
+					"Could not update event image %s for CPT with ID %d, but attachments post ID is %d",
1453
+					"event_espresso"
1454
+				), $guid, $new_cpt_id, $attachment_post_id));
1455
+			}
1456
+		}
1457
+		return $created_attachment_post;
1458
+	}
1459
+
1460
+
1461
+
1462
+	/**
1463
+	 * In 3.1, the event thumbnail image DOESN'T point to the orignal image, but instead
1464
+	 * to a large thumbnail (which has nearly the same GUID, except it adds "-{width}x{height}" before the filetype,
1465
+	 * or whatever dimensions it is. Eg 'http://mysite.com/image1-300x400.jpg' instead of
1466
+	 * 'http://mysite.com/image1.jpg' ). This function attempts to strip that off and get the original file, if it
1467
+	 * exists
1468
+	 *
1469
+	 * @param string $guid_in_old_event
1470
+	 * @return string either the original guid, or $guid_in_old_event if we couldn't figure out what the original was
1471
+	 */
1472
+	private function _get_original_guid($guid_in_old_event)
1473
+	{
1474
+		$original_guid = preg_replace('~-\d*x\d*\.~', '.', $guid_in_old_event, 1);
1475
+		// do a head request to verify the file exists
1476
+		$head_response = wp_remote_head($original_guid);
1477
+		if (! $head_response instanceof WP_Error && $head_response['response']['message'] == 'OK') {
1478
+			return $original_guid;
1479
+		} else {
1480
+			return $guid_in_old_event;
1481
+		}
1482
+	}
1483
+
1484
+
1485
+
1486
+	/**
1487
+	 * Creates an image attachment post for the GUID. If the GUID points to a remote image,
1488
+	 * we download it to our uploads directory so that it can be properly processed (eg, creates different sizes of
1489
+	 * thumbnails)
1490
+	 *
1491
+	 * @param type                           $guid
1492
+	 * @param EE_Data_Migration_Script_Stage $migration_stage
1493
+	 * @return int
1494
+	 */
1495
+	private function _create_image_attachment_from_GUID($guid, EE_Data_Migration_Script_Stage $migration_stage)
1496
+	{
1497
+		if (! $guid) {
1498
+			$migration_stage->add_error(sprintf(esc_html__(
1499
+				"Cannot create image attachment for a blank GUID!",
1500
+				"event_espresso"
1501
+			)));
1502
+			return 0;
1503
+		}
1504
+		$wp_filetype = wp_check_filetype(basename($guid), null);
1505
+		$wp_upload_dir = wp_upload_dir();
1506
+		// if the file is located remotely, download it to our uploads DIR, because wp_genereate_attachmnet_metadata needs the file to be local
1507
+		if (strpos($guid, $wp_upload_dir['url']) === false) {
1508
+			// image is located remotely. download it and place it in the uploads directory
1509
+			if (! is_readable($guid)) {
1510
+				$migration_stage->add_error(sprintf(esc_html__(
1511
+					"Could not create image attachment from non-existent file: %s",
1512
+					"event_espresso"
1513
+				), $guid));
1514
+				return 0;
1515
+			}
1516
+			$contents = file_get_contents($guid);
1517
+			if ($contents === false) {
1518
+				$migration_stage->add_error(sprintf(esc_html__(
1519
+					"Could not read image at %s, and therefore couldnt create an attachment post for it.",
1520
+					"event_espresso"
1521
+				), $guid));
1522
+				return false;
1523
+			}
1524
+			$local_filepath = $wp_upload_dir['path'] . '/' . basename($guid);
1525
+			$savefile = fopen($local_filepath, 'w');
1526
+			fwrite($savefile, $contents);
1527
+			fclose($savefile);
1528
+			$guid = str_replace($wp_upload_dir['path'], $wp_upload_dir['url'], $local_filepath);
1529
+		} else {
1530
+			$local_filepath = str_replace($wp_upload_dir['url'], $wp_upload_dir['path'], $guid);
1531
+		}
1532
+		$attachment = array(
1533
+				'guid'           => $guid,
1534
+				'post_mime_type' => $wp_filetype['type'],
1535
+				'post_title'     => preg_replace('/\.[^.]+$/', '', basename($guid)),
1536
+				'post_content'   => '',
1537
+				'post_status'    => 'inherit',
1538
+		);
1539
+		$attach_id = wp_insert_attachment($attachment, $guid);
1540
+		if (! $attach_id) {
1541
+			$migration_stage->add_error(sprintf(esc_html__(
1542
+				"Could not create image attachment post from image '%s'. Attachment data was %s.",
1543
+				"event_espresso"
1544
+			), $guid, $this->_json_encode($attachment)));
1545
+			return $attach_id;
1546
+		}
1547
+		// you must first include the image.php file
1548
+		// for the function wp_generate_attachment_metadata() to work
1549
+		require_once(ABSPATH . 'wp-admin/includes/image.php');
1550
+		$attach_data = wp_generate_attachment_metadata($attach_id, $local_filepath);
1551
+		if (! $attach_data) {
1552
+			$migration_stage->add_error(sprintf(esc_html__(
1553
+				"Coudl not genereate attachment metadata for attachment post %d with filepath %s and GUID %s. Please check the file was downloaded properly.",
1554
+				"event_espresso"
1555
+			), $attach_id, $local_filepath, $guid));
1556
+			return $attach_id;
1557
+		}
1558
+		$metadata_save_result = wp_update_attachment_metadata($attach_id, $attach_data);
1559
+		if (! $metadata_save_result) {
1560
+			$migration_stage->add_error(sprintf(esc_html__(
1561
+				"Could not update attachment metadata for attachment %d with data %s",
1562
+				"event_espresso"
1563
+			), $attach_id, $this->_json_encode($attach_data)));
1564
+		}
1565
+		return $attach_id;
1566
+	}
1567
+
1568
+
1569
+
1570
+	/**
1571
+	 * Finds the attachment post containing info about an image attachment given the GUID (link to the image itself),
1572
+	 * and returns its ID.
1573
+	 *
1574
+	 * @global type  $wpdb
1575
+	 * @param string $guid
1576
+	 * @return int
1577
+	 */
1578
+	private function _get_image_attachment_id_by_GUID($guid)
1579
+	{
1580
+		global $wpdb;
1581
+		$attachment_id = $wpdb->get_var($wpdb->prepare("SELECT ID FROM $wpdb->posts WHERE guid=%s LIMIT 1", $guid));
1582
+		return $attachment_id;
1583
+	}
1584
+
1585
+
1586
+
1587
+	/**
1588
+	 * Returns a mysql-formatted DATETIME in UTC time, given a $DATETIME_string
1589
+	 * (and optionally a timezone; if none is given, the wp default is used)
1590
+	 *
1591
+	 * @param EE_Data_Migration_Script_base $stage
1592
+	 * @param array                         $row_of_data , the row from the DB (as an array) we're trying to find the
1593
+	 *                                                   UTC time for
1594
+	 * @param string                        $DATETIME_string
1595
+	 * @param string                        $timezone
1596
+	 * @return string
1597
+	 */
1598
+	public function convert_date_string_to_utc(
1599
+		EE_Data_Migration_Script_Stage $stage,
1600
+		$row_of_data,
1601
+		$DATETIME_string,
1602
+		$timezone = null
1603
+	) {
1604
+		$original_tz = $timezone;
1605
+		if (! $timezone) {
1606
+			$timezone = $this->_get_wp_timezone();
1607
+		}
1608
+		if (! $timezone) {
1609
+			$stage->add_error(sprintf(
1610
+				esc_html__("Could not find timezone given %s for %s", "event_espresso"),
1611
+				$original_tz,
1612
+				$row_of_data
1613
+			));
1614
+			$timezone = 'UTC';
1615
+		}
1616
+		try {
1617
+			$date_obj = new DateTime($DATETIME_string, new DateTimeZone($timezone));
1618
+			EEH_DTT_Helper::setTimezone($date_obj, new DateTimeZone('UTC'));
1619
+		} catch (Exception $e) {
1620
+			$stage->add_error(sprintf(esc_html__(
1621
+				"Could not convert time string '%s' using timezone '%s' into a proper DATETIME. Using current time instead.",
1622
+				"event_espresso"
1623
+			), $DATETIME_string, $timezone));
1624
+			$date_obj = new DateTime();
1625
+		}
1626
+		return $date_obj->format('Y-m-d H:i:s');
1627
+	}
1628
+
1629
+
1630
+
1631
+	/**
1632
+	 * Gets the default timezone string from wordpress (even if they set a gmt offset)
1633
+	 *
1634
+	 * @return string
1635
+	 */
1636
+	private function _get_wp_timezone()
1637
+	{
1638
+		$timezone = empty($timezone) ? get_option('timezone_string') : $timezone;
1639
+		// if timezone is STILL empty then let's get the GMT offset and then set the timezone_string using our converter
1640
+		if (empty($timezone)) {
1641
+			// let's get a the WordPress UTC offset
1642
+			$offset = get_option('gmt_offset');
1643
+			$timezone = $this->timezone_convert_to_string_from_offset($offset);
1644
+		}
1645
+		return $timezone;
1646
+	}
1647
+
1648
+
1649
+
1650
+	/**
1651
+	 * Gets the wordpress timezone string from a UTC offset
1652
+	 *
1653
+	 * @param int $offset
1654
+	 * @return boolean
1655
+	 */
1656
+	private function timezone_convert_to_string_from_offset($offset)
1657
+	{
1658
+		// shamelessly taken from bottom comment at http://ca1.php.net/manual/en/function.timezone-name-from-abbr.php because timezone_name_from_abbr() did not work as expected - its not reliable
1659
+		$offset *= 3600; // convert hour offset to seconds
1660
+		$abbrarray = timezone_abbreviations_list();
1661
+		foreach ($abbrarray as $abbr) {
1662
+			foreach ($abbr as $city) {
1663
+				if ($city['offset'] == $offset) {
1664
+					return $city['timezone_id'];
1665
+				}
1666
+			}
1667
+		}
1668
+		return false;
1669
+	}
1670
+
1671
+
1672
+
1673
+	public function migration_page_hooks()
1674
+	{
1675
+		add_filter(
1676
+			'FHEE__ee_migration_page__header',
1677
+			array($this, '_migrate_page_hook_simplify_version_strings'),
1678
+			10,
1679
+			3
1680
+		);
1681
+		add_filter(
1682
+			'FHEE__ee_migration_page__p_after_header',
1683
+			array($this, '_migration_page_hook_simplify_next_db_state'),
1684
+			10,
1685
+			2
1686
+		);
1687
+		add_filter(
1688
+			'FHEE__ee_migration_page__option_1_main',
1689
+			array($this, '_migrate_page_hook_simplify_version_strings'),
1690
+			10,
1691
+			3
1692
+		);
1693
+		add_filter(
1694
+			'FHEE__ee_migration_page__option_1_button_text',
1695
+			array($this, '_migrate_page_hook_simplify_version_strings'),
1696
+			10,
1697
+			3
1698
+		);
1699
+		add_action(
1700
+			'AHEE__ee_migration_page__option_1_extra_details',
1701
+			array($this, '_migration_page_hook_option_1_extra_details'),
1702
+			10,
1703
+			3
1704
+		);
1705
+		add_filter(
1706
+			'FHEE__ee_migration_page__option_2_main',
1707
+			array($this, '_migrate_page_hook_simplify_version_strings'),
1708
+			10,
1709
+			4
1710
+		);
1711
+		add_filter(
1712
+			'FHEE__ee_migration_page__option_2_button_text',
1713
+			array($this, '_migration_page_hook_simplify_next_db_state'),
1714
+			10,
1715
+			2
1716
+		);
1717
+		add_filter(
1718
+			'FHEE__ee_migration_page__option_2_details',
1719
+			array($this, '_migration_page_hook_simplify_next_db_state'),
1720
+			10,
1721
+			2
1722
+		);
1723
+		add_action(
1724
+			'AHEE__ee_migration_page__after_migration_options_table',
1725
+			array($this, '_migration_page_hook_after_migration_options_table')
1726
+		);
1727
+		add_filter(
1728
+			'FHEE__ee_migration_page__done_migration_header',
1729
+			array($this, '_migration_page_hook_simplify_next_db_state'),
1730
+			10,
1731
+			2
1732
+		);
1733
+		add_filter(
1734
+			'FHEE__ee_migration_page__p_after_done_migration_header',
1735
+			array($this, '_migration_page_hook_simplify_next_db_state'),
1736
+			10,
1737
+			2
1738
+		);
1739
+		add_filter(
1740
+			'FHEE__ee_migration_page__migration_options_template',
1741
+			array($this,'use_migration_options_from_ee3_template')
1742
+		);
1743
+	}
1744
+
1745
+
1746
+
1747
+	public function _migrate_page_hook_simplify_version_strings(
1748
+		$old_content,
1749
+		$current_db_state,
1750
+		$next_db_state,
1751
+		$ultimate_db_state = null
1752
+	) {
1753
+		return str_replace(
1754
+			array($current_db_state, $next_db_state, $ultimate_db_state),
1755
+			array(esc_html__('EE3', 'event_espresso'), esc_html__('EE4', 'event_espresso'), esc_html__("EE4", 'event_espresso')),
1756
+			$old_content
1757
+		);
1758
+	}
1759
+
1760
+
1761
+
1762
+	public function _migration_page_hook_simplify_next_db_state($old_content, $next_db_state)
1763
+	{
1764
+		return str_replace($next_db_state, esc_html__("EE4", 'event_espresso'), $old_content);
1765
+	}
1766
+
1767
+
1768
+
1769
+	public function _migration_page_hook_option_1_extra_details()
1770
+	{
1771
+		?>
1772 1772
         <p><?php printf(esc_html__(
1773
-            "Note: many of your EE3 shortcodes will be changed to EE4 shortcodes during this migration (among many other things). Should you revert to EE3, then you should restore to your backup or manually change the EE4 shortcodes back to their EE3 equivalents",
1774
-            "event_espresso"
1775
-        )); ?></p><?php
1776
-    }
1773
+			"Note: many of your EE3 shortcodes will be changed to EE4 shortcodes during this migration (among many other things). Should you revert to EE3, then you should restore to your backup or manually change the EE4 shortcodes back to their EE3 equivalents",
1774
+			"event_espresso"
1775
+		)); ?></p><?php
1776
+	}
1777 1777
 
1778 1778
 
1779 1779
 
1780
-    public function _migration_page_hook_after_migration_options_table()
1781
-    {
1782
-        ?><p class="ee-attention">
1780
+	public function _migration_page_hook_after_migration_options_table()
1781
+	{
1782
+		?><p class="ee-attention">
1783 1783
         <strong><span class="reminder-spn">
1784 1784
                 <?php esc_html_e(
1785
-                    "Important note to those using Event Espresso 3 addons: ",
1786
-                    "event_espresso"
1787
-                ); ?></span></strong>
1785
+					"Important note to those using Event Espresso 3 addons: ",
1786
+					"event_espresso"
1787
+				); ?></span></strong>
1788 1788
         <br/>
1789 1789
         <?php esc_html_e(
1790
-            "Unless an addon's description on our website explicitly states that it is compatible with EE4, you should consider it incompatible and know that it WILL NOT WORK correctly with this new version of Event Espresso 4 (EE4). As well, any data for incompatible addons will NOT BE MIGRATED until an updated EE4 compatible version of the addon is available. If you want, or need to keep using your EE3 addons, you should simply continue using EE3 until EE4 compatible versions of your addons become available. To continue using EE3 for now, just deactivate EE4 and reactivate EE3.",
1791
-            "event_espresso"
1792
-        ); ?>
1790
+			"Unless an addon's description on our website explicitly states that it is compatible with EE4, you should consider it incompatible and know that it WILL NOT WORK correctly with this new version of Event Espresso 4 (EE4). As well, any data for incompatible addons will NOT BE MIGRATED until an updated EE4 compatible version of the addon is available. If you want, or need to keep using your EE3 addons, you should simply continue using EE3 until EE4 compatible versions of your addons become available. To continue using EE3 for now, just deactivate EE4 and reactivate EE3.",
1791
+			"event_espresso"
1792
+		); ?>
1793 1793
         </p><?php
1794
-    }
1794
+	}
1795 1795
 
1796 1796
 
1797 1797
 
1798
-    /**
1799
-     * When showing the migration options, show more options and info than normal (ie, give folks the option
1800
-     * to start using EE4 without migrating. From EE3 that's fine, because it doesn't actually remove any data, because
1801
-     * EE4 doesn't have any yet. But when migrating from EE4 it would remove old data, so its not a great idea).
1802
-     * @param $template_filepath
1803
-     * @return string
1804
-     */
1805
-    public function use_migration_options_from_ee3_template($template_filepath)
1806
-    {
1807
-        return EE_MAINTENANCE_TEMPLATE_PATH . 'migration_options_from_ee3.template.php';
1808
-    }
1798
+	/**
1799
+	 * When showing the migration options, show more options and info than normal (ie, give folks the option
1800
+	 * to start using EE4 without migrating. From EE3 that's fine, because it doesn't actually remove any data, because
1801
+	 * EE4 doesn't have any yet. But when migrating from EE4 it would remove old data, so its not a great idea).
1802
+	 * @param $template_filepath
1803
+	 * @return string
1804
+	 */
1805
+	public function use_migration_options_from_ee3_template($template_filepath)
1806
+	{
1807
+		return EE_MAINTENANCE_TEMPLATE_PATH . 'migration_options_from_ee3.template.php';
1808
+	}
1809 1809
 }
Please login to merge, or discard this patch.
core/data_migration_scripts/EE_DMS_Core_4_3_0.dms.php 2 patches
Spacing   +12 added lines, -12 removed lines patch added patch discarded remove patch
@@ -11,13 +11,13 @@  discard block
 block discarded – undo
11 11
 // unfortunately, this needs to be done upon INCLUSION of this file,
12 12
 // instead of construction, because it only gets constructed on first page load
13 13
 // (all other times it gets resurrected from a wordpress option)
14
-$stages = glob(EE_CORE . 'data_migration_scripts/4_3_0_stages/*');
14
+$stages = glob(EE_CORE.'data_migration_scripts/4_3_0_stages/*');
15 15
 $class_to_filepath = array();
16
-if (! empty($stages)) {
16
+if ( ! empty($stages)) {
17 17
     foreach ($stages as $filepath) {
18 18
         $matches = array();
19 19
         preg_match('~4_3_0_stages/(.*).dmsstage.php~', $filepath, $matches);
20
-        $class_to_filepath[ $matches[1] ] = $filepath;
20
+        $class_to_filepath[$matches[1]] = $filepath;
21 21
     }
22 22
 }
23 23
 // give addons a chance to autoload their stages too
@@ -56,10 +56,10 @@  discard block
 block discarded – undo
56 56
         if (version_compare($version_string, '4.3.0.decaf', '<') && version_compare($version_string, '4.2.0.decaf', '>=')) {
57 57
 //          echo "$version_string can be migrated fro";
58 58
             return true;
59
-        } elseif (! $version_string) {
59
+        } elseif ( ! $version_string) {
60 60
 //          echo "no version string provided: $version_string";
61 61
             // no version string provided... this must be pre 4.2
62
-            return false;// changed mind. dont want people thinking they should migrate yet because they cant
62
+            return false; // changed mind. dont want people thinking they should migrate yet because they cant
63 63
         } else {
64 64
 //          echo "$version_string doesnt apply";
65 65
             return false;
@@ -71,7 +71,7 @@  discard block
 block discarded – undo
71 71
     public function schema_changes_before_migration()
72 72
     {
73 73
         // relies on 4.1's EEH_Activation::create_table
74
-        require_once(EE_HELPERS . 'EEH_Activation.helper.php');
74
+        require_once(EE_HELPERS.'EEH_Activation.helper.php');
75 75
         $table_name = 'esp_answer';
76 76
         $sql = "ANS_ID int(10) unsigned NOT NULL AUTO_INCREMENT,
77 77
 					REG_ID int(10) unsigned NOT NULL,
@@ -474,11 +474,11 @@  discard block
 block discarded – undo
474 474
     public function insert_default_tickets()
475 475
     {
476 476
         global $wpdb;
477
-        $ticket_table = $wpdb->prefix . "esp_ticket";
477
+        $ticket_table = $wpdb->prefix."esp_ticket";
478 478
         if ($this->_get_table_analysis()->tableExists($ticket_table)) {
479
-            $SQL = 'SELECT COUNT(TKT_ID) FROM ' . $ticket_table;
479
+            $SQL = 'SELECT COUNT(TKT_ID) FROM '.$ticket_table;
480 480
             $tickets_exist = $wpdb->get_var($SQL);
481
-            if (! $tickets_exist) {
481
+            if ( ! $tickets_exist) {
482 482
                 $SQL = "INSERT INTO $ticket_table
483 483
 					( TKT_ID, TTM_ID, TKT_name, TKT_description, TKT_qty, TKT_sold, TKT_uses, TKT_required, TKT_min, TKT_max, TKT_price, TKT_start_date, TKT_end_date, TKT_taxable, TKT_order, TKT_row, TKT_is_default, TKT_parent, TKT_deleted ) VALUES
484 484
 					( 1, 0, '"
@@ -488,11 +488,11 @@  discard block
 block discarded – undo
488 488
                 $wpdb->query($SQL);
489 489
             }
490 490
         }
491
-        $ticket_price_table = $wpdb->prefix . "esp_ticket_price";
491
+        $ticket_price_table = $wpdb->prefix."esp_ticket_price";
492 492
         if ($this->_get_table_analysis()->tableExists($ticket_price_table)) {
493
-            $SQL = 'SELECT COUNT(TKP_ID) FROM ' . $ticket_price_table;
493
+            $SQL = 'SELECT COUNT(TKP_ID) FROM '.$ticket_price_table;
494 494
             $ticket_prc_exist = $wpdb->get_var($SQL);
495
-            if (! $ticket_prc_exist) {
495
+            if ( ! $ticket_prc_exist) {
496 496
                 $SQL = "INSERT INTO $ticket_price_table
497 497
 				( TKP_ID, TKT_ID, PRC_ID ) VALUES
498 498
 				( 1, 1, 1 )
Please login to merge, or discard this patch.
Indentation   +184 added lines, -184 removed lines patch added patch discarded remove patch
@@ -16,11 +16,11 @@  discard block
 block discarded – undo
16 16
 $stages = glob(EE_CORE . 'data_migration_scripts/4_3_0_stages/*');
17 17
 $class_to_filepath = array();
18 18
 if (! empty($stages)) {
19
-    foreach ($stages as $filepath) {
20
-        $matches = array();
21
-        preg_match('~4_3_0_stages/(.*).dmsstage.php~', $filepath, $matches);
22
-        $class_to_filepath[ $matches[1] ] = $filepath;
23
-    }
19
+	foreach ($stages as $filepath) {
20
+		$matches = array();
21
+		preg_match('~4_3_0_stages/(.*).dmsstage.php~', $filepath, $matches);
22
+		$class_to_filepath[ $matches[1] ] = $filepath;
23
+	}
24 24
 }
25 25
 // give addons a chance to autoload their stages too
26 26
 $class_to_filepath = apply_filters('FHEE__EE_DMS_4_3_0__autoloaded_stages', $class_to_filepath);
@@ -30,56 +30,56 @@  discard block
 block discarded – undo
30 30
 
31 31
 class EE_DMS_Core_4_3_0 extends EE_Data_Migration_Script_Base
32 32
 {
33
-    /**
34
-     * EE_DMS_Core_4_3_0 constructor.
35
-     *
36
-     * @param TableManager  $table_manager
37
-     * @param TableAnalysis $table_analysis
38
-     */
39
-    public function __construct(TableManager $table_manager = null, TableAnalysis $table_analysis = null)
40
-    {
41
-        $this->_pretty_name = esc_html__("Data Update to Event Espresso 4.3.0", "event_espresso");
42
-        $this->_priority = 10;
43
-        $this->_migration_stages = array(
44
-            new EE_DMS_4_3_0_question_option_order(),
45
-            new EE_DMS_4_3_0_event_message_templates(),
46
-        );
47
-        parent::__construct($table_manager, $table_analysis);
48
-    }
33
+	/**
34
+	 * EE_DMS_Core_4_3_0 constructor.
35
+	 *
36
+	 * @param TableManager  $table_manager
37
+	 * @param TableAnalysis $table_analysis
38
+	 */
39
+	public function __construct(TableManager $table_manager = null, TableAnalysis $table_analysis = null)
40
+	{
41
+		$this->_pretty_name = esc_html__("Data Update to Event Espresso 4.3.0", "event_espresso");
42
+		$this->_priority = 10;
43
+		$this->_migration_stages = array(
44
+			new EE_DMS_4_3_0_question_option_order(),
45
+			new EE_DMS_4_3_0_event_message_templates(),
46
+		);
47
+		parent::__construct($table_manager, $table_analysis);
48
+	}
49 49
 
50 50
 
51 51
 
52
-    public function can_migrate_from_version($version_array)
53
-    {
54
-        $version_string = $version_array['Core'];
55
-        if (version_compare($version_string, '4.3.0.decaf', '<') && version_compare($version_string, '4.2.0.decaf', '>=')) {
52
+	public function can_migrate_from_version($version_array)
53
+	{
54
+		$version_string = $version_array['Core'];
55
+		if (version_compare($version_string, '4.3.0.decaf', '<') && version_compare($version_string, '4.2.0.decaf', '>=')) {
56 56
 //          echo "$version_string can be migrated fro";
57
-            return true;
58
-        } elseif (! $version_string) {
57
+			return true;
58
+		} elseif (! $version_string) {
59 59
 //          echo "no version string provided: $version_string";
60
-            // no version string provided... this must be pre 4.2
61
-            return false;// changed mind. dont want people thinking they should migrate yet because they cant
62
-        } else {
60
+			// no version string provided... this must be pre 4.2
61
+			return false;// changed mind. dont want people thinking they should migrate yet because they cant
62
+		} else {
63 63
 //          echo "$version_string doesnt apply";
64
-            return false;
65
-        }
66
-    }
64
+			return false;
65
+		}
66
+	}
67 67
 
68 68
 
69 69
 
70
-    public function schema_changes_before_migration()
71
-    {
72
-        // relies on 4.1's EEH_Activation::create_table
73
-        require_once(EE_HELPERS . 'EEH_Activation.helper.php');
74
-        $table_name = 'esp_answer';
75
-        $sql = "ANS_ID int(10) unsigned NOT NULL AUTO_INCREMENT,
70
+	public function schema_changes_before_migration()
71
+	{
72
+		// relies on 4.1's EEH_Activation::create_table
73
+		require_once(EE_HELPERS . 'EEH_Activation.helper.php');
74
+		$table_name = 'esp_answer';
75
+		$sql = "ANS_ID int(10) unsigned NOT NULL AUTO_INCREMENT,
76 76
 					REG_ID int(10) unsigned NOT NULL,
77 77
 					QST_ID int(10) unsigned NOT NULL,
78 78
 					ANS_value text NOT NULL,
79 79
 					PRIMARY KEY  (ANS_ID)";
80
-        $this->_table_should_exist_previously($table_name, $sql, 'ENGINE=InnoDB');
81
-        $table_name = 'esp_attendee_meta';
82
-        $sql = "ATTM_ID int(10) unsigned NOT	NULL AUTO_INCREMENT,
80
+		$this->_table_should_exist_previously($table_name, $sql, 'ENGINE=InnoDB');
81
+		$table_name = 'esp_attendee_meta';
82
+		$sql = "ATTM_ID int(10) unsigned NOT	NULL AUTO_INCREMENT,
83 83
 						ATT_ID bigint(20) unsigned NOT NULL,
84 84
 						ATT_fname varchar(45) NOT NULL,
85 85
 						ATT_lname varchar(45) NOT	NULL,
@@ -95,9 +95,9 @@  discard block
 block discarded – undo
95 95
 								KEY ATT_fname (ATT_fname),
96 96
 								KEY ATT_lname (ATT_lname),
97 97
 								KEY ATT_email (ATT_email(191))";
98
-        $this->_table_should_exist_previously($table_name, $sql, 'ENGINE=InnoDB ');
99
-        $table_name = 'esp_country';
100
-        $sql = "CNT_ISO varchar(2) COLLATE utf8_bin NOT NULL,
98
+		$this->_table_should_exist_previously($table_name, $sql, 'ENGINE=InnoDB ');
99
+		$table_name = 'esp_country';
100
+		$sql = "CNT_ISO varchar(2) COLLATE utf8_bin NOT NULL,
101 101
 					  CNT_ISO3 varchar(3) COLLATE utf8_bin NOT NULL,
102 102
 					  RGN_ID tinyint(3) unsigned DEFAULT NULL,
103 103
 					  CNT_name varchar(45) COLLATE utf8_bin NOT NULL,
@@ -113,9 +113,9 @@  discard block
 block discarded – undo
113 113
 					  CNT_is_EU tinyint(1) DEFAULT '0',
114 114
 					  CNT_active tinyint(1) DEFAULT '0',
115 115
 					  PRIMARY KEY  (CNT_ISO)";
116
-        $this->_table_should_exist_previously($table_name, $sql, 'ENGINE=InnoDB');
117
-        $table_name = 'esp_datetime';
118
-        $sql = "DTT_ID int(10) unsigned NOT NULL AUTO_INCREMENT,
116
+		$this->_table_should_exist_previously($table_name, $sql, 'ENGINE=InnoDB');
117
+		$table_name = 'esp_datetime';
118
+		$sql = "DTT_ID int(10) unsigned NOT NULL AUTO_INCREMENT,
119 119
 				  EVT_ID bigint(20) unsigned NOT NULL,
120 120
 				  DTT_name varchar(255) NOT NULL DEFAULT '',
121 121
 				  DTT_description text NOT NULL,
@@ -130,9 +130,9 @@  discard block
 block discarded – undo
130 130
 						PRIMARY KEY  (DTT_ID),
131 131
 						KEY EVT_ID (EVT_ID),
132 132
 						KEY DTT_is_primary (DTT_is_primary)";
133
-        $this->_table_should_exist_previously($table_name, $sql, 'ENGINE=InnoDB');
134
-        $table_name = 'esp_event_meta';
135
-        $sql = "
133
+		$this->_table_should_exist_previously($table_name, $sql, 'ENGINE=InnoDB');
134
+		$table_name = 'esp_event_meta';
135
+		$sql = "
136 136
 			EVTM_ID int(10) NOT NULL AUTO_INCREMENT,
137 137
 			EVT_ID bigint(20) unsigned NOT NULL,
138 138
 			EVT_display_desc tinyint(1) unsigned NOT NULL DEFAULT 1,
@@ -147,31 +147,31 @@  discard block
 block discarded – undo
147 147
 			EVT_external_URL varchar(200) NULL,
148 148
 			EVT_donations tinyint(1) NULL,
149 149
 			PRIMARY KEY  (EVTM_ID)";
150
-        $this->_table_should_exist_previously($table_name, $sql, 'ENGINE=InnoDB');
151
-        $table_name = 'esp_event_question_group';
152
-        $sql = "EQG_ID int(10) unsigned NOT NULL AUTO_INCREMENT,
150
+		$this->_table_should_exist_previously($table_name, $sql, 'ENGINE=InnoDB');
151
+		$table_name = 'esp_event_question_group';
152
+		$sql = "EQG_ID int(10) unsigned NOT NULL AUTO_INCREMENT,
153 153
 					EVT_ID bigint(20) unsigned NOT NULL,
154 154
 					QSG_ID int(10) unsigned NOT NULL,
155 155
 					EQG_primary tinyint(1) unsigned NOT NULL DEFAULT 0,
156 156
 					PRIMARY KEY  (EQG_ID)";
157
-        $this->_table_should_exist_previously($table_name, $sql, 'ENGINE=InnoDB');
158
-        $table_name = 'esp_event_venue';
159
-        $sql = "EVV_ID int(11) NOT NULL AUTO_INCREMENT,
157
+		$this->_table_should_exist_previously($table_name, $sql, 'ENGINE=InnoDB');
158
+		$table_name = 'esp_event_venue';
159
+		$sql = "EVV_ID int(11) NOT NULL AUTO_INCREMENT,
160 160
 				EVT_ID bigint(20) unsigned NOT NULL,
161 161
 				VNU_ID bigint(20) unsigned NOT NULL,
162 162
 				EVV_primary tinyint(1) unsigned NOT NULL DEFAULT 0,
163 163
 				PRIMARY KEY  (EVV_ID)";
164
-        $this->_table_should_exist_previously($table_name, $sql, 'ENGINE=InnoDB');
165
-        $table_name = 'esp_extra_meta';
166
-        $sql = "EXM_ID int(11) NOT NULL AUTO_INCREMENT,
164
+		$this->_table_should_exist_previously($table_name, $sql, 'ENGINE=InnoDB');
165
+		$table_name = 'esp_extra_meta';
166
+		$sql = "EXM_ID int(11) NOT NULL AUTO_INCREMENT,
167 167
 				OBJ_ID int(11) DEFAULT NULL,
168 168
 				EXM_type varchar(45) DEFAULT NULL,
169 169
 				EXM_key varchar(45) DEFAULT NULL,
170 170
 				EXM_value text,
171 171
 				PRIMARY KEY  (EXM_ID)";
172
-        $this->_table_should_exist_previously($table_name, $sql, 'ENGINE=InnoDB');
173
-        $table_name = 'esp_line_item';
174
-        $sql = "LIN_ID int(11) NOT NULL AUTO_INCREMENT,
172
+		$this->_table_should_exist_previously($table_name, $sql, 'ENGINE=InnoDB');
173
+		$table_name = 'esp_line_item';
174
+		$sql = "LIN_ID int(11) NOT NULL AUTO_INCREMENT,
175 175
 				LIN_code varchar(245) NOT NULL DEFAULT '',
176 176
 				TXN_ID int(11) DEFAULT NULL,
177 177
 				LIN_name varchar(245) NOT NULL DEFAULT '',
@@ -187,19 +187,19 @@  discard block
 block discarded – undo
187 187
 				OBJ_ID int(11) DEFAULT NULL,
188 188
 				OBJ_type varchar(45)DEFAULT NULL,
189 189
 				PRIMARY KEY  (LIN_ID)";
190
-        $this->_table_should_exist_previously($table_name, $sql, 'ENGINE=InnoDB');
191
-        $table_name = 'esp_message_template';
192
-        $sql = "MTP_ID int(10) unsigned NOT NULL AUTO_INCREMENT,
190
+		$this->_table_should_exist_previously($table_name, $sql, 'ENGINE=InnoDB');
191
+		$table_name = 'esp_message_template';
192
+		$sql = "MTP_ID int(10) unsigned NOT NULL AUTO_INCREMENT,
193 193
 					GRP_ID int(10) unsigned NOT NULL,
194 194
 					MTP_context varchar(50) NOT NULL,
195 195
 					MTP_template_field varchar(30) NOT NULL,
196 196
 					MTP_content text NOT NULL,
197 197
 					PRIMARY KEY  (MTP_ID),
198 198
 					KEY GRP_ID (GRP_ID)";
199
-        $this->_table_should_exist_previously($table_name, $sql, 'ENGINE=InnoDB');
200
-        $this->_get_table_manager()->dropIndex('esp_message_template_group', 'EVT_ID');
201
-        $table_name = 'esp_message_template_group';
202
-        $sql = "GRP_ID int(10) unsigned NOT NULL AUTO_INCREMENT,
199
+		$this->_table_should_exist_previously($table_name, $sql, 'ENGINE=InnoDB');
200
+		$this->_get_table_manager()->dropIndex('esp_message_template_group', 'EVT_ID');
201
+		$table_name = 'esp_message_template_group';
202
+		$sql = "GRP_ID int(10) unsigned NOT NULL AUTO_INCREMENT,
203 203
 					MTP_user_id int(10) NOT NULL DEFAULT '1',
204 204
 					MTP_name varchar(245) NOT NULL DEFAULT '',
205 205
 					MTP_description varchar(245) NOT NULL DEFAULT '',
@@ -211,17 +211,17 @@  discard block
 block discarded – undo
211 211
 					MTP_is_active tinyint(1) NOT NULL DEFAULT '1',
212 212
 					PRIMARY KEY  (GRP_ID),
213 213
 					KEY MTP_user_id (MTP_user_id)";
214
-        $this->_table_should_exist_previously($table_name, $sql, 'ENGINE=InnoDB');
215
-        $table_name = 'esp_event_message_template';
216
-        $sql = "EMT_ID bigint(20) unsigned NOT NULL AUTO_INCREMENT,
214
+		$this->_table_should_exist_previously($table_name, $sql, 'ENGINE=InnoDB');
215
+		$table_name = 'esp_event_message_template';
216
+		$sql = "EMT_ID bigint(20) unsigned NOT NULL AUTO_INCREMENT,
217 217
 					EVT_ID bigint(20) unsigned NOT NULL DEFAULT 0,
218 218
 					GRP_ID int(10) unsigned NOT NULL DEFAULT 0,
219 219
 					PRIMARY KEY  (EMT_ID),
220 220
 					KEY EVT_ID (EVT_ID),
221 221
 					KEY GRP_ID (GRP_ID)";
222
-        $this->_table_is_new_in_this_version($table_name, $sql, 'ENGINE=InnoDB');
223
-        $table_name = 'esp_payment';
224
-        $sql = "PAY_ID int(10) unsigned NOT NULL AUTO_INCREMENT,
222
+		$this->_table_is_new_in_this_version($table_name, $sql, 'ENGINE=InnoDB');
223
+		$table_name = 'esp_payment';
224
+		$sql = "PAY_ID int(10) unsigned NOT NULL AUTO_INCREMENT,
225 225
 					TXN_ID int(10) unsigned DEFAULT NULL,
226 226
 					STS_ID varchar(3) COLLATE utf8_bin DEFAULT NULL,
227 227
 					PAY_timestamp datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
@@ -237,9 +237,9 @@  discard block
 block discarded – undo
237 237
 					PRIMARY KEY  (PAY_ID),
238 238
 					KEY TXN_ID (TXN_ID),
239 239
 					KEY PAY_timestamp (PAY_timestamp)";
240
-        $this->_table_should_exist_previously($table_name, $sql, 'ENGINE=InnoDB ');
241
-        $table_name = "esp_ticket";
242
-        $sql = "TKT_ID int(10) unsigned NOT NULL AUTO_INCREMENT,
240
+		$this->_table_should_exist_previously($table_name, $sql, 'ENGINE=InnoDB ');
241
+		$table_name = "esp_ticket";
242
+		$sql = "TKT_ID int(10) unsigned NOT NULL AUTO_INCREMENT,
243 243
 					  TTM_ID int(10) unsigned NOT NULL,
244 244
 					  TKT_name varchar(245) NOT NULL DEFAULT '',
245 245
 					  TKT_description text NOT NULL,
@@ -259,28 +259,28 @@  discard block
 block discarded – undo
259 259
 					  TKT_parent int(10) unsigned DEFAULT '0',
260 260
 					  TKT_deleted tinyint(1) NOT NULL DEFAULT '0',
261 261
 					  PRIMARY KEY  (TKT_ID)";
262
-        $this->_table_should_exist_previously($table_name, $sql, 'ENGINE=InnoDB');
263
-        $table_name = "esp_ticket_price";
264
-        $sql = "TKP_ID int(10) unsigned NOT NULL AUTO_INCREMENT,
262
+		$this->_table_should_exist_previously($table_name, $sql, 'ENGINE=InnoDB');
263
+		$table_name = "esp_ticket_price";
264
+		$sql = "TKP_ID int(10) unsigned NOT NULL AUTO_INCREMENT,
265 265
 					  TKT_ID int(10) unsigned NOT NULL,
266 266
 					  PRC_ID int(10) unsigned NOT NULL,
267 267
 					  PRIMARY KEY  (TKP_ID)";
268
-        $this->_table_should_exist_previously($table_name, $sql, 'ENGINE=InnoDB');
269
-        $table_name = "esp_datetime_ticket";
270
-        $sql = "DTK_ID int(10) unsigned NOT NULL AUTO_INCREMENT,
268
+		$this->_table_should_exist_previously($table_name, $sql, 'ENGINE=InnoDB');
269
+		$table_name = "esp_datetime_ticket";
270
+		$sql = "DTK_ID int(10) unsigned NOT NULL AUTO_INCREMENT,
271 271
 					  DTT_ID int(10) unsigned NOT NULL,
272 272
 					  TKT_ID int(10) unsigned NOT NULL,
273 273
 					  PRIMARY KEY  (DTK_ID)";
274
-        $this->_table_should_exist_previously($table_name, $sql, 'ENGINE=InnoDB');
275
-        $table_name = "esp_ticket_template";
276
-        $sql = "TTM_ID int(10) unsigned NOT NULL AUTO_INCREMENT,
274
+		$this->_table_should_exist_previously($table_name, $sql, 'ENGINE=InnoDB');
275
+		$table_name = "esp_ticket_template";
276
+		$sql = "TTM_ID int(10) unsigned NOT NULL AUTO_INCREMENT,
277 277
 					  TTM_name varchar(45) NOT NULL,
278 278
 					  TTM_description text,
279 279
 					  TTM_file varchar(45),
280 280
 					  PRIMARY KEY  (TTM_ID)";
281
-        $this->_table_should_exist_previously($table_name, $sql, 'ENGINE=InnoDB');
282
-        $table_name = "esp_price";
283
-        $sql = "PRC_ID int(10) unsigned NOT NULL AUTO_INCREMENT,
281
+		$this->_table_should_exist_previously($table_name, $sql, 'ENGINE=InnoDB');
282
+		$table_name = "esp_price";
283
+		$sql = "PRC_ID int(10) unsigned NOT NULL AUTO_INCREMENT,
284 284
 					  PRT_ID tinyint(3) unsigned NOT NULL,
285 285
 					  PRC_amount decimal(10,3) NOT NULL DEFAULT '0.00',
286 286
 					  PRC_name varchar(245) NOT NULL,
@@ -291,9 +291,9 @@  discard block
 block discarded – undo
291 291
 					  PRC_order tinyint(3) unsigned NOT NULL DEFAULT '0',
292 292
 					  PRC_parent int(10) unsigned DEFAULT 0,
293 293
 					  PRIMARY KEY  (PRC_ID)";
294
-        $this->_table_should_exist_previously($table_name, $sql, 'ENGINE=InnoDB');
295
-        $table_name = "esp_price_type";
296
-        $sql = "PRT_ID tinyint(3) unsigned NOT NULL AUTO_INCREMENT,
294
+		$this->_table_should_exist_previously($table_name, $sql, 'ENGINE=InnoDB');
295
+		$table_name = "esp_price_type";
296
+		$sql = "PRT_ID tinyint(3) unsigned NOT NULL AUTO_INCREMENT,
297 297
 				  PRT_name varchar(45) NOT NULL,
298 298
 				  PBT_ID tinyint(3) unsigned NOT NULL DEFAULT '1',
299 299
 				  PRT_is_percent tinyint(1) NOT NULL DEFAULT '0',
@@ -301,9 +301,9 @@  discard block
 block discarded – undo
301 301
 				  PRT_deleted tinyint(1) NOT NULL DEFAULT '0',
302 302
 				  UNIQUE KEY PRT_name_UNIQUE (PRT_name),
303 303
 				  PRIMARY KEY  (PRT_ID)";
304
-        $this->_table_should_exist_previously($table_name, $sql, 'ENGINE=InnoDB');
305
-        $table_name = 'esp_question';
306
-        $sql = 'QST_ID int(10) unsigned NOT NULL AUTO_INCREMENT,
304
+		$this->_table_should_exist_previously($table_name, $sql, 'ENGINE=InnoDB');
305
+		$table_name = 'esp_question';
306
+		$sql = 'QST_ID int(10) unsigned NOT NULL AUTO_INCREMENT,
307 307
 					QST_display_text text NOT NULL,
308 308
 					QST_admin_label varchar(255) NOT NULL,
309 309
 					QST_system varchar(25) DEFAULT NULL,
@@ -315,10 +315,10 @@  discard block
 block discarded – undo
315 315
 					QST_wp_user bigint(20) unsigned NULL,
316 316
 					QST_deleted tinyint(1) unsigned NOT NULL DEFAULT 0,
317 317
 					PRIMARY KEY  (QST_ID)';
318
-        $this->_table_should_exist_previously($table_name, $sql, 'ENGINE=InnoDB');
319
-        $this->_get_table_manager()->dropIndex('esp_question_group', 'QSG_identifier_UNIQUE');
320
-        $table_name = 'esp_question_group';
321
-        $sql = 'QSG_ID int(10) unsigned NOT NULL AUTO_INCREMENT,
318
+		$this->_table_should_exist_previously($table_name, $sql, 'ENGINE=InnoDB');
319
+		$this->_get_table_manager()->dropIndex('esp_question_group', 'QSG_identifier_UNIQUE');
320
+		$table_name = 'esp_question_group';
321
+		$sql = 'QSG_ID int(10) unsigned NOT NULL AUTO_INCREMENT,
322 322
 					QSG_name varchar(255) NOT NULL,
323 323
 					QSG_identifier varchar(100) NOT NULL,
324 324
 					QSG_desc text NULL,
@@ -329,25 +329,25 @@  discard block
 block discarded – undo
329 329
 					QSG_deleted tinyint(1) unsigned NOT NULL DEFAULT 0,
330 330
 					PRIMARY KEY  (QSG_ID),
331 331
 					UNIQUE KEY QSG_identifier_UNIQUE (QSG_identifier ASC)';
332
-        $this->_table_should_exist_previously($table_name, $sql, 'ENGINE=InnoDB');
333
-        $table_name = 'esp_question_group_question';
334
-        $sql = "QGQ_ID int(10) unsigned NOT NULL AUTO_INCREMENT,
332
+		$this->_table_should_exist_previously($table_name, $sql, 'ENGINE=InnoDB');
333
+		$table_name = 'esp_question_group_question';
334
+		$sql = "QGQ_ID int(10) unsigned NOT NULL AUTO_INCREMENT,
335 335
 					QSG_ID int(10) unsigned NOT NULL,
336 336
 					QST_ID int(10) unsigned NOT NULL,
337 337
 					QGQ_order int(10) unsigned NOT NULL DEFAULT 0,
338 338
 					PRIMARY KEY  (QGQ_ID) ";
339
-        $this->_table_should_exist_previously($table_name, $sql, 'ENGINE=InnoDB');
340
-        $table_name = 'esp_question_option';
341
-        $sql = "QSO_ID int(10) unsigned NOT NULL AUTO_INCREMENT,
339
+		$this->_table_should_exist_previously($table_name, $sql, 'ENGINE=InnoDB');
340
+		$table_name = 'esp_question_option';
341
+		$sql = "QSO_ID int(10) unsigned NOT NULL AUTO_INCREMENT,
342 342
 					QSO_value varchar(255) NOT NULL,
343 343
 					QSO_desc text NOT NULL,
344 344
 					QST_ID int(10) unsigned NOT NULL,
345 345
 					QSO_order int(10) unsigned NOT NULL DEFAULT 0,
346 346
 					QSO_deleted tinyint(1) unsigned NOT NULL DEFAULT 0,
347 347
 					PRIMARY KEY  (QSO_ID)";
348
-        $this->_table_should_exist_previously($table_name, $sql, 'ENGINE=InnoDB');
349
-        $table_name = 'esp_registration';
350
-        $sql = "REG_ID int(10) unsigned NOT NULL AUTO_INCREMENT,
348
+		$this->_table_should_exist_previously($table_name, $sql, 'ENGINE=InnoDB');
349
+		$table_name = 'esp_registration';
350
+		$sql = "REG_ID int(10) unsigned NOT NULL AUTO_INCREMENT,
351 351
 					  EVT_ID bigint(20) unsigned NOT NULL,
352 352
 					  ATT_ID bigint(20) unsigned NOT NULL,
353 353
 					  TXN_ID int(10) unsigned NOT NULL,
@@ -370,25 +370,25 @@  discard block
 block discarded – undo
370 370
 					  KEY STS_ID (STS_ID),
371 371
 					  KEY REG_url_link (REG_url_link),
372 372
 					  KEY REG_code (REG_code)";
373
-        $this->_table_should_exist_previously($table_name, $sql, 'ENGINE=InnoDB ');
374
-        $table_name = 'esp_checkin';
375
-        $sql = "CHK_ID int(10) unsigned NOT NULL AUTO_INCREMENT,
373
+		$this->_table_should_exist_previously($table_name, $sql, 'ENGINE=InnoDB ');
374
+		$table_name = 'esp_checkin';
375
+		$sql = "CHK_ID int(10) unsigned NOT NULL AUTO_INCREMENT,
376 376
 					REG_ID int(10) unsigned NOT NULL,
377 377
 					DTT_ID int(10) unsigned NOT NULL,
378 378
 					CHK_in tinyint(1) unsigned NOT NULL DEFAULT 1,
379 379
 					CHK_timestamp datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
380 380
 					PRIMARY KEY  (CHK_ID)";
381
-        $this->_table_should_exist_previously($table_name, $sql, 'ENGINE=InnoDB');
382
-        $table_name = 'esp_state';
383
-        $sql = "STA_ID smallint(5) unsigned NOT NULL AUTO_INCREMENT,
381
+		$this->_table_should_exist_previously($table_name, $sql, 'ENGINE=InnoDB');
382
+		$table_name = 'esp_state';
383
+		$sql = "STA_ID smallint(5) unsigned NOT NULL AUTO_INCREMENT,
384 384
 					  CNT_ISO varchar(2) COLLATE utf8_bin NOT NULL,
385 385
 					  STA_abbrev varchar(6) COLLATE utf8_bin NOT NULL,
386 386
 					  STA_name varchar(100) COLLATE utf8_bin NOT NULL,
387 387
 					  STA_active tinyint(1) DEFAULT '1',
388 388
 					  PRIMARY KEY  (STA_ID)";
389
-        $this->_table_should_exist_previously($table_name, $sql, 'ENGINE=InnoDB');
390
-        $table_name = 'esp_status';
391
-        $sql = "STS_ID varchar(3) COLLATE utf8_bin NOT NULL,
389
+		$this->_table_should_exist_previously($table_name, $sql, 'ENGINE=InnoDB');
390
+		$table_name = 'esp_status';
391
+		$sql = "STS_ID varchar(3) COLLATE utf8_bin NOT NULL,
392 392
 					  STS_code varchar(45) COLLATE utf8_bin NOT NULL,
393 393
 					  STS_type set('event','registration','transaction','payment','email') COLLATE utf8_bin NOT NULL,
394 394
 					  STS_can_edit tinyint(1) NOT NULL DEFAULT 0,
@@ -396,9 +396,9 @@  discard block
 block discarded – undo
396 396
 					  STS_open tinyint(1) NOT NULL DEFAULT 1,
397 397
 					  UNIQUE KEY STS_ID_UNIQUE (STS_ID),
398 398
 					  KEY STS_type (STS_type)";
399
-        $this->_table_should_exist_previously($table_name, $sql, 'ENGINE=InnoDB');
400
-        $table_name = 'esp_transaction';
401
-        $sql = "TXN_ID int(10) unsigned NOT NULL AUTO_INCREMENT,
399
+		$this->_table_should_exist_previously($table_name, $sql, 'ENGINE=InnoDB');
400
+		$table_name = 'esp_transaction';
401
+		$sql = "TXN_ID int(10) unsigned NOT NULL AUTO_INCREMENT,
402 402
 					  TXN_timestamp datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
403 403
 					  TXN_total decimal(10,3) DEFAULT '0.00',
404 404
 					  TXN_paid decimal(10,3) NOT NULL DEFAULT '0.00',
@@ -408,9 +408,9 @@  discard block
 block discarded – undo
408 408
 					  PRIMARY KEY  (TXN_ID),
409 409
 					  KEY TXN_timestamp (TXN_timestamp),
410 410
 					  KEY STS_ID (STS_ID)";
411
-        $this->_table_should_exist_previously($table_name, $sql, 'ENGINE=InnoDB');
412
-        $table_name = 'esp_venue_meta';
413
-        $sql = "VNUM_ID int(11) NOT NULL AUTO_INCREMENT,
411
+		$this->_table_should_exist_previously($table_name, $sql, 'ENGINE=InnoDB');
412
+		$table_name = 'esp_venue_meta';
413
+		$sql = "VNUM_ID int(11) NOT NULL AUTO_INCREMENT,
414 414
 			VNU_ID bigint(20) unsigned NOT NULL DEFAULT 0,
415 415
 			VNU_address varchar(255) DEFAULT NULL,
416 416
 			VNU_address2 varchar(255) DEFAULT NULL,
@@ -428,77 +428,77 @@  discard block
 block discarded – undo
428 428
 			PRIMARY KEY  (VNUM_ID),
429 429
 			KEY STA_ID (STA_ID),
430 430
 			KEY CNT_ISO (CNT_ISO)";
431
-        $this->_table_should_exist_previously($table_name, $sql, 'ENGINE=InnoDB');
432
-        $script_with_defaults = EE_Registry::instance()->load_dms('Core_4_1_0');
433
-        // setting up the DEFAULT stats and countries is also essential for the data migrations to run
434
-        // (because many need to convert old string states to foreign keys into the states table)
435
-        $script_with_defaults->insert_default_states();
436
-        $script_with_defaults->insert_default_countries();
437
-        // setting up DEFAULT prices, price types, and tickets is also essential for the price migrations
438
-        $script_with_defaults->insert_default_price_types();
439
-        $script_with_defaults->insert_default_prices();
440
-        // but the schema on the tickets table has changed since 4.1, so use our DEFAULT ticket method instead of 4.1's
441
-        $this->insert_default_tickets();
442
-        // setting up the config wp option pretty well counts as a 'schema change', or at least should happen ehre
443
-        EE_Config::instance()->update_espresso_config(false, true);
444
-        return true;
445
-    }
431
+		$this->_table_should_exist_previously($table_name, $sql, 'ENGINE=InnoDB');
432
+		$script_with_defaults = EE_Registry::instance()->load_dms('Core_4_1_0');
433
+		// setting up the DEFAULT stats and countries is also essential for the data migrations to run
434
+		// (because many need to convert old string states to foreign keys into the states table)
435
+		$script_with_defaults->insert_default_states();
436
+		$script_with_defaults->insert_default_countries();
437
+		// setting up DEFAULT prices, price types, and tickets is also essential for the price migrations
438
+		$script_with_defaults->insert_default_price_types();
439
+		$script_with_defaults->insert_default_prices();
440
+		// but the schema on the tickets table has changed since 4.1, so use our DEFAULT ticket method instead of 4.1's
441
+		$this->insert_default_tickets();
442
+		// setting up the config wp option pretty well counts as a 'schema change', or at least should happen ehre
443
+		EE_Config::instance()->update_espresso_config(false, true);
444
+		return true;
445
+	}
446 446
 
447 447
 
448 448
 
449
-    /**
450
-     * @return boolean
451
-     */
452
-    public function schema_changes_after_migration()
453
-    {
454
-        return true;
455
-    }
449
+	/**
450
+	 * @return boolean
451
+	 */
452
+	public function schema_changes_after_migration()
453
+	{
454
+		return true;
455
+	}
456 456
 
457 457
 
458 458
 
459
-    public function migration_page_hooks()
460
-    {
461
-    }
459
+	public function migration_page_hooks()
460
+	{
461
+	}
462 462
 
463 463
 
464 464
 
465
-    /**
466
-     * insert DEFAULT ticket
467
-     * Almost identical to EE_DMS_Core_4_1_0::insert_default_tickets, except is aware of the TKT_required field
468
-     *
469
-     * @access public
470
-     * @static
471
-     * @return void
472
-     */
473
-    public function insert_default_tickets()
474
-    {
475
-        global $wpdb;
476
-        $ticket_table = $wpdb->prefix . "esp_ticket";
477
-        if ($this->_get_table_analysis()->tableExists($ticket_table)) {
478
-            $SQL = 'SELECT COUNT(TKT_ID) FROM ' . $ticket_table;
479
-            $tickets_exist = $wpdb->get_var($SQL);
480
-            if (! $tickets_exist) {
481
-                $SQL = "INSERT INTO $ticket_table
465
+	/**
466
+	 * insert DEFAULT ticket
467
+	 * Almost identical to EE_DMS_Core_4_1_0::insert_default_tickets, except is aware of the TKT_required field
468
+	 *
469
+	 * @access public
470
+	 * @static
471
+	 * @return void
472
+	 */
473
+	public function insert_default_tickets()
474
+	{
475
+		global $wpdb;
476
+		$ticket_table = $wpdb->prefix . "esp_ticket";
477
+		if ($this->_get_table_analysis()->tableExists($ticket_table)) {
478
+			$SQL = 'SELECT COUNT(TKT_ID) FROM ' . $ticket_table;
479
+			$tickets_exist = $wpdb->get_var($SQL);
480
+			if (! $tickets_exist) {
481
+				$SQL = "INSERT INTO $ticket_table
482 482
 					( TKT_ID, TTM_ID, TKT_name, TKT_description, TKT_qty, TKT_sold, TKT_uses, TKT_required, TKT_min, TKT_max, TKT_price, TKT_start_date, TKT_end_date, TKT_taxable, TKT_order, TKT_row, TKT_is_default, TKT_parent, TKT_deleted ) VALUES
483 483
 					( 1, 0, '"
484
-                       . esc_html__("Free Ticket", "event_espresso")
485
-                       . "', '', 100, 0, -1, 0, 0, -1, 0.00, '0000-00-00 00:00:00', '0000-00-00 00:00:00', 0, 0, 1, 1, 0, 0);";
486
-                $SQL = apply_filters('FHEE__EE_DMS_4_1_0__insert_default_tickets__SQL', $SQL);
487
-                $wpdb->query($SQL);
488
-            }
489
-        }
490
-        $ticket_price_table = $wpdb->prefix . "esp_ticket_price";
491
-        if ($this->_get_table_analysis()->tableExists($ticket_price_table)) {
492
-            $SQL = 'SELECT COUNT(TKP_ID) FROM ' . $ticket_price_table;
493
-            $ticket_prc_exist = $wpdb->get_var($SQL);
494
-            if (! $ticket_prc_exist) {
495
-                $SQL = "INSERT INTO $ticket_price_table
484
+					   . esc_html__("Free Ticket", "event_espresso")
485
+					   . "', '', 100, 0, -1, 0, 0, -1, 0.00, '0000-00-00 00:00:00', '0000-00-00 00:00:00', 0, 0, 1, 1, 0, 0);";
486
+				$SQL = apply_filters('FHEE__EE_DMS_4_1_0__insert_default_tickets__SQL', $SQL);
487
+				$wpdb->query($SQL);
488
+			}
489
+		}
490
+		$ticket_price_table = $wpdb->prefix . "esp_ticket_price";
491
+		if ($this->_get_table_analysis()->tableExists($ticket_price_table)) {
492
+			$SQL = 'SELECT COUNT(TKP_ID) FROM ' . $ticket_price_table;
493
+			$ticket_prc_exist = $wpdb->get_var($SQL);
494
+			if (! $ticket_prc_exist) {
495
+				$SQL = "INSERT INTO $ticket_price_table
496 496
 				( TKP_ID, TKT_ID, PRC_ID ) VALUES
497 497
 				( 1, 1, 1 )
498 498
 				";
499
-                $SQL = apply_filters('FHEE__EE_DMS_4_1_0__insert_default_tickets__SQL__ticket_price', $SQL);
500
-                $wpdb->query($SQL);
501
-            }
502
-        }
503
-    }
499
+				$SQL = apply_filters('FHEE__EE_DMS_4_1_0__insert_default_tickets__SQL__ticket_price', $SQL);
500
+				$wpdb->query($SQL);
501
+			}
502
+		}
503
+	}
504 504
 }
Please login to merge, or discard this patch.