Completed
Pull Request — master (#1133)
by
unknown
49:36 queued 29:51
created
core/libraries/form_sections/inputs/EE_Form_Input_Base.input.php 3 patches
Doc Comments   +2 added lines, -2 removed lines patch added patch discarded remove patch
@@ -356,7 +356,7 @@  discard block
 block discarded – undo
356 356
      * Sets sensitive_data_removal_strategy
357 357
      *
358 358
      * @param EE_Sensitive_Data_Removal_Base $sensitive_data_removal_strategy
359
-     * @return boolean
359
+     * @return boolean|null
360 360
      */
361 361
     public function set_sensitive_data_removal_strategy($sensitive_data_removal_strategy)
362 362
     {
@@ -476,7 +476,7 @@  discard block
 block discarded – undo
476 476
     /**
477 477
      * returns true if input employs any of the validation strategy defined by the supplied array of classnames
478 478
      *
479
-     * @param array $validation_strategy_classnames
479
+     * @param string[] $validation_strategy_classnames
480 480
      * @return bool
481 481
      */
482 482
     public function has_validation_strategy($validation_strategy_classnames)
Please login to merge, or discard this patch.
Spacing   +20 added lines, -20 removed lines patch added patch discarded remove patch
@@ -202,7 +202,7 @@  discard block
 block discarded – undo
202 202
         if (isset($input_args['validation_strategies'])) {
203 203
             foreach ((array) $input_args['validation_strategies'] as $validation_strategy) {
204 204
                 if ($validation_strategy instanceof EE_Validation_Strategy_Base && empty($input_args['ignore_input'])) {
205
-                    $this->_validation_strategies[ get_class($validation_strategy) ] = $validation_strategy;
205
+                    $this->_validation_strategies[get_class($validation_strategy)] = $validation_strategy;
206 206
                 }
207 207
             }
208 208
             unset($input_args['validation_strategies']);
@@ -213,7 +213,7 @@  discard block
 block discarded – undo
213 213
         // loop thru incoming options
214 214
         foreach ($input_args as $key => $value) {
215 215
             // add underscore to $key to match property names
216
-            $_key = '_' . $key;
216
+            $_key = '_'.$key;
217 217
             if (property_exists($this, $_key)) {
218 218
                 $this->{$_key} = $value;
219 219
             }
@@ -233,7 +233,7 @@  discard block
 block discarded – undo
233 233
         if (isset($input_args['ignore_input'])) {
234 234
             $this->_normalization_strategy = new EE_Null_Normalization();
235 235
         }
236
-        if (! $this->_normalization_strategy) {
236
+        if ( ! $this->_normalization_strategy) {
237 237
                 $this->_normalization_strategy = new EE_Text_Normalization();
238 238
         }
239 239
         $this->_normalization_strategy->_construct_finalize($this);
@@ -242,7 +242,7 @@  discard block
 block discarded – undo
242 242
             $this->set_default($input_args['default']);
243 243
             unset($input_args['default']);
244 244
         }
245
-        if (! $this->_sensitive_data_removal_strategy) {
245
+        if ( ! $this->_sensitive_data_removal_strategy) {
246 246
             $this->_sensitive_data_removal_strategy = new EE_No_Sensitive_Data_Removal();
247 247
         }
248 248
         $this->_sensitive_data_removal_strategy->_construct_finalize($this);
@@ -259,10 +259,10 @@  discard block
 block discarded – undo
259 259
      */
260 260
     protected function _set_default_html_name_if_empty()
261 261
     {
262
-        if (! $this->_html_name) {
262
+        if ( ! $this->_html_name) {
263 263
             $this->_html_name = $this->name();
264 264
             if ($this->_parent_section && $this->_parent_section instanceof EE_Form_Section_Proper) {
265
-                $this->_html_name = $this->_parent_section->html_name_prefix() . "[{$this->name()}]";
265
+                $this->_html_name = $this->_parent_section->html_name_prefix()."[{$this->name()}]";
266 266
             }
267 267
         }
268 268
     }
@@ -294,7 +294,7 @@  discard block
 block discarded – undo
294 294
     protected function _get_display_strategy()
295 295
     {
296 296
         $this->ensure_construct_finalized_called();
297
-        if (! $this->_display_strategy || ! $this->_display_strategy instanceof EE_Display_Strategy_Base) {
297
+        if ( ! $this->_display_strategy || ! $this->_display_strategy instanceof EE_Display_Strategy_Base) {
298 298
             throw new EE_Error(
299 299
                 sprintf(
300 300
                     __(
@@ -461,7 +461,7 @@  discard block
 block discarded – undo
461 461
             if ($validation_strategy instanceof $validation_strategy_classname
462 462
                 || is_subclass_of($validation_strategy, $validation_strategy_classname)
463 463
             ) {
464
-                unset($this->_validation_strategies[ $key ]);
464
+                unset($this->_validation_strategies[$key]);
465 465
             }
466 466
         }
467 467
     }
@@ -526,7 +526,7 @@  discard block
 block discarded – undo
526 526
      */
527 527
     public function html_other_attributes()
528 528
     {
529
-        return ! empty($this->_html_other_attributes) ? ' ' . $this->_html_other_attributes : '';
529
+        return ! empty($this->_html_other_attributes) ? ' '.$this->_html_other_attributes : '';
530 530
     }
531 531
 
532 532
 
@@ -648,7 +648,7 @@  discard block
 block discarded – undo
648 648
             if (is_array($raw_input)) {
649 649
                 $raw_value = array();
650 650
                 foreach ($raw_input as $key => $value) {
651
-                    $raw_value[ $key ] = $this->_sanitize($value);
651
+                    $raw_value[$key] = $this->_sanitize($value);
652 652
                 }
653 653
                 $this->_set_raw_value($raw_value);
654 654
             } else {
@@ -681,7 +681,7 @@  discard block
 block discarded – undo
681 681
      */
682 682
     public function html_label_id()
683 683
     {
684
-        return ! empty($this->_html_label_id) ? $this->_html_label_id : $this->html_id() . '-lbl';
684
+        return ! empty($this->_html_label_id) ? $this->_html_label_id : $this->html_id().'-lbl';
685 685
     }
686 686
 
687 687
 
@@ -831,9 +831,9 @@  discard block
 block discarded – undo
831 831
                 $validation_strategy->get_jquery_validation_rule_array()
832 832
             );
833 833
         }
834
-        if (! empty($jquery_validation_rules)) {
834
+        if ( ! empty($jquery_validation_rules)) {
835 835
             foreach ($this->get_display_strategy()->get_html_input_ids(true) as $html_id_with_pound_sign) {
836
-                $jquery_validation_js[ $html_id_with_pound_sign ] = $jquery_validation_rules;
836
+                $jquery_validation_js[$html_id_with_pound_sign] = $jquery_validation_rules;
837 837
             }
838 838
         }
839 839
         return $jquery_validation_js;
@@ -955,7 +955,7 @@  discard block
 block discarded – undo
955 955
     public function html_class($add_required = false)
956 956
     {
957 957
         return $add_required && $this->required()
958
-            ? $this->required_css_class() . ' ' . $this->_html_class
958
+            ? $this->required_css_class().' '.$this->_html_class
959 959
             : $this->_html_class;
960 960
     }
961 961
 
@@ -1029,7 +1029,7 @@  discard block
 block discarded – undo
1029 1029
                 $button_css_attributes .= '';
1030 1030
         }
1031 1031
         $this->_button_css_attributes .= ! empty($other_attributes)
1032
-            ? $button_css_attributes . ' ' . $other_attributes
1032
+            ? $button_css_attributes.' '.$other_attributes
1033 1033
             : $button_css_attributes;
1034 1034
     }
1035 1035
 
@@ -1067,8 +1067,8 @@  discard block
 block discarded – undo
1067 1067
         // now get the value for the input
1068 1068
         $value = $this->findRequestForSectionUsingNameParts($name_parts, $req_data);
1069 1069
         // check if this thing's name is at the TOP level of the request data
1070
-        if ($value === null && isset($req_data[ $this->name() ])) {
1071
-            $value = $req_data[ $this->name() ];
1070
+        if ($value === null && isset($req_data[$this->name()])) {
1071
+            $value = $req_data[$this->name()];
1072 1072
         }
1073 1073
         return $value;
1074 1074
     }
@@ -1109,13 +1109,13 @@  discard block
 block discarded – undo
1109 1109
     public function findRequestForSectionUsingNameParts($html_name_parts, $req_data)
1110 1110
     {
1111 1111
         $first_part_to_consider = array_shift($html_name_parts);
1112
-        if (isset($req_data[ $first_part_to_consider ])) {
1112
+        if (isset($req_data[$first_part_to_consider])) {
1113 1113
             if (empty($html_name_parts)) {
1114
-                return $req_data[ $first_part_to_consider ];
1114
+                return $req_data[$first_part_to_consider];
1115 1115
             } else {
1116 1116
                 return $this->findRequestForSectionUsingNameParts(
1117 1117
                     $html_name_parts,
1118
-                    $req_data[ $first_part_to_consider ]
1118
+                    $req_data[$first_part_to_consider]
1119 1119
                 );
1120 1120
             }
1121 1121
         } else {
Please login to merge, or discard this patch.
Indentation   +1236 added lines, -1236 removed lines patch added patch discarded remove patch
@@ -11,1240 +11,1240 @@
 block discarded – undo
11 11
 abstract class EE_Form_Input_Base extends EE_Form_Section_Validatable
12 12
 {
13 13
 
14
-    /**
15
-     * the input's name attribute
16
-     *
17
-     * @var string
18
-     */
19
-    protected $_html_name;
20
-
21
-    /**
22
-     * id for the html label tag
23
-     *
24
-     * @var string
25
-     */
26
-    protected $_html_label_id;
27
-
28
-    /**
29
-     * class for teh html label tag
30
-     *
31
-     * @var string
32
-     */
33
-    protected $_html_label_class;
34
-
35
-    /**
36
-     * any additional html attributes that you may want to add
37
-     *
38
-     * @var string
39
-     */
40
-    protected $_html_other_attributes;
41
-
42
-    /**
43
-     * style for teh html label tag
44
-     *
45
-     * @var string
46
-     */
47
-    protected $_html_label_style;
48
-
49
-    /**
50
-     * text to be placed in the html label
51
-     *
52
-     * @var string
53
-     */
54
-    protected $_html_label_text;
55
-
56
-    /**
57
-     * the full html label. If used, all other html_label_* properties are invalid
58
-     *
59
-     * @var string
60
-     */
61
-    protected $_html_label;
62
-
63
-    /**
64
-     * HTML to use for help text (normally placed below form input), in a span which normally
65
-     * has a class of 'description'
66
-     *
67
-     * @var string
68
-     */
69
-    protected $_html_help_text;
70
-
71
-    /**
72
-     * CSS classes for displaying the help span
73
-     *
74
-     * @var string
75
-     */
76
-    protected $_html_help_class = 'description';
77
-
78
-    /**
79
-     * CSS to put in the style attribute on the help span
80
-     *
81
-     * @var string
82
-     */
83
-    protected $_html_help_style;
84
-
85
-    /**
86
-     * Stores whether or not this input's response is required.
87
-     * Because certain styling elements may also want to know that this
88
-     * input is required etc.
89
-     *
90
-     * @var boolean
91
-     */
92
-    protected $_required;
93
-
94
-    /**
95
-     * css class added to required inputs
96
-     *
97
-     * @var string
98
-     */
99
-    protected $_required_css_class = 'ee-required';
100
-
101
-    /**
102
-     * css styles applied to button type inputs
103
-     *
104
-     * @var string
105
-     */
106
-    protected $_button_css_attributes;
107
-
108
-    /**
109
-     * The raw data submitted for this, like in the $_POST super global.
110
-     * Generally unsafe for usage in client code
111
-     *
112
-     * @var mixed string or array
113
-     */
114
-    protected $_raw_value;
115
-
116
-    /**
117
-     * Value normalized according to the input's normalization strategy.
118
-     * The normalization strategy dictates whether this is a string, int, float,
119
-     * boolean, or array of any of those.
120
-     *
121
-     * @var mixed
122
-     */
123
-    protected $_normalized_value;
124
-
125
-
126
-    /**
127
-     * Normalized default value either initially set on the input, or provided by calling
128
-     * set_default().
129
-     * @var mixed
130
-     */
131
-    protected $_default;
132
-
133
-    /**
134
-     * Strategy used for displaying this field.
135
-     * Child classes must use _get_display_strategy to access it.
136
-     *
137
-     * @var EE_Display_Strategy_Base
138
-     */
139
-    private $_display_strategy;
140
-
141
-    /**
142
-     * Gets all the validation strategies used on this field
143
-     *
144
-     * @var EE_Validation_Strategy_Base[]
145
-     */
146
-    private $_validation_strategies = array();
147
-
148
-    /**
149
-     * The normalization strategy for this field
150
-     *
151
-     * @var EE_Normalization_Strategy_Base
152
-     */
153
-    private $_normalization_strategy;
154
-
155
-    /**
156
-     * Strategy for removing sensitive data after we're done with the form input
157
-     *
158
-     * @var EE_Sensitive_Data_Removal_Base
159
-     */
160
-    protected $_sensitive_data_removal_strategy;
161
-
162
-    /**
163
-     * Whether this input has been disabled or not.
164
-     * If it's disabled while rendering, an extra hidden input is added that indicates it has been knowingly disabled.
165
-     * (Client-side code that wants to dynamically disable it must also add this hidden input).
166
-     * When the form is submitted, if the input is disabled in the PHP formsection, then input is ignored.
167
-     * If the input is missing from the $_REQUEST data but the hidden input indicating the input is disabled, then the input is again ignored.
168
-     *
169
-     * @var boolean
170
-     */
171
-    protected $disabled = false;
172
-
173
-
174
-
175
-    /**
176
-     * @param array                         $input_args       {
177
-     * @type string                         $html_name        the html name for the input
178
-     * @type string                         $html_label_id    the id attribute to give to the html label tag
179
-     * @type string                         $html_label_class the class attribute to give to the html label tag
180
-     * @type string                         $html_label_style the style attribute to give ot teh label tag
181
-     * @type string                         $html_label_text  the text to put in the label tag
182
-     * @type string                         $html_label       the full html label. If used,
183
-     *                                                        all other html_label_* args are invalid
184
-     * @type string                         $html_help_text   text to put in help element
185
-     * @type string                         $html_help_style  style attribute to give to teh help element
186
-     * @type string                         $html_help_class  class attribute to give to the help element
187
-     * @type string                         $default          default value NORMALIZED (eg, if providing the default
188
-     *       for a Yes_No_Input, you should provide TRUE or FALSE, not '1' or '0')
189
-     * @type EE_Display_Strategy_Base       $display          strategy
190
-     * @type EE_Normalization_Strategy_Base $normalization_strategy
191
-     * @type EE_Validation_Strategy_Base[]  $validation_strategies
192
-     * @type boolean                        $ignore_input special argument which can be used to avoid adding any validation strategies,
193
-     *                                                    and sets the normalization strategy to the Null normalization. This is good
194
-     *                                                    when you want the input to be totally ignored server-side (like when using
195
-     *                                                    React.js form inputs)
196
-     *                                                        }
197
-     */
198
-    public function __construct($input_args = array())
199
-    {
200
-        $input_args = (array) apply_filters('FHEE__EE_Form_Input_Base___construct__input_args', $input_args, $this);
201
-        // the following properties must be cast as arrays
202
-        if (isset($input_args['validation_strategies'])) {
203
-            foreach ((array) $input_args['validation_strategies'] as $validation_strategy) {
204
-                if ($validation_strategy instanceof EE_Validation_Strategy_Base && empty($input_args['ignore_input'])) {
205
-                    $this->_validation_strategies[ get_class($validation_strategy) ] = $validation_strategy;
206
-                }
207
-            }
208
-            unset($input_args['validation_strategies']);
209
-        }
210
-        if (isset($input_args['ignore_input'])) {
211
-            $this->_validation_strategies = array();
212
-        }
213
-        // loop thru incoming options
214
-        foreach ($input_args as $key => $value) {
215
-            // add underscore to $key to match property names
216
-            $_key = '_' . $key;
217
-            if (property_exists($this, $_key)) {
218
-                $this->{$_key} = $value;
219
-            }
220
-        }
221
-        // ensure that "required" is set correctly
222
-        $this->set_required(
223
-            $this->_required,
224
-            isset($input_args['required_validation_error_message'])
225
-            ? $input_args['required_validation_error_message']
226
-            : null
227
-        );
228
-        // $this->_html_name_specified = isset( $input_args['html_name'] ) ? TRUE : FALSE;
229
-        $this->_display_strategy->_construct_finalize($this);
230
-        foreach ($this->_validation_strategies as $validation_strategy) {
231
-            $validation_strategy->_construct_finalize($this);
232
-        }
233
-        if (isset($input_args['ignore_input'])) {
234
-            $this->_normalization_strategy = new EE_Null_Normalization();
235
-        }
236
-        if (! $this->_normalization_strategy) {
237
-                $this->_normalization_strategy = new EE_Text_Normalization();
238
-        }
239
-        $this->_normalization_strategy->_construct_finalize($this);
240
-        // at least we can use the normalization strategy to populate the default
241
-        if (isset($input_args['default'])) {
242
-            $this->set_default($input_args['default']);
243
-            unset($input_args['default']);
244
-        }
245
-        if (! $this->_sensitive_data_removal_strategy) {
246
-            $this->_sensitive_data_removal_strategy = new EE_No_Sensitive_Data_Removal();
247
-        }
248
-        $this->_sensitive_data_removal_strategy->_construct_finalize($this);
249
-        parent::__construct($input_args);
250
-    }
251
-
252
-
253
-
254
-    /**
255
-     * Sets the html_name to its default value, if none was specified in teh constructor.
256
-     * Calculation involves using the name and the parent's html_name
257
-     *
258
-     * @throws \EE_Error
259
-     */
260
-    protected function _set_default_html_name_if_empty()
261
-    {
262
-        if (! $this->_html_name) {
263
-            $this->_html_name = $this->name();
264
-            if ($this->_parent_section && $this->_parent_section instanceof EE_Form_Section_Proper) {
265
-                $this->_html_name = $this->_parent_section->html_name_prefix() . "[{$this->name()}]";
266
-            }
267
-        }
268
-    }
269
-
270
-
271
-
272
-    /**
273
-     * @param $parent_form_section
274
-     * @param $name
275
-     * @throws \EE_Error
276
-     */
277
-    public function _construct_finalize($parent_form_section, $name)
278
-    {
279
-        parent::_construct_finalize($parent_form_section, $name);
280
-        if ($this->_html_label === null && $this->_html_label_text === null) {
281
-            $this->_html_label_text = ucwords(str_replace("_", " ", $name));
282
-        }
283
-        do_action('AHEE__EE_Form_Input_Base___construct_finalize__end', $this, $parent_form_section, $name);
284
-    }
285
-
286
-
287
-
288
-    /**
289
-     * Returns the strategy for displaying this form input. If none is set, throws an exception.
290
-     *
291
-     * @return EE_Display_Strategy_Base
292
-     * @throws EE_Error
293
-     */
294
-    protected function _get_display_strategy()
295
-    {
296
-        $this->ensure_construct_finalized_called();
297
-        if (! $this->_display_strategy || ! $this->_display_strategy instanceof EE_Display_Strategy_Base) {
298
-            throw new EE_Error(
299
-                sprintf(
300
-                    __(
301
-                        "Cannot get display strategy for form input with name %s and id %s, because it has not been set in the constructor",
302
-                        "event_espresso"
303
-                    ),
304
-                    $this->html_name(),
305
-                    $this->html_id()
306
-                )
307
-            );
308
-        } else {
309
-            return $this->_display_strategy;
310
-        }
311
-    }
312
-
313
-
314
-
315
-    /**
316
-     * Sets the display strategy.
317
-     *
318
-     * @param EE_Display_Strategy_Base $strategy
319
-     */
320
-    protected function _set_display_strategy(EE_Display_Strategy_Base $strategy)
321
-    {
322
-        $this->_display_strategy = $strategy;
323
-    }
324
-
325
-
326
-
327
-    /**
328
-     * Sets the sanitization strategy
329
-     *
330
-     * @param EE_Normalization_Strategy_Base $strategy
331
-     */
332
-    protected function _set_normalization_strategy(EE_Normalization_Strategy_Base $strategy)
333
-    {
334
-        $this->_normalization_strategy = $strategy;
335
-    }
336
-
337
-
338
-
339
-    /**
340
-     * Gets sensitive_data_removal_strategy
341
-     *
342
-     * @return EE_Sensitive_Data_Removal_Base
343
-     */
344
-    public function get_sensitive_data_removal_strategy()
345
-    {
346
-        return $this->_sensitive_data_removal_strategy;
347
-    }
348
-
349
-
350
-
351
-    /**
352
-     * Sets sensitive_data_removal_strategy
353
-     *
354
-     * @param EE_Sensitive_Data_Removal_Base $sensitive_data_removal_strategy
355
-     * @return boolean
356
-     */
357
-    public function set_sensitive_data_removal_strategy($sensitive_data_removal_strategy)
358
-    {
359
-        $this->_sensitive_data_removal_strategy = $sensitive_data_removal_strategy;
360
-    }
361
-
362
-
363
-
364
-    /**
365
-     * Gets the display strategy for this input
366
-     *
367
-     * @return EE_Display_Strategy_Base
368
-     */
369
-    public function get_display_strategy()
370
-    {
371
-        return $this->_display_strategy;
372
-    }
373
-
374
-
375
-
376
-    /**
377
-     * Overwrites the display strategy
378
-     *
379
-     * @param EE_Display_Strategy_Base $display_strategy
380
-     */
381
-    public function set_display_strategy($display_strategy)
382
-    {
383
-        $this->_display_strategy = $display_strategy;
384
-        $this->_display_strategy->_construct_finalize($this);
385
-    }
386
-
387
-
388
-
389
-    /**
390
-     * Gets the normalization strategy set on this input
391
-     *
392
-     * @return EE_Normalization_Strategy_Base
393
-     */
394
-    public function get_normalization_strategy()
395
-    {
396
-        return $this->_normalization_strategy;
397
-    }
398
-
399
-
400
-
401
-    /**
402
-     * Overwrites the normalization strategy
403
-     *
404
-     * @param EE_Normalization_Strategy_Base $normalization_strategy
405
-     */
406
-    public function set_normalization_strategy($normalization_strategy)
407
-    {
408
-        $this->_normalization_strategy = $normalization_strategy;
409
-        $this->_normalization_strategy->_construct_finalize($this);
410
-    }
411
-
412
-
413
-
414
-    /**
415
-     * Returns all teh validation strategies which apply to this field, numerically indexed
416
-     *
417
-     * @return EE_Validation_Strategy_Base[]
418
-     */
419
-    public function get_validation_strategies()
420
-    {
421
-        return $this->_validation_strategies;
422
-    }
423
-
424
-
425
-
426
-    /**
427
-     * Adds this strategy to the field so it will be used in both JS validation and server-side validation
428
-     *
429
-     * @param EE_Validation_Strategy_Base $validation_strategy
430
-     * @return void
431
-     */
432
-    protected function _add_validation_strategy(EE_Validation_Strategy_Base $validation_strategy)
433
-    {
434
-        $validation_strategy->_construct_finalize($this);
435
-        $this->_validation_strategies[] = $validation_strategy;
436
-    }
437
-
438
-
439
-
440
-    /**
441
-     * Adds a new validation strategy onto the form input
442
-     *
443
-     * @param EE_Validation_Strategy_Base $validation_strategy
444
-     * @return void
445
-     */
446
-    public function add_validation_strategy(EE_Validation_Strategy_Base $validation_strategy)
447
-    {
448
-        $this->_add_validation_strategy($validation_strategy);
449
-    }
450
-
451
-
452
-
453
-    /**
454
-     * The classname of the validation strategy to remove
455
-     *
456
-     * @param string $validation_strategy_classname
457
-     */
458
-    public function remove_validation_strategy($validation_strategy_classname)
459
-    {
460
-        foreach ($this->_validation_strategies as $key => $validation_strategy) {
461
-            if ($validation_strategy instanceof $validation_strategy_classname
462
-                || is_subclass_of($validation_strategy, $validation_strategy_classname)
463
-            ) {
464
-                unset($this->_validation_strategies[ $key ]);
465
-            }
466
-        }
467
-    }
468
-
469
-
470
-
471
-    /**
472
-     * returns true if input employs any of the validation strategy defined by the supplied array of classnames
473
-     *
474
-     * @param array $validation_strategy_classnames
475
-     * @return bool
476
-     */
477
-    public function has_validation_strategy($validation_strategy_classnames)
478
-    {
479
-        $validation_strategy_classnames = is_array($validation_strategy_classnames)
480
-            ? $validation_strategy_classnames
481
-            : array($validation_strategy_classnames);
482
-        foreach ($this->_validation_strategies as $key => $validation_strategy) {
483
-            if (in_array($key, $validation_strategy_classnames)) {
484
-                return true;
485
-            }
486
-        }
487
-        return false;
488
-    }
489
-
490
-
491
-
492
-    /**
493
-     * Gets the HTML
494
-     *
495
-     * @return string
496
-     */
497
-    public function get_html()
498
-    {
499
-        return $this->_parent_section->get_html_for_input($this);
500
-    }
501
-
502
-
503
-
504
-    /**
505
-     * Gets the HTML for the input itself (no label or errors) according to the
506
-     * input's display strategy
507
-     * Makes sure the JS and CSS are enqueued for it
508
-     *
509
-     * @return string
510
-     * @throws \EE_Error
511
-     */
512
-    public function get_html_for_input()
513
-    {
514
-        return $this->_form_html_filter
515
-            ? $this->_form_html_filter->filterHtml(
516
-                $this->_get_display_strategy()->display(),
517
-                $this
518
-            )
519
-            : $this->_get_display_strategy()->display();
520
-    }
521
-
522
-
523
-
524
-    /**
525
-     * @return string
526
-     */
527
-    public function html_other_attributes()
528
-    {
529
-        return ! empty($this->_html_other_attributes) ? ' ' . $this->_html_other_attributes : '';
530
-    }
531
-
532
-
533
-
534
-    /**
535
-     * @param string $html_other_attributes
536
-     */
537
-    public function set_html_other_attributes($html_other_attributes)
538
-    {
539
-        $this->_html_other_attributes = $html_other_attributes;
540
-    }
541
-
542
-
543
-
544
-    /**
545
-     * Gets the HTML for displaying the label for this form input
546
-     * according to the form section's layout strategy
547
-     *
548
-     * @return string
549
-     */
550
-    public function get_html_for_label()
551
-    {
552
-        return $this->_parent_section->get_layout_strategy()->display_label($this);
553
-    }
554
-
555
-
556
-
557
-    /**
558
-     * Gets the HTML for displaying the errors section for this form input
559
-     * according to the form section's layout strategy
560
-     *
561
-     * @return string
562
-     */
563
-    public function get_html_for_errors()
564
-    {
565
-        return $this->_parent_section->get_layout_strategy()->display_errors($this);
566
-    }
567
-
568
-
569
-
570
-    /**
571
-     * Gets the HTML for displaying the help text for this form input
572
-     * according to the form section's layout strategy
573
-     *
574
-     * @return string
575
-     */
576
-    public function get_html_for_help()
577
-    {
578
-        return $this->_parent_section->get_layout_strategy()->display_help_text($this);
579
-    }
580
-
581
-
582
-
583
-    /**
584
-     * Validates the input's sanitized value (assumes _sanitize() has already been called)
585
-     * and returns whether or not the form input's submitted value is value
586
-     *
587
-     * @return boolean
588
-     */
589
-    protected function _validate()
590
-    {
591
-        if ($this->isDisabled()) {
592
-            return true;
593
-        }
594
-        foreach ($this->_validation_strategies as $validation_strategy) {
595
-            if ($validation_strategy instanceof EE_Validation_Strategy_Base) {
596
-                try {
597
-                    $validation_strategy->validate($this->normalized_value());
598
-                } catch (EE_Validation_Error $e) {
599
-                    $this->add_validation_error($e);
600
-                }
601
-            }
602
-        }
603
-        if ($this->get_validation_errors()) {
604
-            return false;
605
-        } else {
606
-            return true;
607
-        }
608
-    }
609
-
610
-
611
-
612
-    /**
613
-     * Performs basic sanitization on this value. But what sanitization can be performed anyways?
614
-     * This value MIGHT be allowed to have tags, so we can't really remove them.
615
-     *
616
-     * @param string $value
617
-     * @return null|string
618
-     */
619
-    protected function _sanitize($value)
620
-    {
621
-        return $value !== null ? stripslashes(html_entity_decode(trim($value))) : null;
622
-    }
623
-
624
-
625
-
626
-    /**
627
-     * Picks out the form value that relates to this form input,
628
-     * and stores it as the sanitized value on the form input, and sets the normalized value.
629
-     * Returns whether or not any validation errors occurred
630
-     *
631
-     * @param array $req_data like $_POST
632
-     * @return boolean whether or not there was an error
633
-     * @throws \EE_Error
634
-     */
635
-    protected function _normalize($req_data)
636
-    {
637
-        // any existing validation errors don't apply so clear them
638
-        $this->_validation_errors = array();
639
-        // if the input is disabled, ignore whatever input was sent in
640
-        if ($this->isDisabled()) {
641
-            $this->_set_raw_value(null);
642
-            $this->_set_normalized_value($this->get_default());
643
-            return false;
644
-        }
645
-        try {
646
-            $raw_input = $this->find_form_data_for_this_section($req_data);
647
-            // super simple sanitization for now
648
-            if (is_array($raw_input)) {
649
-                $raw_value = array();
650
-                foreach ($raw_input as $key => $value) {
651
-                    $raw_value[ $key ] = $this->_sanitize($value);
652
-                }
653
-                $this->_set_raw_value($raw_value);
654
-            } else {
655
-                $this->_set_raw_value($this->_sanitize($raw_input));
656
-            }
657
-            // we want to mostly leave the input alone in case we need to re-display it to the user
658
-            $this->_set_normalized_value($this->_normalization_strategy->normalize($this->raw_value()));
659
-            return false;
660
-        } catch (EE_Validation_Error $e) {
661
-            $this->add_validation_error($e);
662
-            return true;
663
-        }
664
-    }
665
-
666
-
667
-
668
-    /**
669
-     * @return string
670
-     */
671
-    public function html_name()
672
-    {
673
-        $this->_set_default_html_name_if_empty();
674
-        return $this->_html_name;
675
-    }
676
-
677
-
678
-
679
-    /**
680
-     * @return string
681
-     */
682
-    public function html_label_id()
683
-    {
684
-        return ! empty($this->_html_label_id) ? $this->_html_label_id : $this->html_id() . '-lbl';
685
-    }
686
-
687
-
688
-
689
-    /**
690
-     * @return string
691
-     */
692
-    public function html_label_class()
693
-    {
694
-        return $this->_html_label_class;
695
-    }
696
-
697
-
698
-
699
-    /**
700
-     * @return string
701
-     */
702
-    public function html_label_style()
703
-    {
704
-        return $this->_html_label_style;
705
-    }
706
-
707
-
708
-
709
-    /**
710
-     * @return string
711
-     */
712
-    public function html_label_text()
713
-    {
714
-        return $this->_html_label_text;
715
-    }
716
-
717
-
718
-
719
-    /**
720
-     * @return string
721
-     */
722
-    public function html_help_text()
723
-    {
724
-        return $this->_html_help_text;
725
-    }
726
-
727
-
728
-
729
-    /**
730
-     * @return string
731
-     */
732
-    public function html_help_class()
733
-    {
734
-        return $this->_html_help_class;
735
-    }
736
-
737
-
738
-
739
-    /**
740
-     * @return string
741
-     */
742
-    public function html_help_style()
743
-    {
744
-        return $this->_html_style;
745
-    }
746
-
747
-
748
-
749
-    /**
750
-     * returns the raw, UNSAFE, input, almost exactly as the user submitted it.
751
-     * Please note that almost all client code should instead use the normalized_value;
752
-     * or possibly raw_value_in_form (which prepares the string for displaying in an HTML attribute on a tag,
753
-     * mostly by escaping quotes)
754
-     * Note, we do not store the exact original value sent in the user's request because
755
-     * it may have malicious content, and we MIGHT want to store the form input in a transient or something...
756
-     * in which case, we would have stored the malicious content to our database.
757
-     *
758
-     * @return string
759
-     */
760
-    public function raw_value()
761
-    {
762
-        return $this->_raw_value;
763
-    }
764
-
765
-
766
-
767
-    /**
768
-     * Returns a string safe to usage in form inputs when displaying, because
769
-     * it escapes all html entities
770
-     *
771
-     * @return string
772
-     */
773
-    public function raw_value_in_form()
774
-    {
775
-        return htmlentities($this->raw_value(), ENT_QUOTES, 'UTF-8');
776
-    }
777
-
778
-
779
-
780
-    /**
781
-     * returns the value after it's been sanitized, and then converted into it's proper type
782
-     * in PHP. Eg, a string, an int, an array,
783
-     *
784
-     * @return mixed
785
-     */
786
-    public function normalized_value()
787
-    {
788
-        return $this->_normalized_value;
789
-    }
790
-
791
-
792
-
793
-    /**
794
-     * Returns the normalized value is a presentable way. By default this is just
795
-     * the normalized value by itself, but it can be overridden for when that's not
796
-     * the best thing to display
797
-     *
798
-     * @return string
799
-     */
800
-    public function pretty_value()
801
-    {
802
-        return $this->_normalized_value;
803
-    }
804
-
805
-
806
-
807
-    /**
808
-     * When generating the JS for the jquery validation rules like<br>
809
-     * <code>$( "#myform" ).validate({
810
-     * rules: {
811
-     * password: "required",
812
-     * password_again: {
813
-     * equalTo: "#password"
814
-     * }
815
-     * }
816
-     * });</code>
817
-     * if this field had the name 'password_again', it should return
818
-     * <br><code>password_again: {
819
-     * equalTo: "#password"
820
-     * }</code>
821
-     *
822
-     * @return array
823
-     */
824
-    public function get_jquery_validation_rules()
825
-    {
826
-        $jquery_validation_js = array();
827
-        $jquery_validation_rules = array();
828
-        foreach ($this->get_validation_strategies() as $validation_strategy) {
829
-            $jquery_validation_rules = array_replace_recursive(
830
-                $jquery_validation_rules,
831
-                $validation_strategy->get_jquery_validation_rule_array()
832
-            );
833
-        }
834
-        if (! empty($jquery_validation_rules)) {
835
-            foreach ($this->get_display_strategy()->get_html_input_ids(true) as $html_id_with_pound_sign) {
836
-                $jquery_validation_js[ $html_id_with_pound_sign ] = $jquery_validation_rules;
837
-            }
838
-        }
839
-        return $jquery_validation_js;
840
-    }
841
-
842
-
843
-
844
-    /**
845
-     * Sets the input's default value for use in displaying in the form. Note: value should be
846
-     * normalized (Eg, if providing a default of ra Yes_NO_Input you would provide TRUE or FALSE, not '1' or '0')
847
-     *
848
-     * @param mixed $value
849
-     * @return void
850
-     */
851
-    public function set_default($value)
852
-    {
853
-        $this->_default = $value;
854
-        $this->_set_normalized_value($value);
855
-        $this->_set_raw_value($value);
856
-    }
857
-
858
-
859
-
860
-    /**
861
-     * Sets the normalized value on this input
862
-     *
863
-     * @param mixed $value
864
-     */
865
-    protected function _set_normalized_value($value)
866
-    {
867
-        $this->_normalized_value = $value;
868
-    }
869
-
870
-
871
-
872
-    /**
873
-     * Sets the raw value on this input (ie, exactly as the user submitted it)
874
-     *
875
-     * @param mixed $value
876
-     */
877
-    protected function _set_raw_value($value)
878
-    {
879
-        $this->_raw_value = $this->_normalization_strategy->unnormalize($value);
880
-    }
881
-
882
-
883
-
884
-    /**
885
-     * Sets the HTML label text after it has already been defined
886
-     *
887
-     * @param string $label
888
-     * @return void
889
-     */
890
-    public function set_html_label_text($label)
891
-    {
892
-        $this->_html_label_text = $label;
893
-    }
894
-
895
-
896
-
897
-    /**
898
-     * Sets whether or not this field is required, and adjusts the validation strategy.
899
-     * If you want to use the EE_Conditionally_Required_Validation_Strategy,
900
-     * please add it as a validation strategy using add_validation_strategy as normal
901
-     *
902
-     * @param boolean $required boolean
903
-     * @param null    $required_text
904
-     */
905
-    public function set_required($required = true, $required_text = null)
906
-    {
907
-        $required = filter_var($required, FILTER_VALIDATE_BOOLEAN);
908
-        // whether $required is a string or a boolean, we want to add a required validation strategy
909
-        if ($required) {
910
-            $this->_add_validation_strategy(new EE_Required_Validation_Strategy($required_text));
911
-        } else {
912
-            $this->remove_validation_strategy('EE_Required_Validation_Strategy');
913
-        }
914
-        $this->_required = $required;
915
-    }
916
-
917
-
918
-
919
-    /**
920
-     * Returns whether or not this field is required
921
-     *
922
-     * @return boolean
923
-     */
924
-    public function required()
925
-    {
926
-        return $this->_required;
927
-    }
928
-
929
-
930
-
931
-    /**
932
-     * @param string $required_css_class
933
-     */
934
-    public function set_required_css_class($required_css_class)
935
-    {
936
-        $this->_required_css_class = $required_css_class;
937
-    }
938
-
939
-
940
-
941
-    /**
942
-     * @return string
943
-     */
944
-    public function required_css_class()
945
-    {
946
-        return $this->_required_css_class;
947
-    }
948
-
949
-
950
-
951
-    /**
952
-     * @param bool $add_required
953
-     * @return string
954
-     */
955
-    public function html_class($add_required = false)
956
-    {
957
-        return $add_required && $this->required()
958
-            ? $this->required_css_class() . ' ' . $this->_html_class
959
-            : $this->_html_class;
960
-    }
961
-
962
-
963
-    /**
964
-     * Sets the help text, in case
965
-     *
966
-     * @param string $text
967
-     */
968
-    public function set_html_help_text($text)
969
-    {
970
-        $this->_html_help_text = $text;
971
-    }
972
-
973
-
974
-
975
-    /**
976
-     * Uses the sensitive data removal strategy to remove the sensitive data from this
977
-     * input. If there is any kind of sensitive data removal on this input, we clear
978
-     * out the raw value completely
979
-     *
980
-     * @return void
981
-     */
982
-    public function clean_sensitive_data()
983
-    {
984
-        // if we do ANY kind of sensitive data removal on this, then just clear out the raw value
985
-        // if we need more logic than this we'll make a strategy for it
986
-        if ($this->_sensitive_data_removal_strategy
987
-            && ! $this->_sensitive_data_removal_strategy instanceof EE_No_Sensitive_Data_Removal
988
-        ) {
989
-            $this->_set_raw_value(null);
990
-        }
991
-        // and clean the normalized value according to the appropriate strategy
992
-        $this->_set_normalized_value(
993
-            $this->get_sensitive_data_removal_strategy()->remove_sensitive_data(
994
-                $this->_normalized_value
995
-            )
996
-        );
997
-    }
998
-
999
-
1000
-
1001
-    /**
1002
-     * @param bool   $primary
1003
-     * @param string $button_size
1004
-     * @param string $other_attributes
1005
-     */
1006
-    public function set_button_css_attributes($primary = true, $button_size = '', $other_attributes = '')
1007
-    {
1008
-        $button_css_attributes = 'button';
1009
-        $button_css_attributes .= $primary === true ? ' button-primary' : ' button-secondary';
1010
-        switch ($button_size) {
1011
-            case 'xs':
1012
-            case 'extra-small':
1013
-                $button_css_attributes .= ' button-xs';
1014
-                break;
1015
-            case 'sm':
1016
-            case 'small':
1017
-                $button_css_attributes .= ' button-sm';
1018
-                break;
1019
-            case 'lg':
1020
-            case 'large':
1021
-                $button_css_attributes .= ' button-lg';
1022
-                break;
1023
-            case 'block':
1024
-                $button_css_attributes .= ' button-block';
1025
-                break;
1026
-            case 'md':
1027
-            case 'medium':
1028
-            default:
1029
-                $button_css_attributes .= '';
1030
-        }
1031
-        $this->_button_css_attributes .= ! empty($other_attributes)
1032
-            ? $button_css_attributes . ' ' . $other_attributes
1033
-            : $button_css_attributes;
1034
-    }
1035
-
1036
-
1037
-
1038
-    /**
1039
-     * @return string
1040
-     */
1041
-    public function button_css_attributes()
1042
-    {
1043
-        if (empty($this->_button_css_attributes)) {
1044
-            $this->set_button_css_attributes();
1045
-        }
1046
-        return $this->_button_css_attributes;
1047
-    }
1048
-
1049
-
1050
-
1051
-    /**
1052
-     * find_form_data_for_this_section
1053
-     * using this section's name and its parents, finds the value of the form data that corresponds to it.
1054
-     * For example, if this form section's HTML name is my_form[subform][form_input_1],
1055
-     * then it's value should be in $_REQUEST at $_REQUEST['my_form']['subform']['form_input_1'].
1056
-     * (If that doesn't exist, we also check for this subsection's name
1057
-     * at the TOP LEVEL of the request data. Eg $_REQUEST['form_input_1'].)
1058
-     * This function finds its value in the form.
1059
-     *
1060
-     * @param array $req_data
1061
-     * @return mixed whatever the raw value of this form section is in the request data
1062
-     * @throws \EE_Error
1063
-     */
1064
-    public function find_form_data_for_this_section($req_data)
1065
-    {
1066
-        $name_parts = $this->getInputNameParts();
1067
-        // now get the value for the input
1068
-        $value = $this->findRequestForSectionUsingNameParts($name_parts, $req_data);
1069
-        // check if this thing's name is at the TOP level of the request data
1070
-        if ($value === null && isset($req_data[ $this->name() ])) {
1071
-            $value = $req_data[ $this->name() ];
1072
-        }
1073
-        return $value;
1074
-    }
1075
-
1076
-
1077
-
1078
-    /**
1079
-     * If this input's name is something like "foo[bar][baz]"
1080
-     * returns an array like `array('foo','bar',baz')`
1081
-     * @return array
1082
-     */
1083
-    protected function getInputNameParts()
1084
-    {
1085
-        // break up the html name by "[]"
1086
-        if (strpos($this->html_name(), '[') !== false) {
1087
-            $before_any_brackets = substr($this->html_name(), 0, strpos($this->html_name(), '['));
1088
-        } else {
1089
-            $before_any_brackets = $this->html_name();
1090
-        }
1091
-        // grab all of the segments
1092
-        preg_match_all('~\[([^]]*)\]~', $this->html_name(), $matches);
1093
-        if (isset($matches[1]) && is_array($matches[1])) {
1094
-            $name_parts = $matches[1];
1095
-            array_unshift($name_parts, $before_any_brackets);
1096
-        } else {
1097
-            $name_parts = array($before_any_brackets);
1098
-        }
1099
-        return $name_parts;
1100
-    }
1101
-
1102
-
1103
-
1104
-    /**
1105
-     * @param array $html_name_parts
1106
-     * @param array $req_data
1107
-     * @return array | NULL
1108
-     */
1109
-    public function findRequestForSectionUsingNameParts($html_name_parts, $req_data)
1110
-    {
1111
-        $first_part_to_consider = array_shift($html_name_parts);
1112
-        if (isset($req_data[ $first_part_to_consider ])) {
1113
-            if (empty($html_name_parts)) {
1114
-                return $req_data[ $first_part_to_consider ];
1115
-            } else {
1116
-                return $this->findRequestForSectionUsingNameParts(
1117
-                    $html_name_parts,
1118
-                    $req_data[ $first_part_to_consider ]
1119
-                );
1120
-            }
1121
-        } else {
1122
-            return null;
1123
-        }
1124
-    }
1125
-
1126
-
1127
-
1128
-    /**
1129
-     * Checks if this form input's data is in the request data
1130
-     *
1131
-     * @param array $req_data like $_POST
1132
-     * @return boolean
1133
-     * @throws \EE_Error
1134
-     */
1135
-    public function form_data_present_in($req_data = null)
1136
-    {
1137
-        if ($req_data === null) {
1138
-            $req_data = $_POST;
1139
-        }
1140
-        $checked_value = $this->find_form_data_for_this_section($req_data);
1141
-        if ($checked_value !== null) {
1142
-            return true;
1143
-        } else {
1144
-            return false;
1145
-        }
1146
-    }
1147
-
1148
-
1149
-
1150
-    /**
1151
-     * Overrides parent to add js data from validation and display strategies
1152
-     *
1153
-     * @param array $form_other_js_data
1154
-     * @return array
1155
-     */
1156
-    public function get_other_js_data($form_other_js_data = array())
1157
-    {
1158
-        $form_other_js_data = $this->get_other_js_data_from_strategies($form_other_js_data);
1159
-        return $form_other_js_data;
1160
-    }
1161
-
1162
-
1163
-
1164
-    /**
1165
-     * Gets other JS data for localization from this input's strategies, like
1166
-     * the validation strategies and the display strategy
1167
-     *
1168
-     * @param array $form_other_js_data
1169
-     * @return array
1170
-     */
1171
-    public function get_other_js_data_from_strategies($form_other_js_data = array())
1172
-    {
1173
-        $form_other_js_data = $this->get_display_strategy()->get_other_js_data($form_other_js_data);
1174
-        foreach ($this->get_validation_strategies() as $validation_strategy) {
1175
-            $form_other_js_data = $validation_strategy->get_other_js_data($form_other_js_data);
1176
-        }
1177
-        return $form_other_js_data;
1178
-    }
1179
-
1180
-
1181
-
1182
-    /**
1183
-     * Override parent because we want to give our strategies an opportunity to enqueue some js and css
1184
-     *
1185
-     * @return void
1186
-     */
1187
-    public function enqueue_js()
1188
-    {
1189
-        // ask our display strategy and validation strategies if they have js to enqueue
1190
-        $this->enqueue_js_from_strategies();
1191
-    }
1192
-
1193
-
1194
-
1195
-    /**
1196
-     * Tells strategies when its ok to enqueue their js and css
1197
-     *
1198
-     * @return void
1199
-     */
1200
-    public function enqueue_js_from_strategies()
1201
-    {
1202
-        $this->get_display_strategy()->enqueue_js();
1203
-        foreach ($this->get_validation_strategies() as $validation_strategy) {
1204
-            $validation_strategy->enqueue_js();
1205
-        }
1206
-    }
1207
-
1208
-
1209
-
1210
-    /**
1211
-     * Gets the default value set on the input (not the current value, which may have been
1212
-     * changed because of a form submission). If no default was set, this us null.
1213
-     * @return mixed
1214
-     */
1215
-    public function get_default()
1216
-    {
1217
-        return $this->_default;
1218
-    }
1219
-
1220
-
1221
-
1222
-    /**
1223
-     * Makes this input disabled. That means it will have the HTML attribute 'disabled="disabled"',
1224
-     * and server-side if any input was received it will be ignored
1225
-     */
1226
-    public function disable($disable = true)
1227
-    {
1228
-        $disabled_attribute = ' disabled="disabled"';
1229
-        $this->disabled = filter_var($disable, FILTER_VALIDATE_BOOLEAN);
1230
-        if ($this->disabled) {
1231
-            if (strpos($this->_other_html_attributes, $disabled_attribute) === false) {
1232
-                $this->_other_html_attributes .= $disabled_attribute;
1233
-            }
1234
-            $this->_set_normalized_value($this->get_default());
1235
-        } else {
1236
-            $this->_other_html_attributes = str_replace($disabled_attribute, '', $this->_other_html_attributes);
1237
-        }
1238
-    }
1239
-
1240
-
1241
-
1242
-    /**
1243
-     * Returns whether or not this input is currently disabled.
1244
-     * @return bool
1245
-     */
1246
-    public function isDisabled()
1247
-    {
1248
-        return $this->disabled;
1249
-    }
14
+	/**
15
+	 * the input's name attribute
16
+	 *
17
+	 * @var string
18
+	 */
19
+	protected $_html_name;
20
+
21
+	/**
22
+	 * id for the html label tag
23
+	 *
24
+	 * @var string
25
+	 */
26
+	protected $_html_label_id;
27
+
28
+	/**
29
+	 * class for teh html label tag
30
+	 *
31
+	 * @var string
32
+	 */
33
+	protected $_html_label_class;
34
+
35
+	/**
36
+	 * any additional html attributes that you may want to add
37
+	 *
38
+	 * @var string
39
+	 */
40
+	protected $_html_other_attributes;
41
+
42
+	/**
43
+	 * style for teh html label tag
44
+	 *
45
+	 * @var string
46
+	 */
47
+	protected $_html_label_style;
48
+
49
+	/**
50
+	 * text to be placed in the html label
51
+	 *
52
+	 * @var string
53
+	 */
54
+	protected $_html_label_text;
55
+
56
+	/**
57
+	 * the full html label. If used, all other html_label_* properties are invalid
58
+	 *
59
+	 * @var string
60
+	 */
61
+	protected $_html_label;
62
+
63
+	/**
64
+	 * HTML to use for help text (normally placed below form input), in a span which normally
65
+	 * has a class of 'description'
66
+	 *
67
+	 * @var string
68
+	 */
69
+	protected $_html_help_text;
70
+
71
+	/**
72
+	 * CSS classes for displaying the help span
73
+	 *
74
+	 * @var string
75
+	 */
76
+	protected $_html_help_class = 'description';
77
+
78
+	/**
79
+	 * CSS to put in the style attribute on the help span
80
+	 *
81
+	 * @var string
82
+	 */
83
+	protected $_html_help_style;
84
+
85
+	/**
86
+	 * Stores whether or not this input's response is required.
87
+	 * Because certain styling elements may also want to know that this
88
+	 * input is required etc.
89
+	 *
90
+	 * @var boolean
91
+	 */
92
+	protected $_required;
93
+
94
+	/**
95
+	 * css class added to required inputs
96
+	 *
97
+	 * @var string
98
+	 */
99
+	protected $_required_css_class = 'ee-required';
100
+
101
+	/**
102
+	 * css styles applied to button type inputs
103
+	 *
104
+	 * @var string
105
+	 */
106
+	protected $_button_css_attributes;
107
+
108
+	/**
109
+	 * The raw data submitted for this, like in the $_POST super global.
110
+	 * Generally unsafe for usage in client code
111
+	 *
112
+	 * @var mixed string or array
113
+	 */
114
+	protected $_raw_value;
115
+
116
+	/**
117
+	 * Value normalized according to the input's normalization strategy.
118
+	 * The normalization strategy dictates whether this is a string, int, float,
119
+	 * boolean, or array of any of those.
120
+	 *
121
+	 * @var mixed
122
+	 */
123
+	protected $_normalized_value;
124
+
125
+
126
+	/**
127
+	 * Normalized default value either initially set on the input, or provided by calling
128
+	 * set_default().
129
+	 * @var mixed
130
+	 */
131
+	protected $_default;
132
+
133
+	/**
134
+	 * Strategy used for displaying this field.
135
+	 * Child classes must use _get_display_strategy to access it.
136
+	 *
137
+	 * @var EE_Display_Strategy_Base
138
+	 */
139
+	private $_display_strategy;
140
+
141
+	/**
142
+	 * Gets all the validation strategies used on this field
143
+	 *
144
+	 * @var EE_Validation_Strategy_Base[]
145
+	 */
146
+	private $_validation_strategies = array();
147
+
148
+	/**
149
+	 * The normalization strategy for this field
150
+	 *
151
+	 * @var EE_Normalization_Strategy_Base
152
+	 */
153
+	private $_normalization_strategy;
154
+
155
+	/**
156
+	 * Strategy for removing sensitive data after we're done with the form input
157
+	 *
158
+	 * @var EE_Sensitive_Data_Removal_Base
159
+	 */
160
+	protected $_sensitive_data_removal_strategy;
161
+
162
+	/**
163
+	 * Whether this input has been disabled or not.
164
+	 * If it's disabled while rendering, an extra hidden input is added that indicates it has been knowingly disabled.
165
+	 * (Client-side code that wants to dynamically disable it must also add this hidden input).
166
+	 * When the form is submitted, if the input is disabled in the PHP formsection, then input is ignored.
167
+	 * If the input is missing from the $_REQUEST data but the hidden input indicating the input is disabled, then the input is again ignored.
168
+	 *
169
+	 * @var boolean
170
+	 */
171
+	protected $disabled = false;
172
+
173
+
174
+
175
+	/**
176
+	 * @param array                         $input_args       {
177
+	 * @type string                         $html_name        the html name for the input
178
+	 * @type string                         $html_label_id    the id attribute to give to the html label tag
179
+	 * @type string                         $html_label_class the class attribute to give to the html label tag
180
+	 * @type string                         $html_label_style the style attribute to give ot teh label tag
181
+	 * @type string                         $html_label_text  the text to put in the label tag
182
+	 * @type string                         $html_label       the full html label. If used,
183
+	 *                                                        all other html_label_* args are invalid
184
+	 * @type string                         $html_help_text   text to put in help element
185
+	 * @type string                         $html_help_style  style attribute to give to teh help element
186
+	 * @type string                         $html_help_class  class attribute to give to the help element
187
+	 * @type string                         $default          default value NORMALIZED (eg, if providing the default
188
+	 *       for a Yes_No_Input, you should provide TRUE or FALSE, not '1' or '0')
189
+	 * @type EE_Display_Strategy_Base       $display          strategy
190
+	 * @type EE_Normalization_Strategy_Base $normalization_strategy
191
+	 * @type EE_Validation_Strategy_Base[]  $validation_strategies
192
+	 * @type boolean                        $ignore_input special argument which can be used to avoid adding any validation strategies,
193
+	 *                                                    and sets the normalization strategy to the Null normalization. This is good
194
+	 *                                                    when you want the input to be totally ignored server-side (like when using
195
+	 *                                                    React.js form inputs)
196
+	 *                                                        }
197
+	 */
198
+	public function __construct($input_args = array())
199
+	{
200
+		$input_args = (array) apply_filters('FHEE__EE_Form_Input_Base___construct__input_args', $input_args, $this);
201
+		// the following properties must be cast as arrays
202
+		if (isset($input_args['validation_strategies'])) {
203
+			foreach ((array) $input_args['validation_strategies'] as $validation_strategy) {
204
+				if ($validation_strategy instanceof EE_Validation_Strategy_Base && empty($input_args['ignore_input'])) {
205
+					$this->_validation_strategies[ get_class($validation_strategy) ] = $validation_strategy;
206
+				}
207
+			}
208
+			unset($input_args['validation_strategies']);
209
+		}
210
+		if (isset($input_args['ignore_input'])) {
211
+			$this->_validation_strategies = array();
212
+		}
213
+		// loop thru incoming options
214
+		foreach ($input_args as $key => $value) {
215
+			// add underscore to $key to match property names
216
+			$_key = '_' . $key;
217
+			if (property_exists($this, $_key)) {
218
+				$this->{$_key} = $value;
219
+			}
220
+		}
221
+		// ensure that "required" is set correctly
222
+		$this->set_required(
223
+			$this->_required,
224
+			isset($input_args['required_validation_error_message'])
225
+			? $input_args['required_validation_error_message']
226
+			: null
227
+		);
228
+		// $this->_html_name_specified = isset( $input_args['html_name'] ) ? TRUE : FALSE;
229
+		$this->_display_strategy->_construct_finalize($this);
230
+		foreach ($this->_validation_strategies as $validation_strategy) {
231
+			$validation_strategy->_construct_finalize($this);
232
+		}
233
+		if (isset($input_args['ignore_input'])) {
234
+			$this->_normalization_strategy = new EE_Null_Normalization();
235
+		}
236
+		if (! $this->_normalization_strategy) {
237
+				$this->_normalization_strategy = new EE_Text_Normalization();
238
+		}
239
+		$this->_normalization_strategy->_construct_finalize($this);
240
+		// at least we can use the normalization strategy to populate the default
241
+		if (isset($input_args['default'])) {
242
+			$this->set_default($input_args['default']);
243
+			unset($input_args['default']);
244
+		}
245
+		if (! $this->_sensitive_data_removal_strategy) {
246
+			$this->_sensitive_data_removal_strategy = new EE_No_Sensitive_Data_Removal();
247
+		}
248
+		$this->_sensitive_data_removal_strategy->_construct_finalize($this);
249
+		parent::__construct($input_args);
250
+	}
251
+
252
+
253
+
254
+	/**
255
+	 * Sets the html_name to its default value, if none was specified in teh constructor.
256
+	 * Calculation involves using the name and the parent's html_name
257
+	 *
258
+	 * @throws \EE_Error
259
+	 */
260
+	protected function _set_default_html_name_if_empty()
261
+	{
262
+		if (! $this->_html_name) {
263
+			$this->_html_name = $this->name();
264
+			if ($this->_parent_section && $this->_parent_section instanceof EE_Form_Section_Proper) {
265
+				$this->_html_name = $this->_parent_section->html_name_prefix() . "[{$this->name()}]";
266
+			}
267
+		}
268
+	}
269
+
270
+
271
+
272
+	/**
273
+	 * @param $parent_form_section
274
+	 * @param $name
275
+	 * @throws \EE_Error
276
+	 */
277
+	public function _construct_finalize($parent_form_section, $name)
278
+	{
279
+		parent::_construct_finalize($parent_form_section, $name);
280
+		if ($this->_html_label === null && $this->_html_label_text === null) {
281
+			$this->_html_label_text = ucwords(str_replace("_", " ", $name));
282
+		}
283
+		do_action('AHEE__EE_Form_Input_Base___construct_finalize__end', $this, $parent_form_section, $name);
284
+	}
285
+
286
+
287
+
288
+	/**
289
+	 * Returns the strategy for displaying this form input. If none is set, throws an exception.
290
+	 *
291
+	 * @return EE_Display_Strategy_Base
292
+	 * @throws EE_Error
293
+	 */
294
+	protected function _get_display_strategy()
295
+	{
296
+		$this->ensure_construct_finalized_called();
297
+		if (! $this->_display_strategy || ! $this->_display_strategy instanceof EE_Display_Strategy_Base) {
298
+			throw new EE_Error(
299
+				sprintf(
300
+					__(
301
+						"Cannot get display strategy for form input with name %s and id %s, because it has not been set in the constructor",
302
+						"event_espresso"
303
+					),
304
+					$this->html_name(),
305
+					$this->html_id()
306
+				)
307
+			);
308
+		} else {
309
+			return $this->_display_strategy;
310
+		}
311
+	}
312
+
313
+
314
+
315
+	/**
316
+	 * Sets the display strategy.
317
+	 *
318
+	 * @param EE_Display_Strategy_Base $strategy
319
+	 */
320
+	protected function _set_display_strategy(EE_Display_Strategy_Base $strategy)
321
+	{
322
+		$this->_display_strategy = $strategy;
323
+	}
324
+
325
+
326
+
327
+	/**
328
+	 * Sets the sanitization strategy
329
+	 *
330
+	 * @param EE_Normalization_Strategy_Base $strategy
331
+	 */
332
+	protected function _set_normalization_strategy(EE_Normalization_Strategy_Base $strategy)
333
+	{
334
+		$this->_normalization_strategy = $strategy;
335
+	}
336
+
337
+
338
+
339
+	/**
340
+	 * Gets sensitive_data_removal_strategy
341
+	 *
342
+	 * @return EE_Sensitive_Data_Removal_Base
343
+	 */
344
+	public function get_sensitive_data_removal_strategy()
345
+	{
346
+		return $this->_sensitive_data_removal_strategy;
347
+	}
348
+
349
+
350
+
351
+	/**
352
+	 * Sets sensitive_data_removal_strategy
353
+	 *
354
+	 * @param EE_Sensitive_Data_Removal_Base $sensitive_data_removal_strategy
355
+	 * @return boolean
356
+	 */
357
+	public function set_sensitive_data_removal_strategy($sensitive_data_removal_strategy)
358
+	{
359
+		$this->_sensitive_data_removal_strategy = $sensitive_data_removal_strategy;
360
+	}
361
+
362
+
363
+
364
+	/**
365
+	 * Gets the display strategy for this input
366
+	 *
367
+	 * @return EE_Display_Strategy_Base
368
+	 */
369
+	public function get_display_strategy()
370
+	{
371
+		return $this->_display_strategy;
372
+	}
373
+
374
+
375
+
376
+	/**
377
+	 * Overwrites the display strategy
378
+	 *
379
+	 * @param EE_Display_Strategy_Base $display_strategy
380
+	 */
381
+	public function set_display_strategy($display_strategy)
382
+	{
383
+		$this->_display_strategy = $display_strategy;
384
+		$this->_display_strategy->_construct_finalize($this);
385
+	}
386
+
387
+
388
+
389
+	/**
390
+	 * Gets the normalization strategy set on this input
391
+	 *
392
+	 * @return EE_Normalization_Strategy_Base
393
+	 */
394
+	public function get_normalization_strategy()
395
+	{
396
+		return $this->_normalization_strategy;
397
+	}
398
+
399
+
400
+
401
+	/**
402
+	 * Overwrites the normalization strategy
403
+	 *
404
+	 * @param EE_Normalization_Strategy_Base $normalization_strategy
405
+	 */
406
+	public function set_normalization_strategy($normalization_strategy)
407
+	{
408
+		$this->_normalization_strategy = $normalization_strategy;
409
+		$this->_normalization_strategy->_construct_finalize($this);
410
+	}
411
+
412
+
413
+
414
+	/**
415
+	 * Returns all teh validation strategies which apply to this field, numerically indexed
416
+	 *
417
+	 * @return EE_Validation_Strategy_Base[]
418
+	 */
419
+	public function get_validation_strategies()
420
+	{
421
+		return $this->_validation_strategies;
422
+	}
423
+
424
+
425
+
426
+	/**
427
+	 * Adds this strategy to the field so it will be used in both JS validation and server-side validation
428
+	 *
429
+	 * @param EE_Validation_Strategy_Base $validation_strategy
430
+	 * @return void
431
+	 */
432
+	protected function _add_validation_strategy(EE_Validation_Strategy_Base $validation_strategy)
433
+	{
434
+		$validation_strategy->_construct_finalize($this);
435
+		$this->_validation_strategies[] = $validation_strategy;
436
+	}
437
+
438
+
439
+
440
+	/**
441
+	 * Adds a new validation strategy onto the form input
442
+	 *
443
+	 * @param EE_Validation_Strategy_Base $validation_strategy
444
+	 * @return void
445
+	 */
446
+	public function add_validation_strategy(EE_Validation_Strategy_Base $validation_strategy)
447
+	{
448
+		$this->_add_validation_strategy($validation_strategy);
449
+	}
450
+
451
+
452
+
453
+	/**
454
+	 * The classname of the validation strategy to remove
455
+	 *
456
+	 * @param string $validation_strategy_classname
457
+	 */
458
+	public function remove_validation_strategy($validation_strategy_classname)
459
+	{
460
+		foreach ($this->_validation_strategies as $key => $validation_strategy) {
461
+			if ($validation_strategy instanceof $validation_strategy_classname
462
+				|| is_subclass_of($validation_strategy, $validation_strategy_classname)
463
+			) {
464
+				unset($this->_validation_strategies[ $key ]);
465
+			}
466
+		}
467
+	}
468
+
469
+
470
+
471
+	/**
472
+	 * returns true if input employs any of the validation strategy defined by the supplied array of classnames
473
+	 *
474
+	 * @param array $validation_strategy_classnames
475
+	 * @return bool
476
+	 */
477
+	public function has_validation_strategy($validation_strategy_classnames)
478
+	{
479
+		$validation_strategy_classnames = is_array($validation_strategy_classnames)
480
+			? $validation_strategy_classnames
481
+			: array($validation_strategy_classnames);
482
+		foreach ($this->_validation_strategies as $key => $validation_strategy) {
483
+			if (in_array($key, $validation_strategy_classnames)) {
484
+				return true;
485
+			}
486
+		}
487
+		return false;
488
+	}
489
+
490
+
491
+
492
+	/**
493
+	 * Gets the HTML
494
+	 *
495
+	 * @return string
496
+	 */
497
+	public function get_html()
498
+	{
499
+		return $this->_parent_section->get_html_for_input($this);
500
+	}
501
+
502
+
503
+
504
+	/**
505
+	 * Gets the HTML for the input itself (no label or errors) according to the
506
+	 * input's display strategy
507
+	 * Makes sure the JS and CSS are enqueued for it
508
+	 *
509
+	 * @return string
510
+	 * @throws \EE_Error
511
+	 */
512
+	public function get_html_for_input()
513
+	{
514
+		return $this->_form_html_filter
515
+			? $this->_form_html_filter->filterHtml(
516
+				$this->_get_display_strategy()->display(),
517
+				$this
518
+			)
519
+			: $this->_get_display_strategy()->display();
520
+	}
521
+
522
+
523
+
524
+	/**
525
+	 * @return string
526
+	 */
527
+	public function html_other_attributes()
528
+	{
529
+		return ! empty($this->_html_other_attributes) ? ' ' . $this->_html_other_attributes : '';
530
+	}
531
+
532
+
533
+
534
+	/**
535
+	 * @param string $html_other_attributes
536
+	 */
537
+	public function set_html_other_attributes($html_other_attributes)
538
+	{
539
+		$this->_html_other_attributes = $html_other_attributes;
540
+	}
541
+
542
+
543
+
544
+	/**
545
+	 * Gets the HTML for displaying the label for this form input
546
+	 * according to the form section's layout strategy
547
+	 *
548
+	 * @return string
549
+	 */
550
+	public function get_html_for_label()
551
+	{
552
+		return $this->_parent_section->get_layout_strategy()->display_label($this);
553
+	}
554
+
555
+
556
+
557
+	/**
558
+	 * Gets the HTML for displaying the errors section for this form input
559
+	 * according to the form section's layout strategy
560
+	 *
561
+	 * @return string
562
+	 */
563
+	public function get_html_for_errors()
564
+	{
565
+		return $this->_parent_section->get_layout_strategy()->display_errors($this);
566
+	}
567
+
568
+
569
+
570
+	/**
571
+	 * Gets the HTML for displaying the help text for this form input
572
+	 * according to the form section's layout strategy
573
+	 *
574
+	 * @return string
575
+	 */
576
+	public function get_html_for_help()
577
+	{
578
+		return $this->_parent_section->get_layout_strategy()->display_help_text($this);
579
+	}
580
+
581
+
582
+
583
+	/**
584
+	 * Validates the input's sanitized value (assumes _sanitize() has already been called)
585
+	 * and returns whether or not the form input's submitted value is value
586
+	 *
587
+	 * @return boolean
588
+	 */
589
+	protected function _validate()
590
+	{
591
+		if ($this->isDisabled()) {
592
+			return true;
593
+		}
594
+		foreach ($this->_validation_strategies as $validation_strategy) {
595
+			if ($validation_strategy instanceof EE_Validation_Strategy_Base) {
596
+				try {
597
+					$validation_strategy->validate($this->normalized_value());
598
+				} catch (EE_Validation_Error $e) {
599
+					$this->add_validation_error($e);
600
+				}
601
+			}
602
+		}
603
+		if ($this->get_validation_errors()) {
604
+			return false;
605
+		} else {
606
+			return true;
607
+		}
608
+	}
609
+
610
+
611
+
612
+	/**
613
+	 * Performs basic sanitization on this value. But what sanitization can be performed anyways?
614
+	 * This value MIGHT be allowed to have tags, so we can't really remove them.
615
+	 *
616
+	 * @param string $value
617
+	 * @return null|string
618
+	 */
619
+	protected function _sanitize($value)
620
+	{
621
+		return $value !== null ? stripslashes(html_entity_decode(trim($value))) : null;
622
+	}
623
+
624
+
625
+
626
+	/**
627
+	 * Picks out the form value that relates to this form input,
628
+	 * and stores it as the sanitized value on the form input, and sets the normalized value.
629
+	 * Returns whether or not any validation errors occurred
630
+	 *
631
+	 * @param array $req_data like $_POST
632
+	 * @return boolean whether or not there was an error
633
+	 * @throws \EE_Error
634
+	 */
635
+	protected function _normalize($req_data)
636
+	{
637
+		// any existing validation errors don't apply so clear them
638
+		$this->_validation_errors = array();
639
+		// if the input is disabled, ignore whatever input was sent in
640
+		if ($this->isDisabled()) {
641
+			$this->_set_raw_value(null);
642
+			$this->_set_normalized_value($this->get_default());
643
+			return false;
644
+		}
645
+		try {
646
+			$raw_input = $this->find_form_data_for_this_section($req_data);
647
+			// super simple sanitization for now
648
+			if (is_array($raw_input)) {
649
+				$raw_value = array();
650
+				foreach ($raw_input as $key => $value) {
651
+					$raw_value[ $key ] = $this->_sanitize($value);
652
+				}
653
+				$this->_set_raw_value($raw_value);
654
+			} else {
655
+				$this->_set_raw_value($this->_sanitize($raw_input));
656
+			}
657
+			// we want to mostly leave the input alone in case we need to re-display it to the user
658
+			$this->_set_normalized_value($this->_normalization_strategy->normalize($this->raw_value()));
659
+			return false;
660
+		} catch (EE_Validation_Error $e) {
661
+			$this->add_validation_error($e);
662
+			return true;
663
+		}
664
+	}
665
+
666
+
667
+
668
+	/**
669
+	 * @return string
670
+	 */
671
+	public function html_name()
672
+	{
673
+		$this->_set_default_html_name_if_empty();
674
+		return $this->_html_name;
675
+	}
676
+
677
+
678
+
679
+	/**
680
+	 * @return string
681
+	 */
682
+	public function html_label_id()
683
+	{
684
+		return ! empty($this->_html_label_id) ? $this->_html_label_id : $this->html_id() . '-lbl';
685
+	}
686
+
687
+
688
+
689
+	/**
690
+	 * @return string
691
+	 */
692
+	public function html_label_class()
693
+	{
694
+		return $this->_html_label_class;
695
+	}
696
+
697
+
698
+
699
+	/**
700
+	 * @return string
701
+	 */
702
+	public function html_label_style()
703
+	{
704
+		return $this->_html_label_style;
705
+	}
706
+
707
+
708
+
709
+	/**
710
+	 * @return string
711
+	 */
712
+	public function html_label_text()
713
+	{
714
+		return $this->_html_label_text;
715
+	}
716
+
717
+
718
+
719
+	/**
720
+	 * @return string
721
+	 */
722
+	public function html_help_text()
723
+	{
724
+		return $this->_html_help_text;
725
+	}
726
+
727
+
728
+
729
+	/**
730
+	 * @return string
731
+	 */
732
+	public function html_help_class()
733
+	{
734
+		return $this->_html_help_class;
735
+	}
736
+
737
+
738
+
739
+	/**
740
+	 * @return string
741
+	 */
742
+	public function html_help_style()
743
+	{
744
+		return $this->_html_style;
745
+	}
746
+
747
+
748
+
749
+	/**
750
+	 * returns the raw, UNSAFE, input, almost exactly as the user submitted it.
751
+	 * Please note that almost all client code should instead use the normalized_value;
752
+	 * or possibly raw_value_in_form (which prepares the string for displaying in an HTML attribute on a tag,
753
+	 * mostly by escaping quotes)
754
+	 * Note, we do not store the exact original value sent in the user's request because
755
+	 * it may have malicious content, and we MIGHT want to store the form input in a transient or something...
756
+	 * in which case, we would have stored the malicious content to our database.
757
+	 *
758
+	 * @return string
759
+	 */
760
+	public function raw_value()
761
+	{
762
+		return $this->_raw_value;
763
+	}
764
+
765
+
766
+
767
+	/**
768
+	 * Returns a string safe to usage in form inputs when displaying, because
769
+	 * it escapes all html entities
770
+	 *
771
+	 * @return string
772
+	 */
773
+	public function raw_value_in_form()
774
+	{
775
+		return htmlentities($this->raw_value(), ENT_QUOTES, 'UTF-8');
776
+	}
777
+
778
+
779
+
780
+	/**
781
+	 * returns the value after it's been sanitized, and then converted into it's proper type
782
+	 * in PHP. Eg, a string, an int, an array,
783
+	 *
784
+	 * @return mixed
785
+	 */
786
+	public function normalized_value()
787
+	{
788
+		return $this->_normalized_value;
789
+	}
790
+
791
+
792
+
793
+	/**
794
+	 * Returns the normalized value is a presentable way. By default this is just
795
+	 * the normalized value by itself, but it can be overridden for when that's not
796
+	 * the best thing to display
797
+	 *
798
+	 * @return string
799
+	 */
800
+	public function pretty_value()
801
+	{
802
+		return $this->_normalized_value;
803
+	}
804
+
805
+
806
+
807
+	/**
808
+	 * When generating the JS for the jquery validation rules like<br>
809
+	 * <code>$( "#myform" ).validate({
810
+	 * rules: {
811
+	 * password: "required",
812
+	 * password_again: {
813
+	 * equalTo: "#password"
814
+	 * }
815
+	 * }
816
+	 * });</code>
817
+	 * if this field had the name 'password_again', it should return
818
+	 * <br><code>password_again: {
819
+	 * equalTo: "#password"
820
+	 * }</code>
821
+	 *
822
+	 * @return array
823
+	 */
824
+	public function get_jquery_validation_rules()
825
+	{
826
+		$jquery_validation_js = array();
827
+		$jquery_validation_rules = array();
828
+		foreach ($this->get_validation_strategies() as $validation_strategy) {
829
+			$jquery_validation_rules = array_replace_recursive(
830
+				$jquery_validation_rules,
831
+				$validation_strategy->get_jquery_validation_rule_array()
832
+			);
833
+		}
834
+		if (! empty($jquery_validation_rules)) {
835
+			foreach ($this->get_display_strategy()->get_html_input_ids(true) as $html_id_with_pound_sign) {
836
+				$jquery_validation_js[ $html_id_with_pound_sign ] = $jquery_validation_rules;
837
+			}
838
+		}
839
+		return $jquery_validation_js;
840
+	}
841
+
842
+
843
+
844
+	/**
845
+	 * Sets the input's default value for use in displaying in the form. Note: value should be
846
+	 * normalized (Eg, if providing a default of ra Yes_NO_Input you would provide TRUE or FALSE, not '1' or '0')
847
+	 *
848
+	 * @param mixed $value
849
+	 * @return void
850
+	 */
851
+	public function set_default($value)
852
+	{
853
+		$this->_default = $value;
854
+		$this->_set_normalized_value($value);
855
+		$this->_set_raw_value($value);
856
+	}
857
+
858
+
859
+
860
+	/**
861
+	 * Sets the normalized value on this input
862
+	 *
863
+	 * @param mixed $value
864
+	 */
865
+	protected function _set_normalized_value($value)
866
+	{
867
+		$this->_normalized_value = $value;
868
+	}
869
+
870
+
871
+
872
+	/**
873
+	 * Sets the raw value on this input (ie, exactly as the user submitted it)
874
+	 *
875
+	 * @param mixed $value
876
+	 */
877
+	protected function _set_raw_value($value)
878
+	{
879
+		$this->_raw_value = $this->_normalization_strategy->unnormalize($value);
880
+	}
881
+
882
+
883
+
884
+	/**
885
+	 * Sets the HTML label text after it has already been defined
886
+	 *
887
+	 * @param string $label
888
+	 * @return void
889
+	 */
890
+	public function set_html_label_text($label)
891
+	{
892
+		$this->_html_label_text = $label;
893
+	}
894
+
895
+
896
+
897
+	/**
898
+	 * Sets whether or not this field is required, and adjusts the validation strategy.
899
+	 * If you want to use the EE_Conditionally_Required_Validation_Strategy,
900
+	 * please add it as a validation strategy using add_validation_strategy as normal
901
+	 *
902
+	 * @param boolean $required boolean
903
+	 * @param null    $required_text
904
+	 */
905
+	public function set_required($required = true, $required_text = null)
906
+	{
907
+		$required = filter_var($required, FILTER_VALIDATE_BOOLEAN);
908
+		// whether $required is a string or a boolean, we want to add a required validation strategy
909
+		if ($required) {
910
+			$this->_add_validation_strategy(new EE_Required_Validation_Strategy($required_text));
911
+		} else {
912
+			$this->remove_validation_strategy('EE_Required_Validation_Strategy');
913
+		}
914
+		$this->_required = $required;
915
+	}
916
+
917
+
918
+
919
+	/**
920
+	 * Returns whether or not this field is required
921
+	 *
922
+	 * @return boolean
923
+	 */
924
+	public function required()
925
+	{
926
+		return $this->_required;
927
+	}
928
+
929
+
930
+
931
+	/**
932
+	 * @param string $required_css_class
933
+	 */
934
+	public function set_required_css_class($required_css_class)
935
+	{
936
+		$this->_required_css_class = $required_css_class;
937
+	}
938
+
939
+
940
+
941
+	/**
942
+	 * @return string
943
+	 */
944
+	public function required_css_class()
945
+	{
946
+		return $this->_required_css_class;
947
+	}
948
+
949
+
950
+
951
+	/**
952
+	 * @param bool $add_required
953
+	 * @return string
954
+	 */
955
+	public function html_class($add_required = false)
956
+	{
957
+		return $add_required && $this->required()
958
+			? $this->required_css_class() . ' ' . $this->_html_class
959
+			: $this->_html_class;
960
+	}
961
+
962
+
963
+	/**
964
+	 * Sets the help text, in case
965
+	 *
966
+	 * @param string $text
967
+	 */
968
+	public function set_html_help_text($text)
969
+	{
970
+		$this->_html_help_text = $text;
971
+	}
972
+
973
+
974
+
975
+	/**
976
+	 * Uses the sensitive data removal strategy to remove the sensitive data from this
977
+	 * input. If there is any kind of sensitive data removal on this input, we clear
978
+	 * out the raw value completely
979
+	 *
980
+	 * @return void
981
+	 */
982
+	public function clean_sensitive_data()
983
+	{
984
+		// if we do ANY kind of sensitive data removal on this, then just clear out the raw value
985
+		// if we need more logic than this we'll make a strategy for it
986
+		if ($this->_sensitive_data_removal_strategy
987
+			&& ! $this->_sensitive_data_removal_strategy instanceof EE_No_Sensitive_Data_Removal
988
+		) {
989
+			$this->_set_raw_value(null);
990
+		}
991
+		// and clean the normalized value according to the appropriate strategy
992
+		$this->_set_normalized_value(
993
+			$this->get_sensitive_data_removal_strategy()->remove_sensitive_data(
994
+				$this->_normalized_value
995
+			)
996
+		);
997
+	}
998
+
999
+
1000
+
1001
+	/**
1002
+	 * @param bool   $primary
1003
+	 * @param string $button_size
1004
+	 * @param string $other_attributes
1005
+	 */
1006
+	public function set_button_css_attributes($primary = true, $button_size = '', $other_attributes = '')
1007
+	{
1008
+		$button_css_attributes = 'button';
1009
+		$button_css_attributes .= $primary === true ? ' button-primary' : ' button-secondary';
1010
+		switch ($button_size) {
1011
+			case 'xs':
1012
+			case 'extra-small':
1013
+				$button_css_attributes .= ' button-xs';
1014
+				break;
1015
+			case 'sm':
1016
+			case 'small':
1017
+				$button_css_attributes .= ' button-sm';
1018
+				break;
1019
+			case 'lg':
1020
+			case 'large':
1021
+				$button_css_attributes .= ' button-lg';
1022
+				break;
1023
+			case 'block':
1024
+				$button_css_attributes .= ' button-block';
1025
+				break;
1026
+			case 'md':
1027
+			case 'medium':
1028
+			default:
1029
+				$button_css_attributes .= '';
1030
+		}
1031
+		$this->_button_css_attributes .= ! empty($other_attributes)
1032
+			? $button_css_attributes . ' ' . $other_attributes
1033
+			: $button_css_attributes;
1034
+	}
1035
+
1036
+
1037
+
1038
+	/**
1039
+	 * @return string
1040
+	 */
1041
+	public function button_css_attributes()
1042
+	{
1043
+		if (empty($this->_button_css_attributes)) {
1044
+			$this->set_button_css_attributes();
1045
+		}
1046
+		return $this->_button_css_attributes;
1047
+	}
1048
+
1049
+
1050
+
1051
+	/**
1052
+	 * find_form_data_for_this_section
1053
+	 * using this section's name and its parents, finds the value of the form data that corresponds to it.
1054
+	 * For example, if this form section's HTML name is my_form[subform][form_input_1],
1055
+	 * then it's value should be in $_REQUEST at $_REQUEST['my_form']['subform']['form_input_1'].
1056
+	 * (If that doesn't exist, we also check for this subsection's name
1057
+	 * at the TOP LEVEL of the request data. Eg $_REQUEST['form_input_1'].)
1058
+	 * This function finds its value in the form.
1059
+	 *
1060
+	 * @param array $req_data
1061
+	 * @return mixed whatever the raw value of this form section is in the request data
1062
+	 * @throws \EE_Error
1063
+	 */
1064
+	public function find_form_data_for_this_section($req_data)
1065
+	{
1066
+		$name_parts = $this->getInputNameParts();
1067
+		// now get the value for the input
1068
+		$value = $this->findRequestForSectionUsingNameParts($name_parts, $req_data);
1069
+		// check if this thing's name is at the TOP level of the request data
1070
+		if ($value === null && isset($req_data[ $this->name() ])) {
1071
+			$value = $req_data[ $this->name() ];
1072
+		}
1073
+		return $value;
1074
+	}
1075
+
1076
+
1077
+
1078
+	/**
1079
+	 * If this input's name is something like "foo[bar][baz]"
1080
+	 * returns an array like `array('foo','bar',baz')`
1081
+	 * @return array
1082
+	 */
1083
+	protected function getInputNameParts()
1084
+	{
1085
+		// break up the html name by "[]"
1086
+		if (strpos($this->html_name(), '[') !== false) {
1087
+			$before_any_brackets = substr($this->html_name(), 0, strpos($this->html_name(), '['));
1088
+		} else {
1089
+			$before_any_brackets = $this->html_name();
1090
+		}
1091
+		// grab all of the segments
1092
+		preg_match_all('~\[([^]]*)\]~', $this->html_name(), $matches);
1093
+		if (isset($matches[1]) && is_array($matches[1])) {
1094
+			$name_parts = $matches[1];
1095
+			array_unshift($name_parts, $before_any_brackets);
1096
+		} else {
1097
+			$name_parts = array($before_any_brackets);
1098
+		}
1099
+		return $name_parts;
1100
+	}
1101
+
1102
+
1103
+
1104
+	/**
1105
+	 * @param array $html_name_parts
1106
+	 * @param array $req_data
1107
+	 * @return array | NULL
1108
+	 */
1109
+	public function findRequestForSectionUsingNameParts($html_name_parts, $req_data)
1110
+	{
1111
+		$first_part_to_consider = array_shift($html_name_parts);
1112
+		if (isset($req_data[ $first_part_to_consider ])) {
1113
+			if (empty($html_name_parts)) {
1114
+				return $req_data[ $first_part_to_consider ];
1115
+			} else {
1116
+				return $this->findRequestForSectionUsingNameParts(
1117
+					$html_name_parts,
1118
+					$req_data[ $first_part_to_consider ]
1119
+				);
1120
+			}
1121
+		} else {
1122
+			return null;
1123
+		}
1124
+	}
1125
+
1126
+
1127
+
1128
+	/**
1129
+	 * Checks if this form input's data is in the request data
1130
+	 *
1131
+	 * @param array $req_data like $_POST
1132
+	 * @return boolean
1133
+	 * @throws \EE_Error
1134
+	 */
1135
+	public function form_data_present_in($req_data = null)
1136
+	{
1137
+		if ($req_data === null) {
1138
+			$req_data = $_POST;
1139
+		}
1140
+		$checked_value = $this->find_form_data_for_this_section($req_data);
1141
+		if ($checked_value !== null) {
1142
+			return true;
1143
+		} else {
1144
+			return false;
1145
+		}
1146
+	}
1147
+
1148
+
1149
+
1150
+	/**
1151
+	 * Overrides parent to add js data from validation and display strategies
1152
+	 *
1153
+	 * @param array $form_other_js_data
1154
+	 * @return array
1155
+	 */
1156
+	public function get_other_js_data($form_other_js_data = array())
1157
+	{
1158
+		$form_other_js_data = $this->get_other_js_data_from_strategies($form_other_js_data);
1159
+		return $form_other_js_data;
1160
+	}
1161
+
1162
+
1163
+
1164
+	/**
1165
+	 * Gets other JS data for localization from this input's strategies, like
1166
+	 * the validation strategies and the display strategy
1167
+	 *
1168
+	 * @param array $form_other_js_data
1169
+	 * @return array
1170
+	 */
1171
+	public function get_other_js_data_from_strategies($form_other_js_data = array())
1172
+	{
1173
+		$form_other_js_data = $this->get_display_strategy()->get_other_js_data($form_other_js_data);
1174
+		foreach ($this->get_validation_strategies() as $validation_strategy) {
1175
+			$form_other_js_data = $validation_strategy->get_other_js_data($form_other_js_data);
1176
+		}
1177
+		return $form_other_js_data;
1178
+	}
1179
+
1180
+
1181
+
1182
+	/**
1183
+	 * Override parent because we want to give our strategies an opportunity to enqueue some js and css
1184
+	 *
1185
+	 * @return void
1186
+	 */
1187
+	public function enqueue_js()
1188
+	{
1189
+		// ask our display strategy and validation strategies if they have js to enqueue
1190
+		$this->enqueue_js_from_strategies();
1191
+	}
1192
+
1193
+
1194
+
1195
+	/**
1196
+	 * Tells strategies when its ok to enqueue their js and css
1197
+	 *
1198
+	 * @return void
1199
+	 */
1200
+	public function enqueue_js_from_strategies()
1201
+	{
1202
+		$this->get_display_strategy()->enqueue_js();
1203
+		foreach ($this->get_validation_strategies() as $validation_strategy) {
1204
+			$validation_strategy->enqueue_js();
1205
+		}
1206
+	}
1207
+
1208
+
1209
+
1210
+	/**
1211
+	 * Gets the default value set on the input (not the current value, which may have been
1212
+	 * changed because of a form submission). If no default was set, this us null.
1213
+	 * @return mixed
1214
+	 */
1215
+	public function get_default()
1216
+	{
1217
+		return $this->_default;
1218
+	}
1219
+
1220
+
1221
+
1222
+	/**
1223
+	 * Makes this input disabled. That means it will have the HTML attribute 'disabled="disabled"',
1224
+	 * and server-side if any input was received it will be ignored
1225
+	 */
1226
+	public function disable($disable = true)
1227
+	{
1228
+		$disabled_attribute = ' disabled="disabled"';
1229
+		$this->disabled = filter_var($disable, FILTER_VALIDATE_BOOLEAN);
1230
+		if ($this->disabled) {
1231
+			if (strpos($this->_other_html_attributes, $disabled_attribute) === false) {
1232
+				$this->_other_html_attributes .= $disabled_attribute;
1233
+			}
1234
+			$this->_set_normalized_value($this->get_default());
1235
+		} else {
1236
+			$this->_other_html_attributes = str_replace($disabled_attribute, '', $this->_other_html_attributes);
1237
+		}
1238
+	}
1239
+
1240
+
1241
+
1242
+	/**
1243
+	 * Returns whether or not this input is currently disabled.
1244
+	 * @return bool
1245
+	 */
1246
+	public function isDisabled()
1247
+	{
1248
+		return $this->disabled;
1249
+	}
1250 1250
 }
Please login to merge, or discard this patch.
core/Psr4Autoloader.php 3 patches
Doc Comments   +2 added lines, -2 removed lines patch added patch discarded remove patch
@@ -120,7 +120,7 @@  discard block
 block discarded – undo
120 120
      * Loads the class file for a given class name.
121 121
      *
122 122
      * @param string $class The fully-qualified class name.
123
-     * @return mixed The mapped file name on success, or boolean false on
123
+     * @return string|false The mapped file name on success, or boolean false on
124 124
      *                      failure.
125 125
      */
126 126
     public function loadClass($class)
@@ -153,7 +153,7 @@  discard block
 block discarded – undo
153 153
      *
154 154
      * @param string $prefix         The namespace prefix.
155 155
      * @param string $relative_class The relative class name.
156
-     * @return mixed Boolean false if no mapped file can be loaded, or the
156
+     * @return string|false Boolean false if no mapped file can be loaded, or the
157 157
      *                               name of the mapped file that was loaded.
158 158
      */
159 159
     protected function loadMappedFile($prefix, $relative_class)
Please login to merge, or discard this patch.
Indentation   +146 added lines, -146 removed lines patch added patch discarded remove patch
@@ -45,150 +45,150 @@
 block discarded – undo
45 45
 class Psr4Autoloader
46 46
 {
47 47
 
48
-    /**
49
-     * namespace separator
50
-     */
51
-    const NS = '\\';
52
-
53
-    /**
54
-     * An associative array where the key is a namespace prefix and the value
55
-     * is an array of base directories for classes in that namespace.
56
-     *
57
-     * @var array
58
-     */
59
-    protected $prefixes = array();
60
-
61
-
62
-    /**
63
-     * returns an array of registered namespace prefixes
64
-     *
65
-     * @param string $prefix
66
-     * @return array
67
-     */
68
-    public function prefixes($prefix = '')
69
-    {
70
-        if (! empty($prefix)) {
71
-            // are there any base directories for this namespace prefix?
72
-            return isset($this->prefixes[ $prefix ]) ? $this->prefixes[ $prefix ] : array();
73
-        }
74
-        return $this->prefixes;
75
-    }
76
-
77
-
78
-    /**
79
-     * Register loader with SPL autoloader stack.
80
-     *
81
-     * @return void
82
-     */
83
-    public function register()
84
-    {
85
-        spl_autoload_register(array($this, 'loadClass'));
86
-    }
87
-
88
-
89
-    /**
90
-     * Adds a base directory for a namespace prefix.
91
-     *
92
-     * @param string $prefix   The namespace prefix.
93
-     * @param string $base_dir A base directory for class files in the
94
-     *                         namespace.
95
-     * @param bool   $prepend  If true, prepend the base directory to the stack
96
-     *                         instead of appending it; this causes it to be searched first rather
97
-     *                         than last.
98
-     * @return void
99
-     */
100
-    public function addNamespace($prefix, $base_dir, $prepend = false)
101
-    {
102
-        // normalize namespace prefix
103
-        $prefix = trim($prefix, Psr4Autoloader::NS) . Psr4Autoloader::NS;
104
-        // normalize the base directory with a trailing separator
105
-        $base_dir = \EEH_File::standardise_and_end_with_directory_separator($base_dir);
106
-        // initialize the namespace prefix array
107
-        if (isset($this->prefixes[ $prefix ]) === false) {
108
-            $this->prefixes[ $prefix ] = array();
109
-        }
110
-        // retain the base directory for the namespace prefix
111
-        if ($prepend) {
112
-            array_unshift($this->prefixes[ $prefix ], $base_dir);
113
-        } else {
114
-            $this->prefixes[ $prefix ][] = $base_dir;
115
-        }
116
-    }
117
-
118
-
119
-    /**
120
-     * Loads the class file for a given class name.
121
-     *
122
-     * @param string $class The fully-qualified class name.
123
-     * @return mixed The mapped file name on success, or boolean false on
124
-     *                      failure.
125
-     */
126
-    public function loadClass($class)
127
-    {
128
-        // the current namespace prefix
129
-        $prefix = $class;
130
-        // work backwards through the namespace names of the fully-qualified
131
-        // class name to find a mapped file name
132
-        while (false !== $pos = strrpos($prefix, Psr4Autoloader::NS)) {
133
-            // retain the trailing namespace separator in the prefix
134
-            $prefix = substr($class, 0, $pos + 1);
135
-            // the rest is the relative class name
136
-            $relative_class = substr($class, $pos + 1);
137
-            // try to load a mapped file for the prefix and relative class
138
-            $mapped_file = $this->loadMappedFile($prefix, $relative_class);
139
-            if ($mapped_file) {
140
-                return $mapped_file;
141
-            }
142
-            // remove the trailing namespace separator for the next iteration
143
-            // of strrpos()
144
-            $prefix = rtrim($prefix, Psr4Autoloader::NS);
145
-        }
146
-        // never found a mapped file
147
-        return false;
148
-    }
149
-
150
-
151
-    /**
152
-     * Load the mapped file for a namespace prefix and relative class.
153
-     *
154
-     * @param string $prefix         The namespace prefix.
155
-     * @param string $relative_class The relative class name.
156
-     * @return mixed Boolean false if no mapped file can be loaded, or the
157
-     *                               name of the mapped file that was loaded.
158
-     */
159
-    protected function loadMappedFile($prefix, $relative_class)
160
-    {
161
-        // look through base directories for this namespace prefix
162
-        foreach ($this->prefixes($prefix) as $base_dir) {
163
-            // replace the namespace prefix with the base directory,
164
-            // replace namespace separators with directory separators
165
-            // in the relative class name, append with .php
166
-            $file = $base_dir
167
-                    . str_replace(Psr4Autoloader::NS, DS, $relative_class)
168
-                    . '.php';
169
-            // if the mapped file exists, require it
170
-            if ($this->requireFile($file)) {
171
-                // yes, we're done
172
-                return $file;
173
-            }
174
-        }
175
-        // never found it
176
-        return false;
177
-    }
178
-
179
-
180
-    /**
181
-     * If a file exists, require it from the file system.
182
-     *
183
-     * @param string $file The file to require.
184
-     * @return bool True if the file exists, false if not.
185
-     */
186
-    protected function requireFile($file)
187
-    {
188
-        if (file_exists($file)) {
189
-            require $file;
190
-            return true;
191
-        }
192
-        return false;
193
-    }
48
+	/**
49
+	 * namespace separator
50
+	 */
51
+	const NS = '\\';
52
+
53
+	/**
54
+	 * An associative array where the key is a namespace prefix and the value
55
+	 * is an array of base directories for classes in that namespace.
56
+	 *
57
+	 * @var array
58
+	 */
59
+	protected $prefixes = array();
60
+
61
+
62
+	/**
63
+	 * returns an array of registered namespace prefixes
64
+	 *
65
+	 * @param string $prefix
66
+	 * @return array
67
+	 */
68
+	public function prefixes($prefix = '')
69
+	{
70
+		if (! empty($prefix)) {
71
+			// are there any base directories for this namespace prefix?
72
+			return isset($this->prefixes[ $prefix ]) ? $this->prefixes[ $prefix ] : array();
73
+		}
74
+		return $this->prefixes;
75
+	}
76
+
77
+
78
+	/**
79
+	 * Register loader with SPL autoloader stack.
80
+	 *
81
+	 * @return void
82
+	 */
83
+	public function register()
84
+	{
85
+		spl_autoload_register(array($this, 'loadClass'));
86
+	}
87
+
88
+
89
+	/**
90
+	 * Adds a base directory for a namespace prefix.
91
+	 *
92
+	 * @param string $prefix   The namespace prefix.
93
+	 * @param string $base_dir A base directory for class files in the
94
+	 *                         namespace.
95
+	 * @param bool   $prepend  If true, prepend the base directory to the stack
96
+	 *                         instead of appending it; this causes it to be searched first rather
97
+	 *                         than last.
98
+	 * @return void
99
+	 */
100
+	public function addNamespace($prefix, $base_dir, $prepend = false)
101
+	{
102
+		// normalize namespace prefix
103
+		$prefix = trim($prefix, Psr4Autoloader::NS) . Psr4Autoloader::NS;
104
+		// normalize the base directory with a trailing separator
105
+		$base_dir = \EEH_File::standardise_and_end_with_directory_separator($base_dir);
106
+		// initialize the namespace prefix array
107
+		if (isset($this->prefixes[ $prefix ]) === false) {
108
+			$this->prefixes[ $prefix ] = array();
109
+		}
110
+		// retain the base directory for the namespace prefix
111
+		if ($prepend) {
112
+			array_unshift($this->prefixes[ $prefix ], $base_dir);
113
+		} else {
114
+			$this->prefixes[ $prefix ][] = $base_dir;
115
+		}
116
+	}
117
+
118
+
119
+	/**
120
+	 * Loads the class file for a given class name.
121
+	 *
122
+	 * @param string $class The fully-qualified class name.
123
+	 * @return mixed The mapped file name on success, or boolean false on
124
+	 *                      failure.
125
+	 */
126
+	public function loadClass($class)
127
+	{
128
+		// the current namespace prefix
129
+		$prefix = $class;
130
+		// work backwards through the namespace names of the fully-qualified
131
+		// class name to find a mapped file name
132
+		while (false !== $pos = strrpos($prefix, Psr4Autoloader::NS)) {
133
+			// retain the trailing namespace separator in the prefix
134
+			$prefix = substr($class, 0, $pos + 1);
135
+			// the rest is the relative class name
136
+			$relative_class = substr($class, $pos + 1);
137
+			// try to load a mapped file for the prefix and relative class
138
+			$mapped_file = $this->loadMappedFile($prefix, $relative_class);
139
+			if ($mapped_file) {
140
+				return $mapped_file;
141
+			}
142
+			// remove the trailing namespace separator for the next iteration
143
+			// of strrpos()
144
+			$prefix = rtrim($prefix, Psr4Autoloader::NS);
145
+		}
146
+		// never found a mapped file
147
+		return false;
148
+	}
149
+
150
+
151
+	/**
152
+	 * Load the mapped file for a namespace prefix and relative class.
153
+	 *
154
+	 * @param string $prefix         The namespace prefix.
155
+	 * @param string $relative_class The relative class name.
156
+	 * @return mixed Boolean false if no mapped file can be loaded, or the
157
+	 *                               name of the mapped file that was loaded.
158
+	 */
159
+	protected function loadMappedFile($prefix, $relative_class)
160
+	{
161
+		// look through base directories for this namespace prefix
162
+		foreach ($this->prefixes($prefix) as $base_dir) {
163
+			// replace the namespace prefix with the base directory,
164
+			// replace namespace separators with directory separators
165
+			// in the relative class name, append with .php
166
+			$file = $base_dir
167
+					. str_replace(Psr4Autoloader::NS, DS, $relative_class)
168
+					. '.php';
169
+			// if the mapped file exists, require it
170
+			if ($this->requireFile($file)) {
171
+				// yes, we're done
172
+				return $file;
173
+			}
174
+		}
175
+		// never found it
176
+		return false;
177
+	}
178
+
179
+
180
+	/**
181
+	 * If a file exists, require it from the file system.
182
+	 *
183
+	 * @param string $file The file to require.
184
+	 * @return bool True if the file exists, false if not.
185
+	 */
186
+	protected function requireFile($file)
187
+	{
188
+		if (file_exists($file)) {
189
+			require $file;
190
+			return true;
191
+		}
192
+		return false;
193
+	}
194 194
 }
Please login to merge, or discard this patch.
Spacing   +7 added lines, -7 removed lines patch added patch discarded remove patch
@@ -67,9 +67,9 @@  discard block
 block discarded – undo
67 67
      */
68 68
     public function prefixes($prefix = '')
69 69
     {
70
-        if (! empty($prefix)) {
70
+        if ( ! empty($prefix)) {
71 71
             // are there any base directories for this namespace prefix?
72
-            return isset($this->prefixes[ $prefix ]) ? $this->prefixes[ $prefix ] : array();
72
+            return isset($this->prefixes[$prefix]) ? $this->prefixes[$prefix] : array();
73 73
         }
74 74
         return $this->prefixes;
75 75
     }
@@ -100,18 +100,18 @@  discard block
 block discarded – undo
100 100
     public function addNamespace($prefix, $base_dir, $prepend = false)
101 101
     {
102 102
         // normalize namespace prefix
103
-        $prefix = trim($prefix, Psr4Autoloader::NS) . Psr4Autoloader::NS;
103
+        $prefix = trim($prefix, Psr4Autoloader::NS).Psr4Autoloader::NS;
104 104
         // normalize the base directory with a trailing separator
105 105
         $base_dir = \EEH_File::standardise_and_end_with_directory_separator($base_dir);
106 106
         // initialize the namespace prefix array
107
-        if (isset($this->prefixes[ $prefix ]) === false) {
108
-            $this->prefixes[ $prefix ] = array();
107
+        if (isset($this->prefixes[$prefix]) === false) {
108
+            $this->prefixes[$prefix] = array();
109 109
         }
110 110
         // retain the base directory for the namespace prefix
111 111
         if ($prepend) {
112
-            array_unshift($this->prefixes[ $prefix ], $base_dir);
112
+            array_unshift($this->prefixes[$prefix], $base_dir);
113 113
         } else {
114
-            $this->prefixes[ $prefix ][] = $base_dir;
114
+            $this->prefixes[$prefix][] = $base_dir;
115 115
         }
116 116
     }
117 117
 
Please login to merge, or discard this patch.
widgets/EspressoWidget.php 2 patches
Indentation   +22 added lines, -22 removed lines patch added patch discarded remove patch
@@ -13,28 +13,28 @@
 block discarded – undo
13 13
 {
14 14
 
15 15
 
16
-    /**
17
-     * @param string $name
18
-     * @param array  $widget_options
19
-     * @param array  $control_options
20
-     */
21
-    public function __construct($name = '', array $widget_options = array(), array $control_options = array())
22
-    {
23
-        $id_base = EspressoWidget::getIdBase(get_class($this));
24
-        $control_options['id_base'] = $id_base;
25
-        $control_options['height'] = isset($control_options['height']) ? $control_options['height'] : 300;
26
-        $control_options['width'] = isset($control_options['width']) ? $control_options['width'] : 350;
27
-        // Register widget with WordPress
28
-        parent::__construct($id_base, $name, $widget_options, $control_options);
29
-    }
16
+	/**
17
+	 * @param string $name
18
+	 * @param array  $widget_options
19
+	 * @param array  $control_options
20
+	 */
21
+	public function __construct($name = '', array $widget_options = array(), array $control_options = array())
22
+	{
23
+		$id_base = EspressoWidget::getIdBase(get_class($this));
24
+		$control_options['id_base'] = $id_base;
25
+		$control_options['height'] = isset($control_options['height']) ? $control_options['height'] : 300;
26
+		$control_options['width'] = isset($control_options['width']) ? $control_options['width'] : 350;
27
+		// Register widget with WordPress
28
+		parent::__construct($id_base, $name, $widget_options, $control_options);
29
+	}
30 30
 
31 31
 
32
-    /**
33
-     * @param string $widget_class
34
-     * @return string
35
-     */
36
-    public static function getIdBase($widget_class)
37
-    {
38
-        return sanitize_title(str_replace(array('EEW_', '_'), array('EE_', '-'), $widget_class)) . '-widget';
39
-    }
32
+	/**
33
+	 * @param string $widget_class
34
+	 * @return string
35
+	 */
36
+	public static function getIdBase($widget_class)
37
+	{
38
+		return sanitize_title(str_replace(array('EEW_', '_'), array('EE_', '-'), $widget_class)) . '-widget';
39
+	}
40 40
 }
Please login to merge, or discard this patch.
Spacing   +1 added lines, -1 removed lines patch added patch discarded remove patch
@@ -35,6 +35,6 @@
 block discarded – undo
35 35
      */
36 36
     public static function getIdBase($widget_class)
37 37
     {
38
-        return sanitize_title(str_replace(array('EEW_', '_'), array('EE_', '-'), $widget_class)) . '-widget';
38
+        return sanitize_title(str_replace(array('EEW_', '_'), array('EE_', '-'), $widget_class)).'-widget';
39 39
     }
40 40
 }
Please login to merge, or discard this patch.
modules/ticket_selector/TicketSelectorRowStandard.php 2 patches
Indentation   +355 added lines, -355 removed lines patch added patch discarded remove patch
@@ -17,359 +17,359 @@
 block discarded – undo
17 17
 class TicketSelectorRowStandard extends TicketSelectorRow
18 18
 {
19 19
 
20
-    /**
21
-     * @var TicketDetails $ticket_details
22
-     */
23
-    protected $ticket_details;
24
-
25
-    /**
26
-     * @var \EE_Ticket_Selector_Config $template_settings
27
-     */
28
-    protected $template_settings;
29
-
30
-    /**
31
-     * @var EE_Tax_Config $tax_settings
32
-     */
33
-    protected $tax_settings;
34
-
35
-    /**
36
-     * @var boolean $prices_displayed_including_taxes
37
-     */
38
-    protected $prices_displayed_including_taxes;
39
-
40
-    /**
41
-     * @var int $row
42
-     */
43
-    protected $row;
44
-
45
-    /**
46
-     * @var int $cols
47
-     */
48
-    protected $cols;
49
-
50
-    /**
51
-     * @var boolean $hidden_input_qty
52
-     */
53
-    protected $hidden_input_qty;
54
-
55
-    /**
56
-     * @var string $ticket_datetime_classes
57
-     */
58
-    protected $ticket_datetime_classes;
59
-
60
-
61
-    /**
62
-     * TicketDetails constructor.
63
-     *
64
-     * @param TicketDetails $ticket_details
65
-     * @param EE_Tax_Config $tax_settings
66
-     * @param int           $total_tickets
67
-     * @param int           $max_attendees
68
-     * @param int           $row
69
-     * @param int           $cols
70
-     * @param boolean       $required_ticket_sold_out
71
-     * @param string        $event_status
72
-     * @param string        $ticket_datetime_classes
73
-     * @throws EE_Error
74
-     * @throws UnexpectedEntityException
75
-     */
76
-    public function __construct(
77
-        TicketDetails $ticket_details,
78
-        EE_Tax_Config $tax_settings,
79
-        $total_tickets,
80
-        $max_attendees,
81
-        $row,
82
-        $cols,
83
-        $required_ticket_sold_out,
84
-        $event_status,
85
-        $ticket_datetime_classes
86
-    ) {
87
-        $this->ticket_details = $ticket_details;
88
-        $this->template_settings = $ticket_details->getTemplateSettings();
89
-        $this->tax_settings = $tax_settings;
90
-        $this->row = $row;
91
-        $this->cols = $cols;
92
-        $this->ticket_datetime_classes = $ticket_datetime_classes;
93
-        parent::__construct(
94
-            $ticket_details->getTicket(),
95
-            $max_attendees,
96
-            $ticket_details->getDateFormat(),
97
-            $event_status,
98
-            $required_ticket_sold_out,
99
-            $total_tickets
100
-        );
101
-    }
102
-
103
-
104
-    /**
105
-     * other ticket rows will need to know if a required ticket is sold out,
106
-     * so that they are not offered for sale
107
-     *
108
-     * @return boolean
109
-     */
110
-    public function getRequiredTicketSoldOut()
111
-    {
112
-        return $this->required_ticket_sold_out;
113
-    }
114
-
115
-
116
-    /**
117
-     * @return int
118
-     */
119
-    public function getCols()
120
-    {
121
-        return $this->cols;
122
-    }
123
-
124
-
125
-    /**
126
-     * getHtml
127
-     *
128
-     * @return string
129
-     * @throws EE_Error
130
-     */
131
-    public function getHtml()
132
-    {
133
-        $this->min = 0;
134
-        $this->max = $this->ticket->max();
135
-        $remaining = $this->ticket->remaining();
136
-        if ($this->ticket->is_on_sale() && $this->ticket->is_remaining()) {
137
-            $this->setTicketMinAndMax($remaining);
138
-        } else {
139
-            // set flag if ticket is required (flag is set to start date so that future tickets are not blocked)
140
-            $this->required_ticket_sold_out = $this->ticket->required() && ! $remaining
141
-                ? $this->ticket->start_date()
142
-                : $this->required_ticket_sold_out;
143
-        }
144
-        $this->setTicketPriceDetails();
145
-        $this->setTicketStatusClasses($remaining);
146
-        $filtered_row_html = $this->getFilteredRowHtml();
147
-        if ($filtered_row_html !== false) {
148
-            return $filtered_row_html;
149
-        }
150
-        $ticket_selector_row_html = EEH_HTML::tr(
151
-            '',
152
-            '',
153
-            "tckt-slctr-tbl-tr {$this->status_class}{$this->ticket_datetime_classes} "
154
-            . espresso_get_object_css_class($this->ticket)
155
-        );
156
-        $filtered_row_content = $this->getFilteredRowContents();
157
-        if ($filtered_row_content !== false && $this->max_attendees === 1) {
158
-            return $ticket_selector_row_html
159
-                   . $filtered_row_content
160
-                   . $this->ticketQtyAndIdHiddenInputs()
161
-                   . EEH_HTML::trx();
162
-        }
163
-        if ($filtered_row_content !== false) {
164
-            return $ticket_selector_row_html
165
-                   . $filtered_row_content
166
-                   . EEH_HTML::trx();
167
-        }
168
-        $this->hidden_input_qty = $this->max_attendees > 1;
169
-
170
-        $ticket_selector_row_html .= $this->ticketNameTableCell();
171
-        $ticket_selector_row_html .= $this->ticketPriceTableCell();
172
-        $ticket_selector_row_html .= EEH_HTML::td(
173
-            '',
174
-            '',
175
-            'tckt-slctr-tbl-td-qty cntr',
176
-            '',
177
-            'headers="quantity-' . $this->EVT_ID . '"'
178
-        );
179
-        $this->setTicketStatusDisplay($remaining);
180
-        if (empty($this->ticket_status_display)) {
181
-            if ($this->max_attendees === 1) {
182
-                // only ONE attendee is allowed to register at a time
183
-                $ticket_selector_row_html .= $this->onlyOneAttendeeCanRegister();
184
-            } elseif ($this->max > 0) {
185
-                $ticket_selector_row_html .= $this->ticketQuantitySelector();
186
-            }
187
-        }
188
-        $ticket_selector_row_html .= $this->ticket_status_display;
189
-        $ticket_selector_row_html .= $this->ticketQtyAndIdHiddenInputs();
190
-        $ticket_selector_row_html .= $this->ticket_details->display(
191
-            $this->ticket_price,
192
-            $remaining,
193
-            $this->cols
194
-        );
195
-        $ticket_selector_row_html .= EEH_HTML::tdx();
196
-        $ticket_selector_row_html .= EEH_HTML::trx();
197
-
198
-
199
-        $this->row++;
200
-        return $ticket_selector_row_html;
201
-    }
202
-
203
-
204
-    /**
205
-     * getTicketPriceDetails
206
-     *
207
-     * @return void
208
-     * @throws EE_Error
209
-     */
210
-    protected function setTicketPriceDetails()
211
-    {
212
-        $this->ticket_price = $this->tax_settings->prices_displayed_including_taxes
213
-            ? $this->ticket->get_ticket_total_with_taxes()
214
-            : $this->ticket->get_ticket_subtotal();
215
-        $this->ticket_bundle = false;
216
-        $ticket_min = $this->ticket->min();
217
-        // for ticket bundles, set min and max qty the same
218
-        if ($ticket_min !== 0 && $ticket_min === $this->ticket->max()) {
219
-            $this->ticket_price *= $ticket_min;
220
-            $this->ticket_bundle = true;
221
-        }
222
-        $this->ticket_price = apply_filters(
223
-            'FHEE__ticket_selector_chart_template__ticket_price',
224
-            $this->ticket_price,
225
-            $this->ticket
226
-        );
227
-    }
228
-
229
-
230
-    /**
231
-     * ticketNameTableCell
232
-     *
233
-     * @return string
234
-     * @throws EE_Error
235
-     */
236
-    protected function ticketNameTableCell()
237
-    {
238
-        $html = EEH_HTML::td(
239
-            '',
240
-            '',
241
-            'tckt-slctr-tbl-td-name',
242
-            '',
243
-            'headers="details-' . $this->EVT_ID . '"'
244
-        );
245
-        $html .= EEH_HTML::strong($this->ticket->get_pretty('TKT_name'));
246
-        $html .= $this->ticket_details->getShowHideLinks();
247
-        if ($this->ticket->required()) {
248
-            $html .= EEH_HTML::p(
249
-                apply_filters(
250
-                    'FHEE__ticket_selector_chart_template__ticket_required_message',
251
-                    esc_html__('This ticket is required and must be purchased.', 'event_espresso')
252
-                ),
253
-                '',
254
-                'ticket-required-pg'
255
-            );
256
-        }
257
-        $html .= EEH_HTML::tdx();
258
-        return $html;
259
-    }
260
-
261
-
262
-    /**
263
-     * ticketPriceTableCell
264
-     *
265
-     * @return string
266
-     * @throws EE_Error
267
-     */
268
-    protected function ticketPriceTableCell()
269
-    {
270
-        $html = '';
271
-        if (apply_filters('FHEE__ticket_selector_chart_template__display_ticket_price_details', true)) {
272
-            $html .= EEH_HTML::td(
273
-                '',
274
-                '',
275
-                'tckt-slctr-tbl-td-price jst-rght',
276
-                '',
277
-                'headers="price-' . $this->EVT_ID . '"'
278
-            );
279
-            $html .= \EEH_Template::format_currency($this->ticket_price);
280
-            $html .= $this->ticket->taxable()
281
-                ? EEH_HTML::span('*', '', 'taxable-tickets-asterisk grey-text')
282
-                : '';
283
-            $html .= '&nbsp;';
284
-            // phpcs:disable WordPress.WP.I18n.NoEmptyStrings
285
-            $html .= EEH_HTML::span(
286
-                $this->ticket_bundle
287
-                    ? apply_filters(
288
-                        'FHEE__ticket_selector_chart_template__per_ticket_bundle_text',
289
-                        __(' / bundle', 'event_espresso')
290
-                    )
291
-                    : apply_filters(
292
-                        'FHEE__ticket_selector_chart_template__per_ticket_text',
293
-                        __('', 'event_espresso')
294
-                    ),
295
-                '',
296
-                'smaller-text no-bold'
297
-            );
298
-            $html .= '&nbsp;';
299
-            $html .= EEH_HTML::tdx();
300
-            $this->cols++;
301
-        }
302
-        return $html;
303
-    }
304
-
305
-
306
-    /**
307
-     * onlyOneAttendeeCanRegister
308
-     *
309
-     * @return string
310
-     */
311
-    protected function onlyOneAttendeeCanRegister()
312
-    {
313
-        // display submit button since we have tickets available
314
-        add_filter('FHEE__EE_Ticket_Selector__display_ticket_selector_submit', '__return_true');
315
-        $this->hidden_input_qty = false;
316
-        $id = 'ticket-selector-tbl-qty-slct-' . $this->EVT_ID . '-' . $this->row;
317
-        $html = '<label class="ee-a11y-screen-reader-text" for="' . $id . '">';
318
-        $html .= esc_html__('Select this ticket', 'event_espresso') . '</label>';
319
-        $html .= '<input type="radio" name="tkt-slctr-qty-' . $this->EVT_ID . '"';
320
-        $html .= ' id="' . $id . '"';
321
-        $html .= ' class="ticket-selector-tbl-qty-slct" value="' . $this->row . '-1"';
322
-        $html .= $this->total_tickets === 1 ? ' checked="checked"' : '';
323
-        $html .= ' title=""/>';
324
-        return $html;
325
-    }
326
-
327
-
328
-    /**
329
-     * ticketQuantitySelector
330
-     *
331
-     * @return string
332
-     * @throws EE_Error
333
-     */
334
-    protected function ticketQuantitySelector()
335
-    {
336
-        // display submit button since we have tickets available
337
-        add_filter('FHEE__EE_Ticket_Selector__display_ticket_selector_submit', '__return_true');
338
-        $this->hidden_input_qty = false;
339
-        $id = 'ticket-selector-tbl-qty-slct-' . $this->EVT_ID . '-' . $this->row;
340
-        $html = '<label class="ee-a11y-screen-reader-text" for="' . $id . '">';
341
-        $html .= esc_html__('Quantity', 'event_espresso') . '</label>';
342
-        $html .= '<select name="tkt-slctr-qty-' . $this->EVT_ID . '[]"';
343
-        $html .= ' id="' . $id . '"';
344
-        $html .= ' class="ticket-selector-tbl-qty-slct">';
345
-        // this ensures that non-required tickets with non-zero MIN QTYs don't HAVE to be purchased
346
-        if ($this->min !== 0 && ! $this->ticket->required()) {
347
-            $html .= '<option value="0">&nbsp;0&nbsp;</option>';
348
-        }
349
-        // offer ticket quantities from the min to the max
350
-        for ($i = $this->min; $i <= $this->max; $i++) {
351
-            $html .= '<option value="' . $i . '">&nbsp;' . $i . '&nbsp;</option>';
352
-        }
353
-        $html .= '</select>';
354
-        return $html;
355
-    }
356
-
357
-
358
-    /**
359
-     * getHiddenInputs
360
-     *
361
-     * @return string
362
-     * @throws EE_Error
363
-     */
364
-    protected function ticketQtyAndIdHiddenInputs()
365
-    {
366
-        $html = '';
367
-        // depending on group reg we need to change the format for qty
368
-        if ($this->hidden_input_qty) {
369
-            $html .= '<input type="hidden" name="tkt-slctr-qty-' . $this->EVT_ID . '[]" value="0"/>';
370
-        }
371
-        $html .= '<input type="hidden" name="tkt-slctr-ticket-id-' . $this->EVT_ID . '[]"';
372
-        $html .= ' value="' . $this->ticket->ID() . '"/>';
373
-        return $html;
374
-    }
20
+	/**
21
+	 * @var TicketDetails $ticket_details
22
+	 */
23
+	protected $ticket_details;
24
+
25
+	/**
26
+	 * @var \EE_Ticket_Selector_Config $template_settings
27
+	 */
28
+	protected $template_settings;
29
+
30
+	/**
31
+	 * @var EE_Tax_Config $tax_settings
32
+	 */
33
+	protected $tax_settings;
34
+
35
+	/**
36
+	 * @var boolean $prices_displayed_including_taxes
37
+	 */
38
+	protected $prices_displayed_including_taxes;
39
+
40
+	/**
41
+	 * @var int $row
42
+	 */
43
+	protected $row;
44
+
45
+	/**
46
+	 * @var int $cols
47
+	 */
48
+	protected $cols;
49
+
50
+	/**
51
+	 * @var boolean $hidden_input_qty
52
+	 */
53
+	protected $hidden_input_qty;
54
+
55
+	/**
56
+	 * @var string $ticket_datetime_classes
57
+	 */
58
+	protected $ticket_datetime_classes;
59
+
60
+
61
+	/**
62
+	 * TicketDetails constructor.
63
+	 *
64
+	 * @param TicketDetails $ticket_details
65
+	 * @param EE_Tax_Config $tax_settings
66
+	 * @param int           $total_tickets
67
+	 * @param int           $max_attendees
68
+	 * @param int           $row
69
+	 * @param int           $cols
70
+	 * @param boolean       $required_ticket_sold_out
71
+	 * @param string        $event_status
72
+	 * @param string        $ticket_datetime_classes
73
+	 * @throws EE_Error
74
+	 * @throws UnexpectedEntityException
75
+	 */
76
+	public function __construct(
77
+		TicketDetails $ticket_details,
78
+		EE_Tax_Config $tax_settings,
79
+		$total_tickets,
80
+		$max_attendees,
81
+		$row,
82
+		$cols,
83
+		$required_ticket_sold_out,
84
+		$event_status,
85
+		$ticket_datetime_classes
86
+	) {
87
+		$this->ticket_details = $ticket_details;
88
+		$this->template_settings = $ticket_details->getTemplateSettings();
89
+		$this->tax_settings = $tax_settings;
90
+		$this->row = $row;
91
+		$this->cols = $cols;
92
+		$this->ticket_datetime_classes = $ticket_datetime_classes;
93
+		parent::__construct(
94
+			$ticket_details->getTicket(),
95
+			$max_attendees,
96
+			$ticket_details->getDateFormat(),
97
+			$event_status,
98
+			$required_ticket_sold_out,
99
+			$total_tickets
100
+		);
101
+	}
102
+
103
+
104
+	/**
105
+	 * other ticket rows will need to know if a required ticket is sold out,
106
+	 * so that they are not offered for sale
107
+	 *
108
+	 * @return boolean
109
+	 */
110
+	public function getRequiredTicketSoldOut()
111
+	{
112
+		return $this->required_ticket_sold_out;
113
+	}
114
+
115
+
116
+	/**
117
+	 * @return int
118
+	 */
119
+	public function getCols()
120
+	{
121
+		return $this->cols;
122
+	}
123
+
124
+
125
+	/**
126
+	 * getHtml
127
+	 *
128
+	 * @return string
129
+	 * @throws EE_Error
130
+	 */
131
+	public function getHtml()
132
+	{
133
+		$this->min = 0;
134
+		$this->max = $this->ticket->max();
135
+		$remaining = $this->ticket->remaining();
136
+		if ($this->ticket->is_on_sale() && $this->ticket->is_remaining()) {
137
+			$this->setTicketMinAndMax($remaining);
138
+		} else {
139
+			// set flag if ticket is required (flag is set to start date so that future tickets are not blocked)
140
+			$this->required_ticket_sold_out = $this->ticket->required() && ! $remaining
141
+				? $this->ticket->start_date()
142
+				: $this->required_ticket_sold_out;
143
+		}
144
+		$this->setTicketPriceDetails();
145
+		$this->setTicketStatusClasses($remaining);
146
+		$filtered_row_html = $this->getFilteredRowHtml();
147
+		if ($filtered_row_html !== false) {
148
+			return $filtered_row_html;
149
+		}
150
+		$ticket_selector_row_html = EEH_HTML::tr(
151
+			'',
152
+			'',
153
+			"tckt-slctr-tbl-tr {$this->status_class}{$this->ticket_datetime_classes} "
154
+			. espresso_get_object_css_class($this->ticket)
155
+		);
156
+		$filtered_row_content = $this->getFilteredRowContents();
157
+		if ($filtered_row_content !== false && $this->max_attendees === 1) {
158
+			return $ticket_selector_row_html
159
+				   . $filtered_row_content
160
+				   . $this->ticketQtyAndIdHiddenInputs()
161
+				   . EEH_HTML::trx();
162
+		}
163
+		if ($filtered_row_content !== false) {
164
+			return $ticket_selector_row_html
165
+				   . $filtered_row_content
166
+				   . EEH_HTML::trx();
167
+		}
168
+		$this->hidden_input_qty = $this->max_attendees > 1;
169
+
170
+		$ticket_selector_row_html .= $this->ticketNameTableCell();
171
+		$ticket_selector_row_html .= $this->ticketPriceTableCell();
172
+		$ticket_selector_row_html .= EEH_HTML::td(
173
+			'',
174
+			'',
175
+			'tckt-slctr-tbl-td-qty cntr',
176
+			'',
177
+			'headers="quantity-' . $this->EVT_ID . '"'
178
+		);
179
+		$this->setTicketStatusDisplay($remaining);
180
+		if (empty($this->ticket_status_display)) {
181
+			if ($this->max_attendees === 1) {
182
+				// only ONE attendee is allowed to register at a time
183
+				$ticket_selector_row_html .= $this->onlyOneAttendeeCanRegister();
184
+			} elseif ($this->max > 0) {
185
+				$ticket_selector_row_html .= $this->ticketQuantitySelector();
186
+			}
187
+		}
188
+		$ticket_selector_row_html .= $this->ticket_status_display;
189
+		$ticket_selector_row_html .= $this->ticketQtyAndIdHiddenInputs();
190
+		$ticket_selector_row_html .= $this->ticket_details->display(
191
+			$this->ticket_price,
192
+			$remaining,
193
+			$this->cols
194
+		);
195
+		$ticket_selector_row_html .= EEH_HTML::tdx();
196
+		$ticket_selector_row_html .= EEH_HTML::trx();
197
+
198
+
199
+		$this->row++;
200
+		return $ticket_selector_row_html;
201
+	}
202
+
203
+
204
+	/**
205
+	 * getTicketPriceDetails
206
+	 *
207
+	 * @return void
208
+	 * @throws EE_Error
209
+	 */
210
+	protected function setTicketPriceDetails()
211
+	{
212
+		$this->ticket_price = $this->tax_settings->prices_displayed_including_taxes
213
+			? $this->ticket->get_ticket_total_with_taxes()
214
+			: $this->ticket->get_ticket_subtotal();
215
+		$this->ticket_bundle = false;
216
+		$ticket_min = $this->ticket->min();
217
+		// for ticket bundles, set min and max qty the same
218
+		if ($ticket_min !== 0 && $ticket_min === $this->ticket->max()) {
219
+			$this->ticket_price *= $ticket_min;
220
+			$this->ticket_bundle = true;
221
+		}
222
+		$this->ticket_price = apply_filters(
223
+			'FHEE__ticket_selector_chart_template__ticket_price',
224
+			$this->ticket_price,
225
+			$this->ticket
226
+		);
227
+	}
228
+
229
+
230
+	/**
231
+	 * ticketNameTableCell
232
+	 *
233
+	 * @return string
234
+	 * @throws EE_Error
235
+	 */
236
+	protected function ticketNameTableCell()
237
+	{
238
+		$html = EEH_HTML::td(
239
+			'',
240
+			'',
241
+			'tckt-slctr-tbl-td-name',
242
+			'',
243
+			'headers="details-' . $this->EVT_ID . '"'
244
+		);
245
+		$html .= EEH_HTML::strong($this->ticket->get_pretty('TKT_name'));
246
+		$html .= $this->ticket_details->getShowHideLinks();
247
+		if ($this->ticket->required()) {
248
+			$html .= EEH_HTML::p(
249
+				apply_filters(
250
+					'FHEE__ticket_selector_chart_template__ticket_required_message',
251
+					esc_html__('This ticket is required and must be purchased.', 'event_espresso')
252
+				),
253
+				'',
254
+				'ticket-required-pg'
255
+			);
256
+		}
257
+		$html .= EEH_HTML::tdx();
258
+		return $html;
259
+	}
260
+
261
+
262
+	/**
263
+	 * ticketPriceTableCell
264
+	 *
265
+	 * @return string
266
+	 * @throws EE_Error
267
+	 */
268
+	protected function ticketPriceTableCell()
269
+	{
270
+		$html = '';
271
+		if (apply_filters('FHEE__ticket_selector_chart_template__display_ticket_price_details', true)) {
272
+			$html .= EEH_HTML::td(
273
+				'',
274
+				'',
275
+				'tckt-slctr-tbl-td-price jst-rght',
276
+				'',
277
+				'headers="price-' . $this->EVT_ID . '"'
278
+			);
279
+			$html .= \EEH_Template::format_currency($this->ticket_price);
280
+			$html .= $this->ticket->taxable()
281
+				? EEH_HTML::span('*', '', 'taxable-tickets-asterisk grey-text')
282
+				: '';
283
+			$html .= '&nbsp;';
284
+			// phpcs:disable WordPress.WP.I18n.NoEmptyStrings
285
+			$html .= EEH_HTML::span(
286
+				$this->ticket_bundle
287
+					? apply_filters(
288
+						'FHEE__ticket_selector_chart_template__per_ticket_bundle_text',
289
+						__(' / bundle', 'event_espresso')
290
+					)
291
+					: apply_filters(
292
+						'FHEE__ticket_selector_chart_template__per_ticket_text',
293
+						__('', 'event_espresso')
294
+					),
295
+				'',
296
+				'smaller-text no-bold'
297
+			);
298
+			$html .= '&nbsp;';
299
+			$html .= EEH_HTML::tdx();
300
+			$this->cols++;
301
+		}
302
+		return $html;
303
+	}
304
+
305
+
306
+	/**
307
+	 * onlyOneAttendeeCanRegister
308
+	 *
309
+	 * @return string
310
+	 */
311
+	protected function onlyOneAttendeeCanRegister()
312
+	{
313
+		// display submit button since we have tickets available
314
+		add_filter('FHEE__EE_Ticket_Selector__display_ticket_selector_submit', '__return_true');
315
+		$this->hidden_input_qty = false;
316
+		$id = 'ticket-selector-tbl-qty-slct-' . $this->EVT_ID . '-' . $this->row;
317
+		$html = '<label class="ee-a11y-screen-reader-text" for="' . $id . '">';
318
+		$html .= esc_html__('Select this ticket', 'event_espresso') . '</label>';
319
+		$html .= '<input type="radio" name="tkt-slctr-qty-' . $this->EVT_ID . '"';
320
+		$html .= ' id="' . $id . '"';
321
+		$html .= ' class="ticket-selector-tbl-qty-slct" value="' . $this->row . '-1"';
322
+		$html .= $this->total_tickets === 1 ? ' checked="checked"' : '';
323
+		$html .= ' title=""/>';
324
+		return $html;
325
+	}
326
+
327
+
328
+	/**
329
+	 * ticketQuantitySelector
330
+	 *
331
+	 * @return string
332
+	 * @throws EE_Error
333
+	 */
334
+	protected function ticketQuantitySelector()
335
+	{
336
+		// display submit button since we have tickets available
337
+		add_filter('FHEE__EE_Ticket_Selector__display_ticket_selector_submit', '__return_true');
338
+		$this->hidden_input_qty = false;
339
+		$id = 'ticket-selector-tbl-qty-slct-' . $this->EVT_ID . '-' . $this->row;
340
+		$html = '<label class="ee-a11y-screen-reader-text" for="' . $id . '">';
341
+		$html .= esc_html__('Quantity', 'event_espresso') . '</label>';
342
+		$html .= '<select name="tkt-slctr-qty-' . $this->EVT_ID . '[]"';
343
+		$html .= ' id="' . $id . '"';
344
+		$html .= ' class="ticket-selector-tbl-qty-slct">';
345
+		// this ensures that non-required tickets with non-zero MIN QTYs don't HAVE to be purchased
346
+		if ($this->min !== 0 && ! $this->ticket->required()) {
347
+			$html .= '<option value="0">&nbsp;0&nbsp;</option>';
348
+		}
349
+		// offer ticket quantities from the min to the max
350
+		for ($i = $this->min; $i <= $this->max; $i++) {
351
+			$html .= '<option value="' . $i . '">&nbsp;' . $i . '&nbsp;</option>';
352
+		}
353
+		$html .= '</select>';
354
+		return $html;
355
+	}
356
+
357
+
358
+	/**
359
+	 * getHiddenInputs
360
+	 *
361
+	 * @return string
362
+	 * @throws EE_Error
363
+	 */
364
+	protected function ticketQtyAndIdHiddenInputs()
365
+	{
366
+		$html = '';
367
+		// depending on group reg we need to change the format for qty
368
+		if ($this->hidden_input_qty) {
369
+			$html .= '<input type="hidden" name="tkt-slctr-qty-' . $this->EVT_ID . '[]" value="0"/>';
370
+		}
371
+		$html .= '<input type="hidden" name="tkt-slctr-ticket-id-' . $this->EVT_ID . '[]"';
372
+		$html .= ' value="' . $this->ticket->ID() . '"/>';
373
+		return $html;
374
+	}
375 375
 }
Please login to merge, or discard this patch.
Spacing   +18 added lines, -18 removed lines patch added patch discarded remove patch
@@ -174,7 +174,7 @@  discard block
 block discarded – undo
174 174
             '',
175 175
             'tckt-slctr-tbl-td-qty cntr',
176 176
             '',
177
-            'headers="quantity-' . $this->EVT_ID . '"'
177
+            'headers="quantity-'.$this->EVT_ID.'"'
178 178
         );
179 179
         $this->setTicketStatusDisplay($remaining);
180 180
         if (empty($this->ticket_status_display)) {
@@ -240,7 +240,7 @@  discard block
 block discarded – undo
240 240
             '',
241 241
             'tckt-slctr-tbl-td-name',
242 242
             '',
243
-            'headers="details-' . $this->EVT_ID . '"'
243
+            'headers="details-'.$this->EVT_ID.'"'
244 244
         );
245 245
         $html .= EEH_HTML::strong($this->ticket->get_pretty('TKT_name'));
246 246
         $html .= $this->ticket_details->getShowHideLinks();
@@ -274,7 +274,7 @@  discard block
 block discarded – undo
274 274
                 '',
275 275
                 'tckt-slctr-tbl-td-price jst-rght',
276 276
                 '',
277
-                'headers="price-' . $this->EVT_ID . '"'
277
+                'headers="price-'.$this->EVT_ID.'"'
278 278
             );
279 279
             $html .= \EEH_Template::format_currency($this->ticket_price);
280 280
             $html .= $this->ticket->taxable()
@@ -313,12 +313,12 @@  discard block
 block discarded – undo
313 313
         // display submit button since we have tickets available
314 314
         add_filter('FHEE__EE_Ticket_Selector__display_ticket_selector_submit', '__return_true');
315 315
         $this->hidden_input_qty = false;
316
-        $id = 'ticket-selector-tbl-qty-slct-' . $this->EVT_ID . '-' . $this->row;
317
-        $html = '<label class="ee-a11y-screen-reader-text" for="' . $id . '">';
318
-        $html .= esc_html__('Select this ticket', 'event_espresso') . '</label>';
319
-        $html .= '<input type="radio" name="tkt-slctr-qty-' . $this->EVT_ID . '"';
320
-        $html .= ' id="' . $id . '"';
321
-        $html .= ' class="ticket-selector-tbl-qty-slct" value="' . $this->row . '-1"';
316
+        $id = 'ticket-selector-tbl-qty-slct-'.$this->EVT_ID.'-'.$this->row;
317
+        $html = '<label class="ee-a11y-screen-reader-text" for="'.$id.'">';
318
+        $html .= esc_html__('Select this ticket', 'event_espresso').'</label>';
319
+        $html .= '<input type="radio" name="tkt-slctr-qty-'.$this->EVT_ID.'"';
320
+        $html .= ' id="'.$id.'"';
321
+        $html .= ' class="ticket-selector-tbl-qty-slct" value="'.$this->row.'-1"';
322 322
         $html .= $this->total_tickets === 1 ? ' checked="checked"' : '';
323 323
         $html .= ' title=""/>';
324 324
         return $html;
@@ -336,11 +336,11 @@  discard block
 block discarded – undo
336 336
         // display submit button since we have tickets available
337 337
         add_filter('FHEE__EE_Ticket_Selector__display_ticket_selector_submit', '__return_true');
338 338
         $this->hidden_input_qty = false;
339
-        $id = 'ticket-selector-tbl-qty-slct-' . $this->EVT_ID . '-' . $this->row;
340
-        $html = '<label class="ee-a11y-screen-reader-text" for="' . $id . '">';
341
-        $html .= esc_html__('Quantity', 'event_espresso') . '</label>';
342
-        $html .= '<select name="tkt-slctr-qty-' . $this->EVT_ID . '[]"';
343
-        $html .= ' id="' . $id . '"';
339
+        $id = 'ticket-selector-tbl-qty-slct-'.$this->EVT_ID.'-'.$this->row;
340
+        $html = '<label class="ee-a11y-screen-reader-text" for="'.$id.'">';
341
+        $html .= esc_html__('Quantity', 'event_espresso').'</label>';
342
+        $html .= '<select name="tkt-slctr-qty-'.$this->EVT_ID.'[]"';
343
+        $html .= ' id="'.$id.'"';
344 344
         $html .= ' class="ticket-selector-tbl-qty-slct">';
345 345
         // this ensures that non-required tickets with non-zero MIN QTYs don't HAVE to be purchased
346 346
         if ($this->min !== 0 && ! $this->ticket->required()) {
@@ -348,7 +348,7 @@  discard block
 block discarded – undo
348 348
         }
349 349
         // offer ticket quantities from the min to the max
350 350
         for ($i = $this->min; $i <= $this->max; $i++) {
351
-            $html .= '<option value="' . $i . '">&nbsp;' . $i . '&nbsp;</option>';
351
+            $html .= '<option value="'.$i.'">&nbsp;'.$i.'&nbsp;</option>';
352 352
         }
353 353
         $html .= '</select>';
354 354
         return $html;
@@ -366,10 +366,10 @@  discard block
 block discarded – undo
366 366
         $html = '';
367 367
         // depending on group reg we need to change the format for qty
368 368
         if ($this->hidden_input_qty) {
369
-            $html .= '<input type="hidden" name="tkt-slctr-qty-' . $this->EVT_ID . '[]" value="0"/>';
369
+            $html .= '<input type="hidden" name="tkt-slctr-qty-'.$this->EVT_ID.'[]" value="0"/>';
370 370
         }
371
-        $html .= '<input type="hidden" name="tkt-slctr-ticket-id-' . $this->EVT_ID . '[]"';
372
-        $html .= ' value="' . $this->ticket->ID() . '"/>';
371
+        $html .= '<input type="hidden" name="tkt-slctr-ticket-id-'.$this->EVT_ID.'[]"';
372
+        $html .= ' value="'.$this->ticket->ID().'"/>';
373 373
         return $html;
374 374
     }
375 375
 }
Please login to merge, or discard this patch.
modules/ticket_selector/TicketSelectorIframeEmbedButton.php 1 patch
Indentation   +18 added lines, -18 removed lines patch added patch discarded remove patch
@@ -14,24 +14,24 @@
 block discarded – undo
14 14
 class TicketSelectorIframeEmbedButton extends IframeEmbedButton
15 15
 {
16 16
 
17
-    /**
18
-     * TicketSelectorIframeEmbedButton constructor.
19
-     */
20
-    public function __construct()
21
-    {
22
-        parent::__construct(
23
-            esc_html__('Ticket Selector', 'event_espresso'),
24
-            'ticket_selector'
25
-        );
26
-    }
17
+	/**
18
+	 * TicketSelectorIframeEmbedButton constructor.
19
+	 */
20
+	public function __construct()
21
+	{
22
+		parent::__construct(
23
+			esc_html__('Ticket Selector', 'event_espresso'),
24
+			'ticket_selector'
25
+		);
26
+	}
27 27
 
28 28
 
29
-    /**
30
-     * Adds an iframe embed code button to the Event editor.
31
-     */
32
-    public function addEventEditorIframeEmbedButton()
33
-    {
34
-        // add button for iframe code to event editor.
35
-        $this->addEventEditorIframeEmbedButtonFilter();
36
-    }
29
+	/**
30
+	 * Adds an iframe embed code button to the Event editor.
31
+	 */
32
+	public function addEventEditorIframeEmbedButton()
33
+	{
34
+		// add button for iframe code to event editor.
35
+		$this->addEventEditorIframeEmbedButtonFilter();
36
+	}
37 37
 }
Please login to merge, or discard this patch.
modules/ticket_selector/TicketSelectorStandard.php 2 patches
Indentation   +110 added lines, -110 removed lines patch added patch discarded remove patch
@@ -14,121 +14,121 @@
 block discarded – undo
14 14
 class TicketSelectorStandard extends TicketSelector
15 15
 {
16 16
 
17
-    /**
18
-     * @var string $date_format
19
-     */
20
-    protected $date_format;
17
+	/**
18
+	 * @var string $date_format
19
+	 */
20
+	protected $date_format;
21 21
 
22
-    /**
23
-     * @var string $time_format
24
-     */
25
-    protected $time_format;
22
+	/**
23
+	 * @var string $time_format
24
+	 */
25
+	protected $time_format;
26 26
 
27
-    /**
28
-     * @var \EE_Ticket_Selector_Config $ticket_selector_config
29
-     */
30
-    protected $ticket_selector_config;
27
+	/**
28
+	 * @var \EE_Ticket_Selector_Config $ticket_selector_config
29
+	 */
30
+	protected $ticket_selector_config;
31 31
 
32
-    /**
33
-     * @var \EE_Tax_Config $tax_config
34
-     */
35
-    protected $tax_config;
32
+	/**
33
+	 * @var \EE_Tax_Config $tax_config
34
+	 */
35
+	protected $tax_config;
36 36
 
37 37
 
38
-    /**
39
-     * TicketSelectorSimple constructor.
40
-     *
41
-     * @param \EE_Event                  $event
42
-     * @param \EE_Ticket[]               $tickets
43
-     * @param int                        $max_attendees
44
-     * @param array                      $template_args
45
-     * @param string                     $date_format
46
-     * @param string                     $time_format
47
-     * @param \EE_Ticket_Selector_Config $ticket_selector_config
48
-     * @param \EE_Tax_Config             $tax_config
49
-     */
50
-    public function __construct(
51
-        \EE_Event $event,
52
-        array $tickets,
53
-        $max_attendees,
54
-        array $template_args,
55
-        $date_format = 'Y-m-d',
56
-        $time_format = 'g:i a',
57
-        \EE_Ticket_Selector_Config $ticket_selector_config = null,
58
-        \EE_Tax_Config $tax_config = null
59
-    ) {
60
-        $this->date_format = $date_format;
61
-        $this->time_format = $time_format;
62
-        // get EE_Ticket_Selector_Config and TicketDetails
63
-        $this->ticket_selector_config = isset(\EE_Registry::instance()->CFG->template_settings->EED_Ticket_Selector)
64
-            ? \EE_Registry::instance()->CFG->template_settings->EED_Ticket_Selector
65
-            : new \EE_Ticket_Selector_Config();
66
-        // $template_settings->setDatetimeSelectorThreshold(2);
67
-        // \EEH_Debug_Tools::printr($template_settings->getShowDatetimeSelector(), 'getShowDatetimeSelector', __FILE__, __LINE__);
68
-        // \EEH_Debug_Tools::printr($template_settings->getDatetimeSelectorThreshold(), 'getDatetimeSelectorThreshold', __FILE__, __LINE__);
69
-        $this->tax_config = isset(\EE_Registry::instance()->CFG->tax_settings)
70
-            ? \EE_Registry::instance()->CFG->tax_settings
71
-            : new \EE_Tax_Config();
72
-        parent::__construct($event, $tickets, $max_attendees, $template_args);
73
-    }
38
+	/**
39
+	 * TicketSelectorSimple constructor.
40
+	 *
41
+	 * @param \EE_Event                  $event
42
+	 * @param \EE_Ticket[]               $tickets
43
+	 * @param int                        $max_attendees
44
+	 * @param array                      $template_args
45
+	 * @param string                     $date_format
46
+	 * @param string                     $time_format
47
+	 * @param \EE_Ticket_Selector_Config $ticket_selector_config
48
+	 * @param \EE_Tax_Config             $tax_config
49
+	 */
50
+	public function __construct(
51
+		\EE_Event $event,
52
+		array $tickets,
53
+		$max_attendees,
54
+		array $template_args,
55
+		$date_format = 'Y-m-d',
56
+		$time_format = 'g:i a',
57
+		\EE_Ticket_Selector_Config $ticket_selector_config = null,
58
+		\EE_Tax_Config $tax_config = null
59
+	) {
60
+		$this->date_format = $date_format;
61
+		$this->time_format = $time_format;
62
+		// get EE_Ticket_Selector_Config and TicketDetails
63
+		$this->ticket_selector_config = isset(\EE_Registry::instance()->CFG->template_settings->EED_Ticket_Selector)
64
+			? \EE_Registry::instance()->CFG->template_settings->EED_Ticket_Selector
65
+			: new \EE_Ticket_Selector_Config();
66
+		// $template_settings->setDatetimeSelectorThreshold(2);
67
+		// \EEH_Debug_Tools::printr($template_settings->getShowDatetimeSelector(), 'getShowDatetimeSelector', __FILE__, __LINE__);
68
+		// \EEH_Debug_Tools::printr($template_settings->getDatetimeSelectorThreshold(), 'getDatetimeSelectorThreshold', __FILE__, __LINE__);
69
+		$this->tax_config = isset(\EE_Registry::instance()->CFG->tax_settings)
70
+			? \EE_Registry::instance()->CFG->tax_settings
71
+			: new \EE_Tax_Config();
72
+		parent::__construct($event, $tickets, $max_attendees, $template_args);
73
+	}
74 74
 
75 75
 
76
-    /**
77
-     * sets any and all template args that are required for this Ticket Selector
78
-     *
79
-     * @return void
80
-     * @throws \EE_Error
81
-     */
82
-    protected function addTemplateArgs()
83
-    {
84
-        $row = 1;
85
-        $ticket_row_html = '';
86
-        $required_ticket_sold_out = false;
87
-        // flag to indicate that at least one taxable ticket has been encountered
88
-        $taxable_tickets = false;
89
-        $datetime_selector = null;
90
-        $this->template_args['datetime_selector'] = '';
91
-        if ($this->ticket_selector_config->getShowDatetimeSelector()
92
-            !== \EE_Ticket_Selector_Config::DO_NOT_SHOW_DATETIME_SELECTOR
93
-        ) {
94
-            $datetime_selector = new DatetimeSelector(
95
-                $this->event,
96
-                $this->tickets,
97
-                $this->ticket_selector_config,
98
-                $this->date_format,
99
-                $this->time_format
100
-            );
101
-            $this->template_args['datetime_selector'] = $datetime_selector->getDatetimeSelector();
102
-        }
103
-        $total_tickets = count($this->tickets);
104
-        // loop through tickets
105
-        foreach ($this->tickets as $TKT_ID => $ticket) {
106
-            if ($ticket instanceof \EE_Ticket) {
107
-                $cols = 2;
108
-                $taxable_tickets = $ticket->taxable() ? true : $taxable_tickets;
109
-                $ticket_selector_row = new TicketSelectorRowStandard(
110
-                    new TicketDetails($ticket, $this->ticket_selector_config, $this->template_args),
111
-                    $this->tax_config,
112
-                    $total_tickets,
113
-                    $this->max_attendees,
114
-                    $row,
115
-                    $cols,
116
-                    $required_ticket_sold_out,
117
-                    $this->template_args['event_status'],
118
-                    $datetime_selector instanceof DatetimeSelector
119
-                        ? $datetime_selector->getTicketDatetimeClasses($ticket)
120
-                        : ''
121
-                );
122
-                $ticket_row_html .= $ticket_selector_row->getHtml();
123
-                $required_ticket_sold_out = $ticket_selector_row->getRequiredTicketSoldOut();
124
-                $row++;
125
-            }
126
-        }
127
-        $this->template_args['row'] = $row;
128
-        $this->template_args['ticket_row_html'] = $ticket_row_html;
129
-        $this->template_args['taxable_tickets'] = $taxable_tickets;
130
-        $this->template_args['prices_displayed_including_taxes'] = $this->tax_config->prices_displayed_including_taxes;
131
-        $this->template_args['template_path'] = TICKET_SELECTOR_TEMPLATES_PATH . 'standard_ticket_selector.template.php';
132
-        remove_all_filters('FHEE__EE_Ticket_Selector__hide_ticket_selector');
133
-    }
76
+	/**
77
+	 * sets any and all template args that are required for this Ticket Selector
78
+	 *
79
+	 * @return void
80
+	 * @throws \EE_Error
81
+	 */
82
+	protected function addTemplateArgs()
83
+	{
84
+		$row = 1;
85
+		$ticket_row_html = '';
86
+		$required_ticket_sold_out = false;
87
+		// flag to indicate that at least one taxable ticket has been encountered
88
+		$taxable_tickets = false;
89
+		$datetime_selector = null;
90
+		$this->template_args['datetime_selector'] = '';
91
+		if ($this->ticket_selector_config->getShowDatetimeSelector()
92
+			!== \EE_Ticket_Selector_Config::DO_NOT_SHOW_DATETIME_SELECTOR
93
+		) {
94
+			$datetime_selector = new DatetimeSelector(
95
+				$this->event,
96
+				$this->tickets,
97
+				$this->ticket_selector_config,
98
+				$this->date_format,
99
+				$this->time_format
100
+			);
101
+			$this->template_args['datetime_selector'] = $datetime_selector->getDatetimeSelector();
102
+		}
103
+		$total_tickets = count($this->tickets);
104
+		// loop through tickets
105
+		foreach ($this->tickets as $TKT_ID => $ticket) {
106
+			if ($ticket instanceof \EE_Ticket) {
107
+				$cols = 2;
108
+				$taxable_tickets = $ticket->taxable() ? true : $taxable_tickets;
109
+				$ticket_selector_row = new TicketSelectorRowStandard(
110
+					new TicketDetails($ticket, $this->ticket_selector_config, $this->template_args),
111
+					$this->tax_config,
112
+					$total_tickets,
113
+					$this->max_attendees,
114
+					$row,
115
+					$cols,
116
+					$required_ticket_sold_out,
117
+					$this->template_args['event_status'],
118
+					$datetime_selector instanceof DatetimeSelector
119
+						? $datetime_selector->getTicketDatetimeClasses($ticket)
120
+						: ''
121
+				);
122
+				$ticket_row_html .= $ticket_selector_row->getHtml();
123
+				$required_ticket_sold_out = $ticket_selector_row->getRequiredTicketSoldOut();
124
+				$row++;
125
+			}
126
+		}
127
+		$this->template_args['row'] = $row;
128
+		$this->template_args['ticket_row_html'] = $ticket_row_html;
129
+		$this->template_args['taxable_tickets'] = $taxable_tickets;
130
+		$this->template_args['prices_displayed_including_taxes'] = $this->tax_config->prices_displayed_including_taxes;
131
+		$this->template_args['template_path'] = TICKET_SELECTOR_TEMPLATES_PATH . 'standard_ticket_selector.template.php';
132
+		remove_all_filters('FHEE__EE_Ticket_Selector__hide_ticket_selector');
133
+	}
134 134
 }
Please login to merge, or discard this patch.
Spacing   +1 added lines, -1 removed lines patch added patch discarded remove patch
@@ -128,7 +128,7 @@
 block discarded – undo
128 128
         $this->template_args['ticket_row_html'] = $ticket_row_html;
129 129
         $this->template_args['taxable_tickets'] = $taxable_tickets;
130 130
         $this->template_args['prices_displayed_including_taxes'] = $this->tax_config->prices_displayed_including_taxes;
131
-        $this->template_args['template_path'] = TICKET_SELECTOR_TEMPLATES_PATH . 'standard_ticket_selector.template.php';
131
+        $this->template_args['template_path'] = TICKET_SELECTOR_TEMPLATES_PATH.'standard_ticket_selector.template.php';
132 132
         remove_all_filters('FHEE__EE_Ticket_Selector__hide_ticket_selector');
133 133
     }
134 134
 }
Please login to merge, or discard this patch.
modules/ticket_selector/TicketSelectorRowSimple.php 1 patch
Indentation   +20 added lines, -20 removed lines patch added patch discarded remove patch
@@ -14,26 +14,26 @@
 block discarded – undo
14 14
 class TicketSelectorRowSimple extends TicketSelectorRow
15 15
 {
16 16
 
17
-    /**
18
-     * @throws EE_Error
19
-     */
20
-    public function setupTicketStatusDisplay()
21
-    {
22
-        $remaining = $this->ticket->remaining();
23
-        $this->setTicketMinAndMax($remaining);
24
-        $this->setTicketStatusClasses($remaining);
25
-        $this->setTicketStatusDisplay($remaining);
26
-    }
17
+	/**
18
+	 * @throws EE_Error
19
+	 */
20
+	public function setupTicketStatusDisplay()
21
+	{
22
+		$remaining = $this->ticket->remaining();
23
+		$this->setTicketMinAndMax($remaining);
24
+		$this->setTicketStatusClasses($remaining);
25
+		$this->setTicketStatusDisplay($remaining);
26
+	}
27 27
 
28 28
 
29
-    public function getTicketDescription()
30
-    {
31
-        $filtered_row_content = $this->getFilteredRowContents();
32
-        if ($filtered_row_content !== false) {
33
-            remove_filter('FHEE__EE_Ticket_Selector__display_ticket_selector_submit', '__return_true');
34
-            add_filter('FHEE__EE_Ticket_Selector__display_ticket_selector_submit', '__return_false');
35
-            return $filtered_row_content;
36
-        }
37
-        return $this->ticket->description();
38
-    }
29
+	public function getTicketDescription()
30
+	{
31
+		$filtered_row_content = $this->getFilteredRowContents();
32
+		if ($filtered_row_content !== false) {
33
+			remove_filter('FHEE__EE_Ticket_Selector__display_ticket_selector_submit', '__return_true');
34
+			add_filter('FHEE__EE_Ticket_Selector__display_ticket_selector_submit', '__return_false');
35
+			return $filtered_row_content;
36
+		}
37
+		return $this->ticket->description();
38
+	}
39 39
 }
Please login to merge, or discard this patch.
modules/ticket_selector/TicketSelectorIframe.php 2 patches
Indentation   +77 added lines, -77 removed lines patch added patch discarded remove patch
@@ -22,81 +22,81 @@
 block discarded – undo
22 22
 class TicketSelectorIframe extends Iframe
23 23
 {
24 24
 
25
-    /**
26
-     * TicketSelectorIframe constructor.
27
-     *
28
-     * @throws InvalidArgumentException
29
-     * @throws InvalidInterfaceException
30
-     * @throws InvalidDataTypeException
31
-     * @throws DomainException
32
-     * @throws EE_Error
33
-     * @throws ReflectionException
34
-     */
35
-    public function __construct()
36
-    {
37
-        EE_Registry::instance()->REQ->set_espresso_page(true);
38
-        /** @type \EEM_Event $EEM_Event */
39
-        $EEM_Event = EE_Registry::instance()->load_model('Event');
40
-        $event = $EEM_Event->get_one_by_ID(
41
-            EE_Registry::instance()->REQ->get('event', 0)
42
-        );
43
-        $ticket_selector = new DisplayTicketSelector();
44
-        $ticket_selector->setIframe(true);
45
-        parent::__construct(
46
-            esc_html__('Ticket Selector', 'event_espresso'),
47
-            $ticket_selector->display($event)
48
-        );
49
-        $this->addStylesheets(
50
-            apply_filters(
51
-                'FHEE__EED_Ticket_Selector__ticket_selector_iframe__css',
52
-                array(
53
-                    'ticket_selector_embed' => TICKET_SELECTOR_ASSETS_URL
54
-                                               . 'ticket_selector_embed.css?ver='
55
-                                               . EVENT_ESPRESSO_VERSION,
56
-                    'ticket_selector'       => TICKET_SELECTOR_ASSETS_URL
57
-                                               . 'ticket_selector.css?ver='
58
-                                               . EVENT_ESPRESSO_VERSION,
59
-                ),
60
-                $this
61
-            )
62
-        );
63
-        if (! apply_filters('FHEE__EED_Ticket_Selector__ticket_selector_iframe__load_theme_css', false, $this)) {
64
-            $this->addStylesheets(array('site_theme' => ''));
65
-        }
66
-        $this->addScripts(
67
-            apply_filters(
68
-                'FHEE__EED_Ticket_Selector__ticket_selector_iframe__js',
69
-                array(
70
-                    'ticket_selector_iframe_embed' => TICKET_SELECTOR_ASSETS_URL
71
-                                                      . 'ticket_selector_iframe_embed.js?ver='
72
-                                                      . EVENT_ESPRESSO_VERSION,
73
-                ),
74
-                $this
75
-            )
76
-        );
77
-        $js_attributes = apply_filters(
78
-            'FHEE__EventEspresso_modules_ticket_selector_TicketSelectorIframe__construct__js_attributes',
79
-            array(),
80
-            $this
81
-        );
82
-        if (! empty($js_attributes)) {
83
-            $this->addScriptAttributes($js_attributes);
84
-        }
85
-        $this->addLocalizedVars(
86
-            apply_filters(
87
-                'FHEE__EventEspresso_modules_ticket_selector_TicketSelectorIframe__construct__localized_vars',
88
-                array(
89
-                    'ticket_selector_iframe' => true,
90
-                    'EEDTicketSelectorMsg'   => __(
91
-                        'Please choose at least one ticket before continuing.',
92
-                        'event_espresso'
93
-                    ),
94
-                )
95
-            )
96
-        );
97
-        do_action(
98
-            'AHEE__EventEspresso_modules_ticket_selector_TicketSelectorIframe__construct__complete',
99
-            $this
100
-        );
101
-    }
25
+	/**
26
+	 * TicketSelectorIframe constructor.
27
+	 *
28
+	 * @throws InvalidArgumentException
29
+	 * @throws InvalidInterfaceException
30
+	 * @throws InvalidDataTypeException
31
+	 * @throws DomainException
32
+	 * @throws EE_Error
33
+	 * @throws ReflectionException
34
+	 */
35
+	public function __construct()
36
+	{
37
+		EE_Registry::instance()->REQ->set_espresso_page(true);
38
+		/** @type \EEM_Event $EEM_Event */
39
+		$EEM_Event = EE_Registry::instance()->load_model('Event');
40
+		$event = $EEM_Event->get_one_by_ID(
41
+			EE_Registry::instance()->REQ->get('event', 0)
42
+		);
43
+		$ticket_selector = new DisplayTicketSelector();
44
+		$ticket_selector->setIframe(true);
45
+		parent::__construct(
46
+			esc_html__('Ticket Selector', 'event_espresso'),
47
+			$ticket_selector->display($event)
48
+		);
49
+		$this->addStylesheets(
50
+			apply_filters(
51
+				'FHEE__EED_Ticket_Selector__ticket_selector_iframe__css',
52
+				array(
53
+					'ticket_selector_embed' => TICKET_SELECTOR_ASSETS_URL
54
+											   . 'ticket_selector_embed.css?ver='
55
+											   . EVENT_ESPRESSO_VERSION,
56
+					'ticket_selector'       => TICKET_SELECTOR_ASSETS_URL
57
+											   . 'ticket_selector.css?ver='
58
+											   . EVENT_ESPRESSO_VERSION,
59
+				),
60
+				$this
61
+			)
62
+		);
63
+		if (! apply_filters('FHEE__EED_Ticket_Selector__ticket_selector_iframe__load_theme_css', false, $this)) {
64
+			$this->addStylesheets(array('site_theme' => ''));
65
+		}
66
+		$this->addScripts(
67
+			apply_filters(
68
+				'FHEE__EED_Ticket_Selector__ticket_selector_iframe__js',
69
+				array(
70
+					'ticket_selector_iframe_embed' => TICKET_SELECTOR_ASSETS_URL
71
+													  . 'ticket_selector_iframe_embed.js?ver='
72
+													  . EVENT_ESPRESSO_VERSION,
73
+				),
74
+				$this
75
+			)
76
+		);
77
+		$js_attributes = apply_filters(
78
+			'FHEE__EventEspresso_modules_ticket_selector_TicketSelectorIframe__construct__js_attributes',
79
+			array(),
80
+			$this
81
+		);
82
+		if (! empty($js_attributes)) {
83
+			$this->addScriptAttributes($js_attributes);
84
+		}
85
+		$this->addLocalizedVars(
86
+			apply_filters(
87
+				'FHEE__EventEspresso_modules_ticket_selector_TicketSelectorIframe__construct__localized_vars',
88
+				array(
89
+					'ticket_selector_iframe' => true,
90
+					'EEDTicketSelectorMsg'   => __(
91
+						'Please choose at least one ticket before continuing.',
92
+						'event_espresso'
93
+					),
94
+				)
95
+			)
96
+		);
97
+		do_action(
98
+			'AHEE__EventEspresso_modules_ticket_selector_TicketSelectorIframe__construct__complete',
99
+			$this
100
+		);
101
+	}
102 102
 }
Please login to merge, or discard this patch.
Spacing   +2 added lines, -2 removed lines patch added patch discarded remove patch
@@ -60,7 +60,7 @@  discard block
 block discarded – undo
60 60
                 $this
61 61
             )
62 62
         );
63
-        if (! apply_filters('FHEE__EED_Ticket_Selector__ticket_selector_iframe__load_theme_css', false, $this)) {
63
+        if ( ! apply_filters('FHEE__EED_Ticket_Selector__ticket_selector_iframe__load_theme_css', false, $this)) {
64 64
             $this->addStylesheets(array('site_theme' => ''));
65 65
         }
66 66
         $this->addScripts(
@@ -79,7 +79,7 @@  discard block
 block discarded – undo
79 79
             array(),
80 80
             $this
81 81
         );
82
-        if (! empty($js_attributes)) {
82
+        if ( ! empty($js_attributes)) {
83 83
             $this->addScriptAttributes($js_attributes);
84 84
         }
85 85
         $this->addLocalizedVars(
Please login to merge, or discard this patch.
modules/ticket_selector/TicketSelectorRow.php 1 patch
Indentation   +364 added lines, -364 removed lines patch added patch discarded remove patch
@@ -18,368 +18,368 @@
 block discarded – undo
18 18
 abstract class TicketSelectorRow
19 19
 {
20 20
 
21
-    /**
22
-     * @var EE_Ticket $ticket
23
-     */
24
-    protected $ticket;
25
-
26
-    /**
27
-     * @var int $total_tickets
28
-     */
29
-    protected $total_tickets;
30
-
31
-    /**
32
-     * @var int $max_attendees
33
-     */
34
-    protected $max_attendees;
35
-
36
-    /**
37
-     * @var string $date_format
38
-     */
39
-    protected $date_format;
40
-
41
-    /**
42
-     * @var int $EVT_ID
43
-     */
44
-    protected $EVT_ID;
45
-
46
-    /**
47
-     * @var string $event_status
48
-     */
49
-    protected $event_status;
50
-
51
-    /**
52
-     * @var boolean $required_ticket_sold_out
53
-     */
54
-    protected $required_ticket_sold_out;
55
-
56
-    /**
57
-     * @var string $ticket_status_display
58
-     */
59
-    protected $ticket_status_display;
60
-
61
-    /**
62
-     * @var int $max
63
-     */
64
-    protected $max = 0;
65
-
66
-    /**
67
-     * @var int $min
68
-     */
69
-    protected $min = 0;
70
-
71
-    /**
72
-     * @var float $ticket_price
73
-     */
74
-    protected $ticket_price = 0.00;
75
-
76
-    /**
77
-     * @var bool $ticket_bundle
78
-     */
79
-    protected $ticket_bundle = false;
80
-
81
-    /**
82
-     * @var string $ticket_status_id
83
-     */
84
-    protected $ticket_status_id = EE_Ticket::sold_out;
85
-
86
-    /**
87
-     * @var string $ticket_status_html
88
-     */
89
-    protected $ticket_status_html = 'ticket-sales-sold-out';
90
-
91
-    /**
92
-     * @var string $status_class
93
-     */
94
-    protected $status_class = 'ticket-sales-sold-out lt-grey-text';
95
-
96
-
97
-    /**
98
-     * @param EE_Ticket $ticket
99
-     * @param int       $max_attendees
100
-     * @param string    $date_format
101
-     * @param string    $event_status
102
-     * @param bool      $required_ticket_sold_out
103
-     * @param int       $total_tickets
104
-     * @throws EE_Error
105
-     * @throws UnexpectedEntityException
106
-     */
107
-    public function __construct(
108
-        EE_Ticket $ticket,
109
-        $max_attendees,
110
-        $date_format,
111
-        $event_status,
112
-        $required_ticket_sold_out = false,
113
-        $total_tickets = 1
114
-    ) {
115
-        $this->ticket = $ticket;
116
-        $this->max_attendees = $max_attendees;
117
-        $this->date_format = $date_format;
118
-        $this->EVT_ID = $this->ticket->get_event_ID();
119
-        $this->event_status = $event_status;
120
-        $this->required_ticket_sold_out = $required_ticket_sold_out;
121
-        $this->total_tickets = $total_tickets;
122
-    }
123
-
124
-
125
-    /**
126
-     * getTicketStatusClasses
127
-     *
128
-     * @param int $remaining
129
-     * @return void
130
-     * @throws EE_Error
131
-     */
132
-    protected function setTicketStatusClasses($remaining = 0)
133
-    {
134
-        // if a previous required ticket with the same sale start date is sold out,
135
-        // then mark this ticket as sold out as well.
136
-        // tickets that go on sale at a later date than the required ticket  will NOT be affected
137
-        $this->ticket_status_id = $this->required_ticket_sold_out !== false
138
-                                  && $this->required_ticket_sold_out === $this->ticket->start_date()
139
-            ? EE_Ticket::sold_out
140
-            : $this->ticket->ticket_status();
141
-        $this->ticket_status_id = $this->event_status === EE_Datetime::sold_out
142
-            ? EE_Ticket::sold_out
143
-            : $this->ticket_status_id;
144
-        // check ticket status
145
-        switch ($this->ticket_status_id) {
146
-            // sold_out
147
-            case EE_Ticket::sold_out:
148
-                $ticket_status_class = 'ticket-sales-sold-out';
149
-                $this->status_class = 'ticket-sales-sold-out lt-grey-text';
150
-                break;
151
-            // expired
152
-            case EE_Ticket::expired:
153
-                $ticket_status_class = 'ticket-sales-expired';
154
-                $this->status_class = 'ticket-sales-expired lt-grey-text';
155
-                break;
156
-            // archived
157
-            case EE_Ticket::archived:
158
-                $ticket_status_class = 'archived-ticket';
159
-                $this->status_class = 'archived-ticket hidden';
160
-                break;
161
-            // pending
162
-            case EE_Ticket::pending:
163
-                $ticket_status_class = 'ticket-pending';
164
-                $this->status_class = 'ticket-pending';
165
-                break;
166
-            // on sale
167
-            case EE_Ticket::onsale:
168
-            default:
169
-                $ticket_status_class = 'ticket-on-sale';
170
-                $this->status_class = 'ticket-on-sale';
171
-                break;
172
-        }
173
-        $this->ticket_status_html = EEH_HTML::span(
174
-            $this->ticket->ticket_status(true, ($remaining > 0)),
175
-            "{$ticket_status_class}-{$this->ticket->ID()}",
176
-            $ticket_status_class
177
-        );
178
-    }
179
-
180
-
181
-    /**
182
-     * @return string
183
-     */
184
-    public function getTicketStatusDisplay()
185
-    {
186
-        return $this->ticket_status_display;
187
-    }
188
-
189
-
190
-    /**
191
-     * setTicketStatusDisplay
192
-     *
193
-     * @param int $remaining
194
-     * @throws EE_Error
195
-     */
196
-    protected function setTicketStatusDisplay($remaining)
197
-    {
198
-        $this->ticket_status_display = '';
199
-        // now depending on the ticket and other circumstances...
200
-        if ($this->max_attendees === 0) {
201
-            // registration is CLOSED because admin set max attendees to ZERO
202
-            $this->ticket_status_display = $this->registrationClosed();
203
-        } elseif ($this->ticket_status_id === EE_Ticket::sold_out || $remaining === 0) {
204
-            // SOLD OUT - no tickets remaining
205
-            $this->ticket_status_display = $this->ticketsSoldOut();
206
-        } elseif ($this->ticket_status_id === EE_Ticket::expired || $this->ticket_status_id === EE_Ticket::archived) {
207
-            // expired or archived ticket
208
-            $this->ticket_status_display = $this->ticket_status_html;
209
-        } elseif ($this->ticket_status_id === EE_Ticket::pending) {
210
-            // ticket not on sale yet
211
-            $this->ticket_status_display = $this->ticketsSalesPending();
212
-        } elseif ($this->ticket->min() > $remaining) {
213
-            // min qty purchasable is less than tickets available
214
-            $this->ticket_status_display = $this->notEnoughTicketsAvailable();
215
-        }
216
-    }
217
-
218
-
219
-    /**
220
-     * registrationClosed
221
-     */
222
-    protected function registrationClosed()
223
-    {
224
-        return EEH_HTML::span(
225
-            apply_filters(
226
-                'FHEE__ticket_selector_chart_template__ticket_closed_msg',
227
-                __('Closed', 'event_espresso')
228
-            ),
229
-            '',
230
-            'sold-out'
231
-        );
232
-    }
233
-
234
-
235
-    /**
236
-     * ticketsSoldOut
237
-     */
238
-    protected function ticketsSoldOut()
239
-    {
240
-        return EEH_HTML::span(
241
-            apply_filters(
242
-                'FHEE__ticket_selector_chart_template__ticket_sold_out_msg',
243
-                __('Sold&nbsp;Out', 'event_espresso')
244
-            ),
245
-            '',
246
-            'sold-out'
247
-        );
248
-    }
249
-
250
-
251
-    /**
252
-     * ticketsSalesPending
253
-     *
254
-     * @throws EE_Error
255
-     */
256
-    protected function ticketsSalesPending()
257
-    {
258
-        return EEH_HTML::span(
259
-            EEH_HTML::span(
260
-                apply_filters(
261
-                    'FHEE__ticket_selector_chart_template__ticket_goes_on_sale_msg',
262
-                    __('Goes&nbsp;On&nbsp;Sale', 'event_espresso')
263
-                ),
264
-                '',
265
-                'ticket-pending'
266
-            )
267
-            . EEH_HTML::br()
268
-            . EEH_HTML::span(
269
-                $this->ticket->get_i18n_datetime(
270
-                    'TKT_start_date',
271
-                    apply_filters(
272
-                        'FHEE__EED_Ticket_Selector__display_goes_on_sale__date_format',
273
-                        $this->date_format
274
-                    )
275
-                ),
276
-                '',
277
-                'small-text'
278
-            ),
279
-            '',
280
-            'ticket-pending-pg'
281
-        );
282
-    }
283
-
284
-
285
-    /**
286
-     * notEnoughTicketsAvailable
287
-     */
288
-    protected function notEnoughTicketsAvailable()
289
-    {
290
-        return EEH_HTML::div(
291
-            EEH_HTML::span(
292
-                apply_filters(
293
-                    'FHEE__ticket_selector_chart_template__ticket_not_available_msg',
294
-                    __('Not Available', 'event_espresso')
295
-                ),
296
-                '',
297
-                'archived-ticket small-text'
298
-            )
299
-            . EEH_HTML::br(),
300
-            '',
301
-            'archived-ticket-pg'
302
-        );
303
-    }
304
-
305
-
306
-    /**
307
-     * setTicketMinAndMax
308
-     *
309
-     * @param int $remaining
310
-     * @return void
311
-     * @throws EE_Error
312
-     */
313
-    protected function setTicketMinAndMax($remaining)
314
-    {
315
-        // offer the number of $tickets_remaining or $this->max_attendees, whichever is smaller
316
-        $this->max = min($remaining, $this->max_attendees);
317
-        // but... we also want to restrict the number of tickets by the ticket max setting,
318
-        // however, the max still can't be higher than what was just set above
319
-        $this->max = $this->ticket->max() > 0
320
-            ? min($this->ticket->max(), $this->max)
321
-            : $this->max;
322
-        // and we also want to restrict the minimum number of tickets by the ticket min setting
323
-        $this->min = $this->ticket->min() > 0
324
-            ? $this->ticket->min()
325
-            : 0;
326
-        // and if the ticket is required, then make sure that min qty is at least 1
327
-        $this->min = $this->ticket->required()
328
-            ? max($this->min, 1)
329
-            : $this->min;
330
-    }
331
-
332
-
333
-    /**
334
-     * Allow plugins to hook in and abort the generation and display of this row to do
335
-     * something elseif they want.
336
-     * For an addon to abort things, all they have to do is register a filter with this hook, and
337
-     * return a value that is NOT false.  Whatever is returned gets echoed instead of the
338
-     * current row.
339
-     *
340
-     * @return string|bool
341
-     */
342
-    protected function getFilteredRowHtml()
343
-    {
344
-        return apply_filters(
345
-            'FHEE__ticket_selector_chart_template__do_ticket_entire_row',
346
-            false,
347
-            $this->ticket,
348
-            $this->max,
349
-            $this->min,
350
-            $this->required_ticket_sold_out,
351
-            $this->ticket_price,
352
-            $this->ticket_bundle,
353
-            $this->ticket_status_html,
354
-            $this->status_class,
355
-            $this
356
-        );
357
-    }
358
-
359
-
360
-    /**
361
-     * Allow plugins to hook in and abort the generation and display of the contents of this
362
-     * row to do something elseif they want.
363
-     * For an addon to abort things, all they have to do is register a filter with this hook, and
364
-     * return a value that is NOT false.  Whatever is returned gets echoed instead of the
365
-     * current row.
366
-     *
367
-     * @return string|bool
368
-     */
369
-    protected function getFilteredRowContents()
370
-    {
371
-        return apply_filters(
372
-            'FHEE__ticket_selector_chart_template__do_ticket_inside_row',
373
-            false,
374
-            $this->ticket,
375
-            $this->max,
376
-            $this->min,
377
-            $this->required_ticket_sold_out,
378
-            $this->ticket_price,
379
-            $this->ticket_bundle,
380
-            $this->ticket_status_html,
381
-            $this->status_class,
382
-            $this
383
-        );
384
-    }
21
+	/**
22
+	 * @var EE_Ticket $ticket
23
+	 */
24
+	protected $ticket;
25
+
26
+	/**
27
+	 * @var int $total_tickets
28
+	 */
29
+	protected $total_tickets;
30
+
31
+	/**
32
+	 * @var int $max_attendees
33
+	 */
34
+	protected $max_attendees;
35
+
36
+	/**
37
+	 * @var string $date_format
38
+	 */
39
+	protected $date_format;
40
+
41
+	/**
42
+	 * @var int $EVT_ID
43
+	 */
44
+	protected $EVT_ID;
45
+
46
+	/**
47
+	 * @var string $event_status
48
+	 */
49
+	protected $event_status;
50
+
51
+	/**
52
+	 * @var boolean $required_ticket_sold_out
53
+	 */
54
+	protected $required_ticket_sold_out;
55
+
56
+	/**
57
+	 * @var string $ticket_status_display
58
+	 */
59
+	protected $ticket_status_display;
60
+
61
+	/**
62
+	 * @var int $max
63
+	 */
64
+	protected $max = 0;
65
+
66
+	/**
67
+	 * @var int $min
68
+	 */
69
+	protected $min = 0;
70
+
71
+	/**
72
+	 * @var float $ticket_price
73
+	 */
74
+	protected $ticket_price = 0.00;
75
+
76
+	/**
77
+	 * @var bool $ticket_bundle
78
+	 */
79
+	protected $ticket_bundle = false;
80
+
81
+	/**
82
+	 * @var string $ticket_status_id
83
+	 */
84
+	protected $ticket_status_id = EE_Ticket::sold_out;
85
+
86
+	/**
87
+	 * @var string $ticket_status_html
88
+	 */
89
+	protected $ticket_status_html = 'ticket-sales-sold-out';
90
+
91
+	/**
92
+	 * @var string $status_class
93
+	 */
94
+	protected $status_class = 'ticket-sales-sold-out lt-grey-text';
95
+
96
+
97
+	/**
98
+	 * @param EE_Ticket $ticket
99
+	 * @param int       $max_attendees
100
+	 * @param string    $date_format
101
+	 * @param string    $event_status
102
+	 * @param bool      $required_ticket_sold_out
103
+	 * @param int       $total_tickets
104
+	 * @throws EE_Error
105
+	 * @throws UnexpectedEntityException
106
+	 */
107
+	public function __construct(
108
+		EE_Ticket $ticket,
109
+		$max_attendees,
110
+		$date_format,
111
+		$event_status,
112
+		$required_ticket_sold_out = false,
113
+		$total_tickets = 1
114
+	) {
115
+		$this->ticket = $ticket;
116
+		$this->max_attendees = $max_attendees;
117
+		$this->date_format = $date_format;
118
+		$this->EVT_ID = $this->ticket->get_event_ID();
119
+		$this->event_status = $event_status;
120
+		$this->required_ticket_sold_out = $required_ticket_sold_out;
121
+		$this->total_tickets = $total_tickets;
122
+	}
123
+
124
+
125
+	/**
126
+	 * getTicketStatusClasses
127
+	 *
128
+	 * @param int $remaining
129
+	 * @return void
130
+	 * @throws EE_Error
131
+	 */
132
+	protected function setTicketStatusClasses($remaining = 0)
133
+	{
134
+		// if a previous required ticket with the same sale start date is sold out,
135
+		// then mark this ticket as sold out as well.
136
+		// tickets that go on sale at a later date than the required ticket  will NOT be affected
137
+		$this->ticket_status_id = $this->required_ticket_sold_out !== false
138
+								  && $this->required_ticket_sold_out === $this->ticket->start_date()
139
+			? EE_Ticket::sold_out
140
+			: $this->ticket->ticket_status();
141
+		$this->ticket_status_id = $this->event_status === EE_Datetime::sold_out
142
+			? EE_Ticket::sold_out
143
+			: $this->ticket_status_id;
144
+		// check ticket status
145
+		switch ($this->ticket_status_id) {
146
+			// sold_out
147
+			case EE_Ticket::sold_out:
148
+				$ticket_status_class = 'ticket-sales-sold-out';
149
+				$this->status_class = 'ticket-sales-sold-out lt-grey-text';
150
+				break;
151
+			// expired
152
+			case EE_Ticket::expired:
153
+				$ticket_status_class = 'ticket-sales-expired';
154
+				$this->status_class = 'ticket-sales-expired lt-grey-text';
155
+				break;
156
+			// archived
157
+			case EE_Ticket::archived:
158
+				$ticket_status_class = 'archived-ticket';
159
+				$this->status_class = 'archived-ticket hidden';
160
+				break;
161
+			// pending
162
+			case EE_Ticket::pending:
163
+				$ticket_status_class = 'ticket-pending';
164
+				$this->status_class = 'ticket-pending';
165
+				break;
166
+			// on sale
167
+			case EE_Ticket::onsale:
168
+			default:
169
+				$ticket_status_class = 'ticket-on-sale';
170
+				$this->status_class = 'ticket-on-sale';
171
+				break;
172
+		}
173
+		$this->ticket_status_html = EEH_HTML::span(
174
+			$this->ticket->ticket_status(true, ($remaining > 0)),
175
+			"{$ticket_status_class}-{$this->ticket->ID()}",
176
+			$ticket_status_class
177
+		);
178
+	}
179
+
180
+
181
+	/**
182
+	 * @return string
183
+	 */
184
+	public function getTicketStatusDisplay()
185
+	{
186
+		return $this->ticket_status_display;
187
+	}
188
+
189
+
190
+	/**
191
+	 * setTicketStatusDisplay
192
+	 *
193
+	 * @param int $remaining
194
+	 * @throws EE_Error
195
+	 */
196
+	protected function setTicketStatusDisplay($remaining)
197
+	{
198
+		$this->ticket_status_display = '';
199
+		// now depending on the ticket and other circumstances...
200
+		if ($this->max_attendees === 0) {
201
+			// registration is CLOSED because admin set max attendees to ZERO
202
+			$this->ticket_status_display = $this->registrationClosed();
203
+		} elseif ($this->ticket_status_id === EE_Ticket::sold_out || $remaining === 0) {
204
+			// SOLD OUT - no tickets remaining
205
+			$this->ticket_status_display = $this->ticketsSoldOut();
206
+		} elseif ($this->ticket_status_id === EE_Ticket::expired || $this->ticket_status_id === EE_Ticket::archived) {
207
+			// expired or archived ticket
208
+			$this->ticket_status_display = $this->ticket_status_html;
209
+		} elseif ($this->ticket_status_id === EE_Ticket::pending) {
210
+			// ticket not on sale yet
211
+			$this->ticket_status_display = $this->ticketsSalesPending();
212
+		} elseif ($this->ticket->min() > $remaining) {
213
+			// min qty purchasable is less than tickets available
214
+			$this->ticket_status_display = $this->notEnoughTicketsAvailable();
215
+		}
216
+	}
217
+
218
+
219
+	/**
220
+	 * registrationClosed
221
+	 */
222
+	protected function registrationClosed()
223
+	{
224
+		return EEH_HTML::span(
225
+			apply_filters(
226
+				'FHEE__ticket_selector_chart_template__ticket_closed_msg',
227
+				__('Closed', 'event_espresso')
228
+			),
229
+			'',
230
+			'sold-out'
231
+		);
232
+	}
233
+
234
+
235
+	/**
236
+	 * ticketsSoldOut
237
+	 */
238
+	protected function ticketsSoldOut()
239
+	{
240
+		return EEH_HTML::span(
241
+			apply_filters(
242
+				'FHEE__ticket_selector_chart_template__ticket_sold_out_msg',
243
+				__('Sold&nbsp;Out', 'event_espresso')
244
+			),
245
+			'',
246
+			'sold-out'
247
+		);
248
+	}
249
+
250
+
251
+	/**
252
+	 * ticketsSalesPending
253
+	 *
254
+	 * @throws EE_Error
255
+	 */
256
+	protected function ticketsSalesPending()
257
+	{
258
+		return EEH_HTML::span(
259
+			EEH_HTML::span(
260
+				apply_filters(
261
+					'FHEE__ticket_selector_chart_template__ticket_goes_on_sale_msg',
262
+					__('Goes&nbsp;On&nbsp;Sale', 'event_espresso')
263
+				),
264
+				'',
265
+				'ticket-pending'
266
+			)
267
+			. EEH_HTML::br()
268
+			. EEH_HTML::span(
269
+				$this->ticket->get_i18n_datetime(
270
+					'TKT_start_date',
271
+					apply_filters(
272
+						'FHEE__EED_Ticket_Selector__display_goes_on_sale__date_format',
273
+						$this->date_format
274
+					)
275
+				),
276
+				'',
277
+				'small-text'
278
+			),
279
+			'',
280
+			'ticket-pending-pg'
281
+		);
282
+	}
283
+
284
+
285
+	/**
286
+	 * notEnoughTicketsAvailable
287
+	 */
288
+	protected function notEnoughTicketsAvailable()
289
+	{
290
+		return EEH_HTML::div(
291
+			EEH_HTML::span(
292
+				apply_filters(
293
+					'FHEE__ticket_selector_chart_template__ticket_not_available_msg',
294
+					__('Not Available', 'event_espresso')
295
+				),
296
+				'',
297
+				'archived-ticket small-text'
298
+			)
299
+			. EEH_HTML::br(),
300
+			'',
301
+			'archived-ticket-pg'
302
+		);
303
+	}
304
+
305
+
306
+	/**
307
+	 * setTicketMinAndMax
308
+	 *
309
+	 * @param int $remaining
310
+	 * @return void
311
+	 * @throws EE_Error
312
+	 */
313
+	protected function setTicketMinAndMax($remaining)
314
+	{
315
+		// offer the number of $tickets_remaining or $this->max_attendees, whichever is smaller
316
+		$this->max = min($remaining, $this->max_attendees);
317
+		// but... we also want to restrict the number of tickets by the ticket max setting,
318
+		// however, the max still can't be higher than what was just set above
319
+		$this->max = $this->ticket->max() > 0
320
+			? min($this->ticket->max(), $this->max)
321
+			: $this->max;
322
+		// and we also want to restrict the minimum number of tickets by the ticket min setting
323
+		$this->min = $this->ticket->min() > 0
324
+			? $this->ticket->min()
325
+			: 0;
326
+		// and if the ticket is required, then make sure that min qty is at least 1
327
+		$this->min = $this->ticket->required()
328
+			? max($this->min, 1)
329
+			: $this->min;
330
+	}
331
+
332
+
333
+	/**
334
+	 * Allow plugins to hook in and abort the generation and display of this row to do
335
+	 * something elseif they want.
336
+	 * For an addon to abort things, all they have to do is register a filter with this hook, and
337
+	 * return a value that is NOT false.  Whatever is returned gets echoed instead of the
338
+	 * current row.
339
+	 *
340
+	 * @return string|bool
341
+	 */
342
+	protected function getFilteredRowHtml()
343
+	{
344
+		return apply_filters(
345
+			'FHEE__ticket_selector_chart_template__do_ticket_entire_row',
346
+			false,
347
+			$this->ticket,
348
+			$this->max,
349
+			$this->min,
350
+			$this->required_ticket_sold_out,
351
+			$this->ticket_price,
352
+			$this->ticket_bundle,
353
+			$this->ticket_status_html,
354
+			$this->status_class,
355
+			$this
356
+		);
357
+	}
358
+
359
+
360
+	/**
361
+	 * Allow plugins to hook in and abort the generation and display of the contents of this
362
+	 * row to do something elseif they want.
363
+	 * For an addon to abort things, all they have to do is register a filter with this hook, and
364
+	 * return a value that is NOT false.  Whatever is returned gets echoed instead of the
365
+	 * current row.
366
+	 *
367
+	 * @return string|bool
368
+	 */
369
+	protected function getFilteredRowContents()
370
+	{
371
+		return apply_filters(
372
+			'FHEE__ticket_selector_chart_template__do_ticket_inside_row',
373
+			false,
374
+			$this->ticket,
375
+			$this->max,
376
+			$this->min,
377
+			$this->required_ticket_sold_out,
378
+			$this->ticket_price,
379
+			$this->ticket_bundle,
380
+			$this->ticket_status_html,
381
+			$this->status_class,
382
+			$this
383
+		);
384
+	}
385 385
 }
Please login to merge, or discard this patch.