Completed
Branch fix-dummy-related-question-qst... (e5efcf)
by
unknown
07:49 queued 03:45
created
core/services/container/OpenCoffeeShop.php 2 patches
Spacing   +8 added lines, -8 removed lines patch added patch discarded remove patch
@@ -129,8 +129,8 @@  discard block
 block discarded – undo
129 129
                 array(),
130 130
                 CoffeeMaker::BREW_LOAD_ONLY,
131 131
                 array(
132
-                    EE_INTERFACES . '*.php',
133
-                    EE_INTERFACES . '*.interfaces.php',
132
+                    EE_INTERFACES.'*.php',
133
+                    EE_INTERFACES.'*.interfaces.php',
134 134
                 )
135 135
             )
136 136
         );
@@ -142,7 +142,7 @@  discard block
 block discarded – undo
142 142
                 array(),
143 143
                 array(),
144 144
                 CoffeeMaker::BREW_SHARED,
145
-                EE_MODELS . '*.model.php'
145
+                EE_MODELS.'*.model.php'
146 146
             )
147 147
         );
148 148
         // add a wildcard recipe for loading core classes
@@ -154,10 +154,10 @@  discard block
 block discarded – undo
154 154
                 array(),
155 155
                 CoffeeMaker::BREW_SHARED,
156 156
                 array(
157
-                    EE_CORE . '*.core.php',
158
-                    EE_ADMIN . '*.core.php',
159
-                    EE_CPTS . '*.core.php',
160
-                    EE_CORE . 'data_migration_scripts/*.core.php',
157
+                    EE_CORE.'*.core.php',
158
+                    EE_ADMIN.'*.core.php',
159
+                    EE_CPTS.'*.core.php',
160
+                    EE_CORE.'data_migration_scripts/*.core.php',
161 161
                 )
162 162
             )
163 163
         );
@@ -169,7 +169,7 @@  discard block
 block discarded – undo
169 169
                 array(),
170 170
                 array(),
171 171
                 CoffeeMaker::BREW_LOAD_ONLY,
172
-                array(EE_ADMIN . '*.core.php')
172
+                array(EE_ADMIN.'*.core.php')
173 173
             )
174 174
         );
175 175
         // add a wildcard recipe for loading core classes
Please login to merge, or discard this patch.
Indentation   +178 added lines, -178 removed lines patch added patch discarded remove patch
@@ -19,192 +19,192 @@
 block discarded – undo
19 19
  */
20 20
 class OpenCoffeeShop
21 21
 {
22
-    /**
23
-     * @var CoffeeShop $CoffeeShop
24
-     */
25
-    private $CoffeeShop;
22
+	/**
23
+	 * @var CoffeeShop $CoffeeShop
24
+	 */
25
+	private $CoffeeShop;
26 26
 
27 27
 
28
-    /**
29
-     * OpenCoffeeShop constructor
30
-     *
31
-     * @throws InvalidInterfaceException
32
-     */
33
-    public function __construct()
34
-    {
35
-        // instantiate the DI container
36
-        $this->CoffeeShop = new CoffeeShop();
37
-    }
28
+	/**
29
+	 * OpenCoffeeShop constructor
30
+	 *
31
+	 * @throws InvalidInterfaceException
32
+	 */
33
+	public function __construct()
34
+	{
35
+		// instantiate the DI container
36
+		$this->CoffeeShop = new CoffeeShop();
37
+	}
38 38
 
39 39
 
40
-    // phpcs:disable PSR1.Methods.CamelCapsMethodName.NotCamelCaps
41
-    /**
42
-     * @return CoffeeShop
43
-     */
44
-    public function CoffeeShop()
45
-    {
46
-        return $this->CoffeeShop;
47
-    }
40
+	// phpcs:disable PSR1.Methods.CamelCapsMethodName.NotCamelCaps
41
+	/**
42
+	 * @return CoffeeShop
43
+	 */
44
+	public function CoffeeShop()
45
+	{
46
+		return $this->CoffeeShop;
47
+	}
48 48
 
49 49
 
50
-    /**
51
-     * configure coffee makers which control the different kinds of brews
52
-     * ( shared services, new factory objects, etc )
53
-     *
54
-     * @throws InvalidEntityException
55
-     */
56
-    public function setupCoffeeMakers()
57
-    {
58
-        // create a dependency injector class for resolving class constructor arguments
59
-        $DependencyInjector = new DependencyInjector(
60
-            $this->CoffeeShop,
61
-            new \EEH_Array()
62
-        );
63
-        // and some coffeemakers, one for creating new instances
64
-        $this->CoffeeShop->addCoffeeMaker(
65
-            new NewCoffeeMaker($this->CoffeeShop, $DependencyInjector),
66
-            CoffeeMaker::BREW_NEW
67
-        );
68
-        // one for shared services
69
-        $this->CoffeeShop->addCoffeeMaker(
70
-            new SharedCoffeeMaker($this->CoffeeShop, $DependencyInjector),
71
-            CoffeeMaker::BREW_SHARED
72
-        );
73
-        // and one for classes that only get loaded
74
-        $this->CoffeeShop->addCoffeeMaker(
75
-            new LoadOnlyCoffeeMaker($this->CoffeeShop, $DependencyInjector),
76
-            CoffeeMaker::BREW_LOAD_ONLY
77
-        );
78
-    }
50
+	/**
51
+	 * configure coffee makers which control the different kinds of brews
52
+	 * ( shared services, new factory objects, etc )
53
+	 *
54
+	 * @throws InvalidEntityException
55
+	 */
56
+	public function setupCoffeeMakers()
57
+	{
58
+		// create a dependency injector class for resolving class constructor arguments
59
+		$DependencyInjector = new DependencyInjector(
60
+			$this->CoffeeShop,
61
+			new \EEH_Array()
62
+		);
63
+		// and some coffeemakers, one for creating new instances
64
+		$this->CoffeeShop->addCoffeeMaker(
65
+			new NewCoffeeMaker($this->CoffeeShop, $DependencyInjector),
66
+			CoffeeMaker::BREW_NEW
67
+		);
68
+		// one for shared services
69
+		$this->CoffeeShop->addCoffeeMaker(
70
+			new SharedCoffeeMaker($this->CoffeeShop, $DependencyInjector),
71
+			CoffeeMaker::BREW_SHARED
72
+		);
73
+		// and one for classes that only get loaded
74
+		$this->CoffeeShop->addCoffeeMaker(
75
+			new LoadOnlyCoffeeMaker($this->CoffeeShop, $DependencyInjector),
76
+			CoffeeMaker::BREW_LOAD_ONLY
77
+		);
78
+	}
79 79
 
80 80
 
81
-    /**
82
-     * Recipes define how to load legacy classes
83
-     *
84
-     * @throws InvalidIdentifierException
85
-     */
86
-    public function addRecipes()
87
-    {
88
-        // add default recipe, which should handle loading for most PSR-4 compatible classes
89
-        // as long as they are not type hinting for interfaces
90
-        $this->CoffeeShop->addRecipe(
91
-            new Recipe(
92
-                Recipe::DEFAULT_ID
93
-            )
94
-        );
95
-        // PSR-4 compatible class with aliases
96
-        $this->CoffeeShop->addRecipe(
97
-            new Recipe(
98
-                'CommandHandlerManager',
99
-                'EventEspresso\core\services\commands\CommandHandlerManager',
100
-                array(
101
-                    'CommandHandlerManagerInterface',
102
-                    'EventEspresso\core\services\commands\CommandHandlerManagerInterface',
103
-                ),
104
-                array(),
105
-                CoffeeMaker::BREW_SHARED
106
-            )
107
-        );
108
-        // PSR-4 compatible class with aliases, which dependency on CommandHandlerManager
109
-        $this->CoffeeShop->addRecipe(
110
-            new Recipe(
111
-                'CommandBus',
112
-                'EventEspresso\core\services\commands\CommandBus',
113
-                array(
114
-                    'CommandBusInterface',
115
-                    'EventEspresso\core\services\commands\CommandBusInterface',
116
-                ),
117
-                array(),
118
-                CoffeeMaker::BREW_SHARED
119
-            )
120
-        );
121
-        // LEGACY classes that are NOT compatible with PSR-4 autoloading, and so must specify a filepath
122
-        // add a wildcard recipe for loading legacy core interfaces
123
-        $this->CoffeeShop->addRecipe(
124
-            new Recipe(
125
-                'EEI_*',
126
-                '',
127
-                array(),
128
-                array(),
129
-                CoffeeMaker::BREW_LOAD_ONLY,
130
-                array(
131
-                    EE_INTERFACES . '*.php',
132
-                    EE_INTERFACES . '*.interfaces.php',
133
-                )
134
-            )
135
-        );
136
-        // add a wildcard recipe for loading models
137
-        $this->CoffeeShop->addRecipe(
138
-            new Recipe(
139
-                'EEM_*',
140
-                '',
141
-                array(),
142
-                array(),
143
-                CoffeeMaker::BREW_SHARED,
144
-                EE_MODELS . '*.model.php'
145
-            )
146
-        );
147
-        // add a wildcard recipe for loading core classes
148
-        $this->CoffeeShop->addRecipe(
149
-            new Recipe(
150
-                'EE_*',
151
-                '',
152
-                array(),
153
-                array(),
154
-                CoffeeMaker::BREW_SHARED,
155
-                array(
156
-                    EE_CORE . '*.core.php',
157
-                    EE_ADMIN . '*.core.php',
158
-                    EE_CPTS . '*.core.php',
159
-                    EE_CORE . 'data_migration_scripts/*.core.php',
160
-                )
161
-            )
162
-        );
163
-        // load admin page parent class
164
-        $this->CoffeeShop->addRecipe(
165
-            new Recipe(
166
-                'EE_Admin_Page*',
167
-                '',
168
-                array(),
169
-                array(),
170
-                CoffeeMaker::BREW_LOAD_ONLY,
171
-                array(EE_ADMIN . '*.core.php')
172
-            )
173
-        );
174
-        // add a wildcard recipe for loading core classes
175
-        // $this->CoffeeShop->addRecipe(
176
-        //     new Recipe(
177
-        //         '*_Admin_Page',
178
-        //         '',
179
-        //         array(),
180
-        //         array(),
181
-        //         CoffeeMaker::BREW_SHARED,
182
-        //         array(
183
-        //             EE_ADMIN_PAGES . 'transactions/*.core.php',
184
-        //         )
185
-        //     )
186
-        // );
187
-    }
81
+	/**
82
+	 * Recipes define how to load legacy classes
83
+	 *
84
+	 * @throws InvalidIdentifierException
85
+	 */
86
+	public function addRecipes()
87
+	{
88
+		// add default recipe, which should handle loading for most PSR-4 compatible classes
89
+		// as long as they are not type hinting for interfaces
90
+		$this->CoffeeShop->addRecipe(
91
+			new Recipe(
92
+				Recipe::DEFAULT_ID
93
+			)
94
+		);
95
+		// PSR-4 compatible class with aliases
96
+		$this->CoffeeShop->addRecipe(
97
+			new Recipe(
98
+				'CommandHandlerManager',
99
+				'EventEspresso\core\services\commands\CommandHandlerManager',
100
+				array(
101
+					'CommandHandlerManagerInterface',
102
+					'EventEspresso\core\services\commands\CommandHandlerManagerInterface',
103
+				),
104
+				array(),
105
+				CoffeeMaker::BREW_SHARED
106
+			)
107
+		);
108
+		// PSR-4 compatible class with aliases, which dependency on CommandHandlerManager
109
+		$this->CoffeeShop->addRecipe(
110
+			new Recipe(
111
+				'CommandBus',
112
+				'EventEspresso\core\services\commands\CommandBus',
113
+				array(
114
+					'CommandBusInterface',
115
+					'EventEspresso\core\services\commands\CommandBusInterface',
116
+				),
117
+				array(),
118
+				CoffeeMaker::BREW_SHARED
119
+			)
120
+		);
121
+		// LEGACY classes that are NOT compatible with PSR-4 autoloading, and so must specify a filepath
122
+		// add a wildcard recipe for loading legacy core interfaces
123
+		$this->CoffeeShop->addRecipe(
124
+			new Recipe(
125
+				'EEI_*',
126
+				'',
127
+				array(),
128
+				array(),
129
+				CoffeeMaker::BREW_LOAD_ONLY,
130
+				array(
131
+					EE_INTERFACES . '*.php',
132
+					EE_INTERFACES . '*.interfaces.php',
133
+				)
134
+			)
135
+		);
136
+		// add a wildcard recipe for loading models
137
+		$this->CoffeeShop->addRecipe(
138
+			new Recipe(
139
+				'EEM_*',
140
+				'',
141
+				array(),
142
+				array(),
143
+				CoffeeMaker::BREW_SHARED,
144
+				EE_MODELS . '*.model.php'
145
+			)
146
+		);
147
+		// add a wildcard recipe for loading core classes
148
+		$this->CoffeeShop->addRecipe(
149
+			new Recipe(
150
+				'EE_*',
151
+				'',
152
+				array(),
153
+				array(),
154
+				CoffeeMaker::BREW_SHARED,
155
+				array(
156
+					EE_CORE . '*.core.php',
157
+					EE_ADMIN . '*.core.php',
158
+					EE_CPTS . '*.core.php',
159
+					EE_CORE . 'data_migration_scripts/*.core.php',
160
+				)
161
+			)
162
+		);
163
+		// load admin page parent class
164
+		$this->CoffeeShop->addRecipe(
165
+			new Recipe(
166
+				'EE_Admin_Page*',
167
+				'',
168
+				array(),
169
+				array(),
170
+				CoffeeMaker::BREW_LOAD_ONLY,
171
+				array(EE_ADMIN . '*.core.php')
172
+			)
173
+		);
174
+		// add a wildcard recipe for loading core classes
175
+		// $this->CoffeeShop->addRecipe(
176
+		//     new Recipe(
177
+		//         '*_Admin_Page',
178
+		//         '',
179
+		//         array(),
180
+		//         array(),
181
+		//         CoffeeMaker::BREW_SHARED,
182
+		//         array(
183
+		//             EE_ADMIN_PAGES . 'transactions/*.core.php',
184
+		//         )
185
+		//     )
186
+		// );
187
+	}
188 188
 
189 189
 
190
-    /**
191
-     * bootstrap EE and the request stack
192
-     *
193
-     * @throws ServiceNotFoundException
194
-     * @throws InvalidClassException
195
-     * @throws InvalidDataTypeException
196
-     * @throws InvalidIdentifierException
197
-     * @throws exceptions\ServiceExistsException
198
-     * @throws OutOfBoundsException
199
-     * @throws exceptions\InstantiationException
200
-     */
201
-    public function firstBrew()
202
-    {
203
-        $this->CoffeeShop->brew(
204
-            'EventEspresso\core\services\request\Request',
205
-            array($_GET, $_POST, $_COOKIE, $_SERVER)
206
-        );
207
-        $this->CoffeeShop->brew('EventEspresso\core\services\request\Response');
208
-        $this->CoffeeShop->brew('EE_Bootstrap');
209
-    }
190
+	/**
191
+	 * bootstrap EE and the request stack
192
+	 *
193
+	 * @throws ServiceNotFoundException
194
+	 * @throws InvalidClassException
195
+	 * @throws InvalidDataTypeException
196
+	 * @throws InvalidIdentifierException
197
+	 * @throws exceptions\ServiceExistsException
198
+	 * @throws OutOfBoundsException
199
+	 * @throws exceptions\InstantiationException
200
+	 */
201
+	public function firstBrew()
202
+	{
203
+		$this->CoffeeShop->brew(
204
+			'EventEspresso\core\services\request\Request',
205
+			array($_GET, $_POST, $_COOKIE, $_SERVER)
206
+		);
207
+		$this->CoffeeShop->brew('EventEspresso\core\services\request\Response');
208
+		$this->CoffeeShop->brew('EE_Bootstrap');
209
+	}
210 210
 }
Please login to merge, or discard this patch.
core/services/licensing/LicenseService.php 2 patches
Indentation   +90 added lines, -90 removed lines patch added patch discarded remove patch
@@ -15,94 +15,94 @@
 block discarded – undo
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
 }
Please login to merge, or discard this patch.
Spacing   +4 added lines, -4 removed lines patch added patch discarded remove patch
@@ -36,8 +36,8 @@  discard block
 block discarded – undo
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
 block discarded – undo
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
 block discarded – undo
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
 
Please login to merge, or discard this patch.
display_strategies/number_bubbles/NumberBubblesProgressStepsDisplay.php 2 patches
Spacing   +2 added lines, -2 removed lines patch added patch discarded remove patch
@@ -26,7 +26,7 @@  discard block
 block discarded – undo
26 26
         // core/services/progress_steps/display_strategies/number_bubbles/number_bubbles.css
27 27
         wp_enqueue_style(
28 28
             'ee_progress_steps_display_number_bubbles',
29
-            plugin_dir_url(__FILE__) . 'number_bubbles.css'
29
+            plugin_dir_url(__FILE__).'number_bubbles.css'
30 30
         );
31 31
     }
32 32
 
@@ -39,6 +39,6 @@  discard block
 block discarded – undo
39 39
     public function getTemplate()
40 40
     {
41 41
         // return plugin_dir_path( __FILE__ ) . 'number_bubbles.template.php';
42
-        return __DIR__ . '/number_bubbles.template.php';
42
+        return __DIR__.'/number_bubbles.template.php';
43 43
     }
44 44
 }
Please login to merge, or discard this patch.
Indentation   +23 added lines, -23 removed lines patch added patch discarded remove patch
@@ -14,29 +14,29 @@
 block discarded – undo
14 14
  */
15 15
 class NumberBubblesProgressStepsDisplay implements ProgressStepsDisplayInterface
16 16
 {
17
-    /**
18
-     * used for setting up css and js required for the display strategy
19
-     *
20
-     * @return void
21
-     */
22
-    public function enqueueStylesAndScripts()
23
-    {
24
-        // core/services/progress_steps/display_strategies/number_bubbles/number_bubbles.css
25
-        wp_enqueue_style(
26
-            'ee_progress_steps_display_number_bubbles',
27
-            plugin_dir_url(__FILE__) . 'number_bubbles.css'
28
-        );
29
-    }
17
+	/**
18
+	 * used for setting up css and js required for the display strategy
19
+	 *
20
+	 * @return void
21
+	 */
22
+	public function enqueueStylesAndScripts()
23
+	{
24
+		// core/services/progress_steps/display_strategies/number_bubbles/number_bubbles.css
25
+		wp_enqueue_style(
26
+			'ee_progress_steps_display_number_bubbles',
27
+			plugin_dir_url(__FILE__) . 'number_bubbles.css'
28
+		);
29
+	}
30 30
 
31 31
 
32
-    /**
33
-     * loads and returns a full server path to the template used for the display strategy
34
-     *
35
-     * @return string
36
-     */
37
-    public function getTemplate()
38
-    {
39
-        // return plugin_dir_path( __FILE__ ) . 'number_bubbles.template.php';
40
-        return __DIR__ . '/number_bubbles.template.php';
41
-    }
32
+	/**
33
+	 * loads and returns a full server path to the template used for the display strategy
34
+	 *
35
+	 * @return string
36
+	 */
37
+	public function getTemplate()
38
+	{
39
+		// return plugin_dir_path( __FILE__ ) . 'number_bubbles.template.php';
40
+		return __DIR__ . '/number_bubbles.template.php';
41
+	}
42 42
 }
Please login to merge, or discard this patch.
core/libraries/form_sections/base/EE_Form_Section_Proper.form.php 2 patches
Spacing   +38 added lines, -38 removed lines patch added patch discarded remove patch
@@ -111,8 +111,8 @@  discard block
 block discarded – undo
111 111
             // AND we are going to make sure they're in that specified order
112 112
             $reordered_subsections = array();
