@@ -15,94 +15,94 @@ |
||
15 | 15 | */ |
16 | 16 | class LicenseService |
17 | 17 | { |
18 | - /** |
|
19 | - * @var Config |
|
20 | - */ |
|
21 | - private $config; |
|
22 | - |
|
23 | - |
|
24 | - /** |
|
25 | - * @var Stats |
|
26 | - */ |
|
27 | - private $stats_collection; |
|
28 | - |
|
29 | - public function __construct(Stats $stats_collection, Config $config) |
|
30 | - { |
|
31 | - $this->config = $config; |
|
32 | - $this->stats_collection = $stats_collection; |
|
33 | - $this->loadPueClient(); |
|
34 | - } |
|
35 | - |
|
36 | - private function loadPueClient() |
|
37 | - { |
|
38 | - // PUE Auto Upgrades stuff |
|
39 | - if (is_readable(EE_THIRD_PARTY . 'pue/pue-client.php')) { // include the file |
|
40 | - require_once(EE_THIRD_PARTY . 'pue/pue-client.php'); |
|
41 | - |
|
42 | - // $options needs to be an array with the included keys as listed. |
|
43 | - $options = array( |
|
44 | - // 'optionName' => '', //(optional) - used as the reference for saving update information in the |
|
45 | - // clients options table. Will be automatically set if left blank. |
|
46 | - 'apikey' => $this->config->siteLicenseKey(), |
|
47 | - // (required), you will need to obtain the apikey that the client gets from your site and |
|
48 | - // then saves in their sites options table (see 'getting an api-key' below) |
|
49 | - 'lang_domain' => $this->config->i18nDomain(), |
|
50 | - // (optional) - put here whatever reference you are using for the localization of your plugin (if it's |
|
51 | - // localized). That way strings in this file will be included in the translation for your plugin. |
|
52 | - 'checkPeriod' => $this->config->checkPeriod(), |
|
53 | - // (optional) - use this parameter to indicate how often you want the client's install to ping your |
|
54 | - // server for update checks. The integer indicates hours. If you don't include this parameter it will |
|
55 | - // default to 12 hours. |
|
56 | - 'option_key' => $this->config->optionKey(), |
|
57 | - // this is what is used to reference the api_key in your plugin options. PUE uses this to trigger |
|
58 | - // updating your information message whenever this option_key is modified. |
|
59 | - 'options_page_slug' => $this->config->optionsPageSlug(), |
|
60 | - 'plugin_basename' => EE_PLUGIN_BASENAME, |
|
61 | - 'use_wp_update' => true, |
|
62 | - // if TRUE then you want FREE versions of the plugin to be updated from WP |
|
63 | - 'extra_stats' => $this->stats_collection->statsCallback(), |
|
64 | - 'turn_on_notices_saved' => true, |
|
65 | - ); |
|
66 | - // initiate the class and start the plugin update engine! |
|
67 | - new PluginUpdateEngineChecker( |
|
68 | - $this->config->hostServerUrl(), |
|
69 | - $this->config->pluginSlug(), |
|
70 | - $options |
|
71 | - ); |
|
72 | - } |
|
73 | - } |
|
74 | - |
|
75 | - |
|
76 | - /** |
|
77 | - * This is a handy helper method for retrieving whether there is an update available for the given plugin. |
|
78 | - * |
|
79 | - * @param string $basename Use the equivalent result from plugin_basename() for this param as WP uses that to |
|
80 | - * identify plugins. Defaults to core update |
|
81 | - * @return boolean True if update available, false if not. |
|
82 | - */ |
|
83 | - public static function isUpdateAvailable($basename = '') |
|
84 | - { |
|
85 | - $basename = ! empty($basename) ? $basename : EE_PLUGIN_BASENAME; |
|
86 | - |
|
87 | - $update = false; |
|
88 | - |
|
89 | - // should take "event-espresso-core/espresso.php" and change to "/event-espresso-core" |
|
90 | - $folder = '/' . dirname($basename); |
|
91 | - |
|
92 | - $plugins = get_plugins($folder); |
|
93 | - $current = get_site_transient('update_plugins'); |
|
94 | - |
|
95 | - foreach ((array) $plugins as $plugin_file => $plugin_data) { |
|
96 | - if (isset($current->response['plugin_file'])) { |
|
97 | - $update = true; |
|
98 | - } |
|
99 | - } |
|
100 | - |
|
101 | - // it's possible that there is an update but an invalid site-license-key is in use |
|
102 | - if (get_site_option('pue_json_error_' . $basename)) { |
|
103 | - $update = true; |
|
104 | - } |
|
105 | - |
|
106 | - return $update; |
|
107 | - } |
|
18 | + /** |
|
19 | + * @var Config |
|
20 | + */ |
|
21 | + private $config; |
|
22 | + |
|
23 | + |
|
24 | + /** |
|
25 | + * @var Stats |
|
26 | + */ |
|
27 | + private $stats_collection; |
|
28 | + |
|
29 | + public function __construct(Stats $stats_collection, Config $config) |
|
30 | + { |
|
31 | + $this->config = $config; |
|
32 | + $this->stats_collection = $stats_collection; |
|
33 | + $this->loadPueClient(); |
|
34 | + } |
|
35 | + |
|
36 | + private function loadPueClient() |
|
37 | + { |
|
38 | + // PUE Auto Upgrades stuff |
|
39 | + if (is_readable(EE_THIRD_PARTY . 'pue/pue-client.php')) { // include the file |
|
40 | + require_once(EE_THIRD_PARTY . 'pue/pue-client.php'); |
|
41 | + |
|
42 | + // $options needs to be an array with the included keys as listed. |
|
43 | + $options = array( |
|
44 | + // 'optionName' => '', //(optional) - used as the reference for saving update information in the |
|
45 | + // clients options table. Will be automatically set if left blank. |
|
46 | + 'apikey' => $this->config->siteLicenseKey(), |
|
47 | + // (required), you will need to obtain the apikey that the client gets from your site and |
|
48 | + // then saves in their sites options table (see 'getting an api-key' below) |
|
49 | + 'lang_domain' => $this->config->i18nDomain(), |
|
50 | + // (optional) - put here whatever reference you are using for the localization of your plugin (if it's |
|
51 | + // localized). That way strings in this file will be included in the translation for your plugin. |
|
52 | + 'checkPeriod' => $this->config->checkPeriod(), |
|
53 | + // (optional) - use this parameter to indicate how often you want the client's install to ping your |
|
54 | + // server for update checks. The integer indicates hours. If you don't include this parameter it will |
|
55 | + // default to 12 hours. |
|
56 | + 'option_key' => $this->config->optionKey(), |
|
57 | + // this is what is used to reference the api_key in your plugin options. PUE uses this to trigger |
|
58 | + // updating your information message whenever this option_key is modified. |
|
59 | + 'options_page_slug' => $this->config->optionsPageSlug(), |
|
60 | + 'plugin_basename' => EE_PLUGIN_BASENAME, |
|
61 | + 'use_wp_update' => true, |
|
62 | + // if TRUE then you want FREE versions of the plugin to be updated from WP |
|
63 | + 'extra_stats' => $this->stats_collection->statsCallback(), |
|
64 | + 'turn_on_notices_saved' => true, |
|
65 | + ); |
|
66 | + // initiate the class and start the plugin update engine! |
|
67 | + new PluginUpdateEngineChecker( |
|
68 | + $this->config->hostServerUrl(), |
|
69 | + $this->config->pluginSlug(), |
|
70 | + $options |
|
71 | + ); |
|
72 | + } |
|
73 | + } |
|
74 | + |
|
75 | + |
|
76 | + /** |
|
77 | + * This is a handy helper method for retrieving whether there is an update available for the given plugin. |
|
78 | + * |
|
79 | + * @param string $basename Use the equivalent result from plugin_basename() for this param as WP uses that to |
|
80 | + * identify plugins. Defaults to core update |
|
81 | + * @return boolean True if update available, false if not. |
|
82 | + */ |
|
83 | + public static function isUpdateAvailable($basename = '') |
|
84 | + { |
|
85 | + $basename = ! empty($basename) ? $basename : EE_PLUGIN_BASENAME; |
|
86 | + |
|
87 | + $update = false; |
|
88 | + |
|
89 | + // should take "event-espresso-core/espresso.php" and change to "/event-espresso-core" |
|
90 | + $folder = '/' . dirname($basename); |
|
91 | + |
|
92 | + $plugins = get_plugins($folder); |
|
93 | + $current = get_site_transient('update_plugins'); |
|
94 | + |
|
95 | + foreach ((array) $plugins as $plugin_file => $plugin_data) { |
|
96 | + if (isset($current->response['plugin_file'])) { |
|
97 | + $update = true; |
|
98 | + } |
|
99 | + } |
|
100 | + |
|
101 | + // it's possible that there is an update but an invalid site-license-key is in use |
|
102 | + if (get_site_option('pue_json_error_' . $basename)) { |
|
103 | + $update = true; |
|
104 | + } |
|
105 | + |
|
106 | + return $update; |
|
107 | + } |
|
108 | 108 | } |
@@ -36,8 +36,8 @@ discard block |
||
36 | 36 | private function loadPueClient() |
37 | 37 | { |
38 | 38 | // PUE Auto Upgrades stuff |
39 | - if (is_readable(EE_THIRD_PARTY . 'pue/pue-client.php')) { // include the file |
|
40 | - require_once(EE_THIRD_PARTY . 'pue/pue-client.php'); |
|
39 | + if (is_readable(EE_THIRD_PARTY.'pue/pue-client.php')) { // include the file |
|
40 | + require_once(EE_THIRD_PARTY.'pue/pue-client.php'); |
|
41 | 41 | |
42 | 42 | // $options needs to be an array with the included keys as listed. |
43 | 43 | $options = array( |
@@ -87,7 +87,7 @@ discard block |
||
87 | 87 | $update = false; |
88 | 88 | |
89 | 89 | // should take "event-espresso-core/espresso.php" and change to "/event-espresso-core" |
90 | - $folder = '/' . dirname($basename); |
|
90 | + $folder = '/'.dirname($basename); |
|
91 | 91 | |
92 | 92 | $plugins = get_plugins($folder); |
93 | 93 | $current = get_site_transient('update_plugins'); |
@@ -99,7 +99,7 @@ discard block |
||
99 | 99 | } |
100 | 100 | |
101 | 101 | // it's possible that there is an update but an invalid site-license-key is in use |
102 | - if (get_site_option('pue_json_error_' . $basename)) { |
|
102 | + if (get_site_option('pue_json_error_'.$basename)) { |
|
103 | 103 | $update = true; |
104 | 104 | } |
105 | 105 |
@@ -26,7 +26,7 @@ discard block |
||
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 |
||
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 | } |
@@ -14,29 +14,29 @@ |
||
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 | } |
@@ -111,8 +111,8 @@ discard block |
||
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 |
||
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 |
||
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 |
||
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 |
||
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 |
||
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 |
||
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 |
||
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 |
||
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 |
||
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 |
||
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 |
||
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 |
||
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 |
||
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 |
||
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 |
||
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 |
||
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 |
||
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 |
||
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 |
||
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 |
||
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 |
||
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 |
||
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 |
||
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 |
||
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 |
||
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 |
||
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 |
||
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 |
||
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 |
||
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 |
||
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 | } |
@@ -15,1536 +15,1536 @@ |
||
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 | - $session = EE_Registry::instance()->SSN; |
|
349 | - if ($session instanceof EE_Session) { |
|
350 | - return EE_Registry::instance()->SSN->set_session_data( |
|
351 | - [ |
|
352 | - EE_Form_Section_Proper::SUBMITTED_FORM_DATA_SSN_KEY => $this->submitted_values(true), |
|
353 | - ] |
|
354 | - ); |
|
355 | - } |
|
356 | - return false; |
|
357 | - } |
|
358 | - |
|
359 | - |
|
360 | - /** |
|
361 | - * retrieves the originally submitted input values in the session |
|
362 | - * so that they can be used to repopulate the form if it failed validation |
|
363 | - * |
|
364 | - * @return array |
|
365 | - * @throws InvalidArgumentException |
|
366 | - * @throws InvalidInterfaceException |
|
367 | - * @throws InvalidDataTypeException |
|
368 | - */ |
|
369 | - protected function get_submitted_form_data_from_session() |
|
370 | - { |
|
371 | - $session = EE_Registry::instance()->SSN; |
|
372 | - if ($session instanceof EE_Session) { |
|
373 | - return $session->get_session_data( |
|
374 | - EE_Form_Section_Proper::SUBMITTED_FORM_DATA_SSN_KEY |
|
375 | - ); |
|
376 | - } |
|
377 | - return array(); |
|
378 | - } |
|
379 | - |
|
380 | - |
|
381 | - /** |
|
382 | - * flushed the originally submitted input values from the session |
|
383 | - * |
|
384 | - * @return boolean whether or not the data was successfully removed from the session |
|
385 | - * @throws InvalidArgumentException |
|
386 | - * @throws InvalidInterfaceException |
|
387 | - * @throws InvalidDataTypeException |
|
388 | - */ |
|
389 | - public static function flush_submitted_form_data_from_session() |
|
390 | - { |
|
391 | - return EE_Registry::instance()->SSN->reset_data( |
|
392 | - array(EE_Form_Section_Proper::SUBMITTED_FORM_DATA_SSN_KEY) |
|
393 | - ); |
|
394 | - } |
|
395 | - |
|
396 | - |
|
397 | - /** |
|
398 | - * Populates this form and its subsections with data from the session. |
|
399 | - * (Wrapper for EE_Form_Section_Proper::receive_form_submission, so it shows |
|
400 | - * validation errors when displaying too) |
|
401 | - * Returns true if the form was populated from the session, false otherwise |
|
402 | - * |
|
403 | - * @return boolean |
|
404 | - * @throws InvalidArgumentException |
|
405 | - * @throws InvalidInterfaceException |
|
406 | - * @throws InvalidDataTypeException |
|
407 | - * @throws EE_Error |
|
408 | - */ |
|
409 | - public function populate_from_session() |
|
410 | - { |
|
411 | - $form_data_in_session = $this->get_submitted_form_data_from_session(); |
|
412 | - if (empty($form_data_in_session)) { |
|
413 | - return false; |
|
414 | - } |
|
415 | - $this->receive_form_submission($form_data_in_session); |
|
416 | - add_action('shutdown', array('EE_Form_Section_Proper', 'flush_submitted_form_data_from_session')); |
|
417 | - if ($this->form_data_present_in($form_data_in_session)) { |
|
418 | - return true; |
|
419 | - } |
|
420 | - return false; |
|
421 | - } |
|
422 | - |
|
423 | - |
|
424 | - /** |
|
425 | - * Populates the default data for the form, given an array where keys are |
|
426 | - * the input names, and values are their values (preferably normalized to be their |
|
427 | - * proper PHP types, not all strings... although that should be ok too). |
|
428 | - * Proper subsections are sub-arrays, the key being the subsection's name, and |
|
429 | - * the value being an array formatted in teh same way |
|
430 | - * |
|
431 | - * @param array $default_data |
|
432 | - * @throws EE_Error |
|
433 | - */ |
|
434 | - public function populate_defaults($default_data) |
|
435 | - { |
|
436 | - foreach ($this->subsections(false) as $subsection_name => $subsection) { |
|
437 | - if (isset($default_data[ $subsection_name ])) { |
|
438 | - if ($subsection instanceof EE_Form_Input_Base) { |
|
439 | - $subsection->set_default($default_data[ $subsection_name ]); |
|
440 | - } elseif ($subsection instanceof EE_Form_Section_Proper) { |
|
441 | - $subsection->populate_defaults($default_data[ $subsection_name ]); |
|
442 | - } |
|
443 | - } |
|
444 | - } |
|
445 | - } |
|
446 | - |
|
447 | - |
|
448 | - /** |
|
449 | - * returns true if subsection exists |
|
450 | - * |
|
451 | - * @param string $name |
|
452 | - * @return boolean |
|
453 | - */ |
|
454 | - public function subsection_exists($name) |
|
455 | - { |
|
456 | - return isset($this->_subsections[ $name ]) ? true : false; |
|
457 | - } |
|
458 | - |
|
459 | - |
|
460 | - /** |
|
461 | - * Gets the subsection specified by its name |
|
462 | - * |
|
463 | - * @param string $name |
|
464 | - * @param boolean $require_construction_to_be_finalized most client code should leave this as TRUE |
|
465 | - * so that the inputs will be properly configured. |
|
466 | - * However, some client code may be ok |
|
467 | - * with construction finalize being called later |
|
468 | - * (realizing that the subsections' html names |
|
469 | - * might not be set yet, etc.) |
|
470 | - * @return EE_Form_Section_Base |
|
471 | - * @throws EE_Error |
|
472 | - */ |
|
473 | - public function get_subsection($name, $require_construction_to_be_finalized = true) |
|
474 | - { |
|
475 | - if ($require_construction_to_be_finalized) { |
|
476 | - $this->ensure_construct_finalized_called(); |
|
477 | - } |
|
478 | - return $this->subsection_exists($name) ? $this->_subsections[ $name ] : null; |
|
479 | - } |
|
480 | - |
|
481 | - |
|
482 | - /** |
|
483 | - * Gets all the validatable subsections of this form section |
|
484 | - * |
|
485 | - * @return EE_Form_Section_Validatable[] |
|
486 | - * @throws EE_Error |
|
487 | - */ |
|
488 | - public function get_validatable_subsections() |
|
489 | - { |
|
490 | - $validatable_subsections = array(); |
|
491 | - foreach ($this->subsections() as $name => $obj) { |
|
492 | - if ($obj instanceof EE_Form_Section_Validatable) { |
|
493 | - $validatable_subsections[ $name ] = $obj; |
|
494 | - } |
|
495 | - } |
|
496 | - return $validatable_subsections; |
|
497 | - } |
|
498 | - |
|
499 | - |
|
500 | - /** |
|
501 | - * Gets an input by the given name. If not found, or if its not an EE_FOrm_Input_Base child, |
|
502 | - * throw an EE_Error. |
|
503 | - * |
|
504 | - * @param string $name |
|
505 | - * @param boolean $require_construction_to_be_finalized most client code should |
|
506 | - * leave this as TRUE so that the inputs will be properly |
|
507 | - * configured. However, some client code may be ok with |
|
508 | - * construction finalize being called later |
|
509 | - * (realizing that the subsections' html names might not be |
|
510 | - * set yet, etc.) |
|
511 | - * @return EE_Form_Input_Base |
|
512 | - * @throws EE_Error |
|
513 | - */ |
|
514 | - public function get_input($name, $require_construction_to_be_finalized = true) |
|
515 | - { |
|
516 | - $subsection = $this->get_subsection( |
|
517 | - $name, |
|
518 | - $require_construction_to_be_finalized |
|
519 | - ); |
|
520 | - if (! $subsection instanceof EE_Form_Input_Base) { |
|
521 | - throw new EE_Error( |
|
522 | - sprintf( |
|
523 | - esc_html__( |
|
524 | - "Subsection '%s' is not an instanceof EE_Form_Input_Base on form '%s'. It is a '%s'", |
|
525 | - 'event_espresso' |
|
526 | - ), |
|
527 | - $name, |
|
528 | - get_class($this), |
|
529 | - $subsection ? get_class($subsection) : esc_html__('NULL', 'event_espresso') |
|
530 | - ) |
|
531 | - ); |
|
532 | - } |
|
533 | - return $subsection; |
|
534 | - } |
|
535 | - |
|
536 | - |
|
537 | - /** |
|
538 | - * Like get_input(), gets the proper subsection of the form given the name, |
|
539 | - * otherwise throws an EE_Error |
|
540 | - * |
|
541 | - * @param string $name |
|
542 | - * @param boolean $require_construction_to_be_finalized most client code should |
|
543 | - * leave this as TRUE so that the inputs will be properly |
|
544 | - * configured. However, some client code may be ok with |
|
545 | - * construction finalize being called later |
|
546 | - * (realizing that the subsections' html names might not be |
|
547 | - * set yet, etc.) |
|
548 | - * @return EE_Form_Section_Proper |
|
549 | - * @throws EE_Error |
|
550 | - */ |
|
551 | - public function get_proper_subsection($name, $require_construction_to_be_finalized = true) |
|
552 | - { |
|
553 | - $subsection = $this->get_subsection( |
|
554 | - $name, |
|
555 | - $require_construction_to_be_finalized |
|
556 | - ); |
|
557 | - if (! $subsection instanceof EE_Form_Section_Proper) { |
|
558 | - throw new EE_Error( |
|
559 | - sprintf( |
|
560 | - esc_html__( |
|
561 | - "Subsection '%'s is not an instanceof EE_Form_Section_Proper on form '%s'", |
|
562 | - 'event_espresso' |
|
563 | - ), |
|
564 | - $name, |
|
565 | - get_class($this) |
|
566 | - ) |
|
567 | - ); |
|
568 | - } |
|
569 | - return $subsection; |
|
570 | - } |
|
571 | - |
|
572 | - |
|
573 | - /** |
|
574 | - * Gets the value of the specified input. Should be called after receive_form_submission() |
|
575 | - * or populate_defaults() on the form, where the normalized value on the input is set. |
|
576 | - * |
|
577 | - * @param string $name |
|
578 | - * @return mixed depending on the input's type and its normalization strategy |
|
579 | - * @throws EE_Error |
|
580 | - */ |
|
581 | - public function get_input_value($name) |
|
582 | - { |
|
583 | - $input = $this->get_input($name); |
|
584 | - return $input->normalized_value(); |
|
585 | - } |
|
586 | - |
|
587 | - |
|
588 | - /** |
|
589 | - * Checks if this form section itself is valid, and then checks its subsections |
|
590 | - * |
|
591 | - * @throws EE_Error |
|
592 | - * @return boolean |
|
593 | - */ |
|
594 | - public function is_valid() |
|
595 | - { |
|
596 | - if ($this->is_valid === null) { |
|
597 | - if (! $this->has_received_submission()) { |
|
598 | - throw new EE_Error( |
|
599 | - sprintf( |
|
600 | - esc_html__( |
|
601 | - 'You cannot check if a form is valid before receiving the form submission using receive_form_submission', |
|
602 | - 'event_espresso' |
|
603 | - ) |
|
604 | - ) |
|
605 | - ); |
|
606 | - } |
|
607 | - if (! parent::is_valid()) { |
|
608 | - $this->is_valid = false; |
|
609 | - } else { |
|
610 | - // ok so no general errors to this entire form section. |
|
611 | - // so let's check the subsections, but only set errors if that hasn't been done yet |
|
612 | - $this->is_valid = true; |
|
613 | - foreach ($this->get_validatable_subsections() as $subsection) { |
|
614 | - if (! $subsection->is_valid()) { |
|
615 | - $this->is_valid = false; |
|
616 | - } |
|
617 | - } |
|
618 | - } |
|
619 | - } |
|
620 | - return $this->is_valid; |
|
621 | - } |
|
622 | - |
|
623 | - |
|
624 | - /** |
|
625 | - * gets the default name of this form section if none is specified |
|
626 | - * |
|
627 | - * @return void |
|
628 | - */ |
|
629 | - protected function _set_default_name_if_empty() |
|
630 | - { |
|
631 | - if (! $this->_name) { |
|
632 | - $classname = get_class($this); |
|
633 | - $default_name = str_replace('EE_', '', $classname); |
|
634 | - $this->_name = $default_name; |
|
635 | - } |
|
636 | - } |
|
637 | - |
|
638 | - |
|
639 | - /** |
|
640 | - * Returns the HTML for the form, except for the form opening and closing tags |
|
641 | - * (as the form section doesn't know where you necessarily want to send the information to), |
|
642 | - * and except for a submit button. Enqueues JS and CSS; if called early enough we will |
|
643 | - * try to enqueue them in the header, otherwise they'll be enqueued in the footer. |
|
644 | - * Not doing_it_wrong because theoretically this CAN be used properly, |
|
645 | - * provided its used during "wp_enqueue_scripts", or it doesn't need to enqueue |
|
646 | - * any CSS. |
|
647 | - * |
|
648 | - * @throws InvalidArgumentException |
|
649 | - * @throws InvalidInterfaceException |
|
650 | - * @throws InvalidDataTypeException |
|
651 | - * @throws EE_Error |
|
652 | - */ |
|
653 | - public function get_html_and_js() |
|
654 | - { |
|
655 | - $this->enqueue_js(); |
|
656 | - return $this->get_html(); |
|
657 | - } |
|
658 | - |
|
659 | - |
|
660 | - /** |
|
661 | - * returns HTML for displaying this form section. recursively calls display_section() on all subsections |
|
662 | - * |
|
663 | - * @param bool $display_previously_submitted_data |
|
664 | - * @return string |
|
665 | - * @throws InvalidArgumentException |
|
666 | - * @throws InvalidInterfaceException |
|
667 | - * @throws InvalidDataTypeException |
|
668 | - * @throws EE_Error |
|
669 | - * @throws EE_Error |
|
670 | - * @throws EE_Error |
|
671 | - */ |
|
672 | - public function get_html($display_previously_submitted_data = true) |
|
673 | - { |
|
674 | - $this->ensure_construct_finalized_called(); |
|
675 | - if ($display_previously_submitted_data) { |
|
676 | - $this->populate_from_session(); |
|
677 | - } |
|
678 | - return $this->_form_html_filter |
|
679 | - ? $this->_form_html_filter->filterHtml($this->_layout_strategy->layout_form(), $this) |
|
680 | - : $this->_layout_strategy->layout_form(); |
|
681 | - } |
|
682 | - |
|
683 | - |
|
684 | - /** |
|
685 | - * enqueues JS and CSS for the form. |
|
686 | - * It is preferred to call this before wp_enqueue_scripts so the |
|
687 | - * scripts and styles can be put in the header, but if called later |
|
688 | - * they will be put in the footer (which is OK for JS, but in HTML4 CSS should |
|
689 | - * only be in the header; but in HTML5 its ok in the body. |
|
690 | - * See http://stackoverflow.com/questions/4957446/load-external-css-file-in-body-tag. |
|
691 | - * So if your form enqueues CSS, it's preferred to call this before wp_enqueue_scripts.) |
|
692 | - * |
|
693 | - * @return void |
|
694 | - * @throws EE_Error |
|
695 | - */ |
|
696 | - public function enqueue_js() |
|
697 | - { |
|
698 | - $this->_enqueue_and_localize_form_js(); |
|
699 | - foreach ($this->subsections() as $subsection) { |
|
700 | - $subsection->enqueue_js(); |
|
701 | - } |
|
702 | - } |
|
703 | - |
|
704 | - |
|
705 | - /** |
|
706 | - * adds a filter so that jquery validate gets enqueued in EE_System::wp_enqueue_scripts(). |
|
707 | - * This must be done BEFORE wp_enqueue_scripts() gets called, which is on |
|
708 | - * the wp_enqueue_scripts hook. |
|
709 | - * However, registering the form js and localizing it can happen when we |
|
710 | - * actually output the form (which is preferred, seeing how teh form's fields |
|
711 | - * could change until it's actually outputted) |
|
712 | - * |
|
713 | - * @param boolean $init_form_validation_automatically whether or not we want the form validation |
|
714 | - * to be triggered automatically or not |
|
715 | - * @return void |
|
716 | - */ |
|
717 | - public static function wp_enqueue_scripts($init_form_validation_automatically = true) |
|
718 | - { |
|
719 | - wp_register_script( |
|
720 | - 'ee_form_section_validation', |
|
721 | - EE_GLOBAL_ASSETS_URL . 'scripts' . '/form_section_validation.js', |
|
722 | - array('jquery-validate', 'jquery-ui-datepicker', 'jquery-validate-extra-methods'), |
|
723 | - EVENT_ESPRESSO_VERSION, |
|
724 | - true |
|
725 | - ); |
|
726 | - wp_localize_script( |
|
727 | - 'ee_form_section_validation', |
|
728 | - 'ee_form_section_validation_init', |
|
729 | - array('init' => $init_form_validation_automatically ? '1' : '0') |
|
730 | - ); |
|
731 | - } |
|
732 | - |
|
733 | - |
|
734 | - /** |
|
735 | - * gets the variables used by form_section_validation.js. |
|
736 | - * This needs to be called AFTER we've called $this->_enqueue_jquery_validate_script, |
|
737 | - * but before the wordpress hook wp_loaded |
|
738 | - * |
|
739 | - * @throws EE_Error |
|
740 | - */ |
|
741 | - public function _enqueue_and_localize_form_js() |
|
742 | - { |
|
743 | - $this->ensure_construct_finalized_called(); |
|
744 | - // actually, we don't want to localize just yet. There may be other forms on the page. |
|
745 | - // so we need to add our form section data to a static variable accessible by all form sections |
|
746 | - // and localize it just before the footer |
|
747 | - $this->localize_validation_rules(); |
|
748 | - add_action('wp_footer', array('EE_Form_Section_Proper', 'localize_script_for_all_forms'), 2); |
|
749 | - add_action('admin_footer', array('EE_Form_Section_Proper', 'localize_script_for_all_forms')); |
|
750 | - } |
|
751 | - |
|
752 | - |
|
753 | - /** |
|
754 | - * add our form section data to a static variable accessible by all form sections |
|
755 | - * |
|
756 | - * @param bool $return_for_subsection |
|
757 | - * @return void |
|
758 | - * @throws EE_Error |
|
759 | - */ |
|
760 | - public function localize_validation_rules($return_for_subsection = false) |
|
761 | - { |
|
762 | - // we only want to localize vars ONCE for the entire form, |
|
763 | - // so if the form section doesn't have a parent, then it must be the top dog |
|
764 | - if ($return_for_subsection || ! $this->parent_section()) { |
|
765 | - EE_Form_Section_Proper::$_js_localization['form_data'][ $this->html_id() ] = array( |
|
766 | - 'form_section_id' => $this->html_id(true), |
|
767 | - 'validation_rules' => $this->get_jquery_validation_rules(), |
|
768 | - 'other_data' => $this->get_other_js_data(), |
|
769 | - 'errors' => $this->subsection_validation_errors_by_html_name(), |
|
770 | - ); |
|
771 | - EE_Form_Section_Proper::$_scripts_localized = true; |
|
772 | - } |
|
773 | - } |
|
774 | - |
|
775 | - |
|
776 | - /** |
|
777 | - * Gets an array of extra data that will be useful for client-side javascript. |
|
778 | - * This is primarily data added by inputs and forms in addition to any |
|
779 | - * scripts they might enqueue |
|
780 | - * |
|
781 | - * @param array $form_other_js_data |
|
782 | - * @return array |
|
783 | - * @throws EE_Error |
|
784 | - */ |
|
785 | - public function get_other_js_data($form_other_js_data = array()) |
|
786 | - { |
|
787 | - foreach ($this->subsections() as $subsection) { |
|
788 | - $form_other_js_data = $subsection->get_other_js_data($form_other_js_data); |
|
789 | - } |
|
790 | - return $form_other_js_data; |
|
791 | - } |
|
792 | - |
|
793 | - |
|
794 | - /** |
|
795 | - * Gets a flat array of inputs for this form section and its subsections. |
|
796 | - * Keys are their form names, and values are the inputs themselves |
|
797 | - * |
|
798 | - * @return EE_Form_Input_Base |
|
799 | - * @throws EE_Error |
|
800 | - */ |
|
801 | - public function inputs_in_subsections() |
|
802 | - { |
|
803 | - $inputs = array(); |
|
804 | - foreach ($this->subsections() as $subsection) { |
|
805 | - if ($subsection instanceof EE_Form_Input_Base) { |
|
806 | - $inputs[ $subsection->html_name() ] = $subsection; |
|
807 | - } elseif ($subsection instanceof EE_Form_Section_Proper) { |
|
808 | - $inputs += $subsection->inputs_in_subsections(); |
|
809 | - } |
|
810 | - } |
|
811 | - return $inputs; |
|
812 | - } |
|
813 | - |
|
814 | - |
|
815 | - /** |
|
816 | - * Gets a flat array of all the validation errors. |
|
817 | - * Keys are html names (because those should be unique) |
|
818 | - * and values are a string of all their validation errors |
|
819 | - * |
|
820 | - * @return string[] |
|
821 | - * @throws EE_Error |
|
822 | - */ |
|
823 | - public function subsection_validation_errors_by_html_name() |
|
824 | - { |
|
825 | - $inputs = $this->inputs(); |
|
826 | - $errors = array(); |
|
827 | - foreach ($inputs as $form_input) { |
|
828 | - if ($form_input instanceof EE_Form_Input_Base && $form_input->get_validation_errors()) { |
|
829 | - $errors[ $form_input->html_name() ] = $form_input->get_validation_error_string(); |
|
830 | - } |
|
831 | - } |
|
832 | - return $errors; |
|
833 | - } |
|
834 | - |
|
835 | - |
|
836 | - /** |
|
837 | - * passes all the form data required by the JS to the JS, and enqueues the few required JS files. |
|
838 | - * Should be setup by each form during the _enqueues_and_localize_form_js |
|
839 | - * |
|
840 | - * @throws InvalidArgumentException |
|
841 | - * @throws InvalidInterfaceException |
|
842 | - * @throws InvalidDataTypeException |
|
843 | - */ |
|
844 | - public static function localize_script_for_all_forms() |
|
845 | - { |
|
846 | - // allow inputs and stuff to hook in their JS and stuff here |
|
847 | - do_action('AHEE__EE_Form_Section_Proper__localize_script_for_all_forms__begin'); |
|
848 | - EE_Form_Section_Proper::$_js_localization['localized_error_messages'] = EE_Form_Section_Proper::_get_localized_error_messages(); |
|
849 | - $email_validation_level = isset(EE_Registry::instance()->CFG->registration->email_validation_level) |
|
850 | - ? EE_Registry::instance()->CFG->registration->email_validation_level |
|
851 | - : 'wp_default'; |
|
852 | - EE_Form_Section_Proper::$_js_localization['email_validation_level'] = $email_validation_level; |
|
853 | - wp_enqueue_script('ee_form_section_validation'); |
|
854 | - wp_localize_script( |
|
855 | - 'ee_form_section_validation', |
|
856 | - 'ee_form_section_vars', |
|
857 | - EE_Form_Section_Proper::$_js_localization |
|
858 | - ); |
|
859 | - } |
|
860 | - |
|
861 | - |
|
862 | - /** |
|
863 | - * ensure_scripts_localized |
|
864 | - * |
|
865 | - * @throws EE_Error |
|
866 | - */ |
|
867 | - public function ensure_scripts_localized() |
|
868 | - { |
|
869 | - if (! EE_Form_Section_Proper::$_scripts_localized) { |
|
870 | - $this->_enqueue_and_localize_form_js(); |
|
871 | - } |
|
872 | - } |
|
873 | - |
|
874 | - |
|
875 | - /** |
|
876 | - * Gets the hard-coded validation error messages to be used in the JS. The convention |
|
877 | - * is that the key here should be the same as the custom validation rule put in the JS file |
|
878 | - * |
|
879 | - * @return array keys are custom validation rules, and values are internationalized strings |
|
880 | - */ |
|
881 | - private static function _get_localized_error_messages() |
|
882 | - { |
|
883 | - return array( |
|
884 | - 'validUrl' => wp_strip_all_tags(__('This is not a valid absolute URL. Eg, http://domain.com/monkey.jpg', 'event_espresso')), |
|
885 | - 'regex' => wp_strip_all_tags(__('Please check your input', 'event_espresso')) |
|
886 | - ); |
|
887 | - } |
|
888 | - |
|
889 | - |
|
890 | - /** |
|
891 | - * @return array |
|
892 | - */ |
|
893 | - public static function js_localization() |
|
894 | - { |
|
895 | - return self::$_js_localization; |
|
896 | - } |
|
897 | - |
|
898 | - |
|
899 | - /** |
|
900 | - * @return void |
|
901 | - */ |
|
902 | - public static function reset_js_localization() |
|
903 | - { |
|
904 | - self::$_js_localization = array(); |
|
905 | - } |
|
906 | - |
|
907 | - |
|
908 | - /** |
|
909 | - * Gets the JS to put inside the jquery validation rules for subsection of this form section. |
|
910 | - * See parent function for more... |
|
911 | - * |
|
912 | - * @return array |
|
913 | - * @throws EE_Error |
|
914 | - */ |
|
915 | - public function get_jquery_validation_rules() |
|
916 | - { |
|
917 | - $jquery_validation_rules = array(); |
|
918 | - foreach ($this->get_validatable_subsections() as $subsection) { |
|
919 | - $jquery_validation_rules = array_merge( |
|
920 | - $jquery_validation_rules, |
|
921 | - $subsection->get_jquery_validation_rules() |
|
922 | - ); |
|
923 | - } |
|
924 | - return $jquery_validation_rules; |
|
925 | - } |
|
926 | - |
|
927 | - |
|
928 | - /** |
|
929 | - * Sanitizes all the data and sets the sanitized value of each field |
|
930 | - * |
|
931 | - * @param array $req_data |
|
932 | - * @return void |
|
933 | - * @throws EE_Error |
|
934 | - */ |
|
935 | - protected function _normalize($req_data) |
|
936 | - { |
|
937 | - $this->_received_submission = true; |
|
938 | - $this->_validation_errors = array(); |
|
939 | - foreach ($this->get_validatable_subsections() as $subsection) { |
|
940 | - try { |
|
941 | - $subsection->_normalize($req_data); |
|
942 | - } catch (EE_Validation_Error $e) { |
|
943 | - $subsection->add_validation_error($e); |
|
944 | - } |
|
945 | - } |
|
946 | - } |
|
947 | - |
|
948 | - |
|
949 | - /** |
|
950 | - * Performs validation on this form section and its subsections. |
|
951 | - * For each subsection, |
|
952 | - * calls _validate_{subsection_name} on THIS form (if the function exists) |
|
953 | - * and passes it the subsection, then calls _validate on that subsection. |
|
954 | - * If you need to perform validation on the form as a whole (considering multiple) |
|
955 | - * you would be best to override this _validate method, |
|
956 | - * calling parent::_validate() first. |
|
957 | - * |
|
958 | - * @throws EE_Error |
|
959 | - */ |
|
960 | - protected function _validate() |
|
961 | - { |
|
962 | - // reset the cache of whether this form is valid or not- we're re-validating it now |
|
963 | - $this->is_valid = null; |
|
964 | - foreach ($this->get_validatable_subsections() as $subsection_name => $subsection) { |
|
965 | - if (method_exists($this, '_validate_' . $subsection_name)) { |
|
966 | - call_user_func_array(array($this, '_validate_' . $subsection_name), array($subsection)); |
|
967 | - } |
|
968 | - $subsection->_validate(); |
|
969 | - } |
|
970 | - } |
|
971 | - |
|
972 | - |
|
973 | - /** |
|
974 | - * Gets all the validated inputs for the form section |
|
975 | - * |
|
976 | - * @return array |
|
977 | - * @throws EE_Error |
|
978 | - */ |
|
979 | - public function valid_data() |
|
980 | - { |
|
981 | - $inputs = array(); |
|
982 | - foreach ($this->subsections() as $subsection_name => $subsection) { |
|
983 | - if ($subsection instanceof EE_Form_Section_Proper) { |
|
984 | - $inputs[ $subsection_name ] = $subsection->valid_data(); |
|
985 | - } elseif ($subsection instanceof EE_Form_Input_Base) { |
|
986 | - $inputs[ $subsection_name ] = $subsection->normalized_value(); |
|
987 | - } |
|
988 | - } |
|
989 | - return $inputs; |
|
990 | - } |
|
991 | - |
|
992 | - |
|
993 | - /** |
|
994 | - * Gets all the inputs on this form section |
|
995 | - * |
|
996 | - * @return EE_Form_Input_Base[] |
|
997 | - * @throws EE_Error |
|
998 | - */ |
|
999 | - public function inputs() |
|
1000 | - { |
|
1001 | - $inputs = array(); |
|
1002 | - foreach ($this->subsections() as $subsection_name => $subsection) { |
|
1003 | - if ($subsection instanceof EE_Form_Input_Base) { |
|
1004 | - $inputs[ $subsection_name ] = $subsection; |
|
1005 | - } |
|
1006 | - } |
|
1007 | - return $inputs; |
|
1008 | - } |
|
1009 | - |
|
1010 | - |
|
1011 | - /** |
|
1012 | - * Gets all the subsections which are a proper form |
|
1013 | - * |
|
1014 | - * @return EE_Form_Section_Proper[] |
|
1015 | - * @throws EE_Error |
|
1016 | - */ |
|
1017 | - public function subforms() |
|
1018 | - { |
|
1019 | - $form_sections = array(); |
|
1020 | - foreach ($this->subsections() as $name => $obj) { |
|
1021 | - if ($obj instanceof EE_Form_Section_Proper) { |
|
1022 | - $form_sections[ $name ] = $obj; |
|
1023 | - } |
|
1024 | - } |
|
1025 | - return $form_sections; |
|
1026 | - } |
|
1027 | - |
|
1028 | - |
|
1029 | - /** |
|
1030 | - * Gets all the subsections (inputs, proper subsections, or html-only sections). |
|
1031 | - * Consider using inputs() or subforms() |
|
1032 | - * if you only want form inputs or proper form sections. |
|
1033 | - * |
|
1034 | - * @param boolean $require_construction_to_be_finalized most client code should |
|
1035 | - * leave this as TRUE so that the inputs will be properly |
|
1036 | - * configured. However, some client code may be ok with |
|
1037 | - * construction finalize being called later |
|
1038 | - * (realizing that the subsections' html names might not be |
|
1039 | - * set yet, etc.) |
|
1040 | - * @return EE_Form_Section_Proper[] |
|
1041 | - * @throws EE_Error |
|
1042 | - */ |
|
1043 | - public function subsections($require_construction_to_be_finalized = true) |
|
1044 | - { |
|
1045 | - if ($require_construction_to_be_finalized) { |
|
1046 | - $this->ensure_construct_finalized_called(); |
|
1047 | - } |
|
1048 | - return $this->_subsections; |
|
1049 | - } |
|
1050 | - |
|
1051 | - |
|
1052 | - /** |
|
1053 | - * Returns whether this form has any subforms or inputs |
|
1054 | - * @return bool |
|
1055 | - */ |
|
1056 | - public function hasSubsections() |
|
1057 | - { |
|
1058 | - return ! empty($this->_subsections); |
|
1059 | - } |
|
1060 | - |
|
1061 | - |
|
1062 | - /** |
|
1063 | - * Returns a simple array where keys are input names, and values are their normalized |
|
1064 | - * values. (Similar to calling get_input_value on inputs) |
|
1065 | - * |
|
1066 | - * @param boolean $include_subform_inputs Whether to include inputs from subforms, |
|
1067 | - * or just this forms' direct children inputs |
|
1068 | - * @param boolean $flatten Whether to force the results into 1-dimensional array, |
|
1069 | - * or allow multidimensional array |
|
1070 | - * @return array if $flatten is TRUE it will always be a 1-dimensional array |
|
1071 | - * with array keys being input names |
|
1072 | - * (regardless of whether they are from a subsection or not), |
|
1073 | - * and if $flatten is FALSE it can be a multidimensional array |
|
1074 | - * where keys are always subsection names and values are either |
|
1075 | - * the input's normalized value, or an array like the top-level array |
|
1076 | - * @throws EE_Error |
|
1077 | - */ |
|
1078 | - public function input_values($include_subform_inputs = false, $flatten = false) |
|
1079 | - { |
|
1080 | - return $this->_input_values(false, $include_subform_inputs, $flatten); |
|
1081 | - } |
|
1082 | - |
|
1083 | - |
|
1084 | - /** |
|
1085 | - * Similar to EE_Form_Section_Proper::input_values(), except this returns the 'display_value' |
|
1086 | - * of each input. On some inputs (especially radio boxes or checkboxes), the value stored |
|
1087 | - * is not necessarily the value we want to display to users. This creates an array |
|
1088 | - * where keys are the input names, and values are their display values |
|
1089 | - * |
|
1090 | - * @param boolean $include_subform_inputs Whether to include inputs from subforms, |
|
1091 | - * or just this forms' direct children inputs |
|
1092 | - * @param boolean $flatten Whether to force the results into 1-dimensional array, |
|
1093 | - * or allow multidimensional array |
|
1094 | - * @return array if $flatten is TRUE it will always be a 1-dimensional array |
|
1095 | - * with array keys being input names |
|
1096 | - * (regardless of whether they are from a subsection or not), |
|
1097 | - * and if $flatten is FALSE it can be a multidimensional array |
|
1098 | - * where keys are always subsection names and values are either |
|
1099 | - * the input's normalized value, or an array like the top-level array |
|
1100 | - * @throws EE_Error |
|
1101 | - */ |
|
1102 | - public function input_pretty_values($include_subform_inputs = false, $flatten = false) |
|
1103 | - { |
|
1104 | - return $this->_input_values(true, $include_subform_inputs, $flatten); |
|
1105 | - } |
|
1106 | - |
|
1107 | - |
|
1108 | - /** |
|
1109 | - * Gets the input values from the form |
|
1110 | - * |
|
1111 | - * @param boolean $pretty Whether to retrieve the pretty value, |
|
1112 | - * or just the normalized value |
|
1113 | - * @param boolean $include_subform_inputs Whether to include inputs from subforms, |
|
1114 | - * or just this forms' direct children inputs |
|
1115 | - * @param boolean $flatten Whether to force the results into 1-dimensional array, |
|
1116 | - * or allow multidimensional array |
|
1117 | - * @return array if $flatten is TRUE it will always be a 1-dimensional array with array keys being |
|
1118 | - * input names (regardless of whether they are from a subsection or not), |
|
1119 | - * and if $flatten is FALSE it can be a multidimensional array |
|
1120 | - * where keys are always subsection names and values are either |
|
1121 | - * the input's normalized value, or an array like the top-level array |
|
1122 | - * @throws EE_Error |
|
1123 | - */ |
|
1124 | - public function _input_values($pretty = false, $include_subform_inputs = false, $flatten = false) |
|
1125 | - { |
|
1126 | - $input_values = array(); |
|
1127 | - foreach ($this->subsections() as $subsection_name => $subsection) { |
|
1128 | - if ($subsection instanceof EE_Form_Input_Base) { |
|
1129 | - $input_values[ $subsection_name ] = $pretty |
|
1130 | - ? $subsection->pretty_value() |
|
1131 | - : $subsection->normalized_value(); |
|
1132 | - } elseif ($subsection instanceof EE_Form_Section_Proper && $include_subform_inputs) { |
|
1133 | - $subform_input_values = $subsection->_input_values( |
|
1134 | - $pretty, |
|
1135 | - $include_subform_inputs, |
|
1136 | - $flatten |
|
1137 | - ); |
|
1138 | - if ($flatten) { |
|
1139 | - $input_values = array_merge($input_values, $subform_input_values); |
|
1140 | - } else { |
|
1141 | - $input_values[ $subsection_name ] = $subform_input_values; |
|
1142 | - } |
|
1143 | - } |
|
1144 | - } |
|
1145 | - return $input_values; |
|
1146 | - } |
|
1147 | - |
|
1148 | - |
|
1149 | - /** |
|
1150 | - * Gets the originally submitted input values from the form |
|
1151 | - * |
|
1152 | - * @param boolean $include_subforms Whether to include inputs from subforms, |
|
1153 | - * or just this forms' direct children inputs |
|
1154 | - * @return array if $flatten is TRUE it will always be a 1-dimensional array |
|
1155 | - * with array keys being input names |
|
1156 | - * (regardless of whether they are from a subsection or not), |
|
1157 | - * and if $flatten is FALSE it can be a multidimensional array |
|
1158 | - * where keys are always subsection names and values are either |
|
1159 | - * the input's normalized value, or an array like the top-level array |
|
1160 | - * @throws EE_Error |
|
1161 | - */ |
|
1162 | - public function submitted_values($include_subforms = false) |
|
1163 | - { |
|
1164 | - $submitted_values = array(); |
|
1165 | - foreach ($this->subsections() as $subsection) { |
|
1166 | - if ($subsection instanceof EE_Form_Input_Base) { |
|
1167 | - // is this input part of an array of inputs? |
|
1168 | - if (strpos($subsection->html_name(), '[') !== false) { |
|
1169 | - $full_input_name = EEH_Array::convert_array_values_to_keys( |
|
1170 | - explode( |
|
1171 | - '[', |
|
1172 | - str_replace(']', '', $subsection->html_name()) |
|
1173 | - ), |
|
1174 | - $subsection->raw_value() |
|
1175 | - ); |
|
1176 | - $submitted_values = array_replace_recursive($submitted_values, $full_input_name); |
|
1177 | - } else { |
|
1178 | - $submitted_values[ $subsection->html_name() ] = $subsection->raw_value(); |
|
1179 | - } |
|
1180 | - } elseif ($subsection instanceof EE_Form_Section_Proper && $include_subforms) { |
|
1181 | - $subform_input_values = $subsection->submitted_values($include_subforms); |
|
1182 | - $submitted_values = array_replace_recursive($submitted_values, $subform_input_values); |
|
1183 | - } |
|
1184 | - } |
|
1185 | - return $submitted_values; |
|
1186 | - } |
|
1187 | - |
|
1188 | - |
|
1189 | - /** |
|
1190 | - * Indicates whether or not this form has received a submission yet |
|
1191 | - * (ie, had receive_form_submission called on it yet) |
|
1192 | - * |
|
1193 | - * @return boolean |
|
1194 | - * @throws EE_Error |
|
1195 | - */ |
|
1196 | - public function has_received_submission() |
|
1197 | - { |
|
1198 | - $this->ensure_construct_finalized_called(); |
|
1199 | - return $this->_received_submission; |
|
1200 | - } |
|
1201 | - |
|
1202 | - |
|
1203 | - /** |
|
1204 | - * Equivalent to passing 'exclude' in the constructor's options array. |
|
1205 | - * Removes the listed inputs from the form |
|
1206 | - * |
|
1207 | - * @param array $inputs_to_exclude values are the input names |
|
1208 | - * @return void |
|
1209 | - */ |
|
1210 | - public function exclude(array $inputs_to_exclude = array()) |
|
1211 | - { |
|
1212 | - foreach ($inputs_to_exclude as $input_to_exclude_name) { |
|
1213 | - unset($this->_subsections[ $input_to_exclude_name ]); |
|
1214 | - } |
|
1215 | - } |
|
1216 | - |
|
1217 | - |
|
1218 | - /** |
|
1219 | - * Changes these inputs' display strategy to be EE_Hidden_Display_Strategy. |
|
1220 | - * @param array $inputs_to_hide |
|
1221 | - * @throws EE_Error |
|
1222 | - */ |
|
1223 | - public function hide(array $inputs_to_hide = array()) |
|
1224 | - { |
|
1225 | - foreach ($inputs_to_hide as $input_to_hide) { |
|
1226 | - $input = $this->get_input($input_to_hide); |
|
1227 | - $input->set_display_strategy(new EE_Hidden_Display_Strategy()); |
|
1228 | - } |
|
1229 | - } |
|
1230 | - |
|
1231 | - |
|
1232 | - /** |
|
1233 | - * add_subsections |
|
1234 | - * Adds the listed subsections to the form section. |
|
1235 | - * If $subsection_name_to_target is provided, |
|
1236 | - * then new subsections are added before or after that subsection, |
|
1237 | - * otherwise to the start or end of the entire subsections array. |
|
1238 | - * |
|
1239 | - * @param EE_Form_Section_Base[] $new_subsections array of new form subsections |
|
1240 | - * where keys are their names |
|
1241 | - * @param string $subsection_name_to_target an existing for section that $new_subsections |
|
1242 | - * should be added before or after |
|
1243 | - * IF $subsection_name_to_target is null, |
|
1244 | - * then $new_subsections will be added to |
|
1245 | - * the beginning or end of the entire subsections array |
|
1246 | - * @param boolean $add_before whether to add $new_subsections, before or after |
|
1247 | - * $subsection_name_to_target, |
|
1248 | - * or if $subsection_name_to_target is null, |
|
1249 | - * before or after entire subsections array |
|
1250 | - * @return void |
|
1251 | - * @throws EE_Error |
|
1252 | - */ |
|
1253 | - public function add_subsections($new_subsections, $subsection_name_to_target = null, $add_before = true) |
|
1254 | - { |
|
1255 | - foreach ($new_subsections as $subsection_name => $subsection) { |
|
1256 | - if (! $subsection instanceof EE_Form_Section_Base) { |
|
1257 | - EE_Error::add_error( |
|
1258 | - sprintf( |
|
1259 | - esc_html__( |
|
1260 | - "Trying to add a %s as a subsection (it was named '%s') to the form section '%s'. It was removed.", |
|
1261 | - 'event_espresso' |
|
1262 | - ), |
|
1263 | - get_class($subsection), |
|
1264 | - $subsection_name, |
|
1265 | - $this->name() |
|
1266 | - ) |
|
1267 | - ); |
|
1268 | - unset($new_subsections[ $subsection_name ]); |
|
1269 | - } |
|
1270 | - } |
|
1271 | - $this->_subsections = EEH_Array::insert_into_array( |
|
1272 | - $this->_subsections, |
|
1273 | - $new_subsections, |
|
1274 | - $subsection_name_to_target, |
|
1275 | - $add_before |
|
1276 | - ); |
|
1277 | - if ($this->_construction_finalized) { |
|
1278 | - foreach ($this->_subsections as $name => $subsection) { |
|
1279 | - $subsection->_construct_finalize($this, $name); |
|
1280 | - } |
|
1281 | - } |
|
1282 | - } |
|
1283 | - |
|
1284 | - |
|
1285 | - /** |
|
1286 | - * @param string $subsection_name |
|
1287 | - * @param bool $recursive |
|
1288 | - * @return bool |
|
1289 | - */ |
|
1290 | - public function has_subsection($subsection_name, $recursive = false) |
|
1291 | - { |
|
1292 | - foreach ($this->_subsections as $name => $subsection) { |
|
1293 | - if ( |
|
1294 | - $name === $subsection_name |
|
1295 | - || ( |
|
1296 | - $recursive |
|
1297 | - && $subsection instanceof EE_Form_Section_Proper |
|
1298 | - && $subsection->has_subsection($subsection_name, $recursive) |
|
1299 | - ) |
|
1300 | - ) { |
|
1301 | - return true; |
|
1302 | - } |
|
1303 | - } |
|
1304 | - return false; |
|
1305 | - } |
|
1306 | - |
|
1307 | - |
|
1308 | - |
|
1309 | - /** |
|
1310 | - * Just gets all validatable subsections to clean their sensitive data |
|
1311 | - * |
|
1312 | - * @throws EE_Error |
|
1313 | - */ |
|
1314 | - public function clean_sensitive_data() |
|
1315 | - { |
|
1316 | - foreach ($this->get_validatable_subsections() as $subsection) { |
|
1317 | - $subsection->clean_sensitive_data(); |
|
1318 | - } |
|
1319 | - } |
|
1320 | - |
|
1321 | - |
|
1322 | - /** |
|
1323 | - * Sets the submission error message (aka validation error message for this form section and all sub-sections) |
|
1324 | - * @param string $form_submission_error_message |
|
1325 | - * @param EE_Form_Section_Validatable $form_section unused |
|
1326 | - * @throws EE_Error |
|
1327 | - */ |
|
1328 | - public function set_submission_error_message( |
|
1329 | - $form_submission_error_message = '' |
|
1330 | - ) { |
|
1331 | - $this->_form_submission_error_message = ! empty($form_submission_error_message) |
|
1332 | - ? $form_submission_error_message |
|
1333 | - : $this->getAllValidationErrorsString(); |
|
1334 | - } |
|
1335 | - |
|
1336 | - |
|
1337 | - /** |
|
1338 | - * Returns the cached error message. A default value is set for this during _validate(), |
|
1339 | - * (called during receive_form_submission) but it can be explicitly set using |
|
1340 | - * set_submission_error_message |
|
1341 | - * |
|
1342 | - * @return string |
|
1343 | - */ |
|
1344 | - public function submission_error_message() |
|
1345 | - { |
|
1346 | - return $this->_form_submission_error_message; |
|
1347 | - } |
|
1348 | - |
|
1349 | - |
|
1350 | - /** |
|
1351 | - * Sets a message to display if the data submitted to the form was valid. |
|
1352 | - * @param string $form_submission_success_message |
|
1353 | - */ |
|
1354 | - public function set_submission_success_message($form_submission_success_message = '') |
|
1355 | - { |
|
1356 | - $this->_form_submission_success_message = ! empty($form_submission_success_message) |
|
1357 | - ? $form_submission_success_message |
|
1358 | - : esc_html__('Form submitted successfully', 'event_espresso'); |
|
1359 | - } |
|
1360 | - |
|
1361 | - |
|
1362 | - /** |
|
1363 | - * Gets a message appropriate for display when the form is correctly submitted |
|
1364 | - * @return string |
|
1365 | - */ |
|
1366 | - public function submission_success_message() |
|
1367 | - { |
|
1368 | - return $this->_form_submission_success_message; |
|
1369 | - } |
|
1370 | - |
|
1371 | - |
|
1372 | - /** |
|
1373 | - * Returns the prefix that should be used on child of this form section for |
|
1374 | - * their html names. If this form section itself has a parent, prepends ITS |
|
1375 | - * prefix onto this form section's prefix. Used primarily by |
|
1376 | - * EE_Form_Input_Base::_set_default_html_name_if_empty |
|
1377 | - * |
|
1378 | - * @return string |
|
1379 | - * @throws EE_Error |
|
1380 | - */ |
|
1381 | - public function html_name_prefix() |
|
1382 | - { |
|
1383 | - if ($this->parent_section() instanceof EE_Form_Section_Proper) { |
|
1384 | - return $this->parent_section()->html_name_prefix() . '[' . $this->name() . ']'; |
|
1385 | - } |
|
1386 | - return $this->name(); |
|
1387 | - } |
|
1388 | - |
|
1389 | - |
|
1390 | - /** |
|
1391 | - * Gets the name, but first checks _construct_finalize has been called. If not, |
|
1392 | - * calls it (assumes there is no parent and that we want the name to be whatever |
|
1393 | - * was set, which is probably nothing, or the classname) |
|
1394 | - * |
|
1395 | - * @return string |
|
1396 | - * @throws EE_Error |
|
1397 | - */ |
|
1398 | - public function name() |
|
1399 | - { |
|
1400 | - $this->ensure_construct_finalized_called(); |
|
1401 | - return parent::name(); |
|
1402 | - } |
|
1403 | - |
|
1404 | - |
|
1405 | - /** |
|
1406 | - * @return EE_Form_Section_Proper |
|
1407 | - * @throws EE_Error |
|
1408 | - */ |
|
1409 | - public function parent_section() |
|
1410 | - { |
|
1411 | - $this->ensure_construct_finalized_called(); |
|
1412 | - return parent::parent_section(); |
|
1413 | - } |
|
1414 | - |
|
1415 | - |
|
1416 | - /** |
|
1417 | - * make sure construction finalized was called, otherwise children might not be ready |
|
1418 | - * |
|
1419 | - * @return void |
|
1420 | - * @throws EE_Error |
|
1421 | - */ |
|
1422 | - public function ensure_construct_finalized_called() |
|
1423 | - { |
|
1424 | - if (! $this->_construction_finalized) { |
|
1425 | - $this->_construct_finalize($this->_parent_section, $this->_name); |
|
1426 | - } |
|
1427 | - } |
|
1428 | - |
|
1429 | - |
|
1430 | - /** |
|
1431 | - * Checks if any of this form section's inputs, or any of its children's inputs, |
|
1432 | - * are in teh form data. If any are found, returns true. Else false |
|
1433 | - * |
|
1434 | - * @param array $req_data |
|
1435 | - * @return boolean |
|
1436 | - * @throws EE_Error |
|
1437 | - */ |
|
1438 | - public function form_data_present_in($req_data = null) |
|
1439 | - { |
|
1440 | - $req_data = $this->getCachedRequest($req_data); |
|
1441 | - foreach ($this->subsections() as $subsection) { |
|
1442 | - if ($subsection instanceof EE_Form_Input_Base) { |
|
1443 | - if ($subsection->form_data_present_in($req_data)) { |
|
1444 | - return true; |
|
1445 | - } |
|
1446 | - } elseif ($subsection instanceof EE_Form_Section_Proper) { |
|
1447 | - if ($subsection->form_data_present_in($req_data)) { |
|
1448 | - return true; |
|
1449 | - } |
|
1450 | - } |
|
1451 | - } |
|
1452 | - return false; |
|
1453 | - } |
|
1454 | - |
|
1455 | - |
|
1456 | - /** |
|
1457 | - * Gets validation errors for this form section and subsections |
|
1458 | - * Similar to EE_Form_Section_Validatable::get_validation_errors() except this |
|
1459 | - * gets the validation errors for ALL subsection |
|
1460 | - * |
|
1461 | - * @return EE_Validation_Error[] |
|
1462 | - * @throws EE_Error |
|
1463 | - */ |
|
1464 | - public function get_validation_errors_accumulated() |
|
1465 | - { |
|
1466 | - $validation_errors = $this->get_validation_errors(); |
|
1467 | - foreach ($this->get_validatable_subsections() as $subsection) { |
|
1468 | - if ($subsection instanceof EE_Form_Section_Proper) { |
|
1469 | - $validation_errors_on_this_subsection = $subsection->get_validation_errors_accumulated(); |
|
1470 | - } else { |
|
1471 | - $validation_errors_on_this_subsection = $subsection->get_validation_errors(); |
|
1472 | - } |
|
1473 | - if ($validation_errors_on_this_subsection) { |
|
1474 | - $validation_errors = array_merge($validation_errors, $validation_errors_on_this_subsection); |
|
1475 | - } |
|
1476 | - } |
|
1477 | - return $validation_errors; |
|
1478 | - } |
|
1479 | - |
|
1480 | - /** |
|
1481 | - * Fetch validation errors from children and grandchildren and puts them in a single string. |
|
1482 | - * This traverses the form section tree to generate this, but you probably want to instead use |
|
1483 | - * get_form_submission_error_message() which is usually this message cached (or a custom validation error message) |
|
1484 | - * |
|
1485 | - * @return string |
|
1486 | - * @since 4.9.59.p |
|
1487 | - */ |
|
1488 | - protected function getAllValidationErrorsString() |
|
1489 | - { |
|
1490 | - $submission_error_messages = array(); |
|
1491 | - // bad, bad, bad registrant |
|
1492 | - foreach ($this->get_validation_errors_accumulated() as $validation_error) { |
|
1493 | - if ($validation_error instanceof EE_Validation_Error) { |
|
1494 | - $form_section = $validation_error->get_form_section(); |
|
1495 | - if ($form_section instanceof EE_Form_Input_Base) { |
|
1496 | - $label = $validation_error->get_form_section()->html_label_text(); |
|
1497 | - } elseif ($form_section instanceof EE_Form_Section_Validatable) { |
|
1498 | - $label = $validation_error->get_form_section()->name(); |
|
1499 | - } else { |
|
1500 | - $label = esc_html__('Unknown', 'event_espresso'); |
|
1501 | - } |
|
1502 | - $submission_error_messages[] = sprintf( |
|
1503 | - esc_html__('%s : %s', 'event_espresso'), |
|
1504 | - $label, |
|
1505 | - $validation_error->getMessage() |
|
1506 | - ); |
|
1507 | - } |
|
1508 | - } |
|
1509 | - return implode('<br>', $submission_error_messages); |
|
1510 | - } |
|
1511 | - |
|
1512 | - |
|
1513 | - /** |
|
1514 | - * This isn't just the name of an input, it's a path pointing to an input. The |
|
1515 | - * path is similar to a folder path: slash (/) means to descend into a subsection, |
|
1516 | - * dot-dot-slash (../) means to ascend into the parent section. |
|
1517 | - * After a series of slashes and dot-dot-slashes, there should be the name of an input, |
|
1518 | - * which will be returned. |
|
1519 | - * Eg, if you want the related input to be conditional on a sibling input name 'foobar' |
|
1520 | - * just use 'foobar'. If you want it to be conditional on an aunt/uncle input name |
|
1521 | - * 'baz', use '../baz'. If you want it to be conditional on a cousin input, |
|
1522 | - * the child of 'baz_section' named 'baz_child', use '../baz_section/baz_child'. |
|
1523 | - * Etc |
|
1524 | - * |
|
1525 | - * @param string|false $form_section_path we accept false also because substr( '../', '../' ) = false |
|
1526 | - * @return EE_Form_Section_Base |
|
1527 | - * @throws EE_Error |
|
1528 | - */ |
|
1529 | - public function find_section_from_path($form_section_path) |
|
1530 | - { |
|
1531 | - // check if we can find the input from purely going straight up the tree |
|
1532 | - $input = parent::find_section_from_path($form_section_path); |
|
1533 | - if ($input instanceof EE_Form_Section_Base) { |
|
1534 | - return $input; |
|
1535 | - } |
|
1536 | - $next_slash_pos = strpos($form_section_path, '/'); |
|
1537 | - if ($next_slash_pos !== false) { |
|
1538 | - $child_section_name = substr($form_section_path, 0, $next_slash_pos); |
|
1539 | - $subpath = substr($form_section_path, $next_slash_pos + 1); |
|
1540 | - } else { |
|
1541 | - $child_section_name = $form_section_path; |
|
1542 | - $subpath = ''; |
|
1543 | - } |
|
1544 | - $child_section = $this->get_subsection($child_section_name); |
|
1545 | - if ($child_section instanceof EE_Form_Section_Base) { |
|
1546 | - return $child_section->find_section_from_path($subpath); |
|
1547 | - } |
|
1548 | - return null; |
|
1549 | - } |
|
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 | + $session = EE_Registry::instance()->SSN; |
|
349 | + if ($session instanceof EE_Session) { |
|
350 | + return EE_Registry::instance()->SSN->set_session_data( |
|
351 | + [ |
|
352 | + EE_Form_Section_Proper::SUBMITTED_FORM_DATA_SSN_KEY => $this->submitted_values(true), |
|
353 | + ] |
|
354 | + ); |
|
355 | + } |
|
356 | + return false; |
|
357 | + } |
|
358 | + |
|
359 | + |
|
360 | + /** |
|
361 | + * retrieves the originally submitted input values in the session |
|
362 | + * so that they can be used to repopulate the form if it failed validation |
|
363 | + * |
|
364 | + * @return array |
|
365 | + * @throws InvalidArgumentException |
|
366 | + * @throws InvalidInterfaceException |
|
367 | + * @throws InvalidDataTypeException |
|
368 | + */ |
|
369 | + protected function get_submitted_form_data_from_session() |
|
370 | + { |
|
371 | + $session = EE_Registry::instance()->SSN; |
|
372 | + if ($session instanceof EE_Session) { |
|
373 | + return $session->get_session_data( |
|
374 | + EE_Form_Section_Proper::SUBMITTED_FORM_DATA_SSN_KEY |
|
375 | + ); |
|
376 | + } |
|
377 | + return array(); |
|
378 | + } |
|
379 | + |
|
380 | + |
|
381 | + /** |
|
382 | + * flushed the originally submitted input values from the session |
|
383 | + * |
|
384 | + * @return boolean whether or not the data was successfully removed from the session |
|
385 | + * @throws InvalidArgumentException |
|
386 | + * @throws InvalidInterfaceException |
|
387 | + * @throws InvalidDataTypeException |
|
388 | + */ |
|
389 | + public static function flush_submitted_form_data_from_session() |
|
390 | + { |
|
391 | + return EE_Registry::instance()->SSN->reset_data( |
|
392 | + array(EE_Form_Section_Proper::SUBMITTED_FORM_DATA_SSN_KEY) |
|
393 | + ); |
|
394 | + } |
|
395 | + |
|
396 | + |
|
397 | + /** |
|
398 | + * Populates this form and its subsections with data from the session. |
|
399 | + * (Wrapper for EE_Form_Section_Proper::receive_form_submission, so it shows |
|
400 | + * validation errors when displaying too) |
|
401 | + * Returns true if the form was populated from the session, false otherwise |
|
402 | + * |
|
403 | + * @return boolean |
|
404 | + * @throws InvalidArgumentException |
|
405 | + * @throws InvalidInterfaceException |
|
406 | + * @throws InvalidDataTypeException |
|
407 | + * @throws EE_Error |
|
408 | + */ |
|
409 | + public function populate_from_session() |
|
410 | + { |
|
411 | + $form_data_in_session = $this->get_submitted_form_data_from_session(); |
|
412 | + if (empty($form_data_in_session)) { |
|
413 | + return false; |
|
414 | + } |
|
415 | + $this->receive_form_submission($form_data_in_session); |
|
416 | + add_action('shutdown', array('EE_Form_Section_Proper', 'flush_submitted_form_data_from_session')); |
|
417 | + if ($this->form_data_present_in($form_data_in_session)) { |
|
418 | + return true; |
|
419 | + } |
|
420 | + return false; |
|
421 | + } |
|
422 | + |
|
423 | + |
|
424 | + /** |
|
425 | + * Populates the default data for the form, given an array where keys are |
|
426 | + * the input names, and values are their values (preferably normalized to be their |
|
427 | + * proper PHP types, not all strings... although that should be ok too). |
|
428 | + * Proper subsections are sub-arrays, the key being the subsection's name, and |
|
429 | + * the value being an array formatted in teh same way |
|
430 | + * |
|
431 | + * @param array $default_data |
|
432 | + * @throws EE_Error |
|
433 | + */ |
|
434 | + public function populate_defaults($default_data) |
|
435 | + { |
|
436 | + foreach ($this->subsections(false) as $subsection_name => $subsection) { |
|
437 | + if (isset($default_data[ $subsection_name ])) { |
|
438 | + if ($subsection instanceof EE_Form_Input_Base) { |
|
439 | + $subsection->set_default($default_data[ $subsection_name ]); |
|
440 | + } elseif ($subsection instanceof EE_Form_Section_Proper) { |
|
441 | + $subsection->populate_defaults($default_data[ $subsection_name ]); |
|
442 | + } |
|
443 | + } |
|
444 | + } |
|
445 | + } |
|
446 | + |
|
447 | + |
|
448 | + /** |
|
449 | + * returns true if subsection exists |
|
450 | + * |
|
451 | + * @param string $name |
|
452 | + * @return boolean |
|
453 | + */ |
|
454 | + public function subsection_exists($name) |
|
455 | + { |
|
456 | + return isset($this->_subsections[ $name ]) ? true : false; |
|
457 | + } |
|
458 | + |
|
459 | + |
|
460 | + /** |
|
461 | + * Gets the subsection specified by its name |
|
462 | + * |
|
463 | + * @param string $name |
|
464 | + * @param boolean $require_construction_to_be_finalized most client code should leave this as TRUE |
|
465 | + * so that the inputs will be properly configured. |
|
466 | + * However, some client code may be ok |
|
467 | + * with construction finalize being called later |
|
468 | + * (realizing that the subsections' html names |
|
469 | + * might not be set yet, etc.) |
|
470 | + * @return EE_Form_Section_Base |
|
471 | + * @throws EE_Error |
|
472 | + */ |
|
473 | + public function get_subsection($name, $require_construction_to_be_finalized = true) |
|
474 | + { |
|
475 | + if ($require_construction_to_be_finalized) { |
|
476 | + $this->ensure_construct_finalized_called(); |
|
477 | + } |
|
478 | + return $this->subsection_exists($name) ? $this->_subsections[ $name ] : null; |
|
479 | + } |
|
480 | + |
|
481 | + |
|
482 | + /** |
|
483 | + * Gets all the validatable subsections of this form section |
|
484 | + * |
|
485 | + * @return EE_Form_Section_Validatable[] |
|
486 | + * @throws EE_Error |
|
487 | + */ |
|
488 | + public function get_validatable_subsections() |
|
489 | + { |
|
490 | + $validatable_subsections = array(); |
|
491 | + foreach ($this->subsections() as $name => $obj) { |
|
492 | + if ($obj instanceof EE_Form_Section_Validatable) { |
|
493 | + $validatable_subsections[ $name ] = $obj; |
|
494 | + } |
|
495 | + } |
|
496 | + return $validatable_subsections; |
|
497 | + } |
|
498 | + |
|
499 | + |
|
500 | + /** |
|
501 | + * Gets an input by the given name. If not found, or if its not an EE_FOrm_Input_Base child, |
|
502 | + * throw an EE_Error. |
|
503 | + * |
|
504 | + * @param string $name |
|
505 | + * @param boolean $require_construction_to_be_finalized most client code should |
|
506 | + * leave this as TRUE so that the inputs will be properly |
|
507 | + * configured. However, some client code may be ok with |
|
508 | + * construction finalize being called later |
|
509 | + * (realizing that the subsections' html names might not be |
|
510 | + * set yet, etc.) |
|
511 | + * @return EE_Form_Input_Base |
|
512 | + * @throws EE_Error |
|
513 | + */ |
|
514 | + public function get_input($name, $require_construction_to_be_finalized = true) |
|
515 | + { |
|
516 | + $subsection = $this->get_subsection( |
|
517 | + $name, |
|
518 | + $require_construction_to_be_finalized |
|
519 | + ); |
|
520 | + if (! $subsection instanceof EE_Form_Input_Base) { |
|
521 | + throw new EE_Error( |
|
522 | + sprintf( |
|
523 | + esc_html__( |
|
524 | + "Subsection '%s' is not an instanceof EE_Form_Input_Base on form '%s'. It is a '%s'", |
|
525 | + 'event_espresso' |
|
526 | + ), |
|
527 | + $name, |
|
528 | + get_class($this), |
|
529 | + $subsection ? get_class($subsection) : esc_html__('NULL', 'event_espresso') |
|
530 | + ) |
|
531 | + ); |
|
532 | + } |
|
533 | + return $subsection; |
|
534 | + } |
|
535 | + |
|
536 | + |
|
537 | + /** |
|
538 | + * Like get_input(), gets the proper subsection of the form given the name, |
|
539 | + * otherwise throws an EE_Error |
|
540 | + * |
|
541 | + * @param string $name |
|
542 | + * @param boolean $require_construction_to_be_finalized most client code should |
|
543 | + * leave this as TRUE so that the inputs will be properly |
|
544 | + * configured. However, some client code may be ok with |
|
545 | + * construction finalize being called later |
|
546 | + * (realizing that the subsections' html names might not be |
|
547 | + * set yet, etc.) |
|
548 | + * @return EE_Form_Section_Proper |
|
549 | + * @throws EE_Error |
|
550 | + */ |
|
551 | + public function get_proper_subsection($name, $require_construction_to_be_finalized = true) |
|
552 | + { |
|
553 | + $subsection = $this->get_subsection( |
|
554 | + $name, |
|
555 | + $require_construction_to_be_finalized |
|
556 | + ); |
|
557 | + if (! $subsection instanceof EE_Form_Section_Proper) { |
|
558 | + throw new EE_Error( |
|
559 | + sprintf( |
|
560 | + esc_html__( |
|
561 | + "Subsection '%'s is not an instanceof EE_Form_Section_Proper on form '%s'", |
|
562 | + 'event_espresso' |
|
563 | + ), |
|
564 | + $name, |
|
565 | + get_class($this) |
|
566 | + ) |
|
567 | + ); |
|
568 | + } |
|
569 | + return $subsection; |
|
570 | + } |
|
571 | + |
|
572 | + |
|
573 | + /** |
|
574 | + * Gets the value of the specified input. Should be called after receive_form_submission() |
|
575 | + * or populate_defaults() on the form, where the normalized value on the input is set. |
|
576 | + * |
|
577 | + * @param string $name |
|
578 | + * @return mixed depending on the input's type and its normalization strategy |
|
579 | + * @throws EE_Error |
|
580 | + */ |
|
581 | + public function get_input_value($name) |
|
582 | + { |
|
583 | + $input = $this->get_input($name); |
|
584 | + return $input->normalized_value(); |
|
585 | + } |
|
586 | + |
|
587 | + |
|
588 | + /** |
|
589 | + * Checks if this form section itself is valid, and then checks its subsections |
|
590 | + * |
|
591 | + * @throws EE_Error |
|
592 | + * @return boolean |
|
593 | + */ |
|
594 | + public function is_valid() |
|
595 | + { |
|
596 | + if ($this->is_valid === null) { |
|
597 | + if (! $this->has_received_submission()) { |
|
598 | + throw new EE_Error( |
|
599 | + sprintf( |
|
600 | + esc_html__( |
|
601 | + 'You cannot check if a form is valid before receiving the form submission using receive_form_submission', |
|
602 | + 'event_espresso' |
|
603 | + ) |
|
604 | + ) |
|
605 | + ); |
|
606 | + } |
|
607 | + if (! parent::is_valid()) { |
|
608 | + $this->is_valid = false; |
|
609 | + } else { |
|
610 | + // ok so no general errors to this entire form section. |
|
611 | + // so let's check the subsections, but only set errors if that hasn't been done yet |
|
612 | + $this->is_valid = true; |
|
613 | + foreach ($this->get_validatable_subsections() as $subsection) { |
|
614 | + if (! $subsection->is_valid()) { |
|
615 | + $this->is_valid = false; |
|
616 | + } |
|
617 | + } |
|
618 | + } |
|
619 | + } |
|
620 | + return $this->is_valid; |
|
621 | + } |
|
622 | + |
|
623 | + |
|
624 | + /** |
|
625 | + * gets the default name of this form section if none is specified |
|
626 | + * |
|
627 | + * @return void |
|
628 | + */ |
|
629 | + protected function _set_default_name_if_empty() |
|
630 | + { |
|
631 | + if (! $this->_name) { |
|
632 | + $classname = get_class($this); |
|
633 | + $default_name = str_replace('EE_', '', $classname); |
|
634 | + $this->_name = $default_name; |
|
635 | + } |
|
636 | + } |
|
637 | + |
|
638 | + |
|
639 | + /** |
|
640 | + * Returns the HTML for the form, except for the form opening and closing tags |
|
641 | + * (as the form section doesn't know where you necessarily want to send the information to), |
|
642 | + * and except for a submit button. Enqueues JS and CSS; if called early enough we will |
|
643 | + * try to enqueue them in the header, otherwise they'll be enqueued in the footer. |
|
644 | + * Not doing_it_wrong because theoretically this CAN be used properly, |
|
645 | + * provided its used during "wp_enqueue_scripts", or it doesn't need to enqueue |
|
646 | + * any CSS. |
|
647 | + * |
|
648 | + * @throws InvalidArgumentException |
|
649 | + * @throws InvalidInterfaceException |
|
650 | + * @throws InvalidDataTypeException |
|
651 | + * @throws EE_Error |
|
652 | + */ |
|
653 | + public function get_html_and_js() |
|
654 | + { |
|
655 | + $this->enqueue_js(); |
|
656 | + return $this->get_html(); |
|
657 | + } |
|
658 | + |
|
659 | + |
|
660 | + /** |
|
661 | + * returns HTML for displaying this form section. recursively calls display_section() on all subsections |
|
662 | + * |
|
663 | + * @param bool $display_previously_submitted_data |
|
664 | + * @return string |
|
665 | + * @throws InvalidArgumentException |
|
666 | + * @throws InvalidInterfaceException |
|
667 | + * @throws InvalidDataTypeException |
|
668 | + * @throws EE_Error |
|
669 | + * @throws EE_Error |
|
670 | + * @throws EE_Error |
|
671 | + */ |
|
672 | + public function get_html($display_previously_submitted_data = true) |
|
673 | + { |
|
674 | + $this->ensure_construct_finalized_called(); |
|
675 | + if ($display_previously_submitted_data) { |
|
676 | + $this->populate_from_session(); |
|
677 | + } |
|
678 | + return $this->_form_html_filter |
|
679 | + ? $this->_form_html_filter->filterHtml($this->_layout_strategy->layout_form(), $this) |
|
680 | + : $this->_layout_strategy->layout_form(); |
|
681 | + } |
|
682 | + |
|
683 | + |
|
684 | + /** |
|
685 | + * enqueues JS and CSS for the form. |
|
686 | + * It is preferred to call this before wp_enqueue_scripts so the |
|
687 | + * scripts and styles can be put in the header, but if called later |
|
688 | + * they will be put in the footer (which is OK for JS, but in HTML4 CSS should |
|
689 | + * only be in the header; but in HTML5 its ok in the body. |
|
690 | + * See http://stackoverflow.com/questions/4957446/load-external-css-file-in-body-tag. |
|
691 | + * So if your form enqueues CSS, it's preferred to call this before wp_enqueue_scripts.) |
|
692 | + * |
|
693 | + * @return void |
|
694 | + * @throws EE_Error |
|
695 | + */ |
|
696 | + public function enqueue_js() |
|
697 | + { |
|
698 | + $this->_enqueue_and_localize_form_js(); |
|
699 | + foreach ($this->subsections() as $subsection) { |
|
700 | + $subsection->enqueue_js(); |
|
701 | + } |
|
702 | + } |
|
703 | + |
|
704 | + |
|
705 | + /** |
|
706 | + * adds a filter so that jquery validate gets enqueued in EE_System::wp_enqueue_scripts(). |
|
707 | + * This must be done BEFORE wp_enqueue_scripts() gets called, which is on |
|
708 | + * the wp_enqueue_scripts hook. |
|
709 | + * However, registering the form js and localizing it can happen when we |
|
710 | + * actually output the form (which is preferred, seeing how teh form's fields |
|
711 | + * could change until it's actually outputted) |
|
712 | + * |
|
713 | + * @param boolean $init_form_validation_automatically whether or not we want the form validation |
|
714 | + * to be triggered automatically or not |
|
715 | + * @return void |
|
716 | + */ |
|
717 | + public static function wp_enqueue_scripts($init_form_validation_automatically = true) |
|
718 | + { |
|
719 | + wp_register_script( |
|
720 | + 'ee_form_section_validation', |
|
721 | + EE_GLOBAL_ASSETS_URL . 'scripts' . '/form_section_validation.js', |
|
722 | + array('jquery-validate', 'jquery-ui-datepicker', 'jquery-validate-extra-methods'), |
|
723 | + EVENT_ESPRESSO_VERSION, |
|
724 | + true |
|
725 | + ); |
|
726 | + wp_localize_script( |
|
727 | + 'ee_form_section_validation', |
|
728 | + 'ee_form_section_validation_init', |
|
729 | + array('init' => $init_form_validation_automatically ? '1' : '0') |
|
730 | + ); |
|
731 | + } |
|
732 | + |
|
733 | + |
|
734 | + /** |
|
735 | + * gets the variables used by form_section_validation.js. |
|
736 | + * This needs to be called AFTER we've called $this->_enqueue_jquery_validate_script, |
|
737 | + * but before the wordpress hook wp_loaded |
|
738 | + * |
|
739 | + * @throws EE_Error |
|
740 | + */ |
|
741 | + public function _enqueue_and_localize_form_js() |
|
742 | + { |
|
743 | + $this->ensure_construct_finalized_called(); |
|
744 | + // actually, we don't want to localize just yet. There may be other forms on the page. |
|
745 | + // so we need to add our form section data to a static variable accessible by all form sections |
|
746 | + // and localize it just before the footer |
|
747 | + $this->localize_validation_rules(); |
|
748 | + add_action('wp_footer', array('EE_Form_Section_Proper', 'localize_script_for_all_forms'), 2); |
|
749 | + add_action('admin_footer', array('EE_Form_Section_Proper', 'localize_script_for_all_forms')); |
|
750 | + } |
|
751 | + |
|
752 | + |
|
753 | + /** |
|
754 | + * add our form section data to a static variable accessible by all form sections |
|
755 | + * |
|
756 | + * @param bool $return_for_subsection |
|
757 | + * @return void |
|
758 | + * @throws EE_Error |
|
759 | + */ |
|
760 | + public function localize_validation_rules($return_for_subsection = false) |
|
761 | + { |
|
762 | + // we only want to localize vars ONCE for the entire form, |
|
763 | + // so if the form section doesn't have a parent, then it must be the top dog |
|
764 | + if ($return_for_subsection || ! $this->parent_section()) { |
|
765 | + EE_Form_Section_Proper::$_js_localization['form_data'][ $this->html_id() ] = array( |
|
766 | + 'form_section_id' => $this->html_id(true), |
|
767 | + 'validation_rules' => $this->get_jquery_validation_rules(), |
|
768 | + 'other_data' => $this->get_other_js_data(), |
|
769 | + 'errors' => $this->subsection_validation_errors_by_html_name(), |
|
770 | + ); |
|
771 | + EE_Form_Section_Proper::$_scripts_localized = true; |
|
772 | + } |
|
773 | + } |
|
774 | + |
|
775 | + |
|
776 | + /** |
|
777 | + * Gets an array of extra data that will be useful for client-side javascript. |
|
778 | + * This is primarily data added by inputs and forms in addition to any |
|
779 | + * scripts they might enqueue |
|
780 | + * |
|
781 | + * @param array $form_other_js_data |
|
782 | + * @return array |
|
783 | + * @throws EE_Error |
|
784 | + */ |
|
785 | + public function get_other_js_data($form_other_js_data = array()) |
|
786 | + { |
|
787 | + foreach ($this->subsections() as $subsection) { |
|
788 | + $form_other_js_data = $subsection->get_other_js_data($form_other_js_data); |
|
789 | + } |
|
790 | + return $form_other_js_data; |
|
791 | + } |
|
792 | + |
|
793 | + |
|
794 | + /** |
|
795 | + * Gets a flat array of inputs for this form section and its subsections. |
|
796 | + * Keys are their form names, and values are the inputs themselves |
|
797 | + * |
|
798 | + * @return EE_Form_Input_Base |
|
799 | + * @throws EE_Error |
|
800 | + */ |
|
801 | + public function inputs_in_subsections() |
|
802 | + { |
|
803 | + $inputs = array(); |
|
804 | + foreach ($this->subsections() as $subsection) { |
|
805 | + if ($subsection instanceof EE_Form_Input_Base) { |
|
806 | + $inputs[ $subsection->html_name() ] = $subsection; |
|
807 | + } elseif ($subsection instanceof EE_Form_Section_Proper) { |
|
808 | + $inputs += $subsection->inputs_in_subsections(); |
|
809 | + } |
|
810 | + } |
|
811 | + return $inputs; |
|
812 | + } |
|
813 | + |
|
814 | + |
|
815 | + /** |
|
816 | + * Gets a flat array of all the validation errors. |
|
817 | + * Keys are html names (because those should be unique) |
|
818 | + * and values are a string of all their validation errors |
|
819 | + * |
|
820 | + * @return string[] |
|
821 | + * @throws EE_Error |
|
822 | + */ |
|
823 | + public function subsection_validation_errors_by_html_name() |
|
824 | + { |
|
825 | + $inputs = $this->inputs(); |
|
826 | + $errors = array(); |
|
827 | + foreach ($inputs as $form_input) { |
|
828 | + if ($form_input instanceof EE_Form_Input_Base && $form_input->get_validation_errors()) { |
|
829 | + $errors[ $form_input->html_name() ] = $form_input->get_validation_error_string(); |
|
830 | + } |
|
831 | + } |
|
832 | + return $errors; |
|
833 | + } |
|
834 | + |
|
835 | + |
|
836 | + /** |
|
837 | + * passes all the form data required by the JS to the JS, and enqueues the few required JS files. |
|
838 | + * Should be setup by each form during the _enqueues_and_localize_form_js |
|
839 | + * |
|
840 | + * @throws InvalidArgumentException |
|
841 | + * @throws InvalidInterfaceException |
|
842 | + * @throws InvalidDataTypeException |
|
843 | + */ |
|
844 | + public static function localize_script_for_all_forms() |
|
845 | + { |
|
846 | + // allow inputs and stuff to hook in their JS and stuff here |
|
847 | + do_action('AHEE__EE_Form_Section_Proper__localize_script_for_all_forms__begin'); |
|
848 | + EE_Form_Section_Proper::$_js_localization['localized_error_messages'] = EE_Form_Section_Proper::_get_localized_error_messages(); |
|
849 | + $email_validation_level = isset(EE_Registry::instance()->CFG->registration->email_validation_level) |
|
850 | + ? EE_Registry::instance()->CFG->registration->email_validation_level |
|
851 | + : 'wp_default'; |
|
852 | + EE_Form_Section_Proper::$_js_localization['email_validation_level'] = $email_validation_level; |
|
853 | + wp_enqueue_script('ee_form_section_validation'); |
|
854 | + wp_localize_script( |
|
855 | + 'ee_form_section_validation', |
|
856 | + 'ee_form_section_vars', |
|
857 | + EE_Form_Section_Proper::$_js_localization |
|
858 | + ); |
|
859 | + } |
|
860 | + |
|
861 | + |
|
862 | + /** |
|
863 | + * ensure_scripts_localized |
|
864 | + * |
|
865 | + * @throws EE_Error |
|
866 | + */ |
|
867 | + public function ensure_scripts_localized() |
|
868 | + { |
|
869 | + if (! EE_Form_Section_Proper::$_scripts_localized) { |
|
870 | + $this->_enqueue_and_localize_form_js(); |
|
871 | + } |
|
872 | + } |
|
873 | + |
|
874 | + |
|
875 | + /** |
|
876 | + * Gets the hard-coded validation error messages to be used in the JS. The convention |
|
877 | + * is that the key here should be the same as the custom validation rule put in the JS file |
|
878 | + * |
|
879 | + * @return array keys are custom validation rules, and values are internationalized strings |
|
880 | + */ |
|
881 | + private static function _get_localized_error_messages() |
|
882 | + { |
|
883 | + return array( |
|
884 | + 'validUrl' => wp_strip_all_tags(__('This is not a valid absolute URL. Eg, http://domain.com/monkey.jpg', 'event_espresso')), |
|
885 | + 'regex' => wp_strip_all_tags(__('Please check your input', 'event_espresso')) |
|
886 | + ); |
|
887 | + } |
|
888 | + |
|
889 | + |
|
890 | + /** |
|
891 | + * @return array |
|
892 | + */ |
|
893 | + public static function js_localization() |
|
894 | + { |
|
895 | + return self::$_js_localization; |
|
896 | + } |
|
897 | + |
|
898 | + |
|
899 | + /** |
|
900 | + * @return void |
|
901 | + */ |
|
902 | + public static function reset_js_localization() |
|
903 | + { |
|
904 | + self::$_js_localization = array(); |
|
905 | + } |
|
906 | + |
|
907 | + |
|
908 | + /** |
|
909 | + * Gets the JS to put inside the jquery validation rules for subsection of this form section. |
|
910 | + * See parent function for more... |
|
911 | + * |
|
912 | + * @return array |
|
913 | + * @throws EE_Error |
|
914 | + */ |
|
915 | + public function get_jquery_validation_rules() |
|
916 | + { |
|
917 | + $jquery_validation_rules = array(); |
|
918 | + foreach ($this->get_validatable_subsections() as $subsection) { |
|
919 | + $jquery_validation_rules = array_merge( |
|
920 | + $jquery_validation_rules, |
|
921 | + $subsection->get_jquery_validation_rules() |
|
922 | + ); |
|
923 | + } |
|
924 | + return $jquery_validation_rules; |
|
925 | + } |
|
926 | + |
|
927 | + |
|
928 | + /** |
|
929 | + * Sanitizes all the data and sets the sanitized value of each field |
|
930 | + * |
|
931 | + * @param array $req_data |
|
932 | + * @return void |
|
933 | + * @throws EE_Error |
|
934 | + */ |
|
935 | + protected function _normalize($req_data) |
|
936 | + { |
|
937 | + $this->_received_submission = true; |
|
938 | + $this->_validation_errors = array(); |
|
939 | + foreach ($this->get_validatable_subsections() as $subsection) { |
|
940 | + try { |
|
941 | + $subsection->_normalize($req_data); |
|
942 | + } catch (EE_Validation_Error $e) { |
|
943 | + $subsection->add_validation_error($e); |
|
944 | + } |
|
945 | + } |
|
946 | + } |
|
947 | + |
|
948 | + |
|
949 | + /** |
|
950 | + * Performs validation on this form section and its subsections. |
|
951 | + * For each subsection, |
|
952 | + * calls _validate_{subsection_name} on THIS form (if the function exists) |
|
953 | + * and passes it the subsection, then calls _validate on that subsection. |
|
954 | + * If you need to perform validation on the form as a whole (considering multiple) |
|
955 | + * you would be best to override this _validate method, |
|
956 | + * calling parent::_validate() first. |
|
957 | + * |
|
958 | + * @throws EE_Error |
|
959 | + */ |
|
960 | + protected function _validate() |
|
961 | + { |
|
962 | + // reset the cache of whether this form is valid or not- we're re-validating it now |
|
963 | + $this->is_valid = null; |
|
964 | + foreach ($this->get_validatable_subsections() as $subsection_name => $subsection) { |
|
965 | + if (method_exists($this, '_validate_' . $subsection_name)) { |
|
966 | + call_user_func_array(array($this, '_validate_' . $subsection_name), array($subsection)); |
|
967 | + } |
|
968 | + $subsection->_validate(); |
|
969 | + } |
|
970 | + } |
|
971 | + |
|
972 | + |
|
973 | + /** |
|
974 | + * Gets all the validated inputs for the form section |
|
975 | + * |
|
976 | + * @return array |
|
977 | + * @throws EE_Error |
|
978 | + */ |
|
979 | + public function valid_data() |
|
980 | + { |
|
981 | + $inputs = array(); |
|
982 | + foreach ($this->subsections() as $subsection_name => $subsection) { |
|
983 | + if ($subsection instanceof EE_Form_Section_Proper) { |
|
984 | + $inputs[ $subsection_name ] = $subsection->valid_data(); |
|
985 | + } elseif ($subsection instanceof EE_Form_Input_Base) { |
|
986 | + $inputs[ $subsection_name ] = $subsection->normalized_value(); |
|
987 | + } |
|
988 | + } |
|
989 | + return $inputs; |
|
990 | + } |
|
991 | + |
|
992 | + |
|
993 | + /** |
|
994 | + * Gets all the inputs on this form section |
|
995 | + * |
|
996 | + * @return EE_Form_Input_Base[] |
|
997 | + * @throws EE_Error |
|
998 | + */ |
|
999 | + public function inputs() |
|
1000 | + { |
|
1001 | + $inputs = array(); |
|
1002 | + foreach ($this->subsections() as $subsection_name => $subsection) { |
|
1003 | + if ($subsection instanceof EE_Form_Input_Base) { |
|
1004 | + $inputs[ $subsection_name ] = $subsection; |
|
1005 | + } |
|
1006 | + } |
|
1007 | + return $inputs; |
|
1008 | + } |
|
1009 | + |
|
1010 | + |
|
1011 | + /** |
|
1012 | + * Gets all the subsections which are a proper form |
|
1013 | + * |
|
1014 | + * @return EE_Form_Section_Proper[] |
|
1015 | + * @throws EE_Error |
|
1016 | + */ |
|
1017 | + public function subforms() |
|
1018 | + { |
|
1019 | + $form_sections = array(); |
|
1020 | + foreach ($this->subsections() as $name => $obj) { |
|
1021 | + if ($obj instanceof EE_Form_Section_Proper) { |
|
1022 | + $form_sections[ $name ] = $obj; |
|
1023 | + } |
|
1024 | + } |
|
1025 | + return $form_sections; |
|
1026 | + } |
|
1027 | + |
|
1028 | + |
|
1029 | + /** |
|
1030 | + * Gets all the subsections (inputs, proper subsections, or html-only sections). |
|
1031 | + * Consider using inputs() or subforms() |
|
1032 | + * if you only want form inputs or proper form sections. |
|
1033 | + * |
|
1034 | + * @param boolean $require_construction_to_be_finalized most client code should |
|
1035 | + * leave this as TRUE so that the inputs will be properly |
|
1036 | + * configured. However, some client code may be ok with |
|
1037 | + * construction finalize being called later |
|
1038 | + * (realizing that the subsections' html names might not be |
|
1039 | + * set yet, etc.) |
|
1040 | + * @return EE_Form_Section_Proper[] |
|
1041 | + * @throws EE_Error |
|
1042 | + */ |
|
1043 | + public function subsections($require_construction_to_be_finalized = true) |
|
1044 | + { |
|
1045 | + if ($require_construction_to_be_finalized) { |
|
1046 | + $this->ensure_construct_finalized_called(); |
|
1047 | + } |
|
1048 | + return $this->_subsections; |
|
1049 | + } |
|
1050 | + |
|
1051 | + |
|
1052 | + /** |
|
1053 | + * Returns whether this form has any subforms or inputs |
|
1054 | + * @return bool |
|
1055 | + */ |
|
1056 | + public function hasSubsections() |
|
1057 | + { |
|
1058 | + return ! empty($this->_subsections); |
|
1059 | + } |
|
1060 | + |
|
1061 | + |
|
1062 | + /** |
|
1063 | + * Returns a simple array where keys are input names, and values are their normalized |
|
1064 | + * values. (Similar to calling get_input_value on inputs) |
|
1065 | + * |
|
1066 | + * @param boolean $include_subform_inputs Whether to include inputs from subforms, |
|
1067 | + * or just this forms' direct children inputs |
|
1068 | + * @param boolean $flatten Whether to force the results into 1-dimensional array, |
|
1069 | + * or allow multidimensional array |
|
1070 | + * @return array if $flatten is TRUE it will always be a 1-dimensional array |
|
1071 | + * with array keys being input names |
|
1072 | + * (regardless of whether they are from a subsection or not), |
|
1073 | + * and if $flatten is FALSE it can be a multidimensional array |
|
1074 | + * where keys are always subsection names and values are either |
|
1075 | + * the input's normalized value, or an array like the top-level array |
|
1076 | + * @throws EE_Error |
|
1077 | + */ |
|
1078 | + public function input_values($include_subform_inputs = false, $flatten = false) |
|
1079 | + { |
|
1080 | + return $this->_input_values(false, $include_subform_inputs, $flatten); |
|
1081 | + } |
|
1082 | + |
|
1083 | + |
|
1084 | + /** |
|
1085 | + * Similar to EE_Form_Section_Proper::input_values(), except this returns the 'display_value' |
|
1086 | + * of each input. On some inputs (especially radio boxes or checkboxes), the value stored |
|
1087 | + * is not necessarily the value we want to display to users. This creates an array |
|
1088 | + * where keys are the input names, and values are their display values |
|
1089 | + * |
|
1090 | + * @param boolean $include_subform_inputs Whether to include inputs from subforms, |
|
1091 | + * or just this forms' direct children inputs |
|
1092 | + * @param boolean $flatten Whether to force the results into 1-dimensional array, |
|
1093 | + * or allow multidimensional array |
|
1094 | + * @return array if $flatten is TRUE it will always be a 1-dimensional array |
|
1095 | + * with array keys being input names |
|
1096 | + * (regardless of whether they are from a subsection or not), |
|
1097 | + * and if $flatten is FALSE it can be a multidimensional array |
|
1098 | + * where keys are always subsection names and values are either |
|
1099 | + * the input's normalized value, or an array like the top-level array |
|
1100 | + * @throws EE_Error |
|
1101 | + */ |
|
1102 | + public function input_pretty_values($include_subform_inputs = false, $flatten = false) |
|
1103 | + { |
|
1104 | + return $this->_input_values(true, $include_subform_inputs, $flatten); |
|
1105 | + } |
|
1106 | + |
|
1107 | + |
|
1108 | + /** |
|
1109 | + * Gets the input values from the form |
|
1110 | + * |
|
1111 | + * @param boolean $pretty Whether to retrieve the pretty value, |
|
1112 | + * or just the normalized value |
|
1113 | + * @param boolean $include_subform_inputs Whether to include inputs from subforms, |
|
1114 | + * or just this forms' direct children inputs |
|
1115 | + * @param boolean $flatten Whether to force the results into 1-dimensional array, |
|
1116 | + * or allow multidimensional array |
|
1117 | + * @return array if $flatten is TRUE it will always be a 1-dimensional array with array keys being |
|
1118 | + * input names (regardless of whether they are from a subsection or not), |
|
1119 | + * and if $flatten is FALSE it can be a multidimensional array |
|
1120 | + * where keys are always subsection names and values are either |
|
1121 | + * the input's normalized value, or an array like the top-level array |
|
1122 | + * @throws EE_Error |
|
1123 | + */ |
|
1124 | + public function _input_values($pretty = false, $include_subform_inputs = false, $flatten = false) |
|
1125 | + { |
|
1126 | + $input_values = array(); |
|
1127 | + foreach ($this->subsections() as $subsection_name => $subsection) { |
|
1128 | + if ($subsection instanceof EE_Form_Input_Base) { |
|
1129 | + $input_values[ $subsection_name ] = $pretty |
|
1130 | + ? $subsection->pretty_value() |
|
1131 | + : $subsection->normalized_value(); |
|
1132 | + } elseif ($subsection instanceof EE_Form_Section_Proper && $include_subform_inputs) { |
|
1133 | + $subform_input_values = $subsection->_input_values( |
|
1134 | + $pretty, |
|
1135 | + $include_subform_inputs, |
|
1136 | + $flatten |
|
1137 | + ); |
|
1138 | + if ($flatten) { |
|
1139 | + $input_values = array_merge($input_values, $subform_input_values); |
|
1140 | + } else { |
|
1141 | + $input_values[ $subsection_name ] = $subform_input_values; |
|
1142 | + } |
|
1143 | + } |
|
1144 | + } |
|
1145 | + return $input_values; |
|
1146 | + } |
|
1147 | + |
|
1148 | + |
|
1149 | + /** |
|
1150 | + * Gets the originally submitted input values from the form |
|
1151 | + * |
|
1152 | + * @param boolean $include_subforms Whether to include inputs from subforms, |
|
1153 | + * or just this forms' direct children inputs |
|
1154 | + * @return array if $flatten is TRUE it will always be a 1-dimensional array |
|
1155 | + * with array keys being input names |
|
1156 | + * (regardless of whether they are from a subsection or not), |
|
1157 | + * and if $flatten is FALSE it can be a multidimensional array |
|
1158 | + * where keys are always subsection names and values are either |
|
1159 | + * the input's normalized value, or an array like the top-level array |
|
1160 | + * @throws EE_Error |
|
1161 | + */ |
|
1162 | + public function submitted_values($include_subforms = false) |
|
1163 | + { |
|
1164 | + $submitted_values = array(); |
|
1165 | + foreach ($this->subsections() as $subsection) { |
|
1166 | + if ($subsection instanceof EE_Form_Input_Base) { |
|
1167 | + // is this input part of an array of inputs? |
|
1168 | + if (strpos($subsection->html_name(), '[') !== false) { |
|
1169 | + $full_input_name = EEH_Array::convert_array_values_to_keys( |
|
1170 | + explode( |
|
1171 | + '[', |
|
1172 | + str_replace(']', '', $subsection->html_name()) |
|
1173 | + ), |
|
1174 | + $subsection->raw_value() |
|
1175 | + ); |
|
1176 | + $submitted_values = array_replace_recursive($submitted_values, $full_input_name); |
|
1177 | + } else { |
|
1178 | + $submitted_values[ $subsection->html_name() ] = $subsection->raw_value(); |
|
1179 | + } |
|
1180 | + } elseif ($subsection instanceof EE_Form_Section_Proper && $include_subforms) { |
|
1181 | + $subform_input_values = $subsection->submitted_values($include_subforms); |
|
1182 | + $submitted_values = array_replace_recursive($submitted_values, $subform_input_values); |
|
1183 | + } |
|
1184 | + } |
|
1185 | + return $submitted_values; |
|
1186 | + } |
|
1187 | + |
|
1188 | + |
|
1189 | + /** |
|
1190 | + * Indicates whether or not this form has received a submission yet |
|
1191 | + * (ie, had receive_form_submission called on it yet) |
|
1192 | + * |
|
1193 | + * @return boolean |
|
1194 | + * @throws EE_Error |
|
1195 | + */ |
|
1196 | + public function has_received_submission() |
|
1197 | + { |
|
1198 | + $this->ensure_construct_finalized_called(); |
|
1199 | + return $this->_received_submission; |
|
1200 | + } |
|
1201 | + |
|
1202 | + |
|
1203 | + /** |
|
1204 | + * Equivalent to passing 'exclude' in the constructor's options array. |
|
1205 | + * Removes the listed inputs from the form |
|
1206 | + * |
|
1207 | + * @param array $inputs_to_exclude values are the input names |
|
1208 | + * @return void |
|
1209 | + */ |
|
1210 | + public function exclude(array $inputs_to_exclude = array()) |
|
1211 | + { |
|
1212 | + foreach ($inputs_to_exclude as $input_to_exclude_name) { |
|
1213 | + unset($this->_subsections[ $input_to_exclude_name ]); |
|
1214 | + } |
|
1215 | + } |
|
1216 | + |
|
1217 | + |
|
1218 | + /** |
|
1219 | + * Changes these inputs' display strategy to be EE_Hidden_Display_Strategy. |
|
1220 | + * @param array $inputs_to_hide |
|
1221 | + * @throws EE_Error |
|
1222 | + */ |
|
1223 | + public function hide(array $inputs_to_hide = array()) |
|
1224 | + { |
|
1225 | + foreach ($inputs_to_hide as $input_to_hide) { |
|
1226 | + $input = $this->get_input($input_to_hide); |
|
1227 | + $input->set_display_strategy(new EE_Hidden_Display_Strategy()); |
|
1228 | + } |
|
1229 | + } |
|
1230 | + |
|
1231 | + |
|
1232 | + /** |
|
1233 | + * add_subsections |
|
1234 | + * Adds the listed subsections to the form section. |
|
1235 | + * If $subsection_name_to_target is provided, |
|
1236 | + * then new subsections are added before or after that subsection, |
|
1237 | + * otherwise to the start or end of the entire subsections array. |
|
1238 | + * |
|
1239 | + * @param EE_Form_Section_Base[] $new_subsections array of new form subsections |
|
1240 | + * where keys are their names |
|
1241 | + * @param string $subsection_name_to_target an existing for section that $new_subsections |
|
1242 | + * should be added before or after |
|
1243 | + * IF $subsection_name_to_target is null, |
|
1244 | + * then $new_subsections will be added to |
|
1245 | + * the beginning or end of the entire subsections array |
|
1246 | + * @param boolean $add_before whether to add $new_subsections, before or after |
|
1247 | + * $subsection_name_to_target, |
|
1248 | + * or if $subsection_name_to_target is null, |
|
1249 | + * before or after entire subsections array |
|
1250 | + * @return void |
|
1251 | + * @throws EE_Error |
|
1252 | + */ |
|
1253 | + public function add_subsections($new_subsections, $subsection_name_to_target = null, $add_before = true) |
|
1254 | + { |
|
1255 | + foreach ($new_subsections as $subsection_name => $subsection) { |
|
1256 | + if (! $subsection instanceof EE_Form_Section_Base) { |
|
1257 | + EE_Error::add_error( |
|
1258 | + sprintf( |
|
1259 | + esc_html__( |
|
1260 | + "Trying to add a %s as a subsection (it was named '%s') to the form section '%s'. It was removed.", |
|
1261 | + 'event_espresso' |
|
1262 | + ), |
|
1263 | + get_class($subsection), |
|
1264 | + $subsection_name, |
|
1265 | + $this->name() |
|
1266 | + ) |
|
1267 | + ); |
|
1268 | + unset($new_subsections[ $subsection_name ]); |
|
1269 | + } |
|
1270 | + } |
|
1271 | + $this->_subsections = EEH_Array::insert_into_array( |
|
1272 | + $this->_subsections, |
|
1273 | + $new_subsections, |
|
1274 | + $subsection_name_to_target, |
|
1275 | + $add_before |
|
1276 | + ); |
|
1277 | + if ($this->_construction_finalized) { |
|
1278 | + foreach ($this->_subsections as $name => $subsection) { |
|
1279 | + $subsection->_construct_finalize($this, $name); |
|
1280 | + } |
|
1281 | + } |
|
1282 | + } |
|
1283 | + |
|
1284 | + |
|
1285 | + /** |
|
1286 | + * @param string $subsection_name |
|
1287 | + * @param bool $recursive |
|
1288 | + * @return bool |
|
1289 | + */ |
|
1290 | + public function has_subsection($subsection_name, $recursive = false) |
|
1291 | + { |
|
1292 | + foreach ($this->_subsections as $name => $subsection) { |
|
1293 | + if ( |
|
1294 | + $name === $subsection_name |
|
1295 | + || ( |
|
1296 | + $recursive |
|
1297 | + && $subsection instanceof EE_Form_Section_Proper |
|
1298 | + && $subsection->has_subsection($subsection_name, $recursive) |
|
1299 | + ) |
|
1300 | + ) { |
|
1301 | + return true; |
|
1302 | + } |
|
1303 | + } |
|
1304 | + return false; |
|
1305 | + } |
|
1306 | + |
|
1307 | + |
|
1308 | + |
|
1309 | + /** |
|
1310 | + * Just gets all validatable subsections to clean their sensitive data |
|
1311 | + * |
|
1312 | + * @throws EE_Error |
|
1313 | + */ |
|
1314 | + public function clean_sensitive_data() |
|
1315 | + { |
|
1316 | + foreach ($this->get_validatable_subsections() as $subsection) { |
|
1317 | + $subsection->clean_sensitive_data(); |
|
1318 | + } |
|
1319 | + } |
|
1320 | + |
|
1321 | + |
|
1322 | + /** |
|
1323 | + * Sets the submission error message (aka validation error message for this form section and all sub-sections) |
|
1324 | + * @param string $form_submission_error_message |
|
1325 | + * @param EE_Form_Section_Validatable $form_section unused |
|
1326 | + * @throws EE_Error |
|
1327 | + */ |
|
1328 | + public function set_submission_error_message( |
|
1329 | + $form_submission_error_message = '' |
|
1330 | + ) { |
|
1331 | + $this->_form_submission_error_message = ! empty($form_submission_error_message) |
|
1332 | + ? $form_submission_error_message |
|
1333 | + : $this->getAllValidationErrorsString(); |
|
1334 | + } |
|
1335 | + |
|
1336 | + |
|
1337 | + /** |
|
1338 | + * Returns the cached error message. A default value is set for this during _validate(), |
|
1339 | + * (called during receive_form_submission) but it can be explicitly set using |
|
1340 | + * set_submission_error_message |
|
1341 | + * |
|
1342 | + * @return string |
|
1343 | + */ |
|
1344 | + public function submission_error_message() |
|
1345 | + { |
|
1346 | + return $this->_form_submission_error_message; |
|
1347 | + } |
|
1348 | + |
|
1349 | + |
|
1350 | + /** |
|
1351 | + * Sets a message to display if the data submitted to the form was valid. |
|
1352 | + * @param string $form_submission_success_message |
|
1353 | + */ |
|
1354 | + public function set_submission_success_message($form_submission_success_message = '') |
|
1355 | + { |
|
1356 | + $this->_form_submission_success_message = ! empty($form_submission_success_message) |
|
1357 | + ? $form_submission_success_message |
|
1358 | + : esc_html__('Form submitted successfully', 'event_espresso'); |
|
1359 | + } |
|
1360 | + |
|
1361 | + |
|
1362 | + /** |
|
1363 | + * Gets a message appropriate for display when the form is correctly submitted |
|
1364 | + * @return string |
|
1365 | + */ |
|
1366 | + public function submission_success_message() |
|
1367 | + { |
|
1368 | + return $this->_form_submission_success_message; |
|
1369 | + } |
|
1370 | + |
|
1371 | + |
|
1372 | + /** |
|
1373 | + * Returns the prefix that should be used on child of this form section for |
|
1374 | + * their html names. If this form section itself has a parent, prepends ITS |
|
1375 | + * prefix onto this form section's prefix. Used primarily by |
|
1376 | + * EE_Form_Input_Base::_set_default_html_name_if_empty |
|
1377 | + * |
|
1378 | + * @return string |
|
1379 | + * @throws EE_Error |
|
1380 | + */ |
|
1381 | + public function html_name_prefix() |
|
1382 | + { |
|
1383 | + if ($this->parent_section() instanceof EE_Form_Section_Proper) { |
|
1384 | + return $this->parent_section()->html_name_prefix() . '[' . $this->name() . ']'; |
|
1385 | + } |
|
1386 | + return $this->name(); |
|
1387 | + } |
|
1388 | + |
|
1389 | + |
|
1390 | + /** |
|
1391 | + * Gets the name, but first checks _construct_finalize has been called. If not, |
|
1392 | + * calls it (assumes there is no parent and that we want the name to be whatever |
|
1393 | + * was set, which is probably nothing, or the classname) |
|
1394 | + * |
|
1395 | + * @return string |
|
1396 | + * @throws EE_Error |
|
1397 | + */ |
|
1398 | + public function name() |
|
1399 | + { |
|
1400 | + $this->ensure_construct_finalized_called(); |
|
1401 | + return parent::name(); |
|
1402 | + } |
|
1403 | + |
|
1404 | + |
|
1405 | + /** |
|
1406 | + * @return EE_Form_Section_Proper |
|
1407 | + * @throws EE_Error |
|
1408 | + */ |
|
1409 | + public function parent_section() |
|
1410 | + { |
|
1411 | + $this->ensure_construct_finalized_called(); |
|
1412 | + return parent::parent_section(); |
|
1413 | + } |
|
1414 | + |
|
1415 | + |
|
1416 | + /** |
|
1417 | + * make sure construction finalized was called, otherwise children might not be ready |
|
1418 | + * |
|
1419 | + * @return void |
|
1420 | + * @throws EE_Error |
|
1421 | + */ |
|
1422 | + public function ensure_construct_finalized_called() |
|
1423 | + { |
|
1424 | + if (! $this->_construction_finalized) { |
|
1425 | + $this->_construct_finalize($this->_parent_section, $this->_name); |
|
1426 | + } |
|
1427 | + } |
|
1428 | + |
|
1429 | + |
|
1430 | + /** |
|
1431 | + * Checks if any of this form section's inputs, or any of its children's inputs, |
|
1432 | + * are in teh form data. If any are found, returns true. Else false |
|
1433 | + * |
|
1434 | + * @param array $req_data |
|
1435 | + * @return boolean |
|
1436 | + * @throws EE_Error |
|
1437 | + */ |
|
1438 | + public function form_data_present_in($req_data = null) |
|
1439 | + { |
|
1440 | + $req_data = $this->getCachedRequest($req_data); |
|
1441 | + foreach ($this->subsections() as $subsection) { |
|
1442 | + if ($subsection instanceof EE_Form_Input_Base) { |
|
1443 | + if ($subsection->form_data_present_in($req_data)) { |
|
1444 | + return true; |
|
1445 | + } |
|
1446 | + } elseif ($subsection instanceof EE_Form_Section_Proper) { |
|
1447 | + if ($subsection->form_data_present_in($req_data)) { |
|
1448 | + return true; |
|
1449 | + } |
|
1450 | + } |
|
1451 | + } |
|
1452 | + return false; |
|
1453 | + } |
|
1454 | + |
|
1455 | + |
|
1456 | + /** |
|
1457 | + * Gets validation errors for this form section and subsections |
|
1458 | + * Similar to EE_Form_Section_Validatable::get_validation_errors() except this |
|
1459 | + * gets the validation errors for ALL subsection |
|
1460 | + * |
|
1461 | + * @return EE_Validation_Error[] |
|
1462 | + * @throws EE_Error |
|
1463 | + */ |
|
1464 | + public function get_validation_errors_accumulated() |
|
1465 | + { |
|
1466 | + $validation_errors = $this->get_validation_errors(); |
|
1467 | + foreach ($this->get_validatable_subsections() as $subsection) { |
|
1468 | + if ($subsection instanceof EE_Form_Section_Proper) { |
|
1469 | + $validation_errors_on_this_subsection = $subsection->get_validation_errors_accumulated(); |
|
1470 | + } else { |
|
1471 | + $validation_errors_on_this_subsection = $subsection->get_validation_errors(); |
|
1472 | + } |
|
1473 | + if ($validation_errors_on_this_subsection) { |
|
1474 | + $validation_errors = array_merge($validation_errors, $validation_errors_on_this_subsection); |
|
1475 | + } |
|
1476 | + } |
|
1477 | + return $validation_errors; |
|
1478 | + } |
|
1479 | + |
|
1480 | + /** |
|
1481 | + * Fetch validation errors from children and grandchildren and puts them in a single string. |
|
1482 | + * This traverses the form section tree to generate this, but you probably want to instead use |
|
1483 | + * get_form_submission_error_message() which is usually this message cached (or a custom validation error message) |
|
1484 | + * |
|
1485 | + * @return string |
|
1486 | + * @since 4.9.59.p |
|
1487 | + */ |
|
1488 | + protected function getAllValidationErrorsString() |
|
1489 | + { |
|
1490 | + $submission_error_messages = array(); |
|
1491 | + // bad, bad, bad registrant |
|
1492 | + foreach ($this->get_validation_errors_accumulated() as $validation_error) { |
|
1493 | + if ($validation_error instanceof EE_Validation_Error) { |
|
1494 | + $form_section = $validation_error->get_form_section(); |
|
1495 | + if ($form_section instanceof EE_Form_Input_Base) { |
|
1496 | + $label = $validation_error->get_form_section()->html_label_text(); |
|
1497 | + } elseif ($form_section instanceof EE_Form_Section_Validatable) { |
|
1498 | + $label = $validation_error->get_form_section()->name(); |
|
1499 | + } else { |
|
1500 | + $label = esc_html__('Unknown', 'event_espresso'); |
|
1501 | + } |
|
1502 | + $submission_error_messages[] = sprintf( |
|
1503 | + esc_html__('%s : %s', 'event_espresso'), |
|
1504 | + $label, |
|
1505 | + $validation_error->getMessage() |
|
1506 | + ); |
|
1507 | + } |
|
1508 | + } |
|
1509 | + return implode('<br>', $submission_error_messages); |
|
1510 | + } |
|
1511 | + |
|
1512 | + |
|
1513 | + /** |
|
1514 | + * This isn't just the name of an input, it's a path pointing to an input. The |
|
1515 | + * path is similar to a folder path: slash (/) means to descend into a subsection, |
|
1516 | + * dot-dot-slash (../) means to ascend into the parent section. |
|
1517 | + * After a series of slashes and dot-dot-slashes, there should be the name of an input, |
|
1518 | + * which will be returned. |
|
1519 | + * Eg, if you want the related input to be conditional on a sibling input name 'foobar' |
|
1520 | + * just use 'foobar'. If you want it to be conditional on an aunt/uncle input name |
|
1521 | + * 'baz', use '../baz'. If you want it to be conditional on a cousin input, |
|
1522 | + * the child of 'baz_section' named 'baz_child', use '../baz_section/baz_child'. |
|
1523 | + * Etc |
|
1524 | + * |
|
1525 | + * @param string|false $form_section_path we accept false also because substr( '../', '../' ) = false |
|
1526 | + * @return EE_Form_Section_Base |
|
1527 | + * @throws EE_Error |
|
1528 | + */ |
|
1529 | + public function find_section_from_path($form_section_path) |
|
1530 | + { |
|
1531 | + // check if we can find the input from purely going straight up the tree |
|
1532 | + $input = parent::find_section_from_path($form_section_path); |
|
1533 | + if ($input instanceof EE_Form_Section_Base) { |
|
1534 | + return $input; |
|
1535 | + } |
|
1536 | + $next_slash_pos = strpos($form_section_path, '/'); |
|
1537 | + if ($next_slash_pos !== false) { |
|
1538 | + $child_section_name = substr($form_section_path, 0, $next_slash_pos); |
|
1539 | + $subpath = substr($form_section_path, $next_slash_pos + 1); |
|
1540 | + } else { |
|
1541 | + $child_section_name = $form_section_path; |
|
1542 | + $subpath = ''; |
|
1543 | + } |
|
1544 | + $child_section = $this->get_subsection($child_section_name); |
|
1545 | + if ($child_section instanceof EE_Form_Section_Base) { |
|
1546 | + return $child_section->find_section_from_path($subpath); |
|
1547 | + } |
|
1548 | + return null; |
|
1549 | + } |
|
1550 | 1550 | } |
@@ -162,7 +162,7 @@ discard block |
||
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 |
||
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 | } |
@@ -28,173 +28,173 @@ |
||
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 | } |
@@ -170,7 +170,7 @@ discard block |
||
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 |
||
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 | } |
@@ -28,178 +28,178 @@ |
||
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 | } |
@@ -16,314 +16,314 @@ |
||
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 | } |
@@ -148,7 +148,7 @@ discard block |
||
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 |
||
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 |
||
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); |
@@ -14,12 +14,12 @@ discard block |
||
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 |
||
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 |
||
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 |
||
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 |
||
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 |
||
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 |
||
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), |
@@ -10,9 +10,9 @@ discard block |
||
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 |
||
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 |
||
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 |
||
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 |
||
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 |
||
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 |
||
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 |
||
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 |
||
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 |
||
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 |
||
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 |
||
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 |
||
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 |
||
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 |
||
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 |
||
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 |
||
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 |
||
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 |
||
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 |
||
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 |
||
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 |
||
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 |
||
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 |
||
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 |
||
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 | } |
@@ -9,13 +9,13 @@ discard block |
||
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 |
||
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 |
||
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 |
||
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 |
||
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 |
||
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 |
||
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 |
||
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 |
||
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 |
||
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 |
||
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 |
||
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 |
||
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 |
||
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 |
||
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 |
||
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 |
||
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 |
||
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 |
||
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 |
||
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 |
||
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 |
||
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 |
||
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 |
||
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 |
||
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 |
||
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 |
||
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 |
||
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 |
||
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 |
||
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 |
||
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 | } |
@@ -10,11 +10,11 @@ discard block |
||
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 |
||
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 |
||
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 |
||
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 |
||
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 |
||
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 |
||
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 |
||
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 |
||
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 |
||
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 |
||
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 |
||
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 |
||
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 |
||
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 |
||
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 |
||
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 |
||
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 |
||
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 |
||
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 |
||
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' => '$', |
|
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' => '$', |
|
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 | } |
@@ -11,13 +11,13 @@ discard block |
||
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 |
||
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 |
||
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 |
||
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 |
||
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 ) |
@@ -10,11 +10,11 @@ discard block |
||
10 | 10 | $stages = glob(EE_CORE . 'data_migration_scripts/4_3_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_3_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_3_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_3_0__autoloaded_stages', $class_to_filepath); |
@@ -30,56 +30,56 @@ discard block |
||
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 |
||
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 |
||
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 |
||
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 |
||
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 |
||
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 |
||
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 |
||
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 |
||
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 |
||
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 |
||
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 |
||
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 |
||
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 |
||
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 |
||
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 |
||
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 |
||
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 | } |