Completed
Branch fix-dummy-related-question-qst... (e5efcf)
by
unknown
07:49 queued 03:45
created
strategies/validation/EE_Simple_HTML_Validation_Strategy.strategy.php 2 patches
Spacing   +2 added lines, -2 removed lines patch added patch discarded remove patch
@@ -19,7 +19,7 @@  discard block
 block discarded – undo
19 19
      */
20 20
     public function __construct($validation_error_message = null)
21 21
     {
22
-        if (! $validation_error_message) {
22
+        if ( ! $validation_error_message) {
23 23
             $allowedtags = $this->_get_allowed_tags();
24 24
             $validation_error_message = sprintf(esc_html__("Only simple HTML tags are allowed. Eg, %s", "event_espresso"), implode(",", array_keys($allowedtags)));
25 25
         }
@@ -62,7 +62,7 @@  discard block
 block discarded – undo
62 62
     {
63 63
         $allowedtags = $this->_get_allowed_tags();
64 64
         parent::validate($normalized_value);
65
-        $normalized_value_sans_tags =  wp_kses("$normalized_value", $allowedtags);
65
+        $normalized_value_sans_tags = wp_kses("$normalized_value", $allowedtags);
66 66
         if (strlen($normalized_value) > strlen($normalized_value_sans_tags)) {
67 67
             throw new EE_Validation_Error($this->get_validation_error_message(), 'complex_html_tags');
68 68
         }
Please login to merge, or discard this patch.
Indentation   +44 added lines, -44 removed lines patch added patch discarded remove patch
@@ -13,57 +13,57 @@
 block discarded – undo
13 13
  */
14 14
 class EE_Simple_HTML_Validation_Strategy extends EE_Validation_Strategy_Base
15 15
 {
16
-    /**
17
-     * @param null $validation_error_message
18
-     */
19
-    public function __construct($validation_error_message = null)
20
-    {
21
-        if (! $validation_error_message) {
22
-            $allowedtags = $this->_get_allowed_tags();
23
-            $validation_error_message = sprintf(esc_html__("Only simple HTML tags are allowed. Eg, %s", "event_espresso"), implode(",", array_keys($allowedtags)));
24
-        }
25
-        parent::__construct($validation_error_message);
26
-    }
16
+	/**
17
+	 * @param null $validation_error_message
18
+	 */
19
+	public function __construct($validation_error_message = null)
20
+	{
21
+		if (! $validation_error_message) {
22
+			$allowedtags = $this->_get_allowed_tags();
23
+			$validation_error_message = sprintf(esc_html__("Only simple HTML tags are allowed. Eg, %s", "event_espresso"), implode(",", array_keys($allowedtags)));
24
+		}
25
+		parent::__construct($validation_error_message);
26
+	}
27 27
 
28 28
 
29 29
 
30
-    /**
31
-     * get tags allowed
32
-     */
33
-    protected function _get_allowed_tags()
34
-    {
35
-        return EEH_HTML::get_simple_tags();
36
-    }
30
+	/**
31
+	 * get tags allowed
32
+	 */
33
+	protected function _get_allowed_tags()
34
+	{
35
+		return EEH_HTML::get_simple_tags();
36
+	}
37 37
 
38 38
 
39 39
 
40
-    /**
41
-     * add_more_tags
42
-     *
43
-     * generates and returns a string that lists the top-level HTML tags that are allowable for this input
44
-     *
45
-     * @return string
46
-     */
47
-    public function get_list_of_allowed_tags()
48
-    {
49
-        $allowed_tags = $this->_get_allowed_tags();
50
-        ksort($allowed_tags);
51
-        return implode(', ', array_keys($allowed_tags));
52
-    }
40
+	/**
41
+	 * add_more_tags
42
+	 *
43
+	 * generates and returns a string that lists the top-level HTML tags that are allowable for this input
44
+	 *
45
+	 * @return string
46
+	 */
47
+	public function get_list_of_allowed_tags()
48
+	{
49
+		$allowed_tags = $this->_get_allowed_tags();
50
+		ksort($allowed_tags);
51
+		return implode(', ', array_keys($allowed_tags));
52
+	}
53 53
 
54 54
 
55 55
 
56
-    /**
57
-     * @param $normalized_value
58
-     * @throws \EE_Validation_Error
59
-     */
60
-    public function validate($normalized_value)
61
-    {
62
-        $allowedtags = $this->_get_allowed_tags();
63
-        parent::validate($normalized_value);
64
-        $normalized_value_sans_tags =  wp_kses("$normalized_value", $allowedtags);
65
-        if (strlen($normalized_value) > strlen($normalized_value_sans_tags)) {
66
-            throw new EE_Validation_Error($this->get_validation_error_message(), 'complex_html_tags');
67
-        }
68
-    }
56
+	/**
57
+	 * @param $normalized_value
58
+	 * @throws \EE_Validation_Error
59
+	 */
60
+	public function validate($normalized_value)
61
+	{
62
+		$allowedtags = $this->_get_allowed_tags();
63
+		parent::validate($normalized_value);
64
+		$normalized_value_sans_tags =  wp_kses("$normalized_value", $allowedtags);
65
+		if (strlen($normalized_value) > strlen($normalized_value_sans_tags)) {
66
+			throw new EE_Validation_Error($this->get_validation_error_message(), 'complex_html_tags');
67
+		}
68
+	}
69 69
 }
Please login to merge, or discard this patch.
form_sections/strategies/normalization/EE_Float_Normalization.strategy.php 2 patches
Spacing   +2 added lines, -2 removed lines patch added patch discarded remove patch
@@ -33,7 +33,7 @@  discard block
 block discarded – undo
33 33
         if (is_float($value_to_normalize) || is_int($value_to_normalize)) {
34 34
             return (float) $value_to_normalize;
35 35
         }
36
-        if (! is_string($value_to_normalize)) {
36
+        if ( ! is_string($value_to_normalize)) {
37 37
             throw new EE_Validation_Error(
38 38
                 sprintf(
39 39
                     esc_html__('The value "%s" must be a string submitted for normalization, it was %s', 'event_espresso'),
@@ -69,7 +69,7 @@  discard block
 block discarded – undo
69 69
         }
70 70
         // this really shouldn't ever happen because fields with a float normalization strategy
71 71
         // should also have a float validation strategy, but in case it doesn't use the default
72
-        if (! $validation_error_message) {
72
+        if ( ! $validation_error_message) {
73 73
             $default_validation_strategy = new EE_Float_Validation_Strategy();
74 74
             $validation_error_message = $default_validation_strategy->get_validation_error_message();
75 75
         }
Please login to merge, or discard this patch.
Indentation   +70 added lines, -70 removed lines patch added patch discarded remove patch
@@ -10,84 +10,84 @@
 block discarded – undo
10 10
  */
11 11
 class EE_Float_Normalization extends EE_Normalization_Strategy_Base
12 12
 {
13
-    /*
13
+	/*
14 14
      * regex pattern that matches for the following:
15 15
      *      * optional negative sign
16 16
      *      * one or more digits or decimals
17 17
      */
18
-    const REGEX = '/^(-?)([\d.]+)$/';
18
+	const REGEX = '/^(-?)([\d.]+)$/';
19 19
 
20 20
 
21 21
 
22
-    /**
23
-     * @param string $value_to_normalize
24
-     * @return float
25
-     * @throws \EE_Validation_Error
26
-     */
27
-    public function normalize($value_to_normalize)
28
-    {
29
-        if ($value_to_normalize === null) {
30
-            return null;
31
-        }
32
-        if (is_float($value_to_normalize) || is_int($value_to_normalize)) {
33
-            return (float) $value_to_normalize;
34
-        }
35
-        if (! is_string($value_to_normalize)) {
36
-            throw new EE_Validation_Error(
37
-                sprintf(
38
-                    esc_html__('The value "%s" must be a string submitted for normalization, it was %s', 'event_espresso'),
39
-                    print_r($value_to_normalize, true),
40
-                    gettype($value_to_normalize)
41
-                )
42
-            );
43
-        }
44
-        $normalized_value = filter_var(
45
-            $value_to_normalize,
46
-            FILTER_SANITIZE_NUMBER_FLOAT,
47
-            FILTER_FLAG_ALLOW_FRACTION
48
-        );
49
-        if ($normalized_value === '') {
50
-            return null;
51
-        }
52
-        if (preg_match(EE_Float_Normalization::REGEX, $normalized_value, $matches)) {
53
-            if (count($matches) === 3) {
54
-                // if first match is the negative sign,
55
-                // then the number needs to be multiplied by -1 to remain negative
56
-                return $matches[1] === '-'
57
-                    ? (float) $matches[2] * -1
58
-                    : (float) $matches[2];
59
-            }
60
-        }
61
-        // find if this input has a float validation strategy
62
-        // in which case, use its message
63
-        $validation_error_message = null;
64
-        foreach ($this->_input->get_validation_strategies() as $validation_strategy) {
65
-            if ($validation_strategy instanceof EE_Float_Validation_Strategy) {
66
-                $validation_error_message = $validation_strategy->get_validation_error_message();
67
-            }
68
-        }
69
-        // this really shouldn't ever happen because fields with a float normalization strategy
70
-        // should also have a float validation strategy, but in case it doesn't use the default
71
-        if (! $validation_error_message) {
72
-            $default_validation_strategy = new EE_Float_Validation_Strategy();
73
-            $validation_error_message = $default_validation_strategy->get_validation_error_message();
74
-        }
75
-        throw new EE_Validation_Error($validation_error_message, 'float_only');
76
-    }
22
+	/**
23
+	 * @param string $value_to_normalize
24
+	 * @return float
25
+	 * @throws \EE_Validation_Error
26
+	 */
27
+	public function normalize($value_to_normalize)
28
+	{
29
+		if ($value_to_normalize === null) {
30
+			return null;
31
+		}
32
+		if (is_float($value_to_normalize) || is_int($value_to_normalize)) {
33
+			return (float) $value_to_normalize;
34
+		}
35
+		if (! is_string($value_to_normalize)) {
36
+			throw new EE_Validation_Error(
37
+				sprintf(
38
+					esc_html__('The value "%s" must be a string submitted for normalization, it was %s', 'event_espresso'),
39
+					print_r($value_to_normalize, true),
40
+					gettype($value_to_normalize)
41
+				)
42
+			);
43
+		}
44
+		$normalized_value = filter_var(
45
+			$value_to_normalize,
46
+			FILTER_SANITIZE_NUMBER_FLOAT,
47
+			FILTER_FLAG_ALLOW_FRACTION
48
+		);
49
+		if ($normalized_value === '') {
50
+			return null;
51
+		}
52
+		if (preg_match(EE_Float_Normalization::REGEX, $normalized_value, $matches)) {
53
+			if (count($matches) === 3) {
54
+				// if first match is the negative sign,
55
+				// then the number needs to be multiplied by -1 to remain negative
56
+				return $matches[1] === '-'
57
+					? (float) $matches[2] * -1
58
+					: (float) $matches[2];
59
+			}
60
+		}
61
+		// find if this input has a float validation strategy
62
+		// in which case, use its message
63
+		$validation_error_message = null;
64
+		foreach ($this->_input->get_validation_strategies() as $validation_strategy) {
65
+			if ($validation_strategy instanceof EE_Float_Validation_Strategy) {
66
+				$validation_error_message = $validation_strategy->get_validation_error_message();
67
+			}
68
+		}
69
+		// this really shouldn't ever happen because fields with a float normalization strategy
70
+		// should also have a float validation strategy, but in case it doesn't use the default
71
+		if (! $validation_error_message) {
72
+			$default_validation_strategy = new EE_Float_Validation_Strategy();
73
+			$validation_error_message = $default_validation_strategy->get_validation_error_message();
74
+		}
75
+		throw new EE_Validation_Error($validation_error_message, 'float_only');
76
+	}
77 77
 
78 78
 
79 79
 
80
-    /**
81
-     * Converts a float into a string
82
-     *
83
-     * @param float $normalized_value
84
-     * @return string
85
-     */
86
-    public function unnormalize($normalized_value)
87
-    {
88
-        if (empty($normalized_value)) {
89
-            return '0.00';
90
-        }
91
-        return "{$normalized_value}";
92
-    }
80
+	/**
81
+	 * Converts a float into a string
82
+	 *
83
+	 * @param float $normalized_value
84
+	 * @return string
85
+	 */
86
+	public function unnormalize($normalized_value)
87
+	{
88
+		if (empty($normalized_value)) {
89
+			return '0.00';
90
+		}
91
+		return "{$normalized_value}";
92
+	}
93 93
 }
Please login to merge, or discard this patch.
form_sections/strategies/normalization/EE_Int_Normalization.strategy.php 2 patches
Spacing   +2 added lines, -2 removed lines patch added patch discarded remove patch
@@ -33,7 +33,7 @@  discard block
 block discarded – undo
33 33
         if (is_int($value_to_normalize) || is_float($value_to_normalize)) {
34 34
             return (int) $value_to_normalize;
35 35
         }
36
-        if (! is_string($value_to_normalize)) {
36
+        if ( ! is_string($value_to_normalize)) {
37 37
             throw new EE_Validation_Error(
38 38
                 sprintf(
39 39
                     esc_html__('The value "%s" must be a string submitted for normalization, it was %s', 'event_espresso'),
@@ -70,7 +70,7 @@  discard block
 block discarded – undo
70 70
         }
71 71
         // this really shouldn't ever happen because fields with a int normalization strategy
72 72
         // should also have a int validation strategy, but in case it doesn't use the default
73
-        if (! $validation_error_message) {
73
+        if ( ! $validation_error_message) {
74 74
             $default_validation_strategy = new EE_Int_Validation_Strategy();
75 75
             $validation_error_message = $default_validation_strategy->get_validation_error_message();
76 76
         }
Please login to merge, or discard this patch.
Indentation   +74 added lines, -74 removed lines patch added patch discarded remove patch
@@ -10,88 +10,88 @@
 block discarded – undo
10 10
  */
11 11
 class EE_Int_Normalization extends EE_Normalization_Strategy_Base
12 12
 {
13
-    /*
13
+	/*
14 14
      * regex pattern that matches for the following:
15 15
      *      * optional negative sign
16 16
      *      * one or more digits
17 17
      */
18
-    const REGEX = '/^(-?)(\d+)(?:\.0+)?$/';
18
+	const REGEX = '/^(-?)(\d+)(?:\.0+)?$/';
19 19
 
20 20
 
21 21
 
22
-    /**
23
-     * @param string $value_to_normalize
24
-     * @return int|mixed|string
25
-     * @throws \EE_Validation_Error
26
-     */
27
-    public function normalize($value_to_normalize)
28
-    {
29
-        if ($value_to_normalize === null) {
30
-            return null;
31
-        }
32
-        if (is_int($value_to_normalize) || is_float($value_to_normalize)) {
33
-            return (int) $value_to_normalize;
34
-        }
35
-        if (! is_string($value_to_normalize)) {
36
-            throw new EE_Validation_Error(
37
-                sprintf(
38
-                    esc_html__('The value "%s" must be a string submitted for normalization, it was %s', 'event_espresso'),
39
-                    print_r($value_to_normalize, true),
40
-                    gettype($value_to_normalize)
41
-                )
42
-            );
43
-        }
44
-        $value_to_normalize = filter_var(
45
-            $value_to_normalize,
46
-            FILTER_SANITIZE_NUMBER_FLOAT,
47
-            FILTER_FLAG_ALLOW_FRACTION
48
-        );
49
-        if ($value_to_normalize === '') {
50
-            return null;
51
-        }
52
-        $matches = array();
53
-        if (preg_match(EE_Int_Normalization::REGEX, $value_to_normalize, $matches)) {
54
-            if (count($matches) === 3) {
55
-                // if first match is the negative sign,
56
-                // then the number needs to be multiplied by -1 to remain negative
57
-                return $matches[1] === '-'
58
-                    ? (int) $matches[2] * -1
59
-                    : (int) $matches[2];
60
-            }
61
-        }
62
-        // find if this input has a int validation strategy
63
-        // in which case, use its message
64
-        $validation_error_message = null;
65
-        foreach ($this->_input->get_validation_strategies() as $validation_strategy) {
66
-            if ($validation_strategy instanceof EE_Int_Validation_Strategy) {
67
-                $validation_error_message = $validation_strategy->get_validation_error_message();
68
-            }
69
-        }
70
-        // this really shouldn't ever happen because fields with a int normalization strategy
71
-        // should also have a int validation strategy, but in case it doesn't use the default
72
-        if (! $validation_error_message) {
73
-            $default_validation_strategy = new EE_Int_Validation_Strategy();
74
-            $validation_error_message = $default_validation_strategy->get_validation_error_message();
75
-        }
76
-        throw new EE_Validation_Error($validation_error_message, 'numeric_only');
77
-    }
22
+	/**
23
+	 * @param string $value_to_normalize
24
+	 * @return int|mixed|string
25
+	 * @throws \EE_Validation_Error
26
+	 */
27
+	public function normalize($value_to_normalize)
28
+	{
29
+		if ($value_to_normalize === null) {
30
+			return null;
31
+		}
32
+		if (is_int($value_to_normalize) || is_float($value_to_normalize)) {
33
+			return (int) $value_to_normalize;
34
+		}
35
+		if (! is_string($value_to_normalize)) {
36
+			throw new EE_Validation_Error(
37
+				sprintf(
38
+					esc_html__('The value "%s" must be a string submitted for normalization, it was %s', 'event_espresso'),
39
+					print_r($value_to_normalize, true),
40
+					gettype($value_to_normalize)
41
+				)
42
+			);
43
+		}
44
+		$value_to_normalize = filter_var(
45
+			$value_to_normalize,
46
+			FILTER_SANITIZE_NUMBER_FLOAT,
47
+			FILTER_FLAG_ALLOW_FRACTION
48
+		);
49
+		if ($value_to_normalize === '') {
50
+			return null;
51
+		}
52
+		$matches = array();
53
+		if (preg_match(EE_Int_Normalization::REGEX, $value_to_normalize, $matches)) {
54
+			if (count($matches) === 3) {
55
+				// if first match is the negative sign,
56
+				// then the number needs to be multiplied by -1 to remain negative
57
+				return $matches[1] === '-'
58
+					? (int) $matches[2] * -1
59
+					: (int) $matches[2];
60
+			}
61
+		}
62
+		// find if this input has a int validation strategy
63
+		// in which case, use its message
64
+		$validation_error_message = null;
65
+		foreach ($this->_input->get_validation_strategies() as $validation_strategy) {
66
+			if ($validation_strategy instanceof EE_Int_Validation_Strategy) {
67
+				$validation_error_message = $validation_strategy->get_validation_error_message();
68
+			}
69
+		}
70
+		// this really shouldn't ever happen because fields with a int normalization strategy
71
+		// should also have a int validation strategy, but in case it doesn't use the default
72
+		if (! $validation_error_message) {
73
+			$default_validation_strategy = new EE_Int_Validation_Strategy();
74
+			$validation_error_message = $default_validation_strategy->get_validation_error_message();
75
+		}
76
+		throw new EE_Validation_Error($validation_error_message, 'numeric_only');
77
+	}
78 78
 
79 79
 
80 80
 
81
-    /**
82
-     * Converts the int into a string for use in teh html form
83
-     *
84
-     * @param int $normalized_value
85
-     * @return string
86
-     */
87
-    public function unnormalize($normalized_value)
88
-    {
89
-        if ($normalized_value === null || $normalized_value === '') {
90
-            return '';
91
-        }
92
-        if (empty($normalized_value)) {
93
-            return '0';
94
-        }
95
-        return "$normalized_value";
96
-    }
81
+	/**
82
+	 * Converts the int into a string for use in teh html form
83
+	 *
84
+	 * @param int $normalized_value
85
+	 * @return string
86
+	 */
87
+	public function unnormalize($normalized_value)
88
+	{
89
+		if ($normalized_value === null || $normalized_value === '') {
90
+			return '';
91
+		}
92
+		if (empty($normalized_value)) {
93
+			return '0';
94
+		}
95
+		return "$normalized_value";
96
+	}
97 97
 }
Please login to merge, or discard this patch.
core/libraries/form_sections/inputs/EE_Form_Input_Base.input.php 2 patches
Spacing   +19 added lines, -19 removed lines patch added patch discarded remove patch
@@ -199,7 +199,7 @@  discard block
 block discarded – undo
199 199
         if (isset($input_args['validation_strategies'])) {
200 200
             foreach ((array) $input_args['validation_strategies'] as $validation_strategy) {
201 201
                 if ($validation_strategy instanceof EE_Validation_Strategy_Base && empty($input_args['ignore_input'])) {
202
-                    $this->_validation_strategies[ get_class($validation_strategy) ] = $validation_strategy;
202
+                    $this->_validation_strategies[get_class($validation_strategy)] = $validation_strategy;
203 203
                 }
204 204
             }
205 205
             unset($input_args['validation_strategies']);
@@ -210,7 +210,7 @@  discard block
 block discarded – undo
210 210
         // loop thru incoming options
211 211
         foreach ($input_args as $key => $value) {
212 212
             // add underscore to $key to match property names
213
-            $_key = '_' . $key;
213
+            $_key = '_'.$key;
214 214
             if (property_exists($this, $_key)) {
215 215
                 $this->{$_key} = $value;
216 216
             }
@@ -230,7 +230,7 @@  discard block
 block discarded – undo
230 230
         if (isset($input_args['ignore_input'])) {
231 231
             $this->_normalization_strategy = new EE_Null_Normalization();
232 232
         }
233
-        if (! $this->_normalization_strategy) {
233
+        if ( ! $this->_normalization_strategy) {
234 234
                 $this->_normalization_strategy = new EE_Text_Normalization();
235 235
         }
236 236
         $this->_normalization_strategy->_construct_finalize($this);
@@ -239,7 +239,7 @@  discard block
 block discarded – undo
239 239
             $this->set_default($input_args['default']);
240 240
             unset($input_args['default']);
241 241
         }
242
-        if (! $this->_sensitive_data_removal_strategy) {
242
+        if ( ! $this->_sensitive_data_removal_strategy) {
243 243
             $this->_sensitive_data_removal_strategy = new EE_No_Sensitive_Data_Removal();
244 244
         }
245 245
         $this->_sensitive_data_removal_strategy->_construct_finalize($this);
@@ -256,10 +256,10 @@  discard block
 block discarded – undo
256 256
      */
257 257
     protected function _set_default_html_name_if_empty()
258 258
     {
259
-        if (! $this->_html_name) {
259
+        if ( ! $this->_html_name) {
260 260
             $this->_html_name = $this->name();
261 261
             if ($this->_parent_section && $this->_parent_section instanceof EE_Form_Section_Proper) {
262
-                $this->_html_name = $this->_parent_section->html_name_prefix() . "[{$this->name()}]";
262
+                $this->_html_name = $this->_parent_section->html_name_prefix()."[{$this->name()}]";
263 263
             }
264 264
         }
265 265
     }
@@ -291,7 +291,7 @@  discard block
 block discarded – undo
291 291
     protected function _get_display_strategy()
292 292
     {
293 293
         $this->ensure_construct_finalized_called();
294
-        if (! $this->_display_strategy || ! $this->_display_strategy instanceof EE_Display_Strategy_Base) {
294
+        if ( ! $this->_display_strategy || ! $this->_display_strategy instanceof EE_Display_Strategy_Base) {
295 295
             throw new EE_Error(
296 296
                 sprintf(
297 297
                     esc_html__(
@@ -459,7 +459,7 @@  discard block
 block discarded – undo
459 459
                 $validation_strategy instanceof $validation_strategy_classname
460 460
                 || is_subclass_of($validation_strategy, $validation_strategy_classname)
461 461
             ) {
462
-                unset($this->_validation_strategies[ $key ]);
462
+                unset($this->_validation_strategies[$key]);
463 463
             }
464 464
         }
465 465
     }
@@ -670,7 +670,7 @@  discard block
 block discarded – undo
670 670
             if (is_array($raw_input)) {
671 671
                 $raw_value = array();
672 672
                 foreach ($raw_input as $key => $value) {
673
-                    $raw_value[ $key ] = $this->_sanitize($value);
673
+                    $raw_value[$key] = $this->_sanitize($value);
674 674
                 }
675 675
                 $this->_set_raw_value($raw_value);
676 676
             } else {
@@ -703,7 +703,7 @@  discard block
 block discarded – undo
703 703
      */
704 704
     public function html_label_id()
705 705
     {
706
-        return ! empty($this->_html_label_id) ? $this->_html_label_id : $this->html_id() . '-lbl';
706
+        return ! empty($this->_html_label_id) ? $this->_html_label_id : $this->html_id().'-lbl';
707 707
     }
708 708
 
709 709
 
@@ -853,9 +853,9 @@  discard block
 block discarded – undo
853 853
                 $validation_strategy->get_jquery_validation_rule_array()
854 854
             );
855 855
         }
856
-        if (! empty($jquery_validation_rules)) {
856
+        if ( ! empty($jquery_validation_rules)) {
857 857
             foreach ($this->get_display_strategy()->get_html_input_ids(true) as $html_id_with_pound_sign) {
858
-                $jquery_validation_js[ $html_id_with_pound_sign ] = $jquery_validation_rules;
858
+                $jquery_validation_js[$html_id_with_pound_sign] = $jquery_validation_rules;
859 859
             }
860 860
         }
861 861
         return $jquery_validation_js;
@@ -977,7 +977,7 @@  discard block
 block discarded – undo
977 977
     public function html_class($add_required = false)
978 978
     {
979 979
         return $add_required && $this->required()
980
-            ? $this->required_css_class() . ' ' . $this->_html_class
980
+            ? $this->required_css_class().' '.$this->_html_class
981 981
             : $this->_html_class;
982 982
     }
983 983
 
@@ -1052,7 +1052,7 @@  discard block
 block discarded – undo
1052 1052
                 $button_css_attributes .= '';
1053 1053
         }
1054 1054
         $this->_button_css_attributes .= ! empty($other_attributes)
1055
-            ? $button_css_attributes . ' ' . $other_attributes
1055
+            ? $button_css_attributes.' '.$other_attributes
1056 1056
             : $button_css_attributes;
1057 1057
     }
1058 1058
 
@@ -1090,8 +1090,8 @@  discard block
 block discarded – undo
1090 1090
         // now get the value for the input
1091 1091
         $value = $this->findRequestForSectionUsingNameParts($name_parts, $req_data);
1092 1092
         // check if this thing's name is at the TOP level of the request data
1093
-        if ($value === null && isset($req_data[ $this->name() ])) {
1094
-            $value = $req_data[ $this->name() ];
1093
+        if ($value === null && isset($req_data[$this->name()])) {
1094
+            $value = $req_data[$this->name()];
1095 1095
         }
1096 1096
         return $value;
1097 1097
     }
@@ -1133,13 +1133,13 @@  discard block
 block discarded – undo
1133 1133
     public function findRequestForSectionUsingNameParts($html_name_parts, $req_data)
1134 1134
     {
1135 1135
         $first_part_to_consider = array_shift($html_name_parts);
1136
-        if (isset($req_data[ $first_part_to_consider ])) {
1136
+        if (isset($req_data[$first_part_to_consider])) {
1137 1137
             if (empty($html_name_parts)) {
1138
-                return $req_data[ $first_part_to_consider ];
1138
+                return $req_data[$first_part_to_consider];
1139 1139
             } else {
1140 1140
                 return $this->findRequestForSectionUsingNameParts(
1141 1141
                     $html_name_parts,
1142
-                    $req_data[ $first_part_to_consider ]
1142
+                    $req_data[$first_part_to_consider]
1143 1143
                 );
1144 1144
             }
1145 1145
         } else {
Please login to merge, or discard this patch.
Indentation   +1257 added lines, -1257 removed lines patch added patch discarded remove patch
@@ -14,1261 +14,1261 @@
 block discarded – undo
14 14
  */
15 15
 abstract class EE_Form_Input_Base extends EE_Form_Section_Validatable
16 16
 {
17
-    /**
18
-     * the input's name attribute
19
-     *
20
-     * @var string
21
-     */
22
-    protected $_html_name;
23
-
24
-    /**
25
-     * id for the html label tag
26
-     *
27
-     * @var string
28
-     */
29
-    protected $_html_label_id;
30
-
31
-    /**
32
-     * class for teh html label tag
33
-     *
34
-     * @var string
35
-     */
36
-    protected $_html_label_class;
37
-
38
-    /**
39
-     * style for teh html label tag
40
-     *
41
-     * @var string
42
-     */
43
-    protected $_html_label_style;
44
-
45
-    /**
46
-     * text to be placed in the html label
47
-     *
48
-     * @var string
49
-     */
50
-    protected $_html_label_text;
51
-
52
-    /**
53
-     * the full html label. If used, all other html_label_* properties are invalid
54
-     *
55
-     * @var string
56
-     */
57
-    protected $_html_label;
58
-
59
-    /**
60
-     * HTML to use for help text (normally placed below form input), in a span which normally
61
-     * has a class of 'description'
62
-     *
63
-     * @var string
64
-     */
65
-    protected $_html_help_text;
66
-
67
-    /**
68
-     * CSS classes for displaying the help span
69
-     *
70
-     * @var string
71
-     */
72
-    protected $_html_help_class = 'description';
73
-
74
-    /**
75
-     * CSS to put in the style attribute on the help span
76
-     *
77
-     * @var string
78
-     */
79
-    protected $_html_help_style;
80
-
81
-    /**
82
-     * Stores whether or not this input's response is required.
83
-     * Because certain styling elements may also want to know that this
84
-     * input is required etc.
85
-     *
86
-     * @var boolean
87
-     */
88
-    protected $_required;
89
-
90
-    /**
91
-     * css class added to required inputs
92
-     *
93
-     * @var string
94
-     */
95
-    protected $_required_css_class = 'ee-required';
96
-
97
-    /**
98
-     * css styles applied to button type inputs
99
-     *
100
-     * @var string
101
-     */
102
-    protected $_button_css_attributes;
103
-
104
-    /**
105
-     * The raw post data submitted for this
106
-     * Generally unsafe for usage in client code
107
-     *
108
-     * @var mixed string or array
109
-     */
110
-    protected $_raw_value;
111
-
112
-    /**
113
-     * Value normalized according to the input's normalization strategy.
114
-     * The normalization strategy dictates whether this is a string, int, float,
115
-     * boolean, or array of any of those.
116
-     *
117
-     * @var mixed
118
-     */
119
-    protected $_normalized_value;
120
-
121
-
122
-    /**
123
-     * Normalized default value either initially set on the input, or provided by calling
124
-     * set_default().
125
-     * @var mixed
126
-     */
127
-    protected $_default;
128
-
129
-    /**
130
-     * Strategy used for displaying this field.
131
-     * Child classes must use _get_display_strategy to access it.
132
-     *
133
-     * @var EE_Display_Strategy_Base
134
-     */
135
-    private $_display_strategy;
136
-
137
-    /**
138
-     * Gets all the validation strategies used on this field
139
-     *
140
-     * @var EE_Validation_Strategy_Base[]
141
-     */
142
-    private $_validation_strategies = array();
143
-
144
-    /**
145
-     * The normalization strategy for this field
146
-     *
147
-     * @var EE_Normalization_Strategy_Base
148
-     */
149
-    private $_normalization_strategy;
150
-
151
-    /**
152
-     * Strategy for removing sensitive data after we're done with the form input
153
-     *
154
-     * @var EE_Sensitive_Data_Removal_Base
155
-     */
156
-    protected $_sensitive_data_removal_strategy;
157
-
158
-    /**
159
-     * Whether this input has been disabled or not.
160
-     * If it's disabled while rendering, an extra hidden input is added that indicates it has been knowingly disabled.
161
-     * (Client-side code that wants to dynamically disable it must also add this hidden input).
162
-     * When the form is submitted, if the input is disabled in the PHP form section, then input is ignored.
163
-     * If the input is missing from the request data but the hidden input indicating the input is disabled, then the input is again ignored.
164
-     *
165
-     * @var boolean
166
-     */
167
-    protected $disabled = false;
168
-
169
-
170
-
171
-    /**
172
-     * @param array                         $input_args       {
173
-     * @type string                         $html_name        the html name for the input
174
-     * @type string                         $html_label_id    the id attribute to give to the html label tag
175
-     * @type string                         $html_label_class the class attribute to give to the html label tag
176
-     * @type string                         $html_label_style the style attribute to give ot teh label tag
177
-     * @type string                         $html_label_text  the text to put in the label tag
178
-     * @type string                         $html_label       the full html label. If used,
179
-     *                                                        all other html_label_* args are invalid
180
-     * @type string                         $html_help_text   text to put in help element
181
-     * @type string                         $html_help_style  style attribute to give to teh help element
182
-     * @type string                         $html_help_class  class attribute to give to the help element
183
-     * @type string                         $default          default value NORMALIZED (eg, if providing the default
184
-     *       for a Yes_No_Input, you should provide TRUE or FALSE, not '1' or '0')
185
-     * @type EE_Display_Strategy_Base       $display          strategy
186
-     * @type EE_Normalization_Strategy_Base $normalization_strategy
187
-     * @type EE_Validation_Strategy_Base[]  $validation_strategies
188
-     * @type boolean                        $ignore_input special argument which can be used to avoid adding any validation strategies,
189
-     *                                                    and sets the normalization strategy to the Null normalization. This is good
190
-     *                                                    when you want the input to be totally ignored server-side (like when using
191
-     *                                                    React.js form inputs)
192
-     *                                                        }
193
-     */
194
-    public function __construct($input_args = array())
195
-    {
196
-        $input_args = (array) apply_filters('FHEE__EE_Form_Input_Base___construct__input_args', $input_args, $this);
197
-        // the following properties must be cast as arrays
198
-        if (isset($input_args['validation_strategies'])) {
199
-            foreach ((array) $input_args['validation_strategies'] as $validation_strategy) {
200
-                if ($validation_strategy instanceof EE_Validation_Strategy_Base && empty($input_args['ignore_input'])) {
201
-                    $this->_validation_strategies[ get_class($validation_strategy) ] = $validation_strategy;
202
-                }
203
-            }
204
-            unset($input_args['validation_strategies']);
205
-        }
206
-        if (isset($input_args['ignore_input'])) {
207
-            $this->_validation_strategies = array();
208
-        }
209
-        // loop thru incoming options
210
-        foreach ($input_args as $key => $value) {
211
-            // add underscore to $key to match property names
212
-            $_key = '_' . $key;
213
-            if (property_exists($this, $_key)) {
214
-                $this->{$_key} = $value;
215
-            }
216
-        }
217
-        // ensure that "required" is set correctly
218
-        $this->set_required(
219
-            $this->_required,
220
-            isset($input_args['required_validation_error_message'])
221
-            ? $input_args['required_validation_error_message']
222
-            : null
223
-        );
224
-        // $this->_html_name_specified = isset( $input_args['html_name'] ) ? TRUE : FALSE;
225
-        $this->_display_strategy->_construct_finalize($this);
226
-        foreach ($this->_validation_strategies as $validation_strategy) {
227
-            $validation_strategy->_construct_finalize($this);
228
-        }
229
-        if (isset($input_args['ignore_input'])) {
230
-            $this->_normalization_strategy = new EE_Null_Normalization();
231
-        }
232
-        if (! $this->_normalization_strategy) {
233
-                $this->_normalization_strategy = new EE_Text_Normalization();
234
-        }
235
-        $this->_normalization_strategy->_construct_finalize($this);
236
-        // at least we can use the normalization strategy to populate the default
237
-        if (isset($input_args['default'])) {
238
-            $this->set_default($input_args['default']);
239
-            unset($input_args['default']);
240
-        }
241
-        if (! $this->_sensitive_data_removal_strategy) {
242
-            $this->_sensitive_data_removal_strategy = new EE_No_Sensitive_Data_Removal();
243
-        }
244
-        $this->_sensitive_data_removal_strategy->_construct_finalize($this);
245
-        parent::__construct($input_args);
246
-    }
247
-
248
-
249
-
250
-    /**
251
-     * Sets the html_name to its default value, if none was specified in teh constructor.
252
-     * Calculation involves using the name and the parent's html_name
253
-     *
254
-     * @throws EE_Error
255
-     */
256
-    protected function _set_default_html_name_if_empty()
257
-    {
258
-        if (! $this->_html_name) {
259
-            $this->_html_name = $this->name();
260
-            if ($this->_parent_section && $this->_parent_section instanceof EE_Form_Section_Proper) {
261
-                $this->_html_name = $this->_parent_section->html_name_prefix() . "[{$this->name()}]";
262
-            }
263
-        }
264
-    }
265
-
266
-
267
-
268
-    /**
269
-     * @param $parent_form_section
270
-     * @param $name
271
-     * @throws EE_Error
272
-     */
273
-    public function _construct_finalize($parent_form_section, $name)
274
-    {
275
-        parent::_construct_finalize($parent_form_section, $name);
276
-        if ($this->_html_label === null && $this->_html_label_text === null) {
277
-            $this->_html_label_text = ucwords(str_replace("_", " ", $name));
278
-        }
279
-        do_action('AHEE__EE_Form_Input_Base___construct_finalize__end', $this, $parent_form_section, $name);
280
-    }
281
-
282
-
283
-
284
-    /**
285
-     * Returns the strategy for displaying this form input. If none is set, throws an exception.
286
-     *
287
-     * @return EE_Display_Strategy_Base
288
-     * @throws EE_Error
289
-     */
290
-    protected function _get_display_strategy()
291
-    {
292
-        $this->ensure_construct_finalized_called();
293
-        if (! $this->_display_strategy || ! $this->_display_strategy instanceof EE_Display_Strategy_Base) {
294
-            throw new EE_Error(
295
-                sprintf(
296
-                    esc_html__(
297
-                        "Cannot get display strategy for form input with name %s and id %s, because it has not been set in the constructor",
298
-                        "event_espresso"
299
-                    ),
300
-                    $this->html_name(),
301
-                    $this->html_id()
302
-                )
303
-            );
304
-        } else {
305
-            return $this->_display_strategy;
306
-        }
307
-    }
308
-
309
-
310
-
311
-    /**
312
-     * Sets the display strategy.
313
-     *
314
-     * @param EE_Display_Strategy_Base $strategy
315
-     */
316
-    protected function _set_display_strategy(EE_Display_Strategy_Base $strategy)
317
-    {
318
-        $this->_display_strategy = $strategy;
319
-    }
320
-
321
-
322
-
323
-    /**
324
-     * Sets the sanitization strategy
325
-     *
326
-     * @param EE_Normalization_Strategy_Base $strategy
327
-     */
328
-    protected function _set_normalization_strategy(EE_Normalization_Strategy_Base $strategy)
329
-    {
330
-        $this->_normalization_strategy = $strategy;
331
-    }
332
-
333
-
334
-
335
-    /**
336
-     * Gets sensitive_data_removal_strategy
337
-     *
338
-     * @return EE_Sensitive_Data_Removal_Base
339
-     */
340
-    public function get_sensitive_data_removal_strategy()
341
-    {
342
-        return $this->_sensitive_data_removal_strategy;
343
-    }
344
-
345
-
346
-
347
-    /**
348
-     * Sets sensitive_data_removal_strategy
349
-     *
350
-     * @param EE_Sensitive_Data_Removal_Base $sensitive_data_removal_strategy
351
-     * @return void
352
-     */
353
-    public function set_sensitive_data_removal_strategy($sensitive_data_removal_strategy)
354
-    {
355
-        $this->_sensitive_data_removal_strategy = $sensitive_data_removal_strategy;
356
-    }
357
-
358
-
359
-
360
-    /**
361
-     * Gets the display strategy for this input
362
-     *
363
-     * @return EE_Display_Strategy_Base
364
-     */
365
-    public function get_display_strategy()
366
-    {
367
-        return $this->_display_strategy;
368
-    }
369
-
370
-
371
-
372
-    /**
373
-     * Overwrites the display strategy
374
-     *
375
-     * @param EE_Display_Strategy_Base $display_strategy
376
-     */
377
-    public function set_display_strategy($display_strategy)
378
-    {
379
-        $this->_display_strategy = $display_strategy;
380
-        $this->_display_strategy->_construct_finalize($this);
381
-    }
382
-
383
-
384
-
385
-    /**
386
-     * Gets the normalization strategy set on this input
387
-     *
388
-     * @return EE_Normalization_Strategy_Base
389
-     */
390
-    public function get_normalization_strategy()
391
-    {
392
-        return $this->_normalization_strategy;
393
-    }
394
-
395
-
396
-
397
-    /**
398
-     * Overwrites the normalization strategy
399
-     *
400
-     * @param EE_Normalization_Strategy_Base $normalization_strategy
401
-     */
402
-    public function set_normalization_strategy($normalization_strategy)
403
-    {
404
-        $this->_normalization_strategy = $normalization_strategy;
405
-        $this->_normalization_strategy->_construct_finalize($this);
406
-    }
407
-
408
-
409
-
410
-    /**
411
-     * Returns all teh validation strategies which apply to this field, numerically indexed
412
-     *
413
-     * @return EE_Validation_Strategy_Base[]
414
-     */
415
-    public function get_validation_strategies()
416
-    {
417
-        return $this->_validation_strategies;
418
-    }
419
-
420
-
421
-
422
-    /**
423
-     * Adds this strategy to the field so it will be used in both JS validation and server-side validation
424
-     *
425
-     * @param EE_Validation_Strategy_Base $validation_strategy
426
-     * @return void
427
-     */
428
-    protected function _add_validation_strategy(EE_Validation_Strategy_Base $validation_strategy)
429
-    {
430
-        $validation_strategy->_construct_finalize($this);
431
-        $this->_validation_strategies[] = $validation_strategy;
432
-    }
433
-
434
-
435
-
436
-    /**
437
-     * Adds a new validation strategy onto the form input
438
-     *
439
-     * @param EE_Validation_Strategy_Base $validation_strategy
440
-     * @return void
441
-     */
442
-    public function add_validation_strategy(EE_Validation_Strategy_Base $validation_strategy)
443
-    {
444
-        $this->_add_validation_strategy($validation_strategy);
445
-    }
446
-
447
-
448
-
449
-    /**
450
-     * The classname of the validation strategy to remove
451
-     *
452
-     * @param string $validation_strategy_classname
453
-     */
454
-    public function remove_validation_strategy($validation_strategy_classname)
455
-    {
456
-        foreach ($this->_validation_strategies as $key => $validation_strategy) {
457
-            if (
458
-                $validation_strategy instanceof $validation_strategy_classname
459
-                || is_subclass_of($validation_strategy, $validation_strategy_classname)
460
-            ) {
461
-                unset($this->_validation_strategies[ $key ]);
462
-            }
463
-        }
464
-    }
465
-
466
-
467
-
468
-    /**
469
-     * returns true if input employs any of the validation strategy defined by the supplied array of classnames
470
-     *
471
-     * @param array $validation_strategy_classnames
472
-     * @return bool
473
-     */
474
-    public function has_validation_strategy($validation_strategy_classnames)
475
-    {
476
-        $validation_strategy_classnames = is_array($validation_strategy_classnames)
477
-            ? $validation_strategy_classnames
478
-            : array($validation_strategy_classnames);
479
-        foreach ($this->_validation_strategies as $key => $validation_strategy) {
480
-            if (in_array($key, $validation_strategy_classnames)) {
481
-                return true;
482
-            }
483
-        }
484
-        return false;
485
-    }
486
-
487
-
488
-
489
-    /**
490
-     * Gets the HTML
491
-     *
492
-     * @return string
493
-     */
494
-    public function get_html()
495
-    {
496
-        return $this->_parent_section->get_html_for_input($this);
497
-    }
498
-
499
-
500
-
501
-    /**
502
-     * Gets the HTML for the input itself (no label or errors) according to the
503
-     * input's display strategy
504
-     * Makes sure the JS and CSS are enqueued for it
505
-     *
506
-     * @return string
507
-     * @throws EE_Error
508
-     */
509
-    public function get_html_for_input()
510
-    {
511
-        return $this->_form_html_filter
512
-            ? $this->_form_html_filter->filterHtml(
513
-                $this->_get_display_strategy()->display(),
514
-                $this
515
-            )
516
-            : $this->_get_display_strategy()->display();
517
-    }
518
-
519
-
520
-
521
-    /**
522
-     * @return string
523
-     */
524
-    public function html_other_attributes()
525
-    {
526
-        EE_Error::doing_it_wrong(
527
-            __METHOD__,
528
-            sprintf(
529
-                esc_html__(
530
-                    'This method is no longer in use. You should replace it by %s',
531
-                    'event_espresso'
532
-                ),
533
-                'EE_Form_Section_Base::other_html_attributes()'
534
-            ),
535
-            '4.10.2.p'
536
-        );
537
-
538
-        return $this->other_html_attributes();
539
-    }
540
-
541
-
542
-
543
-    /**
544
-     * @param string $html_other_attributes
545
-     */
546
-    public function set_html_other_attributes($html_other_attributes)
547
-    {
548
-        EE_Error::doing_it_wrong(
549
-            __METHOD__,
550
-            sprintf(
551
-                esc_html__(
552
-                    'This method is no longer in use. You should replace it by %s',
553
-                    'event_espresso'
554
-                ),
555
-                'EE_Form_Section_Base::set_other_html_attributes()'
556
-            ),
557
-            '4.10.2.p'
558
-        );
559
-
560
-        $this->set_other_html_attributes($html_other_attributes);
561
-    }
562
-
563
-
564
-
565
-    /**
566
-     * Gets the HTML for displaying the label for this form input
567
-     * according to the form section's layout strategy
568
-     *
569
-     * @return string
570
-     */
571
-    public function get_html_for_label()
572
-    {
573
-        return $this->_parent_section->get_layout_strategy()->display_label($this);
574
-    }
575
-
576
-
577
-
578
-    /**
579
-     * Gets the HTML for displaying the errors section for this form input
580
-     * according to the form section's layout strategy
581
-     *
582
-     * @return string
583
-     */
584
-    public function get_html_for_errors()
585
-    {
586
-        return $this->_parent_section->get_layout_strategy()->display_errors($this);
587
-    }
588
-
589
-
590
-
591
-    /**
592
-     * Gets the HTML for displaying the help text for this form input
593
-     * according to the form section's layout strategy
594
-     *
595
-     * @return string
596
-     */
597
-    public function get_html_for_help()
598
-    {
599
-        return $this->_parent_section->get_layout_strategy()->display_help_text($this);
600
-    }
601
-
602
-
603
-
604
-    /**
605
-     * Validates the input's sanitized value (assumes _sanitize() has already been called)
606
-     * and returns whether or not the form input's submitted value is value
607
-     *
608
-     * @return boolean
609
-     */
610
-    protected function _validate()
611
-    {
612
-        if ($this->isDisabled()) {
613
-            return true;
614
-        }
615
-        foreach ($this->_validation_strategies as $validation_strategy) {
616
-            if ($validation_strategy instanceof EE_Validation_Strategy_Base) {
617
-                try {
618
-                    $validation_strategy->validate($this->normalized_value());
619
-                } catch (EE_Validation_Error $e) {
620
-                    $this->add_validation_error($e);
621
-                }
622
-            }
623
-        }
624
-        if ($this->get_validation_errors()) {
625
-            return false;
626
-        } else {
627
-            return true;
628
-        }
629
-    }
630
-
631
-
632
-
633
-    /**
634
-     * Performs basic sanitization on this value. But what sanitization can be performed anyways?
635
-     * This value MIGHT be allowed to have tags, so we can't really remove them.
636
-     *
637
-     * @param string $value
638
-     * @return null|string
639
-     */
640
-    protected function _sanitize($value)
641
-    {
642
-        return $value !== null ? stripslashes(html_entity_decode(trim($value))) : null;
643
-    }
644
-
645
-
646
-
647
-    /**
648
-     * Picks out the form value that relates to this form input,
649
-     * and stores it as the sanitized value on the form input, and sets the normalized value.
650
-     * Returns whether or not any validation errors occurred
651
-     *
652
-     * @param array $req_data
653
-     * @return boolean whether or not there was an error
654
-     * @throws EE_Error
655
-     */
656
-    protected function _normalize($req_data)
657
-    {
658
-        // any existing validation errors don't apply so clear them
659
-        $this->_validation_errors = array();
660
-        // if the input is disabled, ignore whatever input was sent in
661
-        if ($this->isDisabled()) {
662
-            $this->_set_raw_value(null);
663
-            $this->_set_normalized_value($this->get_default());
664
-            return false;
665
-        }
666
-        try {
667
-            $raw_input = $this->find_form_data_for_this_section($req_data);
668
-            // super simple sanitization for now
669
-            if (is_array($raw_input)) {
670
-                $raw_value = array();
671
-                foreach ($raw_input as $key => $value) {
672
-                    $raw_value[ $key ] = $this->_sanitize($value);
673
-                }
674
-                $this->_set_raw_value($raw_value);
675
-            } else {
676
-                $this->_set_raw_value($this->_sanitize($raw_input));
677
-            }
678
-            // we want to mostly leave the input alone in case we need to re-display it to the user
679
-            $this->_set_normalized_value($this->_normalization_strategy->normalize($this->raw_value()));
680
-            return false;
681
-        } catch (EE_Validation_Error $e) {
682
-            $this->add_validation_error($e);
683
-            return true;
684
-        }
685
-    }
686
-
687
-
688
-    /**
689
-     * @return string
690
-     * @throws EE_Error
691
-     */
692
-    public function html_name()
693
-    {
694
-        $this->_set_default_html_name_if_empty();
695
-        return $this->_html_name;
696
-    }
697
-
698
-
699
-    /**
700
-     * @return string
701
-     * @throws EE_Error
702
-     */
703
-    public function html_label_id()
704
-    {
705
-        return ! empty($this->_html_label_id) ? $this->_html_label_id : $this->html_id() . '-lbl';
706
-    }
707
-
708
-
709
-
710
-    /**
711
-     * @return string
712
-     */
713
-    public function html_label_class()
714
-    {
715
-        return $this->_html_label_class;
716
-    }
717
-
718
-
719
-
720
-    /**
721
-     * @return string
722
-     */
723
-    public function html_label_style()
724
-    {
725
-        return $this->_html_label_style;
726
-    }
727
-
728
-
729
-
730
-    /**
731
-     * @return string
732
-     */
733
-    public function html_label_text()
734
-    {
735
-        return $this->_html_label_text;
736
-    }
737
-
738
-
739
-
740
-    /**
741
-     * @return string
742
-     */
743
-    public function html_help_text()
744
-    {
745
-        return $this->_html_help_text;
746
-    }
747
-
748
-
749
-
750
-    /**
751
-     * @return string
752
-     */
753
-    public function html_help_class()
754
-    {
755
-        return $this->_html_help_class;
756
-    }
757
-
758
-
759
-
760
-    /**
761
-     * @return string
762
-     */
763
-    public function html_help_style()
764
-    {
765
-        return $this->_html_style;
766
-    }
767
-
768
-
769
-
770
-    /**
771
-     * returns the raw, UNSAFE, input, almost exactly as the user submitted it.
772
-     * Please note that almost all client code should instead use the normalized_value;
773
-     * or possibly raw_value_in_form (which prepares the string for displaying in an HTML attribute on a tag,
774
-     * mostly by escaping quotes)
775
-     * Note, we do not store the exact original value sent in the user's request because
776
-     * it may have malicious content, and we MIGHT want to store the form input in a transient or something...
777
-     * in which case, we would have stored the malicious content to our database.
778
-     *
779
-     * @return string
780
-     */
781
-    public function raw_value()
782
-    {
783
-        return $this->_raw_value;
784
-    }
785
-
786
-
787
-
788
-    /**
789
-     * Returns a string safe to usage in form inputs when displaying, because
790
-     * it escapes all html entities
791
-     *
792
-     * @return string
793
-     */
794
-    public function raw_value_in_form()
795
-    {
796
-        return htmlentities($this->raw_value(), ENT_QUOTES, 'UTF-8');
797
-    }
798
-
799
-
800
-
801
-    /**
802
-     * returns the value after it's been sanitized, and then converted into it's proper type
803
-     * in PHP. Eg, a string, an int, an array,
804
-     *
805
-     * @return mixed
806
-     */
807
-    public function normalized_value()
808
-    {
809
-        return $this->_normalized_value;
810
-    }
811
-
812
-
813
-
814
-    /**
815
-     * Returns the normalized value is a presentable way. By default this is just
816
-     * the normalized value by itself, but it can be overridden for when that's not
817
-     * the best thing to display
818
-     *
819
-     * @return string
820
-     */
821
-    public function pretty_value()
822
-    {
823
-        return $this->_normalized_value;
824
-    }
825
-
826
-
827
-
828
-    /**
829
-     * When generating the JS for the jquery validation rules like<br>
830
-     * <code>$( "#myform" ).validate({
831
-     * rules: {
832
-     * password: "required",
833
-     * password_again: {
834
-     * equalTo: "#password"
835
-     * }
836
-     * }
837
-     * });</code>
838
-     * if this field had the name 'password_again', it should return
839
-     * <br><code>password_again: {
840
-     * equalTo: "#password"
841
-     * }</code>
842
-     *
843
-     * @return array
844
-     */
845
-    public function get_jquery_validation_rules()
846
-    {
847
-        $jquery_validation_js = array();
848
-        $jquery_validation_rules = array();
849
-        foreach ($this->get_validation_strategies() as $validation_strategy) {
850
-            $jquery_validation_rules = array_replace_recursive(
851
-                $jquery_validation_rules,
852
-                $validation_strategy->get_jquery_validation_rule_array()
853
-            );
854
-        }
855
-        if (! empty($jquery_validation_rules)) {
856
-            foreach ($this->get_display_strategy()->get_html_input_ids(true) as $html_id_with_pound_sign) {
857
-                $jquery_validation_js[ $html_id_with_pound_sign ] = $jquery_validation_rules;
858
-            }
859
-        }
860
-        return $jquery_validation_js;
861
-    }
862
-
863
-
864
-
865
-    /**
866
-     * Sets the input's default value for use in displaying in the form. Note: value should be
867
-     * normalized (Eg, if providing a default of ra Yes_NO_Input you would provide TRUE or FALSE, not '1' or '0')
868
-     *
869
-     * @param mixed $value
870
-     * @return void
871
-     */
872
-    public function set_default($value)
873
-    {
874
-        $this->_default = $value;
875
-        $this->_set_normalized_value($value);
876
-        $this->_set_raw_value($value);
877
-    }
878
-
879
-
880
-
881
-    /**
882
-     * Sets the normalized value on this input
883
-     *
884
-     * @param mixed $value
885
-     */
886
-    protected function _set_normalized_value($value)
887
-    {
888
-        $this->_normalized_value = $value;
889
-    }
890
-
891
-
892
-
893
-    /**
894
-     * Sets the raw value on this input (ie, exactly as the user submitted it)
895
-     *
896
-     * @param mixed $value
897
-     */
898
-    protected function _set_raw_value($value)
899
-    {
900
-        $this->_raw_value = $this->_normalization_strategy->unnormalize($value);
901
-    }
902
-
903
-
904
-
905
-    /**
906
-     * Sets the HTML label text after it has already been defined
907
-     *
908
-     * @param string $label
909
-     * @return void
910
-     */
911
-    public function set_html_label_text($label)
912
-    {
913
-        $this->_html_label_text = $label;
914
-    }
915
-
916
-
917
-
918
-    /**
919
-     * Sets whether or not this field is required, and adjusts the validation strategy.
920
-     * If you want to use the EE_Conditionally_Required_Validation_Strategy,
921
-     * please add it as a validation strategy using add_validation_strategy as normal
922
-     *
923
-     * @param boolean $required boolean
924
-     * @param null    $required_text
925
-     */
926
-    public function set_required($required = true, $required_text = null)
927
-    {
928
-        $required = filter_var($required, FILTER_VALIDATE_BOOLEAN);
929
-        // whether $required is a string or a boolean, we want to add a required validation strategy
930
-        if ($required) {
931
-            $this->_add_validation_strategy(new EE_Required_Validation_Strategy($required_text));
932
-        } else {
933
-            $this->remove_validation_strategy('EE_Required_Validation_Strategy');
934
-        }
935
-        $this->_required = $required;
936
-    }
937
-
938
-
939
-
940
-    /**
941
-     * Returns whether or not this field is required
942
-     *
943
-     * @return boolean
944
-     */
945
-    public function required()
946
-    {
947
-        return $this->_required;
948
-    }
949
-
950
-
951
-
952
-    /**
953
-     * @param string $required_css_class
954
-     */
955
-    public function set_required_css_class($required_css_class)
956
-    {
957
-        $this->_required_css_class = $required_css_class;
958
-    }
959
-
960
-
961
-
962
-    /**
963
-     * @return string
964
-     */
965
-    public function required_css_class()
966
-    {
967
-        return $this->_required_css_class;
968
-    }
969
-
970
-
971
-
972
-    /**
973
-     * @param bool $add_required
974
-     * @return string
975
-     */
976
-    public function html_class($add_required = false)
977
-    {
978
-        return $add_required && $this->required()
979
-            ? $this->required_css_class() . ' ' . $this->_html_class
980
-            : $this->_html_class;
981
-    }
982
-
983
-
984
-    /**
985
-     * Sets the help text, in case
986
-     *
987
-     * @param string $text
988
-     */
989
-    public function set_html_help_text($text)
990
-    {
991
-        $this->_html_help_text = $text;
992
-    }
993
-
994
-
995
-
996
-    /**
997
-     * Uses the sensitive data removal strategy to remove the sensitive data from this
998
-     * input. If there is any kind of sensitive data removal on this input, we clear
999
-     * out the raw value completely
1000
-     *
1001
-     * @return void
1002
-     */
1003
-    public function clean_sensitive_data()
1004
-    {
1005
-        // if we do ANY kind of sensitive data removal on this, then just clear out the raw value
1006
-        // if we need more logic than this we'll make a strategy for it
1007
-        if (
1008
-            $this->_sensitive_data_removal_strategy
1009
-            && ! $this->_sensitive_data_removal_strategy instanceof EE_No_Sensitive_Data_Removal
1010
-        ) {
1011
-            $this->_set_raw_value(null);
1012
-        }
1013
-        // and clean the normalized value according to the appropriate strategy
1014
-        $this->_set_normalized_value(
1015
-            $this->get_sensitive_data_removal_strategy()->remove_sensitive_data(
1016
-                $this->_normalized_value
1017
-            )
1018
-        );
1019
-    }
1020
-
1021
-
1022
-
1023
-    /**
1024
-     * @param bool   $primary
1025
-     * @param string $button_size
1026
-     * @param string $other_attributes
1027
-     */
1028
-    public function set_button_css_attributes($primary = true, $button_size = '', $other_attributes = '')
1029
-    {
1030
-        $button_css_attributes = 'button';
1031
-        $button_css_attributes .= $primary === true ? ' button-primary' : ' button-secondary';
1032
-        switch ($button_size) {
1033
-            case 'xs':
1034
-            case 'extra-small':
1035
-                $button_css_attributes .= ' button-xs';
1036
-                break;
1037
-            case 'sm':
1038
-            case 'small':
1039
-                $button_css_attributes .= ' button-sm';
1040
-                break;
1041
-            case 'lg':
1042
-            case 'large':
1043
-                $button_css_attributes .= ' button-lg';
1044
-                break;
1045
-            case 'block':
1046
-                $button_css_attributes .= ' button-block';
1047
-                break;
1048
-            case 'md':
1049
-            case 'medium':
1050
-            default:
1051
-                $button_css_attributes .= '';
1052
-        }
1053
-        $this->_button_css_attributes .= ! empty($other_attributes)
1054
-            ? $button_css_attributes . ' ' . $other_attributes
1055
-            : $button_css_attributes;
1056
-    }
1057
-
1058
-
1059
-
1060
-    /**
1061
-     * @return string
1062
-     */
1063
-    public function button_css_attributes()
1064
-    {
1065
-        if (empty($this->_button_css_attributes)) {
1066
-            $this->set_button_css_attributes();
1067
-        }
1068
-        return $this->_button_css_attributes;
1069
-    }
1070
-
1071
-
1072
-
1073
-    /**
1074
-     * find_form_data_for_this_section
1075
-     * using this section's name and its parents, finds the value of the form data that corresponds to it.
1076
-     * For example, if this form section's HTML name is my_form[subform][form_input_1],
1077
-     * then it's value should be in request at request['my_form']['subform']['form_input_1'].
1078
-     * (If that doesn't exist, we also check for this subsection's name
1079
-     * at the TOP LEVEL of the request data. Eg request['form_input_1'].)
1080
-     * This function finds its value in the form.
1081
-     *
1082
-     * @param array $req_data
1083
-     * @return mixed whatever the raw value of this form section is in the request data
1084
-     * @throws EE_Error
1085
-     */
1086
-    public function find_form_data_for_this_section($req_data)
1087
-    {
1088
-        $name_parts = $this->getInputNameParts();
1089
-        // now get the value for the input
1090
-        $value = $this->findRequestForSectionUsingNameParts($name_parts, $req_data);
1091
-        // check if this thing's name is at the TOP level of the request data
1092
-        if ($value === null && isset($req_data[ $this->name() ])) {
1093
-            $value = $req_data[ $this->name() ];
1094
-        }
1095
-        return $value;
1096
-    }
1097
-
1098
-
1099
-    /**
1100
-     * If this input's name is something like "foo[bar][baz]"
1101
-     * returns an array like `array('foo','bar',baz')`
1102
-     *
1103
-     * @return array
1104
-     * @throws EE_Error
1105
-     */
1106
-    protected function getInputNameParts()
1107
-    {
1108
-        // break up the html name by "[]"
1109
-        if (strpos($this->html_name(), '[') !== false) {
1110
-            $before_any_brackets = substr($this->html_name(), 0, strpos($this->html_name(), '['));
1111
-        } else {
1112
-            $before_any_brackets = $this->html_name();
1113
-        }
1114
-        // grab all of the segments
1115
-        preg_match_all('~\[([^]]*)\]~', $this->html_name(), $matches);
1116
-        if (isset($matches[1]) && is_array($matches[1])) {
1117
-            $name_parts = $matches[1];
1118
-            array_unshift($name_parts, $before_any_brackets);
1119
-        } else {
1120
-            $name_parts = array($before_any_brackets);
1121
-        }
1122
-        return $name_parts;
1123
-    }
1124
-
1125
-
1126
-
1127
-    /**
1128
-     * @param array $html_name_parts
1129
-     * @param array $req_data
1130
-     * @return array | NULL
1131
-     */
1132
-    public function findRequestForSectionUsingNameParts($html_name_parts, $req_data)
1133
-    {
1134
-        $first_part_to_consider = array_shift($html_name_parts);
1135
-        if (isset($req_data[ $first_part_to_consider ])) {
1136
-            if (empty($html_name_parts)) {
1137
-                return $req_data[ $first_part_to_consider ];
1138
-            } else {
1139
-                return $this->findRequestForSectionUsingNameParts(
1140
-                    $html_name_parts,
1141
-                    $req_data[ $first_part_to_consider ]
1142
-                );
1143
-            }
1144
-        } else {
1145
-            return null;
1146
-        }
1147
-    }
1148
-
1149
-
1150
-
1151
-    /**
1152
-     * Checks if this form input's data is in the request data
1153
-     *
1154
-     * @param array $req_data
1155
-     * @return boolean
1156
-     * @throws EE_Error
1157
-     */
1158
-    public function form_data_present_in($req_data = null)
1159
-    {
1160
-        if ($req_data === null) {
1161
-            /** @var RequestInterface $request */
1162
-            $request = LoaderFactory::getLoader()->getShared(RequestInterface::class);
1163
-            $req_data = $request->postParams();
1164
-        }
1165
-        $checked_value = $this->find_form_data_for_this_section($req_data);
1166
-        if ($checked_value !== null) {
1167
-            return true;
1168
-        } else {
1169
-            return false;
1170
-        }
1171
-    }
1172
-
1173
-
1174
-
1175
-    /**
1176
-     * Overrides parent to add js data from validation and display strategies
1177
-     *
1178
-     * @param array $form_other_js_data
1179
-     * @return array
1180
-     */
1181
-    public function get_other_js_data($form_other_js_data = array())
1182
-    {
1183
-        return $this->get_other_js_data_from_strategies($form_other_js_data);
1184
-    }
1185
-
1186
-
1187
-
1188
-    /**
1189
-     * Gets other JS data for localization from this input's strategies, like
1190
-     * the validation strategies and the display strategy
1191
-     *
1192
-     * @param array $form_other_js_data
1193
-     * @return array
1194
-     */
1195
-    public function get_other_js_data_from_strategies($form_other_js_data = array())
1196
-    {
1197
-        $form_other_js_data = $this->get_display_strategy()->get_other_js_data($form_other_js_data);
1198
-        foreach ($this->get_validation_strategies() as $validation_strategy) {
1199
-            $form_other_js_data = $validation_strategy->get_other_js_data($form_other_js_data);
1200
-        }
1201
-        return $form_other_js_data;
1202
-    }
1203
-
1204
-
1205
-
1206
-    /**
1207
-     * Override parent because we want to give our strategies an opportunity to enqueue some js and css
1208
-     *
1209
-     * @return void
1210
-     */
1211
-    public function enqueue_js()
1212
-    {
1213
-        // ask our display strategy and validation strategies if they have js to enqueue
1214
-        $this->enqueue_js_from_strategies();
1215
-    }
1216
-
1217
-
1218
-
1219
-    /**
1220
-     * Tells strategies when its ok to enqueue their js and css
1221
-     *
1222
-     * @return void
1223
-     */
1224
-    public function enqueue_js_from_strategies()
1225
-    {
1226
-        $this->get_display_strategy()->enqueue_js();
1227
-        foreach ($this->get_validation_strategies() as $validation_strategy) {
1228
-            $validation_strategy->enqueue_js();
1229
-        }
1230
-    }
1231
-
1232
-
1233
-
1234
-    /**
1235
-     * Gets the default value set on the input (not the current value, which may have been
1236
-     * changed because of a form submission). If no default was set, this us null.
1237
-     * @return mixed
1238
-     */
1239
-    public function get_default()
1240
-    {
1241
-        return $this->_default;
1242
-    }
1243
-
1244
-
1245
-
1246
-    /**
1247
-     * Makes this input disabled. That means it will have the HTML attribute 'disabled="disabled"',
1248
-     * and server-side if any input was received it will be ignored
1249
-     */
1250
-    public function disable($disable = true)
1251
-    {
1252
-        $disabled_attribute = ' disabled="disabled"';
1253
-        $this->disabled = filter_var($disable, FILTER_VALIDATE_BOOLEAN);
1254
-        if ($this->disabled) {
1255
-            if (strpos($this->_other_html_attributes, $disabled_attribute) === false) {
1256
-                $this->_other_html_attributes .= $disabled_attribute;
1257
-            }
1258
-            $this->_set_normalized_value($this->get_default());
1259
-        } else {
1260
-            $this->_other_html_attributes = str_replace($disabled_attribute, '', $this->_other_html_attributes);
1261
-        }
1262
-    }
1263
-
1264
-
1265
-
1266
-    /**
1267
-     * Returns whether or not this input is currently disabled.
1268
-     * @return bool
1269
-     */
1270
-    public function isDisabled()
1271
-    {
1272
-        return $this->disabled;
1273
-    }
17
+	/**
18
+	 * the input's name attribute
19
+	 *
20
+	 * @var string
21
+	 */
22
+	protected $_html_name;
23
+
24
+	/**
25
+	 * id for the html label tag
26
+	 *
27
+	 * @var string
28
+	 */
29
+	protected $_html_label_id;
30
+
31
+	/**
32
+	 * class for teh html label tag
33
+	 *
34
+	 * @var string
35
+	 */
36
+	protected $_html_label_class;
37
+
38
+	/**
39
+	 * style for teh html label tag
40
+	 *
41
+	 * @var string
42
+	 */
43
+	protected $_html_label_style;
44
+
45
+	/**
46
+	 * text to be placed in the html label
47
+	 *
48
+	 * @var string
49
+	 */
50
+	protected $_html_label_text;
51
+
52
+	/**
53
+	 * the full html label. If used, all other html_label_* properties are invalid
54
+	 *
55
+	 * @var string
56
+	 */
57
+	protected $_html_label;
58
+
59
+	/**
60
+	 * HTML to use for help text (normally placed below form input), in a span which normally
61
+	 * has a class of 'description'
62
+	 *
63
+	 * @var string
64
+	 */
65
+	protected $_html_help_text;
66
+
67
+	/**
68
+	 * CSS classes for displaying the help span
69
+	 *
70
+	 * @var string
71
+	 */
72
+	protected $_html_help_class = 'description';
73
+
74
+	/**
75
+	 * CSS to put in the style attribute on the help span
76
+	 *
77
+	 * @var string
78
+	 */
79
+	protected $_html_help_style;
80
+
81
+	/**
82
+	 * Stores whether or not this input's response is required.
83
+	 * Because certain styling elements may also want to know that this
84
+	 * input is required etc.
85
+	 *
86
+	 * @var boolean
87
+	 */
88
+	protected $_required;
89
+
90
+	/**
91
+	 * css class added to required inputs
92
+	 *
93
+	 * @var string
94
+	 */
95
+	protected $_required_css_class = 'ee-required';
96
+
97
+	/**
98
+	 * css styles applied to button type inputs
99
+	 *
100
+	 * @var string
101
+	 */
102
+	protected $_button_css_attributes;
103
+
104
+	/**
105
+	 * The raw post data submitted for this
106
+	 * Generally unsafe for usage in client code
107
+	 *
108
+	 * @var mixed string or array
109
+	 */
110
+	protected $_raw_value;
111
+
112
+	/**
113
+	 * Value normalized according to the input's normalization strategy.
114
+	 * The normalization strategy dictates whether this is a string, int, float,
115
+	 * boolean, or array of any of those.
116
+	 *
117
+	 * @var mixed
118
+	 */
119
+	protected $_normalized_value;
120
+
121
+
122
+	/**
123
+	 * Normalized default value either initially set on the input, or provided by calling
124
+	 * set_default().
125
+	 * @var mixed
126
+	 */
127
+	protected $_default;
128
+
129
+	/**
130
+	 * Strategy used for displaying this field.
131
+	 * Child classes must use _get_display_strategy to access it.
132
+	 *
133
+	 * @var EE_Display_Strategy_Base
134
+	 */
135
+	private $_display_strategy;
136
+
137
+	/**
138
+	 * Gets all the validation strategies used on this field
139
+	 *
140
+	 * @var EE_Validation_Strategy_Base[]
141
+	 */
142
+	private $_validation_strategies = array();
143
+
144
+	/**
145
+	 * The normalization strategy for this field
146
+	 *
147
+	 * @var EE_Normalization_Strategy_Base
148
+	 */
149
+	private $_normalization_strategy;
150
+
151
+	/**
152
+	 * Strategy for removing sensitive data after we're done with the form input
153
+	 *
154
+	 * @var EE_Sensitive_Data_Removal_Base
155
+	 */
156
+	protected $_sensitive_data_removal_strategy;
157
+
158
+	/**
159
+	 * Whether this input has been disabled or not.
160
+	 * If it's disabled while rendering, an extra hidden input is added that indicates it has been knowingly disabled.
161
+	 * (Client-side code that wants to dynamically disable it must also add this hidden input).
162
+	 * When the form is submitted, if the input is disabled in the PHP form section, then input is ignored.
163
+	 * If the input is missing from the request data but the hidden input indicating the input is disabled, then the input is again ignored.
164
+	 *
165
+	 * @var boolean
166
+	 */
167
+	protected $disabled = false;
168
+
169
+
170
+
171
+	/**
172
+	 * @param array                         $input_args       {
173
+	 * @type string                         $html_name        the html name for the input
174
+	 * @type string                         $html_label_id    the id attribute to give to the html label tag
175
+	 * @type string                         $html_label_class the class attribute to give to the html label tag
176
+	 * @type string                         $html_label_style the style attribute to give ot teh label tag
177
+	 * @type string                         $html_label_text  the text to put in the label tag
178
+	 * @type string                         $html_label       the full html label. If used,
179
+	 *                                                        all other html_label_* args are invalid
180
+	 * @type string                         $html_help_text   text to put in help element
181
+	 * @type string                         $html_help_style  style attribute to give to teh help element
182
+	 * @type string                         $html_help_class  class attribute to give to the help element
183
+	 * @type string                         $default          default value NORMALIZED (eg, if providing the default
184
+	 *       for a Yes_No_Input, you should provide TRUE or FALSE, not '1' or '0')
185
+	 * @type EE_Display_Strategy_Base       $display          strategy
186
+	 * @type EE_Normalization_Strategy_Base $normalization_strategy
187
+	 * @type EE_Validation_Strategy_Base[]  $validation_strategies
188
+	 * @type boolean                        $ignore_input special argument which can be used to avoid adding any validation strategies,
189
+	 *                                                    and sets the normalization strategy to the Null normalization. This is good
190
+	 *                                                    when you want the input to be totally ignored server-side (like when using
191
+	 *                                                    React.js form inputs)
192
+	 *                                                        }
193
+	 */
194
+	public function __construct($input_args = array())
195
+	{
196
+		$input_args = (array) apply_filters('FHEE__EE_Form_Input_Base___construct__input_args', $input_args, $this);
197
+		// the following properties must be cast as arrays
198
+		if (isset($input_args['validation_strategies'])) {
199
+			foreach ((array) $input_args['validation_strategies'] as $validation_strategy) {
200
+				if ($validation_strategy instanceof EE_Validation_Strategy_Base && empty($input_args['ignore_input'])) {
201
+					$this->_validation_strategies[ get_class($validation_strategy) ] = $validation_strategy;
202
+				}
203
+			}
204
+			unset($input_args['validation_strategies']);
205
+		}
206
+		if (isset($input_args['ignore_input'])) {
207
+			$this->_validation_strategies = array();
208
+		}
209
+		// loop thru incoming options
210
+		foreach ($input_args as $key => $value) {
211
+			// add underscore to $key to match property names
212
+			$_key = '_' . $key;
213
+			if (property_exists($this, $_key)) {
214
+				$this->{$_key} = $value;
215
+			}
216
+		}
217
+		// ensure that "required" is set correctly
218
+		$this->set_required(
219
+			$this->_required,
220
+			isset($input_args['required_validation_error_message'])
221
+			? $input_args['required_validation_error_message']
222
+			: null
223
+		);
224
+		// $this->_html_name_specified = isset( $input_args['html_name'] ) ? TRUE : FALSE;
225
+		$this->_display_strategy->_construct_finalize($this);
226
+		foreach ($this->_validation_strategies as $validation_strategy) {
227
+			$validation_strategy->_construct_finalize($this);
228
+		}
229
+		if (isset($input_args['ignore_input'])) {
230
+			$this->_normalization_strategy = new EE_Null_Normalization();
231
+		}
232
+		if (! $this->_normalization_strategy) {
233
+				$this->_normalization_strategy = new EE_Text_Normalization();
234
+		}
235
+		$this->_normalization_strategy->_construct_finalize($this);
236
+		// at least we can use the normalization strategy to populate the default
237
+		if (isset($input_args['default'])) {
238
+			$this->set_default($input_args['default']);
239
+			unset($input_args['default']);
240
+		}
241
+		if (! $this->_sensitive_data_removal_strategy) {
242
+			$this->_sensitive_data_removal_strategy = new EE_No_Sensitive_Data_Removal();
243
+		}
244
+		$this->_sensitive_data_removal_strategy->_construct_finalize($this);
245
+		parent::__construct($input_args);
246
+	}
247
+
248
+
249
+
250
+	/**
251
+	 * Sets the html_name to its default value, if none was specified in teh constructor.
252
+	 * Calculation involves using the name and the parent's html_name
253
+	 *
254
+	 * @throws EE_Error
255
+	 */
256
+	protected function _set_default_html_name_if_empty()
257
+	{
258
+		if (! $this->_html_name) {
259
+			$this->_html_name = $this->name();
260
+			if ($this->_parent_section && $this->_parent_section instanceof EE_Form_Section_Proper) {
261
+				$this->_html_name = $this->_parent_section->html_name_prefix() . "[{$this->name()}]";
262
+			}
263
+		}
264
+	}
265
+
266
+
267
+
268
+	/**
269
+	 * @param $parent_form_section
270
+	 * @param $name
271
+	 * @throws EE_Error
272
+	 */
273
+	public function _construct_finalize($parent_form_section, $name)
274
+	{
275
+		parent::_construct_finalize($parent_form_section, $name);
276
+		if ($this->_html_label === null && $this->_html_label_text === null) {
277
+			$this->_html_label_text = ucwords(str_replace("_", " ", $name));
278
+		}
279
+		do_action('AHEE__EE_Form_Input_Base___construct_finalize__end', $this, $parent_form_section, $name);
280
+	}
281
+
282
+
283
+
284
+	/**
285
+	 * Returns the strategy for displaying this form input. If none is set, throws an exception.
286
+	 *
287
+	 * @return EE_Display_Strategy_Base
288
+	 * @throws EE_Error
289
+	 */
290
+	protected function _get_display_strategy()
291
+	{
292
+		$this->ensure_construct_finalized_called();
293
+		if (! $this->_display_strategy || ! $this->_display_strategy instanceof EE_Display_Strategy_Base) {
294
+			throw new EE_Error(
295
+				sprintf(
296
+					esc_html__(
297
+						"Cannot get display strategy for form input with name %s and id %s, because it has not been set in the constructor",
298
+						"event_espresso"
299
+					),
300
+					$this->html_name(),
301
+					$this->html_id()
302
+				)
303
+			);
304
+		} else {
305
+			return $this->_display_strategy;
306
+		}
307
+	}
308
+
309
+
310
+
311
+	/**
312
+	 * Sets the display strategy.
313
+	 *
314
+	 * @param EE_Display_Strategy_Base $strategy
315
+	 */
316
+	protected function _set_display_strategy(EE_Display_Strategy_Base $strategy)
317
+	{
318
+		$this->_display_strategy = $strategy;
319
+	}
320
+
321
+
322
+
323
+	/**
324
+	 * Sets the sanitization strategy
325
+	 *
326
+	 * @param EE_Normalization_Strategy_Base $strategy
327
+	 */
328
+	protected function _set_normalization_strategy(EE_Normalization_Strategy_Base $strategy)
329
+	{
330
+		$this->_normalization_strategy = $strategy;
331
+	}
332
+
333
+
334
+
335
+	/**
336
+	 * Gets sensitive_data_removal_strategy
337
+	 *
338
+	 * @return EE_Sensitive_Data_Removal_Base
339
+	 */
340
+	public function get_sensitive_data_removal_strategy()
341
+	{
342
+		return $this->_sensitive_data_removal_strategy;
343
+	}
344
+
345
+
346
+
347
+	/**
348
+	 * Sets sensitive_data_removal_strategy
349
+	 *
350
+	 * @param EE_Sensitive_Data_Removal_Base $sensitive_data_removal_strategy
351
+	 * @return void
352
+	 */
353
+	public function set_sensitive_data_removal_strategy($sensitive_data_removal_strategy)
354
+	{
355
+		$this->_sensitive_data_removal_strategy = $sensitive_data_removal_strategy;
356
+	}
357
+
358
+
359
+
360
+	/**
361
+	 * Gets the display strategy for this input
362
+	 *
363
+	 * @return EE_Display_Strategy_Base
364
+	 */
365
+	public function get_display_strategy()
366
+	{
367
+		return $this->_display_strategy;
368
+	}
369
+
370
+
371
+
372
+	/**
373
+	 * Overwrites the display strategy
374
+	 *
375
+	 * @param EE_Display_Strategy_Base $display_strategy
376
+	 */
377
+	public function set_display_strategy($display_strategy)
378
+	{
379
+		$this->_display_strategy = $display_strategy;
380
+		$this->_display_strategy->_construct_finalize($this);
381
+	}
382
+
383
+
384
+
385
+	/**
386
+	 * Gets the normalization strategy set on this input
387
+	 *
388
+	 * @return EE_Normalization_Strategy_Base
389
+	 */
390
+	public function get_normalization_strategy()
391
+	{
392
+		return $this->_normalization_strategy;
393
+	}
394
+
395
+
396
+
397
+	/**
398
+	 * Overwrites the normalization strategy
399
+	 *
400
+	 * @param EE_Normalization_Strategy_Base $normalization_strategy
401
+	 */
402
+	public function set_normalization_strategy($normalization_strategy)
403
+	{
404
+		$this->_normalization_strategy = $normalization_strategy;
405
+		$this->_normalization_strategy->_construct_finalize($this);
406
+	}
407
+
408
+
409
+
410
+	/**
411
+	 * Returns all teh validation strategies which apply to this field, numerically indexed
412
+	 *
413
+	 * @return EE_Validation_Strategy_Base[]
414
+	 */
415
+	public function get_validation_strategies()
416
+	{
417
+		return $this->_validation_strategies;
418
+	}
419
+
420
+
421
+
422
+	/**
423
+	 * Adds this strategy to the field so it will be used in both JS validation and server-side validation
424
+	 *
425
+	 * @param EE_Validation_Strategy_Base $validation_strategy
426
+	 * @return void
427
+	 */
428
+	protected function _add_validation_strategy(EE_Validation_Strategy_Base $validation_strategy)
429
+	{
430
+		$validation_strategy->_construct_finalize($this);
431
+		$this->_validation_strategies[] = $validation_strategy;
432
+	}
433
+
434
+
435
+
436
+	/**
437
+	 * Adds a new validation strategy onto the form input
438
+	 *
439
+	 * @param EE_Validation_Strategy_Base $validation_strategy
440
+	 * @return void
441
+	 */
442
+	public function add_validation_strategy(EE_Validation_Strategy_Base $validation_strategy)
443
+	{
444
+		$this->_add_validation_strategy($validation_strategy);
445
+	}
446
+
447
+
448
+
449
+	/**
450
+	 * The classname of the validation strategy to remove
451
+	 *
452
+	 * @param string $validation_strategy_classname
453
+	 */
454
+	public function remove_validation_strategy($validation_strategy_classname)
455
+	{
456
+		foreach ($this->_validation_strategies as $key => $validation_strategy) {
457
+			if (
458
+				$validation_strategy instanceof $validation_strategy_classname
459
+				|| is_subclass_of($validation_strategy, $validation_strategy_classname)
460
+			) {
461
+				unset($this->_validation_strategies[ $key ]);
462
+			}
463
+		}
464
+	}
465
+
466
+
467
+
468
+	/**
469
+	 * returns true if input employs any of the validation strategy defined by the supplied array of classnames
470
+	 *
471
+	 * @param array $validation_strategy_classnames
472
+	 * @return bool
473
+	 */
474
+	public function has_validation_strategy($validation_strategy_classnames)
475
+	{
476
+		$validation_strategy_classnames = is_array($validation_strategy_classnames)
477
+			? $validation_strategy_classnames
478
+			: array($validation_strategy_classnames);
479
+		foreach ($this->_validation_strategies as $key => $validation_strategy) {
480
+			if (in_array($key, $validation_strategy_classnames)) {
481
+				return true;
482
+			}
483
+		}
484
+		return false;
485
+	}
486
+
487
+
488
+
489
+	/**
490
+	 * Gets the HTML
491
+	 *
492
+	 * @return string
493
+	 */
494
+	public function get_html()
495
+	{
496
+		return $this->_parent_section->get_html_for_input($this);
497
+	}
498
+
499
+
500
+
501
+	/**
502
+	 * Gets the HTML for the input itself (no label or errors) according to the
503
+	 * input's display strategy
504
+	 * Makes sure the JS and CSS are enqueued for it
505
+	 *
506
+	 * @return string
507
+	 * @throws EE_Error
508
+	 */
509
+	public function get_html_for_input()
510
+	{
511
+		return $this->_form_html_filter
512
+			? $this->_form_html_filter->filterHtml(
513
+				$this->_get_display_strategy()->display(),
514
+				$this
515
+			)
516
+			: $this->_get_display_strategy()->display();
517
+	}
518
+
519
+
520
+
521
+	/**
522
+	 * @return string
523
+	 */
524
+	public function html_other_attributes()
525
+	{
526
+		EE_Error::doing_it_wrong(
527
+			__METHOD__,
528
+			sprintf(
529
+				esc_html__(
530
+					'This method is no longer in use. You should replace it by %s',
531
+					'event_espresso'
532
+				),
533
+				'EE_Form_Section_Base::other_html_attributes()'
534
+			),
535
+			'4.10.2.p'
536
+		);
537
+
538
+		return $this->other_html_attributes();
539
+	}
540
+
541
+
542
+
543
+	/**
544
+	 * @param string $html_other_attributes
545
+	 */
546
+	public function set_html_other_attributes($html_other_attributes)
547
+	{
548
+		EE_Error::doing_it_wrong(
549
+			__METHOD__,
550
+			sprintf(
551
+				esc_html__(
552
+					'This method is no longer in use. You should replace it by %s',
553
+					'event_espresso'
554
+				),
555
+				'EE_Form_Section_Base::set_other_html_attributes()'
556
+			),
557
+			'4.10.2.p'
558
+		);
559
+
560
+		$this->set_other_html_attributes($html_other_attributes);
561
+	}
562
+
563
+
564
+
565
+	/**
566
+	 * Gets the HTML for displaying the label for this form input
567
+	 * according to the form section's layout strategy
568
+	 *
569
+	 * @return string
570
+	 */
571
+	public function get_html_for_label()
572
+	{
573
+		return $this->_parent_section->get_layout_strategy()->display_label($this);
574
+	}
575
+
576
+
577
+
578
+	/**
579
+	 * Gets the HTML for displaying the errors section for this form input
580
+	 * according to the form section's layout strategy
581
+	 *
582
+	 * @return string
583
+	 */
584
+	public function get_html_for_errors()
585
+	{
586
+		return $this->_parent_section->get_layout_strategy()->display_errors($this);
587
+	}
588
+
589
+
590
+
591
+	/**
592
+	 * Gets the HTML for displaying the help text for this form input
593
+	 * according to the form section's layout strategy
594
+	 *
595
+	 * @return string
596
+	 */
597
+	public function get_html_for_help()
598
+	{
599
+		return $this->_parent_section->get_layout_strategy()->display_help_text($this);
600
+	}
601
+
602
+
603
+
604
+	/**
605
+	 * Validates the input's sanitized value (assumes _sanitize() has already been called)
606
+	 * and returns whether or not the form input's submitted value is value
607
+	 *
608
+	 * @return boolean
609
+	 */
610
+	protected function _validate()
611
+	{
612
+		if ($this->isDisabled()) {
613
+			return true;
614
+		}
615
+		foreach ($this->_validation_strategies as $validation_strategy) {
616
+			if ($validation_strategy instanceof EE_Validation_Strategy_Base) {
617
+				try {
618
+					$validation_strategy->validate($this->normalized_value());
619
+				} catch (EE_Validation_Error $e) {
620
+					$this->add_validation_error($e);
621
+				}
622
+			}
623
+		}
624
+		if ($this->get_validation_errors()) {
625
+			return false;
626
+		} else {
627
+			return true;
628
+		}
629
+	}
630
+
631
+
632
+
633
+	/**
634
+	 * Performs basic sanitization on this value. But what sanitization can be performed anyways?
635
+	 * This value MIGHT be allowed to have tags, so we can't really remove them.
636
+	 *
637
+	 * @param string $value
638
+	 * @return null|string
639
+	 */
640
+	protected function _sanitize($value)
641
+	{
642
+		return $value !== null ? stripslashes(html_entity_decode(trim($value))) : null;
643
+	}
644
+
645
+
646
+
647
+	/**
648
+	 * Picks out the form value that relates to this form input,
649
+	 * and stores it as the sanitized value on the form input, and sets the normalized value.
650
+	 * Returns whether or not any validation errors occurred
651
+	 *
652
+	 * @param array $req_data
653
+	 * @return boolean whether or not there was an error
654
+	 * @throws EE_Error
655
+	 */
656
+	protected function _normalize($req_data)
657
+	{
658
+		// any existing validation errors don't apply so clear them
659
+		$this->_validation_errors = array();
660
+		// if the input is disabled, ignore whatever input was sent in
661
+		if ($this->isDisabled()) {
662
+			$this->_set_raw_value(null);
663
+			$this->_set_normalized_value($this->get_default());
664
+			return false;
665
+		}
666
+		try {
667
+			$raw_input = $this->find_form_data_for_this_section($req_data);
668
+			// super simple sanitization for now
669
+			if (is_array($raw_input)) {
670
+				$raw_value = array();
671
+				foreach ($raw_input as $key => $value) {
672
+					$raw_value[ $key ] = $this->_sanitize($value);
673
+				}
674
+				$this->_set_raw_value($raw_value);
675
+			} else {
676
+				$this->_set_raw_value($this->_sanitize($raw_input));
677
+			}
678
+			// we want to mostly leave the input alone in case we need to re-display it to the user
679
+			$this->_set_normalized_value($this->_normalization_strategy->normalize($this->raw_value()));
680
+			return false;
681
+		} catch (EE_Validation_Error $e) {
682
+			$this->add_validation_error($e);
683
+			return true;
684
+		}
685
+	}
686
+
687
+
688
+	/**
689
+	 * @return string
690
+	 * @throws EE_Error
691
+	 */
692
+	public function html_name()
693
+	{
694
+		$this->_set_default_html_name_if_empty();
695
+		return $this->_html_name;
696
+	}
697
+
698
+
699
+	/**
700
+	 * @return string
701
+	 * @throws EE_Error
702
+	 */
703
+	public function html_label_id()
704
+	{
705
+		return ! empty($this->_html_label_id) ? $this->_html_label_id : $this->html_id() . '-lbl';
706
+	}
707
+
708
+
709
+
710
+	/**
711
+	 * @return string
712
+	 */
713
+	public function html_label_class()
714
+	{
715
+		return $this->_html_label_class;
716
+	}
717
+
718
+
719
+
720
+	/**
721
+	 * @return string
722
+	 */
723
+	public function html_label_style()
724
+	{
725
+		return $this->_html_label_style;
726
+	}
727
+
728
+
729
+
730
+	/**
731
+	 * @return string
732
+	 */
733
+	public function html_label_text()
734
+	{
735
+		return $this->_html_label_text;
736
+	}
737
+
738
+
739
+
740
+	/**
741
+	 * @return string
742
+	 */
743
+	public function html_help_text()
744
+	{
745
+		return $this->_html_help_text;
746
+	}
747
+
748
+
749
+
750
+	/**
751
+	 * @return string
752
+	 */
753
+	public function html_help_class()
754
+	{
755
+		return $this->_html_help_class;
756
+	}
757
+
758
+
759
+
760
+	/**
761
+	 * @return string
762
+	 */
763
+	public function html_help_style()
764
+	{
765
+		return $this->_html_style;
766
+	}
767
+
768
+
769
+
770
+	/**
771
+	 * returns the raw, UNSAFE, input, almost exactly as the user submitted it.
772
+	 * Please note that almost all client code should instead use the normalized_value;
773
+	 * or possibly raw_value_in_form (which prepares the string for displaying in an HTML attribute on a tag,
774
+	 * mostly by escaping quotes)
775
+	 * Note, we do not store the exact original value sent in the user's request because
776
+	 * it may have malicious content, and we MIGHT want to store the form input in a transient or something...
777
+	 * in which case, we would have stored the malicious content to our database.
778
+	 *
779
+	 * @return string
780
+	 */
781
+	public function raw_value()
782
+	{
783
+		return $this->_raw_value;
784
+	}
785
+
786
+
787
+
788
+	/**
789
+	 * Returns a string safe to usage in form inputs when displaying, because
790
+	 * it escapes all html entities
791
+	 *
792
+	 * @return string
793
+	 */
794
+	public function raw_value_in_form()
795
+	{
796
+		return htmlentities($this->raw_value(), ENT_QUOTES, 'UTF-8');
797
+	}
798
+
799
+
800
+
801
+	/**
802
+	 * returns the value after it's been sanitized, and then converted into it's proper type
803
+	 * in PHP. Eg, a string, an int, an array,
804
+	 *
805
+	 * @return mixed
806
+	 */
807
+	public function normalized_value()
808
+	{
809
+		return $this->_normalized_value;
810
+	}
811
+
812
+
813
+
814
+	/**
815
+	 * Returns the normalized value is a presentable way. By default this is just
816
+	 * the normalized value by itself, but it can be overridden for when that's not
817
+	 * the best thing to display
818
+	 *
819
+	 * @return string
820
+	 */
821
+	public function pretty_value()
822
+	{
823
+		return $this->_normalized_value;
824
+	}
825
+
826
+
827
+
828
+	/**
829
+	 * When generating the JS for the jquery validation rules like<br>
830
+	 * <code>$( "#myform" ).validate({
831
+	 * rules: {
832
+	 * password: "required",
833
+	 * password_again: {
834
+	 * equalTo: "#password"
835
+	 * }
836
+	 * }
837
+	 * });</code>
838
+	 * if this field had the name 'password_again', it should return
839
+	 * <br><code>password_again: {
840
+	 * equalTo: "#password"
841
+	 * }</code>
842
+	 *
843
+	 * @return array
844
+	 */
845
+	public function get_jquery_validation_rules()
846
+	{
847
+		$jquery_validation_js = array();
848
+		$jquery_validation_rules = array();
849
+		foreach ($this->get_validation_strategies() as $validation_strategy) {
850
+			$jquery_validation_rules = array_replace_recursive(
851
+				$jquery_validation_rules,
852
+				$validation_strategy->get_jquery_validation_rule_array()
853
+			);
854
+		}
855
+		if (! empty($jquery_validation_rules)) {
856
+			foreach ($this->get_display_strategy()->get_html_input_ids(true) as $html_id_with_pound_sign) {
857
+				$jquery_validation_js[ $html_id_with_pound_sign ] = $jquery_validation_rules;
858
+			}
859
+		}
860
+		return $jquery_validation_js;
861
+	}
862
+
863
+
864
+
865
+	/**
866
+	 * Sets the input's default value for use in displaying in the form. Note: value should be
867
+	 * normalized (Eg, if providing a default of ra Yes_NO_Input you would provide TRUE or FALSE, not '1' or '0')
868
+	 *
869
+	 * @param mixed $value
870
+	 * @return void
871
+	 */
872
+	public function set_default($value)
873
+	{
874
+		$this->_default = $value;
875
+		$this->_set_normalized_value($value);
876
+		$this->_set_raw_value($value);
877
+	}
878
+
879
+
880
+
881
+	/**
882
+	 * Sets the normalized value on this input
883
+	 *
884
+	 * @param mixed $value
885
+	 */
886
+	protected function _set_normalized_value($value)
887
+	{
888
+		$this->_normalized_value = $value;
889
+	}
890
+
891
+
892
+
893
+	/**
894
+	 * Sets the raw value on this input (ie, exactly as the user submitted it)
895
+	 *
896
+	 * @param mixed $value
897
+	 */
898
+	protected function _set_raw_value($value)
899
+	{
900
+		$this->_raw_value = $this->_normalization_strategy->unnormalize($value);
901
+	}
902
+
903
+
904
+
905
+	/**
906
+	 * Sets the HTML label text after it has already been defined
907
+	 *
908
+	 * @param string $label
909
+	 * @return void
910
+	 */
911
+	public function set_html_label_text($label)
912
+	{
913
+		$this->_html_label_text = $label;
914
+	}
915
+
916
+
917
+
918
+	/**
919
+	 * Sets whether or not this field is required, and adjusts the validation strategy.
920
+	 * If you want to use the EE_Conditionally_Required_Validation_Strategy,
921
+	 * please add it as a validation strategy using add_validation_strategy as normal
922
+	 *
923
+	 * @param boolean $required boolean
924
+	 * @param null    $required_text
925
+	 */
926
+	public function set_required($required = true, $required_text = null)
927
+	{
928
+		$required = filter_var($required, FILTER_VALIDATE_BOOLEAN);
929
+		// whether $required is a string or a boolean, we want to add a required validation strategy
930
+		if ($required) {
931
+			$this->_add_validation_strategy(new EE_Required_Validation_Strategy($required_text));
932
+		} else {
933
+			$this->remove_validation_strategy('EE_Required_Validation_Strategy');
934
+		}
935
+		$this->_required = $required;
936
+	}
937
+
938
+
939
+
940
+	/**
941
+	 * Returns whether or not this field is required
942
+	 *
943
+	 * @return boolean
944
+	 */
945
+	public function required()
946
+	{
947
+		return $this->_required;
948
+	}
949
+
950
+
951
+
952
+	/**
953
+	 * @param string $required_css_class
954
+	 */
955
+	public function set_required_css_class($required_css_class)
956
+	{
957
+		$this->_required_css_class = $required_css_class;
958
+	}
959
+
960
+
961
+
962
+	/**
963
+	 * @return string
964
+	 */
965
+	public function required_css_class()
966
+	{
967
+		return $this->_required_css_class;
968
+	}
969
+
970
+
971
+
972
+	/**
973
+	 * @param bool $add_required
974
+	 * @return string
975
+	 */
976
+	public function html_class($add_required = false)
977
+	{
978
+		return $add_required && $this->required()
979
+			? $this->required_css_class() . ' ' . $this->_html_class
980
+			: $this->_html_class;
981
+	}
982
+
983
+
984
+	/**
985
+	 * Sets the help text, in case
986
+	 *
987
+	 * @param string $text
988
+	 */
989
+	public function set_html_help_text($text)
990
+	{
991
+		$this->_html_help_text = $text;
992
+	}
993
+
994
+
995
+
996
+	/**
997
+	 * Uses the sensitive data removal strategy to remove the sensitive data from this
998
+	 * input. If there is any kind of sensitive data removal on this input, we clear
999
+	 * out the raw value completely
1000
+	 *
1001
+	 * @return void
1002
+	 */
1003
+	public function clean_sensitive_data()
1004
+	{
1005
+		// if we do ANY kind of sensitive data removal on this, then just clear out the raw value
1006
+		// if we need more logic than this we'll make a strategy for it
1007
+		if (
1008
+			$this->_sensitive_data_removal_strategy
1009
+			&& ! $this->_sensitive_data_removal_strategy instanceof EE_No_Sensitive_Data_Removal
1010
+		) {
1011
+			$this->_set_raw_value(null);
1012
+		}
1013
+		// and clean the normalized value according to the appropriate strategy
1014
+		$this->_set_normalized_value(
1015
+			$this->get_sensitive_data_removal_strategy()->remove_sensitive_data(
1016
+				$this->_normalized_value
1017
+			)
1018
+		);
1019
+	}
1020
+
1021
+
1022
+
1023
+	/**
1024
+	 * @param bool   $primary
1025
+	 * @param string $button_size
1026
+	 * @param string $other_attributes
1027
+	 */
1028
+	public function set_button_css_attributes($primary = true, $button_size = '', $other_attributes = '')
1029
+	{
1030
+		$button_css_attributes = 'button';
1031
+		$button_css_attributes .= $primary === true ? ' button-primary' : ' button-secondary';
1032
+		switch ($button_size) {
1033
+			case 'xs':
1034
+			case 'extra-small':
1035
+				$button_css_attributes .= ' button-xs';
1036
+				break;
1037
+			case 'sm':
1038
+			case 'small':
1039
+				$button_css_attributes .= ' button-sm';
1040
+				break;
1041
+			case 'lg':
1042
+			case 'large':
1043
+				$button_css_attributes .= ' button-lg';
1044
+				break;
1045
+			case 'block':
1046
+				$button_css_attributes .= ' button-block';
1047
+				break;
1048
+			case 'md':
1049
+			case 'medium':
1050
+			default:
1051
+				$button_css_attributes .= '';
1052
+		}
1053
+		$this->_button_css_attributes .= ! empty($other_attributes)
1054
+			? $button_css_attributes . ' ' . $other_attributes
1055
+			: $button_css_attributes;
1056
+	}
1057
+
1058
+
1059
+
1060
+	/**
1061
+	 * @return string
1062
+	 */
1063
+	public function button_css_attributes()
1064
+	{
1065
+		if (empty($this->_button_css_attributes)) {
1066
+			$this->set_button_css_attributes();
1067
+		}
1068
+		return $this->_button_css_attributes;
1069
+	}
1070
+
1071
+
1072
+
1073
+	/**
1074
+	 * find_form_data_for_this_section
1075
+	 * using this section's name and its parents, finds the value of the form data that corresponds to it.
1076
+	 * For example, if this form section's HTML name is my_form[subform][form_input_1],
1077
+	 * then it's value should be in request at request['my_form']['subform']['form_input_1'].
1078
+	 * (If that doesn't exist, we also check for this subsection's name
1079
+	 * at the TOP LEVEL of the request data. Eg request['form_input_1'].)
1080
+	 * This function finds its value in the form.
1081
+	 *
1082
+	 * @param array $req_data
1083
+	 * @return mixed whatever the raw value of this form section is in the request data
1084
+	 * @throws EE_Error
1085
+	 */
1086
+	public function find_form_data_for_this_section($req_data)
1087
+	{
1088
+		$name_parts = $this->getInputNameParts();
1089
+		// now get the value for the input
1090
+		$value = $this->findRequestForSectionUsingNameParts($name_parts, $req_data);
1091
+		// check if this thing's name is at the TOP level of the request data
1092
+		if ($value === null && isset($req_data[ $this->name() ])) {
1093
+			$value = $req_data[ $this->name() ];
1094
+		}
1095
+		return $value;
1096
+	}
1097
+
1098
+
1099
+	/**
1100
+	 * If this input's name is something like "foo[bar][baz]"
1101
+	 * returns an array like `array('foo','bar',baz')`
1102
+	 *
1103
+	 * @return array
1104
+	 * @throws EE_Error
1105
+	 */
1106
+	protected function getInputNameParts()
1107
+	{
1108
+		// break up the html name by "[]"
1109
+		if (strpos($this->html_name(), '[') !== false) {
1110
+			$before_any_brackets = substr($this->html_name(), 0, strpos($this->html_name(), '['));
1111
+		} else {
1112
+			$before_any_brackets = $this->html_name();
1113
+		}
1114
+		// grab all of the segments
1115
+		preg_match_all('~\[([^]]*)\]~', $this->html_name(), $matches);
1116
+		if (isset($matches[1]) && is_array($matches[1])) {
1117
+			$name_parts = $matches[1];
1118
+			array_unshift($name_parts, $before_any_brackets);
1119
+		} else {
1120
+			$name_parts = array($before_any_brackets);
1121
+		}
1122
+		return $name_parts;
1123
+	}
1124
+
1125
+
1126
+
1127
+	/**
1128
+	 * @param array $html_name_parts
1129
+	 * @param array $req_data
1130
+	 * @return array | NULL
1131
+	 */
1132
+	public function findRequestForSectionUsingNameParts($html_name_parts, $req_data)
1133
+	{
1134
+		$first_part_to_consider = array_shift($html_name_parts);
1135
+		if (isset($req_data[ $first_part_to_consider ])) {
1136
+			if (empty($html_name_parts)) {
1137
+				return $req_data[ $first_part_to_consider ];
1138
+			} else {
1139
+				return $this->findRequestForSectionUsingNameParts(
1140
+					$html_name_parts,
1141
+					$req_data[ $first_part_to_consider ]
1142
+				);
1143
+			}
1144
+		} else {
1145
+			return null;
1146
+		}
1147
+	}
1148
+
1149
+
1150
+
1151
+	/**
1152
+	 * Checks if this form input's data is in the request data
1153
+	 *
1154
+	 * @param array $req_data
1155
+	 * @return boolean
1156
+	 * @throws EE_Error
1157
+	 */
1158
+	public function form_data_present_in($req_data = null)
1159
+	{
1160
+		if ($req_data === null) {
1161
+			/** @var RequestInterface $request */
1162
+			$request = LoaderFactory::getLoader()->getShared(RequestInterface::class);
1163
+			$req_data = $request->postParams();
1164
+		}
1165
+		$checked_value = $this->find_form_data_for_this_section($req_data);
1166
+		if ($checked_value !== null) {
1167
+			return true;
1168
+		} else {
1169
+			return false;
1170
+		}
1171
+	}
1172
+
1173
+
1174
+
1175
+	/**
1176
+	 * Overrides parent to add js data from validation and display strategies
1177
+	 *
1178
+	 * @param array $form_other_js_data
1179
+	 * @return array
1180
+	 */
1181
+	public function get_other_js_data($form_other_js_data = array())
1182
+	{
1183
+		return $this->get_other_js_data_from_strategies($form_other_js_data);
1184
+	}
1185
+
1186
+
1187
+
1188
+	/**
1189
+	 * Gets other JS data for localization from this input's strategies, like
1190
+	 * the validation strategies and the display strategy
1191
+	 *
1192
+	 * @param array $form_other_js_data
1193
+	 * @return array
1194
+	 */
1195
+	public function get_other_js_data_from_strategies($form_other_js_data = array())
1196
+	{
1197
+		$form_other_js_data = $this->get_display_strategy()->get_other_js_data($form_other_js_data);
1198
+		foreach ($this->get_validation_strategies() as $validation_strategy) {
1199
+			$form_other_js_data = $validation_strategy->get_other_js_data($form_other_js_data);
1200
+		}
1201
+		return $form_other_js_data;
1202
+	}
1203
+
1204
+
1205
+
1206
+	/**
1207
+	 * Override parent because we want to give our strategies an opportunity to enqueue some js and css
1208
+	 *
1209
+	 * @return void
1210
+	 */
1211
+	public function enqueue_js()
1212
+	{
1213
+		// ask our display strategy and validation strategies if they have js to enqueue
1214
+		$this->enqueue_js_from_strategies();
1215
+	}
1216
+
1217
+
1218
+
1219
+	/**
1220
+	 * Tells strategies when its ok to enqueue their js and css
1221
+	 *
1222
+	 * @return void
1223
+	 */
1224
+	public function enqueue_js_from_strategies()
1225
+	{
1226
+		$this->get_display_strategy()->enqueue_js();
1227
+		foreach ($this->get_validation_strategies() as $validation_strategy) {
1228
+			$validation_strategy->enqueue_js();
1229
+		}
1230
+	}
1231
+
1232
+
1233
+
1234
+	/**
1235
+	 * Gets the default value set on the input (not the current value, which may have been
1236
+	 * changed because of a form submission). If no default was set, this us null.
1237
+	 * @return mixed
1238
+	 */
1239
+	public function get_default()
1240
+	{
1241
+		return $this->_default;
1242
+	}
1243
+
1244
+
1245
+
1246
+	/**
1247
+	 * Makes this input disabled. That means it will have the HTML attribute 'disabled="disabled"',
1248
+	 * and server-side if any input was received it will be ignored
1249
+	 */
1250
+	public function disable($disable = true)
1251
+	{
1252
+		$disabled_attribute = ' disabled="disabled"';
1253
+		$this->disabled = filter_var($disable, FILTER_VALIDATE_BOOLEAN);
1254
+		if ($this->disabled) {
1255
+			if (strpos($this->_other_html_attributes, $disabled_attribute) === false) {
1256
+				$this->_other_html_attributes .= $disabled_attribute;
1257
+			}
1258
+			$this->_set_normalized_value($this->get_default());
1259
+		} else {
1260
+			$this->_other_html_attributes = str_replace($disabled_attribute, '', $this->_other_html_attributes);
1261
+		}
1262
+	}
1263
+
1264
+
1265
+
1266
+	/**
1267
+	 * Returns whether or not this input is currently disabled.
1268
+	 * @return bool
1269
+	 */
1270
+	public function isDisabled()
1271
+	{
1272
+		return $this->disabled;
1273
+	}
1274 1274
 }
Please login to merge, or discard this patch.
core/libraries/form_sections/inputs/EE_Yes_No_Input.input.php 2 patches
Spacing   +1 added lines, -1 removed lines patch added patch discarded remove patch
@@ -15,7 +15,7 @@
 block discarded – undo
15 15
      */
16 16
     public function __construct($options = array())
17 17
     {
18
-        $select_options = array(true =>  esc_html__("Yes", "event_espresso"),false =>  esc_html__("No", "event_espresso"));
18
+        $select_options = array(true =>  esc_html__("Yes", "event_espresso"), false =>  esc_html__("No", "event_espresso"));
19 19
 
20 20
         parent::__construct($select_options, $options);
21 21
     }
Please login to merge, or discard this patch.
Indentation   +8 added lines, -8 removed lines patch added patch discarded remove patch
@@ -9,13 +9,13 @@
 block discarded – undo
9 9
  */
10 10
 class EE_Yes_No_Input extends EE_Select_Input
11 11
 {
12
-    /**
13
-     * @param array $options
14
-     */
15
-    public function __construct($options = array())
16
-    {
17
-        $select_options = array(true =>  esc_html__("Yes", "event_espresso"),false =>  esc_html__("No", "event_espresso"));
12
+	/**
13
+	 * @param array $options
14
+	 */
15
+	public function __construct($options = array())
16
+	{
17
+		$select_options = array(true =>  esc_html__("Yes", "event_espresso"),false =>  esc_html__("No", "event_espresso"));
18 18
 
19
-        parent::__construct($select_options, $options);
20
-    }
19
+		parent::__construct($select_options, $options);
20
+	}
21 21
 }
Please login to merge, or discard this patch.
core/libraries/form_sections/inputs/EE_Phone_Input.input.php 1 patch
Indentation   +13 added lines, -13 removed lines patch added patch discarded remove patch
@@ -14,17 +14,17 @@
 block discarded – undo
14 14
  */
15 15
 class EE_Phone_Input extends EE_Text_Input
16 16
 {
17
-    /**
18
-     * @param array $options
19
-     */
20
-    public function __construct($options = array())
21
-    {
22
-        $this->_add_validation_strategy(
23
-            new EE_Text_Validation_Strategy(
24
-                esc_html__('Please enter a valid phone number. Eg 123-456-7890 or 1234567890', 'event_espresso'),
25
-                '~^(([\d]{10})|(^[\d]{3}-[\d]{3}-[\d]{4}))$~'
26
-            )
27
-        );
28
-        parent::__construct($options);
29
-    }
17
+	/**
18
+	 * @param array $options
19
+	 */
20
+	public function __construct($options = array())
21
+	{
22
+		$this->_add_validation_strategy(
23
+			new EE_Text_Validation_Strategy(
24
+				esc_html__('Please enter a valid phone number. Eg 123-456-7890 or 1234567890', 'event_espresso'),
25
+				'~^(([\d]{10})|(^[\d]{3}-[\d]{3}-[\d]{4}))$~'
26
+			)
27
+		);
28
+		parent::__construct($options);
29
+	}
30 30
 }
Please login to merge, or discard this patch.
libraries/form_sections/inputs/EE_Select_Ajax_Model_Rest_Input.input.php 2 patches
Spacing   +7 added lines, -7 removed lines patch added patch discarded remove patch
@@ -74,7 +74,7 @@  discard block
 block discarded – undo
74 74
         );
75 75
         // make sure limit and caps are always set
76 76
         $query_params = array_merge(
77
-            array( 'limit' => 10, 'caps' => EEM_Base::caps_read_admin ),
77
+            array('limit' => 10, 'caps' => EEM_Base::caps_read_admin),
78 78
             $query_params
79 79
         );
80 80
         $this->_value_field_name = EEH_Array::is_set(
@@ -155,12 +155,12 @@  discard block
 block discarded – undo
155 155
         $values_for_options = (array) $value;
156 156
         $value_field = $this->_get_model()->field_settings_for($this->_value_field_name);
157 157
         $display_field = $this->_get_model()->field_settings_for($this->_display_field_name);
158
-        $this->_extra_select_columns[] = $value_field->get_qualified_column() . ' AS ' . $this->_value_field_name;
159
-        $this->_extra_select_columns[] = $display_field->get_qualified_column() . ' AS ' . $this->_display_field_name;
158
+        $this->_extra_select_columns[] = $value_field->get_qualified_column().' AS '.$this->_value_field_name;
159
+        $this->_extra_select_columns[] = $display_field->get_qualified_column().' AS '.$this->_display_field_name;
160 160
         $display_values = $this->_get_model()->get_all_wpdb_results(
161 161
             array(
162 162
                 array(
163
-                    $this->_value_field_name => array( 'IN', $values_for_options )
163
+                    $this->_value_field_name => array('IN', $values_for_options)
164 164
                 )
165 165
             ),
166 166
             ARRAY_A,
@@ -170,9 +170,9 @@  discard block
 block discarded – undo
170 170
         if (is_array($select_options)) {
171 171
             foreach ($display_values as $db_rows) {
172 172
                 $db_rows = (array) $db_rows;
173
-                $select_options[ $db_rows[ $this->_value_field_name ] ] = apply_filters(
173
+                $select_options[$db_rows[$this->_value_field_name]] = apply_filters(
174 174
                     'FHEE__EE_Select_Ajax_Model_Rest_Input___set_raw_value__select_option_value',
175
-                    $db_rows[ $this->_display_field_name ],
175
+                    $db_rows[$this->_display_field_name],
176 176
                     $db_rows
177 177
                 );
178 178
             }
@@ -188,7 +188,7 @@  discard block
 block discarded – undo
188 188
      */
189 189
     protected function _get_model()
190 190
     {
191
-        if (! EE_Registry::instance()->is_model_name($this->_model_name)) {
191
+        if ( ! EE_Registry::instance()->is_model_name($this->_model_name)) {
192 192
             throw new EE_Error(
193 193
                 sprintf(
194 194
                     esc_html__(
Please login to merge, or discard this patch.
Indentation   +176 added lines, -176 removed lines patch added patch discarded remove patch
@@ -16,189 +16,189 @@
 block discarded – undo
16 16
  */
17 17
 class EE_Select_Ajax_Model_Rest_Input extends EE_Form_Input_With_Options_Base
18 18
 {
19
-    /**
20
-     * @var string $_model_name
21
-     */
22
-    protected $_model_name;
19
+	/**
20
+	 * @var string $_model_name
21
+	 */
22
+	protected $_model_name;
23 23
 
24
-    /**
25
-     * @var string $_display_field_name
26
-     */
27
-    protected $_display_field_name;
24
+	/**
25
+	 * @var string $_display_field_name
26
+	 */
27
+	protected $_display_field_name;
28 28
 
29
-    /**
30
-     * @var string $_value_field_name
31
-     */
32
-    protected $_value_field_name;
29
+	/**
30
+	 * @var string $_value_field_name
31
+	 */
32
+	protected $_value_field_name;
33 33
 
34
-    /**
35
-     * @var array $_extra_select_columns
36
-     */
37
-    protected $_extra_select_columns = array();
34
+	/**
35
+	 * @var array $_extra_select_columns
36
+	 */
37
+	protected $_extra_select_columns = array();
38 38
 
39 39
 
40
-    /**
41
-     * @param array $input_settings     {
42
-     * @type string $model_name         the name of model to be used for searching, both via the REST API and server-side model queries
43
-     * @type array  $query_params       default query parameters which will apply to both REST API queries and server-side queries. This should be
44
-     *                                  in the exact format that will be used for server-side model usage (eg use index 0 for where conditions, not
45
-     *                                  the string "where")
46
-     * @type string $value_field_name   the name of the model field on this model to
47
-     *                                  be used for the HTML select's option's values
48
-     * @type string $display_field_name the name of the model field on this model
49
-     *                                  to be used for the HTML select's option's display text
50
-     * @type array  $select2_args       arguments to be passed directly into the select2's JS constructor
51
-     *                                  }
52
-     *                                  And the arguments accepted by EE_Form_Input_With_Options_Base
53
-     * }
54
-     * @throws EE_Error
55
-     * @throws InvalidArgumentException
56
-     * @throws InvalidDataTypeException
57
-     * @throws InvalidInterfaceException
58
-     */
59
-    public function __construct($input_settings = array())
60
-    {
61
-        // needed input settings:
62
-        // select2_args
63
-        $this->_model_name = EEH_Array::is_set(
64
-            $input_settings,
65
-            'model_name',
66
-            null
67
-        );
68
-        $model = $this->_get_model();
69
-        $query_params = EEH_Array::is_set(
70
-            $input_settings,
71
-            'query_params',
72
-            array()
73
-        );
74
-        // make sure limit and caps are always set
75
-        $query_params = array_merge(
76
-            array( 'limit' => 10, 'caps' => EEM_Base::caps_read_admin ),
77
-            $query_params
78
-        );
79
-        $this->_value_field_name = EEH_Array::is_set(
80
-            $input_settings,
81
-            'value_field_name',
82
-            $model->primary_key_name()
83
-        );
84
-        $this->_display_field_name = EEH_Array::is_set(
85
-            $input_settings,
86
-            'display_field_name',
87
-            $model->get_a_field_of_type('EE_Text_Field_Base')->get_name()
88
-        );
89
-        $this->_extra_select_columns = EEH_Array::is_set(
90
-            $input_settings,
91
-            'extra_select_columns',
92
-            array()
93
-        );
94
-        $this->_add_validation_strategy(
95
-            new EE_Model_Matching_Query_Validation_Strategy(
96
-                '',
97
-                $this->_model_name,
98
-                $query_params,
99
-                $this->_value_field_name
100
-            )
101
-        );
102
-        // get resource endpoint
103
-        $rest_controller = LoaderFactory::getLoader()->getNew(
104
-            'EventEspresso\core\libraries\rest_api\controllers\model\Read'
105
-        );
106
-        $rest_controller->setRequestedVersion(EED_Core_Rest_Api::latest_rest_api_version());
107
-        $default_select2_args = array(
108
-            'ajax' => array(
109
-                'url' => $rest_controller->getVersionedLinkTo(
110
-                    EEH_Inflector::pluralize_and_lower($this->_model_name)
111
-                ),
112
-                'dataType' => 'json',
113
-                'delay' => '250',
114
-                'data_interface' => 'EE_Select2_REST_API_Interface',
115
-                'data_interface_args' => array(
116
-                    'default_query_params' => (object) ModelDataTranslator::prepareQueryParamsForRestApi(
117
-                        $query_params,
118
-                        $model
119
-                    ),
120
-                    'display_field' => $this->_display_field_name,
121
-                    'value_field' => $this->_value_field_name,
122
-                    'nonce' => wp_create_nonce('wp_rest'),
123
-                    'locale' => str_replace('_', '-', strtolower(get_locale()))
124
-                ),
125
-            ),
126
-            'cache' => true,
127
-            'width' => 'resolve'
128
-        );
129
-        $select2_args = array_replace_recursive(
130
-            $default_select2_args,
131
-            (array) EEH_Array::is_set($input_settings, 'select2_args', array())
132
-        );
133
-        $this->set_display_strategy(new EE_Select2_Display_Strategy($select2_args));
134
-        parent::__construct(array(), $input_settings);
135
-    }
40
+	/**
41
+	 * @param array $input_settings     {
42
+	 * @type string $model_name         the name of model to be used for searching, both via the REST API and server-side model queries
43
+	 * @type array  $query_params       default query parameters which will apply to both REST API queries and server-side queries. This should be
44
+	 *                                  in the exact format that will be used for server-side model usage (eg use index 0 for where conditions, not
45
+	 *                                  the string "where")
46
+	 * @type string $value_field_name   the name of the model field on this model to
47
+	 *                                  be used for the HTML select's option's values
48
+	 * @type string $display_field_name the name of the model field on this model
49
+	 *                                  to be used for the HTML select's option's display text
50
+	 * @type array  $select2_args       arguments to be passed directly into the select2's JS constructor
51
+	 *                                  }
52
+	 *                                  And the arguments accepted by EE_Form_Input_With_Options_Base
53
+	 * }
54
+	 * @throws EE_Error
55
+	 * @throws InvalidArgumentException
56
+	 * @throws InvalidDataTypeException
57
+	 * @throws InvalidInterfaceException
58
+	 */
59
+	public function __construct($input_settings = array())
60
+	{
61
+		// needed input settings:
62
+		// select2_args
63
+		$this->_model_name = EEH_Array::is_set(
64
+			$input_settings,
65
+			'model_name',
66
+			null
67
+		);
68
+		$model = $this->_get_model();
69
+		$query_params = EEH_Array::is_set(
70
+			$input_settings,
71
+			'query_params',
72
+			array()
73
+		);
74
+		// make sure limit and caps are always set
75
+		$query_params = array_merge(
76
+			array( 'limit' => 10, 'caps' => EEM_Base::caps_read_admin ),
77
+			$query_params
78
+		);
79
+		$this->_value_field_name = EEH_Array::is_set(
80
+			$input_settings,
81
+			'value_field_name',
82
+			$model->primary_key_name()
83
+		);
84
+		$this->_display_field_name = EEH_Array::is_set(
85
+			$input_settings,
86
+			'display_field_name',
87
+			$model->get_a_field_of_type('EE_Text_Field_Base')->get_name()
88
+		);
89
+		$this->_extra_select_columns = EEH_Array::is_set(
90
+			$input_settings,
91
+			'extra_select_columns',
92
+			array()
93
+		);
94
+		$this->_add_validation_strategy(
95
+			new EE_Model_Matching_Query_Validation_Strategy(
96
+				'',
97
+				$this->_model_name,
98
+				$query_params,
99
+				$this->_value_field_name
100
+			)
101
+		);
102
+		// get resource endpoint
103
+		$rest_controller = LoaderFactory::getLoader()->getNew(
104
+			'EventEspresso\core\libraries\rest_api\controllers\model\Read'
105
+		);
106
+		$rest_controller->setRequestedVersion(EED_Core_Rest_Api::latest_rest_api_version());
107
+		$default_select2_args = array(
108
+			'ajax' => array(
109
+				'url' => $rest_controller->getVersionedLinkTo(
110
+					EEH_Inflector::pluralize_and_lower($this->_model_name)
111
+				),
112
+				'dataType' => 'json',
113
+				'delay' => '250',
114
+				'data_interface' => 'EE_Select2_REST_API_Interface',
115
+				'data_interface_args' => array(
116
+					'default_query_params' => (object) ModelDataTranslator::prepareQueryParamsForRestApi(
117
+						$query_params,
118
+						$model
119
+					),
120
+					'display_field' => $this->_display_field_name,
121
+					'value_field' => $this->_value_field_name,
122
+					'nonce' => wp_create_nonce('wp_rest'),
123
+					'locale' => str_replace('_', '-', strtolower(get_locale()))
124
+				),
125
+			),
126
+			'cache' => true,
127
+			'width' => 'resolve'
128
+		);
129
+		$select2_args = array_replace_recursive(
130
+			$default_select2_args,
131
+			(array) EEH_Array::is_set($input_settings, 'select2_args', array())
132
+		);
133
+		$this->set_display_strategy(new EE_Select2_Display_Strategy($select2_args));
134
+		parent::__construct(array(), $input_settings);
135
+	}
136 136
 
137 137
 
138 138
 
139
-    /**
140
-     * Before setting the raw value (usually because we're setting the default,
141
-     * or we've received a form submission and this might be re-displayed to the user),
142
-     * sets the options so that the current selections appear on initial display.
143
-     *
144
-     * Note: because this input uses EE_Model_Matching_Query_Validation_Strategy
145
-     * for validation, this input's options only affect DISPLAY and NOT validation,
146
-     * which is why its ok to just assume the provided $value to be in the list of acceptable values
147
-     *
148
-     * @param mixed $value
149
-     * @return void
150
-     * @throws \EE_Error
151
-     */
152
-    public function _set_raw_value($value)
153
-    {
154
-        $values_for_options = (array) $value;
155
-        $value_field = $this->_get_model()->field_settings_for($this->_value_field_name);
156
-        $display_field = $this->_get_model()->field_settings_for($this->_display_field_name);
157
-        $this->_extra_select_columns[] = $value_field->get_qualified_column() . ' AS ' . $this->_value_field_name;
158
-        $this->_extra_select_columns[] = $display_field->get_qualified_column() . ' AS ' . $this->_display_field_name;
159
-        $display_values = $this->_get_model()->get_all_wpdb_results(
160
-            array(
161
-                array(
162
-                    $this->_value_field_name => array( 'IN', $values_for_options )
163
-                )
164
-            ),
165
-            ARRAY_A,
166
-            implode(',', $this->_extra_select_columns)
167
-        );
168
-        $select_options = array();
169
-        if (is_array($select_options)) {
170
-            foreach ($display_values as $db_rows) {
171
-                $db_rows = (array) $db_rows;
172
-                $select_options[ $db_rows[ $this->_value_field_name ] ] = apply_filters(
173
-                    'FHEE__EE_Select_Ajax_Model_Rest_Input___set_raw_value__select_option_value',
174
-                    $db_rows[ $this->_display_field_name ],
175
-                    $db_rows
176
-                );
177
-            }
178
-        }
179
-        $this->set_select_options($select_options);
180
-        parent::_set_raw_value($value);
181
-    }
139
+	/**
140
+	 * Before setting the raw value (usually because we're setting the default,
141
+	 * or we've received a form submission and this might be re-displayed to the user),
142
+	 * sets the options so that the current selections appear on initial display.
143
+	 *
144
+	 * Note: because this input uses EE_Model_Matching_Query_Validation_Strategy
145
+	 * for validation, this input's options only affect DISPLAY and NOT validation,
146
+	 * which is why its ok to just assume the provided $value to be in the list of acceptable values
147
+	 *
148
+	 * @param mixed $value
149
+	 * @return void
150
+	 * @throws \EE_Error
151
+	 */
152
+	public function _set_raw_value($value)
153
+	{
154
+		$values_for_options = (array) $value;
155
+		$value_field = $this->_get_model()->field_settings_for($this->_value_field_name);
156
+		$display_field = $this->_get_model()->field_settings_for($this->_display_field_name);
157
+		$this->_extra_select_columns[] = $value_field->get_qualified_column() . ' AS ' . $this->_value_field_name;
158
+		$this->_extra_select_columns[] = $display_field->get_qualified_column() . ' AS ' . $this->_display_field_name;
159
+		$display_values = $this->_get_model()->get_all_wpdb_results(
160
+			array(
161
+				array(
162
+					$this->_value_field_name => array( 'IN', $values_for_options )
163
+				)
164
+			),
165
+			ARRAY_A,
166
+			implode(',', $this->_extra_select_columns)
167
+		);
168
+		$select_options = array();
169
+		if (is_array($select_options)) {
170
+			foreach ($display_values as $db_rows) {
171
+				$db_rows = (array) $db_rows;
172
+				$select_options[ $db_rows[ $this->_value_field_name ] ] = apply_filters(
173
+					'FHEE__EE_Select_Ajax_Model_Rest_Input___set_raw_value__select_option_value',
174
+					$db_rows[ $this->_display_field_name ],
175
+					$db_rows
176
+				);
177
+			}
178
+		}
179
+		$this->set_select_options($select_options);
180
+		parent::_set_raw_value($value);
181
+	}
182 182
 
183
-    /**
184
-     * Returns the model, or throws an exception if the model name provided in constructor doesn't exist
185
-     * @return EEM_Base
186
-     * @throws EE_Error
187
-     */
188
-    protected function _get_model()
189
-    {
190
-        if (! EE_Registry::instance()->is_model_name($this->_model_name)) {
191
-            throw new EE_Error(
192
-                sprintf(
193
-                    esc_html__(
194
-                        '%1$s is not a proper model name. Please provide a model name in the "model_name" form input argument',
195
-                        'event_espresso'
196
-                    ),
197
-                    $this->_model_name
198
-                )
199
-            );
200
-        } else {
201
-            return EE_Registry::instance()->load_model($this->_model_name);
202
-        }
203
-    }
183
+	/**
184
+	 * Returns the model, or throws an exception if the model name provided in constructor doesn't exist
185
+	 * @return EEM_Base
186
+	 * @throws EE_Error
187
+	 */
188
+	protected function _get_model()
189
+	{
190
+		if (! EE_Registry::instance()->is_model_name($this->_model_name)) {
191
+			throw new EE_Error(
192
+				sprintf(
193
+					esc_html__(
194
+						'%1$s is not a proper model name. Please provide a model name in the "model_name" form input argument',
195
+						'event_espresso'
196
+					),
197
+					$this->_model_name
198
+				)
199
+			);
200
+		} else {
201
+			return EE_Registry::instance()->load_model($this->_model_name);
202
+		}
203
+	}
204 204
 }
Please login to merge, or discard this patch.
core/EE_Configurable.core.php 2 patches
Spacing   +1 added lines, -1 removed lines patch added patch discarded remove patch
@@ -120,7 +120,7 @@
 block discarded – undo
120 120
     public function _update_config(EE_Config_Base $config_obj = null)
121 121
     {
122 122
         $config_class = $this->config_class();
123
-        if (! $config_obj instanceof $config_class) {
123
+        if ( ! $config_obj instanceof $config_class) {
124 124
             throw new EE_Error(
125 125
                 sprintf(
126 126
                     esc_html__('The "%1$s" class is not an instance of %2$s.', 'event_espresso'),
Please login to merge, or discard this patch.
Indentation   +139 added lines, -139 removed lines patch added patch discarded remove patch
@@ -9,143 +9,143 @@
 block discarded – undo
9 9
  */
10 10
 abstract class EE_Configurable extends EE_Base
11 11
 {
12
-    /**
13
-     * @var $_config
14
-     * @type EE_Config_Base
15
-     */
16
-    protected $_config;
17
-
18
-    /**
19
-     * @var $_config_section
20
-     * @type string
21
-     */
22
-    protected $_config_section = '';
23
-
24
-    /**
25
-     * @var $_config_class
26
-     * @type string
27
-     */
28
-    protected $_config_class = '';
29
-
30
-    /**
31
-     * @var $_config_name
32
-     * @type string
33
-     */
34
-    protected $_config_name = '';
35
-
36
-
37
-    /**
38
-     * @param string $config_section
39
-     */
40
-    public function set_config_section($config_section = '')
41
-    {
42
-        $this->_config_section = ! empty($config_section) ? $config_section : 'modules';
43
-    }
44
-
45
-
46
-    /**
47
-     * @return mixed
48
-     */
49
-    public function config_section()
50
-    {
51
-        return $this->_config_section;
52
-    }
53
-
54
-
55
-    /**
56
-     * @param string $config_class
57
-     */
58
-    public function set_config_class($config_class = '')
59
-    {
60
-        $this->_config_class = $config_class;
61
-    }
62
-
63
-
64
-    /**
65
-     * @return mixed
66
-     */
67
-    public function config_class()
68
-    {
69
-        return $this->_config_class;
70
-    }
71
-
72
-
73
-    /**
74
-     * @param mixed $config_name
75
-     */
76
-    public function set_config_name($config_name)
77
-    {
78
-        $this->_config_name = ! empty($config_name) ? $config_name : get_called_class();
79
-    }
80
-
81
-
82
-    /**
83
-     * @return mixed
84
-     */
85
-    public function config_name()
86
-    {
87
-        return $this->_config_name;
88
-    }
89
-
90
-
91
-    /**
92
-     *    set_config
93
-     *    this method integrates directly with EE_Config to set up the config object for this class
94
-     *
95
-     * @access    protected
96
-     * @param    EE_Config_Base $config_obj
97
-     * @return    mixed    EE_Config_Base | NULL
98
-     */
99
-    protected function _set_config(EE_Config_Base $config_obj = null)
100
-    {
101
-        return EE_Config::instance()->set_config(
102
-            $this->config_section(),
103
-            $this->config_name(),
104
-            $this->config_class(),
105
-            $config_obj
106
-        );
107
-    }
108
-
109
-
110
-    /**
111
-     *    _update_config
112
-     *    this method integrates directly with EE_Config to update an existing config object for this class
113
-     *
114
-     * @access    protected
115
-     * @param    EE_Config_Base $config_obj
116
-     * @throws \EE_Error
117
-     * @return    mixed    EE_Config_Base | NULL
118
-     */
119
-    public function _update_config(EE_Config_Base $config_obj = null)
120
-    {
121
-        $config_class = $this->config_class();
122
-        if (! $config_obj instanceof $config_class) {
123
-            throw new EE_Error(
124
-                sprintf(
125
-                    esc_html__('The "%1$s" class is not an instance of %2$s.', 'event_espresso'),
126
-                    print_r($config_obj, true),
127
-                    $config_class
128
-                )
129
-            );
130
-        }
131
-        return EE_Config::instance()->update_config($this->config_section(), $this->config_name(), $config_obj);
132
-    }
133
-
134
-
135
-    /**
136
-     * gets the class's config object
137
-     *
138
-     * @return EE_Config_Base
139
-     */
140
-    public function config()
141
-    {
142
-        if (empty($this->_config)) {
143
-            $this->_config = EE_Config::instance()->get_config(
144
-                $this->config_section(),
145
-                $this->config_name(),
146
-                $this->config_class()
147
-            );
148
-        }
149
-        return $this->_config;
150
-    }
12
+	/**
13
+	 * @var $_config
14
+	 * @type EE_Config_Base
15
+	 */
16
+	protected $_config;
17
+
18
+	/**
19
+	 * @var $_config_section
20
+	 * @type string
21
+	 */
22
+	protected $_config_section = '';
23
+
24
+	/**
25
+	 * @var $_config_class
26
+	 * @type string
27
+	 */
28
+	protected $_config_class = '';
29
+
30
+	/**
31
+	 * @var $_config_name
32
+	 * @type string
33
+	 */
34
+	protected $_config_name = '';
35
+
36
+
37
+	/**
38
+	 * @param string $config_section
39
+	 */
40
+	public function set_config_section($config_section = '')
41
+	{
42
+		$this->_config_section = ! empty($config_section) ? $config_section : 'modules';
43
+	}
44
+
45
+
46
+	/**
47
+	 * @return mixed
48
+	 */
49
+	public function config_section()
50
+	{
51
+		return $this->_config_section;
52
+	}
53
+
54
+
55
+	/**
56
+	 * @param string $config_class
57
+	 */
58
+	public function set_config_class($config_class = '')
59
+	{
60
+		$this->_config_class = $config_class;
61
+	}
62
+
63
+
64
+	/**
65
+	 * @return mixed
66
+	 */
67
+	public function config_class()
68
+	{
69
+		return $this->_config_class;
70
+	}
71
+
72
+
73
+	/**
74
+	 * @param mixed $config_name
75
+	 */
76
+	public function set_config_name($config_name)
77
+	{
78
+		$this->_config_name = ! empty($config_name) ? $config_name : get_called_class();
79
+	}
80
+
81
+
82
+	/**
83
+	 * @return mixed
84
+	 */
85
+	public function config_name()
86
+	{
87
+		return $this->_config_name;
88
+	}
89
+
90
+
91
+	/**
92
+	 *    set_config
93
+	 *    this method integrates directly with EE_Config to set up the config object for this class
94
+	 *
95
+	 * @access    protected
96
+	 * @param    EE_Config_Base $config_obj
97
+	 * @return    mixed    EE_Config_Base | NULL
98
+	 */
99
+	protected function _set_config(EE_Config_Base $config_obj = null)
100
+	{
101
+		return EE_Config::instance()->set_config(
102
+			$this->config_section(),
103
+			$this->config_name(),
104
+			$this->config_class(),
105
+			$config_obj
106
+		);
107
+	}
108
+
109
+
110
+	/**
111
+	 *    _update_config
112
+	 *    this method integrates directly with EE_Config to update an existing config object for this class
113
+	 *
114
+	 * @access    protected
115
+	 * @param    EE_Config_Base $config_obj
116
+	 * @throws \EE_Error
117
+	 * @return    mixed    EE_Config_Base | NULL
118
+	 */
119
+	public function _update_config(EE_Config_Base $config_obj = null)
120
+	{
121
+		$config_class = $this->config_class();
122
+		if (! $config_obj instanceof $config_class) {
123
+			throw new EE_Error(
124
+				sprintf(
125
+					esc_html__('The "%1$s" class is not an instance of %2$s.', 'event_espresso'),
126
+					print_r($config_obj, true),
127
+					$config_class
128
+				)
129
+			);
130
+		}
131
+		return EE_Config::instance()->update_config($this->config_section(), $this->config_name(), $config_obj);
132
+	}
133
+
134
+
135
+	/**
136
+	 * gets the class's config object
137
+	 *
138
+	 * @return EE_Config_Base
139
+	 */
140
+	public function config()
141
+	{
142
+		if (empty($this->_config)) {
143
+			$this->_config = EE_Config::instance()->get_config(
144
+				$this->config_section(),
145
+				$this->config_name(),
146
+				$this->config_class()
147
+			);
148
+		}
149
+		return $this->_config;
150
+	}
151 151
 }
Please login to merge, or discard this patch.
core/db_models/EEM_Price.model.php 2 patches
Spacing   +13 added lines, -13 removed lines patch added patch discarded remove patch
@@ -24,7 +24,7 @@  discard block
 block discarded – undo
24 24
      */
25 25
     protected function __construct($timezone)
26 26
     {
27
-        require_once(EE_MODELS . 'EEM_Price_Type.model.php');
27
+        require_once(EE_MODELS.'EEM_Price_Type.model.php');
28 28
         $this->singular_item = esc_html__('Price', 'event_espresso');
29 29
         $this->plural_item = esc_html__('Prices', 'event_espresso');
30 30
 
@@ -52,11 +52,11 @@  discard block
 block discarded – undo
52 52
             'WP_User' => new EE_Belongs_To_Relation(),
53 53
         );
54 54
         // this model is generally available for reading
55
-        $this->_cap_restriction_generators[ EEM_Base::caps_read ] = new EE_Restriction_Generator_Default_Public('PRC_is_default', 'Ticket.Datetime.Event');
55
+        $this->_cap_restriction_generators[EEM_Base::caps_read] = new EE_Restriction_Generator_Default_Public('PRC_is_default', 'Ticket.Datetime.Event');
56 56
         // account for default tickets in the caps
57
-        $this->_cap_restriction_generators[ EEM_Base::caps_read_admin ] = new EE_Restriction_Generator_Default_Protected('PRC_is_default', 'Ticket.Datetime.Event');
58
-        $this->_cap_restriction_generators[ EEM_Base::caps_edit ] = new EE_Restriction_Generator_Default_Protected('PRC_is_default', 'Ticket.Datetime.Event');
59
-        $this->_cap_restriction_generators[ EEM_Base::caps_delete ] = new EE_Restriction_Generator_Default_Protected('PRC_is_default', 'Ticket.Datetime.Event');
57
+        $this->_cap_restriction_generators[EEM_Base::caps_read_admin] = new EE_Restriction_Generator_Default_Protected('PRC_is_default', 'Ticket.Datetime.Event');
58
+        $this->_cap_restriction_generators[EEM_Base::caps_edit] = new EE_Restriction_Generator_Default_Protected('PRC_is_default', 'Ticket.Datetime.Event');
59
+        $this->_cap_restriction_generators[EEM_Base::caps_delete] = new EE_Restriction_Generator_Default_Protected('PRC_is_default', 'Ticket.Datetime.Event');
60 60
         parent::__construct($timezone);
61 61
     }
62 62
 
@@ -103,7 +103,7 @@  discard block
 block discarded – undo
103 103
         return $this->get_all(array(
104 104
             array(
105 105
                 'EVT_ID' => $EVT_ID,
106
-                'Price_Type.PBT_ID' => array('!=',  EEM_Price_Type::base_type_tax)
106
+                'Price_Type.PBT_ID' => array('!=', EEM_Price_Type::base_type_tax)
107 107
             ),
108 108
             'order_by' => $this->_order_by_array_for_get_all_method()
109 109
         ));
@@ -121,7 +121,7 @@  discard block
 block discarded – undo
121 121
     public function get_all_default_prices($count = false)
122 122
     {
123 123
         $_where = array(
124
-            'Price_Type.PBT_ID' => array('!=',4),
124
+            'Price_Type.PBT_ID' => array('!=', 4),
125 125
             'PRC_deleted' => 0,
126 126
             'PRC_is_default' => 1
127 127
         );
@@ -153,12 +153,12 @@  discard block
 block discarded – undo
153 153
     {
154 154
         $taxes = array();
155 155
         $all_taxes = $this->get_all(array(
156
-            array( 'Price_Type.PBT_ID' =>  EEM_Price_Type::base_type_tax ),
157
-            'order_by' => array( 'Price_Type.PRT_order' => 'ASC', 'PRC_order' => 'ASC' )
156
+            array('Price_Type.PBT_ID' =>  EEM_Price_Type::base_type_tax),
157
+            'order_by' => array('Price_Type.PRT_order' => 'ASC', 'PRC_order' => 'ASC')
158 158
         ));
159 159
         foreach ($all_taxes as $tax) {
160 160
             if ($tax instanceof EE_Price) {
161
-                $taxes[ $tax->order() ][ $tax->ID() ] = $tax;
161
+                $taxes[$tax->order()][$tax->ID()] = $tax;
162 162
             }
163 163
         }
164 164
         return $taxes;
@@ -186,7 +186,7 @@  discard block
 block discarded – undo
186 186
             if ($default_prices) {
187 187
                 foreach ($default_prices as $price) {
188 188
                     if ($price instanceof EE_Price) {
189
-                        $array_of_price_objects[ $price->type() ][] = $price;
189
+                        $array_of_price_objects[$price->type()][] = $price;
190 190
                     }
191 191
                 }
192 192
                 return $array_of_price_objects;
@@ -203,10 +203,10 @@  discard block
 block discarded – undo
203 203
             ));
204 204
         }
205 205
 
206
-        if (!empty($ticket_prices)) {
206
+        if ( ! empty($ticket_prices)) {
207 207
             foreach ($ticket_prices as $price) {
208 208
                 if ($price instanceof EE_Price) {
209
-                    $array_of_price_objects[ $price->type() ][] = $price;
209
+                    $array_of_price_objects[$price->type()][] = $price;
210 210
                 }
211 211
             }
212 212
             return $array_of_price_objects;
Please login to merge, or discard this patch.
Indentation   +275 added lines, -275 removed lines patch added patch discarded remove patch
@@ -9,279 +9,279 @@
 block discarded – undo
9 9
  */
10 10
 class EEM_Price extends EEM_Soft_Delete_Base
11 11
 {
12
-    // private instance of the EEM_Price object
13
-    protected static $_instance = null;
14
-
15
-
16
-
17
-    /**
18
-     *      private constructor to prevent direct creation
19
-     *      @Constructor
20
-     *      @access protected
21
-     *      @param string $timezone string representing the timezone we want to set for returned Date Time Strings (and any incoming timezone data that gets saved).  Note this just sends the timezone info to the date time model field objects.  Default is NULL (and will be assumed using the set timezone in the 'timezone_string' wp option)
22
-     *      @return EEM_Price
23
-     */
24
-    protected function __construct($timezone)
25
-    {
26
-        require_once(EE_MODELS . 'EEM_Price_Type.model.php');
27
-        $this->singular_item = esc_html__('Price', 'event_espresso');
28
-        $this->plural_item = esc_html__('Prices', 'event_espresso');
29
-
30
-        $this->_tables = array(
31
-            'Price' => new EE_Primary_Table('esp_price', 'PRC_ID')
32
-        );
33
-        $this->_fields = array(
34
-            'Price' => array(
35
-                'PRC_ID' => new EE_Primary_Key_Int_Field('PRC_ID', 'Price ID'),
36
-                'PRT_ID' => new EE_Foreign_Key_Int_Field('PRT_ID', 'Price type Id', false, null, 'Price_Type'),
37
-                'PRC_amount' => new EE_Money_Field('PRC_amount', 'Price Amount', false, 0),
38
-                'PRC_name' => new EE_Plain_Text_Field('PRC_name', 'Name of Price', false, ''),
39
-                'PRC_desc' => new EE_Post_Content_Field('PRC_desc', 'Price Description', false, ''),
40
-                'PRC_is_default' => new EE_Boolean_Field('PRC_is_default', 'Flag indicating whether price is a default price', false, false),
41
-                'PRC_overrides' => new EE_Integer_Field('PRC_overrides', 'Price ID for a global Price that will be overridden by this Price  ( for replacing default prices )', true, 0),
42
-                'PRC_order' => new EE_Integer_Field('PRC_order', 'Order of Application of Price (lower numbers apply first?)', false, 1),
43
-                'PRC_deleted' => new EE_Trashed_Flag_Field('PRC_deleted', 'Flag Indicating if this has been deleted or not', false, false),
44
-                'PRC_parent' => new EE_Integer_Field('PRC_parent', esc_html__('Indicates what PRC_ID is the parent of this PRC_ID', 'event_espresso'), true, 0),
45
-                'PRC_wp_user' => new EE_WP_User_Field('PRC_wp_user', esc_html__('Price Creator ID', 'event_espresso'), false),
46
-            )
47
-        );
48
-        $this->_model_relations = array(
49
-            'Ticket' => new EE_HABTM_Relation('Ticket_Price'),
50
-            'Price_Type' => new EE_Belongs_To_Relation(),
51
-            'WP_User' => new EE_Belongs_To_Relation(),
52
-        );
53
-        // this model is generally available for reading
54
-        $this->_cap_restriction_generators[ EEM_Base::caps_read ] = new EE_Restriction_Generator_Default_Public('PRC_is_default', 'Ticket.Datetime.Event');
55
-        // account for default tickets in the caps
56
-        $this->_cap_restriction_generators[ EEM_Base::caps_read_admin ] = new EE_Restriction_Generator_Default_Protected('PRC_is_default', 'Ticket.Datetime.Event');
57
-        $this->_cap_restriction_generators[ EEM_Base::caps_edit ] = new EE_Restriction_Generator_Default_Protected('PRC_is_default', 'Ticket.Datetime.Event');
58
-        $this->_cap_restriction_generators[ EEM_Base::caps_delete ] = new EE_Restriction_Generator_Default_Protected('PRC_is_default', 'Ticket.Datetime.Event');
59
-        parent::__construct($timezone);
60
-    }
61
-
62
-
63
-
64
-    /**
65
-     *      instantiate a new price object with blank/empty properties
66
-     *
67
-     *      @access     public
68
-     *      @return     mixed       array on success, FALSE on fail
69
-     */
70
-    public function get_new_price()
71
-    {
72
-        return $this->create_default_object();
73
-    }
74
-
75
-
76
-
77
-
78
-
79
-    /**
80
-     *      retrieve  ALL prices from db
81
-     *
82
-     *      @access     public
83
-     *      @return     EE_PRice[]
84
-     */
85
-    public function get_all_prices()
86
-    {
87
-        // retrieve all prices
88
-        return $this->get_all(array('order_by' => array('PRC_amount' => 'ASC')));
89
-    }
90
-
91
-
92
-
93
-    /**
94
-     *        retrieve all active prices for a particular event
95
-     *
96
-     * @access        public
97
-     * @param int $EVT_ID
98
-     * @return array on success
99
-     */
100
-    public function get_all_event_prices($EVT_ID = 0)
101
-    {
102
-        return $this->get_all(array(
103
-            array(
104
-                'EVT_ID' => $EVT_ID,
105
-                'Price_Type.PBT_ID' => array('!=',  EEM_Price_Type::base_type_tax)
106
-            ),
107
-            'order_by' => $this->_order_by_array_for_get_all_method()
108
-        ));
109
-    }
110
-
111
-
112
-    /**
113
-     *      retrieve all active global prices (that are not taxes (PBT_ID=4)) for a particular event
114
-     *
115
-     *      @access     public
116
-     *      @param      boolean         $count  return count
117
-     *      @return         array           on success
118
-     *      @return         boolean     false on fail
119
-     */
120
-    public function get_all_default_prices($count = false)
121
-    {
122
-        $_where = array(
123
-            'Price_Type.PBT_ID' => array('!=',4),
124
-            'PRC_deleted' => 0,
125
-            'PRC_is_default' => 1
126
-        );
127
-        $_query_params = array(
128
-            $_where,
129
-            'order_by' => $this->_order_by_array_for_get_all_method()
130
-        );
131
-        return $count ? $this->count(array($_where)) : $this->get_all($_query_params);
132
-    }
133
-
134
-
135
-
136
-
137
-
138
-
139
-
140
-
141
-
142
-
143
-    /**
144
-     *      retrieve all prices that are taxes
145
-     *
146
-     *      @access     public
147
-     *      @return         array               on success
148
-     *      @return         array top-level keys are the price's order and their values are an array,
149
-     *                      next-level keys are the price's ID, and their values are EE_Price objects
150
-     */
151
-    public function get_all_prices_that_are_taxes()
152
-    {
153
-        $taxes = array();
154
-        $all_taxes = $this->get_all(array(
155
-            array( 'Price_Type.PBT_ID' =>  EEM_Price_Type::base_type_tax ),
156
-            'order_by' => array( 'Price_Type.PRT_order' => 'ASC', 'PRC_order' => 'ASC' )
157
-        ));
158
-        foreach ($all_taxes as $tax) {
159
-            if ($tax instanceof EE_Price) {
160
-                $taxes[ $tax->order() ][ $tax->ID() ] = $tax;
161
-            }
162
-        }
163
-        return $taxes;
164
-    }
165
-
166
-
167
-
168
-
169
-
170
-    /**
171
-     *      retrieve all prices for an ticket plus default global prices, but not taxes
172
-     *
173
-     *      @access     public
174
-     *      @param int $TKT_ID          the id of the event.  If not included then we assume that this is a new ticket.
175
-     *      @return         boolean         false on fail
176
-     */
177
-    public function get_all_ticket_prices_for_admin($TKT_ID = 0)
178
-    {
179
-        $array_of_price_objects = array();
180
-        if (empty($TKT_ID)) {
181
-            // if there is no tkt, get prices with no tkt ID, are global, are not a tax, and are active
182
-            // return that list
183
-            $default_prices = $this->get_all_default_prices();
184
-
185
-            if ($default_prices) {
186
-                foreach ($default_prices as $price) {
187
-                    if ($price instanceof EE_Price) {
188
-                        $array_of_price_objects[ $price->type() ][] = $price;
189
-                    }
190
-                }
191
-                return $array_of_price_objects;
192
-            } else {
193
-                return array();
194
-            }
195
-        } else {
196
-            $ticket_prices = $this->get_all(array(
197
-                array(
198
-                    'TKT_ID' => $TKT_ID,
199
-                    'PRC_deleted' => 0
200
-                    ),
201
-                'order_by' => array('PRC_order' => 'ASC')
202
-            ));
203
-        }
204
-
205
-        if (!empty($ticket_prices)) {
206
-            foreach ($ticket_prices as $price) {
207
-                if ($price instanceof EE_Price) {
208
-                    $array_of_price_objects[ $price->type() ][] = $price;
209
-                }
210
-            }
211
-            return $array_of_price_objects;
212
-        } else {
213
-            return false;
214
-        }
215
-    }
216
-
217
-
218
-
219
-    /**
220
-     *        _sort_event_prices_by_type
221
-     *
222
-     * @access public
223
-     * @param \EE_Price $price_a
224
-     * @param \EE_Price $price_b
225
-     * @return bool false on fail
226
-     */
227
-    public function _sort_event_prices_by_type(EE_Price $price_a, EE_Price $price_b)
228
-    {
229
-        if ($price_a->type_obj()->order() == $price_b->type_obj()->order()) {
230
-            return $this->_sort_event_prices_by_order($price_a, $price_b);
231
-        }
232
-        return $price_a->type_obj()->order() < $price_b->type_obj()->order() ? -1 : 1;
233
-    }
234
-
235
-
236
-
237
-    /**
238
-     *        _sort_event_prices_by_order
239
-     *
240
-     * @access public
241
-     * @param \EE_Price $price_a
242
-     * @param \EE_Price $price_b
243
-     * @return bool false on fail
244
-     */
245
-    public function _sort_event_prices_by_order(EE_Price $price_a, EE_Price $price_b)
246
-    {
247
-        if ($price_a->order() == $price_b->order()) {
248
-            return 0;
249
-        }
250
-        return $price_a->order() < $price_b->order() ? -1 : 1;
251
-    }
252
-
253
-
254
-
255
-    /**
256
-     *      get all prices of a specific type
257
-     *
258
-     *      @access     public
259
-     *      @param      int                 $type - PRT_ID
260
-     *      @return         boolean     false on fail
261
-     */
262
-    public function get_all_prices_that_are_type($type = 0)
263
-    {
264
-        return $this->get_all(array(
265
-            array(
266
-                'PRT_ID' => $type
267
-            ),
268
-            'order_by' => $this->_order_by_array_for_get_all_method()
269
-        ));
270
-    }
271
-
272
-
273
-
274
-    /**
275
-     * Returns an array of the normal 'order_by' query parameter provided to the get_all query.
276
-     * Of course you don't have to use it, but this is the order we usually want to sort prices by
277
-     * @return array which can be used like so: $this->get_all(array(array(...where stuff...),'order_by'=>$this->_order_by_array_for_get_all_method()));
278
-     */
279
-    public function _order_by_array_for_get_all_method()
280
-    {
281
-        return array(
282
-                'PRC_order' => 'ASC',
283
-                'Price_Type.PRT_order' => 'ASC',
284
-                'PRC_ID' => 'ASC'
285
-        );
286
-    }
12
+	// private instance of the EEM_Price object
13
+	protected static $_instance = null;
14
+
15
+
16
+
17
+	/**
18
+	 *      private constructor to prevent direct creation
19
+	 *      @Constructor
20
+	 *      @access protected
21
+	 *      @param string $timezone string representing the timezone we want to set for returned Date Time Strings (and any incoming timezone data that gets saved).  Note this just sends the timezone info to the date time model field objects.  Default is NULL (and will be assumed using the set timezone in the 'timezone_string' wp option)
22
+	 *      @return EEM_Price
23
+	 */
24
+	protected function __construct($timezone)
25
+	{
26
+		require_once(EE_MODELS . 'EEM_Price_Type.model.php');
27
+		$this->singular_item = esc_html__('Price', 'event_espresso');
28
+		$this->plural_item = esc_html__('Prices', 'event_espresso');
29
+
30
+		$this->_tables = array(
31
+			'Price' => new EE_Primary_Table('esp_price', 'PRC_ID')
32
+		);
33
+		$this->_fields = array(
34
+			'Price' => array(
35
+				'PRC_ID' => new EE_Primary_Key_Int_Field('PRC_ID', 'Price ID'),
36
+				'PRT_ID' => new EE_Foreign_Key_Int_Field('PRT_ID', 'Price type Id', false, null, 'Price_Type'),
37
+				'PRC_amount' => new EE_Money_Field('PRC_amount', 'Price Amount', false, 0),
38
+				'PRC_name' => new EE_Plain_Text_Field('PRC_name', 'Name of Price', false, ''),
39
+				'PRC_desc' => new EE_Post_Content_Field('PRC_desc', 'Price Description', false, ''),
40
+				'PRC_is_default' => new EE_Boolean_Field('PRC_is_default', 'Flag indicating whether price is a default price', false, false),
41
+				'PRC_overrides' => new EE_Integer_Field('PRC_overrides', 'Price ID for a global Price that will be overridden by this Price  ( for replacing default prices )', true, 0),
42
+				'PRC_order' => new EE_Integer_Field('PRC_order', 'Order of Application of Price (lower numbers apply first?)', false, 1),
43
+				'PRC_deleted' => new EE_Trashed_Flag_Field('PRC_deleted', 'Flag Indicating if this has been deleted or not', false, false),
44
+				'PRC_parent' => new EE_Integer_Field('PRC_parent', esc_html__('Indicates what PRC_ID is the parent of this PRC_ID', 'event_espresso'), true, 0),
45
+				'PRC_wp_user' => new EE_WP_User_Field('PRC_wp_user', esc_html__('Price Creator ID', 'event_espresso'), false),
46
+			)
47
+		);
48
+		$this->_model_relations = array(
49
+			'Ticket' => new EE_HABTM_Relation('Ticket_Price'),
50
+			'Price_Type' => new EE_Belongs_To_Relation(),
51
+			'WP_User' => new EE_Belongs_To_Relation(),
52
+		);
53
+		// this model is generally available for reading
54
+		$this->_cap_restriction_generators[ EEM_Base::caps_read ] = new EE_Restriction_Generator_Default_Public('PRC_is_default', 'Ticket.Datetime.Event');
55
+		// account for default tickets in the caps
56
+		$this->_cap_restriction_generators[ EEM_Base::caps_read_admin ] = new EE_Restriction_Generator_Default_Protected('PRC_is_default', 'Ticket.Datetime.Event');
57
+		$this->_cap_restriction_generators[ EEM_Base::caps_edit ] = new EE_Restriction_Generator_Default_Protected('PRC_is_default', 'Ticket.Datetime.Event');
58
+		$this->_cap_restriction_generators[ EEM_Base::caps_delete ] = new EE_Restriction_Generator_Default_Protected('PRC_is_default', 'Ticket.Datetime.Event');
59
+		parent::__construct($timezone);
60
+	}
61
+
62
+
63
+
64
+	/**
65
+	 *      instantiate a new price object with blank/empty properties
66
+	 *
67
+	 *      @access     public
68
+	 *      @return     mixed       array on success, FALSE on fail
69
+	 */
70
+	public function get_new_price()
71
+	{
72
+		return $this->create_default_object();
73
+	}
74
+
75
+
76
+
77
+
78
+
79
+	/**
80
+	 *      retrieve  ALL prices from db
81
+	 *
82
+	 *      @access     public
83
+	 *      @return     EE_PRice[]
84
+	 */
85
+	public function get_all_prices()
86
+	{
87
+		// retrieve all prices
88
+		return $this->get_all(array('order_by' => array('PRC_amount' => 'ASC')));
89
+	}
90
+
91
+
92
+
93
+	/**
94
+	 *        retrieve all active prices for a particular event
95
+	 *
96
+	 * @access        public
97
+	 * @param int $EVT_ID
98
+	 * @return array on success
99
+	 */
100
+	public function get_all_event_prices($EVT_ID = 0)
101
+	{
102
+		return $this->get_all(array(
103
+			array(
104
+				'EVT_ID' => $EVT_ID,
105
+				'Price_Type.PBT_ID' => array('!=',  EEM_Price_Type::base_type_tax)
106
+			),
107
+			'order_by' => $this->_order_by_array_for_get_all_method()
108
+		));
109
+	}
110
+
111
+
112
+	/**
113
+	 *      retrieve all active global prices (that are not taxes (PBT_ID=4)) for a particular event
114
+	 *
115
+	 *      @access     public
116
+	 *      @param      boolean         $count  return count
117
+	 *      @return         array           on success
118
+	 *      @return         boolean     false on fail
119
+	 */
120
+	public function get_all_default_prices($count = false)
121
+	{
122
+		$_where = array(
123
+			'Price_Type.PBT_ID' => array('!=',4),
124
+			'PRC_deleted' => 0,
125
+			'PRC_is_default' => 1
126
+		);
127
+		$_query_params = array(
128
+			$_where,
129
+			'order_by' => $this->_order_by_array_for_get_all_method()
130
+		);
131
+		return $count ? $this->count(array($_where)) : $this->get_all($_query_params);
132
+	}
133
+
134
+
135
+
136
+
137
+
138
+
139
+
140
+
141
+
142
+
143
+	/**
144
+	 *      retrieve all prices that are taxes
145
+	 *
146
+	 *      @access     public
147
+	 *      @return         array               on success
148
+	 *      @return         array top-level keys are the price's order and their values are an array,
149
+	 *                      next-level keys are the price's ID, and their values are EE_Price objects
150
+	 */
151
+	public function get_all_prices_that_are_taxes()
152
+	{
153
+		$taxes = array();
154
+		$all_taxes = $this->get_all(array(
155
+			array( 'Price_Type.PBT_ID' =>  EEM_Price_Type::base_type_tax ),
156
+			'order_by' => array( 'Price_Type.PRT_order' => 'ASC', 'PRC_order' => 'ASC' )
157
+		));
158
+		foreach ($all_taxes as $tax) {
159
+			if ($tax instanceof EE_Price) {
160
+				$taxes[ $tax->order() ][ $tax->ID() ] = $tax;
161
+			}
162
+		}
163
+		return $taxes;
164
+	}
165
+
166
+
167
+
168
+
169
+
170
+	/**
171
+	 *      retrieve all prices for an ticket plus default global prices, but not taxes
172
+	 *
173
+	 *      @access     public
174
+	 *      @param int $TKT_ID          the id of the event.  If not included then we assume that this is a new ticket.
175
+	 *      @return         boolean         false on fail
176
+	 */
177
+	public function get_all_ticket_prices_for_admin($TKT_ID = 0)
178
+	{
179
+		$array_of_price_objects = array();
180
+		if (empty($TKT_ID)) {
181
+			// if there is no tkt, get prices with no tkt ID, are global, are not a tax, and are active
182
+			// return that list
183
+			$default_prices = $this->get_all_default_prices();
184
+
185
+			if ($default_prices) {
186
+				foreach ($default_prices as $price) {
187
+					if ($price instanceof EE_Price) {
188
+						$array_of_price_objects[ $price->type() ][] = $price;
189
+					}
190
+				}
191
+				return $array_of_price_objects;
192
+			} else {
193
+				return array();
194
+			}
195
+		} else {
196
+			$ticket_prices = $this->get_all(array(
197
+				array(
198
+					'TKT_ID' => $TKT_ID,
199
+					'PRC_deleted' => 0
200
+					),
201
+				'order_by' => array('PRC_order' => 'ASC')
202
+			));
203
+		}
204
+
205
+		if (!empty($ticket_prices)) {
206
+			foreach ($ticket_prices as $price) {
207
+				if ($price instanceof EE_Price) {
208
+					$array_of_price_objects[ $price->type() ][] = $price;
209
+				}
210
+			}
211
+			return $array_of_price_objects;
212
+		} else {
213
+			return false;
214
+		}
215
+	}
216
+
217
+
218
+
219
+	/**
220
+	 *        _sort_event_prices_by_type
221
+	 *
222
+	 * @access public
223
+	 * @param \EE_Price $price_a
224
+	 * @param \EE_Price $price_b
225
+	 * @return bool false on fail
226
+	 */
227
+	public function _sort_event_prices_by_type(EE_Price $price_a, EE_Price $price_b)
228
+	{
229
+		if ($price_a->type_obj()->order() == $price_b->type_obj()->order()) {
230
+			return $this->_sort_event_prices_by_order($price_a, $price_b);
231
+		}
232
+		return $price_a->type_obj()->order() < $price_b->type_obj()->order() ? -1 : 1;
233
+	}
234
+
235
+
236
+
237
+	/**
238
+	 *        _sort_event_prices_by_order
239
+	 *
240
+	 * @access public
241
+	 * @param \EE_Price $price_a
242
+	 * @param \EE_Price $price_b
243
+	 * @return bool false on fail
244
+	 */
245
+	public function _sort_event_prices_by_order(EE_Price $price_a, EE_Price $price_b)
246
+	{
247
+		if ($price_a->order() == $price_b->order()) {
248
+			return 0;
249
+		}
250
+		return $price_a->order() < $price_b->order() ? -1 : 1;
251
+	}
252
+
253
+
254
+
255
+	/**
256
+	 *      get all prices of a specific type
257
+	 *
258
+	 *      @access     public
259
+	 *      @param      int                 $type - PRT_ID
260
+	 *      @return         boolean     false on fail
261
+	 */
262
+	public function get_all_prices_that_are_type($type = 0)
263
+	{
264
+		return $this->get_all(array(
265
+			array(
266
+				'PRT_ID' => $type
267
+			),
268
+			'order_by' => $this->_order_by_array_for_get_all_method()
269
+		));
270
+	}
271
+
272
+
273
+
274
+	/**
275
+	 * Returns an array of the normal 'order_by' query parameter provided to the get_all query.
276
+	 * Of course you don't have to use it, but this is the order we usually want to sort prices by
277
+	 * @return array which can be used like so: $this->get_all(array(array(...where stuff...),'order_by'=>$this->_order_by_array_for_get_all_method()));
278
+	 */
279
+	public function _order_by_array_for_get_all_method()
280
+	{
281
+		return array(
282
+				'PRC_order' => 'ASC',
283
+				'Price_Type.PRT_order' => 'ASC',
284
+				'PRC_ID' => 'ASC'
285
+		);
286
+	}
287 287
 }
Please login to merge, or discard this patch.