Completed
Branch master (148746)
by
unknown
08:25 queued 02:26
created
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.
core/db_models/EEM_Transaction.model.php 2 patches
Spacing   +13 added lines, -13 removed lines patch added patch discarded remove patch
@@ -143,7 +143,7 @@  discard block
 block discarded – undo
143 143
                 ),
144 144
             ],
145 145
         ];
146
-        $this->_model_relations        = [
146
+        $this->_model_relations = [
147 147
             'Registration'   => new EE_Has_Many_Relation(),
148 148
             'Payment'        => new EE_Has_Many_Relation(),
149 149
             'Status'         => new EE_Belongs_To_Relation(),
@@ -211,7 +211,7 @@  discard block
 block discarded – undo
211 211
             ],
212 212
             OBJECT,
213 213
             [
214
-                'txnDate' => ['DATE(' . $query_interval . ')', '%s'],
214
+                'txnDate' => ['DATE('.$query_interval.')', '%s'],
215 215
                 'revenue' => ['SUM(TransactionTable.TXN_paid)', '%d'],
216 216
             ]
217 217
         );
@@ -230,17 +230,17 @@  discard block
 block discarded – undo
230 230
     public function get_revenue_per_event_report($period = '-1 month')
231 231
     {
232 232
         global $wpdb;
233
-        $transaction_table          = $wpdb->prefix . 'esp_transaction';
234
-        $registration_table         = $wpdb->prefix . 'esp_registration';
235
-        $registration_payment_table = $wpdb->prefix . 'esp_registration_payment';
233
+        $transaction_table          = $wpdb->prefix.'esp_transaction';
234
+        $registration_table         = $wpdb->prefix.'esp_registration';
235
+        $registration_payment_table = $wpdb->prefix.'esp_registration_payment';
236 236
         $event_table                = $wpdb->posts;
237
-        $payment_table              = $wpdb->prefix . 'esp_payment';
237
+        $payment_table              = $wpdb->prefix.'esp_payment';
238 238
         $sql_date                   = date('Y-m-d H:i:s', strtotime($period));
239 239
         $approved_payment_status    = EEM_Payment::status_id_approved;
240 240
         $extra_event_on_join        = '';
241 241
         // exclude events not authored by user if permissions in effect
242
-        if (! EE_Registry::instance()->CAP->current_user_can('ee_read_others_registrations', 'reg_per_event_report')) {
243
-            $extra_event_on_join = ' AND Event.post_author = ' . get_current_user_id();
242
+        if ( ! EE_Registry::instance()->CAP->current_user_can('ee_read_others_registrations', 'reg_per_event_report')) {
243
+            $extra_event_on_join = ' AND Event.post_author = '.get_current_user_id();
244 244
         }
245 245
 
246 246
         return $wpdb->get_results(
@@ -318,7 +318,7 @@  discard block
 block discarded – undo
318 318
     public function update_based_on_payments($transaction_obj_or_id, $save_txn = true)
319 319
     {
320 320
         EE_Error::doing_it_wrong(
321
-            __CLASS__ . '::' . __FUNCTION__,
321
+            __CLASS__.'::'.__FUNCTION__,
322 322
             sprintf(
323 323
                 esc_html__('This method is deprecated. Please use "%s" instead', 'event_espresso'),
324 324
                 'EE_Transaction_Processor::update_transaction_and_registrations_after_checkout_or_payment()'
@@ -390,7 +390,7 @@  discard block
 block discarded – undo
390 390
             $time_to_leave_alone
391 391
         );
392 392
         // now that we have the ids to delete
393
-        if (! empty($txn_ids) && is_array($txn_ids)) {
393
+        if ( ! empty($txn_ids) && is_array($txn_ids)) {
394 394
             // first, make sure these TXN's are removed the "ee_locked_transactions" array
395 395
             EEM_Transaction::unset_locked_transactions($txn_ids);
396 396
 
@@ -403,7 +403,7 @@  discard block
 block discarded – undo
403 403
             // let's get deleting...
404 404
             // We got the ids from the original query to get them FROM
405 405
             // the db (which is sanitized) so no need to prepare them again.
406
-            $query   = $wpdb->prepare("DELETE FROM " . $this->table() . " WHERE TXN_ID IN ( $format )", $txn_ids);
406
+            $query   = $wpdb->prepare("DELETE FROM ".$this->table()." WHERE TXN_ID IN ( $format )", $txn_ids);
407 407
             $deleted = $wpdb->query($query);
408 408
         }
409 409
         if ($deleted) {
@@ -427,8 +427,8 @@  discard block
 block discarded – undo
427 427
         $locked_transactions = get_option('ee_locked_transactions', []);
428 428
         $update              = false;
429 429
         foreach ($transaction_IDs as $TXN_ID) {
430
-            if (isset($locked_transactions[ $TXN_ID ])) {
431
-                unset($locked_transactions[ $TXN_ID ]);
430
+            if (isset($locked_transactions[$TXN_ID])) {
431
+                unset($locked_transactions[$TXN_ID]);
432 432
                 $update = true;
433 433
             }
434 434
         }
Please login to merge, or discard this patch.
Indentation   +457 added lines, -457 removed lines patch added patch discarded remove patch
@@ -19,231 +19,231 @@  discard block
 block discarded – undo
19 19
  */
20 20
 class EEM_Transaction extends EEM_Base
21 21
 {
22
-    // private instance of the Transaction object
23
-    protected static $_instance;
24
-
25
-    /**
26
-     * Status ID(STS_ID on esp_status table) to indicate the transaction is complete,
27
-     * but payment is pending. This is the state for transactions where payment is promised
28
-     * from an offline gateway.
29
-     */
30
-    //  const open_status_code = 'TPN';
31
-
32
-    /**
33
-     * Status ID(STS_ID on esp_status table) to indicate the transaction failed,
34
-     * either due to a technical reason (server or computer crash during registration),
35
-     *  or some other reason that prevent the collection of any useful contact information from any of the registrants
36
-     */
37
-    const failed_status_code = 'TFL';
38
-
39
-    /**
40
-     * Status ID(STS_ID on esp_status table) to indicate the transaction was abandoned,
41
-     * either due to a technical reason (server or computer crash during registration),
42
-     * or due to an abandoned cart after registrant chose not to complete the registration process
43
-     * HOWEVER...
44
-     * an abandoned TXN differs from a failed TXN in that it was able to capture contact information for at least one
45
-     * registrant
46
-     */
47
-    const abandoned_status_code = 'TAB';
48
-
49
-    /**
50
-     * Status ID(STS_ID on esp_status table) to indicate an incomplete transaction,
51
-     * meaning that monies are still owing: TXN_paid < TXN_total
52
-     */
53
-    const incomplete_status_code = 'TIN';
54
-
55
-    /**
56
-     * Status ID (STS_ID on esp_status table) to indicate a complete transaction.
57
-     * meaning that NO monies are owing: TXN_paid == TXN_total
58
-     */
59
-    const complete_status_code = 'TCM';
60
-
61
-    /**
62
-     *  Status ID(STS_ID on esp_status table) to indicate the transaction is overpaid.
63
-     *  This is the same as complete, but site admins actually owe clients the moneys!  TXN_paid > TXN_total
64
-     */
65
-    const overpaid_status_code = 'TOP';
66
-
67
-
68
-    /**
69
-     *    private constructor to prevent direct creation
70
-     *
71
-     * @Constructor
72
-     * @access protected
73
-     *
74
-     * @param string $timezone string representing the timezone we want to set for returned Date Time Strings (and any
75
-     *                         incoming timezone data that gets saved). Note this just sends the timezone info to the
76
-     *                         date time model field objects.  Default is NULL (and will be assumed using the set
77
-     *                         timezone in the 'timezone_string' wp option)
78
-     *
79
-     * @throws EE_Error
80
-     */
81
-    protected function __construct($timezone)
82
-    {
83
-        $this->singular_item = esc_html__('Transaction', 'event_espresso');
84
-        $this->plural_item   = esc_html__('Transactions', 'event_espresso');
85
-
86
-        $this->_tables                 = [
87
-            'TransactionTable' => new EE_Primary_Table('esp_transaction', 'TXN_ID'),
88
-        ];
89
-        $this->_fields                 = [
90
-            'TransactionTable' => [
91
-                'TXN_ID'           => new EE_Primary_Key_Int_Field('TXN_ID', esc_html__('Transaction ID', 'event_espresso')),
92
-                'TXN_timestamp'    => new EE_Datetime_Field(
93
-                    'TXN_timestamp',
94
-                    esc_html__('date when transaction was created', 'event_espresso'),
95
-                    false,
96
-                    EE_Datetime_Field::now,
97
-                    $timezone
98
-                ),
99
-                'TXN_total'        => new EE_Money_Field(
100
-                    'TXN_total',
101
-                    esc_html__('Total value of Transaction', 'event_espresso'),
102
-                    false,
103
-                    0
104
-                ),
105
-                'TXN_paid'         => new EE_Money_Field(
106
-                    'TXN_paid',
107
-                    esc_html__('Amount paid towards transaction to date', 'event_espresso'),
108
-                    false,
109
-                    0
110
-                ),
111
-                'STS_ID'           => new EE_Foreign_Key_String_Field(
112
-                    'STS_ID',
113
-                    esc_html__('Status ID', 'event_espresso'),
114
-                    false,
115
-                    EEM_Transaction::failed_status_code,
116
-                    'Status'
117
-                ),
118
-                'TXN_session_data' => new EE_Serialized_Text_Field(
119
-                    'TXN_session_data',
120
-                    esc_html__('Serialized session data', 'event_espresso'),
121
-                    true,
122
-                    ''
123
-                ),
124
-                'TXN_hash_salt'    => new EE_Plain_Text_Field(
125
-                    'TXN_hash_salt',
126
-                    esc_html__('Transaction Hash Salt', 'event_espresso'),
127
-                    true,
128
-                    ''
129
-                ),
130
-                'PMD_ID'           => new EE_Foreign_Key_Int_Field(
131
-                    'PMD_ID',
132
-                    esc_html__("Last Used Payment Method", 'event_espresso'),
133
-                    true,
134
-                    null,
135
-                    'Payment_Method'
136
-                ),
137
-                'TXN_reg_steps'    => new EE_Serialized_Text_Field(
138
-                    'TXN_reg_steps',
139
-                    esc_html__('Registration Steps', 'event_espresso'),
140
-                    false,
141
-                    []
142
-                ),
143
-            ],
144
-        ];
145
-        $this->_model_relations        = [
146
-            'Registration'   => new EE_Has_Many_Relation(),
147
-            'Payment'        => new EE_Has_Many_Relation(),
148
-            'Status'         => new EE_Belongs_To_Relation(),
149
-            'Line_Item'      => new EE_Has_Many_Relation(false),
150
-            // you can delete a transaction without needing to delete its line items
151
-            'Payment_Method' => new EE_Belongs_To_Relation(),
152
-            'Message'        => new EE_Has_Many_Relation(),
153
-        ];
154
-        $this->_model_chain_to_wp_user = 'Registration.Event';
155
-        parent::__construct($timezone);
156
-    }
157
-
158
-
159
-    /**
160
-     *    txn_status_array
161
-     * get list of transaction statuses
162
-     *
163
-     * @access public
164
-     * @return array
165
-     */
166
-    public static function txn_status_array()
167
-    {
168
-        return apply_filters(
169
-            'FHEE__EEM_Transaction__txn_status_array',
170
-            [
171
-                EEM_Transaction::overpaid_status_code,
172
-                EEM_Transaction::complete_status_code,
173
-                EEM_Transaction::incomplete_status_code,
174
-                EEM_Transaction::abandoned_status_code,
175
-                EEM_Transaction::failed_status_code,
176
-            ]
177
-        );
178
-    }
179
-
180
-
181
-    /**
182
-     *        get the revenue per day  for the Transaction Admin page Reports Tab
183
-     *
184
-     * @access        public
185
-     *
186
-     * @param string $period
187
-     *
188
-     * @return stdClass[]
189
-     * @throws EE_Error
190
-     * @throws EE_Error
191
-     */
192
-    public function get_revenue_per_day_report($period = '-1 month')
193
-    {
194
-        $sql_date = $this->convert_datetime_for_query(
195
-            'TXN_timestamp',
196
-            date('Y-m-d H:i:s', strtotime($period)),
197
-            'Y-m-d H:i:s',
198
-            'UTC'
199
-        );
200
-
201
-        $query_interval = EEH_DTT_Helper::get_sql_query_interval_for_offset($this->get_timezone(), 'TXN_timestamp');
202
-
203
-        return $this->_get_all_wpdb_results(
204
-            [
205
-                [
206
-                    'TXN_timestamp' => ['>=', $sql_date],
207
-                ],
208
-                'group_by' => 'txnDate',
209
-                'order_by' => ['TXN_timestamp' => 'ASC'],
210
-            ],
211
-            OBJECT,
212
-            [
213
-                'txnDate' => ['DATE(' . $query_interval . ')', '%s'],
214
-                'revenue' => ['SUM(TransactionTable.TXN_paid)', '%d'],
215
-            ]
216
-        );
217
-    }
218
-
219
-
220
-    /**
221
-     *        get the revenue per event  for the Transaction Admin page Reports Tab
222
-     *
223
-     * @access        public
224
-     *
225
-     * @param string $period
226
-     *
227
-     * @return EE_Transaction[]
228
-     */
229
-    public function get_revenue_per_event_report($period = '-1 month')
230
-    {
231
-        global $wpdb;
232
-        $transaction_table          = $wpdb->prefix . 'esp_transaction';
233
-        $registration_table         = $wpdb->prefix . 'esp_registration';
234
-        $registration_payment_table = $wpdb->prefix . 'esp_registration_payment';
235
-        $event_table                = $wpdb->posts;
236
-        $payment_table              = $wpdb->prefix . 'esp_payment';
237
-        $sql_date                   = date('Y-m-d H:i:s', strtotime($period));
238
-        $approved_payment_status    = EEM_Payment::status_id_approved;
239
-        $extra_event_on_join        = '';
240
-        // exclude events not authored by user if permissions in effect
241
-        if (! EE_Registry::instance()->CAP->current_user_can('ee_read_others_registrations', 'reg_per_event_report')) {
242
-            $extra_event_on_join = ' AND Event.post_author = ' . get_current_user_id();
243
-        }
244
-
245
-        return $wpdb->get_results(
246
-            "SELECT
22
+	// private instance of the Transaction object
23
+	protected static $_instance;
24
+
25
+	/**
26
+	 * Status ID(STS_ID on esp_status table) to indicate the transaction is complete,
27
+	 * but payment is pending. This is the state for transactions where payment is promised
28
+	 * from an offline gateway.
29
+	 */
30
+	//  const open_status_code = 'TPN';
31
+
32
+	/**
33
+	 * Status ID(STS_ID on esp_status table) to indicate the transaction failed,
34
+	 * either due to a technical reason (server or computer crash during registration),
35
+	 *  or some other reason that prevent the collection of any useful contact information from any of the registrants
36
+	 */
37
+	const failed_status_code = 'TFL';
38
+
39
+	/**
40
+	 * Status ID(STS_ID on esp_status table) to indicate the transaction was abandoned,
41
+	 * either due to a technical reason (server or computer crash during registration),
42
+	 * or due to an abandoned cart after registrant chose not to complete the registration process
43
+	 * HOWEVER...
44
+	 * an abandoned TXN differs from a failed TXN in that it was able to capture contact information for at least one
45
+	 * registrant
46
+	 */
47
+	const abandoned_status_code = 'TAB';
48
+
49
+	/**
50
+	 * Status ID(STS_ID on esp_status table) to indicate an incomplete transaction,
51
+	 * meaning that monies are still owing: TXN_paid < TXN_total
52
+	 */
53
+	const incomplete_status_code = 'TIN';
54
+
55
+	/**
56
+	 * Status ID (STS_ID on esp_status table) to indicate a complete transaction.
57
+	 * meaning that NO monies are owing: TXN_paid == TXN_total
58
+	 */
59
+	const complete_status_code = 'TCM';
60
+
61
+	/**
62
+	 *  Status ID(STS_ID on esp_status table) to indicate the transaction is overpaid.
63
+	 *  This is the same as complete, but site admins actually owe clients the moneys!  TXN_paid > TXN_total
64
+	 */
65
+	const overpaid_status_code = 'TOP';
66
+
67
+
68
+	/**
69
+	 *    private constructor to prevent direct creation
70
+	 *
71
+	 * @Constructor
72
+	 * @access protected
73
+	 *
74
+	 * @param string $timezone string representing the timezone we want to set for returned Date Time Strings (and any
75
+	 *                         incoming timezone data that gets saved). Note this just sends the timezone info to the
76
+	 *                         date time model field objects.  Default is NULL (and will be assumed using the set
77
+	 *                         timezone in the 'timezone_string' wp option)
78
+	 *
79
+	 * @throws EE_Error
80
+	 */
81
+	protected function __construct($timezone)
82
+	{
83
+		$this->singular_item = esc_html__('Transaction', 'event_espresso');
84
+		$this->plural_item   = esc_html__('Transactions', 'event_espresso');
85
+
86
+		$this->_tables                 = [
87
+			'TransactionTable' => new EE_Primary_Table('esp_transaction', 'TXN_ID'),
88
+		];
89
+		$this->_fields                 = [
90
+			'TransactionTable' => [
91
+				'TXN_ID'           => new EE_Primary_Key_Int_Field('TXN_ID', esc_html__('Transaction ID', 'event_espresso')),
92
+				'TXN_timestamp'    => new EE_Datetime_Field(
93
+					'TXN_timestamp',
94
+					esc_html__('date when transaction was created', 'event_espresso'),
95
+					false,
96
+					EE_Datetime_Field::now,
97
+					$timezone
98
+				),
99
+				'TXN_total'        => new EE_Money_Field(
100
+					'TXN_total',
101
+					esc_html__('Total value of Transaction', 'event_espresso'),
102
+					false,
103
+					0
104
+				),
105
+				'TXN_paid'         => new EE_Money_Field(
106
+					'TXN_paid',
107
+					esc_html__('Amount paid towards transaction to date', 'event_espresso'),
108
+					false,
109
+					0
110
+				),
111
+				'STS_ID'           => new EE_Foreign_Key_String_Field(
112
+					'STS_ID',
113
+					esc_html__('Status ID', 'event_espresso'),
114
+					false,
115
+					EEM_Transaction::failed_status_code,
116
+					'Status'
117
+				),
118
+				'TXN_session_data' => new EE_Serialized_Text_Field(
119
+					'TXN_session_data',
120
+					esc_html__('Serialized session data', 'event_espresso'),
121
+					true,
122
+					''
123
+				),
124
+				'TXN_hash_salt'    => new EE_Plain_Text_Field(
125
+					'TXN_hash_salt',
126
+					esc_html__('Transaction Hash Salt', 'event_espresso'),
127
+					true,
128
+					''
129
+				),
130
+				'PMD_ID'           => new EE_Foreign_Key_Int_Field(
131
+					'PMD_ID',
132
+					esc_html__("Last Used Payment Method", 'event_espresso'),
133
+					true,
134
+					null,
135
+					'Payment_Method'
136
+				),
137
+				'TXN_reg_steps'    => new EE_Serialized_Text_Field(
138
+					'TXN_reg_steps',
139
+					esc_html__('Registration Steps', 'event_espresso'),
140
+					false,
141
+					[]
142
+				),
143
+			],
144
+		];
145
+		$this->_model_relations        = [
146
+			'Registration'   => new EE_Has_Many_Relation(),
147
+			'Payment'        => new EE_Has_Many_Relation(),
148
+			'Status'         => new EE_Belongs_To_Relation(),
149
+			'Line_Item'      => new EE_Has_Many_Relation(false),
150
+			// you can delete a transaction without needing to delete its line items
151
+			'Payment_Method' => new EE_Belongs_To_Relation(),
152
+			'Message'        => new EE_Has_Many_Relation(),
153
+		];
154
+		$this->_model_chain_to_wp_user = 'Registration.Event';
155
+		parent::__construct($timezone);
156
+	}
157
+
158
+
159
+	/**
160
+	 *    txn_status_array
161
+	 * get list of transaction statuses
162
+	 *
163
+	 * @access public
164
+	 * @return array
165
+	 */
166
+	public static function txn_status_array()
167
+	{
168
+		return apply_filters(
169
+			'FHEE__EEM_Transaction__txn_status_array',
170
+			[
171
+				EEM_Transaction::overpaid_status_code,
172
+				EEM_Transaction::complete_status_code,
173
+				EEM_Transaction::incomplete_status_code,
174
+				EEM_Transaction::abandoned_status_code,
175
+				EEM_Transaction::failed_status_code,
176
+			]
177
+		);
178
+	}
179
+
180
+
181
+	/**
182
+	 *        get the revenue per day  for the Transaction Admin page Reports Tab
183
+	 *
184
+	 * @access        public
185
+	 *
186
+	 * @param string $period
187
+	 *
188
+	 * @return stdClass[]
189
+	 * @throws EE_Error
190
+	 * @throws EE_Error
191
+	 */
192
+	public function get_revenue_per_day_report($period = '-1 month')
193
+	{
194
+		$sql_date = $this->convert_datetime_for_query(
195
+			'TXN_timestamp',
196
+			date('Y-m-d H:i:s', strtotime($period)),
197
+			'Y-m-d H:i:s',
198
+			'UTC'
199
+		);
200
+
201
+		$query_interval = EEH_DTT_Helper::get_sql_query_interval_for_offset($this->get_timezone(), 'TXN_timestamp');
202
+
203
+		return $this->_get_all_wpdb_results(
204
+			[
205
+				[
206
+					'TXN_timestamp' => ['>=', $sql_date],
207
+				],
208
+				'group_by' => 'txnDate',
209
+				'order_by' => ['TXN_timestamp' => 'ASC'],
210
+			],
211
+			OBJECT,
212
+			[
213
+				'txnDate' => ['DATE(' . $query_interval . ')', '%s'],
214
+				'revenue' => ['SUM(TransactionTable.TXN_paid)', '%d'],
215
+			]
216
+		);
217
+	}
218
+
219
+
220
+	/**
221
+	 *        get the revenue per event  for the Transaction Admin page Reports Tab
222
+	 *
223
+	 * @access        public
224
+	 *
225
+	 * @param string $period
226
+	 *
227
+	 * @return EE_Transaction[]
228
+	 */
229
+	public function get_revenue_per_event_report($period = '-1 month')
230
+	{
231
+		global $wpdb;
232
+		$transaction_table          = $wpdb->prefix . 'esp_transaction';
233
+		$registration_table         = $wpdb->prefix . 'esp_registration';
234
+		$registration_payment_table = $wpdb->prefix . 'esp_registration_payment';
235
+		$event_table                = $wpdb->posts;
236
+		$payment_table              = $wpdb->prefix . 'esp_payment';
237
+		$sql_date                   = date('Y-m-d H:i:s', strtotime($period));
238
+		$approved_payment_status    = EEM_Payment::status_id_approved;
239
+		$extra_event_on_join        = '';
240
+		// exclude events not authored by user if permissions in effect
241
+		if (! EE_Registry::instance()->CAP->current_user_can('ee_read_others_registrations', 'reg_per_event_report')) {
242
+			$extra_event_on_join = ' AND Event.post_author = ' . get_current_user_id();
243
+		}
244
+
245
+		return $wpdb->get_results(
246
+			"SELECT
247 247
 			Transaction_Event.event_name AS event_name,
248 248
 			SUM(Transaction_Event.paid) AS revenue
249 249
 			FROM
@@ -271,236 +271,236 @@  discard block
 block discarded – undo
271 271
 					$extra_event_on_join
272 272
 				) AS Transaction_Event
273 273
 			GROUP BY event_name"
274
-        );
275
-    }
276
-
277
-
278
-    /**
279
-     * Gets the current transaction given the reg_url_link, or assumes the reg_url_link is in the
280
-     * request global variable. Either way, tries to find the current transaction (through
281
-     * the registration pointed to by reg_url_link), if not returns null
282
-     *
283
-     * @param string $reg_url_link
284
-     *
285
-     * @return EE_Transaction
286
-     * @throws EE_Error
287
-     */
288
-    public function get_transaction_from_reg_url_link($reg_url_link = '')
289
-    {
290
-        if (empty($reg_url_link)) {
291
-            $request      = LoaderFactory::getLoader()->getShared(RequestInterface::class);
292
-            $reg_url_link = $request->getRequestParam('e_reg_url_link');
293
-        }
294
-        return $this->get_one(
295
-            [
296
-                [
297
-                    'Registration.REG_url_link' => $reg_url_link,
298
-                ],
299
-            ]
300
-        );
301
-    }
302
-
303
-
304
-    /**
305
-     * Updates the provided EE_Transaction with all the applicable payments
306
-     * (or fetch the EE_Transaction from its ID)
307
-     *
308
-     * @param EE_Transaction|int $transaction_obj_or_id
309
-     * @param boolean            $save_txn whether or not to save the transaction during this function call
310
-     *
311
-     * @return array
312
-     * @throws EE_Error
313
-     * @throws ReflectionException
314
-     * @deprecated
315
-     *
316
-     */
317
-    public function update_based_on_payments($transaction_obj_or_id, $save_txn = true)
318
-    {
319
-        EE_Error::doing_it_wrong(
320
-            __CLASS__ . '::' . __FUNCTION__,
321
-            sprintf(
322
-                esc_html__('This method is deprecated. Please use "%s" instead', 'event_espresso'),
323
-                'EE_Transaction_Processor::update_transaction_and_registrations_after_checkout_or_payment()'
324
-            ),
325
-            '4.6.0'
326
-        );
327
-        /** @type EE_Transaction_Processor $transaction_processor */
328
-        $transaction_processor = EE_Registry::instance()->load_class('Transaction_Processor');
329
-
330
-        return $transaction_processor->update_transaction_and_registrations_after_checkout_or_payment(
331
-            $this->ensure_is_obj($transaction_obj_or_id)
332
-        );
333
-    }
334
-
335
-
336
-    /**
337
-     * Deletes "junk" transactions that were probably added by bots. There might be TONS
338
-     * of these, so we are very careful to NOT select (which the models do even when deleting),
339
-     * and so we only use wpdb directly and only do minimal joins.
340
-     * Transactions are considered "junk" if they're failed for longer than a week.
341
-     * Also, there is an extra check for payments related to the transaction, because if a transaction has a payment on
342
-     * it, it's probably not junk (regardless of what status it has).
343
-     * The downside to this approach is that is addons are listening for object deletions
344
-     * on EEM_Base::delete() they won't be notified of this.  However, there is an action that plugins can hook into
345
-     * to catch these types of deletions.
346
-     *
347
-     * @return int
348
-     * @throws EE_Error
349
-     * @throws EE_Error
350
-     * @global WPDB $wpdb
351
-     */
352
-    public function delete_junk_transactions()
353
-    {
354
-        global $wpdb;
355
-        $deleted             = false;
356
-        $time_to_leave_alone = (int) apply_filters(
357
-            'FHEE__EEM_Transaction__delete_junk_transactions__time_to_leave_alone',
358
-            WEEK_IN_SECONDS
359
-        );
360
-
361
-
362
-        /**
363
-         * This allows code to filter the query arguments used for retrieving the transaction IDs to delete.
364
-         * Useful for plugins that want to exclude transactions matching certain query parameters.
365
-         * The query parameters should be in the format accepted by the EEM_Base model queries.
366
-         */
367
-        $ids_query = apply_filters(
368
-            'FHEE__EEM_Transaction__delete_junk_transactions__initial_query_args',
369
-            [
370
-                0          => [
371
-                    'STS_ID'         => EEM_Transaction::failed_status_code,
372
-                    'Payment.PAY_ID' => ['IS NULL'],
373
-                    'TXN_timestamp'  => ['<', time() - $time_to_leave_alone],
374
-                ],
375
-                'order_by' => ['TXN_timestamp' => 'ASC'],
376
-                'limit'    => 1000,
377
-            ],
378
-            $time_to_leave_alone
379
-        );
380
-
381
-
382
-        /**
383
-         * This filter is for when code needs to filter the list of transaction ids that represent transactions
384
-         * about to be deleted based on some other criteria that isn't easily done via the query args filter.
385
-         */
386
-        $txn_ids = apply_filters(
387
-            'FHEE__EEM_Transaction__delete_junk_transactions__transaction_ids_to_delete',
388
-            EEM_Transaction::instance()->get_col($ids_query, 'TXN_ID'),
389
-            $time_to_leave_alone
390
-        );
391
-        // now that we have the ids to delete
392
-        if (! empty($txn_ids) && is_array($txn_ids)) {
393
-            // first, make sure these TXN's are removed the "ee_locked_transactions" array
394
-            EEM_Transaction::unset_locked_transactions($txn_ids);
395
-
396
-            // Create IDs placeholder.
397
-            $placeholders = array_fill(0, count($txn_ids), '%d');
398
-
399
-            // Glue it together to use inside $wpdb->prepare.
400
-            $format = implode(', ', $placeholders);
401
-
402
-            // let's get deleting...
403
-            // We got the ids from the original query to get them FROM
404
-            // the db (which is sanitized) so no need to prepare them again.
405
-            $query   = $wpdb->prepare("DELETE FROM " . $this->table() . " WHERE TXN_ID IN ( $format )", $txn_ids);
406
-            $deleted = $wpdb->query($query);
407
-        }
408
-        if ($deleted) {
409
-            /**
410
-             * Allows code to do something after the transactions have been deleted.
411
-             */
412
-            do_action('AHEE__EEM_Transaction__delete_junk_transactions__successful_deletion', $txn_ids);
413
-        }
414
-
415
-        return $deleted;
416
-    }
417
-
418
-
419
-    /**
420
-     * @param array $transaction_IDs
421
-     *
422
-     * @return bool
423
-     */
424
-    public static function unset_locked_transactions(array $transaction_IDs)
425
-    {
426
-        $locked_transactions = get_option('ee_locked_transactions', []);
427
-        $update              = false;
428
-        foreach ($transaction_IDs as $TXN_ID) {
429
-            if (isset($locked_transactions[ $TXN_ID ])) {
430
-                unset($locked_transactions[ $TXN_ID ]);
431
-                $update = true;
432
-            }
433
-        }
434
-        if ($update) {
435
-            update_option('ee_locked_transactions', $locked_transactions);
436
-        }
437
-
438
-        return $update;
439
-    }
440
-
441
-
442
-    /**
443
-     * returns an array of EE_Transaction objects whose timestamp is greater than
444
-     * the current time minus the session lifespan, which defaults to 60 minutes
445
-     *
446
-     * @return EE_Base_Class[]|EE_Transaction[]
447
-     * @throws EE_Error
448
-     * @throws InvalidArgumentException
449
-     * @throws InvalidDataTypeException
450
-     * @throws InvalidInterfaceException
451
-     */
452
-    public function get_transactions_in_progress()
453
-    {
454
-        return $this->_get_transactions_in_progress();
455
-    }
456
-
457
-
458
-    /**
459
-     * returns an array of EE_Transaction objects whose timestamp is less than
460
-     * the current time minus the session lifespan, which defaults to 60 minutes
461
-     *
462
-     * @return EE_Base_Class[]|EE_Transaction[]
463
-     * @throws EE_Error
464
-     * @throws InvalidArgumentException
465
-     * @throws InvalidDataTypeException
466
-     * @throws InvalidInterfaceException
467
-     */
468
-    public function get_transactions_not_in_progress()
469
-    {
470
-        return $this->_get_transactions_in_progress('<=');
471
-    }
472
-
473
-
474
-    /**
475
-     * @param string $comparison
476
-     * @return EE_Transaction[]
477
-     * @throws EE_Error
478
-     * @throws InvalidArgumentException
479
-     * @throws InvalidDataTypeException
480
-     * @throws InvalidInterfaceException
481
-     */
482
-    private function _get_transactions_in_progress($comparison = '>=')
483
-    {
484
-        $comparison = $comparison === '>=' || $comparison === '<='
485
-            ? $comparison
486
-            : '>=';
487
-        /** @var EventEspresso\core\domain\values\session\SessionLifespan $session_lifespan */
488
-        $session_lifespan = LoaderFactory::getLoader()->getShared(
489
-            'EventEspresso\core\domain\values\session\SessionLifespan'
490
-        );
491
-        return $this->get_all(
492
-            [
493
-                [
494
-                    'TXN_timestamp' => [
495
-                        $comparison,
496
-                        $session_lifespan->expiration(),
497
-                    ],
498
-                    'STS_ID'        => [
499
-                        '!=',
500
-                        EEM_Transaction::complete_status_code,
501
-                    ],
502
-                ],
503
-            ]
504
-        );
505
-    }
274
+		);
275
+	}
276
+
277
+
278
+	/**
279
+	 * Gets the current transaction given the reg_url_link, or assumes the reg_url_link is in the
280
+	 * request global variable. Either way, tries to find the current transaction (through
281
+	 * the registration pointed to by reg_url_link), if not returns null
282
+	 *
283
+	 * @param string $reg_url_link
284
+	 *
285
+	 * @return EE_Transaction
286
+	 * @throws EE_Error
287
+	 */
288
+	public function get_transaction_from_reg_url_link($reg_url_link = '')
289
+	{
290
+		if (empty($reg_url_link)) {
291
+			$request      = LoaderFactory::getLoader()->getShared(RequestInterface::class);
292
+			$reg_url_link = $request->getRequestParam('e_reg_url_link');
293
+		}
294
+		return $this->get_one(
295
+			[
296
+				[
297
+					'Registration.REG_url_link' => $reg_url_link,
298
+				],
299
+			]
300
+		);
301
+	}
302
+
303
+
304
+	/**
305
+	 * Updates the provided EE_Transaction with all the applicable payments
306
+	 * (or fetch the EE_Transaction from its ID)
307
+	 *
308
+	 * @param EE_Transaction|int $transaction_obj_or_id
309
+	 * @param boolean            $save_txn whether or not to save the transaction during this function call
310
+	 *
311
+	 * @return array
312
+	 * @throws EE_Error
313
+	 * @throws ReflectionException
314
+	 * @deprecated
315
+	 *
316
+	 */
317
+	public function update_based_on_payments($transaction_obj_or_id, $save_txn = true)
318
+	{
319
+		EE_Error::doing_it_wrong(
320
+			__CLASS__ . '::' . __FUNCTION__,
321
+			sprintf(
322
+				esc_html__('This method is deprecated. Please use "%s" instead', 'event_espresso'),
323
+				'EE_Transaction_Processor::update_transaction_and_registrations_after_checkout_or_payment()'
324
+			),
325
+			'4.6.0'
326
+		);
327
+		/** @type EE_Transaction_Processor $transaction_processor */
328
+		$transaction_processor = EE_Registry::instance()->load_class('Transaction_Processor');
329
+
330
+		return $transaction_processor->update_transaction_and_registrations_after_checkout_or_payment(
331
+			$this->ensure_is_obj($transaction_obj_or_id)
332
+		);
333
+	}
334
+
335
+
336
+	/**
337
+	 * Deletes "junk" transactions that were probably added by bots. There might be TONS
338
+	 * of these, so we are very careful to NOT select (which the models do even when deleting),
339
+	 * and so we only use wpdb directly and only do minimal joins.
340
+	 * Transactions are considered "junk" if they're failed for longer than a week.
341
+	 * Also, there is an extra check for payments related to the transaction, because if a transaction has a payment on
342
+	 * it, it's probably not junk (regardless of what status it has).
343
+	 * The downside to this approach is that is addons are listening for object deletions
344
+	 * on EEM_Base::delete() they won't be notified of this.  However, there is an action that plugins can hook into
345
+	 * to catch these types of deletions.
346
+	 *
347
+	 * @return int
348
+	 * @throws EE_Error
349
+	 * @throws EE_Error
350
+	 * @global WPDB $wpdb
351
+	 */
352
+	public function delete_junk_transactions()
353
+	{
354
+		global $wpdb;
355
+		$deleted             = false;
356
+		$time_to_leave_alone = (int) apply_filters(
357
+			'FHEE__EEM_Transaction__delete_junk_transactions__time_to_leave_alone',
358
+			WEEK_IN_SECONDS
359
+		);
360
+
361
+
362
+		/**
363
+		 * This allows code to filter the query arguments used for retrieving the transaction IDs to delete.
364
+		 * Useful for plugins that want to exclude transactions matching certain query parameters.
365
+		 * The query parameters should be in the format accepted by the EEM_Base model queries.
366
+		 */
367
+		$ids_query = apply_filters(
368
+			'FHEE__EEM_Transaction__delete_junk_transactions__initial_query_args',
369
+			[
370
+				0          => [
371
+					'STS_ID'         => EEM_Transaction::failed_status_code,
372
+					'Payment.PAY_ID' => ['IS NULL'],
373
+					'TXN_timestamp'  => ['<', time() - $time_to_leave_alone],
374
+				],
375
+				'order_by' => ['TXN_timestamp' => 'ASC'],
376
+				'limit'    => 1000,
377
+			],
378
+			$time_to_leave_alone
379
+		);
380
+
381
+
382
+		/**
383
+		 * This filter is for when code needs to filter the list of transaction ids that represent transactions
384
+		 * about to be deleted based on some other criteria that isn't easily done via the query args filter.
385
+		 */
386
+		$txn_ids = apply_filters(
387
+			'FHEE__EEM_Transaction__delete_junk_transactions__transaction_ids_to_delete',
388
+			EEM_Transaction::instance()->get_col($ids_query, 'TXN_ID'),
389
+			$time_to_leave_alone
390
+		);
391
+		// now that we have the ids to delete
392
+		if (! empty($txn_ids) && is_array($txn_ids)) {
393
+			// first, make sure these TXN's are removed the "ee_locked_transactions" array
394
+			EEM_Transaction::unset_locked_transactions($txn_ids);
395
+
396
+			// Create IDs placeholder.
397
+			$placeholders = array_fill(0, count($txn_ids), '%d');
398
+
399
+			// Glue it together to use inside $wpdb->prepare.
400
+			$format = implode(', ', $placeholders);
401
+
402
+			// let's get deleting...
403
+			// We got the ids from the original query to get them FROM
404
+			// the db (which is sanitized) so no need to prepare them again.
405
+			$query   = $wpdb->prepare("DELETE FROM " . $this->table() . " WHERE TXN_ID IN ( $format )", $txn_ids);
406
+			$deleted = $wpdb->query($query);
407
+		}
408
+		if ($deleted) {
409
+			/**
410
+			 * Allows code to do something after the transactions have been deleted.
411
+			 */
412
+			do_action('AHEE__EEM_Transaction__delete_junk_transactions__successful_deletion', $txn_ids);
413
+		}
414
+
415
+		return $deleted;
416
+	}
417
+
418
+
419
+	/**
420
+	 * @param array $transaction_IDs
421
+	 *
422
+	 * @return bool
423
+	 */
424
+	public static function unset_locked_transactions(array $transaction_IDs)
425
+	{
426
+		$locked_transactions = get_option('ee_locked_transactions', []);
427
+		$update              = false;
428
+		foreach ($transaction_IDs as $TXN_ID) {
429
+			if (isset($locked_transactions[ $TXN_ID ])) {
430
+				unset($locked_transactions[ $TXN_ID ]);
431
+				$update = true;
432
+			}
433
+		}
434
+		if ($update) {
435
+			update_option('ee_locked_transactions', $locked_transactions);
436
+		}
437
+
438
+		return $update;
439
+	}
440
+
441
+
442
+	/**
443
+	 * returns an array of EE_Transaction objects whose timestamp is greater than
444
+	 * the current time minus the session lifespan, which defaults to 60 minutes
445
+	 *
446
+	 * @return EE_Base_Class[]|EE_Transaction[]
447
+	 * @throws EE_Error
448
+	 * @throws InvalidArgumentException
449
+	 * @throws InvalidDataTypeException
450
+	 * @throws InvalidInterfaceException
451
+	 */
452
+	public function get_transactions_in_progress()
453
+	{
454
+		return $this->_get_transactions_in_progress();
455
+	}
456
+
457
+
458
+	/**
459
+	 * returns an array of EE_Transaction objects whose timestamp is less than
460
+	 * the current time minus the session lifespan, which defaults to 60 minutes
461
+	 *
462
+	 * @return EE_Base_Class[]|EE_Transaction[]
463
+	 * @throws EE_Error
464
+	 * @throws InvalidArgumentException
465
+	 * @throws InvalidDataTypeException
466
+	 * @throws InvalidInterfaceException
467
+	 */
468
+	public function get_transactions_not_in_progress()
469
+	{
470
+		return $this->_get_transactions_in_progress('<=');
471
+	}
472
+
473
+
474
+	/**
475
+	 * @param string $comparison
476
+	 * @return EE_Transaction[]
477
+	 * @throws EE_Error
478
+	 * @throws InvalidArgumentException
479
+	 * @throws InvalidDataTypeException
480
+	 * @throws InvalidInterfaceException
481
+	 */
482
+	private function _get_transactions_in_progress($comparison = '>=')
483
+	{
484
+		$comparison = $comparison === '>=' || $comparison === '<='
485
+			? $comparison
486
+			: '>=';
487
+		/** @var EventEspresso\core\domain\values\session\SessionLifespan $session_lifespan */
488
+		$session_lifespan = LoaderFactory::getLoader()->getShared(
489
+			'EventEspresso\core\domain\values\session\SessionLifespan'
490
+		);
491
+		return $this->get_all(
492
+			[
493
+				[
494
+					'TXN_timestamp' => [
495
+						$comparison,
496
+						$session_lifespan->expiration(),
497
+					],
498
+					'STS_ID'        => [
499
+						'!=',
500
+						EEM_Transaction::complete_status_code,
501
+					],
502
+				],
503
+			]
504
+		);
505
+	}
506 506
 }
Please login to merge, or discard this patch.
core/db_models/EEM_Extra_Join.model.php 1 patch
Indentation   +26 added lines, -26 removed lines patch added patch discarded remove patch
@@ -23,32 +23,32 @@
 block discarded – undo
23 23
  */
24 24
 class EEM_Extra_Join extends EEM_Base
25 25
 {
26
-    // private instance of the Extra Join object
27
-    protected static $_instance = null;
26
+	// private instance of the Extra Join object
27
+	protected static $_instance = null;
28 28
 
29
-    public function __construct($timezone = null)
30
-    {
31
-        $models_this_can_join = array_keys(EE_Registry::instance()->non_abstract_db_models);
32
-        $this->_tables = array(
33
-            'Extra_Join' => new EE_Primary_Table('esp_extra_join', 'EXJ_ID'),
34
-        );
35
-        $this->_fields = array(
36
-            'Extra_Join' => array(
37
-                'EXJ_ID' => new EE_Primary_Key_Int_Field('EXJ_ID', esc_html__('Extra Join ID', 'event_espresso')),
38
-                'EXJ_first_model_ID' => new EE_Foreign_Key_String_Field('EXJ_first_model_ID', esc_html__('First Model ID', 'event_espresso'), true, 0, $models_this_can_join),
39
-                'EXJ_first_model_name' => new EE_Any_Foreign_Model_Name_Field('EXJ_first_model_name', esc_html__('First Model Name', 'event_espresso'), true, '', $models_this_can_join),
40
-                'EXJ_second_model_ID' => new EE_Foreign_Key_String_Field('EXJ_second_model_ID', esc_html__('Second Model ID', 'event_espresso'), true, 0, $models_this_can_join),
41
-                'EXJ_second_model_name' => new EE_Any_Foreign_Model_Name_Field('EXJ_second_model_name', esc_html__('Second Model Name', 'event_espresso'), true, '', $models_this_can_join),
29
+	public function __construct($timezone = null)
30
+	{
31
+		$models_this_can_join = array_keys(EE_Registry::instance()->non_abstract_db_models);
32
+		$this->_tables = array(
33
+			'Extra_Join' => new EE_Primary_Table('esp_extra_join', 'EXJ_ID'),
34
+		);
35
+		$this->_fields = array(
36
+			'Extra_Join' => array(
37
+				'EXJ_ID' => new EE_Primary_Key_Int_Field('EXJ_ID', esc_html__('Extra Join ID', 'event_espresso')),
38
+				'EXJ_first_model_ID' => new EE_Foreign_Key_String_Field('EXJ_first_model_ID', esc_html__('First Model ID', 'event_espresso'), true, 0, $models_this_can_join),
39
+				'EXJ_first_model_name' => new EE_Any_Foreign_Model_Name_Field('EXJ_first_model_name', esc_html__('First Model Name', 'event_espresso'), true, '', $models_this_can_join),
40
+				'EXJ_second_model_ID' => new EE_Foreign_Key_String_Field('EXJ_second_model_ID', esc_html__('Second Model ID', 'event_espresso'), true, 0, $models_this_can_join),
41
+				'EXJ_second_model_name' => new EE_Any_Foreign_Model_Name_Field('EXJ_second_model_name', esc_html__('Second Model Name', 'event_espresso'), true, '', $models_this_can_join),
42 42
 
43
-            )
44
-        );
45
-        // this model is weird in that it has two foreign key columns which can point to any model/table.
46
-        // eg a foreign key to event will be in "EXJ_first_model_ID", provided the other
47
-        // model linked to is alphabetically greater than event (eg venue).
48
-        // but if the model linked to is alphabetically lower (eg attendee),
49
-        // the foreign key to the event will be in "EXJ_second_model_ID"
50
-        // so normal usage of foreign keys is weird. So don't define any
51
-        // relations to other models because they won't work properly with this model
52
-        parent::__construct($timezone);
53
-    }
43
+			)
44
+		);
45
+		// this model is weird in that it has two foreign key columns which can point to any model/table.
46
+		// eg a foreign key to event will be in "EXJ_first_model_ID", provided the other
47
+		// model linked to is alphabetically greater than event (eg venue).
48
+		// but if the model linked to is alphabetically lower (eg attendee),
49
+		// the foreign key to the event will be in "EXJ_second_model_ID"
50
+		// so normal usage of foreign keys is weird. So don't define any
51
+		// relations to other models because they won't work properly with this model
52
+		parent::__construct($timezone);
53
+	}
54 54
 }
Please login to merge, or discard this patch.