113 113
             foreach ($options_array['include'] as $input_name) {
114
-                if (isset($this->_subsections[ $input_name ])) {
115
-                    $reordered_subsections[ $input_name ] = $this->_subsections[ $input_name ];
114
+                if (isset($this->_subsections[$input_name])) {
115
+                    $reordered_subsections[$input_name] = $this->_subsections[$input_name];
116 116
                 }
117 117
             }
118 118
             $this->_subsections = $reordered_subsections;
@@ -124,7 +124,7 @@  discard block
 block discarded – undo
124 124
         if (isset($options_array['layout_strategy'])) {
125 125
             $this->_layout_strategy = $options_array['layout_strategy'];
126 126
         }
127
-        if (! $this->_layout_strategy) {
127
+        if ( ! $this->_layout_strategy) {
128 128
             $this->_layout_strategy = is_admin() ? new EE_Admin_Two_Column_Layout() : new EE_Two_Column_Layout();
129 129
         }
130 130
         $this->_layout_strategy->_construct_finalize($this);
@@ -313,7 +313,7 @@  discard block
 block discarded – undo
313 313
         if ($validate) {
314 314
             $this->_validate();
315 315
             // if it's invalid, we're going to want to re-display so remember what they submitted
316
-            if (! $this->is_valid()) {
316
+            if ( ! $this->is_valid()) {
317 317
                 $this->store_submitted_form_data_in_session();
318 318
             }
319 319
         }
@@ -426,11 +426,11 @@  discard block
 block discarded – undo
426 426
     public function populate_defaults($default_data)
427 427
     {
428 428
         foreach ($this->subsections(false) as $subsection_name => $subsection) {
429
-            if (isset($default_data[ $subsection_name ])) {
429
+            if (isset($default_data[$subsection_name])) {
430 430
                 if ($subsection instanceof EE_Form_Input_Base) {
431
-                    $subsection->set_default($default_data[ $subsection_name ]);
431
+                    $subsection->set_default($default_data[$subsection_name]);
432 432
                 } elseif ($subsection instanceof EE_Form_Section_Proper) {
433
-                    $subsection->populate_defaults($default_data[ $subsection_name ]);
433
+                    $subsection->populate_defaults($default_data[$subsection_name]);
434 434
                 }
435 435
             }
436 436
         }
@@ -445,7 +445,7 @@  discard block
 block discarded – undo
445 445
      */
446 446
     public function subsection_exists($name)
447 447
     {
448
-        return isset($this->_subsections[ $name ]) ? true : false;
448
+        return isset($this->_subsections[$name]) ? true : false;
449 449
     }
450 450
 
451 451
 
@@ -467,7 +467,7 @@  discard block
 block discarded – undo
467 467
         if ($require_construction_to_be_finalized) {
468 468
             $this->ensure_construct_finalized_called();
469 469
         }
470
-        return $this->subsection_exists($name) ? $this->_subsections[ $name ] : null;
470
+        return $this->subsection_exists($name) ? $this->_subsections[$name] : null;
471 471
     }
472 472
 
473 473
 
@@ -482,7 +482,7 @@  discard block
 block discarded – undo
482 482
         $validatable_subsections = array();
483 483
         foreach ($this->subsections() as $name => $obj) {
484 484
             if ($obj instanceof EE_Form_Section_Validatable) {
485
-                $validatable_subsections[ $name ] = $obj;
485
+                $validatable_subsections[$name] = $obj;
486 486
             }
487 487
         }
488 488
         return $validatable_subsections;
@@ -509,7 +509,7 @@  discard block
 block discarded – undo
509 509
             $name,
510 510
             $require_construction_to_be_finalized
511 511
         );
512
-        if (! $subsection instanceof EE_Form_Input_Base) {
512
+        if ( ! $subsection instanceof EE_Form_Input_Base) {
513 513
             throw new EE_Error(
514 514
                 sprintf(
515 515
                     esc_html__(
@@ -546,7 +546,7 @@  discard block
 block discarded – undo
546 546
             $name,
547 547
             $require_construction_to_be_finalized
548 548
         );
549
-        if (! $subsection instanceof EE_Form_Section_Proper) {
549
+        if ( ! $subsection instanceof EE_Form_Section_Proper) {
550 550
             throw new EE_Error(
551 551
                 sprintf(
552 552
                     esc_html__(
@@ -586,7 +586,7 @@  discard block
 block discarded – undo
586 586
     public function is_valid()
587 587
     {
588 588
         if ($this->is_valid === null) {
589
-            if (! $this->has_received_submission()) {
589
+            if ( ! $this->has_received_submission()) {
590 590
                 throw new EE_Error(
591 591
                     sprintf(
592 592
                         esc_html__(
@@ -596,14 +596,14 @@  discard block
 block discarded – undo
596 596
                     )
597 597
                 );
598 598
             }
599
-            if (! parent::is_valid()) {
599
+            if ( ! parent::is_valid()) {
600 600
                 $this->is_valid = false;
601 601
             } else {
602 602
                 // ok so no general errors to this entire form section.
603 603
                 // so let's check the subsections, but only set errors if that hasn't been done yet
604 604
                 $this->is_valid = true;
605 605
                 foreach ($this->get_validatable_subsections() as $subsection) {
606
-                    if (! $subsection->is_valid()) {
606
+                    if ( ! $subsection->is_valid()) {
607 607
                         $this->is_valid = false;
608 608
                     }
609 609
                 }
@@ -620,7 +620,7 @@  discard block
 block discarded – undo
620 620
      */
621 621
     protected function _set_default_name_if_empty()
622 622
     {
623
-        if (! $this->_name) {
623
+        if ( ! $this->_name) {
624 624
             $classname    = get_class($this);
625 625
             $default_name = str_replace('EE_', '', $classname);
626 626
             $this->_name  = $default_name;
@@ -710,7 +710,7 @@  discard block
 block discarded – undo
710 710
     {
711 711
         wp_register_script(
712 712
             'ee_form_section_validation',
713
-            EE_GLOBAL_ASSETS_URL . 'scripts' . '/form_section_validation.js',
713
+            EE_GLOBAL_ASSETS_URL.'scripts'.'/form_section_validation.js',
714 714
             array('jquery-validate', 'jquery-ui-datepicker', 'jquery-validate-extra-methods'),
715 715
             EVENT_ESPRESSO_VERSION,
716 716
             true
@@ -754,13 +754,13 @@  discard block
 block discarded – undo
754 754
         // we only want to localize vars ONCE for the entire form,
755 755
         // so if the form section doesn't have a parent, then it must be the top dog
756 756
         if ($return_for_subsection || ! $this->parent_section()) {
757
-            EE_Form_Section_Proper::$_js_localization['form_data'][ $this->html_id() ] = array(
757
+            EE_Form_Section_Proper::$_js_localization['form_data'][$this->html_id()] = array(
758 758
                 'form_section_id'  => $this->html_id(true),
759 759
                 'validation_rules' => $this->get_jquery_validation_rules(),
760 760
                 'other_data'       => $this->get_other_js_data(),
761 761
                 'errors'           => $this->subsection_validation_errors_by_html_name(),
762 762
             );
763
-            EE_Form_Section_Proper::$_scripts_localized                                = true;
763
+            EE_Form_Section_Proper::$_scripts_localized = true;
764 764
         }
765 765
     }
766 766
 
@@ -795,7 +795,7 @@  discard block
 block discarded – undo
795 795
         $inputs = array();
796 796
         foreach ($this->subsections() as $subsection) {
797 797
             if ($subsection instanceof EE_Form_Input_Base) {
798
-                $inputs[ $subsection->html_name() ] = $subsection;
798
+                $inputs[$subsection->html_name()] = $subsection;
799 799
             } elseif ($subsection instanceof EE_Form_Section_Proper) {
800 800
                 $inputs += $subsection->inputs_in_subsections();
801 801
             }
@@ -818,7 +818,7 @@  discard block
 block discarded – undo
818 818
         $errors = array();
819 819
         foreach ($inputs as $form_input) {
820 820
             if ($form_input instanceof EE_Form_Input_Base && $form_input->get_validation_errors()) {
821
-                $errors[ $form_input->html_name() ] = $form_input->get_validation_error_string();
821
+                $errors[$form_input->html_name()] = $form_input->get_validation_error_string();
822 822
             }
823 823
         }
824 824
         return $errors;
@@ -841,7 +841,7 @@  discard block
 block discarded – undo
841 841
         $email_validation_level = isset(EE_Registry::instance()->CFG->registration->email_validation_level)
842 842
             ? EE_Registry::instance()->CFG->registration->email_validation_level
843 843
             : 'wp_default';
844
-        EE_Form_Section_Proper::$_js_localization['email_validation_level']   = $email_validation_level;
844
+        EE_Form_Section_Proper::$_js_localization['email_validation_level'] = $email_validation_level;
845 845
         wp_enqueue_script('ee_form_section_validation');
846 846
         wp_localize_script(
847 847
             'ee_form_section_validation',
@@ -858,7 +858,7 @@  discard block
 block discarded – undo
858 858
      */
859 859
     public function ensure_scripts_localized()
860 860
     {
861
-        if (! EE_Form_Section_Proper::$_scripts_localized) {
861
+        if ( ! EE_Form_Section_Proper::$_scripts_localized) {
862 862
             $this->_enqueue_and_localize_form_js();
863 863
         }
864 864
     }
@@ -954,8 +954,8 @@  discard block
 block discarded – undo
954 954
         // reset the cache of whether this form is valid or not- we're re-validating it now
955 955
         $this->is_valid = null;
956 956
         foreach ($this->get_validatable_subsections() as $subsection_name => $subsection) {
957
-            if (method_exists($this, '_validate_' . $subsection_name)) {
958
-                call_user_func_array(array($this, '_validate_' . $subsection_name), array($subsection));
957
+            if (method_exists($this, '_validate_'.$subsection_name)) {
958
+                call_user_func_array(array($this, '_validate_'.$subsection_name), array($subsection));
959 959
             }
960 960
             $subsection->_validate();
961 961
         }
@@ -973,9 +973,9 @@  discard block
 block discarded – undo
973 973
         $inputs = array();
974 974
         foreach ($this->subsections() as $subsection_name => $subsection) {
975 975
             if ($subsection instanceof EE_Form_Section_Proper) {
976
-                $inputs[ $subsection_name ] = $subsection->valid_data();
976
+                $inputs[$subsection_name] = $subsection->valid_data();
977 977
             } elseif ($subsection instanceof EE_Form_Input_Base) {
978
-                $inputs[ $subsection_name ] = $subsection->normalized_value();
978
+                $inputs[$subsection_name] = $subsection->normalized_value();
979 979
             }
980 980
         }
981 981
         return $inputs;
@@ -993,7 +993,7 @@  discard block
 block discarded – undo
993 993
         $inputs = array();
994 994
         foreach ($this->subsections() as $subsection_name => $subsection) {
995 995
             if ($subsection instanceof EE_Form_Input_Base) {
996
-                $inputs[ $subsection_name ] = $subsection;
996
+                $inputs[$subsection_name] = $subsection;
997 997
             }
998 998
         }
999 999
         return $inputs;
@@ -1011,7 +1011,7 @@  discard block
 block discarded – undo
1011 1011
         $form_sections = array();
1012 1012
         foreach ($this->subsections() as $name => $obj) {
1013 1013
             if ($obj instanceof EE_Form_Section_Proper) {
1014
-                $form_sections[ $name ] = $obj;
1014
+                $form_sections[$name] = $obj;
1015 1015
             }
1016 1016
         }
1017 1017
         return $form_sections;
@@ -1118,7 +1118,7 @@  discard block
 block discarded – undo
1118 1118
         $input_values = array();
1119 1119
         foreach ($this->subsections() as $subsection_name => $subsection) {
1120 1120
             if ($subsection instanceof EE_Form_Input_Base) {
1121
-                $input_values[ $subsection_name ] = $pretty
1121
+                $input_values[$subsection_name] = $pretty
1122 1122
                     ? $subsection->pretty_value()
1123 1123
                     : $subsection->normalized_value();
1124 1124
             } elseif ($subsection instanceof EE_Form_Section_Proper && $include_subform_inputs) {
@@ -1130,7 +1130,7 @@  discard block
 block discarded – undo
1130 1130
                 if ($flatten) {
1131 1131
                     $input_values = array_merge($input_values, $subform_input_values);
1132 1132
                 } else {
1133
-                    $input_values[ $subsection_name ] = $subform_input_values;
1133
+                    $input_values[$subsection_name] = $subform_input_values;
1134 1134
                 }
1135 1135
             }
1136 1136
         }
@@ -1158,7 +1158,7 @@  discard block
 block discarded – undo
1158 1158
             if ($subsection instanceof EE_Form_Input_Base) {
1159 1159
                 // is this input part of an array of inputs?
1160 1160
                 if (strpos($subsection->html_name(), '[') !== false) {
1161
-                    $full_input_name  = EEH_Array::convert_array_values_to_keys(
1161
+                    $full_input_name = EEH_Array::convert_array_values_to_keys(
1162 1162
                         explode(
1163 1163
                             '[',
1164 1164
                             str_replace(']', '', $subsection->html_name())
@@ -1167,7 +1167,7 @@  discard block
 block discarded – undo
1167 1167
                     );
1168 1168
                     $submitted_values = array_replace_recursive($submitted_values, $full_input_name);
1169 1169
                 } else {
1170
-                    $submitted_values[ $subsection->html_name() ] = $subsection->raw_value();
1170
+                    $submitted_values[$subsection->html_name()] = $subsection->raw_value();
1171 1171
                 }
1172 1172
             } elseif ($subsection instanceof EE_Form_Section_Proper && $include_subforms) {
1173 1173
                 $subform_input_values = $subsection->submitted_values($include_subforms);
@@ -1202,7 +1202,7 @@  discard block
 block discarded – undo
1202 1202
     public function exclude(array $inputs_to_exclude = array())
1203 1203
     {
1204 1204
         foreach ($inputs_to_exclude as $input_to_exclude_name) {
1205
-            unset($this->_subsections[ $input_to_exclude_name ]);
1205
+            unset($this->_subsections[$input_to_exclude_name]);
1206 1206
         }
1207 1207
     }
1208 1208
 
@@ -1245,7 +1245,7 @@  discard block
 block discarded – undo
1245 1245
     public function add_subsections($new_subsections, $subsection_name_to_target = null, $add_before = true)
1246 1246
     {
1247 1247
         foreach ($new_subsections as $subsection_name => $subsection) {
1248
-            if (! $subsection instanceof EE_Form_Section_Base) {
1248
+            if ( ! $subsection instanceof EE_Form_Section_Base) {
1249 1249
                 EE_Error::add_error(
1250 1250
                     sprintf(
1251 1251
                         esc_html__(
@@ -1257,7 +1257,7 @@  discard block
 block discarded – undo
1257 1257
                         $this->name()
1258 1258
                     )
1259 1259
                 );
1260
-                unset($new_subsections[ $subsection_name ]);
1260
+                unset($new_subsections[$subsection_name]);
1261 1261
             }
1262 1262
         }
1263 1263
         $this->_subsections = EEH_Array::insert_into_array(
@@ -1372,7 +1372,7 @@  discard block
 block discarded – undo
1372 1372
     public function html_name_prefix()
1373 1373
     {
1374 1374
         if ($this->parent_section() instanceof EE_Form_Section_Proper) {
1375
-            return $this->parent_section()->html_name_prefix() . '[' . $this->name() . ']';
1375
+            return $this->parent_section()->html_name_prefix().'['.$this->name().']';
1376 1376
         }
1377 1377
         return $this->name();
1378 1378
     }
@@ -1412,7 +1412,7 @@  discard block
 block discarded – undo
1412 1412
      */
1413 1413
     public function ensure_construct_finalized_called()
1414 1414
     {
1415
-        if (! $this->_construction_finalized) {
1415
+        if ( ! $this->_construction_finalized) {
1416 1416
             $this->_construct_finalize($this->_parent_section, $this->_name);
1417 1417
         }
1418 1418
     }
Please login to merge, or discard this patch.
Indentation   +1528 added lines, -1528 removed lines patch added patch discarded remove patch
@@ -15,1532 +15,1532 @@
 block discarded – undo
15 15
  */
16 16
 class EE_Form_Section_Proper extends EE_Form_Section_Validatable
17 17
 {
18
-    const SUBMITTED_FORM_DATA_SSN_KEY = 'submitted_form_data';
19
-
20
-    /**
21
-     * Subsections
22
-     *
23
-     * @var EE_Form_Section_Validatable[]
24
-     */
25
-    protected $_subsections = array();
26
-
27
-    /**
28
-     * Strategy for laying out the form
29
-     *
30
-     * @var EE_Form_Section_Layout_Base
31
-     */
32
-    protected $_layout_strategy;
33
-
34
-    /**
35
-     * Whether or not this form has received and validated a form submission yet
36
-     *
37
-     * @var boolean
38
-     */
39
-    protected $_received_submission = false;
40
-
41
-    /**
42
-     * message displayed to users upon successful form submission
43
-     *
44
-     * @var string
45
-     */
46
-    protected $_form_submission_success_message = '';
47
-
48
-    /**
49
-     * message displayed to users upon unsuccessful form submission
50
-     *
51
-     * @var string
52
-     */
53
-    protected $_form_submission_error_message = '';
54
-
55
-    /**
56
-     * @var array like post / request
57
-     */
58
-    protected $cached_request_data;
59
-
60
-    /**
61
-     * Stores whether this form (and its sub-sections) were found to be valid or not.
62
-     * Starts off as null, but once the form is validated, it set to either true or false
63
-     * @var boolean|null
64
-     */
65
-    protected $is_valid;
66
-
67
-    /**
68
-     * Stores all the data that will localized for form validation
69
-     *
70
-     * @var array
71
-     */
72
-    protected static $_js_localization = array();
73
-
74
-    /**
75
-     * whether or not the form's localized validation JS vars have been set
76
-     *
77
-     * @type boolean
78
-     */
79
-    protected static $_scripts_localized = false;
80
-
81
-
82
-    /**
83
-     * when constructing a proper form section, calls _construct_finalize on children
84
-     * so that they know who their parent is, and what name they've been given.
85
-     *
86
-     * @param array[] $options_array   {
87
-     * @type          $subsections     EE_Form_Section_Validatable[] where keys are the section's name
88
-     * @type          $include         string[] numerically-indexed where values are section names to be included,
89
-     *                                 and in that order. This is handy if you want
90
-     *                                 the subsections to be ordered differently than the default, and if you override
91
-     *                                 which fields are shown
92
-     * @type          $exclude         string[] values are subsections to be excluded. This is handy if you want
93
-     *                                 to remove certain default subsections (note: if you specify BOTH 'include' AND
94
-     *                                 'exclude', the inclusions will be applied first, and the exclusions will exclude
95
-     *                                 items from that list of inclusions)
96
-     * @type          $layout_strategy EE_Form_Section_Layout_Base strategy for laying out the form
97
-     *                                 } @see EE_Form_Section_Validatable::__construct()
98
-     * @throws EE_Error
99
-     */
100
-    public function __construct($options_array = array())
101
-    {
102
-        $options_array = (array) apply_filters(
103
-            'FHEE__EE_Form_Section_Proper___construct__options_array',
104
-            $options_array,
105
-            $this
106
-        );
107
-        // call parent first, as it may be setting the name
108
-        parent::__construct($options_array);
109
-        // if they've included subsections in the constructor, add them now
110
-        if (isset($options_array['include'])) {
111
-            // we are going to make sure we ONLY have those subsections to include
112
-            // AND we are going to make sure they're in that specified order
113
-            $reordered_subsections = array();
114
-            foreach ($options_array['include'] as $input_name) {
115
-                if (isset($this->_subsections[ $input_name ])) {
116
-                    $reordered_subsections[ $input_name ] = $this->_subsections[ $input_name ];
117
-                }
118
-            }
119
-            $this->_subsections = $reordered_subsections;
120
-        }
121
-        if (isset($options_array['exclude'])) {
122
-            $exclude            = $options_array['exclude'];
123
-            $this->_subsections = array_diff_key($this->_subsections, array_flip($exclude));
124
-        }
125
-        if (isset($options_array['layout_strategy'])) {
126
-            $this->_layout_strategy = $options_array['layout_strategy'];
127
-        }
128
-        if (! $this->_layout_strategy) {
129
-            $this->_layout_strategy = is_admin() ? new EE_Admin_Two_Column_Layout() : new EE_Two_Column_Layout();
130
-        }
131
-        $this->_layout_strategy->_construct_finalize($this);
132
-        // ok so we are definitely going to want the forms JS,
133
-        // so enqueue it or remember to enqueue it during wp_enqueue_scripts
134
-        if (did_action('wp_enqueue_scripts') || did_action('admin_enqueue_scripts')) {
135
-            // ok so they've constructed this object after when they should have.
136
-            // just enqueue the generic form scripts and initialize the form immediately in the JS
137
-            EE_Form_Section_Proper::wp_enqueue_scripts(true);
138
-        } else {
139
-            add_action('wp_enqueue_scripts', array('EE_Form_Section_Proper', 'wp_enqueue_scripts'));
140
-            add_action('admin_enqueue_scripts', array('EE_Form_Section_Proper', 'wp_enqueue_scripts'));
141
-        }
142
-        add_action('wp_footer', array($this, 'ensure_scripts_localized'), 1);
143
-        /**
144
-         * Gives other plugins a chance to hook in before construct finalize is called.
145
-         * The form probably doesn't yet have a parent form section.
146
-         * Since 4.9.32, when this action was introduced, this is the best place to add a subsection onto a form,
147
-         * assuming you don't care what the form section's name, HTML ID, or HTML name etc are.
148
-         * Also see AHEE__EE_Form_Section_Proper___construct_finalize__end
149
-         *
150
-         * @since 4.9.32
151
-         * @param EE_Form_Section_Proper $this          before __construct is done, but all of its logic,
152
-         *                                              except maybe calling _construct_finalize has been done
153
-         * @param array                  $options_array options passed into the constructor
154
-         */
155
-        do_action(
156
-            'AHEE__EE_Form_Input_Base___construct__before_construct_finalize_called',
157
-            $this,
158
-            $options_array
159
-        );
160
-        if (isset($options_array['name'])) {
161
-            $this->_construct_finalize(null, $options_array['name']);
162
-        }
163
-    }
164
-
165
-
166
-    /**
167
-     * Finishes construction given the parent form section and this form section's name
168
-     *
169
-     * @param EE_Form_Section_Proper $parent_form_section
170
-     * @param string                 $name
171
-     * @throws EE_Error
172
-     */
173
-    public function _construct_finalize($parent_form_section, $name)
174
-    {
175
-        parent::_construct_finalize($parent_form_section, $name);
176
-        $this->_set_default_name_if_empty();
177
-        $this->_set_default_html_id_if_empty();
178
-        foreach ($this->_subsections as $subsection_name => $subsection) {
179
-            if ($subsection instanceof EE_Form_Section_Base) {
180
-                $subsection->_construct_finalize($this, $subsection_name);
181
-            } else {
182
-                throw new EE_Error(
183
-                    sprintf(
184
-                        esc_html__(
185
-                            'Subsection "%s" is not an instanceof EE_Form_Section_Base on form "%s". It is a "%s"',
186
-                            'event_espresso'
187
-                        ),
188
-                        $subsection_name,
189
-                        get_class($this),
190
-                        $subsection ? get_class($subsection) : esc_html__('NULL', 'event_espresso')
191
-                    )
192
-                );
193
-            }
194
-        }
195
-        /**
196
-         * Action performed just after form has been given a name (and HTML ID etc) and is fully constructed.
197
-         * If you have code that should modify the form and needs it and its subsections to have a name, HTML ID
198
-         * (or other attributes derived from the name like the HTML label id, etc), this is where it should be done.
199
-         * This might only happen just before displaying the form, or just before it receives form submission data.
200
-         * If you need to modify the form or its subsections before _construct_finalize is called on it (and we've
201
-         * ensured it has a name, HTML IDs, etc
202
-         *
203
-         * @param EE_Form_Section_Proper      $this
204
-         * @param EE_Form_Section_Proper|null $parent_form_section
205
-         * @param string                      $name
206
-         */
207
-        do_action(
208
-            'AHEE__EE_Form_Section_Proper___construct_finalize__end',
209
-            $this,
210
-            $parent_form_section,
211
-            $name
212
-        );
213
-    }
214
-
215
-
216
-    /**
217
-     * Gets the layout strategy for this form section
218
-     *
219
-     * @return EE_Form_Section_Layout_Base
220
-     */
221
-    public function get_layout_strategy()
222
-    {
223
-        return $this->_layout_strategy;
224
-    }
225
-
226
-
227
-    /**
228
-     * Gets the HTML for a single input for this form section according
229
-     * to the layout strategy
230
-     *
231
-     * @param EE_Form_Input_Base $input
232
-     * @return string
233
-     */
234
-    public function get_html_for_input($input)
235
-    {
236
-        return $this->_layout_strategy->layout_input($input);
237
-    }
238
-
239
-
240
-    /**
241
-     * was_submitted - checks if form inputs are present in request data
242
-     * Basically an alias for form_data_present_in() (which is used by both
243
-     * proper form sections and form inputs)
244
-     *
245
-     * @param null $form_data
246
-     * @return boolean
247
-     * @throws EE_Error
248
-     */
249
-    public function was_submitted($form_data = null)
250
-    {
251
-        return $this->form_data_present_in($form_data);
252
-    }
253
-
254
-    /**
255
-     * Gets the cached request data; but if there is none, or $req_data was set with
256
-     * something different, refresh the cache, and then return it
257
-     * @param null $req_data
258
-     * @return array
259
-     */
260
-    protected function getCachedRequest($req_data = null)
261
-    {
262
-        if (
263
-            $this->cached_request_data === null
264
-            || (
265
-                $req_data !== null
266
-                && $req_data !== $this->cached_request_data
267
-            )
268
-        ) {
269
-            $req_data = apply_filters(
270
-                'FHEE__EE_Form_Section_Proper__receive_form_submission__req_data',
271
-                $req_data,
272
-                $this
273
-            );
274
-            if ($req_data === null) {
275
-                /** @var RequestInterface $request */
276
-                $request = LoaderFactory::getLoader()->getShared(RequestInterface::class);
277
-                $req_data = $request->requestParams();
278
-            }
279
-            $req_data = apply_filters(
280
-                'FHEE__EE_Form_Section_Proper__receive_form_submission__request_data',
281
-                $req_data,
282
-                $this
283
-            );
284
-            $this->cached_request_data = (array) $req_data;
285
-        }
286
-        return $this->cached_request_data;
287
-    }
288
-
289
-
290
-    /**
291
-     * After the form section is initially created, call this to sanitize the data in the submission
292
-     * which relates to this form section, validate it, and set it as properties on the form.
293
-     *
294
-     * @param array|null $req_data should usually be post data (the default).
295
-     *                             However, you CAN supply a different array.
296
-     *                             Consider using set_defaults() instead however.
297
-     *                             (If you rendered the form in the page using $form_x->get_html()
298
-     *                             the inputs will have the correct name in the request data for this function
299
-     *                             to find them and populate the form with them.
300
-     *                             If you have a flat form (with only input subsections),
301
-     *                             you can supply a flat array where keys
302
-     *                             are the form input names and values are their values)
303
-     * @param boolean    $validate whether or not to perform validation on this data. Default is,
304
-     *                             of course, to validate that data, and set errors on the invalid values.
305
-     *                             But if the data has already been validated
306
-     *                             (eg you validated the data then stored it in the DB)
307
-     *                             you may want to skip this step.
308
-     * @throws InvalidArgumentException
309
-     * @throws InvalidInterfaceException
310
-     * @throws InvalidDataTypeException
311
-     * @throws EE_Error
312
-     */
313
-    public function receive_form_submission($req_data = null, $validate = true)
314
-    {
315
-        $req_data = $this->getCachedRequest($req_data);
316
-        $this->_normalize($req_data);
317
-        if ($validate) {
318
-            $this->_validate();
319
-            // if it's invalid, we're going to want to re-display so remember what they submitted
320
-            if (! $this->is_valid()) {
321
-                $this->store_submitted_form_data_in_session();
322
-            }
323
-        }
324
-        if ($this->submission_error_message() === '' && ! $this->is_valid()) {
325
-            $this->set_submission_error_message();
326
-        }
327
-        do_action(
328
-            'AHEE__EE_Form_Section_Proper__receive_form_submission__end',
329
-            $req_data,
330
-            $this,
331
-            $validate
332
-        );
333
-    }
334
-
335
-
336
-    /**
337
-     * caches the originally submitted input values in the session
338
-     * so that they can be used to repopulate the form if it failed validation
339
-     *
340
-     * @return boolean whether or not the data was successfully stored in the session
341
-     * @throws InvalidArgumentException
342
-     * @throws InvalidInterfaceException
343
-     * @throws InvalidDataTypeException
344
-     * @throws EE_Error
345
-     */
346
-    protected function store_submitted_form_data_in_session()
347
-    {
348
-        return EE_Registry::instance()->SSN->set_session_data(
349
-            array(
350
-                EE_Form_Section_Proper::SUBMITTED_FORM_DATA_SSN_KEY => $this->submitted_values(true),
351
-            )
352
-        );
353
-    }
354
-
355
-
356
-    /**
357
-     * retrieves the originally submitted input values in the session
358
-     * so that they can be used to repopulate the form if it failed validation
359
-     *
360
-     * @return array
361
-     * @throws InvalidArgumentException
362
-     * @throws InvalidInterfaceException
363
-     * @throws InvalidDataTypeException
364
-     */
365
-    protected function get_submitted_form_data_from_session()
366
-    {
367
-        $session = EE_Registry::instance()->SSN;
368
-        if ($session instanceof EE_Session) {
369
-            return $session->get_session_data(
370
-                EE_Form_Section_Proper::SUBMITTED_FORM_DATA_SSN_KEY
371
-            );
372
-        }
373
-        return array();
374
-    }
375
-
376
-
377
-    /**
378
-     * flushed the originally submitted input values from the session
379
-     *
380
-     * @return boolean whether or not the data was successfully removed from the session
381
-     * @throws InvalidArgumentException
382
-     * @throws InvalidInterfaceException
383
-     * @throws InvalidDataTypeException
384
-     */
385
-    public static function flush_submitted_form_data_from_session()
386
-    {
387
-        return EE_Registry::instance()->SSN->reset_data(
388
-            array(EE_Form_Section_Proper::SUBMITTED_FORM_DATA_SSN_KEY)
389
-        );
390
-    }
391
-
392
-
393
-    /**
394
-     * Populates this form and its subsections with data from the session.
395
-     * (Wrapper for EE_Form_Section_Proper::receive_form_submission, so it shows
396
-     * validation errors when displaying too)
397
-     * Returns true if the form was populated from the session, false otherwise
398
-     *
399
-     * @return boolean
400
-     * @throws InvalidArgumentException
401
-     * @throws InvalidInterfaceException
402
-     * @throws InvalidDataTypeException
403
-     * @throws EE_Error
404
-     */
405
-    public function populate_from_session()
406
-    {
407
-        $form_data_in_session = $this->get_submitted_form_data_from_session();
408
-        if (empty($form_data_in_session)) {
409
-            return false;
410
-        }
411
-        $this->receive_form_submission($form_data_in_session);
412
-        add_action('shutdown', array('EE_Form_Section_Proper', 'flush_submitted_form_data_from_session'));
413
-        if ($this->form_data_present_in($form_data_in_session)) {
414
-            return true;
415
-        }
416
-        return false;
417
-    }
418
-
419
-
420
-    /**
421
-     * Populates the default data for the form, given an array where keys are
422
-     * the input names, and values are their values (preferably normalized to be their
423
-     * proper PHP types, not all strings... although that should be ok too).
424
-     * Proper subsections are sub-arrays, the key being the subsection's name, and
425
-     * the value being an array formatted in teh same way
426
-     *
427
-     * @param array $default_data
428
-     * @throws EE_Error
429
-     */
430
-    public function populate_defaults($default_data)
431
-    {
432
-        foreach ($this->subsections(false) as $subsection_name => $subsection) {
433
-            if (isset($default_data[ $subsection_name ])) {
434
-                if ($subsection instanceof EE_Form_Input_Base) {
435
-                    $subsection->set_default($default_data[ $subsection_name ]);
436
-                } elseif ($subsection instanceof EE_Form_Section_Proper) {
437
-                    $subsection->populate_defaults($default_data[ $subsection_name ]);
438
-                }
439
-            }
440
-        }
441
-    }
442
-
443
-
444
-    /**
445
-     * returns true if subsection exists
446
-     *
447
-     * @param string $name
448
-     * @return boolean
449
-     */
450
-    public function subsection_exists($name)
451
-    {
452
-        return isset($this->_subsections[ $name ]) ? true : false;
453
-    }
454
-
455
-
456
-    /**
457
-     * Gets the subsection specified by its name
458
-     *
459
-     * @param string  $name
460
-     * @param boolean $require_construction_to_be_finalized most client code should leave this as TRUE
461
-     *                                                      so that the inputs will be properly configured.
462
-     *                                                      However, some client code may be ok
463
-     *                                                      with construction finalize being called later
464
-     *                                                      (realizing that the subsections' html names
465
-     *                                                      might not be set yet, etc.)
466
-     * @return EE_Form_Section_Base
467
-     * @throws EE_Error
468
-     */
469
-    public function get_subsection($name, $require_construction_to_be_finalized = true)
470
-    {
471
-        if ($require_construction_to_be_finalized) {
472
-            $this->ensure_construct_finalized_called();
473
-        }
474
-        return $this->subsection_exists($name) ? $this->_subsections[ $name ] : null;
475
-    }
476
-
477
-
478
-    /**
479
-     * Gets all the validatable subsections of this form section
480
-     *
481
-     * @return EE_Form_Section_Validatable[]
482
-     * @throws EE_Error
483
-     */
484
-    public function get_validatable_subsections()
485
-    {
486
-        $validatable_subsections = array();
487
-        foreach ($this->subsections() as $name => $obj) {
488
-            if ($obj instanceof EE_Form_Section_Validatable) {
489
-                $validatable_subsections[ $name ] = $obj;
490
-            }
491
-        }
492
-        return $validatable_subsections;
493
-    }
494
-
495
-
496
-    /**
497
-     * Gets an input by the given name. If not found, or if its not an EE_FOrm_Input_Base child,
498
-     * throw an EE_Error.
499
-     *
500
-     * @param string  $name
501
-     * @param boolean $require_construction_to_be_finalized most client code should
502
-     *                                                      leave this as TRUE so that the inputs will be properly
503
-     *                                                      configured. However, some client code may be ok with
504
-     *                                                      construction finalize being called later
505
-     *                                                      (realizing that the subsections' html names might not be
506
-     *                                                      set yet, etc.)
507
-     * @return EE_Form_Input_Base
508
-     * @throws EE_Error
509
-     */
510
-    public function get_input($name, $require_construction_to_be_finalized = true)
511
-    {
512
-        $subsection = $this->get_subsection(
513
-            $name,
514
-            $require_construction_to_be_finalized
515
-        );
516
-        if (! $subsection instanceof EE_Form_Input_Base) {
517
-            throw new EE_Error(
518
-                sprintf(
519
-                    esc_html__(
520
-                        "Subsection '%s' is not an instanceof EE_Form_Input_Base on form '%s'. It is a '%s'",
521
-                        'event_espresso'
522
-                    ),
523
-                    $name,
524
-                    get_class($this),
525
-                    $subsection ? get_class($subsection) : esc_html__('NULL', 'event_espresso')
526
-                )
527
-            );
528
-        }
529
-        return $subsection;
530
-    }
531
-
532
-
533
-    /**
534
-     * Like get_input(), gets the proper subsection of the form given the name,
535
-     * otherwise throws an EE_Error
536
-     *
537
-     * @param string  $name
538
-     * @param boolean $require_construction_to_be_finalized most client code should
539
-     *                                                      leave this as TRUE so that the inputs will be properly
540
-     *                                                      configured. However, some client code may be ok with
541
-     *                                                      construction finalize being called later
542
-     *                                                      (realizing that the subsections' html names might not be
543
-     *                                                      set yet, etc.)
544
-     * @return EE_Form_Section_Proper
545
-     * @throws EE_Error
546
-     */
547
-    public function get_proper_subsection($name, $require_construction_to_be_finalized = true)
548
-    {
549
-        $subsection = $this->get_subsection(
550
-            $name,
551
-            $require_construction_to_be_finalized
552
-        );
553
-        if (! $subsection instanceof EE_Form_Section_Proper) {
554
-            throw new EE_Error(
555
-                sprintf(
556
-                    esc_html__(
557
-                        "Subsection '%'s is not an instanceof EE_Form_Section_Proper on form '%s'",
558
-                        'event_espresso'
559
-                    ),
560
-                    $name,
561
-                    get_class($this)
562
-                )
563
-            );
564
-        }
565
-        return $subsection;
566
-    }
567
-
568
-
569
-    /**
570
-     * Gets the value of the specified input. Should be called after receive_form_submission()
571
-     * or populate_defaults() on the form, where the normalized value on the input is set.
572
-     *
573
-     * @param string $name
574
-     * @return mixed depending on the input's type and its normalization strategy
575
-     * @throws EE_Error
576
-     */
577
-    public function get_input_value($name)
578
-    {
579
-        $input = $this->get_input($name);
580
-        return $input->normalized_value();
581
-    }
582
-
583
-
584
-    /**
585
-     * Checks if this form section itself is valid, and then checks its subsections
586
-     *
587
-     * @throws EE_Error
588
-     * @return boolean
589
-     */
590
-    public function is_valid()
591
-    {
592
-        if ($this->is_valid === null) {
593
-            if (! $this->has_received_submission()) {
594
-                throw new EE_Error(
595
-                    sprintf(
596
-                        esc_html__(
597
-                            'You cannot check if a form is valid before receiving the form submission using receive_form_submission',
598
-                            'event_espresso'
599
-                        )
600
-                    )
601
-                );
602
-            }
603
-            if (! parent::is_valid()) {
604
-                $this->is_valid = false;
605
-            } else {
606
-                // ok so no general errors to this entire form section.
607
-                // so let's check the subsections, but only set errors if that hasn't been done yet
608
-                $this->is_valid = true;
609
-                foreach ($this->get_validatable_subsections() as $subsection) {
610
-                    if (! $subsection->is_valid()) {
611
-                        $this->is_valid = false;
612
-                    }
613
-                }
614
-            }
615
-        }
616
-        return $this->is_valid;
617
-    }
618
-
619
-
620
-    /**
621
-     * gets the default name of this form section if none is specified
622
-     *
623
-     * @return void
624
-     */
625
-    protected function _set_default_name_if_empty()
626
-    {
627
-        if (! $this->_name) {
628
-            $classname    = get_class($this);
629
-            $default_name = str_replace('EE_', '', $classname);
630
-            $this->_name  = $default_name;
631
-        }
632
-    }
633
-
634
-
635
-    /**
636
-     * Returns the HTML for the form, except for the form opening and closing tags
637
-     * (as the form section doesn't know where you necessarily want to send the information to),
638
-     * and except for a submit button. Enqueues JS and CSS; if called early enough we will
639
-     * try to enqueue them in the header, otherwise they'll be enqueued in the footer.
640
-     * Not doing_it_wrong because theoretically this CAN be used properly,
641
-     * provided its used during "wp_enqueue_scripts", or it doesn't need to enqueue
642
-     * any CSS.
643
-     *
644
-     * @throws InvalidArgumentException
645
-     * @throws InvalidInterfaceException
646
-     * @throws InvalidDataTypeException
647
-     * @throws EE_Error
648
-     */
649
-    public function get_html_and_js()
650
-    {
651
-        $this->enqueue_js();
652
-        return $this->get_html();
653
-    }
654
-
655
-
656
-    /**
657
-     * returns HTML for displaying this form section. recursively calls display_section() on all subsections
658
-     *
659
-     * @param bool $display_previously_submitted_data
660
-     * @return string
661
-     * @throws InvalidArgumentException
662
-     * @throws InvalidInterfaceException
663
-     * @throws InvalidDataTypeException
664
-     * @throws EE_Error
665
-     * @throws EE_Error
666
-     * @throws EE_Error
667
-     */
668
-    public function get_html($display_previously_submitted_data = true)
669
-    {
670
-        $this->ensure_construct_finalized_called();
671
-        if ($display_previously_submitted_data) {
672
-            $this->populate_from_session();
673
-        }
674
-        return $this->_form_html_filter
675
-            ? $this->_form_html_filter->filterHtml($this->_layout_strategy->layout_form(), $this)
676
-            : $this->_layout_strategy->layout_form();
677
-    }
678
-
679
-
680
-    /**
681
-     * enqueues JS and CSS for the form.
682
-     * It is preferred to call this before wp_enqueue_scripts so the
683
-     * scripts and styles can be put in the header, but if called later
684
-     * they will be put in the footer (which is OK for JS, but in HTML4 CSS should
685
-     * only be in the header; but in HTML5 its ok in the body.
686
-     * See http://stackoverflow.com/questions/4957446/load-external-css-file-in-body-tag.
687
-     * So if your form enqueues CSS, it's preferred to call this before wp_enqueue_scripts.)
688
-     *
689
-     * @return void
690
-     * @throws EE_Error
691
-     */
692
-    public function enqueue_js()
693
-    {
694
-        $this->_enqueue_and_localize_form_js();
695
-        foreach ($this->subsections() as $subsection) {
696
-            $subsection->enqueue_js();
697
-        }
698
-    }
699
-
700
-
701
-    /**
702
-     * adds a filter so that jquery validate gets enqueued in EE_System::wp_enqueue_scripts().
703
-     * This must be done BEFORE wp_enqueue_scripts() gets called, which is on
704
-     * the wp_enqueue_scripts hook.
705
-     * However, registering the form js and localizing it can happen when we
706
-     * actually output the form (which is preferred, seeing how teh form's fields
707
-     * could change until it's actually outputted)
708
-     *
709
-     * @param boolean $init_form_validation_automatically whether or not we want the form validation
710
-     *                                                    to be triggered automatically or not
711
-     * @return void
712
-     */
713
-    public static function wp_enqueue_scripts($init_form_validation_automatically = true)
714
-    {
715
-        wp_register_script(
716
-            'ee_form_section_validation',
717
-            EE_GLOBAL_ASSETS_URL . 'scripts' . '/form_section_validation.js',
718
-            array('jquery-validate', 'jquery-ui-datepicker', 'jquery-validate-extra-methods'),
719
-            EVENT_ESPRESSO_VERSION,
720
-            true
721
-        );
722
-        wp_localize_script(
723
-            'ee_form_section_validation',
724
-            'ee_form_section_validation_init',
725
-            array('init' => $init_form_validation_automatically ? '1' : '0')
726
-        );
727
-    }
728
-
729
-
730
-    /**
731
-     * gets the variables used by form_section_validation.js.
732
-     * This needs to be called AFTER we've called $this->_enqueue_jquery_validate_script,
733
-     * but before the wordpress hook wp_loaded
734
-     *
735
-     * @throws EE_Error
736
-     */
737
-    public function _enqueue_and_localize_form_js()
738
-    {
739
-        $this->ensure_construct_finalized_called();
740
-        // actually, we don't want to localize just yet. There may be other forms on the page.
741
-        // so we need to add our form section data to a static variable accessible by all form sections
742
-        // and localize it just before the footer
743
-        $this->localize_validation_rules();
744
-        add_action('wp_footer', array('EE_Form_Section_Proper', 'localize_script_for_all_forms'), 2);
745
-        add_action('admin_footer', array('EE_Form_Section_Proper', 'localize_script_for_all_forms'));
746
-    }
747
-
748
-
749
-    /**
750
-     * add our form section data to a static variable accessible by all form sections
751
-     *
752
-     * @param bool $return_for_subsection
753
-     * @return void
754
-     * @throws EE_Error
755
-     */
756
-    public function localize_validation_rules($return_for_subsection = false)
757
-    {
758
-        // we only want to localize vars ONCE for the entire form,
759
-        // so if the form section doesn't have a parent, then it must be the top dog
760
-        if ($return_for_subsection || ! $this->parent_section()) {
761
-            EE_Form_Section_Proper::$_js_localization['form_data'][ $this->html_id() ] = array(
762
-                'form_section_id'  => $this->html_id(true),
763
-                'validation_rules' => $this->get_jquery_validation_rules(),
764
-                'other_data'       => $this->get_other_js_data(),
765
-                'errors'           => $this->subsection_validation_errors_by_html_name(),
766
-            );
767
-            EE_Form_Section_Proper::$_scripts_localized                                = true;
768
-        }
769
-    }
770
-
771
-
772
-    /**
773
-     * Gets an array of extra data that will be useful for client-side javascript.
774
-     * This is primarily data added by inputs and forms in addition to any
775
-     * scripts they might enqueue
776
-     *
777
-     * @param array $form_other_js_data
778
-     * @return array
779
-     * @throws EE_Error
780
-     */
781
-    public function get_other_js_data($form_other_js_data = array())
782
-    {
783
-        foreach ($this->subsections() as $subsection) {
784
-            $form_other_js_data = $subsection->get_other_js_data($form_other_js_data);
785
-        }
786
-        return $form_other_js_data;
787
-    }
788
-
789
-
790
-    /**
791
-     * Gets a flat array of inputs for this form section and its subsections.
792
-     * Keys are their form names, and values are the inputs themselves
793
-     *
794
-     * @return EE_Form_Input_Base
795
-     * @throws EE_Error
796
-     */
797
-    public function inputs_in_subsections()
798
-    {
799
-        $inputs = array();
800
-        foreach ($this->subsections() as $subsection) {
801
-            if ($subsection instanceof EE_Form_Input_Base) {
802
-                $inputs[ $subsection->html_name() ] = $subsection;
803
-            } elseif ($subsection instanceof EE_Form_Section_Proper) {
804
-                $inputs += $subsection->inputs_in_subsections();
805
-            }
806
-        }
807
-        return $inputs;
808
-    }
809
-
810
-
811
-    /**
812
-     * Gets a flat array of all the validation errors.
813
-     * Keys are html names (because those should be unique)
814
-     * and values are a string of all their validation errors
815
-     *
816
-     * @return string[]
817
-     * @throws EE_Error
818
-     */
819
-    public function subsection_validation_errors_by_html_name()
820
-    {
821
-        $inputs = $this->inputs();
822
-        $errors = array();
823
-        foreach ($inputs as $form_input) {
824
-            if ($form_input instanceof EE_Form_Input_Base && $form_input->get_validation_errors()) {
825
-                $errors[ $form_input->html_name() ] = $form_input->get_validation_error_string();
826
-            }
827
-        }
828
-        return $errors;
829
-    }
830
-
831
-
832
-    /**
833
-     * passes all the form data required by the JS to the JS, and enqueues the few required JS files.
834
-     * Should be setup by each form during the _enqueues_and_localize_form_js
835
-     *
836
-     * @throws InvalidArgumentException
837
-     * @throws InvalidInterfaceException
838
-     * @throws InvalidDataTypeException
839
-     */
840
-    public static function localize_script_for_all_forms()
841
-    {
842
-        // allow inputs and stuff to hook in their JS and stuff here
843
-        do_action('AHEE__EE_Form_Section_Proper__localize_script_for_all_forms__begin');
844
-        EE_Form_Section_Proper::$_js_localization['localized_error_messages'] = EE_Form_Section_Proper::_get_localized_error_messages();
845
-        $email_validation_level = isset(EE_Registry::instance()->CFG->registration->email_validation_level)
846
-            ? EE_Registry::instance()->CFG->registration->email_validation_level
847
-            : 'wp_default';
848
-        EE_Form_Section_Proper::$_js_localization['email_validation_level']   = $email_validation_level;
849
-        wp_enqueue_script('ee_form_section_validation');
850
-        wp_localize_script(
851
-            'ee_form_section_validation',
852
-            'ee_form_section_vars',
853
-            EE_Form_Section_Proper::$_js_localization
854
-        );
855
-    }
856
-
857
-
858
-    /**
859
-     * ensure_scripts_localized
860
-     *
861
-     * @throws EE_Error
862
-     */
863
-    public function ensure_scripts_localized()
864
-    {
865
-        if (! EE_Form_Section_Proper::$_scripts_localized) {
866
-            $this->_enqueue_and_localize_form_js();
867
-        }
868
-    }
869
-
870
-
871
-    /**
872
-     * Gets the hard-coded validation error messages to be used in the JS. The convention
873
-     * is that the key here should be the same as the custom validation rule put in the JS file
874
-     *
875
-     * @return array keys are custom validation rules, and values are internationalized strings
876
-     */
877
-    private static function _get_localized_error_messages()
878
-    {
879
-        return array(
880
-            'validUrl' => wp_strip_all_tags(__('This is not a valid absolute URL. Eg, http://domain.com/monkey.jpg', 'event_espresso')),
881
-            'regex'    => wp_strip_all_tags(__('Please check your input', 'event_espresso'))
882
-        );
883
-    }
884
-
885
-
886
-    /**
887
-     * @return array
888
-     */
889
-    public static function js_localization()
890
-    {
891
-        return self::$_js_localization;
892
-    }
893
-
894
-
895
-    /**
896
-     * @return void
897
-     */
898
-    public static function reset_js_localization()
899
-    {
900
-        self::$_js_localization = array();
901
-    }
902
-
903
-
904
-    /**
905
-     * Gets the JS to put inside the jquery validation rules for subsection of this form section.
906
-     * See parent function for more...
907
-     *
908
-     * @return array
909
-     * @throws EE_Error
910
-     */
911
-    public function get_jquery_validation_rules()
912
-    {
913
-        $jquery_validation_rules = array();
914
-        foreach ($this->get_validatable_subsections() as $subsection) {
915
-            $jquery_validation_rules = array_merge(
916
-                $jquery_validation_rules,
917
-                $subsection->get_jquery_validation_rules()
918
-            );
919
-        }
920
-        return $jquery_validation_rules;
921
-    }
922
-
923
-
924
-    /**
925
-     * Sanitizes all the data and sets the sanitized value of each field
926
-     *
927
-     * @param array $req_data
928
-     * @return void
929
-     * @throws EE_Error
930
-     */
931
-    protected function _normalize($req_data)
932
-    {
933
-        $this->_received_submission = true;
934
-        $this->_validation_errors   = array();
935
-        foreach ($this->get_validatable_subsections() as $subsection) {
936
-            try {
937
-                $subsection->_normalize($req_data);
938
-            } catch (EE_Validation_Error $e) {
939
-                $subsection->add_validation_error($e);
940
-            }
941
-        }
942
-    }
943
-
944
-
945
-    /**
946
-     * Performs validation on this form section and its subsections.
947
-     * For each subsection,
948
-     * calls _validate_{subsection_name} on THIS form (if the function exists)
949
-     * and passes it the subsection, then calls _validate on that subsection.
950
-     * If you need to perform validation on the form as a whole (considering multiple)
951
-     * you would be best to override this _validate method,
952
-     * calling parent::_validate() first.
953
-     *
954
-     * @throws EE_Error
955
-     */
956
-    protected function _validate()
957
-    {
958
-        // reset the cache of whether this form is valid or not- we're re-validating it now
959
-        $this->is_valid = null;
960
-        foreach ($this->get_validatable_subsections() as $subsection_name => $subsection) {
961
-            if (method_exists($this, '_validate_' . $subsection_name)) {
962
-                call_user_func_array(array($this, '_validate_' . $subsection_name), array($subsection));
963
-            }
964
-            $subsection->_validate();
965
-        }
966
-    }
967
-
968
-
969
-    /**
970
-     * Gets all the validated inputs for the form section
971
-     *
972
-     * @return array
973
-     * @throws EE_Error
974
-     */
975
-    public function valid_data()
976
-    {
977
-        $inputs = array();
978
-        foreach ($this->subsections() as $subsection_name => $subsection) {
979
-            if ($subsection instanceof EE_Form_Section_Proper) {
980
-                $inputs[ $subsection_name ] = $subsection->valid_data();
981
-            } elseif ($subsection instanceof EE_Form_Input_Base) {
982
-                $inputs[ $subsection_name ] = $subsection->normalized_value();
983
-            }
984
-        }
985
-        return $inputs;
986
-    }
987
-
988
-
989
-    /**
990
-     * Gets all the inputs on this form section
991
-     *
992
-     * @return EE_Form_Input_Base[]
993
-     * @throws EE_Error
994
-     */
995
-    public function inputs()
996
-    {
997
-        $inputs = array();
998
-        foreach ($this->subsections() as $subsection_name => $subsection) {
999
-            if ($subsection instanceof EE_Form_Input_Base) {
1000
-                $inputs[ $subsection_name ] = $subsection;
1001
-            }
1002
-        }
1003
-        return $inputs;
1004
-    }
1005
-
1006
-
1007
-    /**
1008
-     * Gets all the subsections which are a proper form
1009
-     *
1010
-     * @return EE_Form_Section_Proper[]
1011
-     * @throws EE_Error
1012
-     */
1013
-    public function subforms()
1014
-    {
1015
-        $form_sections = array();
1016
-        foreach ($this->subsections() as $name => $obj) {
1017
-            if ($obj instanceof EE_Form_Section_Proper) {
1018
-                $form_sections[ $name ] = $obj;
1019
-            }
1020
-        }
1021
-        return $form_sections;
1022
-    }
1023
-
1024
-
1025
-    /**
1026
-     * Gets all the subsections (inputs, proper subsections, or html-only sections).
1027
-     * Consider using inputs() or subforms()
1028
-     * if you only want form inputs or proper form sections.
1029
-     *
1030
-     * @param boolean $require_construction_to_be_finalized most client code should
1031
-     *                                                      leave this as TRUE so that the inputs will be properly
1032
-     *                                                      configured. However, some client code may be ok with
1033
-     *                                                      construction finalize being called later
1034
-     *                                                      (realizing that the subsections' html names might not be
1035
-     *                                                      set yet, etc.)
1036
-     * @return EE_Form_Section_Proper[]
1037
-     * @throws EE_Error
1038
-     */
1039
-    public function subsections($require_construction_to_be_finalized = true)
1040
-    {
1041
-        if ($require_construction_to_be_finalized) {
1042
-            $this->ensure_construct_finalized_called();
1043
-        }
1044
-        return $this->_subsections;
1045
-    }
1046
-
1047
-
1048
-    /**
1049
-     * Returns whether this form has any subforms or inputs
1050
-     * @return bool
1051
-     */
1052
-    public function hasSubsections()
1053
-    {
1054
-        return ! empty($this->_subsections);
1055
-    }
1056
-
1057
-
1058
-    /**
1059
-     * Returns a simple array where keys are input names, and values are their normalized
1060
-     * values. (Similar to calling get_input_value on inputs)
1061
-     *
1062
-     * @param boolean $include_subform_inputs Whether to include inputs from subforms,
1063
-     *                                        or just this forms' direct children inputs
1064
-     * @param boolean $flatten                Whether to force the results into 1-dimensional array,
1065
-     *                                        or allow multidimensional array
1066
-     * @return array if $flatten is TRUE it will always be a 1-dimensional array
1067
-     *                                        with array keys being input names
1068
-     *                                        (regardless of whether they are from a subsection or not),
1069
-     *                                        and if $flatten is FALSE it can be a multidimensional array
1070
-     *                                        where keys are always subsection names and values are either
1071
-     *                                        the input's normalized value, or an array like the top-level array
1072
-     * @throws EE_Error
1073
-     */
1074
-    public function input_values($include_subform_inputs = false, $flatten = false)
1075
-    {
1076
-        return $this->_input_values(false, $include_subform_inputs, $flatten);
1077
-    }
1078
-
1079
-
1080
-    /**
1081
-     * Similar to EE_Form_Section_Proper::input_values(), except this returns the 'display_value'
1082
-     * of each input. On some inputs (especially radio boxes or checkboxes), the value stored
1083
-     * is not necessarily the value we want to display to users. This creates an array
1084
-     * where keys are the input names, and values are their display values
1085
-     *
1086
-     * @param boolean $include_subform_inputs Whether to include inputs from subforms,
1087
-     *                                        or just this forms' direct children inputs
1088
-     * @param boolean $flatten                Whether to force the results into 1-dimensional array,
1089
-     *                                        or allow multidimensional array
1090
-     * @return array if $flatten is TRUE it will always be a 1-dimensional array
1091
-     *                                        with array keys being input names
1092
-     *                                        (regardless of whether they are from a subsection or not),
1093
-     *                                        and if $flatten is FALSE it can be a multidimensional array
1094
-     *                                        where keys are always subsection names and values are either
1095
-     *                                        the input's normalized value, or an array like the top-level array
1096
-     * @throws EE_Error
1097
-     */
1098
-    public function input_pretty_values($include_subform_inputs = false, $flatten = false)
1099
-    {
1100
-        return $this->_input_values(true, $include_subform_inputs, $flatten);
1101
-    }
1102
-
1103
-
1104
-    /**
1105
-     * Gets the input values from the form
1106
-     *
1107
-     * @param boolean $pretty                 Whether to retrieve the pretty value,
1108
-     *                                        or just the normalized value
1109
-     * @param boolean $include_subform_inputs Whether to include inputs from subforms,
1110
-     *                                        or just this forms' direct children inputs
1111
-     * @param boolean $flatten                Whether to force the results into 1-dimensional array,
1112
-     *                                        or allow multidimensional array
1113
-     * @return array if $flatten is TRUE it will always be a 1-dimensional array with array keys being
1114
-     *                                        input names (regardless of whether they are from a subsection or not),
1115
-     *                                        and if $flatten is FALSE it can be a multidimensional array
1116
-     *                                        where keys are always subsection names and values are either
1117
-     *                                        the input's normalized value, or an array like the top-level array
1118
-     * @throws EE_Error
1119
-     */
1120
-    public function _input_values($pretty = false, $include_subform_inputs = false, $flatten = false)
1121
-    {
1122
-        $input_values = array();
1123
-        foreach ($this->subsections() as $subsection_name => $subsection) {
1124
-            if ($subsection instanceof EE_Form_Input_Base) {
1125
-                $input_values[ $subsection_name ] = $pretty
1126
-                    ? $subsection->pretty_value()
1127
-                    : $subsection->normalized_value();
1128
-            } elseif ($subsection instanceof EE_Form_Section_Proper && $include_subform_inputs) {
1129
-                $subform_input_values = $subsection->_input_values(
1130
-                    $pretty,
1131
-                    $include_subform_inputs,
1132
-                    $flatten
1133
-                );
1134
-                if ($flatten) {
1135
-                    $input_values = array_merge($input_values, $subform_input_values);
1136
-                } else {
1137
-                    $input_values[ $subsection_name ] = $subform_input_values;
1138
-                }
1139
-            }
1140
-        }
1141
-        return $input_values;
1142
-    }
1143
-
1144
-
1145
-    /**
1146
-     * Gets the originally submitted input values from the form
1147
-     *
1148
-     * @param boolean $include_subforms  Whether to include inputs from subforms,
1149
-     *                                   or just this forms' direct children inputs
1150
-     * @return array                     if $flatten is TRUE it will always be a 1-dimensional array
1151
-     *                                   with array keys being input names
1152
-     *                                   (regardless of whether they are from a subsection or not),
1153
-     *                                   and if $flatten is FALSE it can be a multidimensional array
1154
-     *                                   where keys are always subsection names and values are either
1155
-     *                                   the input's normalized value, or an array like the top-level array
1156
-     * @throws EE_Error
1157
-     */
1158
-    public function submitted_values($include_subforms = false)
1159
-    {
1160
-        $submitted_values = array();
1161
-        foreach ($this->subsections() as $subsection) {
1162
-            if ($subsection instanceof EE_Form_Input_Base) {
1163
-                // is this input part of an array of inputs?
1164
-                if (strpos($subsection->html_name(), '[') !== false) {
1165
-                    $full_input_name  = EEH_Array::convert_array_values_to_keys(
1166
-                        explode(
1167
-                            '[',
1168
-                            str_replace(']', '', $subsection->html_name())
1169
-                        ),
1170
-                        $subsection->raw_value()
1171
-                    );
1172
-                    $submitted_values = array_replace_recursive($submitted_values, $full_input_name);
1173
-                } else {
1174
-                    $submitted_values[ $subsection->html_name() ] = $subsection->raw_value();
1175
-                }
1176
-            } elseif ($subsection instanceof EE_Form_Section_Proper && $include_subforms) {
1177
-                $subform_input_values = $subsection->submitted_values($include_subforms);
1178
-                $submitted_values     = array_replace_recursive($submitted_values, $subform_input_values);
1179
-            }
1180
-        }
1181
-        return $submitted_values;
1182
-    }
1183
-
1184
-
1185
-    /**
1186
-     * Indicates whether or not this form has received a submission yet
1187
-     * (ie, had receive_form_submission called on it yet)
1188
-     *
1189
-     * @return boolean
1190
-     * @throws EE_Error
1191
-     */
1192
-    public function has_received_submission()
1193
-    {
1194
-        $this->ensure_construct_finalized_called();
1195
-        return $this->_received_submission;
1196
-    }
1197
-
1198
-
1199
-    /**
1200
-     * Equivalent to passing 'exclude' in the constructor's options array.
1201
-     * Removes the listed inputs from the form
1202
-     *
1203
-     * @param array $inputs_to_exclude values are the input names
1204
-     * @return void
1205
-     */
1206
-    public function exclude(array $inputs_to_exclude = array())
1207
-    {
1208
-        foreach ($inputs_to_exclude as $input_to_exclude_name) {
1209
-            unset($this->_subsections[ $input_to_exclude_name ]);
1210
-        }
1211
-    }
1212
-
1213
-
1214
-    /**
1215
-     * Changes these inputs' display strategy to be EE_Hidden_Display_Strategy.
1216
-     * @param array $inputs_to_hide
1217
-     * @throws EE_Error
1218
-     */
1219
-    public function hide(array $inputs_to_hide = array())
1220
-    {
1221
-        foreach ($inputs_to_hide as $input_to_hide) {
1222
-            $input = $this->get_input($input_to_hide);
1223
-            $input->set_display_strategy(new EE_Hidden_Display_Strategy());
1224
-        }
1225
-    }
1226
-
1227
-
1228
-    /**
1229
-     * add_subsections
1230
-     * Adds the listed subsections to the form section.
1231
-     * If $subsection_name_to_target is provided,
1232
-     * then new subsections are added before or after that subsection,
1233
-     * otherwise to the start or end of the entire subsections array.
1234
-     *
1235
-     * @param EE_Form_Section_Base[] $new_subsections           array of new form subsections
1236
-     *                                                          where keys are their names
1237
-     * @param string                 $subsection_name_to_target an existing for section that $new_subsections
1238
-     *                                                          should be added before or after
1239
-     *                                                          IF $subsection_name_to_target is null,
1240
-     *                                                          then $new_subsections will be added to
1241
-     *                                                          the beginning or end of the entire subsections array
1242
-     * @param boolean                $add_before                whether to add $new_subsections, before or after
1243
-     *                                                          $subsection_name_to_target,
1244
-     *                                                          or if $subsection_name_to_target is null,
1245
-     *                                                          before or after entire subsections array
1246
-     * @return void
1247
-     * @throws EE_Error
1248
-     */
1249
-    public function add_subsections($new_subsections, $subsection_name_to_target = null, $add_before = true)
1250
-    {
1251
-        foreach ($new_subsections as $subsection_name => $subsection) {
1252
-            if (! $subsection instanceof EE_Form_Section_Base) {
1253
-                EE_Error::add_error(
1254
-                    sprintf(
1255
-                        esc_html__(
1256
-                            "Trying to add a %s as a subsection (it was named '%s') to the form section '%s'. It was removed.",
1257
-                            'event_espresso'
1258
-                        ),
1259
-                        get_class($subsection),
1260
-                        $subsection_name,
1261
-                        $this->name()
1262
-                    )
1263
-                );
1264
-                unset($new_subsections[ $subsection_name ]);
1265
-            }
1266
-        }
1267
-        $this->_subsections = EEH_Array::insert_into_array(
1268
-            $this->_subsections,
1269
-            $new_subsections,
1270
-            $subsection_name_to_target,
1271
-            $add_before
1272
-        );
1273
-        if ($this->_construction_finalized) {
1274
-            foreach ($this->_subsections as $name => $subsection) {
1275
-                $subsection->_construct_finalize($this, $name);
1276
-            }
1277
-        }
1278
-    }
1279
-
1280
-
1281
-    /**
1282
-     * @param string $subsection_name
1283
-     * @param bool   $recursive
1284
-     * @return bool
1285
-     */
1286
-    public function has_subsection($subsection_name, $recursive = false)
1287
-    {
1288
-        foreach ($this->_subsections as $name => $subsection) {
1289
-            if (
1290
-                $name === $subsection_name
1291
-                || (
1292
-                    $recursive
1293
-                    && $subsection instanceof EE_Form_Section_Proper
1294
-                    && $subsection->has_subsection($subsection_name, $recursive)
1295
-                )
1296
-            ) {
1297
-                return true;
1298
-            }
1299
-        }
1300
-        return false;
1301
-    }
1302
-
1303
-
1304
-
1305
-    /**
1306
-     * Just gets all validatable subsections to clean their sensitive data
1307
-     *
1308
-     * @throws EE_Error
1309
-     */
1310
-    public function clean_sensitive_data()
1311
-    {
1312
-        foreach ($this->get_validatable_subsections() as $subsection) {
1313
-            $subsection->clean_sensitive_data();
1314
-        }
1315
-    }
1316
-
1317
-
1318
-    /**
1319
-     * Sets the submission error message (aka validation error message for this form section and all sub-sections)
1320
-     * @param string                           $form_submission_error_message
1321
-     * @param EE_Form_Section_Validatable $form_section unused
1322
-     * @throws EE_Error
1323
-     */
1324
-    public function set_submission_error_message(
1325
-        $form_submission_error_message = ''
1326
-    ) {
1327
-        $this->_form_submission_error_message = ! empty($form_submission_error_message)
1328
-            ? $form_submission_error_message
1329
-            : $this->getAllValidationErrorsString();
1330
-    }
1331
-
1332
-
1333
-    /**
1334
-     * Returns the cached error message. A default value is set for this during _validate(),
1335
-     * (called during receive_form_submission) but it can be explicitly set using
1336
-     * set_submission_error_message
1337
-     *
1338
-     * @return string
1339
-     */
1340
-    public function submission_error_message()
1341
-    {
1342
-        return $this->_form_submission_error_message;
1343
-    }
1344
-
1345
-
1346
-    /**
1347
-     * Sets a message to display if the data submitted to the form was valid.
1348
-     * @param string $form_submission_success_message
1349
-     */
1350
-    public function set_submission_success_message($form_submission_success_message = '')
1351
-    {
1352
-        $this->_form_submission_success_message = ! empty($form_submission_success_message)
1353
-            ? $form_submission_success_message
1354
-            : esc_html__('Form submitted successfully', 'event_espresso');
1355
-    }
1356
-
1357
-
1358
-    /**
1359
-     * Gets a message appropriate for display when the form is correctly submitted
1360
-     * @return string
1361
-     */
1362
-    public function submission_success_message()
1363
-    {
1364
-        return $this->_form_submission_success_message;
1365
-    }
1366
-
1367
-
1368
-    /**
1369
-     * Returns the prefix that should be used on child of this form section for
1370
-     * their html names. If this form section itself has a parent, prepends ITS
1371
-     * prefix onto this form section's prefix. Used primarily by
1372
-     * EE_Form_Input_Base::_set_default_html_name_if_empty
1373
-     *
1374
-     * @return string
1375
-     * @throws EE_Error
1376
-     */
1377
-    public function html_name_prefix()
1378
-    {
1379
-        if ($this->parent_section() instanceof EE_Form_Section_Proper) {
1380
-            return $this->parent_section()->html_name_prefix() . '[' . $this->name() . ']';
1381
-        }
1382
-        return $this->name();
1383
-    }
1384
-
1385
-
1386
-    /**
1387
-     * Gets the name, but first checks _construct_finalize has been called. If not,
1388
-     * calls it (assumes there is no parent and that we want the name to be whatever
1389
-     * was set, which is probably nothing, or the classname)
1390
-     *
1391
-     * @return string
1392
-     * @throws EE_Error
1393
-     */
1394
-    public function name()
1395
-    {
1396
-        $this->ensure_construct_finalized_called();
1397
-        return parent::name();
1398
-    }
1399
-
1400
-
1401
-    /**
1402
-     * @return EE_Form_Section_Proper
1403
-     * @throws EE_Error
1404
-     */
1405
-    public function parent_section()
1406
-    {
1407
-        $this->ensure_construct_finalized_called();
1408
-        return parent::parent_section();
1409
-    }
1410
-
1411
-
1412
-    /**
1413
-     * make sure construction finalized was called, otherwise children might not be ready
1414
-     *
1415
-     * @return void
1416
-     * @throws EE_Error
1417
-     */
1418
-    public function ensure_construct_finalized_called()
1419
-    {
1420
-        if (! $this->_construction_finalized) {
1421
-            $this->_construct_finalize($this->_parent_section, $this->_name);
1422
-        }
1423
-    }
1424
-
1425
-
1426
-    /**
1427
-     * Checks if any of this form section's inputs, or any of its children's inputs,
1428
-     * are in teh form data. If any are found, returns true. Else false
1429
-     *
1430
-     * @param array $req_data
1431
-     * @return boolean
1432
-     * @throws EE_Error
1433
-     */
1434
-    public function form_data_present_in($req_data = null)
1435
-    {
1436
-        $req_data = $this->getCachedRequest($req_data);
1437
-        foreach ($this->subsections() as $subsection) {
1438
-            if ($subsection instanceof EE_Form_Input_Base) {
1439
-                if ($subsection->form_data_present_in($req_data)) {
1440
-                    return true;
1441
-                }
1442
-            } elseif ($subsection instanceof EE_Form_Section_Proper) {
1443
-                if ($subsection->form_data_present_in($req_data)) {
1444
-                    return true;
1445
-                }
1446
-            }
1447
-        }
1448
-        return false;
1449
-    }
1450
-
1451
-
1452
-    /**
1453
-     * Gets validation errors for this form section and subsections
1454
-     * Similar to EE_Form_Section_Validatable::get_validation_errors() except this
1455
-     * gets the validation errors for ALL subsection
1456
-     *
1457
-     * @return EE_Validation_Error[]
1458
-     * @throws EE_Error
1459
-     */
1460
-    public function get_validation_errors_accumulated()
1461
-    {
1462
-        $validation_errors = $this->get_validation_errors();
1463
-        foreach ($this->get_validatable_subsections() as $subsection) {
1464
-            if ($subsection instanceof EE_Form_Section_Proper) {
1465
-                $validation_errors_on_this_subsection = $subsection->get_validation_errors_accumulated();
1466
-            } else {
1467
-                $validation_errors_on_this_subsection = $subsection->get_validation_errors();
1468
-            }
1469
-            if ($validation_errors_on_this_subsection) {
1470
-                $validation_errors = array_merge($validation_errors, $validation_errors_on_this_subsection);
1471
-            }
1472
-        }
1473
-        return $validation_errors;
1474
-    }
1475
-
1476
-    /**
1477
-     * Fetch validation errors from children and grandchildren and puts them in a single string.
1478
-     * This traverses the form section tree to generate this, but you probably want to instead use
1479
-     * get_form_submission_error_message() which is usually this message cached (or a custom validation error message)
1480
-     *
1481
-     * @return string
1482
-     * @since 4.9.59.p
1483
-     */
1484
-    protected function getAllValidationErrorsString()
1485
-    {
1486
-        $submission_error_messages = array();
1487
-        // bad, bad, bad registrant
1488
-        foreach ($this->get_validation_errors_accumulated() as $validation_error) {
1489
-            if ($validation_error instanceof EE_Validation_Error) {
1490
-                $form_section = $validation_error->get_form_section();
1491
-                if ($form_section instanceof EE_Form_Input_Base) {
1492
-                    $label = $validation_error->get_form_section()->html_label_text();
1493
-                } elseif ($form_section instanceof EE_Form_Section_Validatable) {
1494
-                    $label = $validation_error->get_form_section()->name();
1495
-                } else {
1496
-                    $label = esc_html__('Unknown', 'event_espresso');
1497
-                }
1498
-                $submission_error_messages[] = sprintf(
1499
-                    esc_html__('%s : %s', 'event_espresso'),
1500
-                    $label,
1501
-                    $validation_error->getMessage()
1502
-                );
1503
-            }
1504
-        }
1505
-        return implode('<br>', $submission_error_messages);
1506
-    }
1507
-
1508
-
1509
-    /**
1510
-     * This isn't just the name of an input, it's a path pointing to an input. The
1511
-     * path is similar to a folder path: slash (/) means to descend into a subsection,
1512
-     * dot-dot-slash (../) means to ascend into the parent section.
1513
-     * After a series of slashes and dot-dot-slashes, there should be the name of an input,
1514
-     * which will be returned.
1515
-     * Eg, if you want the related input to be conditional on a sibling input name 'foobar'
1516
-     * just use 'foobar'. If you want it to be conditional on an aunt/uncle input name
1517
-     * 'baz', use '../baz'. If you want it to be conditional on a cousin input,
1518
-     * the child of 'baz_section' named 'baz_child', use '../baz_section/baz_child'.
1519
-     * Etc
1520
-     *
1521
-     * @param string|false $form_section_path we accept false also because substr( '../', '../' ) = false
1522
-     * @return EE_Form_Section_Base
1523
-     * @throws EE_Error
1524
-     */
1525
-    public function find_section_from_path($form_section_path)
1526
-    {
1527
-        // check if we can find the input from purely going straight up the tree
1528
-        $input = parent::find_section_from_path($form_section_path);
1529
-        if ($input instanceof EE_Form_Section_Base) {
1530
-            return $input;
1531
-        }
1532
-        $next_slash_pos = strpos($form_section_path, '/');
1533
-        if ($next_slash_pos !== false) {
1534
-            $child_section_name = substr($form_section_path, 0, $next_slash_pos);
1535
-            $subpath            = substr($form_section_path, $next_slash_pos + 1);
1536
-        } else {
1537
-            $child_section_name = $form_section_path;
1538
-            $subpath            = '';
1539
-        }
1540
-        $child_section = $this->get_subsection($child_section_name);
1541
-        if ($child_section instanceof EE_Form_Section_Base) {
1542
-            return $child_section->find_section_from_path($subpath);
1543
-        }
1544
-        return null;
1545
-    }
18
+	const SUBMITTED_FORM_DATA_SSN_KEY = 'submitted_form_data';
19
+
20
+	/**
21
+	 * Subsections
22
+	 *
23
+	 * @var EE_Form_Section_Validatable[]
24
+	 */
25
+	protected $_subsections = array();
26
+
27
+	/**
28
+	 * Strategy for laying out the form
29
+	 *
30
+	 * @var EE_Form_Section_Layout_Base
31
+	 */
32
+	protected $_layout_strategy;
33
+
34
+	/**
35
+	 * Whether or not this form has received and validated a form submission yet
36
+	 *
37
+	 * @var boolean
38
+	 */
39
+	protected $_received_submission = false;
40
+
41
+	/**
42
+	 * message displayed to users upon successful form submission
43
+	 *
44
+	 * @var string
45
+	 */
46
+	protected $_form_submission_success_message = '';
47
+
48
+	/**
49
+	 * message displayed to users upon unsuccessful form submission
50
+	 *
51
+	 * @var string
52
+	 */
53
+	protected $_form_submission_error_message = '';
54
+
55
+	/**
56
+	 * @var array like post / request
57
+	 */
58
+	protected $cached_request_data;
59
+
60
+	/**
61
+	 * Stores whether this form (and its sub-sections) were found to be valid or not.
62
+	 * Starts off as null, but once the form is validated, it set to either true or false
63
+	 * @var boolean|null
64
+	 */
65
+	protected $is_valid;
66
+
67
+	/**
68
+	 * Stores all the data that will localized for form validation
69
+	 *
70
+	 * @var array
71
+	 */
72
+	protected static $_js_localization = array();
73
+
74
+	/**
75
+	 * whether or not the form's localized validation JS vars have been set
76
+	 *
77
+	 * @type boolean
78
+	 */
79
+	protected static $_scripts_localized = false;
80
+
81
+
82
+	/**
83
+	 * when constructing a proper form section, calls _construct_finalize on children
84
+	 * so that they know who their parent is, and what name they've been given.
85
+	 *
86
+	 * @param array[] $options_array   {
87
+	 * @type          $subsections     EE_Form_Section_Validatable[] where keys are the section's name
88
+	 * @type          $include         string[] numerically-indexed where values are section names to be included,
89
+	 *                                 and in that order. This is handy if you want
90
+	 *                                 the subsections to be ordered differently than the default, and if you override
91
+	 *                                 which fields are shown
92
+	 * @type          $exclude         string[] values are subsections to be excluded. This is handy if you want
93
+	 *                                 to remove certain default subsections (note: if you specify BOTH 'include' AND
94
+	 *                                 'exclude', the inclusions will be applied first, and the exclusions will exclude
95
+	 *                                 items from that list of inclusions)
96
+	 * @type          $layout_strategy EE_Form_Section_Layout_Base strategy for laying out the form
97
+	 *                                 } @see EE_Form_Section_Validatable::__construct()
98
+	 * @throws EE_Error
99
+	 */
100
+	public function __construct($options_array = array())
101
+	{
102
+		$options_array = (array) apply_filters(
103
+			'FHEE__EE_Form_Section_Proper___construct__options_array',
104
+			$options_array,
105
+			$this
106
+		);
107
+		// call parent first, as it may be setting the name
108
+		parent::__construct($options_array);
109
+		// if they've included subsections in the constructor, add them now
110
+		if (isset($options_array['include'])) {
111
+			// we are going to make sure we ONLY have those subsections to include
112
+			// AND we are going to make sure they're in that specified order
113
+			$reordered_subsections = array();
114
+			foreach ($options_array['include'] as $input_name) {
115
+				if (isset($this->_subsections[ $input_name ])) {
116
+					$reordered_subsections[ $input_name ] = $this->_subsections[ $input_name ];
117
+				}
118
+			}
119
+			$this->_subsections = $reordered_subsections;
120
+		}
121
+		if (isset($options_array['exclude'])) {
122
+			$exclude            = $options_array['exclude'];
123
+			$this->_subsections = array_diff_key($this->_subsections, array_flip($exclude));
124
+		}
125
+		if (isset($options_array['layout_strategy'])) {
126
+			$this->_layout_strategy = $options_array['layout_strategy'];
127
+		}
128
+		if (! $this->_layout_strategy) {
129
+			$this->_layout_strategy = is_admin() ? new EE_Admin_Two_Column_Layout() : new EE_Two_Column_Layout();
130
+		}
131
+		$this->_layout_strategy->_construct_finalize($this);
132
+		// ok so we are definitely going to want the forms JS,
133
+		// so enqueue it or remember to enqueue it during wp_enqueue_scripts
134
+		if (did_action('wp_enqueue_scripts') || did_action('admin_enqueue_scripts')) {
135
+			// ok so they've constructed this object after when they should have.
136
+			// just enqueue the generic form scripts and initialize the form immediately in the JS
137
+			EE_Form_Section_Proper::wp_enqueue_scripts(true);
138
+		} else {
139
+			add_action('wp_enqueue_scripts', array('EE_Form_Section_Proper', 'wp_enqueue_scripts'));
140
+			add_action('admin_enqueue_scripts', array('EE_Form_Section_Proper', 'wp_enqueue_scripts'));
141
+		}
142
+		add_action('wp_footer', array($this, 'ensure_scripts_localized'), 1);
143
+		/**
144
+		 * Gives other plugins a chance to hook in before construct finalize is called.
145
+		 * The form probably doesn't yet have a parent form section.
146
+		 * Since 4.9.32, when this action was introduced, this is the best place to add a subsection onto a form,
147
+		 * assuming you don't care what the form section's name, HTML ID, or HTML name etc are.
148
+		 * Also see AHEE__EE_Form_Section_Proper___construct_finalize__end
149
+		 *
150
+		 * @since 4.9.32
151
+		 * @param EE_Form_Section_Proper $this          before __construct is done, but all of its logic,
152
+		 *                                              except maybe calling _construct_finalize has been done
153
+		 * @param array                  $options_array options passed into the constructor
154
+		 */
155
+		do_action(
156
+			'AHEE__EE_Form_Input_Base___construct__before_construct_finalize_called',
157
+			$this,
158
+			$options_array
159
+		);
160
+		if (isset($options_array['name'])) {
161
+			$this->_construct_finalize(null, $options_array['name']);
162
+		}
163
+	}
164
+
165
+
166
+	/**
167
+	 * Finishes construction given the parent form section and this form section's name
168
+	 *
169
+	 * @param EE_Form_Section_Proper $parent_form_section
170
+	 * @param string                 $name
171
+	 * @throws EE_Error
172
+	 */
173
+	public function _construct_finalize($parent_form_section, $name)
174
+	{
175
+		parent::_construct_finalize($parent_form_section, $name);
176
+		$this->_set_default_name_if_empty();
177
+		$this->_set_default_html_id_if_empty();
178
+		foreach ($this->_subsections as $subsection_name => $subsection) {
179
+			if ($subsection instanceof EE_Form_Section_Base) {
180
+				$subsection->_construct_finalize($this, $subsection_name);
181
+			} else {
182
+				throw new EE_Error(
183
+					sprintf(
184
+						esc_html__(
185
+							'Subsection "%s" is not an instanceof EE_Form_Section_Base on form "%s". It is a "%s"',
186
+							'event_espresso'
187
+						),
188
+						$subsection_name,
189
+						get_class($this),
190
+						$subsection ? get_class($subsection) : esc_html__('NULL', 'event_espresso')
191
+					)
192
+				);
193
+			}
194
+		}
195
+		/**
196
+		 * Action performed just after form has been given a name (and HTML ID etc) and is fully constructed.
197
+		 * If you have code that should modify the form and needs it and its subsections to have a name, HTML ID
198
+		 * (or other attributes derived from the name like the HTML label id, etc), this is where it should be done.
199
+		 * This might only happen just before displaying the form, or just before it receives form submission data.
200
+		 * If you need to modify the form or its subsections before _construct_finalize is called on it (and we've
201
+		 * ensured it has a name, HTML IDs, etc
202
+		 *
203
+		 * @param EE_Form_Section_Proper      $this
204
+		 * @param EE_Form_Section_Proper|null $parent_form_section
205
+		 * @param string                      $name
206
+		 */
207
+		do_action(
208
+			'AHEE__EE_Form_Section_Proper___construct_finalize__end',
209
+			$this,
210
+			$parent_form_section,
211
+			$name
212
+		);
213
+	}
214
+
215
+
216
+	/**
217
+	 * Gets the layout strategy for this form section
218
+	 *
219
+	 * @return EE_Form_Section_Layout_Base
220
+	 */
221
+	public function get_layout_strategy()
222
+	{
223
+		return $this->_layout_strategy;
224
+	}
225
+
226
+
227
+	/**
228
+	 * Gets the HTML for a single input for this form section according
229
+	 * to the layout strategy
230
+	 *
231
+	 * @param EE_Form_Input_Base $input
232
+	 * @return string
233
+	 */
234
+	public function get_html_for_input($input)
235
+	{
236
+		return $this->_layout_strategy->layout_input($input);
237
+	}
238
+
239
+
240
+	/**
241
+	 * was_submitted - checks if form inputs are present in request data
242
+	 * Basically an alias for form_data_present_in() (which is used by both
243
+	 * proper form sections and form inputs)
244
+	 *
245
+	 * @param null $form_data
246
+	 * @return boolean
247
+	 * @throws EE_Error
248
+	 */
249
+	public function was_submitted($form_data = null)
250
+	{
251
+		return $this->form_data_present_in($form_data);
252
+	}
253
+
254
+	/**
255
+	 * Gets the cached request data; but if there is none, or $req_data was set with
256
+	 * something different, refresh the cache, and then return it
257
+	 * @param null $req_data
258
+	 * @return array
259
+	 */
260
+	protected function getCachedRequest($req_data = null)
261
+	{
262
+		if (
263
+			$this->cached_request_data === null
264
+			|| (
265
+				$req_data !== null
266
+				&& $req_data !== $this->cached_request_data
267
+			)
268
+		) {
269
+			$req_data = apply_filters(
270
+				'FHEE__EE_Form_Section_Proper__receive_form_submission__req_data',
271
+				$req_data,
272
+				$this
273
+			);
274
+			if ($req_data === null) {
275
+				/** @var RequestInterface $request */
276
+				$request = LoaderFactory::getLoader()->getShared(RequestInterface::class);
277
+				$req_data = $request->requestParams();
278
+			}
279
+			$req_data = apply_filters(
280
+				'FHEE__EE_Form_Section_Proper__receive_form_submission__request_data',
281
+				$req_data,
282
+				$this
283
+			);
284
+			$this->cached_request_data = (array) $req_data;
285
+		}
286
+		return $this->cached_request_data;
287
+	}
288
+
289
+
290
+	/**
291
+	 * After the form section is initially created, call this to sanitize the data in the submission
292
+	 * which relates to this form section, validate it, and set it as properties on the form.
293
+	 *
294
+	 * @param array|null $req_data should usually be post data (the default).
295
+	 *                             However, you CAN supply a different array.
296
+	 *                             Consider using set_defaults() instead however.
297
+	 *                             (If you rendered the form in the page using $form_x->get_html()
298
+	 *                             the inputs will have the correct name in the request data for this function
299
+	 *                             to find them and populate the form with them.
300
+	 *                             If you have a flat form (with only input subsections),
301
+	 *                             you can supply a flat array where keys
302
+	 *                             are the form input names and values are their values)
303
+	 * @param boolean    $validate whether or not to perform validation on this data. Default is,
304
+	 *                             of course, to validate that data, and set errors on the invalid values.
305
+	 *                             But if the data has already been validated
306
+	 *                             (eg you validated the data then stored it in the DB)
307
+	 *                             you may want to skip this step.
308
+	 * @throws InvalidArgumentException
309
+	 * @throws InvalidInterfaceException
310
+	 * @throws InvalidDataTypeException
311
+	 * @throws EE_Error
312
+	 */
313
+	public function receive_form_submission($req_data = null, $validate = true)
314
+	{
315
+		$req_data = $this->getCachedRequest($req_data);
316
+		$this->_normalize($req_data);
317
+		if ($validate) {
318
+			$this->_validate();
319
+			// if it's invalid, we're going to want to re-display so remember what they submitted
320
+			if (! $this->is_valid()) {
321
+				$this->store_submitted_form_data_in_session();
322
+			}
323
+		}
324
+		if ($this->submission_error_message() === '' && ! $this->is_valid()) {
325
+			$this->set_submission_error_message();
326
+		}
327
+		do_action(
328
+			'AHEE__EE_Form_Section_Proper__receive_form_submission__end',
329
+			$req_data,
330
+			$this,
331
+			$validate
332
+		);
333
+	}
334
+
335
+
336
+	/**
337
+	 * caches the originally submitted input values in the session
338
+	 * so that they can be used to repopulate the form if it failed validation
339
+	 *
340
+	 * @return boolean whether or not the data was successfully stored in the session
341
+	 * @throws InvalidArgumentException
342
+	 * @throws InvalidInterfaceException
343
+	 * @throws InvalidDataTypeException
344
+	 * @throws EE_Error
345
+	 */
346
+	protected function store_submitted_form_data_in_session()
347
+	{
348
+		return EE_Registry::instance()->SSN->set_session_data(
349
+			array(
350
+				EE_Form_Section_Proper::SUBMITTED_FORM_DATA_SSN_KEY => $this->submitted_values(true),
351
+			)
352
+		);
353
+	}
354
+
355
+
356
+	/**
357
+	 * retrieves the originally submitted input values in the session
358
+	 * so that they can be used to repopulate the form if it failed validation
359
+	 *
360
+	 * @return array
361
+	 * @throws InvalidArgumentException
362
+	 * @throws InvalidInterfaceException
363
+	 * @throws InvalidDataTypeException
364
+	 */
365
+	protected function get_submitted_form_data_from_session()
366
+	{
367
+		$session = EE_Registry::instance()->SSN;
368
+		if ($session instanceof EE_Session) {
369
+			return $session->get_session_data(
370
+				EE_Form_Section_Proper::SUBMITTED_FORM_DATA_SSN_KEY
371
+			);
372
+		}
373
+		return array();
374
+	}
375
+
376
+
377
+	/**
378
+	 * flushed the originally submitted input values from the session
379
+	 *
380
+	 * @return boolean whether or not the data was successfully removed from the session
381
+	 * @throws InvalidArgumentException
382
+	 * @throws InvalidInterfaceException
383
+	 * @throws InvalidDataTypeException
384
+	 */
385
+	public static function flush_submitted_form_data_from_session()
386
+	{
387
+		return EE_Registry::instance()->SSN->reset_data(
388
+			array(EE_Form_Section_Proper::SUBMITTED_FORM_DATA_SSN_KEY)
389
+		);
390
+	}
391
+
392
+
393
+	/**
394
+	 * Populates this form and its subsections with data from the session.
395
+	 * (Wrapper for EE_Form_Section_Proper::receive_form_submission, so it shows
396
+	 * validation errors when displaying too)
397
+	 * Returns true if the form was populated from the session, false otherwise
398
+	 *
399
+	 * @return boolean
400
+	 * @throws InvalidArgumentException
401
+	 * @throws InvalidInterfaceException
402
+	 * @throws InvalidDataTypeException
403
+	 * @throws EE_Error
404
+	 */
405
+	public function populate_from_session()
406
+	{
407
+		$form_data_in_session = $this->get_submitted_form_data_from_session();
408
+		if (empty($form_data_in_session)) {
409
+			return false;
410
+		}
411
+		$this->receive_form_submission($form_data_in_session);
412
+		add_action('shutdown', array('EE_Form_Section_Proper', 'flush_submitted_form_data_from_session'));
413
+		if ($this->form_data_present_in($form_data_in_session)) {
414
+			return true;
415
+		}
416
+		return false;
417
+	}
418
+
419
+
420
+	/**
421
+	 * Populates the default data for the form, given an array where keys are
422
+	 * the input names, and values are their values (preferably normalized to be their
423
+	 * proper PHP types, not all strings... although that should be ok too).
424
+	 * Proper subsections are sub-arrays, the key being the subsection's name, and
425
+	 * the value being an array formatted in teh same way
426
+	 *
427
+	 * @param array $default_data
428
+	 * @throws EE_Error
429
+	 */
430
+	public function populate_defaults($default_data)
431
+	{
432
+		foreach ($this->subsections(false) as $subsection_name => $subsection) {
433
+			if (isset($default_data[ $subsection_name ])) {
434
+				if ($subsection instanceof EE_Form_Input_Base) {
435
+					$subsection->set_default($default_data[ $subsection_name ]);
436
+				} elseif ($subsection instanceof EE_Form_Section_Proper) {
437
+					$subsection->populate_defaults($default_data[ $subsection_name ]);
438
+				}
439
+			}
440
+		}
441
+	}
442
+
443
+
444
+	/**
445
+	 * returns true if subsection exists
446
+	 *
447
+	 * @param string $name
448
+	 * @return boolean
449
+	 */
450
+	public function subsection_exists($name)
451
+	{
452
+		return isset($this->_subsections[ $name ]) ? true : false;
453
+	}
454
+
455
+
456
+	/**
457
+	 * Gets the subsection specified by its name
458
+	 *
459
+	 * @param string  $name
460
+	 * @param boolean $require_construction_to_be_finalized most client code should leave this as TRUE
461
+	 *                                                      so that the inputs will be properly configured.
462
+	 *                                                      However, some client code may be ok
463
+	 *                                                      with construction finalize being called later
464
+	 *                                                      (realizing that the subsections' html names
465
+	 *                                                      might not be set yet, etc.)
466
+	 * @return EE_Form_Section_Base
467
+	 * @throws EE_Error
468
+	 */
469
+	public function get_subsection($name, $require_construction_to_be_finalized = true)
470
+	{
471
+		if ($require_construction_to_be_finalized) {
472
+			$this->ensure_construct_finalized_called();
473
+		}
474
+		return $this->subsection_exists($name) ? $this->_subsections[ $name ] : null;
475
+	}
476
+
477
+
478
+	/**
479
+	 * Gets all the validatable subsections of this form section
480
+	 *
481
+	 * @return EE_Form_Section_Validatable[]
482
+	 * @throws EE_Error
483
+	 */
484
+	public function get_validatable_subsections()
485
+	{
486
+		$validatable_subsections = array();
487
+		foreach ($this->subsections() as $name => $obj) {
488
+			if ($obj instanceof EE_Form_Section_Validatable) {
489
+				$validatable_subsections[ $name ] = $obj;
490
+			}
491
+		}
492
+		return $validatable_subsections;
493
+	}
494
+
495
+
496
+	/**
497
+	 * Gets an input by the given name. If not found, or if its not an EE_FOrm_Input_Base child,
498
+	 * throw an EE_Error.
499
+	 *
500
+	 * @param string  $name
501
+	 * @param boolean $require_construction_to_be_finalized most client code should
502
+	 *                                                      leave this as TRUE so that the inputs will be properly
503
+	 *                                                      configured. However, some client code may be ok with
504
+	 *                                                      construction finalize being called later
505
+	 *                                                      (realizing that the subsections' html names might not be
506
+	 *                                                      set yet, etc.)
507
+	 * @return EE_Form_Input_Base
508
+	 * @throws EE_Error
509
+	 */
510
+	public function get_input($name, $require_construction_to_be_finalized = true)
511
+	{
512
+		$subsection = $this->get_subsection(
513
+			$name,
514
+			$require_construction_to_be_finalized
515
+		);
516
+		if (! $subsection instanceof EE_Form_Input_Base) {
517
+			throw new EE_Error(
518
+				sprintf(
519
+					esc_html__(
520
+						"Subsection '%s' is not an instanceof EE_Form_Input_Base on form '%s'. It is a '%s'",
521
+						'event_espresso'
522
+					),
523
+					$name,
524
+					get_class($this),
525
+					$subsection ? get_class($subsection) : esc_html__('NULL', 'event_espresso')
526
+				)
527
+			);
528
+		}
529
+		return $subsection;
530
+	}
531
+
532
+
533
+	/**
534
+	 * Like get_input(), gets the proper subsection of the form given the name,
535
+	 * otherwise throws an EE_Error
536
+	 *
537
+	 * @param string  $name
538
+	 * @param boolean $require_construction_to_be_finalized most client code should
539
+	 *                                                      leave this as TRUE so that the inputs will be properly
540
+	 *                                                      configured. However, some client code may be ok with
541
+	 *                                                      construction finalize being called later
542
+	 *                                                      (realizing that the subsections' html names might not be
543
+	 *                                                      set yet, etc.)
544
+	 * @return EE_Form_Section_Proper
545
+	 * @throws EE_Error
546
+	 */
547
+	public function get_proper_subsection($name, $require_construction_to_be_finalized = true)
548
+	{
549
+		$subsection = $this->get_subsection(
550
+			$name,
551
+			$require_construction_to_be_finalized
552
+		);
553
+		if (! $subsection instanceof EE_Form_Section_Proper) {
554
+			throw new EE_Error(
555
+				sprintf(
556
+					esc_html__(
557
+						"Subsection '%'s is not an instanceof EE_Form_Section_Proper on form '%s'",
558
+						'event_espresso'
559
+					),
560
+					$name,
561
+					get_class($this)
562
+				)
563
+			);
564
+		}
565
+		return $subsection;
566
+	}
567
+
568
+
569
+	/**
570
+	 * Gets the value of the specified input. Should be called after receive_form_submission()
571
+	 * or populate_defaults() on the form, where the normalized value on the input is set.
572
+	 *
573
+	 * @param string $name
574
+	 * @return mixed depending on the input's type and its normalization strategy
575
+	 * @throws EE_Error
576
+	 */
577
+	public function get_input_value($name)
578
+	{
579
+		$input = $this->get_input($name);
580
+		return $input->normalized_value();
581
+	}
582
+
583
+
584
+	/**
585
+	 * Checks if this form section itself is valid, and then checks its subsections
586
+	 *
587
+	 * @throws EE_Error
588
+	 * @return boolean
589
+	 */
590
+	public function is_valid()
591
+	{
592
+		if ($this->is_valid === null) {
593
+			if (! $this->has_received_submission()) {
594
+				throw new EE_Error(
595
+					sprintf(
596
+						esc_html__(
597
+							'You cannot check if a form is valid before receiving the form submission using receive_form_submission',
598
+							'event_espresso'
599
+						)
600
+					)
601
+				);
602
+			}
603
+			if (! parent::is_valid()) {
604
+				$this->is_valid = false;
605
+			} else {
606
+				// ok so no general errors to this entire form section.
607
+				// so let's check the subsections, but only set errors if that hasn't been done yet
608
+				$this->is_valid = true;
609
+				foreach ($this->get_validatable_subsections() as $subsection) {
610
+					if (! $subsection->is_valid()) {
611
+						$this->is_valid = false;
612
+					}
613
+				}
614
+			}
615
+		}
616
+		return $this->is_valid;
617
+	}
618
+
619
+
620
+	/**
621
+	 * gets the default name of this form section if none is specified
622
+	 *
623
+	 * @return void
624
+	 */
625
+	protected function _set_default_name_if_empty()
626
+	{
627
+		if (! $this->_name) {
628
+			$classname    = get_class($this);
629
+			$default_name = str_replace('EE_', '', $classname);
630
+			$this->_name  = $default_name;
631
+		}
632
+	}
633
+
634
+
635
+	/**
636
+	 * Returns the HTML for the form, except for the form opening and closing tags
637
+	 * (as the form section doesn't know where you necessarily want to send the information to),
638
+	 * and except for a submit button. Enqueues JS and CSS; if called early enough we will
639
+	 * try to enqueue them in the header, otherwise they'll be enqueued in the footer.
640
+	 * Not doing_it_wrong because theoretically this CAN be used properly,
641
+	 * provided its used during "wp_enqueue_scripts", or it doesn't need to enqueue
642
+	 * any CSS.
643
+	 *
644
+	 * @throws InvalidArgumentException
645
+	 * @throws InvalidInterfaceException
646
+	 * @throws InvalidDataTypeException
647
+	 * @throws EE_Error
648
+	 */
649
+	public function get_html_and_js()
650
+	{
651
+		$this->enqueue_js();
652
+		return $this->get_html();
653
+	}
654
+
655
+
656
+	/**
657
+	 * returns HTML for displaying this form section. recursively calls display_section() on all subsections
658
+	 *
659
+	 * @param bool $display_previously_submitted_data
660
+	 * @return string
661
+	 * @throws InvalidArgumentException
662
+	 * @throws InvalidInterfaceException
663
+	 * @throws InvalidDataTypeException
664
+	 * @throws EE_Error
665
+	 * @throws EE_Error
666
+	 * @throws EE_Error
667
+	 */
668
+	public function get_html($display_previously_submitted_data = true)
669
+	{
670
+		$this->ensure_construct_finalized_called();
671
+		if ($display_previously_submitted_data) {
672
+			$this->populate_from_session();
673
+		}
674
+		return $this->_form_html_filter
675
+			? $this->_form_html_filter->filterHtml($this->_layout_strategy->layout_form(), $this)
676
+			: $this->_layout_strategy->layout_form();
677
+	}
678
+
679
+
680
+	/**
681
+	 * enqueues JS and CSS for the form.
682
+	 * It is preferred to call this before wp_enqueue_scripts so the
683
+	 * scripts and styles can be put in the header, but if called later
684
+	 * they will be put in the footer (which is OK for JS, but in HTML4 CSS should
685
+	 * only be in the header; but in HTML5 its ok in the body.
686
+	 * See http://stackoverflow.com/questions/4957446/load-external-css-file-in-body-tag.
687
+	 * So if your form enqueues CSS, it's preferred to call this before wp_enqueue_scripts.)
688
+	 *
689
+	 * @return void
690
+	 * @throws EE_Error
691
+	 */
692
+	public function enqueue_js()
693
+	{
694
+		$this->_enqueue_and_localize_form_js();
695
+		foreach ($this->subsections() as $subsection) {
696
+			$subsection->enqueue_js();
697
+		}
698
+	}
699
+
700
+
701
+	/**
702
+	 * adds a filter so that jquery validate gets enqueued in EE_System::wp_enqueue_scripts().
703
+	 * This must be done BEFORE wp_enqueue_scripts() gets called, which is on
704
+	 * the wp_enqueue_scripts hook.
705
+	 * However, registering the form js and localizing it can happen when we
706
+	 * actually output the form (which is preferred, seeing how teh form's fields
707
+	 * could change until it's actually outputted)
708
+	 *
709
+	 * @param boolean $init_form_validation_automatically whether or not we want the form validation
710
+	 *                                                    to be triggered automatically or not
711
+	 * @return void
712
+	 */
713
+	public static function wp_enqueue_scripts($init_form_validation_automatically = true)
714
+	{
715
+		wp_register_script(
716
+			'ee_form_section_validation',
717
+			EE_GLOBAL_ASSETS_URL . 'scripts' . '/form_section_validation.js',
718
+			array('jquery-validate', 'jquery-ui-datepicker', 'jquery-validate-extra-methods'),
719
+			EVENT_ESPRESSO_VERSION,
720
+			true
721
+		);
722
+		wp_localize_script(
723
+			'ee_form_section_validation',
724
+			'ee_form_section_validation_init',
725
+			array('init' => $init_form_validation_automatically ? '1' : '0')
726
+		);
727
+	}
728
+
729
+
730
+	/**
731
+	 * gets the variables used by form_section_validation.js.
732
+	 * This needs to be called AFTER we've called $this->_enqueue_jquery_validate_script,
733
+	 * but before the wordpress hook wp_loaded
734
+	 *
735
+	 * @throws EE_Error
736
+	 */
737
+	public function _enqueue_and_localize_form_js()
738
+	{
739
+		$this->ensure_construct_finalized_called();
740
+		// actually, we don't want to localize just yet. There may be other forms on the page.
741
+		// so we need to add our form section data to a static variable accessible by all form sections
742
+		// and localize it just before the footer
743
+		$this->localize_validation_rules();
744
+		add_action('wp_footer', array('EE_Form_Section_Proper', 'localize_script_for_all_forms'), 2);
745
+		add_action('admin_footer', array('EE_Form_Section_Proper', 'localize_script_for_all_forms'));
746
+	}
747
+
748
+
749
+	/**
750
+	 * add our form section data to a static variable accessible by all form sections
751
+	 *
752
+	 * @param bool $return_for_subsection
753
+	 * @return void
754
+	 * @throws EE_Error
755
+	 */
756
+	public function localize_validation_rules($return_for_subsection = false)
757
+	{
758
+		// we only want to localize vars ONCE for the entire form,
759
+		// so if the form section doesn't have a parent, then it must be the top dog
760
+		if ($return_for_subsection || ! $this->parent_section()) {
761
+			EE_Form_Section_Proper::$_js_localization['form_data'][ $this->html_id() ] = array(
762
+				'form_section_id'  => $this->html_id(true),
763
+				'validation_rules' => $this->get_jquery_validation_rules(),
764
+				'other_data'       => $this->get_other_js_data(),
765
+				'errors'           => $this->subsection_validation_errors_by_html_name(),
766
+			);
767
+			EE_Form_Section_Proper::$_scripts_localized                                = true;
768
+		}
769
+	}
770
+
771
+
772
+	/**
773
+	 * Gets an array of extra data that will be useful for client-side javascript.
774
+	 * This is primarily data added by inputs and forms in addition to any
775
+	 * scripts they might enqueue
776
+	 *
777
+	 * @param array $form_other_js_data
778
+	 * @return array
779
+	 * @throws EE_Error
780
+	 */
781
+	public function get_other_js_data($form_other_js_data = array())
782
+	{
783
+		foreach ($this->subsections() as $subsection) {
784
+			$form_other_js_data = $subsection->get_other_js_data($form_other_js_data);
785
+		}
786
+		return $form_other_js_data;
787
+	}
788
+
789
+
790
+	/**
791
+	 * Gets a flat array of inputs for this form section and its subsections.
792
+	 * Keys are their form names, and values are the inputs themselves
793
+	 *
794
+	 * @return EE_Form_Input_Base
795
+	 * @throws EE_Error
796
+	 */
797
+	public function inputs_in_subsections()
798
+	{
799
+		$inputs = array();
800
+		foreach ($this->subsections() as $subsection) {
801
+			if ($subsection instanceof EE_Form_Input_Base) {
802
+				$inputs[ $subsection->html_name() ] = $subsection;
803
+			} elseif ($subsection instanceof EE_Form_Section_Proper) {
804
+				$inputs += $subsection->inputs_in_subsections();
805
+			}
806
+		}
807
+		return $inputs;
808
+	}
809
+
810
+
811
+	/**
812
+	 * Gets a flat array of all the validation errors.
813
+	 * Keys are html names (because those should be unique)
814
+	 * and values are a string of all their validation errors
815
+	 *
816
+	 * @return string[]
817
+	 * @throws EE_Error
818
+	 */
819
+	public function subsection_validation_errors_by_html_name()
820
+	{
821
+		$inputs = $this->inputs();
822
+		$errors = array();
823
+		foreach ($inputs as $form_input) {
824
+			if ($form_input instanceof EE_Form_Input_Base && $form_input->get_validation_errors()) {
825
+				$errors[ $form_input->html_name() ] = $form_input->get_validation_error_string();
826
+			}
827
+		}
828
+		return $errors;
829
+	}
830
+
831
+
832
+	/**
833
+	 * passes all the form data required by the JS to the JS, and enqueues the few required JS files.
834
+	 * Should be setup by each form during the _enqueues_and_localize_form_js
835
+	 *
836
+	 * @throws InvalidArgumentException
837
+	 * @throws InvalidInterfaceException
838
+	 * @throws InvalidDataTypeException
839
+	 */
840
+	public static function localize_script_for_all_forms()
841
+	{
842
+		// allow inputs and stuff to hook in their JS and stuff here
843
+		do_action('AHEE__EE_Form_Section_Proper__localize_script_for_all_forms__begin');
844
+		EE_Form_Section_Proper::$_js_localization['localized_error_messages'] = EE_Form_Section_Proper::_get_localized_error_messages();
845
+		$email_validation_level = isset(EE_Registry::instance()->CFG->registration->email_validation_level)
846
+			? EE_Registry::instance()->CFG->registration->email_validation_level
847
+			: 'wp_default';
848
+		EE_Form_Section_Proper::$_js_localization['email_validation_level']   = $email_validation_level;
849
+		wp_enqueue_script('ee_form_section_validation');
850
+		wp_localize_script(
851
+			'ee_form_section_validation',
852
+			'ee_form_section_vars',
853
+			EE_Form_Section_Proper::$_js_localization
854
+		);
855
+	}
856
+
857
+
858
+	/**
859
+	 * ensure_scripts_localized
860
+	 *
861
+	 * @throws EE_Error
862
+	 */
863
+	public function ensure_scripts_localized()
864
+	{
865
+		if (! EE_Form_Section_Proper::$_scripts_localized) {
866
+			$this->_enqueue_and_localize_form_js();
867
+		}
868
+	}
869
+
870
+
871
+	/**
872
+	 * Gets the hard-coded validation error messages to be used in the JS. The convention
873
+	 * is that the key here should be the same as the custom validation rule put in the JS file
874
+	 *
875
+	 * @return array keys are custom validation rules, and values are internationalized strings
876
+	 */
877
+	private static function _get_localized_error_messages()
878
+	{
879
+		return array(
880
+			'validUrl' => wp_strip_all_tags(__('This is not a valid absolute URL. Eg, http://domain.com/monkey.jpg', 'event_espresso')),
881
+			'regex'    => wp_strip_all_tags(__('Please check your input', 'event_espresso'))
882
+		);
883
+	}
884
+
885
+
886
+	/**
887
+	 * @return array
888
+	 */
889
+	public static function js_localization()
890
+	{
891
+		return self::$_js_localization;
892
+	}
893
+
894
+
895
+	/**
896
+	 * @return void
897
+	 */
898
+	public static function reset_js_localization()
899
+	{
900
+		self::$_js_localization = array();
901
+	}
902
+
903
+
904
+	/**
905
+	 * Gets the JS to put inside the jquery validation rules for subsection of this form section.
906
+	 * See parent function for more...
907
+	 *
908
+	 * @return array
909
+	 * @throws EE_Error
910
+	 */
911
+	public function get_jquery_validation_rules()
912
+	{
913
+		$jquery_validation_rules = array();
914
+		foreach ($this->get_validatable_subsections() as $subsection) {
915
+			$jquery_validation_rules = array_merge(
916
+				$jquery_validation_rules,
917
+				$subsection->get_jquery_validation_rules()
918
+			);
919
+		}
920
+		return $jquery_validation_rules;
921
+	}
922
+
923
+
924
+	/**
925
+	 * Sanitizes all the data and sets the sanitized value of each field
926
+	 *
927
+	 * @param array $req_data
928
+	 * @return void
929
+	 * @throws EE_Error
930
+	 */
931
+	protected function _normalize($req_data)
932
+	{
933
+		$this->_received_submission = true;
934
+		$this->_validation_errors   = array();
935
+		foreach ($this->get_validatable_subsections() as $subsection) {
936
+			try {
937
+				$subsection->_normalize($req_data);
938
+			} catch (EE_Validation_Error $e) {
939
+				$subsection->add_validation_error($e);
940
+			}
941
+		}
942
+	}
943
+
944
+
945
+	/**
946
+	 * Performs validation on this form section and its subsections.
947
+	 * For each subsection,
948
+	 * calls _validate_{subsection_name} on THIS form (if the function exists)
949
+	 * and passes it the subsection, then calls _validate on that subsection.
950
+	 * If you need to perform validation on the form as a whole (considering multiple)
951
+	 * you would be best to override this _validate method,
952
+	 * calling parent::_validate() first.
953
+	 *
954
+	 * @throws EE_Error
955
+	 */
956
+	protected function _validate()
957
+	{
958
+		// reset the cache of whether this form is valid or not- we're re-validating it now
959
+		$this->is_valid = null;
960
+		foreach ($this->get_validatable_subsections() as $subsection_name => $subsection) {
961
+			if (method_exists($this, '_validate_' . $subsection_name)) {
962
+				call_user_func_array(array($this, '_validate_' . $subsection_name), array($subsection));
963
+			}
964
+			$subsection->_validate();
965
+		}
966
+	}
967
+
968
+
969
+	/**
970
+	 * Gets all the validated inputs for the form section
971
+	 *
972
+	 * @return array
973
+	 * @throws EE_Error
974
+	 */
975
+	public function valid_data()
976
+	{
977
+		$inputs = array();
978
+		foreach ($this->subsections() as $subsection_name => $subsection) {
979
+			if ($subsection instanceof EE_Form_Section_Proper) {
980
+				$inputs[ $subsection_name ] = $subsection->valid_data();
981
+			} elseif ($subsection instanceof EE_Form_Input_Base) {
982
+				$inputs[ $subsection_name ] = $subsection->normalized_value();
983
+			}
984
+		}
985
+		return $inputs;
986
+	}
987
+
988
+
989
+	/**
990
+	 * Gets all the inputs on this form section
991
+	 *
992
+	 * @return EE_Form_Input_Base[]
993
+	 * @throws EE_Error
994
+	 */
995
+	public function inputs()
996
+	{
997
+		$inputs = array();
998
+		foreach ($this->subsections() as $subsection_name => $subsection) {
999
+			if ($subsection instanceof EE_Form_Input_Base) {
1000
+				$inputs[ $subsection_name ] = $subsection;
1001
+			}
1002
+		}
1003
+		return $inputs;
1004
+	}
1005
+
1006
+
1007
+	/**
1008
+	 * Gets all the subsections which are a proper form
1009
+	 *
1010
+	 * @return EE_Form_Section_Proper[]
1011
+	 * @throws EE_Error
1012
+	 */
1013
+	public function subforms()
1014
+	{
1015
+		$form_sections = array();
1016
+		foreach ($this->subsections() as $name => $obj) {
1017
+			if ($obj instanceof EE_Form_Section_Proper) {
1018
+				$form_sections[ $name ] = $obj;
1019
+			}
1020
+		}
1021
+		return $form_sections;
1022
+	}
1023
+
1024
+
1025
+	/**
1026
+	 * Gets all the subsections (inputs, proper subsections, or html-only sections).
1027
+	 * Consider using inputs() or subforms()
1028
+	 * if you only want form inputs or proper form sections.
1029
+	 *
1030
+	 * @param boolean $require_construction_to_be_finalized most client code should
1031
+	 *                                                      leave this as TRUE so that the inputs will be properly
1032
+	 *                                                      configured. However, some client code may be ok with
1033
+	 *                                                      construction finalize being called later
1034
+	 *                                                      (realizing that the subsections' html names might not be
1035
+	 *                                                      set yet, etc.)
1036
+	 * @return EE_Form_Section_Proper[]
1037
+	 * @throws EE_Error
1038
+	 */
1039
+	public function subsections($require_construction_to_be_finalized = true)
1040
+	{
1041
+		if ($require_construction_to_be_finalized) {
1042
+			$this->ensure_construct_finalized_called();
1043
+		}
1044
+		return $this->_subsections;
1045
+	}
1046
+
1047
+
1048
+	/**
1049
+	 * Returns whether this form has any subforms or inputs
1050
+	 * @return bool
1051
+	 */
1052
+	public function hasSubsections()
1053
+	{
1054
+		return ! empty($this->_subsections);
1055
+	}
1056
+
1057
+
1058
+	/**
1059
+	 * Returns a simple array where keys are input names, and values are their normalized
1060
+	 * values. (Similar to calling get_input_value on inputs)
1061
+	 *
1062
+	 * @param boolean $include_subform_inputs Whether to include inputs from subforms,
1063
+	 *                                        or just this forms' direct children inputs
1064
+	 * @param boolean $flatten                Whether to force the results into 1-dimensional array,
1065
+	 *                                        or allow multidimensional array
1066
+	 * @return array if $flatten is TRUE it will always be a 1-dimensional array
1067
+	 *                                        with array keys being input names
1068
+	 *                                        (regardless of whether they are from a subsection or not),
1069
+	 *                                        and if $flatten is FALSE it can be a multidimensional array
1070
+	 *                                        where keys are always subsection names and values are either
1071
+	 *                                        the input's normalized value, or an array like the top-level array
1072
+	 * @throws EE_Error
1073
+	 */
1074
+	public function input_values($include_subform_inputs = false, $flatten = false)
1075
+	{
1076
+		return $this->_input_values(false, $include_subform_inputs, $flatten);
1077
+	}
1078
+
1079
+
1080
+	/**
1081
+	 * Similar to EE_Form_Section_Proper::input_values(), except this returns the 'display_value'
1082
+	 * of each input. On some inputs (especially radio boxes or checkboxes), the value stored
1083
+	 * is not necessarily the value we want to display to users. This creates an array
1084
+	 * where keys are the input names, and values are their display values
1085
+	 *
1086
+	 * @param boolean $include_subform_inputs Whether to include inputs from subforms,
1087
+	 *                                        or just this forms' direct children inputs
1088
+	 * @param boolean $flatten                Whether to force the results into 1-dimensional array,
1089
+	 *                                        or allow multidimensional array
1090
+	 * @return array if $flatten is TRUE it will always be a 1-dimensional array
1091
+	 *                                        with array keys being input names
1092
+	 *                                        (regardless of whether they are from a subsection or not),
1093
+	 *                                        and if $flatten is FALSE it can be a multidimensional array
1094
+	 *                                        where keys are always subsection names and values are either
1095
+	 *                                        the input's normalized value, or an array like the top-level array
1096
+	 * @throws EE_Error
1097
+	 */
1098
+	public function input_pretty_values($include_subform_inputs = false, $flatten = false)
1099
+	{
1100
+		return $this->_input_values(true, $include_subform_inputs, $flatten);
1101
+	}
1102
+
1103
+
1104
+	/**
1105
+	 * Gets the input values from the form
1106
+	 *
1107
+	 * @param boolean $pretty                 Whether to retrieve the pretty value,
1108
+	 *                                        or just the normalized value
1109
+	 * @param boolean $include_subform_inputs Whether to include inputs from subforms,
1110
+	 *                                        or just this forms' direct children inputs
1111
+	 * @param boolean $flatten                Whether to force the results into 1-dimensional array,
1112
+	 *                                        or allow multidimensional array
1113
+	 * @return array if $flatten is TRUE it will always be a 1-dimensional array with array keys being
1114
+	 *                                        input names (regardless of whether they are from a subsection or not),
1115
+	 *                                        and if $flatten is FALSE it can be a multidimensional array
1116
+	 *                                        where keys are always subsection names and values are either
1117
+	 *                                        the input's normalized value, or an array like the top-level array
1118
+	 * @throws EE_Error
1119
+	 */
1120
+	public function _input_values($pretty = false, $include_subform_inputs = false, $flatten = false)
1121
+	{
1122
+		$input_values = array();
1123
+		foreach ($this->subsections() as $subsection_name => $subsection) {
1124
+			if ($subsection instanceof EE_Form_Input_Base) {
1125
+				$input_values[ $subsection_name ] = $pretty
1126
+					? $subsection->pretty_value()
1127
+					: $subsection->normalized_value();
1128
+			} elseif ($subsection instanceof EE_Form_Section_Proper && $include_subform_inputs) {
1129
+				$subform_input_values = $subsection->_input_values(
1130
+					$pretty,
1131
+					$include_subform_inputs,
1132
+					$flatten
1133
+				);
1134
+				if ($flatten) {
1135
+					$input_values = array_merge($input_values, $subform_input_values);
1136
+				} else {
1137
+					$input_values[ $subsection_name ] = $subform_input_values;
1138
+				}
1139
+			}
1140
+		}
1141
+		return $input_values;
1142
+	}
1143
+
1144
+
1145
+	/**
1146
+	 * Gets the originally submitted input values from the form
1147
+	 *
1148
+	 * @param boolean $include_subforms  Whether to include inputs from subforms,
1149
+	 *                                   or just this forms' direct children inputs
1150
+	 * @return array                     if $flatten is TRUE it will always be a 1-dimensional array
1151
+	 *                                   with array keys being input names
1152
+	 *                                   (regardless of whether they are from a subsection or not),
1153
+	 *                                   and if $flatten is FALSE it can be a multidimensional array
1154
+	 *                                   where keys are always subsection names and values are either
1155
+	 *                                   the input's normalized value, or an array like the top-level array
1156
+	 * @throws EE_Error
1157
+	 */
1158
+	public function submitted_values($include_subforms = false)
1159
+	{
1160
+		$submitted_values = array();
1161
+		foreach ($this->subsections() as $subsection) {
1162
+			if ($subsection instanceof EE_Form_Input_Base) {
1163
+				// is this input part of an array of inputs?
1164
+				if (strpos($subsection->html_name(), '[') !== false) {
1165
+					$full_input_name  = EEH_Array::convert_array_values_to_keys(
1166
+						explode(
1167
+							'[',
1168
+							str_replace(']', '', $subsection->html_name())
1169
+						),
1170
+						$subsection->raw_value()
1171
+					);
1172
+					$submitted_values = array_replace_recursive($submitted_values, $full_input_name);
1173
+				} else {
1174
+					$submitted_values[ $subsection->html_name() ] = $subsection->raw_value();
1175
+				}
1176
+			} elseif ($subsection instanceof EE_Form_Section_Proper && $include_subforms) {
1177
+				$subform_input_values = $subsection->submitted_values($include_subforms);
1178
+				$submitted_values     = array_replace_recursive($submitted_values, $subform_input_values);
1179
+			}
1180
+		}
1181
+		return $submitted_values;
1182
+	}
1183
+
1184
+
1185
+	/**
1186
+	 * Indicates whether or not this form has received a submission yet
1187
+	 * (ie, had receive_form_submission called on it yet)
1188
+	 *
1189
+	 * @return boolean
1190
+	 * @throws EE_Error
1191
+	 */
1192
+	public function has_received_submission()
1193
+	{
1194
+		$this->ensure_construct_finalized_called();
1195
+		return $this->_received_submission;
1196
+	}
1197
+
1198
+
1199
+	/**
1200
+	 * Equivalent to passing 'exclude' in the constructor's options array.
1201
+	 * Removes the listed inputs from the form
1202
+	 *
1203
+	 * @param array $inputs_to_exclude values are the input names
1204
+	 * @return void
1205
+	 */
1206
+	public function exclude(array $inputs_to_exclude = array())
1207
+	{
1208
+		foreach ($inputs_to_exclude as $input_to_exclude_name) {
1209
+			unset($this->_subsections[ $input_to_exclude_name ]);
1210
+		}
1211
+	}
1212
+
1213
+
1214
+	/**
1215
+	 * Changes these inputs' display strategy to be EE_Hidden_Display_Strategy.
1216
+	 * @param array $inputs_to_hide
1217
+	 * @throws EE_Error
1218
+	 */
1219
+	public function hide(array $inputs_to_hide = array())
1220
+	{
1221
+		foreach ($inputs_to_hide as $input_to_hide) {
1222
+			$input = $this->get_input($input_to_hide);
1223
+			$input->set_display_strategy(new EE_Hidden_Display_Strategy());
1224
+		}
1225
+	}
1226
+
1227
+
1228
+	/**
1229
+	 * add_subsections
1230
+	 * Adds the listed subsections to the form section.
1231
+	 * If $subsection_name_to_target is provided,
1232
+	 * then new subsections are added before or after that subsection,
1233
+	 * otherwise to the start or end of the entire subsections array.
1234
+	 *
1235
+	 * @param EE_Form_Section_Base[] $new_subsections           array of new form subsections
1236
+	 *                                                          where keys are their names
1237
+	 * @param string                 $subsection_name_to_target an existing for section that $new_subsections
1238
+	 *                                                          should be added before or after
1239
+	 *                                                          IF $subsection_name_to_target is null,
1240
+	 *                                                          then $new_subsections will be added to
1241
+	 *                                                          the beginning or end of the entire subsections array
1242
+	 * @param boolean                $add_before                whether to add $new_subsections, before or after
1243
+	 *                                                          $subsection_name_to_target,
1244
+	 *                                                          or if $subsection_name_to_target is null,
1245
+	 *                                                          before or after entire subsections array
1246
+	 * @return void
1247
+	 * @throws EE_Error
1248
+	 */
1249
+	public function add_subsections($new_subsections, $subsection_name_to_target = null, $add_before = true)
1250
+	{
1251
+		foreach ($new_subsections as $subsection_name => $subsection) {
1252
+			if (! $subsection instanceof EE_Form_Section_Base) {
1253
+				EE_Error::add_error(
1254
+					sprintf(
1255
+						esc_html__(
1256
+							"Trying to add a %s as a subsection (it was named '%s') to the form section '%s'. It was removed.",
1257
+							'event_espresso'
1258
+						),
1259
+						get_class($subsection),
1260
+						$subsection_name,
1261
+						$this->name()
1262
+					)
1263
+				);
1264
+				unset($new_subsections[ $subsection_name ]);
1265
+			}
1266
+		}
1267
+		$this->_subsections = EEH_Array::insert_into_array(
1268
+			$this->_subsections,
1269
+			$new_subsections,
1270
+			$subsection_name_to_target,
1271
+			$add_before
1272
+		);
1273
+		if ($this->_construction_finalized) {
1274
+			foreach ($this->_subsections as $name => $subsection) {
1275
+				$subsection->_construct_finalize($this, $name);
1276
+			}
1277
+		}
1278
+	}
1279
+
1280
+
1281
+	/**
1282
+	 * @param string $subsection_name
1283
+	 * @param bool   $recursive
1284
+	 * @return bool
1285
+	 */
1286
+	public function has_subsection($subsection_name, $recursive = false)
1287
+	{
1288
+		foreach ($this->_subsections as $name => $subsection) {
1289
+			if (
1290
+				$name === $subsection_name
1291
+				|| (
1292
+					$recursive
1293
+					&& $subsection instanceof EE_Form_Section_Proper
1294
+					&& $subsection->has_subsection($subsection_name, $recursive)
1295
+				)
1296
+			) {
1297
+				return true;
1298
+			}
1299
+		}
1300
+		return false;
1301
+	}
1302
+
1303
+
1304
+
1305
+	/**
1306
+	 * Just gets all validatable subsections to clean their sensitive data
1307
+	 *
1308
+	 * @throws EE_Error
1309
+	 */
1310
+	public function clean_sensitive_data()
1311
+	{
1312
+		foreach ($this->get_validatable_subsections() as $subsection) {
1313
+			$subsection->clean_sensitive_data();
1314
+		}
1315
+	}
1316
+
1317
+
1318
+	/**
1319
+	 * Sets the submission error message (aka validation error message for this form section and all sub-sections)
1320
+	 * @param string                           $form_submission_error_message
1321
+	 * @param EE_Form_Section_Validatable $form_section unused
1322
+	 * @throws EE_Error
1323
+	 */
1324
+	public function set_submission_error_message(
1325
+		$form_submission_error_message = ''
1326
+	) {
1327
+		$this->_form_submission_error_message = ! empty($form_submission_error_message)
1328
+			? $form_submission_error_message
1329
+			: $this->getAllValidationErrorsString();
1330
+	}
1331
+
1332
+
1333
+	/**
1334
+	 * Returns the cached error message. A default value is set for this during _validate(),
1335
+	 * (called during receive_form_submission) but it can be explicitly set using
1336
+	 * set_submission_error_message
1337
+	 *
1338
+	 * @return string
1339
+	 */
1340
+	public function submission_error_message()
1341
+	{
1342
+		return $this->_form_submission_error_message;
1343
+	}
1344
+
1345
+
1346
+	/**
1347
+	 * Sets a message to display if the data submitted to the form was valid.
1348
+	 * @param string $form_submission_success_message
1349
+	 */
1350
+	public function set_submission_success_message($form_submission_success_message = '')
1351
+	{
1352
+		$this->_form_submission_success_message = ! empty($form_submission_success_message)
1353
+			? $form_submission_success_message
1354
+			: esc_html__('Form submitted successfully', 'event_espresso');
1355
+	}
1356
+
1357
+
1358
+	/**
1359
+	 * Gets a message appropriate for display when the form is correctly submitted
1360
+	 * @return string
1361
+	 */
1362
+	public function submission_success_message()
1363
+	{
1364
+		return $this->_form_submission_success_message;
1365
+	}
1366
+
1367
+
1368
+	/**
1369
+	 * Returns the prefix that should be used on child of this form section for
1370
+	 * their html names. If this form section itself has a parent, prepends ITS
1371
+	 * prefix onto this form section's prefix. Used primarily by
1372
+	 * EE_Form_Input_Base::_set_default_html_name_if_empty
1373
+	 *
1374
+	 * @return string
1375
+	 * @throws EE_Error
1376
+	 */
1377
+	public function html_name_prefix()
1378
+	{
1379
+		if ($this->parent_section() instanceof EE_Form_Section_Proper) {
1380
+			return $this->parent_section()->html_name_prefix() . '[' . $this->name() . ']';
1381
+		}
1382
+		return $this->name();
1383
+	}
1384
+
1385
+
1386
+	/**
1387
+	 * Gets the name, but first checks _construct_finalize has been called. If not,
1388
+	 * calls it (assumes there is no parent and that we want the name to be whatever
1389
+	 * was set, which is probably nothing, or the classname)
1390
+	 *
1391
+	 * @return string
1392
+	 * @throws EE_Error
1393
+	 */
1394
+	public function name()
1395
+	{
1396
+		$this->ensure_construct_finalized_called();
1397
+		return parent::name();
1398
+	}
1399
+
1400
+
1401
+	/**
1402
+	 * @return EE_Form_Section_Proper
1403
+	 * @throws EE_Error
1404
+	 */
1405
+	public function parent_section()
1406
+	{
1407
+		$this->ensure_construct_finalized_called();
1408
+		return parent::parent_section();
1409
+	}
1410
+
1411
+
1412
+	/**
1413
+	 * make sure construction finalized was called, otherwise children might not be ready
1414
+	 *
1415
+	 * @return void
1416
+	 * @throws EE_Error
1417
+	 */
1418
+	public function ensure_construct_finalized_called()
1419
+	{
1420
+		if (! $this->_construction_finalized) {
1421
+			$this->_construct_finalize($this->_parent_section, $this->_name);
1422
+		}
1423
+	}
1424
+
1425
+
1426
+	/**
1427
+	 * Checks if any of this form section's inputs, or any of its children's inputs,
1428
+	 * are in teh form data. If any are found, returns true. Else false
1429
+	 *
1430
+	 * @param array $req_data
1431
+	 * @return boolean
1432
+	 * @throws EE_Error
1433
+	 */
1434
+	public function form_data_present_in($req_data = null)
1435
+	{
1436
+		$req_data = $this->getCachedRequest($req_data);
1437
+		foreach ($this->subsections() as $subsection) {
1438
+			if ($subsection instanceof EE_Form_Input_Base) {
1439
+				if ($subsection->form_data_present_in($req_data)) {
1440
+					return true;
1441
+				}
1442
+			} elseif ($subsection instanceof EE_Form_Section_Proper) {
1443
+				if ($subsection->form_data_present_in($req_data)) {
1444
+					return true;
1445
+				}
1446
+			}
1447
+		}
1448
+		return false;
1449
+	}
1450
+
1451
+
1452
+	/**
1453
+	 * Gets validation errors for this form section and subsections
1454
+	 * Similar to EE_Form_Section_Validatable::get_validation_errors() except this
1455
+	 * gets the validation errors for ALL subsection
1456
+	 *
1457
+	 * @return EE_Validation_Error[]
1458
+	 * @throws EE_Error
1459
+	 */
1460
+	public function get_validation_errors_accumulated()
1461
+	{
1462
+		$validation_errors = $this->get_validation_errors();
1463
+		foreach ($this->get_validatable_subsections() as $subsection) {
1464
+			if ($subsection instanceof EE_Form_Section_Proper) {
1465
+				$validation_errors_on_this_subsection = $subsection->get_validation_errors_accumulated();
1466
+			} else {
1467
+				$validation_errors_on_this_subsection = $subsection->get_validation_errors();
1468
+			}
1469
+			if ($validation_errors_on_this_subsection) {
1470
+				$validation_errors = array_merge($validation_errors, $validation_errors_on_this_subsection);
1471
+			}
1472
+		}
1473
+		return $validation_errors;
1474
+	}
1475
+
1476
+	/**
1477
+	 * Fetch validation errors from children and grandchildren and puts them in a single string.
1478
+	 * This traverses the form section tree to generate this, but you probably want to instead use
1479
+	 * get_form_submission_error_message() which is usually this message cached (or a custom validation error message)
1480
+	 *
1481
+	 * @return string
1482
+	 * @since 4.9.59.p
1483
+	 */
1484
+	protected function getAllValidationErrorsString()
1485
+	{
1486
+		$submission_error_messages = array();
1487
+		// bad, bad, bad registrant
1488
+		foreach ($this->get_validation_errors_accumulated() as $validation_error) {
1489
+			if ($validation_error instanceof EE_Validation_Error) {
1490
+				$form_section = $validation_error->get_form_section();
1491
+				if ($form_section instanceof EE_Form_Input_Base) {
1492
+					$label = $validation_error->get_form_section()->html_label_text();
1493
+				} elseif ($form_section instanceof EE_Form_Section_Validatable) {
1494
+					$label = $validation_error->get_form_section()->name();
1495
+				} else {
1496
+					$label = esc_html__('Unknown', 'event_espresso');
1497
+				}
1498
+				$submission_error_messages[] = sprintf(
1499
+					esc_html__('%s : %s', 'event_espresso'),
1500
+					$label,
1501
+					$validation_error->getMessage()
1502
+				);
1503
+			}
1504
+		}
1505
+		return implode('<br>', $submission_error_messages);
1506
+	}
1507
+
1508
+
1509
+	/**
1510
+	 * This isn't just the name of an input, it's a path pointing to an input. The
1511
+	 * path is similar to a folder path: slash (/) means to descend into a subsection,
1512
+	 * dot-dot-slash (../) means to ascend into the parent section.
1513
+	 * After a series of slashes and dot-dot-slashes, there should be the name of an input,
1514
+	 * which will be returned.
1515
+	 * Eg, if you want the related input to be conditional on a sibling input name 'foobar'
1516
+	 * just use 'foobar'. If you want it to be conditional on an aunt/uncle input name
1517
+	 * 'baz', use '../baz'. If you want it to be conditional on a cousin input,
1518
+	 * the child of 'baz_section' named 'baz_child', use '../baz_section/baz_child'.
1519
+	 * Etc
1520
+	 *
1521
+	 * @param string|false $form_section_path we accept false also because substr( '../', '../' ) = false
1522
+	 * @return EE_Form_Section_Base
1523
+	 * @throws EE_Error
1524
+	 */
1525
+	public function find_section_from_path($form_section_path)
1526
+	{
1527
+		// check if we can find the input from purely going straight up the tree
1528
+		$input = parent::find_section_from_path($form_section_path);
1529
+		if ($input instanceof EE_Form_Section_Base) {
1530
+			return $input;
1531
+		}
1532
+		$next_slash_pos = strpos($form_section_path, '/');
1533
+		if ($next_slash_pos !== false) {
1534
+			$child_section_name = substr($form_section_path, 0, $next_slash_pos);
1535
+			$subpath            = substr($form_section_path, $next_slash_pos + 1);
1536
+		} else {
1537
+			$child_section_name = $form_section_path;
1538
+			$subpath            = '';
1539
+		}
1540
+		$child_section = $this->get_subsection($child_section_name);
1541
+		if ($child_section instanceof EE_Form_Section_Base) {
1542
+			return $child_section->find_section_from_path($subpath);
1543
+		}
1544
+		return null;
1545
+	}
1546 1546
 }
Please login to merge, or discard this patch.
modules/venue_single/EED_Venue_Single.module.php 2 patches
Spacing   +5 added lines, -5 removed lines patch added patch discarded remove patch
@@ -162,7 +162,7 @@  discard block
 block discarded – undo
162 162
      */
163 163
     public function venue_location($content)
164 164
     {
165
-        return $content . EEH_Template::locate_template('content-espresso_venues-location.php');
165
+        return $content.EEH_Template::locate_template('content-espresso_venues-location.php');
166 166
     }
167 167
 
168 168
 
@@ -177,16 +177,16 @@  discard block
 block discarded – undo
177 177
         // get some style
178 178
         if (apply_filters('FHEE_enable_default_espresso_css', true) && is_single()) {
179 179
             // first check theme folder
180
-            if (is_readable(get_stylesheet_directory() . $this->theme . '/style.css')) {
180
+            if (is_readable(get_stylesheet_directory().$this->theme.'/style.css')) {
181 181
                 wp_register_style(
182 182
                     $this->theme,
183
-                    get_stylesheet_directory_uri() . $this->theme . '/style.css',
183
+                    get_stylesheet_directory_uri().$this->theme.'/style.css',
184 184
                     array('dashicons', 'espresso_default')
185 185
                 );
186
-            } elseif (is_readable(EE_TEMPLATES . $this->theme . '/style.css')) {
186
+            } elseif (is_readable(EE_TEMPLATES.$this->theme.'/style.css')) {
187 187
                 wp_register_style(
188 188
                     $this->theme,
189
-                    EE_TEMPLATES_URL . $this->theme . '/style.css',
189
+                    EE_TEMPLATES_URL.$this->theme.'/style.css',
190 190
                     array('dashicons', 'espresso_default')
191 191
                 );
192 192
             }
Please login to merge, or discard this patch.
Indentation   +169 added lines, -169 removed lines patch added patch discarded remove patch
@@ -28,173 +28,173 @@
 block discarded – undo
28 28
  */
29 29
 class EED_Venue_Single extends EED_Module
30 30
 {
31
-    /**
32
-     * @return EED_Venue_Single
33
-     */
34
-    public static function instance()
35
-    {
36
-        return parent::get_instance(__CLASS__);
37
-    }
38
-
39
-
40
-    /**
41
-     * set_hooks - for hooking into EE Core, other modules, etc
42
-     *
43
-     * @return void
44
-     * @throws InvalidArgumentException
45
-     * @throws InvalidDataTypeException
46
-     * @throws InvalidInterfaceException
47
-     */
48
-    public static function set_hooks()
49
-    {
50
-        /** @var EventEspresso\core\domain\entities\custom_post_types\CustomPostTypeDefinitions $custom_post_type_definitions */
51
-        $custom_post_type_definitions = LoaderFactory::getLoader()->getShared(
52
-            'EventEspresso\core\domain\entities\custom_post_types\CustomPostTypeDefinitions'
53
-        );
54
-        $custom_post_types = $custom_post_type_definitions->getDefinitions();
55
-        EE_Config::register_route(
56
-            $custom_post_types['espresso_venues']['singular_slug'],
57
-            'Venue_Single',
58
-            'run'
59
-        );
60
-    }
61
-
62
-    /**
63
-     *    set_hooks_admin - for hooking into EE Admin Core, other modules, etc
64
-     *
65
-     * @access    public
66
-     * @return    void
67
-     */
68
-    public static function set_hooks_admin()
69
-    {
70
-    }
71
-
72
-
73
-    /**
74
-     * run - initial module setup
75
-     *
76
-     * @access    public
77
-     * @param \WP $WP
78
-     */
79
-    public function run($WP)
80
-    {
81
-        // check what template is loaded
82
-        add_filter('template_include', array($this, 'template_include'), 999, 1);
83
-        add_action('wp_enqueue_scripts', array($this, 'wp_enqueue_scripts'), 10);
84
-    }
85
-
86
-
87
-    /**
88
-     * template_include
89
-     *
90
-     * @access public
91
-     * @param  string $template
92
-     * @return string
93
-     */
94
-    public function template_include($template)
95
-    {
96
-        // not a custom template?
97
-        if (
98
-            EE_Registry::instance()
99
-                       ->load_core('Front_Controller', array(), false, true)
100
-                       ->get_selected_template() != 'single-espresso_venues.php'
101
-        ) {
102
-            EEH_Template::load_espresso_theme_functions();
103
-            // then add extra event data via hooks
104
-            add_filter('the_title', array($this, 'the_title'), 100, 1);
105
-            add_filter('the_content', array($this, 'venue_details'), 100);
106
-            // don't display entry meta because the existing theme will take car of that
107
-            add_filter('FHEE__content_espresso_venues_details_template__display_entry_meta', '__return_false');
108
-        }
109
-        return $template;
110
-    }
111
-
112
-
113
-    /**
114
-     * the_title
115
-     *
116
-     * @access public
117
-     * @param  string $title
118
-     * @return string
119
-     */
120
-    public function the_title($title = '')
121
-    {
122
-        return $title;
123
-    }
124
-
125
-
126
-    /**
127
-     *    venue_details
128
-     *
129
-     * @access public
130
-     * @param  string $content
131
-     * @return string
132
-     */
133
-    public function venue_details($content)
134
-    {
135
-        global $post;
136
-        if (
137
-            $post->post_type == 'espresso_venues'
138
-            && ! post_password_required()
139
-        ) {
140
-            // since the 'content-espresso_venues-details.php' template might be used directly from within a theme,
141
-            // it uses the_content() for displaying the $post->post_content
142
-            // so in order to load a template that uses the_content() from within a callback being used to filter the_content(),
143
-            // we need to first remove this callback from being applied to the_content() (otherwise it will recurse and blow up the interweb)
144
-            remove_filter('the_content', array($this, 'venue_details'), 100);
145
-            // add filters we want
146
-            add_filter('the_content', array($this, 'venue_location'), 110);
147
-            // now load our template
148
-            $template = EEH_Template::locate_template('content-espresso_venues-details.php');
149
-            // remove other filters we added so they won't get applied to the next post
150
-            remove_filter('the_content', array($this, 'venue_location'), 110);
151
-        }
152
-        // we're not returning the $content directly because the template we are loading uses the_content (or the_excerpt)
153
-        return ! empty($template) ? $template : $content;
154
-    }
155
-
156
-
157
-    /**
158
-     * venue_location
159
-     *
160
-     * @access public
161
-     * @param  string $content
162
-     * @return string
163
-     */
164
-    public function venue_location($content)
165
-    {
166
-        return $content . EEH_Template::locate_template('content-espresso_venues-location.php');
167
-    }
168
-
169
-
170
-    /**
171
-     *    wp_enqueue_scripts
172
-     *
173
-     * @access public
174
-     * @return void
175
-     */
176
-    public function wp_enqueue_scripts()
177
-    {
178
-        // get some style
179
-        if (apply_filters('FHEE_enable_default_espresso_css', true) && is_single()) {
180
-            // first check theme folder
181
-            if (is_readable(get_stylesheet_directory() . $this->theme . '/style.css')) {
182
-                wp_register_style(
183
-                    $this->theme,
184
-                    get_stylesheet_directory_uri() . $this->theme . '/style.css',
185
-                    array('dashicons', 'espresso_default')
186
-                );
187
-            } elseif (is_readable(EE_TEMPLATES . $this->theme . '/style.css')) {
188
-                wp_register_style(
189
-                    $this->theme,
190
-                    EE_TEMPLATES_URL . $this->theme . '/style.css',
191
-                    array('dashicons', 'espresso_default')
192
-                );
193
-            }
194
-            wp_enqueue_style($this->theme);
195
-            if (EE_Registry::instance()->CFG->map_settings->use_google_maps) {
196
-                add_action('wp_enqueue_scripts', array('EEH_Maps', 'espresso_google_map_js'), 11);
197
-            }
198
-        }
199
-    }
31
+	/**
32
+	 * @return EED_Venue_Single
33
+	 */
34
+	public static function instance()
35
+	{
36
+		return parent::get_instance(__CLASS__);
37
+	}
38
+
39
+
40
+	/**
41
+	 * set_hooks - for hooking into EE Core, other modules, etc
42
+	 *
43
+	 * @return void
44
+	 * @throws InvalidArgumentException
45
+	 * @throws InvalidDataTypeException
46
+	 * @throws InvalidInterfaceException
47
+	 */
48
+	public static function set_hooks()
49
+	{
50
+		/** @var EventEspresso\core\domain\entities\custom_post_types\CustomPostTypeDefinitions $custom_post_type_definitions */
51
+		$custom_post_type_definitions = LoaderFactory::getLoader()->getShared(
52
+			'EventEspresso\core\domain\entities\custom_post_types\CustomPostTypeDefinitions'
53
+		);
54
+		$custom_post_types = $custom_post_type_definitions->getDefinitions();
55
+		EE_Config::register_route(
56
+			$custom_post_types['espresso_venues']['singular_slug'],
57
+			'Venue_Single',
58
+			'run'
59
+		);
60
+	}
61
+
62
+	/**
63
+	 *    set_hooks_admin - for hooking into EE Admin Core, other modules, etc
64
+	 *
65
+	 * @access    public
66
+	 * @return    void
67
+	 */
68
+	public static function set_hooks_admin()
69
+	{
70
+	}
71
+
72
+
73
+	/**
74
+	 * run - initial module setup
75
+	 *
76
+	 * @access    public
77
+	 * @param \WP $WP
78
+	 */
79
+	public function run($WP)
80
+	{
81
+		// check what template is loaded
82
+		add_filter('template_include', array($this, 'template_include'), 999, 1);
83
+		add_action('wp_enqueue_scripts', array($this, 'wp_enqueue_scripts'), 10);
84
+	}
85
+
86
+
87
+	/**
88
+	 * template_include
89
+	 *
90
+	 * @access public
91
+	 * @param  string $template
92
+	 * @return string
93
+	 */
94
+	public function template_include($template)
95
+	{
96
+		// not a custom template?
97
+		if (
98
+			EE_Registry::instance()
99
+					   ->load_core('Front_Controller', array(), false, true)
100
+					   ->get_selected_template() != 'single-espresso_venues.php'
101
+		) {
102
+			EEH_Template::load_espresso_theme_functions();
103
+			// then add extra event data via hooks
104
+			add_filter('the_title', array($this, 'the_title'), 100, 1);
105
+			add_filter('the_content', array($this, 'venue_details'), 100);
106
+			// don't display entry meta because the existing theme will take car of that
107
+			add_filter('FHEE__content_espresso_venues_details_template__display_entry_meta', '__return_false');
108
+		}
109
+		return $template;
110
+	}
111
+
112
+
113
+	/**
114
+	 * the_title
115
+	 *
116
+	 * @access public
117
+	 * @param  string $title
118
+	 * @return string
119
+	 */
120
+	public function the_title($title = '')
121
+	{
122
+		return $title;
123
+	}
124
+
125
+
126
+	/**
127
+	 *    venue_details
128
+	 *
129
+	 * @access public
130
+	 * @param  string $content
131
+	 * @return string
132
+	 */
133
+	public function venue_details($content)
134
+	{
135
+		global $post;
136
+		if (
137
+			$post->post_type == 'espresso_venues'
138
+			&& ! post_password_required()
139
+		) {
140
+			// since the 'content-espresso_venues-details.php' template might be used directly from within a theme,
141
+			// it uses the_content() for displaying the $post->post_content
142
+			// so in order to load a template that uses the_content() from within a callback being used to filter the_content(),
143
+			// we need to first remove this callback from being applied to the_content() (otherwise it will recurse and blow up the interweb)
144
+			remove_filter('the_content', array($this, 'venue_details'), 100);
145
+			// add filters we want
146
+			add_filter('the_content', array($this, 'venue_location'), 110);
147
+			// now load our template
148
+			$template = EEH_Template::locate_template('content-espresso_venues-details.php');
149
+			// remove other filters we added so they won't get applied to the next post
150
+			remove_filter('the_content', array($this, 'venue_location'), 110);
151
+		}
152
+		// we're not returning the $content directly because the template we are loading uses the_content (or the_excerpt)
153
+		return ! empty($template) ? $template : $content;
154
+	}
155
+
156
+
157
+	/**
158
+	 * venue_location
159
+	 *
160
+	 * @access public
161
+	 * @param  string $content
162
+	 * @return string
163
+	 */
164
+	public function venue_location($content)
165
+	{
166
+		return $content . EEH_Template::locate_template('content-espresso_venues-location.php');
167
+	}
168
+
169
+
170
+	/**
171
+	 *    wp_enqueue_scripts
172
+	 *
173
+	 * @access public
174
+	 * @return void
175
+	 */
176
+	public function wp_enqueue_scripts()
177
+	{
178
+		// get some style
179
+		if (apply_filters('FHEE_enable_default_espresso_css', true) && is_single()) {
180
+			// first check theme folder
181
+			if (is_readable(get_stylesheet_directory() . $this->theme . '/style.css')) {
182
+				wp_register_style(
183
+					$this->theme,
184
+					get_stylesheet_directory_uri() . $this->theme . '/style.css',
185
+					array('dashicons', 'espresso_default')
186
+				);
187
+			} elseif (is_readable(EE_TEMPLATES . $this->theme . '/style.css')) {
188
+				wp_register_style(
189
+					$this->theme,
190
+					EE_TEMPLATES_URL . $this->theme . '/style.css',
191
+					array('dashicons', 'espresso_default')
192
+				);
193
+			}
194
+			wp_enqueue_style($this->theme);
195
+			if (EE_Registry::instance()->CFG->map_settings->use_google_maps) {
196
+				add_action('wp_enqueue_scripts', array('EEH_Maps', 'espresso_google_map_js'), 11);
197
+			}
198
+		}
199
+	}
200 200
 }
Please login to merge, or discard this patch.
modules/venues_archive/EED_Venues_Archive.module.php 2 patches
Spacing   +5 added lines, -5 removed lines patch added patch discarded remove patch
@@ -170,7 +170,7 @@  discard block
 block discarded – undo
170 170
      */
171 171
     public function venue_location($content)
172 172
     {
173
-        return $content . EEH_Template::locate_template('content-espresso_venues-location.php');
173
+        return $content.EEH_Template::locate_template('content-espresso_venues-location.php');
174 174
     }
175 175
 
176 176
 
@@ -185,16 +185,16 @@  discard block
 block discarded – undo
185 185
         // get some style
186 186
         if (apply_filters('FHEE_enable_default_espresso_css', true) && is_archive()) {
187 187
             // first check theme folder
188
-            if (is_readable(get_stylesheet_directory() . $this->theme . '/style.css')) {
188
+            if (is_readable(get_stylesheet_directory().$this->theme.'/style.css')) {
189 189
                 wp_register_style(
190 190
                     $this->theme,
191
-                    get_stylesheet_directory_uri() . $this->theme . '/style.css',
191
+                    get_stylesheet_directory_uri().$this->theme.'/style.css',
192 192
                     array('dashicons', 'espresso_default')
193 193
                 );
194
-            } elseif (is_readable(EE_TEMPLATES . $this->theme . '/style.css')) {
194
+            } elseif (is_readable(EE_TEMPLATES.$this->theme.'/style.css')) {
195 195
                 wp_register_style(
196 196
                     $this->theme,
197
-                    EE_TEMPLATES_URL . $this->theme . '/style.css',
197
+                    EE_TEMPLATES_URL.$this->theme.'/style.css',
198 198
                     array('dashicons', 'espresso_default')
199 199
                 );
200 200
             }
Please login to merge, or discard this patch.
Indentation   +174 added lines, -174 removed lines patch added patch discarded remove patch
@@ -28,178 +28,178 @@
 block discarded – undo
28 28
  */
29 29
 class EED_Venues_Archive extends EED_Module
30 30
 {
31
-    /**
32
-     * @return EED_Venues_Archive
33
-     */
34
-    public static function instance()
35
-    {
36
-        return parent::get_instance(__CLASS__);
37
-    }
38
-
39
-
40
-    /**
41
-     * set_hooks - for hooking into EE Core, other modules, etc
42
-     *
43
-     * @return void
44
-     * @throws InvalidArgumentException
45
-     * @throws InvalidDataTypeException
46
-     * @throws InvalidInterfaceException
47
-     */
48
-    public static function set_hooks()
49
-    {
50
-        /** @var EventEspresso\core\domain\entities\custom_post_types\CustomPostTypeDefinitions $custom_post_type_definitions */
51
-        $custom_post_type_definitions = LoaderFactory::getLoader()->getShared(
52
-            'EventEspresso\core\domain\entities\custom_post_types\CustomPostTypeDefinitions'
53
-        );
54
-        $custom_post_types = $custom_post_type_definitions->getDefinitions();
55
-        EE_Config::register_route(
56
-            $custom_post_types['espresso_venues']['plural_slug'],
57
-            'Venues_Archive',
58
-            'run'
59
-        );
60
-    }
61
-
62
-    /**
63
-     *    set_hooks_admin - for hooking into EE Admin Core, other modules, etc
64
-     *
65
-     * @access    public
66
-     * @return    void
67
-     */
68
-    public static function set_hooks_admin()
69
-    {
70
-    }
71
-
72
-
73
-    /**
74
-     * run - initial module setup
75
-     *
76
-     * @access    public
77
-     * @param \WP $WP
78
-     */
79
-    public function run($WP)
80
-    {
81
-        // check what template is loaded
82
-        add_filter('template_include', array($this, 'template_include'), 999, 1);
83
-        add_action('wp_enqueue_scripts', array($this, 'wp_enqueue_scripts'), 10);
84
-    }
85
-
86
-
87
-    /**
88
-     * template_include
89
-     *
90
-     * @access public
91
-     * @param  string $template
92
-     * @return string
93
-     */
94
-    public function template_include($template)
95
-    {
96
-        // not a custom template?
97
-        if (
98
-            EE_Registry::instance()->load_core('Front_Controller', array(), false, true)
99
-                                   ->get_selected_template() != 'archive-espresso_venues.php'
100
-        ) {
101
-            EEH_Template::load_espresso_theme_functions();
102
-            // then add extra event data via hooks
103
-            add_filter('the_title', array($this, 'the_title'), 100, 1);
104
-            // don't know if theme uses the_excerpt
105
-            add_filter('the_excerpt', array($this, 'venue_details'), 100);
106
-            // or the_content
107
-            add_filter('the_content', array($this, 'venue_details'), 100);
108
-            // don't display entry meta because the existing theme will take care of that
109
-            add_filter('FHEE__content_espresso_venues_details_template__display_entry_meta', '__return_false');
110
-        }
111
-        return $template;
112
-    }
113
-
114
-
115
-    /**
116
-     * the_title
117
-     *
118
-     * @access public
119
-     * @param  string $title
120
-     * @return string
121
-     */
122
-    public function the_title($title = '')
123
-    {
124
-        return $title;
125
-    }
126
-
127
-
128
-    /**
129
-     *    venue_details
130
-     *
131
-     * @access public
132
-     * @param  string $content
133
-     * @return string
134
-     */
135
-    public function venue_details($content)
136
-    {
137
-        global $post;
138
-        if (
139
-            $post->post_type == 'espresso_venues'
140
-            && ! post_password_required()
141
-        ) {
142
-            // since the 'content-espresso_venues-details.php' template might be used directly from within a theme,
143
-            // it uses the_content() for displaying the $post->post_content
144
-            // so in order to load a template that uses the_content() from within a callback being used to filter the_content(),
145
-            // we need to first remove this callback from being applied to the_content() (otherwise it will recurse and blow up the interweb)
146
-            remove_filter('the_excerpt', array($this, 'venue_details'), 100);
147
-            remove_filter('the_content', array($this, 'venue_details'), 100);
148
-            // add filters we want
149
-            add_filter('the_content', array($this, 'venue_location'), 110);
150
-            add_filter('the_excerpt', array($this, 'venue_location'), 110);
151
-            // now load our template
152
-            $template = EEH_Template::locate_template('content-espresso_venues-details.php');
153
-            // now add our filter back in, plus some others
154
-            add_filter('the_excerpt', array($this, 'venue_details'), 100);
155
-            add_filter('the_content', array($this, 'venue_details'), 100);
156
-            // remove other filters we added so they won't get applied to the next post
157
-            remove_filter('the_content', array($this, 'venue_location'), 110);
158
-            remove_filter('the_excerpt', array($this, 'venue_location'), 110);
159
-            // we're not returning the $content directly because the template we are loading uses the_content (or the_excerpt)
160
-        }
161
-        return ! empty($template) ? $template : $content;
162
-    }
163
-
164
-
165
-    /**
166
-     * venue_location
167
-     *
168
-     * @access public
169
-     * @param  string $content
170
-     * @return string
171
-     */
172
-    public function venue_location($content)
173
-    {
174
-        return $content . EEH_Template::locate_template('content-espresso_venues-location.php');
175
-    }
176
-
177
-
178
-    /**
179
-     *    wp_enqueue_scripts
180
-     *
181
-     * @access    public
182
-     * @return    void
183
-     */
184
-    public function wp_enqueue_scripts()
185
-    {
186
-        // get some style
187
-        if (apply_filters('FHEE_enable_default_espresso_css', true) && is_archive()) {
188
-            // first check theme folder
189
-            if (is_readable(get_stylesheet_directory() . $this->theme . '/style.css')) {
190
-                wp_register_style(
191
-                    $this->theme,
192
-                    get_stylesheet_directory_uri() . $this->theme . '/style.css',
193
-                    array('dashicons', 'espresso_default')
194
-                );
195
-            } elseif (is_readable(EE_TEMPLATES . $this->theme . '/style.css')) {
196
-                wp_register_style(
197
-                    $this->theme,
198
-                    EE_TEMPLATES_URL . $this->theme . '/style.css',
199
-                    array('dashicons', 'espresso_default')
200
-                );
201
-            }
202
-            wp_enqueue_style($this->theme);
203
-        }
204
-    }
31
+	/**
32
+	 * @return EED_Venues_Archive
33
+	 */
34
+	public static function instance()
35
+	{
36
+		return parent::get_instance(__CLASS__);
37
+	}
38
+
39
+
40
+	/**
41
+	 * set_hooks - for hooking into EE Core, other modules, etc
42
+	 *
43
+	 * @return void
44
+	 * @throws InvalidArgumentException
45
+	 * @throws InvalidDataTypeException
46
+	 * @throws InvalidInterfaceException
47
+	 */
48
+	public static function set_hooks()
49
+	{
50
+		/** @var EventEspresso\core\domain\entities\custom_post_types\CustomPostTypeDefinitions $custom_post_type_definitions */
51
+		$custom_post_type_definitions = LoaderFactory::getLoader()->getShared(
52
+			'EventEspresso\core\domain\entities\custom_post_types\CustomPostTypeDefinitions'
53
+		);
54
+		$custom_post_types = $custom_post_type_definitions->getDefinitions();
55
+		EE_Config::register_route(
56
+			$custom_post_types['espresso_venues']['plural_slug'],
57
+			'Venues_Archive',
58
+			'run'
59
+		);
60
+	}
61
+
62
+	/**
63
+	 *    set_hooks_admin - for hooking into EE Admin Core, other modules, etc
64
+	 *
65
+	 * @access    public
66
+	 * @return    void
67
+	 */
68
+	public static function set_hooks_admin()
69
+	{
70
+	}
71
+
72
+
73
+	/**
74
+	 * run - initial module setup
75
+	 *
76
+	 * @access    public
77
+	 * @param \WP $WP
78
+	 */
79
+	public function run($WP)
80
+	{
81
+		// check what template is loaded
82
+		add_filter('template_include', array($this, 'template_include'), 999, 1);
83
+		add_action('wp_enqueue_scripts', array($this, 'wp_enqueue_scripts'), 10);
84
+	}
85
+
86
+
87
+	/**
88
+	 * template_include
89
+	 *
90
+	 * @access public
91
+	 * @param  string $template
92
+	 * @return string
93
+	 */
94
+	public function template_include($template)
95
+	{
96
+		// not a custom template?
97
+		if (
98
+			EE_Registry::instance()->load_core('Front_Controller', array(), false, true)
99
+								   ->get_selected_template() != 'archive-espresso_venues.php'
100
+		) {
101
+			EEH_Template::load_espresso_theme_functions();
102
+			// then add extra event data via hooks
103
+			add_filter('the_title', array($this, 'the_title'), 100, 1);
104
+			// don't know if theme uses the_excerpt
105
+			add_filter('the_excerpt', array($this, 'venue_details'), 100);
106
+			// or the_content
107
+			add_filter('the_content', array($this, 'venue_details'), 100);
108
+			// don't display entry meta because the existing theme will take care of that
109
+			add_filter('FHEE__content_espresso_venues_details_template__display_entry_meta', '__return_false');
110
+		}
111
+		return $template;
112
+	}
113
+
114
+
115
+	/**
116
+	 * the_title
117
+	 *
118
+	 * @access public
119
+	 * @param  string $title
120
+	 * @return string
121
+	 */
122
+	public function the_title($title = '')
123
+	{
124
+		return $title;
125
+	}
126
+
127
+
128
+	/**
129
+	 *    venue_details
130
+	 *
131
+	 * @access public
132
+	 * @param  string $content
133
+	 * @return string
134
+	 */
135
+	public function venue_details($content)
136
+	{
137
+		global $post;
138
+		if (
139
+			$post->post_type == 'espresso_venues'
140
+			&& ! post_password_required()
141
+		) {
142
+			// since the 'content-espresso_venues-details.php' template might be used directly from within a theme,
143
+			// it uses the_content() for displaying the $post->post_content
144
+			// so in order to load a template that uses the_content() from within a callback being used to filter the_content(),
145
+			// we need to first remove this callback from being applied to the_content() (otherwise it will recurse and blow up the interweb)
146
+			remove_filter('the_excerpt', array($this, 'venue_details'), 100);
147
+			remove_filter('the_content', array($this, 'venue_details'), 100);
148
+			// add filters we want
149
+			add_filter('the_content', array($this, 'venue_location'), 110);
150
+			add_filter('the_excerpt', array($this, 'venue_location'), 110);
151
+			// now load our template
152
+			$template = EEH_Template::locate_template('content-espresso_venues-details.php');
153
+			// now add our filter back in, plus some others
154
+			add_filter('the_excerpt', array($this, 'venue_details'), 100);
155
+			add_filter('the_content', array($this, 'venue_details'), 100);
156
+			// remove other filters we added so they won't get applied to the next post
157
+			remove_filter('the_content', array($this, 'venue_location'), 110);
158
+			remove_filter('the_excerpt', array($this, 'venue_location'), 110);
159
+			// we're not returning the $content directly because the template we are loading uses the_content (or the_excerpt)
160
+		}
161
+		return ! empty($template) ? $template : $content;
162
+	}
163
+
164
+
165
+	/**
166
+	 * venue_location
167
+	 *
168
+	 * @access public
169
+	 * @param  string $content
170
+	 * @return string
171
+	 */
172
+	public function venue_location($content)
173
+	{
174
+		return $content . EEH_Template::locate_template('content-espresso_venues-location.php');
175
+	}
176
+
177
+
178
+	/**
179
+	 *    wp_enqueue_scripts
180
+	 *
181
+	 * @access    public
182
+	 * @return    void
183
+	 */
184
+	public function wp_enqueue_scripts()
185
+	{
186
+		// get some style
187
+		if (apply_filters('FHEE_enable_default_espresso_css', true) && is_archive()) {
188
+			// first check theme folder
189
+			if (is_readable(get_stylesheet_directory() . $this->theme . '/style.css')) {
190
+				wp_register_style(
191
+					$this->theme,
192
+					get_stylesheet_directory_uri() . $this->theme . '/style.css',
193
+					array('dashicons', 'espresso_default')
194
+				);
195
+			} elseif (is_readable(EE_TEMPLATES . $this->theme . '/style.css')) {
196
+				wp_register_style(
197
+					$this->theme,
198
+					EE_TEMPLATES_URL . $this->theme . '/style.css',
199
+					array('dashicons', 'espresso_default')
200
+				);
201
+			}
202
+			wp_enqueue_style($this->theme);
203
+		}
204
+	}
205 205
 }
Please login to merge, or discard this patch.
line_item_display/EE_Default_Line_Item_Display_Strategy.strategy.php 2 patches
Indentation   +218 added lines, -218 removed lines patch added patch discarded remove patch
@@ -1,225 +1,225 @@
 block discarded – undo
1 1
 <?php
2 2
  /**
3
- *
4
- * Class EE_Default_Line_Item_Display_Strategy
5
- *
6
- * Description
7
- *
8
- * @package         Event Espresso
9
- * @subpackage    core
10
- * @author              Brent Christensen
11
- *
12
- *
13
- */
3
+  *
4
+  * Class EE_Default_Line_Item_Display_Strategy
5
+  *
6
+  * Description
7
+  *
8
+  * @package         Event Espresso
9
+  * @subpackage    core
10
+  * @author              Brent Christensen
11
+  *
12
+  *
13
+  */
14 14
 
15 15
 class EE_Default_Line_Item_Display_Strategy implements EEI_Line_Item_Display
16 16
 {
17 17
 
18
-    /**
19
-     * total amount of tax to apply
20
-     * @type float $_tax_rate
21
-     */
22
-    private $_tax_rate = 0;
23
-
24
-    /**
25
-     * total amount including tax we can bill for at this time
26
-     * @type float $_grand_total
27
-     */
28
-    private $_grand_total = 0.00;
29
-
30
-    /**
31
-     * total number of items being billed for
32
-     * @type int $_total_items
33
-     */
34
-    private $_total_items = 0;
35
-
36
-
37
-
38
-    /**
39
-     * @return float
40
-     */
41
-    public function grand_total()
42
-    {
43
-        return $this->_grand_total;
44
-    }
45
-
46
-
47
-
48
-    /**
49
-     * @return int
50
-     */
51
-    public function total_items()
52
-    {
53
-        return $this->_total_items;
54
-    }
55
-
56
-
57
-
58
-    /**
59
-     * @param EE_Line_Item $line_item
60
-     * @param array        $options
61
-     * @return mixed
62
-     */
63
-    public function display_line_item(EE_Line_Item $line_item, $options = array())
64
-    {
65
-
66
-        $html = '';
67
-        // set some default options and merge with incoming
68
-        $default_options = array(
69
-            'show_desc' => true,  //    TRUE        FALSE
70
-            'odd' => false
71
-        );
72
-        $options = array_merge($default_options, (array) $options);
73
-
74
-        switch ($line_item->type()) {
75
-            case EEM_Line_Item::type_line_item:
76
-                // item row
77
-                $html .= $this->_item_row($line_item, $options);
78
-                // got any kids?
79
-                foreach ($line_item->children() as $child_line_item) {
80
-                    $this->display_line_item($child_line_item, $options);
81
-                }
82
-                break;
83
-
84
-            case EEM_Line_Item::type_sub_line_item:
85
-                $html .= $this->_sub_item_row($line_item, $options);
86
-                break;
87
-
88
-            case EEM_Line_Item::type_sub_total:
89
-                break;
90
-
91
-            case EEM_Line_Item::type_tax:
92
-                $this->_tax_rate += $line_item->percent();
93
-                break;
94
-
95
-            case EEM_Line_Item::type_tax_sub_total:
96
-                foreach ($line_item->children() as $child_line_item) {
97
-                    if ($child_line_item->type() == EEM_Line_Item::type_tax) {
98
-                        // recursively feed children back into this method
99
-                        $this->display_line_item($child_line_item, $options);
100
-                    }
101
-                }
102
-                break;
103
-
104
-            case EEM_Line_Item::type_total:
105
-                // get all child line items
106
-                $children = $line_item->children();
107
-                if ($options['set_tax_rate'] === true) {
108
-                    // loop thru tax child line items just to determine tax rate
109
-                    foreach ($children as $child_line_item) {
110
-                        if ($child_line_item->type() == EEM_Line_Item::type_tax_sub_total) {
111
-                            // recursively feed children back into this method
112
-                            $this->display_line_item($child_line_item, $options);
113
-                        }
114
-                    }
115
-                } else {
116
-                    // now loop thru all non-tax child line items
117
-                    foreach ($children as $child_line_item) {
118
-                        if ($child_line_item->type() != EEM_Line_Item::type_tax_sub_total) {
119
-                            // recursively feed children back into this method
120
-                            $html .= $this->display_line_item($child_line_item, $options);
121
-                        }
122
-                    }
123
-                }
124
-                break;
125
-        }
126
-
127
-        return $html;
128
-    }
129
-
130
-
131
-
132
-    /**
133
-     *  _total_row
134
-     *
135
-     * @param EE_Line_Item $line_item
136
-     * @param array        $options
137
-     * @return mixed
138
-     */
139
-    private function _item_row(EE_Line_Item $line_item, $options = array())
140
-    {
141
-        // start of row
142
-        $row_class = $options['odd'] ? 'item odd' : 'item';
143
-        $html = EEH_HTML::tr('', '', $row_class);
144
-        // name && desc
145
-        $name_and_desc = apply_filters(
146
-            'FHEE__EE_Default_Line_Item_Display_Strategy__item_row__name',
147
-            $line_item->name(),
148
-            $line_item
149
-        );
150
-        $name_and_desc .= apply_filters(
151
-            'FHEE__EE_Default_Line_Item_Display_Strategy__item_row__desc',
152
-            ( $options['show_desc'] ? '<span class="line-item-desc-spn smaller-text">: ' . $line_item->desc() . '</span>' : '' ),
153
-            $line_item,
154
-            $options
155
-        );
156
-        if ($line_item->is_taxable()) {
157
-            $ticket_price_includes_taxes = EE_Registry::instance()->CFG->tax_settings->prices_displayed_including_taxes
158
-                ? esc_html__('* price includes taxes', 'event_espresso')
159
-                : esc_html__('* price does not include taxes', 'event_espresso');
160
-            $name_and_desc .= '<span class="smaller-text lt-grey-text" style="margin:0 0 0 2em;">'
161
-                  . $ticket_price_includes_taxes
162
-                  . '</span>';
163
-        }
164
-
165
-        // name td
166
-        $html .= EEH_HTML::td($name_and_desc, '', 'item_l');
167
-        // quantity td
168
-        $html .= EEH_HTML::td($line_item->quantity(), '', 'item_l jst-rght');
169
-        $tax_rate = $line_item->is_taxable()
170
-                    && EE_Registry::instance()->CFG->tax_settings->prices_displayed_including_taxes
171
-            ? 1 + ( $this->_tax_rate / 100 )
172
-            : 1;
173
-        // price td
174
-        $unit_price = apply_filters(
175
-            'FHEE__EE_Default_Line_Item_Display_Strategy___item_row__unit_price',
176
-            EEH_Template::format_currency($line_item->unit_price() * $tax_rate, false, false),
177
-            $line_item,
178
-            $tax_rate
179
-        );
180
-        $html .= EEH_HTML::td($unit_price, '', 'item_c jst-rght');
181
-        // total td
182
-        $total = apply_filters(
183
-            'FHEE__EE_Default_Line_Item_Display_Strategy___item_row__total',
184
-            EEH_Template::format_currency($line_item->unit_price() * $line_item->quantity() * $tax_rate, false, false),
185
-            $line_item,
186
-            $tax_rate
187
-        );
188
-        $html .= EEH_HTML::td($total, '', 'item_r jst-rght');
189
-        // end of row
190
-        $html .= EEH_HTML::trx();
191
-
192
-        return $html;
193
-    }
194
-
195
-
196
-
197
-    /**
198
-     *  _sub_item_row
199
-     *
200
-     * @param EE_Line_Item $line_item
201
-     * @param array        $options
202
-     * @return mixed
203
-     */
204
-    private function _sub_item_row(EE_Line_Item $line_item, $options = array())
205
-    {
206
-        // start of row
207
-        $html = EEH_HTML::tr('', 'item sub-item-row');
208
-        // name && desc
209
-        $name_and_desc = $line_item->name();
210
-        $name_and_desc .= $options['show_desc'] ? '<span class="line-sub-item-desc-spn smaller-text">: ' . $line_item->desc() . '</span>' : '';
211
-        // name td
212
-        $html .= EEH_HTML::td(/*__FUNCTION__ .*/ $name_and_desc, '', 'item_l sub-item');
213
-        // discount/surcharge td
214
-        if ($line_item->is_percent()) {
215
-            $html .= EEH_HTML::td($line_item->percent() . '%', '', 'item_c');
216
-        } else {
217
-            $html .= EEH_HTML::td($line_item->unit_price_no_code(), '', 'item_c jst-rght');
218
-        }
219
-        // total td
220
-        $html .= EEH_HTML::td(EEH_Template::format_currency($line_item->total(), false, false), '', 'item_r jst-rght');
221
-        // end of row
222
-        $html .= EEH_HTML::trx();
223
-        return $html;
224
-    }
18
+	/**
19
+	 * total amount of tax to apply
20
+	 * @type float $_tax_rate
21
+	 */
22
+	private $_tax_rate = 0;
23
+
24
+	/**
25
+	 * total amount including tax we can bill for at this time
26
+	 * @type float $_grand_total
27
+	 */
28
+	private $_grand_total = 0.00;
29
+
30
+	/**
31
+	 * total number of items being billed for
32
+	 * @type int $_total_items
33
+	 */
34
+	private $_total_items = 0;
35
+
36
+
37
+
38
+	/**
39
+	 * @return float
40
+	 */
41
+	public function grand_total()
42
+	{
43
+		return $this->_grand_total;
44
+	}
45
+
46
+
47
+
48
+	/**
49
+	 * @return int
50
+	 */
51
+	public function total_items()
52
+	{
53
+		return $this->_total_items;
54
+	}
55
+
56
+
57
+
58
+	/**
59
+	 * @param EE_Line_Item $line_item
60
+	 * @param array        $options
61
+	 * @return mixed
62
+	 */
63
+	public function display_line_item(EE_Line_Item $line_item, $options = array())
64
+	{
65
+
66
+		$html = '';
67
+		// set some default options and merge with incoming
68
+		$default_options = array(
69
+			'show_desc' => true,  //    TRUE        FALSE
70
+			'odd' => false
71
+		);
72
+		$options = array_merge($default_options, (array) $options);
73
+
74
+		switch ($line_item->type()) {
75
+			case EEM_Line_Item::type_line_item:
76
+				// item row
77
+				$html .= $this->_item_row($line_item, $options);
78
+				// got any kids?
79
+				foreach ($line_item->children() as $child_line_item) {
80
+					$this->display_line_item($child_line_item, $options);
81
+				}
82
+				break;
83
+
84
+			case EEM_Line_Item::type_sub_line_item:
85
+				$html .= $this->_sub_item_row($line_item, $options);
86
+				break;
87
+
88
+			case EEM_Line_Item::type_sub_total:
89
+				break;
90
+
91
+			case EEM_Line_Item::type_tax:
92
+				$this->_tax_rate += $line_item->percent();
93
+				break;
94
+
95
+			case EEM_Line_Item::type_tax_sub_total:
96
+				foreach ($line_item->children() as $child_line_item) {
97
+					if ($child_line_item->type() == EEM_Line_Item::type_tax) {
98
+						// recursively feed children back into this method
99
+						$this->display_line_item($child_line_item, $options);
100
+					}
101
+				}
102
+				break;
103
+
104
+			case EEM_Line_Item::type_total:
105
+				// get all child line items
106
+				$children = $line_item->children();
107
+				if ($options['set_tax_rate'] === true) {
108
+					// loop thru tax child line items just to determine tax rate
109
+					foreach ($children as $child_line_item) {
110
+						if ($child_line_item->type() == EEM_Line_Item::type_tax_sub_total) {
111
+							// recursively feed children back into this method
112
+							$this->display_line_item($child_line_item, $options);
113
+						}
114
+					}
115
+				} else {
116
+					// now loop thru all non-tax child line items
117
+					foreach ($children as $child_line_item) {
118
+						if ($child_line_item->type() != EEM_Line_Item::type_tax_sub_total) {
119
+							// recursively feed children back into this method
120
+							$html .= $this->display_line_item($child_line_item, $options);
121
+						}
122
+					}
123
+				}
124
+				break;
125
+		}
126
+
127
+		return $html;
128
+	}
129
+
130
+
131
+
132
+	/**
133
+	 *  _total_row
134
+	 *
135
+	 * @param EE_Line_Item $line_item
136
+	 * @param array        $options
137
+	 * @return mixed
138
+	 */
139
+	private function _item_row(EE_Line_Item $line_item, $options = array())
140
+	{
141
+		// start of row
142
+		$row_class = $options['odd'] ? 'item odd' : 'item';
143
+		$html = EEH_HTML::tr('', '', $row_class);
144
+		// name && desc
145
+		$name_and_desc = apply_filters(
146
+			'FHEE__EE_Default_Line_Item_Display_Strategy__item_row__name',
147
+			$line_item->name(),
148
+			$line_item
149
+		);
150
+		$name_and_desc .= apply_filters(
151
+			'FHEE__EE_Default_Line_Item_Display_Strategy__item_row__desc',
152
+			( $options['show_desc'] ? '<span class="line-item-desc-spn smaller-text">: ' . $line_item->desc() . '</span>' : '' ),
153
+			$line_item,
154
+			$options
155
+		);
156
+		if ($line_item->is_taxable()) {
157
+			$ticket_price_includes_taxes = EE_Registry::instance()->CFG->tax_settings->prices_displayed_including_taxes
158
+				? esc_html__('* price includes taxes', 'event_espresso')
159
+				: esc_html__('* price does not include taxes', 'event_espresso');
160
+			$name_and_desc .= '<span class="smaller-text lt-grey-text" style="margin:0 0 0 2em;">'
161
+				  . $ticket_price_includes_taxes
162
+				  . '</span>';
163
+		}
164
+
165
+		// name td
166
+		$html .= EEH_HTML::td($name_and_desc, '', 'item_l');
167
+		// quantity td
168
+		$html .= EEH_HTML::td($line_item->quantity(), '', 'item_l jst-rght');
169
+		$tax_rate = $line_item->is_taxable()
170
+					&& EE_Registry::instance()->CFG->tax_settings->prices_displayed_including_taxes
171
+			? 1 + ( $this->_tax_rate / 100 )
172
+			: 1;
173
+		// price td
174
+		$unit_price = apply_filters(
175
+			'FHEE__EE_Default_Line_Item_Display_Strategy___item_row__unit_price',
176
+			EEH_Template::format_currency($line_item->unit_price() * $tax_rate, false, false),
177
+			$line_item,
178
+			$tax_rate
179
+		);
180
+		$html .= EEH_HTML::td($unit_price, '', 'item_c jst-rght');
181
+		// total td
182
+		$total = apply_filters(
183
+			'FHEE__EE_Default_Line_Item_Display_Strategy___item_row__total',
184
+			EEH_Template::format_currency($line_item->unit_price() * $line_item->quantity() * $tax_rate, false, false),
185
+			$line_item,
186
+			$tax_rate
187
+		);
188
+		$html .= EEH_HTML::td($total, '', 'item_r jst-rght');
189
+		// end of row
190
+		$html .= EEH_HTML::trx();
191
+
192
+		return $html;
193
+	}
194
+
195
+
196
+
197
+	/**
198
+	 *  _sub_item_row
199
+	 *
200
+	 * @param EE_Line_Item $line_item
201
+	 * @param array        $options
202
+	 * @return mixed
203
+	 */
204
+	private function _sub_item_row(EE_Line_Item $line_item, $options = array())
205
+	{
206
+		// start of row
207
+		$html = EEH_HTML::tr('', 'item sub-item-row');
208
+		// name && desc
209
+		$name_and_desc = $line_item->name();
210
+		$name_and_desc .= $options['show_desc'] ? '<span class="line-sub-item-desc-spn smaller-text">: ' . $line_item->desc() . '</span>' : '';
211
+		// name td
212
+		$html .= EEH_HTML::td(/*__FUNCTION__ .*/ $name_and_desc, '', 'item_l sub-item');
213
+		// discount/surcharge td
214
+		if ($line_item->is_percent()) {
215
+			$html .= EEH_HTML::td($line_item->percent() . '%', '', 'item_c');
216
+		} else {
217
+			$html .= EEH_HTML::td($line_item->unit_price_no_code(), '', 'item_c jst-rght');
218
+		}
219
+		// total td
220
+		$html .= EEH_HTML::td(EEH_Template::format_currency($line_item->total(), false, false), '', 'item_r jst-rght');
221
+		// end of row
222
+		$html .= EEH_HTML::trx();
223
+		return $html;
224
+	}
225 225
 }
Please login to merge, or discard this patch.
Spacing   +5 added lines, -5 removed lines patch added patch discarded remove patch
@@ -66,7 +66,7 @@  discard block
 block discarded – undo
66 66
         $html = '';
67 67
         // set some default options and merge with incoming
68 68
         $default_options = array(
69
-            'show_desc' => true,  //    TRUE        FALSE
69
+            'show_desc' => true, //    TRUE        FALSE
70 70
             'odd' => false
71 71
         );
72 72
         $options = array_merge($default_options, (array) $options);
@@ -149,7 +149,7 @@  discard block
 block discarded – undo
149 149
         );
150 150
         $name_and_desc .= apply_filters(
151 151
             'FHEE__EE_Default_Line_Item_Display_Strategy__item_row__desc',
152
-            ( $options['show_desc'] ? '<span class="line-item-desc-spn smaller-text">: ' . $line_item->desc() . '</span>' : '' ),
152
+            ($options['show_desc'] ? '<span class="line-item-desc-spn smaller-text">: '.$line_item->desc().'</span>' : ''),
153 153
             $line_item,
154 154
             $options
155 155
         );
@@ -168,7 +168,7 @@  discard block
 block discarded – undo
168 168
         $html .= EEH_HTML::td($line_item->quantity(), '', 'item_l jst-rght');
169 169
         $tax_rate = $line_item->is_taxable()
170 170
                     && EE_Registry::instance()->CFG->tax_settings->prices_displayed_including_taxes
171
-            ? 1 + ( $this->_tax_rate / 100 )
171
+            ? 1 + ($this->_tax_rate / 100)
172 172
             : 1;
173 173
         // price td
174 174
         $unit_price = apply_filters(
@@ -207,12 +207,12 @@  discard block
 block discarded – undo
207 207
         $html = EEH_HTML::tr('', 'item sub-item-row');
208 208
         // name && desc
209 209
         $name_and_desc = $line_item->name();
210
-        $name_and_desc .= $options['show_desc'] ? '<span class="line-sub-item-desc-spn smaller-text">: ' . $line_item->desc() . '</span>' : '';
210
+        $name_and_desc .= $options['show_desc'] ? '<span class="line-sub-item-desc-spn smaller-text">: '.$line_item->desc().'</span>' : '';
211 211
         // name td
212 212
         $html .= EEH_HTML::td(/*__FUNCTION__ .*/ $name_and_desc, '', 'item_l sub-item');
213 213
         // discount/surcharge td
214 214
         if ($line_item->is_percent()) {
215
-            $html .= EEH_HTML::td($line_item->percent() . '%', '', 'item_c');
215
+            $html .= EEH_HTML::td($line_item->percent().'%', '', 'item_c');
216 216
         } else {
217 217
             $html .= EEH_HTML::td($line_item->unit_price_no_code(), '', 'item_c jst-rght');
218 218
         }
Please login to merge, or discard this patch.
core/domain/services/pue/StatsGatherer.php 2 patches
Indentation   +288 added lines, -288 removed lines patch added patch discarded remove patch
@@ -16,314 +16,314 @@
 block discarded – undo
16 16
 class StatsGatherer
17 17
 {
18 18
 
19
-    const COUNT_ALL_EVENTS = 'event';
20
-    const COUNT_ACTIVE_EVENTS = 'active_event';
21
-    const COUNT_DATETIMES = 'datetime';
22
-    const COUNT_TICKETS = 'ticket';
23
-    const COUNT_DATETIMES_SOLD = 'datetime_sold';
24
-    const COUNT_TICKETS_FREE = 'free_ticket';
25
-    const COUNT_TICKETS_PAID = 'paid_ticket';
26
-    const COUNT_TICKETS_SOLD = 'ticket_sold';
27
-    const COUNT_REGISTRATIONS_APPROVED = 'registrations_approved';
28
-    const COUNT_REGISTRATIONS_NOT_APPROVED = 'registrations_not_approved';
29
-    const COUNT_REGISTRATIONS_PENDING = 'registrations_pending';
30
-    const COUNT_REGISTRATIONS_INCOMPLETE = 'registrations_incomplete';
31
-    const COUNT_REGISTRATIONS_ALL = 'registrations_all';
32
-    const COUNT_REGISTRATIONS_CANCELLED = 'registrations_cancelled';
33
-    const COUNT_REGISTRATIONS_DECLINED = 'registrations_declined';
34
-    const SUM_TRANSACTIONS_COMPLETE_TOTAL = 'transactions_complete_total_sum';
35
-    const SUM_TRANSACTIONS_ALL_PAID = 'transactions_all_paid';
36
-    const INFO_SITE_CURRENCY = 'site_currency';
19
+	const COUNT_ALL_EVENTS = 'event';
20
+	const COUNT_ACTIVE_EVENTS = 'active_event';
21
+	const COUNT_DATETIMES = 'datetime';
22
+	const COUNT_TICKETS = 'ticket';
23
+	const COUNT_DATETIMES_SOLD = 'datetime_sold';
24
+	const COUNT_TICKETS_FREE = 'free_ticket';
25
+	const COUNT_TICKETS_PAID = 'paid_ticket';
26
+	const COUNT_TICKETS_SOLD = 'ticket_sold';
27
+	const COUNT_REGISTRATIONS_APPROVED = 'registrations_approved';
28
+	const COUNT_REGISTRATIONS_NOT_APPROVED = 'registrations_not_approved';
29
+	const COUNT_REGISTRATIONS_PENDING = 'registrations_pending';
30
+	const COUNT_REGISTRATIONS_INCOMPLETE = 'registrations_incomplete';
31
+	const COUNT_REGISTRATIONS_ALL = 'registrations_all';
32
+	const COUNT_REGISTRATIONS_CANCELLED = 'registrations_cancelled';
33
+	const COUNT_REGISTRATIONS_DECLINED = 'registrations_declined';
34
+	const SUM_TRANSACTIONS_COMPLETE_TOTAL = 'transactions_complete_total_sum';
35
+	const SUM_TRANSACTIONS_ALL_PAID = 'transactions_all_paid';
36
+	const INFO_SITE_CURRENCY = 'site_currency';
37 37
 
38 38
 
39
-    /**
40
-     * @var EEM_Payment_Method
41
-     */
42
-    private $payment_method_model;
39
+	/**
40
+	 * @var EEM_Payment_Method
41
+	 */
42
+	private $payment_method_model;
43 43
 
44 44
 
45
-    /**
46
-     * @var EEM_Event
47
-     */
48
-    private $event_model;
45
+	/**
46
+	 * @var EEM_Event
47
+	 */
48
+	private $event_model;
49 49
 
50
-    /**
51
-     * @var EEM_Datetime
52
-     */
53
-    private $datetime_model;
50
+	/**
51
+	 * @var EEM_Datetime
52
+	 */
53
+	private $datetime_model;
54 54
 
55 55
 
56
-    /**
57
-     * @var EEM_Ticket
58
-     */
59
-    private $ticket_model;
56
+	/**
57
+	 * @var EEM_Ticket
58
+	 */
59
+	private $ticket_model;
60 60
 
61 61
 
62
-    /**
63
-     * @var EEM_Registration
64
-     */
65
-    private $registration_model;
62
+	/**
63
+	 * @var EEM_Registration
64
+	 */
65
+	private $registration_model;
66 66
 
67 67
 
68
-    /**
69
-     * @var EEM_Transaction
70
-     */
71
-    private $transaction_model;
68
+	/**
69
+	 * @var EEM_Transaction
70
+	 */
71
+	private $transaction_model;
72 72
 
73 73
 
74
-    /**
75
-     * @var EE_Config
76
-     */
77
-    private $config;
74
+	/**
75
+	 * @var EE_Config
76
+	 */
77
+	private $config;
78 78
 
79 79
 
80
-    /**
81
-     * StatsGatherer constructor.
82
-     *
83
-     * @param EEM_Payment_Method $payment_method_model
84
-     * @param EEM_Event          $event_model
85
-     * @param EEM_Datetime       $datetime_model
86
-     * @param EEM_Ticket         $ticket_model
87
-     * @param EEM_Registration   $registration_model
88
-     * @param EEM_Transaction    $transaction_model
89
-     * @param EE_Config          $config
90
-     */
91
-    public function __construct(
92
-        EEM_Payment_Method $payment_method_model,
93
-        EEM_Event $event_model,
94
-        EEM_Datetime $datetime_model,
95
-        EEM_Ticket $ticket_model,
96
-        EEM_Registration $registration_model,
97
-        EEM_Transaction $transaction_model,
98
-        EE_Config $config
99
-    ) {
100
-        $this->payment_method_model = $payment_method_model;
101
-        $this->event_model = $event_model;
102
-        $this->datetime_model = $datetime_model;
103
-        $this->ticket_model = $ticket_model;
104
-        $this->registration_model = $registration_model;
105
-        $this->transaction_model = $transaction_model;
106
-        $this->config = $config;
107
-    }
80
+	/**
81
+	 * StatsGatherer constructor.
82
+	 *
83
+	 * @param EEM_Payment_Method $payment_method_model
84
+	 * @param EEM_Event          $event_model
85
+	 * @param EEM_Datetime       $datetime_model
86
+	 * @param EEM_Ticket         $ticket_model
87
+	 * @param EEM_Registration   $registration_model
88
+	 * @param EEM_Transaction    $transaction_model
89
+	 * @param EE_Config          $config
90
+	 */
91
+	public function __construct(
92
+		EEM_Payment_Method $payment_method_model,
93
+		EEM_Event $event_model,
94
+		EEM_Datetime $datetime_model,
95
+		EEM_Ticket $ticket_model,
96
+		EEM_Registration $registration_model,
97
+		EEM_Transaction $transaction_model,
98
+		EE_Config $config
99
+	) {
100
+		$this->payment_method_model = $payment_method_model;
101
+		$this->event_model = $event_model;
102
+		$this->datetime_model = $datetime_model;
103
+		$this->ticket_model = $ticket_model;
104
+		$this->registration_model = $registration_model;
105
+		$this->transaction_model = $transaction_model;
106
+		$this->config = $config;
107
+	}
108 108
 
109 109
 
110
-    /**
111
-     * Return the stats array for PUE UXIP stats.
112
-     *
113
-     * @return array
114
-     */
115
-    public function stats()
116
-    {
117
-        global $wp_version;
118
-        $stats = $this->paymentMethodStats();
119
-        // a-ok so let's setup our stats.
120
-        $stats = array_merge($stats, array(
121
-            'is_multisite'                    => is_multisite() && is_main_site(),
122
-            'active_theme'                    => $this->getActiveThemeStat(),
123
-            'ee4_all_events_count'            => $this->getCountFor(self::COUNT_ALL_EVENTS),
124
-            'ee4_active_events_count'         => $this->getCountFor(self::COUNT_ACTIVE_EVENTS),
125
-            'all_dtts_count'                  => $this->getCountFor(self::COUNT_DATETIMES),
126
-            'dtt_sold'                        => $this->getCountFor(self::COUNT_DATETIMES_SOLD),
127
-            'all_tkt_count'                   => $this->getCountFor(self::COUNT_TICKETS),
128
-            'free_tkt_count'                  => $this->getCountFor(self::COUNT_TICKETS_FREE),
129
-            'paid_tkt_count'                  => $this->getCountFor(self::COUNT_TICKETS_PAID),
130
-            'tkt_sold'                        => $this->getCountFor(self::COUNT_TICKETS_SOLD),
131
-            'approve_registration_count'      => $this->getCountFor(self::COUNT_REGISTRATIONS_APPROVED),
132
-            'pending_registration_count'      => $this->getCountFor(self::COUNT_REGISTRATIONS_PENDING),
133
-            'not_approved_registration_count' => $this->getCountFor(self::COUNT_REGISTRATIONS_NOT_APPROVED),
134
-            'incomplete_registration_count'   => $this->getCountFor(self::COUNT_REGISTRATIONS_INCOMPLETE),
135
-            'cancelled_registration_count'    => $this->getCountFor(self::COUNT_REGISTRATIONS_CANCELLED),
136
-            'declined_registration_count'     => $this->getCountFor(self::COUNT_REGISTRATIONS_DECLINED),
137
-            'all_registration_count'          => $this->getCountFor(self::COUNT_REGISTRATIONS_ALL),
138
-            'completed_transaction_total_sum' => $this->getCountFor(self::SUM_TRANSACTIONS_COMPLETE_TOTAL),
139
-            'all_transaction_paid_sum'        => $this->getCountFor(self::SUM_TRANSACTIONS_ALL_PAID),
140
-            self::INFO_SITE_CURRENCY          => $this->config->currency instanceof EE_Currency_Config
141
-                ? $this->config->currency->code
142
-                : 'unknown',
143
-            'phpversion'                      => implode(
144
-                '.',
145
-                array(PHP_MAJOR_VERSION, PHP_MINOR_VERSION, PHP_RELEASE_VERSION)
146
-            ),
147
-            'wpversion'                       => $wp_version,
148
-            'active_addons'                   => $this->getActiveAddons(),
149
-        ));
150
-        // remove any values that equal null.  This ensures any stats that weren't retrieved successfully are excluded.
151
-        return array_filter($stats, function ($value) {
152
-            return $value !== null;
153
-        });
154
-    }
110
+	/**
111
+	 * Return the stats array for PUE UXIP stats.
112
+	 *
113
+	 * @return array
114
+	 */
115
+	public function stats()
116
+	{
117
+		global $wp_version;
118
+		$stats = $this->paymentMethodStats();
119
+		// a-ok so let's setup our stats.
120
+		$stats = array_merge($stats, array(
121
+			'is_multisite'                    => is_multisite() && is_main_site(),
122
+			'active_theme'                    => $this->getActiveThemeStat(),
123
+			'ee4_all_events_count'            => $this->getCountFor(self::COUNT_ALL_EVENTS),
124
+			'ee4_active_events_count'         => $this->getCountFor(self::COUNT_ACTIVE_EVENTS),
125
+			'all_dtts_count'                  => $this->getCountFor(self::COUNT_DATETIMES),
126
+			'dtt_sold'                        => $this->getCountFor(self::COUNT_DATETIMES_SOLD),
127
+			'all_tkt_count'                   => $this->getCountFor(self::COUNT_TICKETS),
128
+			'free_tkt_count'                  => $this->getCountFor(self::COUNT_TICKETS_FREE),
129
+			'paid_tkt_count'                  => $this->getCountFor(self::COUNT_TICKETS_PAID),
130
+			'tkt_sold'                        => $this->getCountFor(self::COUNT_TICKETS_SOLD),
131
+			'approve_registration_count'      => $this->getCountFor(self::COUNT_REGISTRATIONS_APPROVED),
132
+			'pending_registration_count'      => $this->getCountFor(self::COUNT_REGISTRATIONS_PENDING),
133
+			'not_approved_registration_count' => $this->getCountFor(self::COUNT_REGISTRATIONS_NOT_APPROVED),
134
+			'incomplete_registration_count'   => $this->getCountFor(self::COUNT_REGISTRATIONS_INCOMPLETE),
135
+			'cancelled_registration_count'    => $this->getCountFor(self::COUNT_REGISTRATIONS_CANCELLED),
136
+			'declined_registration_count'     => $this->getCountFor(self::COUNT_REGISTRATIONS_DECLINED),
137
+			'all_registration_count'          => $this->getCountFor(self::COUNT_REGISTRATIONS_ALL),
138
+			'completed_transaction_total_sum' => $this->getCountFor(self::SUM_TRANSACTIONS_COMPLETE_TOTAL),
139
+			'all_transaction_paid_sum'        => $this->getCountFor(self::SUM_TRANSACTIONS_ALL_PAID),
140
+			self::INFO_SITE_CURRENCY          => $this->config->currency instanceof EE_Currency_Config
141
+				? $this->config->currency->code
142
+				: 'unknown',
143
+			'phpversion'                      => implode(
144
+				'.',
145
+				array(PHP_MAJOR_VERSION, PHP_MINOR_VERSION, PHP_RELEASE_VERSION)
146
+			),
147
+			'wpversion'                       => $wp_version,
148
+			'active_addons'                   => $this->getActiveAddons(),
149
+		));
150
+		// remove any values that equal null.  This ensures any stats that weren't retrieved successfully are excluded.
151
+		return array_filter($stats, function ($value) {
152
+			return $value !== null;
153
+		});
154
+	}
155 155
 
156
-    /**
157
-     * @param string $which enum (@see constants prefixed with COUNT)
158
-     * @return int|null
159
-     */
160
-    private function getCountFor($which)
161
-    {
162
-        try {
163
-            switch ($which) {
164
-                case self::COUNT_ALL_EVENTS:
165
-                    $count = $this->event_model->count();
166
-                    break;
167
-                case self::COUNT_TICKETS:
168
-                    $count = $this->ticket_model->count();
169
-                    break;
170
-                case self::COUNT_DATETIMES:
171
-                    $count = $this->datetime_model->count();
172
-                    break;
173
-                case self::COUNT_ACTIVE_EVENTS:
174
-                    $count = $this->event_model->get_active_events(array(), true);
175
-                    break;
176
-                case self::COUNT_DATETIMES_SOLD:
177
-                    $count = $this->datetime_model->sum(array(), 'DTT_sold');
178
-                    break;
179
-                case self::COUNT_TICKETS_FREE:
180
-                    $count = $this->ticket_model->count(array(
181
-                        array(
182
-                            'TKT_price' => 0,
183
-                        ),
184
-                    ));
185
-                    break;
186
-                case self::COUNT_TICKETS_PAID:
187
-                    $count = $this->ticket_model->count(array(
188
-                        array(
189
-                            'TKT_price' => array('>', 0),
190
-                        ),
191
-                    ));
192
-                    break;
193
-                case self::COUNT_TICKETS_SOLD:
194
-                    $count = $this->ticket_model->sum(array(), 'TKT_sold');
195
-                    break;
196
-                case self::COUNT_REGISTRATIONS_ALL:
197
-                    $count = $this->registration_model->count();
198
-                    break;
199
-                case self::COUNT_REGISTRATIONS_CANCELLED:
200
-                    $count = $this->registration_model->count(
201
-                        array(
202
-                            array(
203
-                                'STS_ID' => EEM_Registration::status_id_cancelled,
204
-                            ),
205
-                        )
206
-                    );
207
-                    break;
208
-                case self::COUNT_REGISTRATIONS_INCOMPLETE:
209
-                    $count = $this->registration_model->count(
210
-                        array(
211
-                            array(
212
-                                'STS_ID' => EEM_Registration::status_id_incomplete,
213
-                            ),
214
-                        )
215
-                    );
216
-                    break;
217
-                case self::COUNT_REGISTRATIONS_NOT_APPROVED:
218
-                    $count = $this->registration_model->count(
219
-                        array(
220
-                            array(
221
-                                'STS_ID' => EEM_Registration::status_id_not_approved,
222
-                            ),
223
-                        )
224
-                    );
225
-                    break;
226
-                case self::COUNT_REGISTRATIONS_DECLINED:
227
-                    $count = $this->registration_model->count(
228
-                        array(
229
-                            array(
230
-                                'STS_ID' => EEM_Registration::status_id_declined,
231
-                            ),
232
-                        )
233
-                    );
234
-                    break;
235
-                case self::COUNT_REGISTRATIONS_PENDING:
236
-                    $count = $this->registration_model->count(
237
-                        array(
238
-                            array(
239
-                                'STS_ID' => EEM_Registration::status_id_pending_payment,
240
-                            ),
241
-                        )
242
-                    );
243
-                    break;
244
-                case self::COUNT_REGISTRATIONS_APPROVED:
245
-                    $count = $this->registration_model->count(
246
-                        array(
247
-                            array(
248
-                                'STS_ID' => EEM_Registration::status_id_approved,
249
-                            ),
250
-                        )
251
-                    );
252
-                    break;
253
-                case self::SUM_TRANSACTIONS_COMPLETE_TOTAL:
254
-                    $count = $this->transaction_model->sum(
255
-                        array(
256
-                            array(
257
-                                'STS_ID' => EEM_Transaction::complete_status_code,
258
-                            ),
259
-                        ),
260
-                        'TXN_total'
261
-                    );
262
-                    break;
263
-                case self::SUM_TRANSACTIONS_ALL_PAID:
264
-                    $count = $this->transaction_model->sum(
265
-                        array(),
266
-                        'TXN_paid'
267
-                    );
268
-                    break;
269
-                default:
270
-                    $count = null;
271
-                    break;
272
-            }
273
-        } catch (Exception $e) {
274
-            $count = null;
275
-        }
276
-        return $count;
277
-    }
156
+	/**
157
+	 * @param string $which enum (@see constants prefixed with COUNT)
158
+	 * @return int|null
159
+	 */
160
+	private function getCountFor($which)
161
+	{
162
+		try {
163
+			switch ($which) {
164
+				case self::COUNT_ALL_EVENTS:
165
+					$count = $this->event_model->count();
166
+					break;
167
+				case self::COUNT_TICKETS:
168
+					$count = $this->ticket_model->count();
169
+					break;
170
+				case self::COUNT_DATETIMES:
171
+					$count = $this->datetime_model->count();
172
+					break;
173
+				case self::COUNT_ACTIVE_EVENTS:
174
+					$count = $this->event_model->get_active_events(array(), true);
175
+					break;
176
+				case self::COUNT_DATETIMES_SOLD:
177
+					$count = $this->datetime_model->sum(array(), 'DTT_sold');
178
+					break;
179
+				case self::COUNT_TICKETS_FREE:
180
+					$count = $this->ticket_model->count(array(
181
+						array(
182
+							'TKT_price' => 0,
183
+						),
184
+					));
185
+					break;
186
+				case self::COUNT_TICKETS_PAID:
187
+					$count = $this->ticket_model->count(array(
188
+						array(
189
+							'TKT_price' => array('>', 0),
190
+						),
191
+					));
192
+					break;
193
+				case self::COUNT_TICKETS_SOLD:
194
+					$count = $this->ticket_model->sum(array(), 'TKT_sold');
195
+					break;
196
+				case self::COUNT_REGISTRATIONS_ALL:
197
+					$count = $this->registration_model->count();
198
+					break;
199
+				case self::COUNT_REGISTRATIONS_CANCELLED:
200
+					$count = $this->registration_model->count(
201
+						array(
202
+							array(
203
+								'STS_ID' => EEM_Registration::status_id_cancelled,
204
+							),
205
+						)
206
+					);
207
+					break;
208
+				case self::COUNT_REGISTRATIONS_INCOMPLETE:
209
+					$count = $this->registration_model->count(
210
+						array(
211
+							array(
212
+								'STS_ID' => EEM_Registration::status_id_incomplete,
213
+							),
214
+						)
215
+					);
216
+					break;
217
+				case self::COUNT_REGISTRATIONS_NOT_APPROVED:
218
+					$count = $this->registration_model->count(
219
+						array(
220
+							array(
221
+								'STS_ID' => EEM_Registration::status_id_not_approved,
222
+							),
223
+						)
224
+					);
225
+					break;
226
+				case self::COUNT_REGISTRATIONS_DECLINED:
227
+					$count = $this->registration_model->count(
228
+						array(
229
+							array(
230
+								'STS_ID' => EEM_Registration::status_id_declined,
231
+							),
232
+						)
233
+					);
234
+					break;
235
+				case self::COUNT_REGISTRATIONS_PENDING:
236
+					$count = $this->registration_model->count(
237
+						array(
238
+							array(
239
+								'STS_ID' => EEM_Registration::status_id_pending_payment,
240
+							),
241
+						)
242
+					);
243
+					break;
244
+				case self::COUNT_REGISTRATIONS_APPROVED:
245
+					$count = $this->registration_model->count(
246
+						array(
247
+							array(
248
+								'STS_ID' => EEM_Registration::status_id_approved,
249
+							),
250
+						)
251
+					);
252
+					break;
253
+				case self::SUM_TRANSACTIONS_COMPLETE_TOTAL:
254
+					$count = $this->transaction_model->sum(
255
+						array(
256
+							array(
257
+								'STS_ID' => EEM_Transaction::complete_status_code,
258
+							),
259
+						),
260
+						'TXN_total'
261
+					);
262
+					break;
263
+				case self::SUM_TRANSACTIONS_ALL_PAID:
264
+					$count = $this->transaction_model->sum(
265
+						array(),
266
+						'TXN_paid'
267
+					);
268
+					break;
269
+				default:
270
+					$count = null;
271
+					break;
272
+			}
273
+		} catch (Exception $e) {
274
+			$count = null;
275
+		}
276
+		return $count;
277
+	}
278 278
 
279
-    /**
280
-     * Return the active theme.
281
-     *
282
-     * @return false|string
283
-     */
284
-    private function getActiveThemeStat()
285
-    {
286
-        $theme = wp_get_theme();
287
-        return $theme->get('Name');
288
-    }
279
+	/**
280
+	 * Return the active theme.
281
+	 *
282
+	 * @return false|string
283
+	 */
284
+	private function getActiveThemeStat()
285
+	{
286
+		$theme = wp_get_theme();
287
+		return $theme->get('Name');
288
+	}
289 289
 
290
-    /**
291
-     * @return array
292
-     */
293
-    private function paymentMethodStats()
294
-    {
295
-        $payment_method_stats = array();
296
-        try {
297
-            $active_payment_methods = $this->payment_method_model->get_all_active(
298
-                null,
299
-                array('group_by' => 'PMD_type')
300
-            );
301
-            if ($active_payment_methods) {
302
-                foreach ($active_payment_methods as $payment_method) {
303
-                    $payment_method_stats[ $payment_method->name() . '_active_payment_method' ] = 1;
304
-                }
305
-            }
306
-        } catch (Exception $e) {
307
-            // do nothing just prevents fatals.
308
-        }
309
-        return $payment_method_stats;
310
-    }
290
+	/**
291
+	 * @return array
292
+	 */
293
+	private function paymentMethodStats()
294
+	{
295
+		$payment_method_stats = array();
296
+		try {
297
+			$active_payment_methods = $this->payment_method_model->get_all_active(
298
+				null,
299
+				array('group_by' => 'PMD_type')
300
+			);
301
+			if ($active_payment_methods) {
302
+				foreach ($active_payment_methods as $payment_method) {
303
+					$payment_method_stats[ $payment_method->name() . '_active_payment_method' ] = 1;
304
+				}
305
+			}
306
+		} catch (Exception $e) {
307
+			// do nothing just prevents fatals.
308
+		}
309
+		return $payment_method_stats;
310
+	}
311 311
 
312 312
 
313
-    /**
314
-     * Return a list of active EE add-ons and their versions.
315
-     *
316
-     * @return string
317
-     */
318
-    private function getActiveAddons()
319
-    {
320
-        $activeAddons = [];
321
-        $addOns = EE_Registry::instance()->addons;
322
-        if (! empty($addOns)) {
323
-            foreach ($addOns as $addon) {
324
-                $activeAddons[] = $addon->name() . '@' . $addon->version();
325
-            }
326
-        }
327
-        return implode(',', $activeAddons);
328
-    }
313
+	/**
314
+	 * Return a list of active EE add-ons and their versions.
315
+	 *
316
+	 * @return string
317
+	 */
318
+	private function getActiveAddons()
319
+	{
320
+		$activeAddons = [];
321
+		$addOns = EE_Registry::instance()->addons;
322
+		if (! empty($addOns)) {
323
+			foreach ($addOns as $addon) {
324
+				$activeAddons[] = $addon->name() . '@' . $addon->version();
325
+			}
326
+		}
327
+		return implode(',', $activeAddons);
328
+	}
329 329
 }
Please login to merge, or discard this patch.
Spacing   +4 added lines, -4 removed lines patch added patch discarded remove patch
@@ -148,7 +148,7 @@  discard block
 block discarded – undo
148 148
             'active_addons'                   => $this->getActiveAddons(),
149 149
         ));
150 150
         // remove any values that equal null.  This ensures any stats that weren't retrieved successfully are excluded.
151
-        return array_filter($stats, function ($value) {
151
+        return array_filter($stats, function($value) {
152 152
             return $value !== null;
153 153
         });
154 154
     }
@@ -300,7 +300,7 @@  discard block
 block discarded – undo
300 300
             );
301 301
             if ($active_payment_methods) {
302 302
                 foreach ($active_payment_methods as $payment_method) {
303
-                    $payment_method_stats[ $payment_method->name() . '_active_payment_method' ] = 1;
303
+                    $payment_method_stats[$payment_method->name().'_active_payment_method'] = 1;
304 304
                 }
305 305
             }
306 306
         } catch (Exception $e) {
@@ -319,9 +319,9 @@  discard block
 block discarded – undo
319 319
     {
320 320
         $activeAddons = [];
321 321
         $addOns = EE_Registry::instance()->addons;
322
-        if (! empty($addOns)) {
322
+        if ( ! empty($addOns)) {
323 323
             foreach ($addOns as $addon) {
324
-                $activeAddons[] = $addon->name() . '@' . $addon->version();
324
+                $activeAddons[] = $addon->name().'@'.$addon->version();
325 325
             }
326 326
         }
327 327
         return implode(',', $activeAddons);
Please login to merge, or discard this patch.
core/data_migration_scripts/EE_DMS_Core_4_8_0.dms.php 2 patches
Spacing   +10 added lines, -10 removed lines patch added patch discarded remove patch
@@ -14,12 +14,12 @@  discard block
 block discarded – undo
14 14
 // unfortunately, this needs to be done upon INCLUSION of this file,
15 15
 // instead of construction, because it only gets constructed on first page load
16 16
 // (all other times it gets resurrected from a wordpress option)
17
-$stages = glob(EE_CORE . 'data_migration_scripts/4_8_0_stages/*');
17
+$stages = glob(EE_CORE.'data_migration_scripts/4_8_0_stages/*');
18 18
 $class_to_filepath = array();
19 19
 foreach ($stages as $filepath) {
20 20
     $matches = array();
21 21
     preg_match('~4_8_0_stages/(.*).dmsstage.php~', $filepath, $matches);
22
-    $class_to_filepath[ $matches[1] ] = $filepath;
22
+    $class_to_filepath[$matches[1]] = $filepath;
23 23
 }
24 24
 // give addons a chance to autoload their stages too
25 25
 $class_to_filepath = apply_filters('FHEE__EE_DMS_4_8_0__autoloaded_stages', $class_to_filepath);
@@ -72,10 +72,10 @@  discard block
 block discarded – undo
72 72
         if (version_compare($version_string, '4.8.0.decaf', '<') && version_compare($version_string, '4.7.0.decaf', '>=')) {
73 73
 //          echo "$version_string can be migrated from";
74 74
             return true;
75
-        } elseif (! $version_string) {
75
+        } elseif ( ! $version_string) {
76 76
 //          echo "no version string provided: $version_string";
77 77
             // no version string provided... this must be pre 4.3
78
-            return false;// changed mind. dont want people thinking they should migrate yet because they cant
78
+            return false; // changed mind. dont want people thinking they should migrate yet because they cant
79 79
         } else {
80 80
 //          echo "$version_string doesnt apply";
81 81
             return false;
@@ -89,9 +89,9 @@  discard block
 block discarded – undo
89 89
      */
90 90
     public function schema_changes_before_migration()
91 91
     {
92
-        require_once(EE_HELPERS . 'EEH_Activation.helper.php');
92
+        require_once(EE_HELPERS.'EEH_Activation.helper.php');
93 93
         $now_in_mysql = current_time('mysql', true);
94
-        require_once(EE_HELPERS . 'EEH_Activation.helper.php');
94
+        require_once(EE_HELPERS.'EEH_Activation.helper.php');
95 95
         $table_name = 'esp_answer';
96 96
         $sql = " ANS_ID int(10) unsigned NOT NULL AUTO_INCREMENT,
97 97
 					REG_ID int(10) unsigned NOT NULL,
@@ -685,7 +685,7 @@  discard block
 block discarded – undo
685 685
             ),
686 686
         );
687 687
         global $wpdb;
688
-        $country_table = $wpdb->prefix . "esp_country";
688
+        $country_table = $wpdb->prefix."esp_country";
689 689
         $country_format = array(
690 690
             "CNT_ISO"         => '%s',
691 691
             "CNT_ISO3"        => '%s',
@@ -705,7 +705,7 @@  discard block
 block discarded – undo
705 705
             foreach ($newer_countries as $country) {
706 706
                 $SQL = "SELECT COUNT('CNT_ISO') FROM {$country_table} WHERE CNT_ISO='{$country[0]}' LIMIT 1";
707 707
                 $countries = $wpdb->get_var($SQL);
708
-                if (! $countries) {
708
+                if ( ! $countries) {
709 709
                     $wpdb->insert(
710 710
                         $country_table,
711 711
                         array_combine(array_keys($country_format), $country),
@@ -732,7 +732,7 @@  discard block
 block discarded – undo
732 732
             array('RSD', 'Dinar', 'Dinars', '', 3, 1),
733 733
         );
734 734
         global $wpdb;
735
-        $currency_table = $wpdb->prefix . "esp_currency";
735
+        $currency_table = $wpdb->prefix."esp_currency";
736 736
         $currency_format = array(
737 737
             "CUR_code"    => '%s',
738 738
             "CUR_single"  => '%s',
@@ -745,7 +745,7 @@  discard block
 block discarded – undo
745 745
             foreach ($newer_currencies as $currency) {
746 746
                 $SQL = "SELECT COUNT('CUR_code') FROM {$currency_table} WHERE CUR_code='{$currency[0]}' LIMIT 1";
747 747
                 $countries = $wpdb->get_var($SQL);
748
-                if (! $countries) {
748
+                if ( ! $countries) {
749 749
                     $wpdb->insert(
750 750
                         $currency_table,
751 751
                         array_combine(array_keys($currency_format), $currency),
Please login to merge, or discard this patch.
Indentation   +357 added lines, -357 removed lines patch added patch discarded remove patch
@@ -10,9 +10,9 @@  discard block
 block discarded – undo
10 10
 $stages = glob(EE_CORE . 'data_migration_scripts/4_8_0_stages/*');
11 11
 $class_to_filepath = array();
12 12
 foreach ($stages as $filepath) {
13
-    $matches = array();
14
-    preg_match('~4_8_0_stages/(.*).dmsstage.php~', $filepath, $matches);
15
-    $class_to_filepath[ $matches[1] ] = $filepath;
13
+	$matches = array();
14
+	preg_match('~4_8_0_stages/(.*).dmsstage.php~', $filepath, $matches);
15
+	$class_to_filepath[ $matches[1] ] = $filepath;
16 16
 }
17 17
 // give addons a chance to autoload their stages too
18 18
 $class_to_filepath = apply_filters('FHEE__EE_DMS_4_8_0__autoloaded_stages', $class_to_filepath);
@@ -34,71 +34,71 @@  discard block
 block discarded – undo
34 34
  */
35 35
 class EE_DMS_Core_4_8_0 extends EE_Data_Migration_Script_Base
36 36
 {
37
-    /**
38
-     * return EE_DMS_Core_4_8_0
39
-     *
40
-     * @param TableManager  $table_manager
41
-     * @param TableAnalysis $table_analysis
42
-     */
43
-    public function __construct(TableManager $table_manager = null, TableAnalysis $table_analysis = null)
44
-    {
45
-        $this->_pretty_name = esc_html__("Data Update to Event Espresso 4.8.0", "event_espresso");
46
-        $this->_priority = 10;
47
-        $this->_migration_stages = array(
48
-            new EE_DMS_4_8_0_pretax_totals(),
49
-            new EE_DMS_4_8_0_event_subtotals(),
50
-        );
51
-        parent::__construct($table_manager, $table_analysis);
52
-    }
37
+	/**
38
+	 * return EE_DMS_Core_4_8_0
39
+	 *
40
+	 * @param TableManager  $table_manager
41
+	 * @param TableAnalysis $table_analysis
42
+	 */
43
+	public function __construct(TableManager $table_manager = null, TableAnalysis $table_analysis = null)
44
+	{
45
+		$this->_pretty_name = esc_html__("Data Update to Event Espresso 4.8.0", "event_espresso");
46
+		$this->_priority = 10;
47
+		$this->_migration_stages = array(
48
+			new EE_DMS_4_8_0_pretax_totals(),
49
+			new EE_DMS_4_8_0_event_subtotals(),
50
+		);
51
+		parent::__construct($table_manager, $table_analysis);
52
+	}
53 53
 
54 54
 
55 55
 
56
-    /**
57
-     * Because this is being done at basically the same time as the MER-ready branch
58
-     * of core, it's possible people might have installed MEr-ready branch first,
59
-     * and then this one, in which case we still want to perform this migration,
60
-     * even though the version might not have increased
61
-     *
62
-     * @param array $version_array
63
-     * @return bool
64
-     */
65
-    public function can_migrate_from_version($version_array)
66
-    {
67
-        $version_string = $version_array['Core'];
68
-        if (version_compare($version_string, '4.8.0.decaf', '<') && version_compare($version_string, '4.7.0.decaf', '>=')) {
56
+	/**
57
+	 * Because this is being done at basically the same time as the MER-ready branch
58
+	 * of core, it's possible people might have installed MEr-ready branch first,
59
+	 * and then this one, in which case we still want to perform this migration,
60
+	 * even though the version might not have increased
61
+	 *
62
+	 * @param array $version_array
63
+	 * @return bool
64
+	 */
65
+	public function can_migrate_from_version($version_array)
66
+	{
67
+		$version_string = $version_array['Core'];
68
+		if (version_compare($version_string, '4.8.0.decaf', '<') && version_compare($version_string, '4.7.0.decaf', '>=')) {
69 69
 //          echo "$version_string can be migrated from";
70
-            return true;
71
-        } elseif (! $version_string) {
70
+			return true;
71
+		} elseif (! $version_string) {
72 72
 //          echo "no version string provided: $version_string";
73
-            // no version string provided... this must be pre 4.3
74
-            return false;// changed mind. dont want people thinking they should migrate yet because they cant
75
-        } else {
73
+			// no version string provided... this must be pre 4.3
74
+			return false;// changed mind. dont want people thinking they should migrate yet because they cant
75
+		} else {
76 76
 //          echo "$version_string doesnt apply";
77
-            return false;
78
-        }
79
-    }
77
+			return false;
78
+		}
79
+	}
80 80
 
81 81
 
82 82
 
83
-    /**
84
-     * @return bool
85
-     */
86
-    public function schema_changes_before_migration()
87
-    {
88
-        require_once(EE_HELPERS . 'EEH_Activation.helper.php');
89
-        $now_in_mysql = current_time('mysql', true);
90
-        require_once(EE_HELPERS . 'EEH_Activation.helper.php');
91
-        $table_name = 'esp_answer';
92
-        $sql = " ANS_ID int(10) unsigned NOT NULL AUTO_INCREMENT,
83
+	/**
84
+	 * @return bool
85
+	 */
86
+	public function schema_changes_before_migration()
87
+	{
88
+		require_once(EE_HELPERS . 'EEH_Activation.helper.php');
89
+		$now_in_mysql = current_time('mysql', true);
90
+		require_once(EE_HELPERS . 'EEH_Activation.helper.php');
91
+		$table_name = 'esp_answer';
92
+		$sql = " ANS_ID int(10) unsigned NOT NULL AUTO_INCREMENT,
93 93
 					REG_ID int(10) unsigned NOT NULL,
94 94
 					QST_ID int(10) unsigned NOT NULL,
95 95
 					ANS_value text NOT NULL,
96 96
 					PRIMARY KEY  (ANS_ID),
97 97
 					KEY REG_ID (REG_ID),
98 98
 					KEY QST_ID (QST_ID)";
99
-        $this->_table_is_changed_in_this_version($table_name, $sql, 'ENGINE=InnoDB');
100
-        $table_name = 'esp_attendee_meta';
101
-        $sql = "ATTM_ID int(10) unsigned NOT	NULL AUTO_INCREMENT,
99
+		$this->_table_is_changed_in_this_version($table_name, $sql, 'ENGINE=InnoDB');
100
+		$table_name = 'esp_attendee_meta';
101
+		$sql = "ATTM_ID int(10) unsigned NOT	NULL AUTO_INCREMENT,
102 102
 						ATT_ID bigint(20) unsigned NOT NULL,
103 103
 						ATT_fname varchar(45) NOT NULL,
104 104
 						ATT_lname varchar(45) NOT	NULL,
@@ -113,9 +113,9 @@  discard block
 block discarded – undo
113 113
 							PRIMARY KEY  (ATTM_ID),
114 114
 								KEY ATT_ID (ATT_ID),
115 115
 								KEY ATT_email (ATT_email(191))";
116
-        $this->_table_is_changed_in_this_version($table_name, $sql, 'ENGINE=InnoDB ');
117
-        $table_name = 'esp_country';
118
-        $sql = "CNT_ISO varchar(2) collate utf8_bin NOT NULL,
116
+		$this->_table_is_changed_in_this_version($table_name, $sql, 'ENGINE=InnoDB ');
117
+		$table_name = 'esp_country';
118
+		$sql = "CNT_ISO varchar(2) collate utf8_bin NOT NULL,
119 119
 					  CNT_ISO3 varchar(3) collate utf8_bin NOT NULL,
120 120
 					  RGN_ID tinyint(3) unsigned DEFAULT NULL,
121 121
 					  CNT_name varchar(45) collate utf8_bin NOT NULL,
@@ -131,25 +131,25 @@  discard block
 block discarded – undo
131 131
 					  CNT_is_EU tinyint(1) DEFAULT '0',
132 132
 					  CNT_active tinyint(1) DEFAULT '0',
133 133
 					  PRIMARY KEY  (CNT_ISO)";
134
-        $this->_table_has_not_changed_since_previous($table_name, $sql, 'ENGINE=InnoDB');
135
-        $table_name = 'esp_currency';
136
-        $sql = "CUR_code varchar(6) collate utf8_bin NOT NULL,
134
+		$this->_table_has_not_changed_since_previous($table_name, $sql, 'ENGINE=InnoDB');
135
+		$table_name = 'esp_currency';
136
+		$sql = "CUR_code varchar(6) collate utf8_bin NOT NULL,
137 137
 				CUR_single varchar(45) collate utf8_bin DEFAULT 'dollar',
138 138
 				CUR_plural varchar(45) collate utf8_bin DEFAULT 'dollars',
139 139
 				CUR_sign varchar(45) collate utf8_bin DEFAULT '$',
140 140
 				CUR_dec_plc varchar(1) collate utf8_bin NOT NULL DEFAULT '2',
141 141
 				CUR_active tinyint(1) DEFAULT '0',
142 142
 				PRIMARY KEY  (CUR_code)";
143
-        $this->_table_has_not_changed_since_previous($table_name, $sql, 'ENGINE=InnoDB');
144
-        $table_name = 'esp_currency_payment_method';
145
-        $sql = "CPM_ID int(11) NOT NULL AUTO_INCREMENT,
143
+		$this->_table_has_not_changed_since_previous($table_name, $sql, 'ENGINE=InnoDB');
144
+		$table_name = 'esp_currency_payment_method';
145
+		$sql = "CPM_ID int(11) NOT NULL AUTO_INCREMENT,
146 146
 				CUR_code varchar(6) collate utf8_bin NOT NULL,
147 147
 				PMD_ID int(11) NOT NULL,
148 148
 				PRIMARY KEY  (CPM_ID),
149 149
 				KEY PMD_ID (PMD_ID)";
150
-        $this->_table_is_changed_in_this_version($table_name, $sql, 'ENGINE=InnoDB ');
151
-        $table_name = 'esp_datetime';
152
-        $sql = "DTT_ID int(10) unsigned NOT NULL AUTO_INCREMENT,
150
+		$this->_table_is_changed_in_this_version($table_name, $sql, 'ENGINE=InnoDB ');
151
+		$table_name = 'esp_datetime';
152
+		$sql = "DTT_ID int(10) unsigned NOT NULL AUTO_INCREMENT,
153 153
 				  EVT_ID bigint(20) unsigned NOT NULL,
154 154
 				  DTT_name varchar(255) NOT NULL DEFAULT '',
155 155
 				  DTT_description text NOT NULL,
@@ -165,9 +165,9 @@  discard block
 block discarded – undo
165 165
 						KEY DTT_EVT_start (DTT_EVT_start),
166 166
 						KEY EVT_ID (EVT_ID),
167 167
 						KEY DTT_is_primary (DTT_is_primary)";
168
-        $this->_table_is_changed_in_this_version($table_name, $sql, 'ENGINE=InnoDB');
169
-        $table_name = 'esp_event_meta';
170
-        $sql = "
168
+		$this->_table_is_changed_in_this_version($table_name, $sql, 'ENGINE=InnoDB');
169
+		$table_name = 'esp_event_meta';
170
+		$sql = "
171 171
 			EVTM_ID int(10) NOT NULL AUTO_INCREMENT,
172 172
 			EVT_ID bigint(20) unsigned NOT NULL,
173 173
 			EVT_display_desc tinyint(1) unsigned NOT NULL DEFAULT 1,
@@ -183,34 +183,34 @@  discard block
 block discarded – undo
183 183
 			EVT_donations tinyint(1) NULL,
184 184
 			PRIMARY KEY  (EVTM_ID),
185 185
 			KEY EVT_ID (EVT_ID)";
186
-        $this->_table_is_changed_in_this_version($table_name, $sql, 'ENGINE=InnoDB');
187
-        $table_name = 'esp_event_question_group';
188
-        $sql = "EQG_ID int(10) unsigned NOT NULL AUTO_INCREMENT,
186
+		$this->_table_is_changed_in_this_version($table_name, $sql, 'ENGINE=InnoDB');
187
+		$table_name = 'esp_event_question_group';
188
+		$sql = "EQG_ID int(10) unsigned NOT NULL AUTO_INCREMENT,
189 189
 					EVT_ID bigint(20) unsigned NOT NULL,
190 190
 					QSG_ID int(10) unsigned NOT NULL,
191 191
 					EQG_primary tinyint(1) unsigned NOT NULL DEFAULT 0,
192 192
 					PRIMARY KEY  (EQG_ID),
193 193
 					KEY EVT_ID (EVT_ID),
194 194
 					KEY QSG_ID (QSG_ID)";
195
-        $this->_table_is_changed_in_this_version($table_name, $sql, 'ENGINE=InnoDB');
196
-        $table_name = 'esp_event_venue';
197
-        $sql = "EVV_ID int(11) NOT NULL AUTO_INCREMENT,
195
+		$this->_table_is_changed_in_this_version($table_name, $sql, 'ENGINE=InnoDB');
196
+		$table_name = 'esp_event_venue';
197
+		$sql = "EVV_ID int(11) NOT NULL AUTO_INCREMENT,
198 198
 				EVT_ID bigint(20) unsigned NOT NULL,
199 199
 				VNU_ID bigint(20) unsigned NOT NULL,
200 200
 				EVV_primary tinyint(1) unsigned NOT NULL DEFAULT 0,
201 201
 				PRIMARY KEY  (EVV_ID)";
202
-        $this->_table_has_not_changed_since_previous($table_name, $sql, 'ENGINE=InnoDB');
203
-        $table_name = 'esp_extra_meta';
204
-        $sql = "EXM_ID int(11) NOT NULL AUTO_INCREMENT,
202
+		$this->_table_has_not_changed_since_previous($table_name, $sql, 'ENGINE=InnoDB');
203
+		$table_name = 'esp_extra_meta';
204
+		$sql = "EXM_ID int(11) NOT NULL AUTO_INCREMENT,
205 205
 				OBJ_ID int(11) DEFAULT NULL,
206 206
 				EXM_type varchar(45) DEFAULT NULL,
207 207
 				EXM_key varchar(45) DEFAULT NULL,
208 208
 				EXM_value text,
209 209
 				PRIMARY KEY  (EXM_ID),
210 210
 				KEY EXM_type (EXM_type,OBJ_ID,EXM_key)";
211
-        $this->_table_is_changed_in_this_version($table_name, $sql, 'ENGINE=InnoDB');
212
-        $table_name = 'esp_extra_join';
213
-        $sql = "EXJ_ID int(11) NOT NULL AUTO_INCREMENT,
211
+		$this->_table_is_changed_in_this_version($table_name, $sql, 'ENGINE=InnoDB');
212
+		$table_name = 'esp_extra_join';
213
+		$sql = "EXJ_ID int(11) NOT NULL AUTO_INCREMENT,
214 214
 				EXJ_first_model_id varchar(6) NOT NULL,
215 215
 				EXJ_first_model_name varchar(20) NOT NULL,
216 216
 				EXJ_second_model_id varchar(6) NOT NULL,
@@ -218,9 +218,9 @@  discard block
 block discarded – undo
218 218
 				PRIMARY KEY  (EXJ_ID),
219 219
 				KEY first_model (EXJ_first_model_name,EXJ_first_model_id),
220 220
 				KEY second_model (EXJ_second_model_name,EXJ_second_model_id)";
221
-        $this->_table_is_new_in_this_version($table_name, $sql, 'ENGINE=InnoDB ');
222
-        $table_name = 'esp_line_item';
223
-        $sql = "LIN_ID int(11) NOT NULL AUTO_INCREMENT,
221
+		$this->_table_is_new_in_this_version($table_name, $sql, 'ENGINE=InnoDB ');
222
+		$table_name = 'esp_line_item';
223
+		$sql = "LIN_ID int(11) NOT NULL AUTO_INCREMENT,
224 224
 				LIN_code varchar(245) NOT NULL DEFAULT '',
225 225
 				TXN_ID int(11) DEFAULT NULL,
226 226
 				LIN_name varchar(245) NOT NULL DEFAULT '',
@@ -239,9 +239,9 @@  discard block
 block discarded – undo
239 239
 				PRIMARY KEY  (LIN_ID),
240 240
 				KEY LIN_code (LIN_code(191)),
241 241
 				KEY TXN_ID (TXN_ID)";
242
-        $this->_table_is_changed_in_this_version($table_name, $sql, 'ENGINE=InnoDB');
243
-        $table_name = 'esp_log';
244
-        $sql = "LOG_ID int(11) NOT NULL AUTO_INCREMENT,
242
+		$this->_table_is_changed_in_this_version($table_name, $sql, 'ENGINE=InnoDB');
243
+		$table_name = 'esp_log';
244
+		$sql = "LOG_ID int(11) NOT NULL AUTO_INCREMENT,
245 245
 				LOG_time datetime DEFAULT NULL,
246 246
 				OBJ_ID varchar(45) DEFAULT NULL,
247 247
 				OBJ_type varchar(45) DEFAULT NULL,
@@ -252,18 +252,18 @@  discard block
 block discarded – undo
252 252
 				KEY LOG_time (LOG_time),
253 253
 				KEY OBJ (OBJ_type,OBJ_ID),
254 254
 				KEY LOG_type (LOG_type)";
255
-        $this->_table_is_changed_in_this_version($table_name, $sql, 'ENGINE=InnoDB');
256
-        $table_name = 'esp_message_template';
257
-        $sql = "MTP_ID int(10) unsigned NOT NULL AUTO_INCREMENT,
255
+		$this->_table_is_changed_in_this_version($table_name, $sql, 'ENGINE=InnoDB');
256
+		$table_name = 'esp_message_template';
257
+		$sql = "MTP_ID int(10) unsigned NOT NULL AUTO_INCREMENT,
258 258
 					GRP_ID int(10) unsigned NOT NULL,
259 259
 					MTP_context varchar(50) NOT NULL,
260 260
 					MTP_template_field varchar(30) NOT NULL,
261 261
 					MTP_content text NOT NULL,
262 262
 					PRIMARY KEY  (MTP_ID),
263 263
 					KEY GRP_ID (GRP_ID)";
264
-        $this->_table_has_not_changed_since_previous($table_name, $sql, 'ENGINE=InnoDB');
265
-        $table_name = 'esp_message_template_group';
266
-        $sql = "GRP_ID int(10) unsigned NOT NULL AUTO_INCREMENT,
264
+		$this->_table_has_not_changed_since_previous($table_name, $sql, 'ENGINE=InnoDB');
265
+		$table_name = 'esp_message_template_group';
266
+		$sql = "GRP_ID int(10) unsigned NOT NULL AUTO_INCREMENT,
267 267
 					MTP_user_id int(10) NOT NULL DEFAULT '1',
268 268
 					MTP_name varchar(245) NOT NULL DEFAULT '',
269 269
 					MTP_description varchar(245) NOT NULL DEFAULT '',
@@ -275,17 +275,17 @@  discard block
 block discarded – undo
275 275
 					MTP_is_active tinyint(1) NOT NULL DEFAULT '1',
276 276
 					PRIMARY KEY  (GRP_ID),
277 277
 					KEY MTP_user_id (MTP_user_id)";
278
-        $this->_table_has_not_changed_since_previous($table_name, $sql, 'ENGINE=InnoDB');
279
-        $table_name = 'esp_event_message_template';
280
-        $sql = "EMT_ID bigint(20) unsigned NOT NULL AUTO_INCREMENT,
278
+		$this->_table_has_not_changed_since_previous($table_name, $sql, 'ENGINE=InnoDB');
279
+		$table_name = 'esp_event_message_template';
280
+		$sql = "EMT_ID bigint(20) unsigned NOT NULL AUTO_INCREMENT,
281 281
 					EVT_ID bigint(20) unsigned NOT NULL DEFAULT 0,
282 282
 					GRP_ID int(10) unsigned NOT NULL DEFAULT 0,
283 283
 					PRIMARY KEY  (EMT_ID),
284 284
 					KEY EVT_ID (EVT_ID),
285 285
 					KEY GRP_ID (GRP_ID)";
286
-        $this->_table_has_not_changed_since_previous($table_name, $sql, 'ENGINE=InnoDB');
287
-        $table_name = 'esp_payment';
288
-        $sql = "PAY_ID int(10) unsigned NOT NULL AUTO_INCREMENT,
286
+		$this->_table_has_not_changed_since_previous($table_name, $sql, 'ENGINE=InnoDB');
287
+		$table_name = 'esp_payment';
288
+		$sql = "PAY_ID int(10) unsigned NOT NULL AUTO_INCREMENT,
289 289
 					TXN_ID int(10) unsigned DEFAULT NULL,
290 290
 					STS_ID varchar(3) collate utf8_bin DEFAULT NULL,
291 291
 					PAY_timestamp datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
@@ -302,9 +302,9 @@  discard block
 block discarded – undo
302 302
 					PRIMARY KEY  (PAY_ID),
303 303
 					KEY PAY_timestamp (PAY_timestamp),
304 304
 					KEY TXN_ID (TXN_ID)";
305
-        $this->_table_is_changed_in_this_version($table_name, $sql, 'ENGINE=InnoDB ');
306
-        $table_name = 'esp_payment_method';
307
-        $sql = "PMD_ID int(11) NOT NULL AUTO_INCREMENT,
305
+		$this->_table_is_changed_in_this_version($table_name, $sql, 'ENGINE=InnoDB ');
306
+		$table_name = 'esp_payment_method';
307
+		$sql = "PMD_ID int(11) NOT NULL AUTO_INCREMENT,
308 308
 				PMD_type varchar(124) DEFAULT NULL,
309 309
 				PMD_name varchar(255) DEFAULT NULL,
310 310
 				PMD_desc text,
@@ -320,32 +320,32 @@  discard block
 block discarded – undo
320 320
 				PRIMARY KEY  (PMD_ID),
321 321
 				UNIQUE KEY PMD_slug_UNIQUE (PMD_slug),
322 322
 				KEY PMD_type (PMD_type)";
323
-        $this->_table_is_changed_in_this_version($table_name, $sql, 'ENGINE=InnoDB ');
324
-        $table_name = "esp_ticket_price";
325
-        $sql = "TKP_ID int(10) unsigned NOT NULL AUTO_INCREMENT,
323
+		$this->_table_is_changed_in_this_version($table_name, $sql, 'ENGINE=InnoDB ');
324
+		$table_name = "esp_ticket_price";
325
+		$sql = "TKP_ID int(10) unsigned NOT NULL AUTO_INCREMENT,
326 326
 					  TKT_ID int(10) unsigned NOT NULL,
327 327
 					  PRC_ID int(10) unsigned NOT NULL,
328 328
 					  PRIMARY KEY  (TKP_ID),
329 329
 					  KEY TKT_ID (TKT_ID),
330 330
 					  KEY PRC_ID (PRC_ID)";
331
-        $this->_table_is_changed_in_this_version($table_name, $sql, 'ENGINE=InnoDB');
332
-        $table_name = "esp_datetime_ticket";
333
-        $sql = "DTK_ID int(10) unsigned NOT NULL AUTO_INCREMENT,
331
+		$this->_table_is_changed_in_this_version($table_name, $sql, 'ENGINE=InnoDB');
332
+		$table_name = "esp_datetime_ticket";
333
+		$sql = "DTK_ID int(10) unsigned NOT NULL AUTO_INCREMENT,
334 334
 					  DTT_ID int(10) unsigned NOT NULL,
335 335
 					  TKT_ID int(10) unsigned NOT NULL,
336 336
 					  PRIMARY KEY  (DTK_ID),
337 337
 					  KEY DTT_ID (DTT_ID),
338 338
 					  KEY TKT_ID (TKT_ID)";
339
-        $this->_table_is_changed_in_this_version($table_name, $sql, 'ENGINE=InnoDB');
340
-        $table_name = "esp_ticket_template";
341
-        $sql = "TTM_ID int(10) unsigned NOT NULL AUTO_INCREMENT,
339
+		$this->_table_is_changed_in_this_version($table_name, $sql, 'ENGINE=InnoDB');
340
+		$table_name = "esp_ticket_template";
341
+		$sql = "TTM_ID int(10) unsigned NOT NULL AUTO_INCREMENT,
342 342
 					  TTM_name varchar(45) NOT NULL,
343 343
 					  TTM_description text,
344 344
 					  TTM_file varchar(45),
345 345
 					  PRIMARY KEY  (TTM_ID)";
346
-        $this->_table_has_not_changed_since_previous($table_name, $sql, 'ENGINE=InnoDB');
347
-        $table_name = 'esp_question';
348
-        $sql = 'QST_ID int(10) unsigned NOT NULL AUTO_INCREMENT,
346
+		$this->_table_has_not_changed_since_previous($table_name, $sql, 'ENGINE=InnoDB');
347
+		$table_name = 'esp_question';
348
+		$sql = 'QST_ID int(10) unsigned NOT NULL AUTO_INCREMENT,
349 349
 					QST_display_text text NOT NULL,
350 350
 					QST_admin_label varchar(255) NOT NULL,
351 351
 					QST_system varchar(25) NOT NULL DEFAULT "",
@@ -359,18 +359,18 @@  discard block
 block discarded – undo
359 359
 					QST_deleted tinyint(2) unsigned NOT NULL DEFAULT 0,
360 360
 					PRIMARY KEY  (QST_ID),
361 361
 					KEY QST_order (QST_order)';
362
-        $this->_table_is_changed_in_this_version($table_name, $sql, 'ENGINE=InnoDB');
363
-        $table_name = 'esp_question_group_question';
364
-        $sql = "QGQ_ID int(10) unsigned NOT NULL AUTO_INCREMENT,
362
+		$this->_table_is_changed_in_this_version($table_name, $sql, 'ENGINE=InnoDB');
363
+		$table_name = 'esp_question_group_question';
364
+		$sql = "QGQ_ID int(10) unsigned NOT NULL AUTO_INCREMENT,
365 365
 					QSG_ID int(10) unsigned NOT NULL,
366 366
 					QST_ID int(10) unsigned NOT NULL,
367 367
 					QGQ_order int(10) unsigned NOT NULL DEFAULT 0,
368 368
 					PRIMARY KEY  (QGQ_ID),
369 369
 					KEY QST_ID (QST_ID),
370 370
 					KEY QSG_ID_order (QSG_ID,QGQ_order)";
371
-        $this->_table_is_changed_in_this_version($table_name, $sql, 'ENGINE=InnoDB');
372
-        $table_name = 'esp_question_option';
373
-        $sql = "QSO_ID int(10) unsigned NOT NULL AUTO_INCREMENT,
371
+		$this->_table_is_changed_in_this_version($table_name, $sql, 'ENGINE=InnoDB');
372
+		$table_name = 'esp_question_option';
373
+		$sql = "QSO_ID int(10) unsigned NOT NULL AUTO_INCREMENT,
374 374
 					QSO_value varchar(255) NOT NULL,
375 375
 					QSO_desc text NOT NULL,
376 376
 					QST_ID int(10) unsigned NOT NULL,
@@ -380,9 +380,9 @@  discard block
 block discarded – undo
380 380
 					PRIMARY KEY  (QSO_ID),
381 381
 					KEY QST_ID (QST_ID),
382 382
 					KEY QSO_order (QSO_order)";
383
-        $this->_table_is_changed_in_this_version($table_name, $sql, 'ENGINE=InnoDB');
384
-        $table_name = 'esp_registration';
385
-        $sql = "REG_ID int(10) unsigned NOT NULL AUTO_INCREMENT,
383
+		$this->_table_is_changed_in_this_version($table_name, $sql, 'ENGINE=InnoDB');
384
+		$table_name = 'esp_registration';
385
+		$sql = "REG_ID int(10) unsigned NOT NULL AUTO_INCREMENT,
386 386
 					  EVT_ID bigint(20) unsigned NOT NULL,
387 387
 					  ATT_ID bigint(20) unsigned NOT NULL,
388 388
 					  TXN_ID int(10) unsigned NOT NULL,
@@ -406,18 +406,18 @@  discard block
 block discarded – undo
406 406
 					  KEY TKT_ID (TKT_ID),
407 407
 					  KEY EVT_ID (EVT_ID),
408 408
 					  KEY STS_ID (STS_ID)";
409
-        $this->_table_is_changed_in_this_version($table_name, $sql, 'ENGINE=InnoDB ');
410
-        $table_name = 'esp_registration_payment';
411
-        $sql = "RPY_ID int(10) unsigned NOT NULL AUTO_INCREMENT,
409
+		$this->_table_is_changed_in_this_version($table_name, $sql, 'ENGINE=InnoDB ');
410
+		$table_name = 'esp_registration_payment';
411
+		$sql = "RPY_ID int(10) unsigned NOT NULL AUTO_INCREMENT,
412 412
 					  REG_ID int(10) unsigned NOT NULL,
413 413
 					  PAY_ID int(10) unsigned NULL,
414 414
 					  RPY_amount decimal(10,3) NOT NULL DEFAULT '0.00',
415 415
 					  PRIMARY KEY  (RPY_ID),
416 416
 					  KEY REG_ID (REG_ID),
417 417
 					  KEY PAY_ID (PAY_ID)";
418
-        $this->_table_is_changed_in_this_version($table_name, $sql, 'ENGINE=InnoDB ');
419
-        $table_name = 'esp_checkin';
420
-        $sql = "CHK_ID int(10) unsigned NOT NULL AUTO_INCREMENT,
418
+		$this->_table_is_changed_in_this_version($table_name, $sql, 'ENGINE=InnoDB ');
419
+		$table_name = 'esp_checkin';
420
+		$sql = "CHK_ID int(10) unsigned NOT NULL AUTO_INCREMENT,
421 421
 					REG_ID int(10) unsigned NOT NULL,
422 422
 					DTT_ID int(10) unsigned NOT NULL,
423 423
 					CHK_in tinyint(1) unsigned NOT NULL DEFAULT 1,
@@ -425,9 +425,9 @@  discard block
 block discarded – undo
425 425
 					PRIMARY KEY  (CHK_ID),
426 426
 					KEY REG_ID (REG_ID),
427 427
 					KEY DTT_ID (DTT_ID)";
428
-        $this->_table_is_changed_in_this_version($table_name, $sql, 'ENGINE=InnoDB');
429
-        $table_name = 'esp_state';
430
-        $sql = "STA_ID smallint(5) unsigned NOT NULL AUTO_INCREMENT,
428
+		$this->_table_is_changed_in_this_version($table_name, $sql, 'ENGINE=InnoDB');
429
+		$table_name = 'esp_state';
430
+		$sql = "STA_ID smallint(5) unsigned NOT NULL AUTO_INCREMENT,
431 431
 					  CNT_ISO varchar(2) collate utf8_bin NOT NULL,
432 432
 					  STA_abbrev varchar(24) collate utf8_bin NOT NULL,
433 433
 					  STA_name varchar(100) collate utf8_bin NOT NULL,
@@ -435,9 +435,9 @@  discard block
 block discarded – undo
435 435
 					  PRIMARY KEY  (STA_ID),
436 436
 					  KEY STA_abbrev (STA_abbrev),
437 437
 					  KEY CNT_ISO (CNT_ISO)";
438
-        $this->_table_is_changed_in_this_version($table_name, $sql, 'ENGINE=InnoDB');
439
-        $table_name = 'esp_status';
440
-        $sql = "STS_ID varchar(3) NOT NULL,
438
+		$this->_table_is_changed_in_this_version($table_name, $sql, 'ENGINE=InnoDB');
439
+		$table_name = 'esp_status';
440
+		$sql = "STS_ID varchar(3) NOT NULL,
441 441
 					  STS_code varchar(45) NOT NULL,
442 442
 					  STS_type varchar(45) NOT NULL,
443 443
 					  STS_can_edit tinyint(1) NOT NULL DEFAULT 0,
@@ -445,9 +445,9 @@  discard block
 block discarded – undo
445 445
 					  STS_open tinyint(1) NOT NULL DEFAULT 1,
446 446
 					  UNIQUE KEY STS_ID_UNIQUE (STS_ID),
447 447
 					  KEY STS_type (STS_type)";
448
-        $this->_table_is_changed_in_this_version($table_name, $sql, 'ENGINE=InnoDB');
449
-        $table_name = 'esp_transaction';
450
-        $sql = "TXN_ID int(10) unsigned NOT NULL AUTO_INCREMENT,
448
+		$this->_table_is_changed_in_this_version($table_name, $sql, 'ENGINE=InnoDB');
449
+		$table_name = 'esp_transaction';
450
+		$sql = "TXN_ID int(10) unsigned NOT NULL AUTO_INCREMENT,
451 451
 					  TXN_timestamp datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
452 452
 					  TXN_total decimal(10,3) DEFAULT '0.00',
453 453
 					  TXN_paid decimal(10,3) NOT NULL DEFAULT '0.00',
@@ -459,9 +459,9 @@  discard block
 block discarded – undo
459 459
 					  PRIMARY KEY  (TXN_ID),
460 460
 					  KEY TXN_timestamp (TXN_timestamp),
461 461
 					  KEY STS_ID (STS_ID)";
462
-        $this->_table_has_not_changed_since_previous($table_name, $sql, 'ENGINE=InnoDB');
463
-        $table_name = 'esp_venue_meta';
464
-        $sql = "VNUM_ID int(11) NOT NULL AUTO_INCREMENT,
462
+		$this->_table_has_not_changed_since_previous($table_name, $sql, 'ENGINE=InnoDB');
463
+		$table_name = 'esp_venue_meta';
464
+		$sql = "VNUM_ID int(11) NOT NULL AUTO_INCREMENT,
465 465
 			VNU_ID bigint(20) unsigned NOT NULL DEFAULT 0,
466 466
 			VNU_address varchar(255) DEFAULT NULL,
467 467
 			VNU_address2 varchar(255) DEFAULT NULL,
@@ -480,10 +480,10 @@  discard block
 block discarded – undo
480 480
 			KEY VNU_ID (VNU_ID),
481 481
 			KEY STA_ID (STA_ID),
482 482
 			KEY CNT_ISO (CNT_ISO)";
483
-        $this->_table_is_changed_in_this_version($table_name, $sql, 'ENGINE=InnoDB');
484
-        // modified tables
485
-        $table_name = "esp_price";
486
-        $sql = "PRC_ID int(10) unsigned NOT NULL AUTO_INCREMENT,
483
+		$this->_table_is_changed_in_this_version($table_name, $sql, 'ENGINE=InnoDB');
484
+		// modified tables
485
+		$table_name = "esp_price";
486
+		$sql = "PRC_ID int(10) unsigned NOT NULL AUTO_INCREMENT,
487 487
 					  PRT_ID tinyint(3) unsigned NOT NULL,
488 488
 					  PRC_amount decimal(10,3) NOT NULL DEFAULT '0.00',
489 489
 					  PRC_name varchar(245) NOT NULL,
@@ -496,9 +496,9 @@  discard block
 block discarded – undo
496 496
 					  PRC_parent int(10) unsigned DEFAULT 0,
497 497
 					  PRIMARY KEY  (PRC_ID),
498 498
 					  KEY PRT_ID (PRT_ID)";
499
-        $this->_table_is_changed_in_this_version($table_name, $sql, 'ENGINE=InnoDB');
500
-        $table_name = "esp_price_type";
501
-        $sql = "PRT_ID tinyint(3) unsigned NOT NULL AUTO_INCREMENT,
499
+		$this->_table_is_changed_in_this_version($table_name, $sql, 'ENGINE=InnoDB');
500
+		$table_name = "esp_price_type";
501
+		$sql = "PRT_ID tinyint(3) unsigned NOT NULL AUTO_INCREMENT,
502 502
 				  PRT_name varchar(45) NOT NULL,
503 503
 				  PBT_ID tinyint(3) unsigned NOT NULL DEFAULT '1',
504 504
 				  PRT_is_percent tinyint(1) NOT NULL DEFAULT '0',
@@ -507,9 +507,9 @@  discard block
 block discarded – undo
507 507
 				  PRT_deleted tinyint(1) NOT NULL DEFAULT '0',
508 508
 				  UNIQUE KEY PRT_name_UNIQUE (PRT_name),
509 509
 				  PRIMARY KEY  (PRT_ID)";
510
-        $this->_table_has_not_changed_since_previous($table_name, $sql, 'ENGINE=InnoDB ');
511
-        $table_name = "esp_ticket";
512
-        $sql = "TKT_ID int(10) unsigned NOT NULL AUTO_INCREMENT,
510
+		$this->_table_has_not_changed_since_previous($table_name, $sql, 'ENGINE=InnoDB ');
511
+		$table_name = "esp_ticket";
512
+		$sql = "TKT_ID int(10) unsigned NOT NULL AUTO_INCREMENT,
513 513
 					  TTM_ID int(10) unsigned NOT NULL,
514 514
 					  TKT_name varchar(245) NOT NULL DEFAULT '',
515 515
 					  TKT_description text NOT NULL,
@@ -531,9 +531,9 @@  discard block
 block discarded – undo
531 531
 					  TKT_deleted tinyint(1) NOT NULL DEFAULT '0',
532 532
 					  PRIMARY KEY  (TKT_ID),
533 533
 					  KEY TKT_start_date (TKT_start_date)";
534
-        $this->_table_is_changed_in_this_version($table_name, $sql, 'ENGINE=InnoDB');
535
-        $table_name = 'esp_question_group';
536
-        $sql = 'QSG_ID int(10) unsigned NOT NULL AUTO_INCREMENT,
534
+		$this->_table_is_changed_in_this_version($table_name, $sql, 'ENGINE=InnoDB');
535
+		$table_name = 'esp_question_group';
536
+		$sql = 'QSG_ID int(10) unsigned NOT NULL AUTO_INCREMENT,
537 537
 					QSG_name varchar(255) NOT NULL,
538 538
 					QSG_identifier varchar(100) NOT NULL,
539 539
 					QSG_desc text NULL,
@@ -546,223 +546,223 @@  discard block
 block discarded – undo
546 546
 					PRIMARY KEY  (QSG_ID),
547 547
 					UNIQUE KEY QSG_identifier_UNIQUE (QSG_identifier),
548 548
 					KEY QSG_order (QSG_order)';
549
-        $this->_table_is_changed_in_this_version($table_name, $sql, 'ENGINE=InnoDB');
550
-        /** @var EE_DMS_Core_4_1_0 $script_4_1_defaults */
551
-        $script_4_1_defaults = EE_Registry::instance()->load_dms('Core_4_1_0');
552
-        // (because many need to convert old string states to foreign keys into the states table)
553
-        $script_4_1_defaults->insert_default_states();
554
-        $script_4_1_defaults->insert_default_countries();
555
-        /** @var EE_DMS_Core_4_5_0 $script_4_5_defaults */
556
-        $script_4_5_defaults = EE_Registry::instance()->load_dms('Core_4_5_0');
557
-        $script_4_5_defaults->insert_default_price_types();
558
-        $script_4_5_defaults->insert_default_prices();
559
-        $script_4_5_defaults->insert_default_tickets();
560
-        /** @var EE_DMS_Core_4_6_0 $script_4_6_defaults */
561
-        $script_4_6_defaults = EE_Registry::instance()->load_dms('Core_4_6_0');
562
-        $script_4_6_defaults->add_default_admin_only_payments();
563
-        $script_4_6_defaults->insert_default_currencies();
564
-        $this->verify_new_countries();
565
-        $this->verify_new_currencies();
566
-        return true;
567
-    }
549
+		$this->_table_is_changed_in_this_version($table_name, $sql, 'ENGINE=InnoDB');
550
+		/** @var EE_DMS_Core_4_1_0 $script_4_1_defaults */
551
+		$script_4_1_defaults = EE_Registry::instance()->load_dms('Core_4_1_0');
552
+		// (because many need to convert old string states to foreign keys into the states table)
553
+		$script_4_1_defaults->insert_default_states();
554
+		$script_4_1_defaults->insert_default_countries();
555
+		/** @var EE_DMS_Core_4_5_0 $script_4_5_defaults */
556
+		$script_4_5_defaults = EE_Registry::instance()->load_dms('Core_4_5_0');
557
+		$script_4_5_defaults->insert_default_price_types();
558
+		$script_4_5_defaults->insert_default_prices();
559
+		$script_4_5_defaults->insert_default_tickets();
560
+		/** @var EE_DMS_Core_4_6_0 $script_4_6_defaults */
561
+		$script_4_6_defaults = EE_Registry::instance()->load_dms('Core_4_6_0');
562
+		$script_4_6_defaults->add_default_admin_only_payments();
563
+		$script_4_6_defaults->insert_default_currencies();
564
+		$this->verify_new_countries();
565
+		$this->verify_new_currencies();
566
+		return true;
567
+	}
568 568
 
569 569
 
570 570
 
571
-    /**
572
-     * @return boolean
573
-     */
574
-    public function schema_changes_after_migration()
575
-    {
576
-        $this->fix_non_default_taxes();
577
-        // this is actually the same as the last DMS
578
-        /** @var EE_DMS_Core_4_7_0 $script_4_7_defaults */
579
-        $script_4_7_defaults = EE_Registry::instance()->load_dms('Core_4_7_0');
580
-        return $script_4_7_defaults->schema_changes_after_migration();
581
-    }
571
+	/**
572
+	 * @return boolean
573
+	 */
574
+	public function schema_changes_after_migration()
575
+	{
576
+		$this->fix_non_default_taxes();
577
+		// this is actually the same as the last DMS
578
+		/** @var EE_DMS_Core_4_7_0 $script_4_7_defaults */
579
+		$script_4_7_defaults = EE_Registry::instance()->load_dms('Core_4_7_0');
580
+		return $script_4_7_defaults->schema_changes_after_migration();
581
+	}
582 582
 
583 583
 
584 584
 
585
-    public function migration_page_hooks()
586
-    {
587
-    }
585
+	public function migration_page_hooks()
586
+	{
587
+	}
588 588
 
589 589
 
590 590
 
591
-    /**
592
-     * verifies each of the new countries exists that somehow we missed in 4.1
593
-     */
594
-    public function verify_new_countries()
595
-    {
596
-        // a list of countries (and specifically some which were missed in another list):https://gist.github.com/adhipg/1600028
597
-        // how many decimal places? https://en.wikipedia.org/wiki/ISO_4217
598
-        // currency symbols: http://www.xe.com/symbols.php
599
-        // CNT_ISO, CNT_ISO3, RGN_ID, CNT_name, CNT_cur_code, CNT_cur_single, CNT_cur_plural, CNT_cur_sign, CNT_cur_sign_b4, CNT_cur_dec_plc, CNT_tel_code, CNT_is_EU, CNT_active
600
-        // ('AD', 'AND', 0, 'Andorra', 'EUR', 'Euro', 'Euros', '€', 1, 2, '+376', 0, 0),
601
-        $newer_countries = array(
602
-            array('AX', 'ALA', 0, 'Åland Islands', 'EUR', 'Euro', 'Euros', '€', 1, 2, '+358', 1, 0),
603
-            array('BL', 'BLM', 0, 'Saint Barthelemy', 'EUR', 'Euro', 'Euros', '€', 1, 2, '+590', 1, 0),
604
-            array('CW', 'CUW', 0, 'Curacao', 'ANG', 'Guilder', 'Guilders', 'ƒ', 1, 2, '+599', 1, 0),
605
-            array('GG', 'GGY', 0, 'Guernsey', 'EUR', 'Euro', 'Euros', '€', 1, 2, '+44', 0, 0),
606
-            array('IM', 'IMN', 0, 'Isle of Man', 'GBP', 'Pound', 'Pounds', '£', 1, 2, '+44', 0, 0),
607
-            array('JE', 'JEY', 0, 'Jersey', 'GBP', 'Pound', 'Pounds', '£', 1, 2, '+44', 0, 0),
608
-            array('MF', 'MAF', 0, 'Saint Martin', 'EUR', 'Euro', 'Euros', '€', 1, 2, '+590', 1, 0),
609
-            array('ME', 'MNE', 0, 'Montenegro', 'EUR', 'Euro', 'Euros', '€', 1, 2, '+382', 0, 0),
610
-            array('RS', 'SRB', 0, 'Serbia', 'RSD', 'Dinar', 'Dinars', '', 0, 2, '+381', 1, 0),
611
-            array('SS', 'SSD', 0, 'South Sudan', 'SSP', 'Pound', 'Pounds', '£', 1, 2, '+211', 0, 0),
612
-            array('SX', 'SXM', 0, 'Sint Maarten', 'ANG', 'Guilder', 'Guilders', 'ƒ', 1, 2, '+1', 1, 0),
613
-            array('XK', 'XKX', 0, 'Kosovo', 'EUR', 'Euro', 'Euros', '€', 1, 2, '+383', 0, 0),
614
-            array('YT', 'MYT', 0, 'Mayotte', 'EUR', 'Euro', 'Euros', '€', 0, 2, '+262', 1, 0),
615
-            array(
616
-                'BQ',
617
-                'BES',
618
-                0,
619
-                'Bonaire, Saint Eustatius and Saba',
620
-                'USD',
621
-                'Dollar',
622
-                'Dollars',
623
-                '$',
624
-                1,
625
-                2,
626
-                '+599',
627
-                0,
628
-                0,
629
-            ),
630
-            array('BV', 'BVT', 0, 'Bouvet Island', 'NOK', 'Krone', 'Krones', 'kr', 1, 2, '+47', 0, 0),
631
-            array('IO', 'IOT', 0, 'British Indian Ocean Territory', 'GBP', 'Pound', 'Pounds', '£', 1, 2, '+246', 0, 0),
632
-            array('CX', 'CXR', 0, 'Christmas Island', 'AUD', 'Dollar', 'Dollars', '$', 1, 2, '+61', 0, 0),
633
-            array('CC', 'CCK', 0, 'Cocos (Keeling) Islands', 'AUD', 'Dollar', 'Dollars', '$', 1, 2, '+891', 0, 0),
634
-            array(
635
-                'HM',
636
-                'HMD',
637
-                0,
638
-                'Heard Island and McDonald Islands',
639
-                'AUD',
640
-                'Dollar',
641
-                'Dollars',
642
-                '$',
643
-                1,
644
-                2,
645
-                '+891',
646
-                0,
647
-                0,
648
-            ),
649
-            array('PS', 'PSE', 0, 'Palestinian Territory', 'ILS', 'Shekel', 'Shekels', '₪', 1, 2, '+970', 0, 0),
650
-            array(
651
-                'GS',
652
-                'SGS',
653
-                0,
654
-                'South Georgia and the South Sandwich Islands',
655
-                'GBP',
656
-                'Pound',
657
-                'Pounds',
658
-                '£',
659
-                1,
660
-                2,
661
-                '+500',
662
-                0,
663
-                0,
664
-            ),
665
-            array('TL', 'TLS', 0, 'Timor-Leste', 'USD', 'Dollar', 'Dollars', '$', 1, 2, '+670', 0, 0),
666
-            array('TF', 'ATF', 0, 'French Southern Territories', 'EUR', 'Euro', 'Euros', '€', 1, 2, '+262', 0, 0),
667
-            array(
668
-                'UM',
669
-                'UMI',
670
-                0,
671
-                'United States Minor Outlying Islands',
672
-                'USD',
673
-                'Dollar',
674
-                'Dollars',
675
-                '$',
676
-                1,
677
-                2,
678
-                '+1',
679
-                0,
680
-                0,
681
-            ),
682
-        );
683
-        global $wpdb;
684
-        $country_table = $wpdb->prefix . "esp_country";
685
-        $country_format = array(
686
-            "CNT_ISO"         => '%s',
687
-            "CNT_ISO3"        => '%s',
688
-            "RGN_ID"          => '%d',
689
-            "CNT_name"        => '%s',
690
-            "CNT_cur_code"    => '%s',
691
-            "CNT_cur_single"  => '%s',
692
-            "CNT_cur_plural"  => '%s',
693
-            "CNT_cur_sign"    => '%s',
694
-            "CNT_cur_sign_b4" => '%d',
695
-            "CNT_cur_dec_plc" => '%d',
696
-            "CNT_tel_code"    => '%s',
697
-            "CNT_is_EU"       => '%d',
698
-            "CNT_active"      => '%d',
699
-        );
700
-        if ($this->_get_table_analysis()->tableExists($country_table)) {
701
-            foreach ($newer_countries as $country) {
702
-                $SQL = "SELECT COUNT('CNT_ISO') FROM {$country_table} WHERE CNT_ISO='{$country[0]}' LIMIT 1";
703
-                $countries = $wpdb->get_var($SQL);
704
-                if (! $countries) {
705
-                    $wpdb->insert(
706
-                        $country_table,
707
-                        array_combine(array_keys($country_format), $country),
708
-                        $country_format
709
-                    );
710
-                }
711
-            }
712
-        }
713
-    }
591
+	/**
592
+	 * verifies each of the new countries exists that somehow we missed in 4.1
593
+	 */
594
+	public function verify_new_countries()
595
+	{
596
+		// a list of countries (and specifically some which were missed in another list):https://gist.github.com/adhipg/1600028
597
+		// how many decimal places? https://en.wikipedia.org/wiki/ISO_4217
598
+		// currency symbols: http://www.xe.com/symbols.php
599
+		// CNT_ISO, CNT_ISO3, RGN_ID, CNT_name, CNT_cur_code, CNT_cur_single, CNT_cur_plural, CNT_cur_sign, CNT_cur_sign_b4, CNT_cur_dec_plc, CNT_tel_code, CNT_is_EU, CNT_active
600
+		// ('AD', 'AND', 0, 'Andorra', 'EUR', 'Euro', 'Euros', '€', 1, 2, '+376', 0, 0),
601
+		$newer_countries = array(
602
+			array('AX', 'ALA', 0, 'Åland Islands', 'EUR', 'Euro', 'Euros', '€', 1, 2, '+358', 1, 0),
603
+			array('BL', 'BLM', 0, 'Saint Barthelemy', 'EUR', 'Euro', 'Euros', '€', 1, 2, '+590', 1, 0),
604
+			array('CW', 'CUW', 0, 'Curacao', 'ANG', 'Guilder', 'Guilders', 'ƒ', 1, 2, '+599', 1, 0),
605
+			array('GG', 'GGY', 0, 'Guernsey', 'EUR', 'Euro', 'Euros', '€', 1, 2, '+44', 0, 0),
606
+			array('IM', 'IMN', 0, 'Isle of Man', 'GBP', 'Pound', 'Pounds', '£', 1, 2, '+44', 0, 0),
607
+			array('JE', 'JEY', 0, 'Jersey', 'GBP', 'Pound', 'Pounds', '£', 1, 2, '+44', 0, 0),
608
+			array('MF', 'MAF', 0, 'Saint Martin', 'EUR', 'Euro', 'Euros', '€', 1, 2, '+590', 1, 0),
609
+			array('ME', 'MNE', 0, 'Montenegro', 'EUR', 'Euro', 'Euros', '€', 1, 2, '+382', 0, 0),
610
+			array('RS', 'SRB', 0, 'Serbia', 'RSD', 'Dinar', 'Dinars', '', 0, 2, '+381', 1, 0),
611
+			array('SS', 'SSD', 0, 'South Sudan', 'SSP', 'Pound', 'Pounds', '£', 1, 2, '+211', 0, 0),
612
+			array('SX', 'SXM', 0, 'Sint Maarten', 'ANG', 'Guilder', 'Guilders', 'ƒ', 1, 2, '+1', 1, 0),
613
+			array('XK', 'XKX', 0, 'Kosovo', 'EUR', 'Euro', 'Euros', '€', 1, 2, '+383', 0, 0),
614
+			array('YT', 'MYT', 0, 'Mayotte', 'EUR', 'Euro', 'Euros', '€', 0, 2, '+262', 1, 0),
615
+			array(
616
+				'BQ',
617
+				'BES',
618
+				0,
619
+				'Bonaire, Saint Eustatius and Saba',
620
+				'USD',
621
+				'Dollar',
622
+				'Dollars',
623
+				'$',
624
+				1,
625
+				2,
626
+				'+599',
627
+				0,
628
+				0,
629
+			),
630
+			array('BV', 'BVT', 0, 'Bouvet Island', 'NOK', 'Krone', 'Krones', 'kr', 1, 2, '+47', 0, 0),
631
+			array('IO', 'IOT', 0, 'British Indian Ocean Territory', 'GBP', 'Pound', 'Pounds', '£', 1, 2, '+246', 0, 0),
632
+			array('CX', 'CXR', 0, 'Christmas Island', 'AUD', 'Dollar', 'Dollars', '$', 1, 2, '+61', 0, 0),
633
+			array('CC', 'CCK', 0, 'Cocos (Keeling) Islands', 'AUD', 'Dollar', 'Dollars', '$', 1, 2, '+891', 0, 0),
634
+			array(
635
+				'HM',
636
+				'HMD',
637
+				0,
638
+				'Heard Island and McDonald Islands',
639
+				'AUD',
640
+				'Dollar',
641
+				'Dollars',
642
+				'$',
643
+				1,
644
+				2,
645
+				'+891',
646
+				0,
647
+				0,
648
+			),
649
+			array('PS', 'PSE', 0, 'Palestinian Territory', 'ILS', 'Shekel', 'Shekels', '₪', 1, 2, '+970', 0, 0),
650
+			array(
651
+				'GS',
652
+				'SGS',
653
+				0,
654
+				'South Georgia and the South Sandwich Islands',
655
+				'GBP',
656
+				'Pound',
657
+				'Pounds',
658
+				'£',
659
+				1,
660
+				2,
661
+				'+500',
662
+				0,
663
+				0,
664
+			),
665
+			array('TL', 'TLS', 0, 'Timor-Leste', 'USD', 'Dollar', 'Dollars', '$', 1, 2, '+670', 0, 0),
666
+			array('TF', 'ATF', 0, 'French Southern Territories', 'EUR', 'Euro', 'Euros', '€', 1, 2, '+262', 0, 0),
667
+			array(
668
+				'UM',
669
+				'UMI',
670
+				0,
671
+				'United States Minor Outlying Islands',
672
+				'USD',
673
+				'Dollar',
674
+				'Dollars',
675
+				'$',
676
+				1,
677
+				2,
678
+				'+1',
679
+				0,
680
+				0,
681
+			),
682
+		);
683
+		global $wpdb;
684
+		$country_table = $wpdb->prefix . "esp_country";
685
+		$country_format = array(
686
+			"CNT_ISO"         => '%s',
687
+			"CNT_ISO3"        => '%s',
688
+			"RGN_ID"          => '%d',
689
+			"CNT_name"        => '%s',
690
+			"CNT_cur_code"    => '%s',
691
+			"CNT_cur_single"  => '%s',
692
+			"CNT_cur_plural"  => '%s',
693
+			"CNT_cur_sign"    => '%s',
694
+			"CNT_cur_sign_b4" => '%d',
695
+			"CNT_cur_dec_plc" => '%d',
696
+			"CNT_tel_code"    => '%s',
697
+			"CNT_is_EU"       => '%d',
698
+			"CNT_active"      => '%d',
699
+		);
700
+		if ($this->_get_table_analysis()->tableExists($country_table)) {
701
+			foreach ($newer_countries as $country) {
702
+				$SQL = "SELECT COUNT('CNT_ISO') FROM {$country_table} WHERE CNT_ISO='{$country[0]}' LIMIT 1";
703
+				$countries = $wpdb->get_var($SQL);
704
+				if (! $countries) {
705
+					$wpdb->insert(
706
+						$country_table,
707
+						array_combine(array_keys($country_format), $country),
708
+						$country_format
709
+					);
710
+				}
711
+			}
712
+		}
713
+	}
714 714
 
715 715
 
716 716
 
717
-    /**
718
-     * verifies each of the new currencies exists that somehow we missed in 4.6
719
-     */
720
-    public function verify_new_currencies()
721
-    {
722
-        // a list of countries (and specifically some which were missed in another list):https://gist.github.com/adhipg/1600028
723
-        // how many decimal places? https://en.wikipedia.org/wiki/ISO_4217
724
-        // currency symbols: http://www.xe.com/symbols.php
725
-        // CUR_code, CUR_single, CUR_plural, CUR_sign, CUR_dec_plc, CUR_active
726
-        // ( 'EUR',  'Euro',  'Euros',  '€',  2,1),
727
-        $newer_currencies = array(
728
-            array('RSD', 'Dinar', 'Dinars', '', 3, 1),
729
-        );
730
-        global $wpdb;
731
-        $currency_table = $wpdb->prefix . "esp_currency";
732
-        $currency_format = array(
733
-            "CUR_code"    => '%s',
734
-            "CUR_single"  => '%s',
735
-            "CUR_plural"  => '%s',
736
-            "CUR_sign"    => '%s',
737
-            "CUR_dec_plc" => '%d',
738
-            "CUR_active"  => '%d',
739
-        );
740
-        if ($this->_get_table_analysis()->tableExists($currency_table)) {
741
-            foreach ($newer_currencies as $currency) {
742
-                $SQL = "SELECT COUNT('CUR_code') FROM {$currency_table} WHERE CUR_code='{$currency[0]}' LIMIT 1";
743
-                $countries = $wpdb->get_var($SQL);
744
-                if (! $countries) {
745
-                    $wpdb->insert(
746
-                        $currency_table,
747
-                        array_combine(array_keys($currency_format), $currency),
748
-                        $currency_format
749
-                    );
750
-                }
751
-            }
752
-        }
753
-    }
717
+	/**
718
+	 * verifies each of the new currencies exists that somehow we missed in 4.6
719
+	 */
720
+	public function verify_new_currencies()
721
+	{
722
+		// a list of countries (and specifically some which were missed in another list):https://gist.github.com/adhipg/1600028
723
+		// how many decimal places? https://en.wikipedia.org/wiki/ISO_4217
724
+		// currency symbols: http://www.xe.com/symbols.php
725
+		// CUR_code, CUR_single, CUR_plural, CUR_sign, CUR_dec_plc, CUR_active
726
+		// ( 'EUR',  'Euro',  'Euros',  '€',  2,1),
727
+		$newer_currencies = array(
728
+			array('RSD', 'Dinar', 'Dinars', '', 3, 1),
729
+		);
730
+		global $wpdb;
731
+		$currency_table = $wpdb->prefix . "esp_currency";
732
+		$currency_format = array(
733
+			"CUR_code"    => '%s',
734
+			"CUR_single"  => '%s',
735
+			"CUR_plural"  => '%s',
736
+			"CUR_sign"    => '%s',
737
+			"CUR_dec_plc" => '%d',
738
+			"CUR_active"  => '%d',
739
+		);
740
+		if ($this->_get_table_analysis()->tableExists($currency_table)) {
741
+			foreach ($newer_currencies as $currency) {
742
+				$SQL = "SELECT COUNT('CUR_code') FROM {$currency_table} WHERE CUR_code='{$currency[0]}' LIMIT 1";
743
+				$countries = $wpdb->get_var($SQL);
744
+				if (! $countries) {
745
+					$wpdb->insert(
746
+						$currency_table,
747
+						array_combine(array_keys($currency_format), $currency),
748
+						$currency_format
749
+					);
750
+				}
751
+			}
752
+		}
753
+	}
754 754
 
755 755
 
756 756
 
757
-    /**
758
-     * addresses https://events.codebasehq.com/projects/event-espresso/tickets/8731
759
-     * which should just be a temporary issue for folks who installed 4.8.0-4.8.5;
760
-     * we should be able to stop doing this in 4.9
761
-     */
762
-    public function fix_non_default_taxes()
763
-    {
764
-        global $wpdb;
765
-        $query = $wpdb->prepare("UPDATE
757
+	/**
758
+	 * addresses https://events.codebasehq.com/projects/event-espresso/tickets/8731
759
+	 * which should just be a temporary issue for folks who installed 4.8.0-4.8.5;
760
+	 * we should be able to stop doing this in 4.9
761
+	 */
762
+	public function fix_non_default_taxes()
763
+	{
764
+		global $wpdb;
765
+		$query = $wpdb->prepare("UPDATE
766 766
 				{$wpdb->prefix}esp_price p INNER JOIN
767 767
 				{$wpdb->prefix}esp_price_type pt ON p.PRT_ID = pt.PRT_ID
768 768
 			SET
@@ -771,6 +771,6 @@  discard block
 block discarded – undo
771 771
 				p.PRC_is_default = 0 AND
772 772
 				pt.PBT_ID = %d
773 773
 					", EEM_Price_Type::base_type_tax);
774
-        $wpdb->query($query);
775
-    }
774
+		$wpdb->query($query);
775
+	}
776 776
 }
Please login to merge, or discard this patch.