Completed
Branch BUG/fixed-event-taxonomy-slugs (b1b03d)
by
unknown
53:27 queued 39:47
created
core/db_classes/EE_Payment.class.php 3 patches
Doc Comments   +3 added lines, -3 removed lines patch added patch discarded remove patch
@@ -13,7 +13,7 @@  discard block
 block discarded – undo
13 13
      * @param array  $props_n_values          incoming values
14 14
      * @param string $timezone                incoming timezone (if not set the timezone set for the website will be
15 15
      *                                        used.)
16
-     * @param array  $date_formats            incoming date_formats in an array where the first value is the
16
+     * @param string[]  $date_formats            incoming date_formats in an array where the first value is the
17 17
      *                                        date_format and the second value is the time format
18 18
      * @return EE_Payment
19 19
      * @throws \EE_Error
@@ -588,7 +588,7 @@  discard block
 block discarded – undo
588 588
      * Gets all the extra meta info on this payment
589 589
      *
590 590
      * @param array $query_params like EEM_Base::get_all
591
-     * @return EE_Extra_Meta
591
+     * @return EE_Base_Class[]
592 592
      * @throws \EE_Error
593 593
      */
594 594
     public function extra_meta($query_params = array())
@@ -836,7 +836,7 @@  discard block
 block discarded – undo
836 836
     /**
837 837
      * Returns the payment's transaction's primary registration
838 838
      *
839
-     * @return EE_Registration|null
839
+     * @return EE_Base_Class|null
840 840
      */
841 841
     public function get_primary_registration()
842 842
     {
Please login to merge, or discard this patch.
Indentation   +851 added lines, -851 removed lines patch added patch discarded remove patch
@@ -9,855 +9,855 @@
 block discarded – undo
9 9
 class EE_Payment extends EE_Base_Class implements EEI_Payment
10 10
 {
11 11
 
12
-    /**
13
-     * @param array  $props_n_values          incoming values
14
-     * @param string $timezone                incoming timezone (if not set the timezone set for the website will be
15
-     *                                        used.)
16
-     * @param array  $date_formats            incoming date_formats in an array where the first value is the
17
-     *                                        date_format and the second value is the time format
18
-     * @return EE_Payment
19
-     * @throws \EE_Error
20
-     */
21
-    public static function new_instance($props_n_values = array(), $timezone = null, $date_formats = array())
22
-    {
23
-        $has_object = parent::_check_for_object($props_n_values, __CLASS__, $timezone, $date_formats);
24
-        return $has_object ? $has_object : new self($props_n_values, false, $timezone, $date_formats);
25
-    }
26
-
27
-
28
-    /**
29
-     * @param array  $props_n_values  incoming values from the database
30
-     * @param string $timezone        incoming timezone as set by the model.  If not set the timezone for
31
-     *                                the website will be used.
32
-     * @return EE_Payment
33
-     * @throws \EE_Error
34
-     */
35
-    public static function new_instance_from_db($props_n_values = array(), $timezone = null)
36
-    {
37
-        return new self($props_n_values, true, $timezone);
38
-    }
39
-
40
-
41
-    /**
42
-     * Set Transaction ID
43
-     *
44
-     * @access public
45
-     * @param int $TXN_ID
46
-     * @throws \EE_Error
47
-     */
48
-    public function set_transaction_id($TXN_ID = 0)
49
-    {
50
-        $this->set('TXN_ID', $TXN_ID);
51
-    }
52
-
53
-
54
-    /**
55
-     * Gets the transaction related to this payment
56
-     *
57
-     * @return EE_Transaction
58
-     * @throws \EE_Error
59
-     */
60
-    public function transaction()
61
-    {
62
-        return $this->get_first_related('Transaction');
63
-    }
64
-
65
-
66
-    /**
67
-     * Set Status
68
-     *
69
-     * @access public
70
-     * @param string $STS_ID
71
-     * @throws \EE_Error
72
-     */
73
-    public function set_status($STS_ID = '')
74
-    {
75
-        $this->set('STS_ID', $STS_ID);
76
-    }
77
-
78
-
79
-    /**
80
-     * Set Payment Timestamp
81
-     *
82
-     * @access public
83
-     * @param int $timestamp
84
-     * @throws \EE_Error
85
-     */
86
-    public function set_timestamp($timestamp = 0)
87
-    {
88
-        $this->set('PAY_timestamp', $timestamp);
89
-    }
90
-
91
-
92
-    /**
93
-     * Set Payment Method
94
-     *
95
-     * @access public
96
-     * @param string $PAY_source
97
-     * @throws \EE_Error
98
-     */
99
-    public function set_source($PAY_source = '')
100
-    {
101
-        $this->set('PAY_source', $PAY_source);
102
-    }
103
-
104
-
105
-    /**
106
-     * Set Payment Amount
107
-     *
108
-     * @access public
109
-     * @param float $amount
110
-     * @throws \EE_Error
111
-     */
112
-    public function set_amount($amount = 0.00)
113
-    {
114
-        $this->set('PAY_amount', (float) $amount);
115
-    }
116
-
117
-
118
-    /**
119
-     * Set Payment Gateway Response
120
-     *
121
-     * @access public
122
-     * @param string $gateway_response
123
-     * @throws \EE_Error
124
-     */
125
-    public function set_gateway_response($gateway_response = '')
126
-    {
127
-        $this->set('PAY_gateway_response', $gateway_response);
128
-    }
129
-
130
-
131
-    /**
132
-     * Returns the name of the payment method used on this payment (previously known merely as 'gateway')
133
-     * but since 4.6.0, payment methods are models and the payment keeps a foreign key to the payment method
134
-     * used on it
135
-     *
136
-     * @deprecated
137
-     * @return string
138
-     * @throws \EE_Error
139
-     */
140
-    public function gateway()
141
-    {
142
-        EE_Error::doing_it_wrong(
143
-            'EE_Payment::gateway',
144
-            __(
145
-                'The method EE_Payment::gateway() has been deprecated. Consider instead using EE_Payment::payment_method()->name()',
146
-                'event_espresso'
147
-            ),
148
-            '4.6.0'
149
-        );
150
-        return $this->payment_method() ? $this->payment_method()->name() : __('Unknown', 'event_espresso');
151
-    }
152
-
153
-
154
-    /**
155
-     * Set Gateway Transaction ID
156
-     *
157
-     * @access public
158
-     * @param string $txn_id_chq_nmbr
159
-     * @throws \EE_Error
160
-     */
161
-    public function set_txn_id_chq_nmbr($txn_id_chq_nmbr = '')
162
-    {
163
-        $this->set('PAY_txn_id_chq_nmbr', $txn_id_chq_nmbr);
164
-    }
165
-
166
-
167
-    /**
168
-     * Set Purchase Order Number
169
-     *
170
-     * @access public
171
-     * @param string $po_number
172
-     * @throws \EE_Error
173
-     */
174
-    public function set_po_number($po_number = '')
175
-    {
176
-        $this->set('PAY_po_number', $po_number);
177
-    }
178
-
179
-
180
-    /**
181
-     * Set Extra Accounting Field
182
-     *
183
-     * @access public
184
-     * @param string $extra_accntng
185
-     * @throws \EE_Error
186
-     */
187
-    public function set_extra_accntng($extra_accntng = '')
188
-    {
189
-        $this->set('PAY_extra_accntng', $extra_accntng);
190
-    }
191
-
192
-
193
-    /**
194
-     * Set Payment made via admin flag
195
-     *
196
-     * @access public
197
-     * @param bool $via_admin
198
-     * @throws \EE_Error
199
-     */
200
-    public function set_payment_made_via_admin($via_admin = false)
201
-    {
202
-        if ($via_admin) {
203
-            $this->set('PAY_source', EEM_Payment_Method::scope_admin);
204
-        } else {
205
-            $this->set('PAY_source', EEM_Payment_Method::scope_cart);
206
-        }
207
-    }
208
-
209
-
210
-    /**
211
-     * Set Payment Details
212
-     *
213
-     * @access public
214
-     * @param string|array $details
215
-     * @throws \EE_Error
216
-     */
217
-    public function set_details($details = '')
218
-    {
219
-        if (is_array($details)) {
220
-            array_walk_recursive($details, array($this, '_strip_all_tags_within_array'));
221
-        } else {
222
-            $details = wp_strip_all_tags($details);
223
-        }
224
-        $this->set('PAY_details', $details);
225
-    }
226
-
227
-
228
-    /**
229
-     * Sets redirect_url
230
-     *
231
-     * @param string $redirect_url
232
-     * @throws \EE_Error
233
-     */
234
-    public function set_redirect_url($redirect_url)
235
-    {
236
-        $this->set('PAY_redirect_url', $redirect_url);
237
-    }
238
-
239
-
240
-    /**
241
-     * Sets redirect_args
242
-     *
243
-     * @param array $redirect_args
244
-     * @throws \EE_Error
245
-     */
246
-    public function set_redirect_args($redirect_args)
247
-    {
248
-        $this->set('PAY_redirect_args', $redirect_args);
249
-    }
250
-
251
-
252
-    /**
253
-     * get Payment Transaction ID
254
-     *
255
-     * @access public
256
-     * @throws \EE_Error
257
-     */
258
-    public function TXN_ID()
259
-    {
260
-        return $this->get('TXN_ID');
261
-    }
262
-
263
-
264
-    /**
265
-     * get Payment Status
266
-     *
267
-     * @access public
268
-     * @throws \EE_Error
269
-     */
270
-    public function status()
271
-    {
272
-        return $this->get('STS_ID');
273
-    }
274
-
275
-
276
-    /**
277
-     * get Payment Status
278
-     *
279
-     * @access public
280
-     * @throws \EE_Error
281
-     */
282
-    public function STS_ID()
283
-    {
284
-        return $this->get('STS_ID');
285
-    }
286
-
287
-
288
-    /**
289
-     * get Payment Timestamp
290
-     *
291
-     * @access public
292
-     * @param string $dt_frmt
293
-     * @param string $tm_frmt
294
-     * @return string
295
-     * @throws \EE_Error
296
-     */
297
-    public function timestamp($dt_frmt = '', $tm_frmt = '')
298
-    {
299
-        return $this->get_i18n_datetime('PAY_timestamp', trim($dt_frmt . ' ' . $tm_frmt));
300
-    }
301
-
302
-
303
-    /**
304
-     * get Payment Source
305
-     *
306
-     * @access public
307
-     * @throws \EE_Error
308
-     */
309
-    public function source()
310
-    {
311
-        return $this->get('PAY_source');
312
-    }
313
-
314
-
315
-    /**
316
-     * get Payment Amount
317
-     *
318
-     * @access public
319
-     * @return float
320
-     * @throws \EE_Error
321
-     */
322
-    public function amount()
323
-    {
324
-        return (float) $this->get('PAY_amount');
325
-    }
326
-
327
-
328
-    /**
329
-     * @return mixed
330
-     * @throws \EE_Error
331
-     */
332
-    public function amount_no_code()
333
-    {
334
-        return $this->get_pretty('PAY_amount', 'no_currency_code');
335
-    }
336
-
337
-
338
-    /**
339
-     * get Payment Gateway Response
340
-     *
341
-     * @access public
342
-     * @throws \EE_Error
343
-     */
344
-    public function gateway_response()
345
-    {
346
-        return $this->get('PAY_gateway_response');
347
-    }
348
-
349
-
350
-    /**
351
-     * get Payment Gateway Transaction ID
352
-     *
353
-     * @access public
354
-     * @throws \EE_Error
355
-     */
356
-    public function txn_id_chq_nmbr()
357
-    {
358
-        return $this->get('PAY_txn_id_chq_nmbr');
359
-    }
360
-
361
-
362
-    /**
363
-     * get Purchase Order Number
364
-     *
365
-     * @access public
366
-     * @throws \EE_Error
367
-     */
368
-    public function po_number()
369
-    {
370
-        return $this->get('PAY_po_number');
371
-    }
372
-
373
-
374
-    /**
375
-     * get Extra Accounting Field
376
-     *
377
-     * @access public
378
-     * @throws \EE_Error
379
-     */
380
-    public function extra_accntng()
381
-    {
382
-        return $this->get('PAY_extra_accntng');
383
-    }
384
-
385
-
386
-    /**
387
-     * get Payment made via admin source
388
-     *
389
-     * @access public
390
-     * @throws \EE_Error
391
-     */
392
-    public function payment_made_via_admin()
393
-    {
394
-        return ($this->get('PAY_source') === EEM_Payment_Method::scope_admin);
395
-    }
396
-
397
-
398
-    /**
399
-     * get Payment Details
400
-     *
401
-     * @access public
402
-     * @throws \EE_Error
403
-     */
404
-    public function details()
405
-    {
406
-        return $this->get('PAY_details');
407
-    }
408
-
409
-
410
-    /**
411
-     * Gets redirect_url
412
-     *
413
-     * @return string
414
-     * @throws \EE_Error
415
-     */
416
-    public function redirect_url()
417
-    {
418
-        return $this->get('PAY_redirect_url');
419
-    }
420
-
421
-
422
-    /**
423
-     * Gets redirect_args
424
-     *
425
-     * @return array
426
-     * @throws \EE_Error
427
-     */
428
-    public function redirect_args()
429
-    {
430
-        return $this->get('PAY_redirect_args');
431
-    }
432
-
433
-
434
-    /**
435
-     * echoes $this->pretty_status()
436
-     *
437
-     * @param bool $show_icons
438
-     * @return void
439
-     * @throws \EE_Error
440
-     */
441
-    public function e_pretty_status($show_icons = false)
442
-    {
443
-        echo $this->pretty_status($show_icons);
444
-    }
445
-
446
-
447
-    /**
448
-     * returns a pretty version of the status, good for displaying to users
449
-     *
450
-     * @param bool $show_icons
451
-     * @return string
452
-     * @throws \EE_Error
453
-     */
454
-    public function pretty_status($show_icons = false)
455
-    {
456
-        $status = EEM_Status::instance()->localized_status(
457
-            array($this->STS_ID() => __('unknown', 'event_espresso')),
458
-            false,
459
-            'sentence'
460
-        );
461
-        $icon = '';
462
-        switch ($this->STS_ID()) {
463
-            case EEM_Payment::status_id_approved:
464
-                $icon = $show_icons
465
-                    ? '<span class="dashicons dashicons-yes ee-icon-size-24 green-text"></span>'
466
-                    : '';
467
-                break;
468
-            case EEM_Payment::status_id_pending:
469
-                $icon = $show_icons
470
-                    ? '<span class="dashicons dashicons-clock ee-icon-size-16 orange-text"></span>'
471
-                    : '';
472
-                break;
473
-            case EEM_Payment::status_id_cancelled:
474
-                $icon = $show_icons
475
-                    ? '<span class="dashicons dashicons-no ee-icon-size-16 lt-grey-text"></span>'
476
-                    : '';
477
-                break;
478
-            case EEM_Payment::status_id_declined:
479
-                $icon = $show_icons
480
-                    ? '<span class="dashicons dashicons-no ee-icon-size-16 red-text"></span>'
481
-                    : '';
482
-                break;
483
-        }
484
-        return $icon . $status[ $this->STS_ID() ];
485
-    }
486
-
487
-
488
-    /**
489
-     * For determining the status of the payment
490
-     *
491
-     * @return boolean whether the payment is approved or not
492
-     * @throws \EE_Error
493
-     */
494
-    public function is_approved()
495
-    {
496
-        return $this->status_is(EEM_Payment::status_id_approved);
497
-    }
498
-
499
-
500
-    /**
501
-     * Generally determines if the status of this payment equals
502
-     * the $STS_ID string
503
-     *
504
-     * @param string $STS_ID an ID from the esp_status table/
505
-     *                       one of the status_id_* on the EEM_Payment model
506
-     * @return boolean whether the status of this payment equals the status id
507
-     * @throws \EE_Error
508
-     */
509
-    protected function status_is($STS_ID)
510
-    {
511
-        return $STS_ID === $this->STS_ID() ? true : false;
512
-    }
513
-
514
-
515
-    /**
516
-     * For determining the status of the payment
517
-     *
518
-     * @return boolean whether the payment is pending or not
519
-     * @throws \EE_Error
520
-     */
521
-    public function is_pending()
522
-    {
523
-        return $this->status_is(EEM_Payment::status_id_pending);
524
-    }
525
-
526
-
527
-    /**
528
-     * For determining the status of the payment
529
-     *
530
-     * @return boolean
531
-     * @throws \EE_Error
532
-     */
533
-    public function is_cancelled()
534
-    {
535
-        return $this->status_is(EEM_Payment::status_id_cancelled);
536
-    }
537
-
538
-
539
-    /**
540
-     * For determining the status of the payment
541
-     *
542
-     * @return boolean
543
-     * @throws \EE_Error
544
-     */
545
-    public function is_declined()
546
-    {
547
-        return $this->status_is(EEM_Payment::status_id_declined);
548
-    }
549
-
550
-
551
-    /**
552
-     * For determining the status of the payment
553
-     *
554
-     * @return boolean
555
-     * @throws \EE_Error
556
-     */
557
-    public function is_failed()
558
-    {
559
-        return $this->status_is(EEM_Payment::status_id_failed);
560
-    }
561
-
562
-
563
-    /**
564
-     * For determining if the payment is actually a refund ( ie: has a negative value )
565
-     *
566
-     * @return boolean
567
-     * @throws \EE_Error
568
-     */
569
-    public function is_a_refund()
570
-    {
571
-        return $this->amount() < 0 ? true : false;
572
-    }
573
-
574
-
575
-    /**
576
-     * Get the status object of this object
577
-     *
578
-     * @return EE_Status
579
-     * @throws \EE_Error
580
-     */
581
-    public function status_obj()
582
-    {
583
-        return $this->get_first_related('Status');
584
-    }
585
-
586
-
587
-    /**
588
-     * Gets all the extra meta info on this payment
589
-     *
590
-     * @param array $query_params like EEM_Base::get_all
591
-     * @return EE_Extra_Meta
592
-     * @throws \EE_Error
593
-     */
594
-    public function extra_meta($query_params = array())
595
-    {
596
-        return $this->get_many_related('Extra_Meta', $query_params);
597
-    }
598
-
599
-
600
-    /**
601
-     * Gets the last-used payment method on this transaction
602
-     * (we COULD just use the last-made payment, but some payment methods, namely
603
-     * offline ones, dont' create payments)
604
-     *
605
-     * @return EE_Payment_Method
606
-     * @throws \EE_Error
607
-     */
608
-    public function payment_method()
609
-    {
610
-        return $this->get_first_related('Payment_Method');
611
-    }
612
-
613
-
614
-    /**
615
-     * Gets the HTML for redirecting the user to an offsite gateway
616
-     * You can pass it special content to put inside the form, or use
617
-     * the default inner content (or possibly generate this all yourself using
618
-     * redirect_url() and redirect_args() or redirect_args_as_inputs()).
619
-     * Creates a POST request by default, but if no redirect args are specified, creates a GET request instead
620
-     * (and any querystring variables in the redirect_url are converted into html inputs
621
-     * so browsers submit them properly)
622
-     *
623
-     * @param string $inside_form_html
624
-     * @return string html
625
-     * @throws \EE_Error
626
-     */
627
-    public function redirect_form($inside_form_html = null)
628
-    {
629
-        $redirect_url = $this->redirect_url();
630
-        if (! empty($redirect_url)) {
631
-            // what ? no inner form content?
632
-            if ($inside_form_html === null) {
633
-                $inside_form_html = EEH_HTML::p(
634
-                    sprintf(
635
-                        __(
636
-                            'If you are not automatically redirected to the payment website within 10 seconds... %1$s %2$s Click Here %3$s',
637
-                            'event_espresso'
638
-                        ),
639
-                        EEH_HTML::br(2),
640
-                        '<input type="submit" value="',
641
-                        '">'
642
-                    ),
643
-                    '',
644
-                    '',
645
-                    'text-align:center;'
646
-                );
647
-            }
648
-            $method = apply_filters(
649
-                'FHEE__EE_Payment__redirect_form__method',
650
-                $this->redirect_args() ? 'POST' : 'GET',
651
-                $this
652
-            );
653
-            // if it's a GET request, we need to remove all the GET params in the querystring
654
-            // and put them into the form instead
655
-            if ($method === 'GET') {
656
-                $querystring = parse_url($redirect_url, PHP_URL_QUERY);
657
-                $get_params = null;
658
-                parse_str($querystring, $get_params);
659
-                $inside_form_html .= $this->_args_as_inputs($get_params);
660
-                $redirect_url = str_replace('?' . $querystring, '', $redirect_url);
661
-            }
662
-            $form = EEH_HTML::nl(1)
663
-                    . '<form method="'
664
-                    . $method
665
-                    . '" name="gateway_form" action="'
666
-                    . $redirect_url
667
-                    . '">';
668
-            $form .= EEH_HTML::nl(1) . $this->redirect_args_as_inputs();
669
-            $form .= $inside_form_html;
670
-            $form .= EEH_HTML::nl(-1) . '</form>' . EEH_HTML::nl(-1);
671
-            return $form;
672
-        } else {
673
-            return null;
674
-        }
675
-    }
676
-
677
-
678
-    /**
679
-     * Changes all the name-value pairs of the redirect args into html inputs
680
-     * and returns the html as a string
681
-     *
682
-     * @return string
683
-     * @throws \EE_Error
684
-     */
685
-    public function redirect_args_as_inputs()
686
-    {
687
-        return $this->_args_as_inputs($this->redirect_args());
688
-    }
689
-
690
-
691
-    /**
692
-     * Converts a 1d array of key-value pairs into html hidden inputs
693
-     * and returns the string of html
694
-     *
695
-     * @param array $args key-value pairs
696
-     * @return string
697
-     */
698
-    protected function _args_as_inputs($args)
699
-    {
700
-        $html = '';
701
-        if ($args !== null && is_array($args)) {
702
-            foreach ($args as $name => $value) {
703
-                $html .= EEH_HTML::nl(0)
704
-                         . '<input type="hidden" name="'
705
-                         . $name
706
-                         . '" value="'
707
-                         . esc_attr($value)
708
-                         . '"/>';
709
-            }
710
-        }
711
-        return $html;
712
-    }
713
-
714
-
715
-    /**
716
-     * Returns the currency of the payment.
717
-     * (At the time of writing, this will always be the currency in the configuration;
718
-     * however in the future it is anticipated that this will be stored on the payment
719
-     * object itself)
720
-     *
721
-     * @return string for the currency code
722
-     */
723
-    public function currency_code()
724
-    {
725
-        return EE_Config::instance()->currency->code;
726
-    }
727
-
728
-
729
-    /**
730
-     * apply wp_strip_all_tags to all elements within an array
731
-     *
732
-     * @access private
733
-     * @param mixed $item
734
-     */
735
-    private function _strip_all_tags_within_array(&$item)
736
-    {
737
-        if (is_object($item)) {
738
-            $item = (array) $item;
739
-        }
740
-        if (is_array($item)) {
741
-            array_walk_recursive($item, array($this, '_strip_all_tags_within_array'));
742
-        } else {
743
-            $item = wp_strip_all_tags($item);
744
-        }
745
-    }
746
-
747
-
748
-    /**
749
-     * Returns TRUE is this payment was set to approved during this request (or
750
-     * is approved and was created during this request). False otherwise.
751
-     *
752
-     * @return boolean
753
-     * @throws \EE_Error
754
-     */
755
-    public function just_approved()
756
-    {
757
-        $original_status = EEH_Array::is_set(
758
-            $this->_props_n_values_provided_in_constructor,
759
-            'STS_ID',
760
-            $this->get_model()->field_settings_for('STS_ID')->get_default_value()
761
-        );
762
-        $current_status = $this->status();
763
-        if ($original_status !== EEM_Payment::status_id_approved
764
-            && $current_status === EEM_Payment::status_id_approved
765
-        ) {
766
-            return true;
767
-        } else {
768
-            return false;
769
-        }
770
-    }
771
-
772
-
773
-    /**
774
-     * Overrides parents' get_pretty() function just for legacy reasons
775
-     * (to allow ticket https://events.codebasehq.com/projects/event-espresso/tickets/7420)
776
-     *
777
-     * @param string $field_name
778
-     * @param string $extra_cache_ref This allows the user to specify an extra cache ref for the given property
779
-     *                                (in cases where the same property may be used for different outputs
780
-     *                                - i.e. datetime, money etc.)
781
-     * @return mixed
782
-     * @throws \EE_Error
783
-     */
784
-    public function get_pretty($field_name, $extra_cache_ref = null)
785
-    {
786
-        if ($field_name === 'PAY_gateway') {
787
-            return $this->payment_method() ? $this->payment_method()->name() : __('Unknown', 'event_espresso');
788
-        }
789
-        return $this->_get_cached_property($field_name, true, $extra_cache_ref);
790
-    }
791
-
792
-
793
-    /**
794
-     * Gets details regarding which registrations this payment was applied to
795
-     *
796
-     * @param array $query_params like EEM_Base::get_all
797
-     * @return EE_Registration_Payment[]
798
-     * @throws \EE_Error
799
-     */
800
-    public function registration_payments($query_params = array())
801
-    {
802
-        return $this->get_many_related('Registration_Payment', $query_params);
803
-    }
804
-
805
-
806
-    /**
807
-     * Gets the first event for this payment (it's possible that it could be for multiple)
808
-     *
809
-     * @return EE_Event|null
810
-     */
811
-    public function get_first_event()
812
-    {
813
-        $transaction = $this->transaction();
814
-        if ($transaction instanceof EE_Transaction) {
815
-            $primary_registrant = $transaction->primary_registration();
816
-            if ($primary_registrant instanceof EE_Registration) {
817
-                return $primary_registrant->event_obj();
818
-            }
819
-        }
820
-        return null;
821
-    }
822
-
823
-
824
-    /**
825
-     * Gets the name of the first event for which is being paid
826
-     *
827
-     * @return string
828
-     */
829
-    public function get_first_event_name()
830
-    {
831
-        $event = $this->get_first_event();
832
-        return $event instanceof EE_Event ? $event->name() : __('Event', 'event_espresso');
833
-    }
834
-
835
-
836
-    /**
837
-     * Returns the payment's transaction's primary registration
838
-     *
839
-     * @return EE_Registration|null
840
-     */
841
-    public function get_primary_registration()
842
-    {
843
-        if ($this->transaction() instanceof EE_Transaction) {
844
-            return $this->transaction()->primary_registration();
845
-        }
846
-        return null;
847
-    }
848
-
849
-
850
-    /**
851
-     * Gets the payment's transaction's primary registration's attendee, or null
852
-     *
853
-     * @return EE_Attendee|null
854
-     */
855
-    public function get_primary_attendee()
856
-    {
857
-        $primary_reg = $this->get_primary_registration();
858
-        if ($primary_reg instanceof EE_Registration) {
859
-            return $primary_reg->attendee();
860
-        }
861
-        return null;
862
-    }
12
+	/**
13
+	 * @param array  $props_n_values          incoming values
14
+	 * @param string $timezone                incoming timezone (if not set the timezone set for the website will be
15
+	 *                                        used.)
16
+	 * @param array  $date_formats            incoming date_formats in an array where the first value is the
17
+	 *                                        date_format and the second value is the time format
18
+	 * @return EE_Payment
19
+	 * @throws \EE_Error
20
+	 */
21
+	public static function new_instance($props_n_values = array(), $timezone = null, $date_formats = array())
22
+	{
23
+		$has_object = parent::_check_for_object($props_n_values, __CLASS__, $timezone, $date_formats);
24
+		return $has_object ? $has_object : new self($props_n_values, false, $timezone, $date_formats);
25
+	}
26
+
27
+
28
+	/**
29
+	 * @param array  $props_n_values  incoming values from the database
30
+	 * @param string $timezone        incoming timezone as set by the model.  If not set the timezone for
31
+	 *                                the website will be used.
32
+	 * @return EE_Payment
33
+	 * @throws \EE_Error
34
+	 */
35
+	public static function new_instance_from_db($props_n_values = array(), $timezone = null)
36
+	{
37
+		return new self($props_n_values, true, $timezone);
38
+	}
39
+
40
+
41
+	/**
42
+	 * Set Transaction ID
43
+	 *
44
+	 * @access public
45
+	 * @param int $TXN_ID
46
+	 * @throws \EE_Error
47
+	 */
48
+	public function set_transaction_id($TXN_ID = 0)
49
+	{
50
+		$this->set('TXN_ID', $TXN_ID);
51
+	}
52
+
53
+
54
+	/**
55
+	 * Gets the transaction related to this payment
56
+	 *
57
+	 * @return EE_Transaction
58
+	 * @throws \EE_Error
59
+	 */
60
+	public function transaction()
61
+	{
62
+		return $this->get_first_related('Transaction');
63
+	}
64
+
65
+
66
+	/**
67
+	 * Set Status
68
+	 *
69
+	 * @access public
70
+	 * @param string $STS_ID
71
+	 * @throws \EE_Error
72
+	 */
73
+	public function set_status($STS_ID = '')
74
+	{
75
+		$this->set('STS_ID', $STS_ID);
76
+	}
77
+
78
+
79
+	/**
80
+	 * Set Payment Timestamp
81
+	 *
82
+	 * @access public
83
+	 * @param int $timestamp
84
+	 * @throws \EE_Error
85
+	 */
86
+	public function set_timestamp($timestamp = 0)
87
+	{
88
+		$this->set('PAY_timestamp', $timestamp);
89
+	}
90
+
91
+
92
+	/**
93
+	 * Set Payment Method
94
+	 *
95
+	 * @access public
96
+	 * @param string $PAY_source
97
+	 * @throws \EE_Error
98
+	 */
99
+	public function set_source($PAY_source = '')
100
+	{
101
+		$this->set('PAY_source', $PAY_source);
102
+	}
103
+
104
+
105
+	/**
106
+	 * Set Payment Amount
107
+	 *
108
+	 * @access public
109
+	 * @param float $amount
110
+	 * @throws \EE_Error
111
+	 */
112
+	public function set_amount($amount = 0.00)
113
+	{
114
+		$this->set('PAY_amount', (float) $amount);
115
+	}
116
+
117
+
118
+	/**
119
+	 * Set Payment Gateway Response
120
+	 *
121
+	 * @access public
122
+	 * @param string $gateway_response
123
+	 * @throws \EE_Error
124
+	 */
125
+	public function set_gateway_response($gateway_response = '')
126
+	{
127
+		$this->set('PAY_gateway_response', $gateway_response);
128
+	}
129
+
130
+
131
+	/**
132
+	 * Returns the name of the payment method used on this payment (previously known merely as 'gateway')
133
+	 * but since 4.6.0, payment methods are models and the payment keeps a foreign key to the payment method
134
+	 * used on it
135
+	 *
136
+	 * @deprecated
137
+	 * @return string
138
+	 * @throws \EE_Error
139
+	 */
140
+	public function gateway()
141
+	{
142
+		EE_Error::doing_it_wrong(
143
+			'EE_Payment::gateway',
144
+			__(
145
+				'The method EE_Payment::gateway() has been deprecated. Consider instead using EE_Payment::payment_method()->name()',
146
+				'event_espresso'
147
+			),
148
+			'4.6.0'
149
+		);
150
+		return $this->payment_method() ? $this->payment_method()->name() : __('Unknown', 'event_espresso');
151
+	}
152
+
153
+
154
+	/**
155
+	 * Set Gateway Transaction ID
156
+	 *
157
+	 * @access public
158
+	 * @param string $txn_id_chq_nmbr
159
+	 * @throws \EE_Error
160
+	 */
161
+	public function set_txn_id_chq_nmbr($txn_id_chq_nmbr = '')
162
+	{
163
+		$this->set('PAY_txn_id_chq_nmbr', $txn_id_chq_nmbr);
164
+	}
165
+
166
+
167
+	/**
168
+	 * Set Purchase Order Number
169
+	 *
170
+	 * @access public
171
+	 * @param string $po_number
172
+	 * @throws \EE_Error
173
+	 */
174
+	public function set_po_number($po_number = '')
175
+	{
176
+		$this->set('PAY_po_number', $po_number);
177
+	}
178
+
179
+
180
+	/**
181
+	 * Set Extra Accounting Field
182
+	 *
183
+	 * @access public
184
+	 * @param string $extra_accntng
185
+	 * @throws \EE_Error
186
+	 */
187
+	public function set_extra_accntng($extra_accntng = '')
188
+	{
189
+		$this->set('PAY_extra_accntng', $extra_accntng);
190
+	}
191
+
192
+
193
+	/**
194
+	 * Set Payment made via admin flag
195
+	 *
196
+	 * @access public
197
+	 * @param bool $via_admin
198
+	 * @throws \EE_Error
199
+	 */
200
+	public function set_payment_made_via_admin($via_admin = false)
201
+	{
202
+		if ($via_admin) {
203
+			$this->set('PAY_source', EEM_Payment_Method::scope_admin);
204
+		} else {
205
+			$this->set('PAY_source', EEM_Payment_Method::scope_cart);
206
+		}
207
+	}
208
+
209
+
210
+	/**
211
+	 * Set Payment Details
212
+	 *
213
+	 * @access public
214
+	 * @param string|array $details
215
+	 * @throws \EE_Error
216
+	 */
217
+	public function set_details($details = '')
218
+	{
219
+		if (is_array($details)) {
220
+			array_walk_recursive($details, array($this, '_strip_all_tags_within_array'));
221
+		} else {
222
+			$details = wp_strip_all_tags($details);
223
+		}
224
+		$this->set('PAY_details', $details);
225
+	}
226
+
227
+
228
+	/**
229
+	 * Sets redirect_url
230
+	 *
231
+	 * @param string $redirect_url
232
+	 * @throws \EE_Error
233
+	 */
234
+	public function set_redirect_url($redirect_url)
235
+	{
236
+		$this->set('PAY_redirect_url', $redirect_url);
237
+	}
238
+
239
+
240
+	/**
241
+	 * Sets redirect_args
242
+	 *
243
+	 * @param array $redirect_args
244
+	 * @throws \EE_Error
245
+	 */
246
+	public function set_redirect_args($redirect_args)
247
+	{
248
+		$this->set('PAY_redirect_args', $redirect_args);
249
+	}
250
+
251
+
252
+	/**
253
+	 * get Payment Transaction ID
254
+	 *
255
+	 * @access public
256
+	 * @throws \EE_Error
257
+	 */
258
+	public function TXN_ID()
259
+	{
260
+		return $this->get('TXN_ID');
261
+	}
262
+
263
+
264
+	/**
265
+	 * get Payment Status
266
+	 *
267
+	 * @access public
268
+	 * @throws \EE_Error
269
+	 */
270
+	public function status()
271
+	{
272
+		return $this->get('STS_ID');
273
+	}
274
+
275
+
276
+	/**
277
+	 * get Payment Status
278
+	 *
279
+	 * @access public
280
+	 * @throws \EE_Error
281
+	 */
282
+	public function STS_ID()
283
+	{
284
+		return $this->get('STS_ID');
285
+	}
286
+
287
+
288
+	/**
289
+	 * get Payment Timestamp
290
+	 *
291
+	 * @access public
292
+	 * @param string $dt_frmt
293
+	 * @param string $tm_frmt
294
+	 * @return string
295
+	 * @throws \EE_Error
296
+	 */
297
+	public function timestamp($dt_frmt = '', $tm_frmt = '')
298
+	{
299
+		return $this->get_i18n_datetime('PAY_timestamp', trim($dt_frmt . ' ' . $tm_frmt));
300
+	}
301
+
302
+
303
+	/**
304
+	 * get Payment Source
305
+	 *
306
+	 * @access public
307
+	 * @throws \EE_Error
308
+	 */
309
+	public function source()
310
+	{
311
+		return $this->get('PAY_source');
312
+	}
313
+
314
+
315
+	/**
316
+	 * get Payment Amount
317
+	 *
318
+	 * @access public
319
+	 * @return float
320
+	 * @throws \EE_Error
321
+	 */
322
+	public function amount()
323
+	{
324
+		return (float) $this->get('PAY_amount');
325
+	}
326
+
327
+
328
+	/**
329
+	 * @return mixed
330
+	 * @throws \EE_Error
331
+	 */
332
+	public function amount_no_code()
333
+	{
334
+		return $this->get_pretty('PAY_amount', 'no_currency_code');
335
+	}
336
+
337
+
338
+	/**
339
+	 * get Payment Gateway Response
340
+	 *
341
+	 * @access public
342
+	 * @throws \EE_Error
343
+	 */
344
+	public function gateway_response()
345
+	{
346
+		return $this->get('PAY_gateway_response');
347
+	}
348
+
349
+
350
+	/**
351
+	 * get Payment Gateway Transaction ID
352
+	 *
353
+	 * @access public
354
+	 * @throws \EE_Error
355
+	 */
356
+	public function txn_id_chq_nmbr()
357
+	{
358
+		return $this->get('PAY_txn_id_chq_nmbr');
359
+	}
360
+
361
+
362
+	/**
363
+	 * get Purchase Order Number
364
+	 *
365
+	 * @access public
366
+	 * @throws \EE_Error
367
+	 */
368
+	public function po_number()
369
+	{
370
+		return $this->get('PAY_po_number');
371
+	}
372
+
373
+
374
+	/**
375
+	 * get Extra Accounting Field
376
+	 *
377
+	 * @access public
378
+	 * @throws \EE_Error
379
+	 */
380
+	public function extra_accntng()
381
+	{
382
+		return $this->get('PAY_extra_accntng');
383
+	}
384
+
385
+
386
+	/**
387
+	 * get Payment made via admin source
388
+	 *
389
+	 * @access public
390
+	 * @throws \EE_Error
391
+	 */
392
+	public function payment_made_via_admin()
393
+	{
394
+		return ($this->get('PAY_source') === EEM_Payment_Method::scope_admin);
395
+	}
396
+
397
+
398
+	/**
399
+	 * get Payment Details
400
+	 *
401
+	 * @access public
402
+	 * @throws \EE_Error
403
+	 */
404
+	public function details()
405
+	{
406
+		return $this->get('PAY_details');
407
+	}
408
+
409
+
410
+	/**
411
+	 * Gets redirect_url
412
+	 *
413
+	 * @return string
414
+	 * @throws \EE_Error
415
+	 */
416
+	public function redirect_url()
417
+	{
418
+		return $this->get('PAY_redirect_url');
419
+	}
420
+
421
+
422
+	/**
423
+	 * Gets redirect_args
424
+	 *
425
+	 * @return array
426
+	 * @throws \EE_Error
427
+	 */
428
+	public function redirect_args()
429
+	{
430
+		return $this->get('PAY_redirect_args');
431
+	}
432
+
433
+
434
+	/**
435
+	 * echoes $this->pretty_status()
436
+	 *
437
+	 * @param bool $show_icons
438
+	 * @return void
439
+	 * @throws \EE_Error
440
+	 */
441
+	public function e_pretty_status($show_icons = false)
442
+	{
443
+		echo $this->pretty_status($show_icons);
444
+	}
445
+
446
+
447
+	/**
448
+	 * returns a pretty version of the status, good for displaying to users
449
+	 *
450
+	 * @param bool $show_icons
451
+	 * @return string
452
+	 * @throws \EE_Error
453
+	 */
454
+	public function pretty_status($show_icons = false)
455
+	{
456
+		$status = EEM_Status::instance()->localized_status(
457
+			array($this->STS_ID() => __('unknown', 'event_espresso')),
458
+			false,
459
+			'sentence'
460
+		);
461
+		$icon = '';
462
+		switch ($this->STS_ID()) {
463
+			case EEM_Payment::status_id_approved:
464
+				$icon = $show_icons
465
+					? '<span class="dashicons dashicons-yes ee-icon-size-24 green-text"></span>'
466
+					: '';
467
+				break;
468
+			case EEM_Payment::status_id_pending:
469
+				$icon = $show_icons
470
+					? '<span class="dashicons dashicons-clock ee-icon-size-16 orange-text"></span>'
471
+					: '';
472
+				break;
473
+			case EEM_Payment::status_id_cancelled:
474
+				$icon = $show_icons
475
+					? '<span class="dashicons dashicons-no ee-icon-size-16 lt-grey-text"></span>'
476
+					: '';
477
+				break;
478
+			case EEM_Payment::status_id_declined:
479
+				$icon = $show_icons
480
+					? '<span class="dashicons dashicons-no ee-icon-size-16 red-text"></span>'
481
+					: '';
482
+				break;
483
+		}
484
+		return $icon . $status[ $this->STS_ID() ];
485
+	}
486
+
487
+
488
+	/**
489
+	 * For determining the status of the payment
490
+	 *
491
+	 * @return boolean whether the payment is approved or not
492
+	 * @throws \EE_Error
493
+	 */
494
+	public function is_approved()
495
+	{
496
+		return $this->status_is(EEM_Payment::status_id_approved);
497
+	}
498
+
499
+
500
+	/**
501
+	 * Generally determines if the status of this payment equals
502
+	 * the $STS_ID string
503
+	 *
504
+	 * @param string $STS_ID an ID from the esp_status table/
505
+	 *                       one of the status_id_* on the EEM_Payment model
506
+	 * @return boolean whether the status of this payment equals the status id
507
+	 * @throws \EE_Error
508
+	 */
509
+	protected function status_is($STS_ID)
510
+	{
511
+		return $STS_ID === $this->STS_ID() ? true : false;
512
+	}
513
+
514
+
515
+	/**
516
+	 * For determining the status of the payment
517
+	 *
518
+	 * @return boolean whether the payment is pending or not
519
+	 * @throws \EE_Error
520
+	 */
521
+	public function is_pending()
522
+	{
523
+		return $this->status_is(EEM_Payment::status_id_pending);
524
+	}
525
+
526
+
527
+	/**
528
+	 * For determining the status of the payment
529
+	 *
530
+	 * @return boolean
531
+	 * @throws \EE_Error
532
+	 */
533
+	public function is_cancelled()
534
+	{
535
+		return $this->status_is(EEM_Payment::status_id_cancelled);
536
+	}
537
+
538
+
539
+	/**
540
+	 * For determining the status of the payment
541
+	 *
542
+	 * @return boolean
543
+	 * @throws \EE_Error
544
+	 */
545
+	public function is_declined()
546
+	{
547
+		return $this->status_is(EEM_Payment::status_id_declined);
548
+	}
549
+
550
+
551
+	/**
552
+	 * For determining the status of the payment
553
+	 *
554
+	 * @return boolean
555
+	 * @throws \EE_Error
556
+	 */
557
+	public function is_failed()
558
+	{
559
+		return $this->status_is(EEM_Payment::status_id_failed);
560
+	}
561
+
562
+
563
+	/**
564
+	 * For determining if the payment is actually a refund ( ie: has a negative value )
565
+	 *
566
+	 * @return boolean
567
+	 * @throws \EE_Error
568
+	 */
569
+	public function is_a_refund()
570
+	{
571
+		return $this->amount() < 0 ? true : false;
572
+	}
573
+
574
+
575
+	/**
576
+	 * Get the status object of this object
577
+	 *
578
+	 * @return EE_Status
579
+	 * @throws \EE_Error
580
+	 */
581
+	public function status_obj()
582
+	{
583
+		return $this->get_first_related('Status');
584
+	}
585
+
586
+
587
+	/**
588
+	 * Gets all the extra meta info on this payment
589
+	 *
590
+	 * @param array $query_params like EEM_Base::get_all
591
+	 * @return EE_Extra_Meta
592
+	 * @throws \EE_Error
593
+	 */
594
+	public function extra_meta($query_params = array())
595
+	{
596
+		return $this->get_many_related('Extra_Meta', $query_params);
597
+	}
598
+
599
+
600
+	/**
601
+	 * Gets the last-used payment method on this transaction
602
+	 * (we COULD just use the last-made payment, but some payment methods, namely
603
+	 * offline ones, dont' create payments)
604
+	 *
605
+	 * @return EE_Payment_Method
606
+	 * @throws \EE_Error
607
+	 */
608
+	public function payment_method()
609
+	{
610
+		return $this->get_first_related('Payment_Method');
611
+	}
612
+
613
+
614
+	/**
615
+	 * Gets the HTML for redirecting the user to an offsite gateway
616
+	 * You can pass it special content to put inside the form, or use
617
+	 * the default inner content (or possibly generate this all yourself using
618
+	 * redirect_url() and redirect_args() or redirect_args_as_inputs()).
619
+	 * Creates a POST request by default, but if no redirect args are specified, creates a GET request instead
620
+	 * (and any querystring variables in the redirect_url are converted into html inputs
621
+	 * so browsers submit them properly)
622
+	 *
623
+	 * @param string $inside_form_html
624
+	 * @return string html
625
+	 * @throws \EE_Error
626
+	 */
627
+	public function redirect_form($inside_form_html = null)
628
+	{
629
+		$redirect_url = $this->redirect_url();
630
+		if (! empty($redirect_url)) {
631
+			// what ? no inner form content?
632
+			if ($inside_form_html === null) {
633
+				$inside_form_html = EEH_HTML::p(
634
+					sprintf(
635
+						__(
636
+							'If you are not automatically redirected to the payment website within 10 seconds... %1$s %2$s Click Here %3$s',
637
+							'event_espresso'
638
+						),
639
+						EEH_HTML::br(2),
640
+						'<input type="submit" value="',
641
+						'">'
642
+					),
643
+					'',
644
+					'',
645
+					'text-align:center;'
646
+				);
647
+			}
648
+			$method = apply_filters(
649
+				'FHEE__EE_Payment__redirect_form__method',
650
+				$this->redirect_args() ? 'POST' : 'GET',
651
+				$this
652
+			);
653
+			// if it's a GET request, we need to remove all the GET params in the querystring
654
+			// and put them into the form instead
655
+			if ($method === 'GET') {
656
+				$querystring = parse_url($redirect_url, PHP_URL_QUERY);
657
+				$get_params = null;
658
+				parse_str($querystring, $get_params);
659
+				$inside_form_html .= $this->_args_as_inputs($get_params);
660
+				$redirect_url = str_replace('?' . $querystring, '', $redirect_url);
661
+			}
662
+			$form = EEH_HTML::nl(1)
663
+					. '<form method="'
664
+					. $method
665
+					. '" name="gateway_form" action="'
666
+					. $redirect_url
667
+					. '">';
668
+			$form .= EEH_HTML::nl(1) . $this->redirect_args_as_inputs();
669
+			$form .= $inside_form_html;
670
+			$form .= EEH_HTML::nl(-1) . '</form>' . EEH_HTML::nl(-1);
671
+			return $form;
672
+		} else {
673
+			return null;
674
+		}
675
+	}
676
+
677
+
678
+	/**
679
+	 * Changes all the name-value pairs of the redirect args into html inputs
680
+	 * and returns the html as a string
681
+	 *
682
+	 * @return string
683
+	 * @throws \EE_Error
684
+	 */
685
+	public function redirect_args_as_inputs()
686
+	{
687
+		return $this->_args_as_inputs($this->redirect_args());
688
+	}
689
+
690
+
691
+	/**
692
+	 * Converts a 1d array of key-value pairs into html hidden inputs
693
+	 * and returns the string of html
694
+	 *
695
+	 * @param array $args key-value pairs
696
+	 * @return string
697
+	 */
698
+	protected function _args_as_inputs($args)
699
+	{
700
+		$html = '';
701
+		if ($args !== null && is_array($args)) {
702
+			foreach ($args as $name => $value) {
703
+				$html .= EEH_HTML::nl(0)
704
+						 . '<input type="hidden" name="'
705
+						 . $name
706
+						 . '" value="'
707
+						 . esc_attr($value)
708
+						 . '"/>';
709
+			}
710
+		}
711
+		return $html;
712
+	}
713
+
714
+
715
+	/**
716
+	 * Returns the currency of the payment.
717
+	 * (At the time of writing, this will always be the currency in the configuration;
718
+	 * however in the future it is anticipated that this will be stored on the payment
719
+	 * object itself)
720
+	 *
721
+	 * @return string for the currency code
722
+	 */
723
+	public function currency_code()
724
+	{
725
+		return EE_Config::instance()->currency->code;
726
+	}
727
+
728
+
729
+	/**
730
+	 * apply wp_strip_all_tags to all elements within an array
731
+	 *
732
+	 * @access private
733
+	 * @param mixed $item
734
+	 */
735
+	private function _strip_all_tags_within_array(&$item)
736
+	{
737
+		if (is_object($item)) {
738
+			$item = (array) $item;
739
+		}
740
+		if (is_array($item)) {
741
+			array_walk_recursive($item, array($this, '_strip_all_tags_within_array'));
742
+		} else {
743
+			$item = wp_strip_all_tags($item);
744
+		}
745
+	}
746
+
747
+
748
+	/**
749
+	 * Returns TRUE is this payment was set to approved during this request (or
750
+	 * is approved and was created during this request). False otherwise.
751
+	 *
752
+	 * @return boolean
753
+	 * @throws \EE_Error
754
+	 */
755
+	public function just_approved()
756
+	{
757
+		$original_status = EEH_Array::is_set(
758
+			$this->_props_n_values_provided_in_constructor,
759
+			'STS_ID',
760
+			$this->get_model()->field_settings_for('STS_ID')->get_default_value()
761
+		);
762
+		$current_status = $this->status();
763
+		if ($original_status !== EEM_Payment::status_id_approved
764
+			&& $current_status === EEM_Payment::status_id_approved
765
+		) {
766
+			return true;
767
+		} else {
768
+			return false;
769
+		}
770
+	}
771
+
772
+
773
+	/**
774
+	 * Overrides parents' get_pretty() function just for legacy reasons
775
+	 * (to allow ticket https://events.codebasehq.com/projects/event-espresso/tickets/7420)
776
+	 *
777
+	 * @param string $field_name
778
+	 * @param string $extra_cache_ref This allows the user to specify an extra cache ref for the given property
779
+	 *                                (in cases where the same property may be used for different outputs
780
+	 *                                - i.e. datetime, money etc.)
781
+	 * @return mixed
782
+	 * @throws \EE_Error
783
+	 */
784
+	public function get_pretty($field_name, $extra_cache_ref = null)
785
+	{
786
+		if ($field_name === 'PAY_gateway') {
787
+			return $this->payment_method() ? $this->payment_method()->name() : __('Unknown', 'event_espresso');
788
+		}
789
+		return $this->_get_cached_property($field_name, true, $extra_cache_ref);
790
+	}
791
+
792
+
793
+	/**
794
+	 * Gets details regarding which registrations this payment was applied to
795
+	 *
796
+	 * @param array $query_params like EEM_Base::get_all
797
+	 * @return EE_Registration_Payment[]
798
+	 * @throws \EE_Error
799
+	 */
800
+	public function registration_payments($query_params = array())
801
+	{
802
+		return $this->get_many_related('Registration_Payment', $query_params);
803
+	}
804
+
805
+
806
+	/**
807
+	 * Gets the first event for this payment (it's possible that it could be for multiple)
808
+	 *
809
+	 * @return EE_Event|null
810
+	 */
811
+	public function get_first_event()
812
+	{
813
+		$transaction = $this->transaction();
814
+		if ($transaction instanceof EE_Transaction) {
815
+			$primary_registrant = $transaction->primary_registration();
816
+			if ($primary_registrant instanceof EE_Registration) {
817
+				return $primary_registrant->event_obj();
818
+			}
819
+		}
820
+		return null;
821
+	}
822
+
823
+
824
+	/**
825
+	 * Gets the name of the first event for which is being paid
826
+	 *
827
+	 * @return string
828
+	 */
829
+	public function get_first_event_name()
830
+	{
831
+		$event = $this->get_first_event();
832
+		return $event instanceof EE_Event ? $event->name() : __('Event', 'event_espresso');
833
+	}
834
+
835
+
836
+	/**
837
+	 * Returns the payment's transaction's primary registration
838
+	 *
839
+	 * @return EE_Registration|null
840
+	 */
841
+	public function get_primary_registration()
842
+	{
843
+		if ($this->transaction() instanceof EE_Transaction) {
844
+			return $this->transaction()->primary_registration();
845
+		}
846
+		return null;
847
+	}
848
+
849
+
850
+	/**
851
+	 * Gets the payment's transaction's primary registration's attendee, or null
852
+	 *
853
+	 * @return EE_Attendee|null
854
+	 */
855
+	public function get_primary_attendee()
856
+	{
857
+		$primary_reg = $this->get_primary_registration();
858
+		if ($primary_reg instanceof EE_Registration) {
859
+			return $primary_reg->attendee();
860
+		}
861
+		return null;
862
+	}
863 863
 }
Please login to merge, or discard this patch.
Spacing   +6 added lines, -6 removed lines patch added patch discarded remove patch
@@ -296,7 +296,7 @@  discard block
 block discarded – undo
296 296
      */
297 297
     public function timestamp($dt_frmt = '', $tm_frmt = '')
298 298
     {
299
-        return $this->get_i18n_datetime('PAY_timestamp', trim($dt_frmt . ' ' . $tm_frmt));
299
+        return $this->get_i18n_datetime('PAY_timestamp', trim($dt_frmt.' '.$tm_frmt));
300 300
     }
301 301
 
302 302
 
@@ -481,7 +481,7 @@  discard block
 block discarded – undo
481 481
                     : '';
482 482
                 break;
483 483
         }
484
-        return $icon . $status[ $this->STS_ID() ];
484
+        return $icon.$status[$this->STS_ID()];
485 485
     }
486 486
 
487 487
 
@@ -627,7 +627,7 @@  discard block
 block discarded – undo
627 627
     public function redirect_form($inside_form_html = null)
628 628
     {
629 629
         $redirect_url = $this->redirect_url();
630
-        if (! empty($redirect_url)) {
630
+        if ( ! empty($redirect_url)) {
631 631
             // what ? no inner form content?
632 632
             if ($inside_form_html === null) {
633 633
                 $inside_form_html = EEH_HTML::p(
@@ -657,7 +657,7 @@  discard block
 block discarded – undo
657 657
                 $get_params = null;
658 658
                 parse_str($querystring, $get_params);
659 659
                 $inside_form_html .= $this->_args_as_inputs($get_params);
660
-                $redirect_url = str_replace('?' . $querystring, '', $redirect_url);
660
+                $redirect_url = str_replace('?'.$querystring, '', $redirect_url);
661 661
             }
662 662
             $form = EEH_HTML::nl(1)
663 663
                     . '<form method="'
@@ -665,9 +665,9 @@  discard block
 block discarded – undo
665 665
                     . '" name="gateway_form" action="'
666 666
                     . $redirect_url
667 667
                     . '">';
668
-            $form .= EEH_HTML::nl(1) . $this->redirect_args_as_inputs();
668
+            $form .= EEH_HTML::nl(1).$this->redirect_args_as_inputs();
669 669
             $form .= $inside_form_html;
670
-            $form .= EEH_HTML::nl(-1) . '</form>' . EEH_HTML::nl(-1);
670
+            $form .= EEH_HTML::nl(-1).'</form>'.EEH_HTML::nl(-1);
671 671
             return $form;
672 672
         } else {
673 673
             return null;
Please login to merge, or discard this patch.
core/db_classes/EE_Post_Meta.class.php 2 patches
Doc Comments   +4 added lines, -4 removed lines patch added patch discarded remove patch
@@ -46,7 +46,7 @@  discard block
 block discarded – undo
46 46
      * Sets meta_id
47 47
      *
48 48
      * @param int $meta_id
49
-     * @return boolean
49
+     * @return boolean|null
50 50
      */
51 51
     public function set_meta_id($meta_id)
52 52
     {
@@ -68,7 +68,7 @@  discard block
 block discarded – undo
68 68
      * Sets post_id
69 69
      *
70 70
      * @param int $post_id
71
-     * @return boolean
71
+     * @return boolean|null
72 72
      */
73 73
     public function set_post_id($post_id)
74 74
     {
@@ -90,7 +90,7 @@  discard block
 block discarded – undo
90 90
      * Sets meta_key
91 91
      *
92 92
      * @param string $meta_key
93
-     * @return boolean
93
+     * @return boolean|null
94 94
      */
95 95
     public function set_meta_key($meta_key)
96 96
     {
@@ -112,7 +112,7 @@  discard block
 block discarded – undo
112 112
      * Sets meta_value
113 113
      *
114 114
      * @param mixed $meta_value
115
-     * @return boolean
115
+     * @return boolean|null
116 116
      */
117 117
     public function set_meta_value($meta_value)
118 118
     {
Please login to merge, or discard this patch.
Indentation   +108 added lines, -108 removed lines patch added patch discarded remove patch
@@ -10,112 +10,112 @@
 block discarded – undo
10 10
 class EE_Post_Meta extends EE_Base_Class
11 11
 {
12 12
 
13
-    /**
14
-     * @param array $props_n_values
15
-     * @return EE_Post_Meta|mixed
16
-     */
17
-    public static function new_instance($props_n_values = array())
18
-    {
19
-        $has_object = parent::_check_for_object($props_n_values, __CLASS__);
20
-        return $has_object ? $has_object : new self($props_n_values);
21
-    }
22
-
23
-
24
-    /**
25
-     * @param array $props_n_values
26
-     * @return EE_Post_Meta
27
-     */
28
-    public static function new_instance_from_db($props_n_values = array())
29
-    {
30
-        return new self($props_n_values, true);
31
-    }
32
-
33
-
34
-    /**
35
-     * Gets meta_id
36
-     *
37
-     * @return int
38
-     */
39
-    public function meta_id()
40
-    {
41
-        return $this->get('meta_id');
42
-    }
43
-
44
-
45
-    /**
46
-     * Sets meta_id
47
-     *
48
-     * @param int $meta_id
49
-     * @return boolean
50
-     */
51
-    public function set_meta_id($meta_id)
52
-    {
53
-        return $this->set('meta_id', $meta_id);
54
-    }
55
-
56
-    /**
57
-     * Gets post_id
58
-     *
59
-     * @return int
60
-     */
61
-    public function post_id()
62
-    {
63
-        return $this->get('post_id');
64
-    }
65
-
66
-
67
-    /**
68
-     * Sets post_id
69
-     *
70
-     * @param int $post_id
71
-     * @return boolean
72
-     */
73
-    public function set_post_id($post_id)
74
-    {
75
-        return $this->set('post_id', $post_id);
76
-    }
77
-
78
-    /**
79
-     * Gets meta_key
80
-     *
81
-     * @return string
82
-     */
83
-    public function meta_key()
84
-    {
85
-        return $this->get('meta_key');
86
-    }
87
-
88
-
89
-    /**
90
-     * Sets meta_key
91
-     *
92
-     * @param string $meta_key
93
-     * @return boolean
94
-     */
95
-    public function set_meta_key($meta_key)
96
-    {
97
-        return $this->set('meta_key', $meta_key);
98
-    }
99
-
100
-    /**
101
-     * Gets meta_value
102
-     *
103
-     * @return mixed
104
-     */
105
-    public function meta_value()
106
-    {
107
-        return $this->get('meta_value');
108
-    }
109
-
110
-
111
-    /**
112
-     * Sets meta_value
113
-     *
114
-     * @param mixed $meta_value
115
-     * @return boolean
116
-     */
117
-    public function set_meta_value($meta_value)
118
-    {
119
-        return $this->set('meta_value', $meta_value);
120
-    }
13
+	/**
14
+	 * @param array $props_n_values
15
+	 * @return EE_Post_Meta|mixed
16
+	 */
17
+	public static function new_instance($props_n_values = array())
18
+	{
19
+		$has_object = parent::_check_for_object($props_n_values, __CLASS__);
20
+		return $has_object ? $has_object : new self($props_n_values);
21
+	}
22
+
23
+
24
+	/**
25
+	 * @param array $props_n_values
26
+	 * @return EE_Post_Meta
27
+	 */
28
+	public static function new_instance_from_db($props_n_values = array())
29
+	{
30
+		return new self($props_n_values, true);
31
+	}
32
+
33
+
34
+	/**
35
+	 * Gets meta_id
36
+	 *
37
+	 * @return int
38
+	 */
39
+	public function meta_id()
40
+	{
41
+		return $this->get('meta_id');
42
+	}
43
+
44
+
45
+	/**
46
+	 * Sets meta_id
47
+	 *
48
+	 * @param int $meta_id
49
+	 * @return boolean
50
+	 */
51
+	public function set_meta_id($meta_id)
52
+	{
53
+		return $this->set('meta_id', $meta_id);
54
+	}
55
+
56
+	/**
57
+	 * Gets post_id
58
+	 *
59
+	 * @return int
60
+	 */
61
+	public function post_id()
62
+	{
63
+		return $this->get('post_id');
64
+	}
65
+
66
+
67
+	/**
68
+	 * Sets post_id
69
+	 *
70
+	 * @param int $post_id
71
+	 * @return boolean
72
+	 */
73
+	public function set_post_id($post_id)
74
+	{
75
+		return $this->set('post_id', $post_id);
76
+	}
77
+
78
+	/**
79
+	 * Gets meta_key
80
+	 *
81
+	 * @return string
82
+	 */
83
+	public function meta_key()
84
+	{
85
+		return $this->get('meta_key');
86
+	}
87
+
88
+
89
+	/**
90
+	 * Sets meta_key
91
+	 *
92
+	 * @param string $meta_key
93
+	 * @return boolean
94
+	 */
95
+	public function set_meta_key($meta_key)
96
+	{
97
+		return $this->set('meta_key', $meta_key);
98
+	}
99
+
100
+	/**
101
+	 * Gets meta_value
102
+	 *
103
+	 * @return mixed
104
+	 */
105
+	public function meta_value()
106
+	{
107
+		return $this->get('meta_value');
108
+	}
109
+
110
+
111
+	/**
112
+	 * Sets meta_value
113
+	 *
114
+	 * @param mixed $meta_value
115
+	 * @return boolean
116
+	 */
117
+	public function set_meta_value($meta_value)
118
+	{
119
+		return $this->set('meta_value', $meta_value);
120
+	}
121 121
 }
Please login to merge, or discard this patch.
core/db_classes/EE_Price.class.php 3 patches
Doc Comments   +1 added lines, -1 removed lines patch added patch discarded remove patch
@@ -30,7 +30,7 @@
 block discarded – undo
30 30
      * @param array  $props_n_values  incoming values from the database
31 31
      * @param string $timezone        incoming timezone as set by the model.  If not set the timezone for
32 32
      *                                the website will be used.
33
-     * @return EE_Attendee
33
+     * @return EE_Price
34 34
      */
35 35
     public static function new_instance_from_db($props_n_values = array(), $timezone = null)
36 36
     {
Please login to merge, or discard this patch.
Indentation   +286 added lines, -286 removed lines patch added patch discarded remove patch
@@ -10,290 +10,290 @@
 block discarded – undo
10 10
 class EE_Price extends EE_Soft_Delete_Base_Class
11 11
 {
12 12
 
13
-    /**
14
-     *
15
-     * @param array  $props_n_values          incoming values
16
-     * @param string $timezone                incoming timezone (if not set the timezone set for the website will be
17
-     *                                        used.)
18
-     * @param array  $date_formats            incoming date_formats in an array where the first value is the
19
-     *                                        date_format and the second value is the time format
20
-     * @return EE_Attendee
21
-     */
22
-    public static function new_instance($props_n_values = array(), $timezone = null, $date_formats = array())
23
-    {
24
-        $has_object = parent::_check_for_object($props_n_values, __CLASS__, $timezone, $date_formats);
25
-        return $has_object ? $has_object : new self($props_n_values, false, $timezone, $date_formats);
26
-    }
27
-
28
-
29
-    /**
30
-     * @param array  $props_n_values  incoming values from the database
31
-     * @param string $timezone        incoming timezone as set by the model.  If not set the timezone for
32
-     *                                the website will be used.
33
-     * @return EE_Attendee
34
-     */
35
-    public static function new_instance_from_db($props_n_values = array(), $timezone = null)
36
-    {
37
-        return new self($props_n_values, true, $timezone);
38
-    }
39
-
40
-
41
-    /**
42
-     *        Set Price type ID
43
-     *
44
-     * @access        public
45
-     * @param        int $PRT_ID
46
-     */
47
-    public function set_type($PRT_ID = 0)
48
-    {
49
-        $this->set('PRT_ID', $PRT_ID);
50
-    }
51
-
52
-
53
-    /**
54
-     *        Set Price Amount
55
-     *
56
-     * @access        public
57
-     * @param        float $PRC_amount
58
-     */
59
-    public function set_amount($PRC_amount = 0.00)
60
-    {
61
-        $this->set('PRC_amount', $PRC_amount);
62
-    }
63
-
64
-
65
-    /**
66
-     *        Set Price Name
67
-     *
68
-     * @access        public
69
-     * @param        string $PRC_name
70
-     */
71
-    public function set_name($PRC_name = '')
72
-    {
73
-        $this->set('PRC_name', $PRC_name);
74
-    }
75
-
76
-
77
-    /**
78
-     *        Set Price Description
79
-     *
80
-     * @access        public
81
-     * @param        string $PRC_desc
82
-     */
83
-    public function set_description($PRC_desc = '')
84
-    {
85
-        $this->Set('PRC_desc', $PRC_desc);
86
-    }
87
-
88
-
89
-    /**
90
-     *        set is_default
91
-     *
92
-     * @access        public
93
-     * @param        bool $PRC_is_default
94
-     */
95
-    public function set_is_default($PRC_is_default = false)
96
-    {
97
-        $this->set('PRC_is_default', $PRC_is_default);
98
-    }
99
-
100
-
101
-    /**
102
-     *        set deleted
103
-     *
104
-     * @access        public
105
-     * @param        bool $PRC_deleted
106
-     */
107
-    public function set_deleted($PRC_deleted = null)
108
-    {
109
-        $this->set('PRC_deleted', $PRC_deleted);
110
-    }
111
-
112
-
113
-    /**
114
-     *    get Price type
115
-     *
116
-     * @access        public
117
-     * @return        int
118
-     */
119
-    public function type()
120
-    {
121
-        return $this->get('PRT_ID');
122
-    }
123
-
124
-
125
-    /**
126
-     *    get Price Amount
127
-     *
128
-     * @access        public
129
-     * @return        float
130
-     */
131
-    public function amount()
132
-    {
133
-        return $this->get('PRC_amount');
134
-    }
135
-
136
-
137
-    /**
138
-     *    get Price Name
139
-     *
140
-     * @access        public
141
-     * @return        string
142
-     */
143
-    public function name()
144
-    {
145
-        return $this->get('PRC_name');
146
-    }
147
-
148
-
149
-    /**
150
-     *    get Price description
151
-     *
152
-     * @access        public
153
-     * @return        string
154
-     */
155
-    public function desc()
156
-    {
157
-        return $this->get('PRC_desc');
158
-    }
159
-
160
-
161
-    /**
162
-     *    get overrides
163
-     *
164
-     * @access        public
165
-     * @return        int
166
-     */
167
-    public function overrides()
168
-    {
169
-        return $this->get('PRC_overrides');
170
-    }
171
-
172
-
173
-    /**
174
-     *    get order
175
-     *
176
-     * @access        public
177
-     * @return        int
178
-     */
179
-    public function order()
180
-    {
181
-        return $this->get('PRC_order');
182
-    }
183
-
184
-
185
-    /**
186
-     * get the author of the price
187
-     *
188
-     * @since 4.5.0
189
-     *
190
-     * @return int
191
-     */
192
-    public function wp_user()
193
-    {
194
-        return $this->get('PRC_wp_user');
195
-    }
196
-
197
-
198
-    /**
199
-     *    get is_default
200
-     *
201
-     * @access        public
202
-     * @return        bool
203
-     */
204
-    public function is_default()
205
-    {
206
-        return $this->get('PRC_is_default');
207
-    }
208
-
209
-
210
-    /**
211
-     *    get deleted
212
-     *
213
-     * @access        public
214
-     * @return        bool
215
-     */
216
-    public function deleted()
217
-    {
218
-        return $this->get('PRC_deleted');
219
-    }
220
-
221
-
222
-    /**
223
-     * @return bool
224
-     */
225
-    public function parent()
226
-    {
227
-        return $this->get('PRC_parent');
228
-    }
229
-
230
-
231
-    // some helper methods for getting info on the price_type for this price
232
-
233
-    /**
234
-     * return whether the price is a base price or not
235
-     *
236
-     * @return boolean
237
-     */
238
-    public function is_base_price()
239
-    {
240
-        $price_type = $this->type_obj();
241
-        return $price_type->base_type() === 1;
242
-    }
243
-
244
-
245
-    /**
246
-     *
247
-     * @return EE_Price_Type
248
-     */
249
-    public function type_obj()
250
-    {
251
-        return $this->get_first_related('Price_Type');
252
-    }
253
-
254
-
255
-    /**
256
-     * Simply indicates whether this price increases or decreases the total
257
-     *
258
-     * @return boolean true = discount, otherwise adds to the total
259
-     */
260
-    public function is_discount()
261
-    {
262
-        $price_type = $this->type_obj();
263
-        return $price_type->is_discount();
264
-    }
265
-
266
-
267
-    /**
268
-     * whether the price is a percentage or not
269
-     *
270
-     * @return boolean
271
-     */
272
-    public function is_percent()
273
-    {
274
-        $price_type = $this->type_obj();
275
-        return $price_type->get('PRT_is_percent');
276
-    }
277
-
278
-
279
-    /**
280
-     * return pretty price dependant on whether its a dollar or percent.
281
-     *
282
-     * @since 4.4.0
283
-     *
284
-     * @return string
285
-     */
286
-    public function pretty_price()
287
-    {
288
-        return ! $this->is_percent() ? $this->get_pretty('PRC_amount') : $this->get('PRC_amount') . '%';
289
-    }
290
-
291
-
292
-    /**
293
-     * @return mixed
294
-     */
295
-    public function get_price_without_currency_symbol()
296
-    {
297
-        return str_replace(EE_Registry::instance()->CFG->currency->sign, '', $this->get_pretty('PRC_amount'));
298
-    }
13
+	/**
14
+	 *
15
+	 * @param array  $props_n_values          incoming values
16
+	 * @param string $timezone                incoming timezone (if not set the timezone set for the website will be
17
+	 *                                        used.)
18
+	 * @param array  $date_formats            incoming date_formats in an array where the first value is the
19
+	 *                                        date_format and the second value is the time format
20
+	 * @return EE_Attendee
21
+	 */
22
+	public static function new_instance($props_n_values = array(), $timezone = null, $date_formats = array())
23
+	{
24
+		$has_object = parent::_check_for_object($props_n_values, __CLASS__, $timezone, $date_formats);
25
+		return $has_object ? $has_object : new self($props_n_values, false, $timezone, $date_formats);
26
+	}
27
+
28
+
29
+	/**
30
+	 * @param array  $props_n_values  incoming values from the database
31
+	 * @param string $timezone        incoming timezone as set by the model.  If not set the timezone for
32
+	 *                                the website will be used.
33
+	 * @return EE_Attendee
34
+	 */
35
+	public static function new_instance_from_db($props_n_values = array(), $timezone = null)
36
+	{
37
+		return new self($props_n_values, true, $timezone);
38
+	}
39
+
40
+
41
+	/**
42
+	 *        Set Price type ID
43
+	 *
44
+	 * @access        public
45
+	 * @param        int $PRT_ID
46
+	 */
47
+	public function set_type($PRT_ID = 0)
48
+	{
49
+		$this->set('PRT_ID', $PRT_ID);
50
+	}
51
+
52
+
53
+	/**
54
+	 *        Set Price Amount
55
+	 *
56
+	 * @access        public
57
+	 * @param        float $PRC_amount
58
+	 */
59
+	public function set_amount($PRC_amount = 0.00)
60
+	{
61
+		$this->set('PRC_amount', $PRC_amount);
62
+	}
63
+
64
+
65
+	/**
66
+	 *        Set Price Name
67
+	 *
68
+	 * @access        public
69
+	 * @param        string $PRC_name
70
+	 */
71
+	public function set_name($PRC_name = '')
72
+	{
73
+		$this->set('PRC_name', $PRC_name);
74
+	}
75
+
76
+
77
+	/**
78
+	 *        Set Price Description
79
+	 *
80
+	 * @access        public
81
+	 * @param        string $PRC_desc
82
+	 */
83
+	public function set_description($PRC_desc = '')
84
+	{
85
+		$this->Set('PRC_desc', $PRC_desc);
86
+	}
87
+
88
+
89
+	/**
90
+	 *        set is_default
91
+	 *
92
+	 * @access        public
93
+	 * @param        bool $PRC_is_default
94
+	 */
95
+	public function set_is_default($PRC_is_default = false)
96
+	{
97
+		$this->set('PRC_is_default', $PRC_is_default);
98
+	}
99
+
100
+
101
+	/**
102
+	 *        set deleted
103
+	 *
104
+	 * @access        public
105
+	 * @param        bool $PRC_deleted
106
+	 */
107
+	public function set_deleted($PRC_deleted = null)
108
+	{
109
+		$this->set('PRC_deleted', $PRC_deleted);
110
+	}
111
+
112
+
113
+	/**
114
+	 *    get Price type
115
+	 *
116
+	 * @access        public
117
+	 * @return        int
118
+	 */
119
+	public function type()
120
+	{
121
+		return $this->get('PRT_ID');
122
+	}
123
+
124
+
125
+	/**
126
+	 *    get Price Amount
127
+	 *
128
+	 * @access        public
129
+	 * @return        float
130
+	 */
131
+	public function amount()
132
+	{
133
+		return $this->get('PRC_amount');
134
+	}
135
+
136
+
137
+	/**
138
+	 *    get Price Name
139
+	 *
140
+	 * @access        public
141
+	 * @return        string
142
+	 */
143
+	public function name()
144
+	{
145
+		return $this->get('PRC_name');
146
+	}
147
+
148
+
149
+	/**
150
+	 *    get Price description
151
+	 *
152
+	 * @access        public
153
+	 * @return        string
154
+	 */
155
+	public function desc()
156
+	{
157
+		return $this->get('PRC_desc');
158
+	}
159
+
160
+
161
+	/**
162
+	 *    get overrides
163
+	 *
164
+	 * @access        public
165
+	 * @return        int
166
+	 */
167
+	public function overrides()
168
+	{
169
+		return $this->get('PRC_overrides');
170
+	}
171
+
172
+
173
+	/**
174
+	 *    get order
175
+	 *
176
+	 * @access        public
177
+	 * @return        int
178
+	 */
179
+	public function order()
180
+	{
181
+		return $this->get('PRC_order');
182
+	}
183
+
184
+
185
+	/**
186
+	 * get the author of the price
187
+	 *
188
+	 * @since 4.5.0
189
+	 *
190
+	 * @return int
191
+	 */
192
+	public function wp_user()
193
+	{
194
+		return $this->get('PRC_wp_user');
195
+	}
196
+
197
+
198
+	/**
199
+	 *    get is_default
200
+	 *
201
+	 * @access        public
202
+	 * @return        bool
203
+	 */
204
+	public function is_default()
205
+	{
206
+		return $this->get('PRC_is_default');
207
+	}
208
+
209
+
210
+	/**
211
+	 *    get deleted
212
+	 *
213
+	 * @access        public
214
+	 * @return        bool
215
+	 */
216
+	public function deleted()
217
+	{
218
+		return $this->get('PRC_deleted');
219
+	}
220
+
221
+
222
+	/**
223
+	 * @return bool
224
+	 */
225
+	public function parent()
226
+	{
227
+		return $this->get('PRC_parent');
228
+	}
229
+
230
+
231
+	// some helper methods for getting info on the price_type for this price
232
+
233
+	/**
234
+	 * return whether the price is a base price or not
235
+	 *
236
+	 * @return boolean
237
+	 */
238
+	public function is_base_price()
239
+	{
240
+		$price_type = $this->type_obj();
241
+		return $price_type->base_type() === 1;
242
+	}
243
+
244
+
245
+	/**
246
+	 *
247
+	 * @return EE_Price_Type
248
+	 */
249
+	public function type_obj()
250
+	{
251
+		return $this->get_first_related('Price_Type');
252
+	}
253
+
254
+
255
+	/**
256
+	 * Simply indicates whether this price increases or decreases the total
257
+	 *
258
+	 * @return boolean true = discount, otherwise adds to the total
259
+	 */
260
+	public function is_discount()
261
+	{
262
+		$price_type = $this->type_obj();
263
+		return $price_type->is_discount();
264
+	}
265
+
266
+
267
+	/**
268
+	 * whether the price is a percentage or not
269
+	 *
270
+	 * @return boolean
271
+	 */
272
+	public function is_percent()
273
+	{
274
+		$price_type = $this->type_obj();
275
+		return $price_type->get('PRT_is_percent');
276
+	}
277
+
278
+
279
+	/**
280
+	 * return pretty price dependant on whether its a dollar or percent.
281
+	 *
282
+	 * @since 4.4.0
283
+	 *
284
+	 * @return string
285
+	 */
286
+	public function pretty_price()
287
+	{
288
+		return ! $this->is_percent() ? $this->get_pretty('PRC_amount') : $this->get('PRC_amount') . '%';
289
+	}
290
+
291
+
292
+	/**
293
+	 * @return mixed
294
+	 */
295
+	public function get_price_without_currency_symbol()
296
+	{
297
+		return str_replace(EE_Registry::instance()->CFG->currency->sign, '', $this->get_pretty('PRC_amount'));
298
+	}
299 299
 }
Please login to merge, or discard this patch.
Spacing   +1 added lines, -1 removed lines patch added patch discarded remove patch
@@ -285,7 +285,7 @@
 block discarded – undo
285 285
      */
286 286
     public function pretty_price()
287 287
     {
288
-        return ! $this->is_percent() ? $this->get_pretty('PRC_amount') : $this->get('PRC_amount') . '%';
288
+        return ! $this->is_percent() ? $this->get_pretty('PRC_amount') : $this->get('PRC_amount').'%';
289 289
     }
290 290
 
291 291
 
Please login to merge, or discard this patch.
core/db_classes/EE_Question.class.php 3 patches
Doc Comments   +2 added lines, -2 removed lines patch added patch discarded remove patch
@@ -371,7 +371,7 @@  discard block
 block discarded – undo
371 371
      * Question, that relationship will be overwritten.
372 372
      *
373 373
      * @param EE_Question_Option $option
374
-     * @return boolean success
374
+     * @return EE_Base_Class success
375 375
      */
376 376
     public function add_option(EE_Question_Option $option)
377 377
     {
@@ -396,7 +396,7 @@  discard block
 block discarded – undo
396 396
      * Marks the option as deleted.
397 397
      *
398 398
      * @param EE_Question_Option $option
399
-     * @return boolean success
399
+     * @return EE_Base_Class success
400 400
      */
401 401
     public function remove_option(EE_Question_Option $option)
402 402
     {
Please login to merge, or discard this patch.
Indentation   +657 added lines, -657 removed lines patch added patch discarded remove patch
@@ -12,661 +12,661 @@
 block discarded – undo
12 12
 class EE_Question extends EE_Soft_Delete_Base_Class implements EEI_Duplicatable
13 13
 {
14 14
 
15
-    /**
16
-     *
17
-     * @param array  $props_n_values          incoming values
18
-     * @param string $timezone                incoming timezone (if not set the timezone set for the website will be
19
-     *                                        used.)
20
-     * @param array  $date_formats            incoming date_formats in an array where the first value is the
21
-     *                                        date_format and the second value is the time format
22
-     * @return EE_Question
23
-     */
24
-    public static function new_instance($props_n_values = array(), $timezone = null, $date_formats = array())
25
-    {
26
-        $has_object = parent::_check_for_object($props_n_values, __CLASS__, $timezone, $date_formats);
27
-        return $has_object ? $has_object : new self($props_n_values, false, $timezone, $date_formats);
28
-    }
29
-
30
-
31
-    /**
32
-     * @param array  $props_n_values  incoming values from the database
33
-     * @param string $timezone        incoming timezone as set by the model.  If not set the timezone for
34
-     *                                the website will be used.
35
-     * @return EE_Question
36
-     */
37
-    public static function new_instance_from_db($props_n_values = array(), $timezone = null)
38
-    {
39
-        return new self($props_n_values, true, $timezone);
40
-    }
41
-
42
-
43
-    /**
44
-     *        Set    Question display text
45
-     *
46
-     * @access        public
47
-     * @param string $QST_display_text
48
-     */
49
-    public function set_display_text($QST_display_text = '')
50
-    {
51
-        $this->set('QST_display_text', $QST_display_text);
52
-    }
53
-
54
-
55
-    /**
56
-     *        Set    Question admin text
57
-     *
58
-     * @access        public
59
-     * @param        string $QST_admin_label
60
-     */
61
-    public function set_admin_label($QST_admin_label = '')
62
-    {
63
-        $this->set('QST_admin_label', $QST_admin_label);
64
-    }
65
-
66
-
67
-    /**
68
-     *        Set    system name
69
-     *
70
-     * @access        public
71
-     * @param        mixed $QST_system
72
-     */
73
-    public function set_system_ID($QST_system = '')
74
-    {
75
-        $this->set('QST_system', $QST_system);
76
-    }
77
-
78
-
79
-    /**
80
-     *        Set    question's type
81
-     *
82
-     * @access        public
83
-     * @param        string $QST_type
84
-     */
85
-    public function set_question_type($QST_type = '')
86
-    {
87
-        $this->set('QST_type', $QST_type);
88
-    }
89
-
90
-
91
-    /**
92
-     *        Sets whether this question must be answered when presented in a form
93
-     *
94
-     * @access        public
95
-     * @param        bool $QST_required
96
-     */
97
-    public function set_required($QST_required = false)
98
-    {
99
-        $this->set('QST_required', $QST_required);
100
-    }
101
-
102
-
103
-    /**
104
-     *        Set    Question display text
105
-     *
106
-     * @access        public
107
-     * @param        string $QST_required_text
108
-     */
109
-    public function set_required_text($QST_required_text = '')
110
-    {
111
-        $this->set('QST_required_text', $QST_required_text);
112
-    }
113
-
114
-
115
-    /**
116
-     *        Sets the order of this question when placed in a sequence of questions
117
-     *
118
-     * @access        public
119
-     * @param        int $QST_order
120
-     */
121
-    public function set_order($QST_order = 0)
122
-    {
123
-        $this->set('QST_order', $QST_order);
124
-    }
125
-
126
-
127
-    /**
128
-     *        Sets whether the question is admin-only
129
-     *
130
-     * @access        public
131
-     * @param        bool $QST_admin_only
132
-     */
133
-    public function set_admin_only($QST_admin_only = false)
134
-    {
135
-        $this->set('QST_admin_only', $QST_admin_only);
136
-    }
137
-
138
-
139
-    /**
140
-     *        Sets the wordpress user ID on the question
141
-     *
142
-     * @access        public
143
-     * @param        int $QST_wp_user
144
-     */
145
-    public function set_wp_user($QST_wp_user = 1)
146
-    {
147
-        $this->set('QST_wp_user', $QST_wp_user);
148
-    }
149
-
150
-
151
-    /**
152
-     *        Sets whether the question has been deleted
153
-     *        (we use this boolean instead of actually
154
-     *        deleting it because when users delete this question
155
-     *        they really want to remove the question from future
156
-     *        forms, BUT keep their old answers which depend
157
-     *        on this record actually existing.
158
-     *
159
-     * @access        public
160
-     * @param    bool $QST_deleted
161
-     */
162
-    public function set_deleted($QST_deleted = false)
163
-    {
164
-        $this->set('QST_deleted', $QST_deleted);
165
-    }
166
-
167
-
168
-    /**
169
-     * returns the text for displaying the question to users
170
-     *
171
-     * @access public
172
-     * @return string
173
-     */
174
-    public function display_text()
175
-    {
176
-        return $this->get('QST_display_text');
177
-    }
178
-
179
-
180
-    /**
181
-     * returns the text for the administrative label
182
-     *
183
-     * @access public
184
-     * @return string
185
-     */
186
-    public function admin_label()
187
-    {
188
-        return $this->get('QST_admin_label');
189
-    }
190
-
191
-
192
-    /**
193
-     * returns the attendee column name for this question
194
-     *
195
-     * @access public
196
-     * @return string
197
-     */
198
-    public function system_ID()
199
-    {
200
-        return $this->get('QST_system');
201
-    }
202
-
203
-
204
-    /**
205
-     * returns either a string of 'text', 'textfield', etc.
206
-     *
207
-     * @access public
208
-     * @return boolean
209
-     */
210
-    public function required()
211
-    {
212
-        return $this->get('QST_required');
213
-    }
214
-
215
-
216
-    /**
217
-     * returns the text which should be displayed when a user
218
-     * doesn't answer this question in a form
219
-     *
220
-     * @access public
221
-     * @return string
222
-     */
223
-    public function required_text()
224
-    {
225
-        return $this->get('QST_required_text');
226
-    }
227
-
228
-
229
-    /**
230
-     * returns the type of this question
231
-     *
232
-     * @access public
233
-     * @return string
234
-     */
235
-    public function type()
236
-    {
237
-        return $this->get('QST_type');
238
-    }
239
-
240
-
241
-    /**
242
-     * returns an integer showing where this question should
243
-     * be placed in a sequence of questions
244
-     *
245
-     * @access public
246
-     * @return int
247
-     */
248
-    public function order()
249
-    {
250
-        return $this->get('QST_order');
251
-    }
252
-
253
-
254
-    /**
255
-     * returns whether this question should only appears to admins,
256
-     * or to everyone
257
-     *
258
-     * @access public
259
-     * @return boolean
260
-     */
261
-    public function admin_only()
262
-    {
263
-        return $this->get('QST_admin_only');
264
-    }
265
-
266
-
267
-    /**
268
-     * returns the id the wordpress user who created this question
269
-     *
270
-     * @access public
271
-     * @return int
272
-     */
273
-    public function wp_user()
274
-    {
275
-        return $this->get('QST_wp_user');
276
-    }
277
-
278
-
279
-    /**
280
-     * returns whether this question has been marked as 'deleted'
281
-     *
282
-     * @access public
283
-     * @return boolean
284
-     */
285
-    public function deleted()
286
-    {
287
-        return $this->get('QST_deleted');
288
-    }
289
-
290
-
291
-    /**
292
-     * Gets an array of related EE_Answer  to this EE_Question
293
-     *
294
-     * @return EE_Answer[]
295
-     */
296
-    public function answers()
297
-    {
298
-        return $this->get_many_related('Answer');
299
-    }
300
-
301
-
302
-    /**
303
-     * Boolean check for if there are answers on this question in th db
304
-     *
305
-     * @return boolean true = has answers, false = no answers.
306
-     */
307
-    public function has_answers()
308
-    {
309
-        return $this->count_related('Answer') > 0 ? true : false;
310
-    }
311
-
312
-
313
-    /**
314
-     * gets an array of EE_Question_Group which relate to this question
315
-     *
316
-     * @return EE_Question_Group[]
317
-     */
318
-    public function question_groups()
319
-    {
320
-        return $this->get_many_related('Question_Group');
321
-    }
322
-
323
-
324
-    /**
325
-     * Returns all the options for this question. By default, it returns only the not-yet-deleted ones.
326
-     *
327
-     * @param boolean      $notDeletedOptionsOnly            1
328
-     *                                                       whether to return ALL options, or only the ones which have
329
-     *                                                       not yet been deleleted
330
-     * @param string|array $selected_value_to_always_include , when retrieving options to an ANSWERED question,
331
-     *                                                       we want to usually only show non-deleted options AND the
332
-     *                                                       value that was selected for the answer, whether it was
333
-     *                                                       trashed or not.
334
-     * @return EE_Question_Option[]
335
-     */
336
-    public function options($notDeletedOptionsOnly = true, $selected_value_to_always_include = null)
337
-    {
338
-        if (! $this->ID()) {
339
-            return array();
340
-        }
341
-        $query_params = array();
342
-        if ($selected_value_to_always_include) {
343
-            if (is_array($selected_value_to_always_include)) {
344
-                $query_params[0]['OR*options-query']['QSO_value'] = array('IN', $selected_value_to_always_include);
345
-            } else {
346
-                $query_params[0]['OR*options-query']['QSO_value'] = $selected_value_to_always_include;
347
-            }
348
-        }
349
-        if ($notDeletedOptionsOnly) {
350
-            $query_params[0]['OR*options-query']['QSO_deleted'] = false;
351
-        }
352
-        // order by QSO_order
353
-        $query_params['order_by'] = array('QSO_order' => 'ASC');
354
-        return $this->get_many_related('Question_Option', $query_params);
355
-    }
356
-
357
-
358
-    /**
359
-     * returns an array of EE_Question_Options which relate to this question
360
-     *
361
-     * @return \EE_Question_Option[]
362
-     */
363
-    public function temp_options()
364
-    {
365
-        return $this->_model_relations['Question_Option'];
366
-    }
367
-
368
-
369
-    /**
370
-     * Adds an option for this question. Note: if the option were previously associated with a different
371
-     * Question, that relationship will be overwritten.
372
-     *
373
-     * @param EE_Question_Option $option
374
-     * @return boolean success
375
-     */
376
-    public function add_option(EE_Question_Option $option)
377
-    {
378
-        return $this->_add_relation_to($option, 'Question_Option');
379
-    }
380
-
381
-
382
-    /**
383
-     * Adds an option directly to this question without saving to the db
384
-     *
385
-     * @param EE_Question_Option $option
386
-     * @return boolean success
387
-     */
388
-    public function add_temp_option(EE_Question_Option $option)
389
-    {
390
-        $this->_model_relations['Question_Option'][] = $option;
391
-        return true;
392
-    }
393
-
394
-
395
-    /**
396
-     * Marks the option as deleted.
397
-     *
398
-     * @param EE_Question_Option $option
399
-     * @return boolean success
400
-     */
401
-    public function remove_option(EE_Question_Option $option)
402
-    {
403
-        return $this->_remove_relation_to($option, 'Question_Option');
404
-    }
405
-
406
-
407
-    /**
408
-     * @return bool
409
-     */
410
-    public function is_system_question()
411
-    {
412
-        $system_ID = $this->get('QST_system');
413
-        return ! empty($system_ID) ? true : false;
414
-    }
415
-
416
-
417
-    /**
418
-     * The purpose of this method is set the question order this question order to be the max out of all questions
419
-     *
420
-     * @access public
421
-     * @return void
422
-     */
423
-    public function set_order_to_latest()
424
-    {
425
-        $latest_order = $this->get_model()->get_latest_question_order();
426
-        $latest_order++;
427
-        $this->set('QST_order', $latest_order);
428
-    }
429
-
430
-
431
-    /**
432
-     * Retrieves the list of allowed question types from the model.
433
-     *
434
-     * @return string[]
435
-     */
436
-    private function _allowed_question_types()
437
-    {
438
-        $questionModel = $this->get_model();
439
-        /* @var $questionModel EEM_Question */
440
-        return $questionModel->allowed_question_types();
441
-    }
442
-
443
-    /**
444
-     * Duplicates this question and its question options
445
-     *
446
-     * @return \EE_Question
447
-     */
448
-    public function duplicate($options = array())
449
-    {
450
-        $new_question = clone $this;
451
-        $new_question->set('QST_ID', null);
452
-        $new_question->set_display_text(sprintf(__('%s **Duplicate**', 'event_espresso'), $this->display_text()));
453
-        $new_question->set_admin_label(sprintf(__('%s **Duplicate**', 'event_espresso'), $this->admin_label()));
454
-        $new_question->set_system_ID(null);
455
-        $new_question->set_wp_user(get_current_user_id());
456
-        // if we're duplicating a trashed question, assume we don't want the new one to be trashed
457
-        $new_question->set_deleted(false);
458
-        $success = $new_question->save();
459
-        if ($success) {
460
-            // we don't totally want to duplicate the question options, because we want them to be for the NEW question
461
-            foreach ($this->options() as $question_option) {
462
-                $question_option->duplicate(array('QST_ID' => $new_question->ID()));
463
-            }
464
-            return $new_question;
465
-        } else {
466
-            return null;
467
-        }
468
-    }
469
-
470
-    /**
471
-     * Returns the question's maximum allowed response size
472
-     *
473
-     * @return int|float
474
-     */
475
-    public function max()
476
-    {
477
-        return $this->get('QST_max');
478
-    }
479
-
480
-    /**
481
-     * Sets the question's maximum allowed response size
482
-     *
483
-     * @param int|float $new_max
484
-     * @return void
485
-     */
486
-    public function set_max($new_max)
487
-    {
488
-        $this->set('QST_max', $new_max);
489
-    }
490
-
491
-
492
-    /**
493
-     * Creates a form input from this question which can be used in HTML forms
494
-     *
495
-     * @param EE_Registration $registration
496
-     * @param EE_Answer       $answer
497
-     * @param array           $input_constructor_args
498
-     * @return EE_Form_Input_Base
499
-     */
500
-    public function generate_form_input($registration = null, $answer = null, $input_constructor_args = array())
501
-    {
502
-        $identifier = $this->is_system_question() ? $this->system_ID() : $this->ID();
503
-
504
-        $input_constructor_args = array_merge(
505
-            array(
506
-                'required'                          => $this->required() ? true : false,
507
-                'html_label_text'                   => $this->display_text(),
508
-                'required_validation_error_message' => $this->required_text(),
509
-            ),
510
-            $input_constructor_args
511
-        );
512
-        if (! $answer instanceof EE_Answer && $registration instanceof EE_Registration) {
513
-            $answer = EEM_Answer::instance()->get_registration_question_answer_object($registration, $this->ID());
514
-        }
515
-        // has this question been answered ?
516
-        if ($answer instanceof EE_Answer
517
-            && $answer->value() !== ''
518
-        ) {
519
-            // answer gets htmlspecialchars called on it, undo that please
520
-            // because the form input's display strategy may call esc_attr too
521
-            // which also does html special characters
522
-            $values_with_html_special_chars = $answer->value();
523
-            if (is_array($values_with_html_special_chars)) {
524
-                $default_value = array_map('htmlspecialchars_decode', $values_with_html_special_chars);
525
-            } else {
526
-                $default_value = htmlspecialchars_decode($values_with_html_special_chars);
527
-            }
528
-            $input_constructor_args['default'] = $default_value;
529
-        }
530
-        $max_max_for_question = EEM_Question::instance()->absolute_max_for_system_question($this->system_ID());
531
-        if (in_array(
532
-            $this->type(),
533
-            EEM_Question::instance()->questionTypesWithMaxLength(),
534
-            true
535
-        )) {
536
-            $input_constructor_args['validation_strategies'][] = new EE_Max_Length_Validation_Strategy(
537
-                null,
538
-                min($max_max_for_question, $this->max())
539
-            );
540
-        }
541
-        $input_constructor_args = apply_filters(
542
-            'FHEE__EE_SPCO_Reg_Step_Attendee_Information___generate_question_input__input_constructor_args',
543
-            $input_constructor_args,
544
-            $registration,
545
-            $this,
546
-            $answer
547
-        );
548
-
549
-        $result = null;
550
-        switch ($this->type()) {
551
-            // Text
552
-            case EEM_Question::QST_type_text:
553
-                $result = new EE_Text_Input($input_constructor_args);
554
-                break;
555
-            // Textarea
556
-            case EEM_Question::QST_type_textarea:
557
-                $result = new EE_Text_Area_Input($input_constructor_args);
558
-                break;
559
-            // Radio Buttons
560
-            case EEM_Question::QST_type_radio:
561
-                $result = new EE_Radio_Button_Input($this->options(), $input_constructor_args);
562
-                break;
563
-            // Dropdown
564
-            case EEM_Question::QST_type_dropdown:
565
-                $result = new EE_Select_Input($this->options(), $input_constructor_args);
566
-                break;
567
-            // State Dropdown
568
-            case EEM_Question::QST_type_state:
569
-                $state_options = apply_filters(
570
-                    'FHEE__EE_Question__generate_form_input__state_options',
571
-                    null,
572
-                    $this,
573
-                    $registration,
574
-                    $answer
575
-                );
576
-                $result = new EE_State_Select_Input($state_options, $input_constructor_args);
577
-                break;
578
-            // Country Dropdown
579
-            case EEM_Question::QST_type_country:
580
-                $country_options = apply_filters(
581
-                    'FHEE__EE_Question__generate_form_input__country_options',
582
-                    null,
583
-                    $this,
584
-                    $registration,
585
-                    $answer
586
-                );
587
-                $result = new EE_Country_Select_Input($country_options, $input_constructor_args);
588
-                break;
589
-            // Checkboxes
590
-            case EEM_Question::QST_type_checkbox:
591
-                $result = new EE_Checkbox_Multi_Input($this->options(), $input_constructor_args);
592
-                break;
593
-            // Date
594
-            case EEM_Question::QST_type_date:
595
-                $result = new EE_Datepicker_Input($input_constructor_args);
596
-                break;
597
-            case EEM_Question::QST_type_html_textarea:
598
-                $input_constructor_args['validation_strategies'][] = new EE_Simple_HTML_Validation_Strategy();
599
-                $result = new EE_Text_Area_Input($input_constructor_args);
600
-                $result->remove_validation_strategy('EE_Plaintext_Validation_Strategy');
601
-                break;
602
-            case EEM_Question::QST_type_email:
603
-                $result = new EE_Email_Input($input_constructor_args);
604
-                break;
605
-            case EEM_Question::QST_type_us_phone:
606
-                $result = new EE_Phone_Input($input_constructor_args);
607
-                break;
608
-            case EEM_Question::QST_type_int:
609
-                $result = new EE_Integer_Input($input_constructor_args);
610
-                break;
611
-            case EEM_Question::QST_type_decimal:
612
-                $result = new EE_Float_Input($input_constructor_args);
613
-                break;
614
-            case EEM_Question::QST_type_url:
615
-                $input_constructor_args['validation_strategies'][] = new EE_URL_Validation_Strategy();
616
-                $result = new EE_Text_Input($input_constructor_args);
617
-                break;
618
-            case EEM_Question::QST_type_year:
619
-                $result = new EE_Year_Input(
620
-                    $input_constructor_args,
621
-                    apply_filters(
622
-                        'FHEE__EE_SPCO_Reg_Step_Attendee_Information___generate_question_input__year_question__four_digit',
623
-                        true,
624
-                        $this
625
-                    ),
626
-                    apply_filters(
627
-                        'FHEE__EE_SPCO_Reg_Step_Attendee_Information___generate_question_input__year_question__early_range',
628
-                        100,
629
-                        $this
630
-                    ),
631
-                    apply_filters(
632
-                        'FHEE__EE_SPCO_Reg_Step_Attendee_Information___generate_question_input__year_question__end_range',
633
-                        100,
634
-                        $this
635
-                    )
636
-                );
637
-                break;
638
-            case EEM_Question::QST_type_multi_select:
639
-                $result = new EE_Select_Multiple_Input($this->options(), $input_constructor_args);
640
-                break;
641
-            // fallback
642
-            default:
643
-                $default_input = apply_filters(
644
-                    'FHEE__EE_SPCO_Reg_Step_Attendee_Information___generate_question_input__default',
645
-                    null,
646
-                    $this->type(),
647
-                    $this,
648
-                    $input_constructor_args
649
-                );
650
-                if (! $default_input) {
651
-                    $default_input = new EE_Text_Input($input_constructor_args);
652
-                }
653
-                $result = $default_input;
654
-        }
655
-        return apply_filters('FHEE__EE_Question__generate_form_input__return', $result, $registration, $this, $answer);
656
-    }
657
-
658
-
659
-    /**
660
-     * Returns whether or not this question type should have question option entries
661
-     *
662
-     * @return bool
663
-     */
664
-    public function should_have_question_options()
665
-    {
666
-        return in_array(
667
-            $this->type(),
668
-            $this->_model->question_types_with_options(),
669
-            true
670
-        );
671
-    }
15
+	/**
16
+	 *
17
+	 * @param array  $props_n_values          incoming values
18
+	 * @param string $timezone                incoming timezone (if not set the timezone set for the website will be
19
+	 *                                        used.)
20
+	 * @param array  $date_formats            incoming date_formats in an array where the first value is the
21
+	 *                                        date_format and the second value is the time format
22
+	 * @return EE_Question
23
+	 */
24
+	public static function new_instance($props_n_values = array(), $timezone = null, $date_formats = array())
25
+	{
26
+		$has_object = parent::_check_for_object($props_n_values, __CLASS__, $timezone, $date_formats);
27
+		return $has_object ? $has_object : new self($props_n_values, false, $timezone, $date_formats);
28
+	}
29
+
30
+
31
+	/**
32
+	 * @param array  $props_n_values  incoming values from the database
33
+	 * @param string $timezone        incoming timezone as set by the model.  If not set the timezone for
34
+	 *                                the website will be used.
35
+	 * @return EE_Question
36
+	 */
37
+	public static function new_instance_from_db($props_n_values = array(), $timezone = null)
38
+	{
39
+		return new self($props_n_values, true, $timezone);
40
+	}
41
+
42
+
43
+	/**
44
+	 *        Set    Question display text
45
+	 *
46
+	 * @access        public
47
+	 * @param string $QST_display_text
48
+	 */
49
+	public function set_display_text($QST_display_text = '')
50
+	{
51
+		$this->set('QST_display_text', $QST_display_text);
52
+	}
53
+
54
+
55
+	/**
56
+	 *        Set    Question admin text
57
+	 *
58
+	 * @access        public
59
+	 * @param        string $QST_admin_label
60
+	 */
61
+	public function set_admin_label($QST_admin_label = '')
62
+	{
63
+		$this->set('QST_admin_label', $QST_admin_label);
64
+	}
65
+
66
+
67
+	/**
68
+	 *        Set    system name
69
+	 *
70
+	 * @access        public
71
+	 * @param        mixed $QST_system
72
+	 */
73
+	public function set_system_ID($QST_system = '')
74
+	{
75
+		$this->set('QST_system', $QST_system);
76
+	}
77
+
78
+
79
+	/**
80
+	 *        Set    question's type
81
+	 *
82
+	 * @access        public
83
+	 * @param        string $QST_type
84
+	 */
85
+	public function set_question_type($QST_type = '')
86
+	{
87
+		$this->set('QST_type', $QST_type);
88
+	}
89
+
90
+
91
+	/**
92
+	 *        Sets whether this question must be answered when presented in a form
93
+	 *
94
+	 * @access        public
95
+	 * @param        bool $QST_required
96
+	 */
97
+	public function set_required($QST_required = false)
98
+	{
99
+		$this->set('QST_required', $QST_required);
100
+	}
101
+
102
+
103
+	/**
104
+	 *        Set    Question display text
105
+	 *
106
+	 * @access        public
107
+	 * @param        string $QST_required_text
108
+	 */
109
+	public function set_required_text($QST_required_text = '')
110
+	{
111
+		$this->set('QST_required_text', $QST_required_text);
112
+	}
113
+
114
+
115
+	/**
116
+	 *        Sets the order of this question when placed in a sequence of questions
117
+	 *
118
+	 * @access        public
119
+	 * @param        int $QST_order
120
+	 */
121
+	public function set_order($QST_order = 0)
122
+	{
123
+		$this->set('QST_order', $QST_order);
124
+	}
125
+
126
+
127
+	/**
128
+	 *        Sets whether the question is admin-only
129
+	 *
130
+	 * @access        public
131
+	 * @param        bool $QST_admin_only
132
+	 */
133
+	public function set_admin_only($QST_admin_only = false)
134
+	{
135
+		$this->set('QST_admin_only', $QST_admin_only);
136
+	}
137
+
138
+
139
+	/**
140
+	 *        Sets the wordpress user ID on the question
141
+	 *
142
+	 * @access        public
143
+	 * @param        int $QST_wp_user
144
+	 */
145
+	public function set_wp_user($QST_wp_user = 1)
146
+	{
147
+		$this->set('QST_wp_user', $QST_wp_user);
148
+	}
149
+
150
+
151
+	/**
152
+	 *        Sets whether the question has been deleted
153
+	 *        (we use this boolean instead of actually
154
+	 *        deleting it because when users delete this question
155
+	 *        they really want to remove the question from future
156
+	 *        forms, BUT keep their old answers which depend
157
+	 *        on this record actually existing.
158
+	 *
159
+	 * @access        public
160
+	 * @param    bool $QST_deleted
161
+	 */
162
+	public function set_deleted($QST_deleted = false)
163
+	{
164
+		$this->set('QST_deleted', $QST_deleted);
165
+	}
166
+
167
+
168
+	/**
169
+	 * returns the text for displaying the question to users
170
+	 *
171
+	 * @access public
172
+	 * @return string
173
+	 */
174
+	public function display_text()
175
+	{
176
+		return $this->get('QST_display_text');
177
+	}
178
+
179
+
180
+	/**
181
+	 * returns the text for the administrative label
182
+	 *
183
+	 * @access public
184
+	 * @return string
185
+	 */
186
+	public function admin_label()
187
+	{
188
+		return $this->get('QST_admin_label');
189
+	}
190
+
191
+
192
+	/**
193
+	 * returns the attendee column name for this question
194
+	 *
195
+	 * @access public
196
+	 * @return string
197
+	 */
198
+	public function system_ID()
199
+	{
200
+		return $this->get('QST_system');
201
+	}
202
+
203
+
204
+	/**
205
+	 * returns either a string of 'text', 'textfield', etc.
206
+	 *
207
+	 * @access public
208
+	 * @return boolean
209
+	 */
210
+	public function required()
211
+	{
212
+		return $this->get('QST_required');
213
+	}
214
+
215
+
216
+	/**
217
+	 * returns the text which should be displayed when a user
218
+	 * doesn't answer this question in a form
219
+	 *
220
+	 * @access public
221
+	 * @return string
222
+	 */
223
+	public function required_text()
224
+	{
225
+		return $this->get('QST_required_text');
226
+	}
227
+
228
+
229
+	/**
230
+	 * returns the type of this question
231
+	 *
232
+	 * @access public
233
+	 * @return string
234
+	 */
235
+	public function type()
236
+	{
237
+		return $this->get('QST_type');
238
+	}
239
+
240
+
241
+	/**
242
+	 * returns an integer showing where this question should
243
+	 * be placed in a sequence of questions
244
+	 *
245
+	 * @access public
246
+	 * @return int
247
+	 */
248
+	public function order()
249
+	{
250
+		return $this->get('QST_order');
251
+	}
252
+
253
+
254
+	/**
255
+	 * returns whether this question should only appears to admins,
256
+	 * or to everyone
257
+	 *
258
+	 * @access public
259
+	 * @return boolean
260
+	 */
261
+	public function admin_only()
262
+	{
263
+		return $this->get('QST_admin_only');
264
+	}
265
+
266
+
267
+	/**
268
+	 * returns the id the wordpress user who created this question
269
+	 *
270
+	 * @access public
271
+	 * @return int
272
+	 */
273
+	public function wp_user()
274
+	{
275
+		return $this->get('QST_wp_user');
276
+	}
277
+
278
+
279
+	/**
280
+	 * returns whether this question has been marked as 'deleted'
281
+	 *
282
+	 * @access public
283
+	 * @return boolean
284
+	 */
285
+	public function deleted()
286
+	{
287
+		return $this->get('QST_deleted');
288
+	}
289
+
290
+
291
+	/**
292
+	 * Gets an array of related EE_Answer  to this EE_Question
293
+	 *
294
+	 * @return EE_Answer[]
295
+	 */
296
+	public function answers()
297
+	{
298
+		return $this->get_many_related('Answer');
299
+	}
300
+
301
+
302
+	/**
303
+	 * Boolean check for if there are answers on this question in th db
304
+	 *
305
+	 * @return boolean true = has answers, false = no answers.
306
+	 */
307
+	public function has_answers()
308
+	{
309
+		return $this->count_related('Answer') > 0 ? true : false;
310
+	}
311
+
312
+
313
+	/**
314
+	 * gets an array of EE_Question_Group which relate to this question
315
+	 *
316
+	 * @return EE_Question_Group[]
317
+	 */
318
+	public function question_groups()
319
+	{
320
+		return $this->get_many_related('Question_Group');
321
+	}
322
+
323
+
324
+	/**
325
+	 * Returns all the options for this question. By default, it returns only the not-yet-deleted ones.
326
+	 *
327
+	 * @param boolean      $notDeletedOptionsOnly            1
328
+	 *                                                       whether to return ALL options, or only the ones which have
329
+	 *                                                       not yet been deleleted
330
+	 * @param string|array $selected_value_to_always_include , when retrieving options to an ANSWERED question,
331
+	 *                                                       we want to usually only show non-deleted options AND the
332
+	 *                                                       value that was selected for the answer, whether it was
333
+	 *                                                       trashed or not.
334
+	 * @return EE_Question_Option[]
335
+	 */
336
+	public function options($notDeletedOptionsOnly = true, $selected_value_to_always_include = null)
337
+	{
338
+		if (! $this->ID()) {
339
+			return array();
340
+		}
341
+		$query_params = array();
342
+		if ($selected_value_to_always_include) {
343
+			if (is_array($selected_value_to_always_include)) {
344
+				$query_params[0]['OR*options-query']['QSO_value'] = array('IN', $selected_value_to_always_include);
345
+			} else {
346
+				$query_params[0]['OR*options-query']['QSO_value'] = $selected_value_to_always_include;
347
+			}
348
+		}
349
+		if ($notDeletedOptionsOnly) {
350
+			$query_params[0]['OR*options-query']['QSO_deleted'] = false;
351
+		}
352
+		// order by QSO_order
353
+		$query_params['order_by'] = array('QSO_order' => 'ASC');
354
+		return $this->get_many_related('Question_Option', $query_params);
355
+	}
356
+
357
+
358
+	/**
359
+	 * returns an array of EE_Question_Options which relate to this question
360
+	 *
361
+	 * @return \EE_Question_Option[]
362
+	 */
363
+	public function temp_options()
364
+	{
365
+		return $this->_model_relations['Question_Option'];
366
+	}
367
+
368
+
369
+	/**
370
+	 * Adds an option for this question. Note: if the option were previously associated with a different
371
+	 * Question, that relationship will be overwritten.
372
+	 *
373
+	 * @param EE_Question_Option $option
374
+	 * @return boolean success
375
+	 */
376
+	public function add_option(EE_Question_Option $option)
377
+	{
378
+		return $this->_add_relation_to($option, 'Question_Option');
379
+	}
380
+
381
+
382
+	/**
383
+	 * Adds an option directly to this question without saving to the db
384
+	 *
385
+	 * @param EE_Question_Option $option
386
+	 * @return boolean success
387
+	 */
388
+	public function add_temp_option(EE_Question_Option $option)
389
+	{
390
+		$this->_model_relations['Question_Option'][] = $option;
391
+		return true;
392
+	}
393
+
394
+
395
+	/**
396
+	 * Marks the option as deleted.
397
+	 *
398
+	 * @param EE_Question_Option $option
399
+	 * @return boolean success
400
+	 */
401
+	public function remove_option(EE_Question_Option $option)
402
+	{
403
+		return $this->_remove_relation_to($option, 'Question_Option');
404
+	}
405
+
406
+
407
+	/**
408
+	 * @return bool
409
+	 */
410
+	public function is_system_question()
411
+	{
412
+		$system_ID = $this->get('QST_system');
413
+		return ! empty($system_ID) ? true : false;
414
+	}
415
+
416
+
417
+	/**
418
+	 * The purpose of this method is set the question order this question order to be the max out of all questions
419
+	 *
420
+	 * @access public
421
+	 * @return void
422
+	 */
423
+	public function set_order_to_latest()
424
+	{
425
+		$latest_order = $this->get_model()->get_latest_question_order();
426
+		$latest_order++;
427
+		$this->set('QST_order', $latest_order);
428
+	}
429
+
430
+
431
+	/**
432
+	 * Retrieves the list of allowed question types from the model.
433
+	 *
434
+	 * @return string[]
435
+	 */
436
+	private function _allowed_question_types()
437
+	{
438
+		$questionModel = $this->get_model();
439
+		/* @var $questionModel EEM_Question */
440
+		return $questionModel->allowed_question_types();
441
+	}
442
+
443
+	/**
444
+	 * Duplicates this question and its question options
445
+	 *
446
+	 * @return \EE_Question
447
+	 */
448
+	public function duplicate($options = array())
449
+	{
450
+		$new_question = clone $this;
451
+		$new_question->set('QST_ID', null);
452
+		$new_question->set_display_text(sprintf(__('%s **Duplicate**', 'event_espresso'), $this->display_text()));
453
+		$new_question->set_admin_label(sprintf(__('%s **Duplicate**', 'event_espresso'), $this->admin_label()));
454
+		$new_question->set_system_ID(null);
455
+		$new_question->set_wp_user(get_current_user_id());
456
+		// if we're duplicating a trashed question, assume we don't want the new one to be trashed
457
+		$new_question->set_deleted(false);
458
+		$success = $new_question->save();
459
+		if ($success) {
460
+			// we don't totally want to duplicate the question options, because we want them to be for the NEW question
461
+			foreach ($this->options() as $question_option) {
462
+				$question_option->duplicate(array('QST_ID' => $new_question->ID()));
463
+			}
464
+			return $new_question;
465
+		} else {
466
+			return null;
467
+		}
468
+	}
469
+
470
+	/**
471
+	 * Returns the question's maximum allowed response size
472
+	 *
473
+	 * @return int|float
474
+	 */
475
+	public function max()
476
+	{
477
+		return $this->get('QST_max');
478
+	}
479
+
480
+	/**
481
+	 * Sets the question's maximum allowed response size
482
+	 *
483
+	 * @param int|float $new_max
484
+	 * @return void
485
+	 */
486
+	public function set_max($new_max)
487
+	{
488
+		$this->set('QST_max', $new_max);
489
+	}
490
+
491
+
492
+	/**
493
+	 * Creates a form input from this question which can be used in HTML forms
494
+	 *
495
+	 * @param EE_Registration $registration
496
+	 * @param EE_Answer       $answer
497
+	 * @param array           $input_constructor_args
498
+	 * @return EE_Form_Input_Base
499
+	 */
500
+	public function generate_form_input($registration = null, $answer = null, $input_constructor_args = array())
501
+	{
502
+		$identifier = $this->is_system_question() ? $this->system_ID() : $this->ID();
503
+
504
+		$input_constructor_args = array_merge(
505
+			array(
506
+				'required'                          => $this->required() ? true : false,
507
+				'html_label_text'                   => $this->display_text(),
508
+				'required_validation_error_message' => $this->required_text(),
509
+			),
510
+			$input_constructor_args
511
+		);
512
+		if (! $answer instanceof EE_Answer && $registration instanceof EE_Registration) {
513
+			$answer = EEM_Answer::instance()->get_registration_question_answer_object($registration, $this->ID());
514
+		}
515
+		// has this question been answered ?
516
+		if ($answer instanceof EE_Answer
517
+			&& $answer->value() !== ''
518
+		) {
519
+			// answer gets htmlspecialchars called on it, undo that please
520
+			// because the form input's display strategy may call esc_attr too
521
+			// which also does html special characters
522
+			$values_with_html_special_chars = $answer->value();
523
+			if (is_array($values_with_html_special_chars)) {
524
+				$default_value = array_map('htmlspecialchars_decode', $values_with_html_special_chars);
525
+			} else {
526
+				$default_value = htmlspecialchars_decode($values_with_html_special_chars);
527
+			}
528
+			$input_constructor_args['default'] = $default_value;
529
+		}
530
+		$max_max_for_question = EEM_Question::instance()->absolute_max_for_system_question($this->system_ID());
531
+		if (in_array(
532
+			$this->type(),
533
+			EEM_Question::instance()->questionTypesWithMaxLength(),
534
+			true
535
+		)) {
536
+			$input_constructor_args['validation_strategies'][] = new EE_Max_Length_Validation_Strategy(
537
+				null,
538
+				min($max_max_for_question, $this->max())
539
+			);
540
+		}
541
+		$input_constructor_args = apply_filters(
542
+			'FHEE__EE_SPCO_Reg_Step_Attendee_Information___generate_question_input__input_constructor_args',
543
+			$input_constructor_args,
544
+			$registration,
545
+			$this,
546
+			$answer
547
+		);
548
+
549
+		$result = null;
550
+		switch ($this->type()) {
551
+			// Text
552
+			case EEM_Question::QST_type_text:
553
+				$result = new EE_Text_Input($input_constructor_args);
554
+				break;
555
+			// Textarea
556
+			case EEM_Question::QST_type_textarea:
557
+				$result = new EE_Text_Area_Input($input_constructor_args);
558
+				break;
559
+			// Radio Buttons
560
+			case EEM_Question::QST_type_radio:
561
+				$result = new EE_Radio_Button_Input($this->options(), $input_constructor_args);
562
+				break;
563
+			// Dropdown
564
+			case EEM_Question::QST_type_dropdown:
565
+				$result = new EE_Select_Input($this->options(), $input_constructor_args);
566
+				break;
567
+			// State Dropdown
568
+			case EEM_Question::QST_type_state:
569
+				$state_options = apply_filters(
570
+					'FHEE__EE_Question__generate_form_input__state_options',
571
+					null,
572
+					$this,
573
+					$registration,
574
+					$answer
575
+				);
576
+				$result = new EE_State_Select_Input($state_options, $input_constructor_args);
577
+				break;
578
+			// Country Dropdown
579
+			case EEM_Question::QST_type_country:
580
+				$country_options = apply_filters(
581
+					'FHEE__EE_Question__generate_form_input__country_options',
582
+					null,
583
+					$this,
584
+					$registration,
585
+					$answer
586
+				);
587
+				$result = new EE_Country_Select_Input($country_options, $input_constructor_args);
588
+				break;
589
+			// Checkboxes
590
+			case EEM_Question::QST_type_checkbox:
591
+				$result = new EE_Checkbox_Multi_Input($this->options(), $input_constructor_args);
592
+				break;
593
+			// Date
594
+			case EEM_Question::QST_type_date:
595
+				$result = new EE_Datepicker_Input($input_constructor_args);
596
+				break;
597
+			case EEM_Question::QST_type_html_textarea:
598
+				$input_constructor_args['validation_strategies'][] = new EE_Simple_HTML_Validation_Strategy();
599
+				$result = new EE_Text_Area_Input($input_constructor_args);
600
+				$result->remove_validation_strategy('EE_Plaintext_Validation_Strategy');
601
+				break;
602
+			case EEM_Question::QST_type_email:
603
+				$result = new EE_Email_Input($input_constructor_args);
604
+				break;
605
+			case EEM_Question::QST_type_us_phone:
606
+				$result = new EE_Phone_Input($input_constructor_args);
607
+				break;
608
+			case EEM_Question::QST_type_int:
609
+				$result = new EE_Integer_Input($input_constructor_args);
610
+				break;
611
+			case EEM_Question::QST_type_decimal:
612
+				$result = new EE_Float_Input($input_constructor_args);
613
+				break;
614
+			case EEM_Question::QST_type_url:
615
+				$input_constructor_args['validation_strategies'][] = new EE_URL_Validation_Strategy();
616
+				$result = new EE_Text_Input($input_constructor_args);
617
+				break;
618
+			case EEM_Question::QST_type_year:
619
+				$result = new EE_Year_Input(
620
+					$input_constructor_args,
621
+					apply_filters(
622
+						'FHEE__EE_SPCO_Reg_Step_Attendee_Information___generate_question_input__year_question__four_digit',
623
+						true,
624
+						$this
625
+					),
626
+					apply_filters(
627
+						'FHEE__EE_SPCO_Reg_Step_Attendee_Information___generate_question_input__year_question__early_range',
628
+						100,
629
+						$this
630
+					),
631
+					apply_filters(
632
+						'FHEE__EE_SPCO_Reg_Step_Attendee_Information___generate_question_input__year_question__end_range',
633
+						100,
634
+						$this
635
+					)
636
+				);
637
+				break;
638
+			case EEM_Question::QST_type_multi_select:
639
+				$result = new EE_Select_Multiple_Input($this->options(), $input_constructor_args);
640
+				break;
641
+			// fallback
642
+			default:
643
+				$default_input = apply_filters(
644
+					'FHEE__EE_SPCO_Reg_Step_Attendee_Information___generate_question_input__default',
645
+					null,
646
+					$this->type(),
647
+					$this,
648
+					$input_constructor_args
649
+				);
650
+				if (! $default_input) {
651
+					$default_input = new EE_Text_Input($input_constructor_args);
652
+				}
653
+				$result = $default_input;
654
+		}
655
+		return apply_filters('FHEE__EE_Question__generate_form_input__return', $result, $registration, $this, $answer);
656
+	}
657
+
658
+
659
+	/**
660
+	 * Returns whether or not this question type should have question option entries
661
+	 *
662
+	 * @return bool
663
+	 */
664
+	public function should_have_question_options()
665
+	{
666
+		return in_array(
667
+			$this->type(),
668
+			$this->_model->question_types_with_options(),
669
+			true
670
+		);
671
+	}
672 672
 }
Please login to merge, or discard this patch.
Spacing   +3 added lines, -3 removed lines patch added patch discarded remove patch
@@ -335,7 +335,7 @@  discard block
 block discarded – undo
335 335
      */
336 336
     public function options($notDeletedOptionsOnly = true, $selected_value_to_always_include = null)
337 337
     {
338
-        if (! $this->ID()) {
338
+        if ( ! $this->ID()) {
339 339
             return array();
340 340
         }
341 341
         $query_params = array();
@@ -509,7 +509,7 @@  discard block
 block discarded – undo
509 509
             ),
510 510
             $input_constructor_args
511 511
         );
512
-        if (! $answer instanceof EE_Answer && $registration instanceof EE_Registration) {
512
+        if ( ! $answer instanceof EE_Answer && $registration instanceof EE_Registration) {
513 513
             $answer = EEM_Answer::instance()->get_registration_question_answer_object($registration, $this->ID());
514 514
         }
515 515
         // has this question been answered ?
@@ -647,7 +647,7 @@  discard block
 block discarded – undo
647 647
                     $this,
648 648
                     $input_constructor_args
649 649
                 );
650
-                if (! $default_input) {
650
+                if ( ! $default_input) {
651 651
                     $default_input = new EE_Text_Input($input_constructor_args);
652 652
                 }
653 653
                 $result = $default_input;
Please login to merge, or discard this patch.
core/db_classes/EE_Question_Form_Input.class.php 3 patches
Doc Comments   +5 added lines, -5 removed lines patch added patch discarded remove patch
@@ -241,7 +241,7 @@  discard block
 block discarded – undo
241 241
      *        generate_question_form_inputs_for_object
242 242
      *
243 243
      * @access    protected
244
-     * @param bool|object $object $object
244
+     * @param EE_Base_Class|null $object $object
245 245
      * @param    array    $input_types
246 246
      * @return        array
247 247
      */
@@ -354,7 +354,7 @@  discard block
 block discarded – undo
354 354
      *
355 355
      * @access public
356 356
      * @param \EE_Question_Option $QSO EE_Question_Option
357
-     * @return boolean
357
+     * @return boolean|null
358 358
      */
359 359
     public function add_temp_option(EE_Question_Option $QSO)
360 360
     {
@@ -367,8 +367,8 @@  discard block
 block discarded – undo
367 367
      *
368 368
      * @access public
369 369
      * @param    string $property
370
-     * @param    mixed  $value
371
-     * @return mixed
370
+     * @param    boolean  $value
371
+     * @return boolean|null
372 372
      */
373 373
     public function set($property = null, $value = null)
374 374
     {
@@ -416,7 +416,7 @@  discard block
 block discarded – undo
416 416
      *    get_meta
417 417
      *
418 418
      * @access public
419
-     * @param mixed $key
419
+     * @param string $key
420 420
      * @return mixed
421 421
      */
422 422
     public function get_meta($key = false)
Please login to merge, or discard this patch.
Indentation   +409 added lines, -409 removed lines patch added patch discarded remove patch
@@ -14,413 +14,413 @@
 block discarded – undo
14 14
 class EE_Question_Form_Input
15 15
 {
16 16
 
17
-    /**
18
-     *    EE_Question object
19
-     *
20
-     * @access private
21
-     * @var object
22
-     */
23
-    private $_QST = null;
24
-
25
-    /**
26
-     *    EE_Answer object
27
-     *
28
-     * @access private
29
-     * @var object
30
-     */
31
-    private $_ANS = null;
32
-
33
-    /**
34
-     *    $_QST_meta
35
-     * @access private
36
-     * @var array
37
-     */
38
-    private $_QST_meta = array();
39
-
40
-    /**
41
-     *    $QST_input_name
42
-     * @access private
43
-     * @var string
44
-     */
45
-    private $QST_input_name = '';
46
-
47
-    /**
48
-     *    $QST_input_id
49
-     * @access private
50
-     * @var string
51
-     */
52
-    private $QST_input_id = '';
53
-
54
-    /**
55
-     *    $QST_input_class
56
-     * @access private
57
-     * @var string
58
-     */
59
-    private $QST_input_class = '';
60
-
61
-
62
-    /**
63
-     * constructor for questions
64
-     *
65
-     * @param \EE_Question $QST EE_Question object
66
-     * @param \EE_Answer   $ANS EE_Answer object
67
-     * @param array        $q_meta
68
-     * @access public
69
-     * @return \EE_Question_Form_Input
70
-     */
71
-    public function __construct(EE_Question $QST = null, EE_Answer $ANS = null, $q_meta = array())
72
-    {
73
-        if (empty($QST) || empty($ANS)) {
74
-            EE_Error::add_error(
75
-                __('An error occurred. A valid EE_Question or EE_Answer object was not received.', 'event_espresso'),
76
-                __FILE__,
77
-                __FUNCTION__,
78
-                __LINE__
79
-            );
80
-            return null;
81
-        }
82
-        $this->_QST = $QST;
83
-        $this->_ANS = $ANS;
84
-        $this->set_question_form_input_meta($q_meta);
85
-        $this->set_question_form_input_init();
86
-    }
87
-
88
-
89
-    /**
90
-     * sets meta data for the question form input
91
-     *
92
-     * @access public
93
-     * @param array $q_meta
94
-     * @return void
95
-     */
96
-    public function set_question_form_input_meta($q_meta = array())
97
-    {
98
-        $default_q_meta = array(
99
-            'att_nmbr'       => 1,
100
-            'ticket_id'      => '',
101
-            'date'           => '',
102
-            'time'           => '',
103
-            'input_name'     => '',
104
-            'input_id'       => '',
105
-            'input_class'    => '',
106
-            'input_prefix'   => 'qstn',
107
-            'append_qstn_id' => true,
108
-            'htmlentities'   => true,
109
-            'allow_null'     => false,
110
-        );
111
-        $this->_QST_meta = array_merge($default_q_meta, $q_meta);
112
-    }
113
-
114
-
115
-    /**
116
-     * set_question_form_input_init
117
-     *
118
-     * @access public
119
-     * @return void
120
-     */
121
-    public function set_question_form_input_init()
122
-    {
123
-        $qstn_id = $this->_QST->system_ID() ? $this->_QST->system_ID() : $this->_QST->ID();
124
-        $this->_set_input_name($qstn_id);
125
-        $this->_set_input_id($qstn_id);
126
-        $this->_set_input_class($qstn_id);
127
-        $this->set_question_form_input_answer($qstn_id);
128
-    }
129
-
130
-
131
-    /**
132
-     * set_input_name
133
-     *
134
-     * @access private
135
-     * @param $qstn_id
136
-     * @return void
137
-     */
138
-    private function _set_input_name($qstn_id)
139
-    {
140
-        if (! empty($qstn_id)) {
141
-            $ANS_ID = $this->get('ANS_ID');
142
-            $qstn_id = ! empty($ANS_ID) ? '[' . $qstn_id . '][' . $ANS_ID . ']' : '[' . $qstn_id . ']';
143
-        }
144
-        $this->QST_input_name = $this->_QST_meta['append_qstn_id'] && ! empty($qstn_id)
145
-            ? $this->_QST_meta['input_prefix'] . $this->_QST_meta['input_name'] . $qstn_id
146
-            : $this->_QST_meta['input_prefix'] . $this->_QST_meta['input_name'];
147
-    }
148
-
149
-
150
-    /**
151
-     * get property values for question form input
152
-     *
153
-     * @access public
154
-     * @param    string $property
155
-     * @return mixed
156
-     */
157
-    public function get($property = null)
158
-    {
159
-        if (! empty($property)) {
160
-            if (EEM_Question::instance()->has_field($property)) {
161
-                return $this->_QST->get($property);
162
-            } elseif (EEM_Answer::instance()->has_field($property)) {
163
-                return $this->_ANS->get($property);
164
-            } elseif ($this->_question_form_input_property_exists(__CLASS__, $property)) {
165
-                return $this->{$property};
166
-            }
167
-        }
168
-        return null;
169
-    }
170
-
171
-
172
-    /**
173
-     *    _question_form_input_property_exists
174
-     *
175
-     * @access private
176
-     * @param    string $classname
177
-     * @param    string $property
178
-     * @return boolean
179
-     */
180
-    private function _question_form_input_property_exists($classname, $property)
181
-    {
182
-        // first try regular property exists method which works as expected in PHP 5.3+
183
-        $prop = EEH_Class_Tools::has_property($classname, $property);
184
-        if (! $prop) {
185
-            // use reflection for < PHP 5.3 as a double check when property is not found, possible due to access restriction
186
-            $reflector = new ReflectionClass($classname);
187
-            $prop = $reflector->hasProperty($property);
188
-        }
189
-        return $prop;
190
-    }
191
-
192
-
193
-    /**
194
-     * set_input_id
195
-     *
196
-     * @access private
197
-     * @param $qstn_id
198
-     * @return void
199
-     */
200
-    private function _set_input_id($qstn_id)
201
-    {
202
-        $input_id = isset($this->_QST_meta['input_id']) && ! empty($this->_QST_meta['input_id'])
203
-            ? $this->_QST_meta['input_id'] : sanitize_key(strip_tags($this->_QST->get('QST_display_text')));
204
-        $this->QST_input_id = $this->_QST_meta['append_qstn_id'] && ! empty($qstn_id) ? $input_id . '-' . $qstn_id
205
-            : $input_id;
206
-    }
207
-
208
-
209
-    /**
210
-     * set_input_class
211
-     *
212
-     * @access private
213
-     * @return void
214
-     */
215
-    private function _set_input_class()
216
-    {
217
-        $this->QST_input_class = isset($this->_QST_meta['input_class']) ? $this->_QST_meta['input_class'] : '';
218
-    }
219
-
220
-
221
-    /**
222
-     * set_question_form_input_answer
223
-     *
224
-     * @access public
225
-     * @param mixed    int | string    $qstn_id
226
-     * @return void
227
-     */
228
-    public function set_question_form_input_answer($qstn_id)
229
-    {
230
-        // check for answer in $_REQUEST in case we are reprocessing a form after an error
231
-        if (isset($this->_QST_meta['EVT_ID']) && isset($this->_QST_meta['att_nmbr']) && isset($this->_QST_meta['date']) && isset($this->_QST_meta['time']) && isset($this->_QST_meta['price_id'])) {
232
-            if (isset($_REQUEST['qstn'][ $this->_QST_meta['EVT_ID'] ][ $this->_QST_meta['att_nmbr'] ][ $this->_QST_meta['date'] ][ $this->_QST_meta['time'] ][ $this->_QST_meta['price_id'] ][ $qstn_id ])) {
233
-                $answer = $_REQUEST['qstn'][ $this->_QST_meta['EVT_ID'] ][ $this->_QST_meta['att_nmbr'] ][ $this->_QST_meta['date'] ][ $this->_QST_meta['time'] ][ $this->_QST_meta['price_id'] ][ $qstn_id ];
234
-                $this->_ANS->set('ANS_value', $answer);
235
-            }
236
-        }
237
-    }
238
-
239
-
240
-    /**
241
-     *        generate_question_form_inputs_for_object
242
-     *
243
-     * @access    protected
244
-     * @param bool|object $object $object
245
-     * @param    array    $input_types
246
-     * @return        array
247
-     */
248
-    public static function generate_question_form_inputs_for_object($object = false, $input_types = array())
249
-    {
250
-        if (! is_object($object)) {
251
-            return false;
252
-        }
253
-        $inputs = array();
254
-        $fields = $object->get_model()->field_settings(false);
255
-        // $pk = $object->ID(); <<< NO!
256
-        // EEH_Debug_Tools::printr( $object, get_class( $object ) . '<br /><span style="font-size:10px;font-weight:normal;">' . __FILE__ . '<br />line no: ' . __LINE__ . '</span>', 'auto' );
257
-        // EEH_Debug_Tools::printr( $fields, '$fields  <br /><span style="font-size:10px;font-weight:normal;">' . __FILE__ . '<br />line no: ' . __LINE__ . '</span>', 'auto' );
258
-        // EEH_Debug_Tools::printr( $input_types, '$input_types  <br /><span style="font-size:10px;font-weight:normal;">' . __FILE__ . '<br />line no: ' . __LINE__ . '</span>', 'auto' );
259
-        foreach ($fields as $field_ID => $field) {
260
-            if ($field instanceof EE_Model_Field_Base) {
261
-                // echo '<h4>$field_ID : ' . $field_ID . '  <br /><span style="font-size:10px;font-weight:normal;">' . __FILE__ . '<br />line no: ' . __LINE__ . '</span></h4>';
262
-                // EEH_Debug_Tools::printr( $field, '$field  <br /><span style="font-size:10px;font-weight:normal;">' . __FILE__ . '<br />line no: ' . __LINE__ . '</span>', 'auto' );
263
-                if (isset($input_types[ $field_ID ])) {
264
-                    // get saved value for field
265
-                    $value = $object->get($field_ID);
266
-                    // echo '<h4>$value : ' . $value . '  <br /><span style="font-size:10px;font-weight:normal;">' . __FILE__ . '<br />line no: ' . __LINE__ . '</span></h4>';
267
-                    // if no saved value, then use default
268
-                    $value = $value !== null ? $value : $field->get_default_value();
269
-                    // if ( $field_ID == 'CNT_active' )
270
-                    // echo '<h4>$value : ' . $value . '  <br /><span style="font-size:10px;font-weight:normal;">' . __FILE__ . '<br />line no: ' . __LINE__ . '</span></h4>';
271
-                    // determine question type
272
-                    $type = isset($input_types[ $field_ID ]) ? $input_types[ $field_ID ]['type'] : 'TEXT';
273
-                    // input name
274
-                    $input_name = isset($input_types[ $field_ID ]) && isset($input_types[ $field_ID ]['input_name'])
275
-                        ? $input_types[ $field_ID ]['input_name'] . '[' . $field_ID . ']' : $field_ID;
276
-                    // css class for input
277
-                    $class = isset($input_types[ $field_ID ]['class']) && ! empty($input_types[ $field_ID ]['class'])
278
-                        ? ' ' . $input_types[ $field_ID ]['class'] : '';
279
-                    // whether to apply htmlentities to answer
280
-                    $htmlentities = isset($input_types[ $field_ID ]['htmlentities'])
281
-                        ? $input_types[ $field_ID ]['htmlentities'] : true;
282
-                    // whether to apply htmlentities to answer
283
-                    $label_b4 = isset($input_types[ $field_ID ]['label_b4']) ? $input_types[ $field_ID ]['label_b4']
284
-                        : false;
285
-                    // whether to apply htmlentities to answer
286
-                    $use_desc_4_label = isset($input_types[ $field_ID ]['use_desc_4_label'])
287
-                        ? $input_types[ $field_ID ]['use_desc_4_label'] : false;
288
-
289
-                    // create EE_Question_Form_Input object
290
-                    $QFI = new EE_Question_Form_Input(
291
-                        EE_Question::new_instance(
292
-                            array(
293
-                                'QST_ID'           => 0,
294
-                                'QST_display_text' => $field->get_nicename(),
295
-                                'QST_type'         => $type,
296
-                            )
297
-                        ),
298
-                        EE_Answer::new_instance(
299
-                            array(
300
-                                'ANS_ID'    => 0,
301
-                                'QST_ID'    => 0,
302
-                                'REG_ID'    => 0,
303
-                                'ANS_value' => $value,
304
-                            )
305
-                        ),
306
-                        array(
307
-                            'input_id'         => $field_ID . '-' . $object->ID(),
308
-                            'input_name'       => $input_name,
309
-                            'input_class'      => $field_ID . $class,
310
-                            'input_prefix'     => '',
311
-                            'append_qstn_id'   => false,
312
-                            'htmlentities'     => $htmlentities,
313
-                            'label_b4'         => $label_b4,
314
-                            'use_desc_4_label' => $use_desc_4_label,
315
-                        )
316
-                    );
317
-                    // does question type have options ?
318
-                    if (in_array($type, array('DROPDOWN', 'RADIO_BTN', 'CHECKBOX'))
319
-                        && isset($input_types[ $field_ID ])
320
-                        && isset($input_types[ $field_ID ]['options'])
321
-                    ) {
322
-                        foreach ($input_types[ $field_ID ]['options'] as $option) {
323
-                            $option = stripslashes_deep($option);
324
-                            $option_id = ! empty($option['id']) ? $option['id'] : 0;
325
-                            $QSO = EE_Question_Option::new_instance(
326
-                                array(
327
-                                    'QSO_value'   => (string) $option_id,
328
-                                    'QSO_desc'    => $option['text'],
329
-                                    'QSO_deleted' => false,
330
-                                )
331
-                            );
332
-                            // all QST (and ANS) properties can be accessed indirectly thru QFI
333
-                            $QFI->add_temp_option($QSO);
334
-                        }
335
-                    }
336
-                    // we don't want ppl manually changing primary keys cuz that would just lead to total craziness man
337
-                    if ($field_ID == $object->get_model()->primary_key_name()) {
338
-                        $QFI->set('QST_disabled', true);
339
-                    }
340
-                    // EEH_Debug_Tools::printr( $QFI, '$QFI  <br /><span style="font-size:10px;font-weight:normal;">' . __FILE__ . '<br />line no: ' . __LINE__ . '</span>', 'auto' );
341
-                    $inputs[ $field_ID ] = $QFI;
342
-                    // if ( $field_ID == 'CNT_active' ) {
343
-                    // EEH_Debug_Tools::printr( $QFI, '$QFI  <br /><span style="font-size:10px;font-weight:normal;">' . __FILE__ . '<br />line no: ' . __LINE__ . '</span>', 'auto' );
344
-                    // }
345
-                }
346
-            }
347
-        }
348
-        return $inputs;
349
-    }
350
-
351
-
352
-    /**
353
-     *    add_temp_option
354
-     *
355
-     * @access public
356
-     * @param \EE_Question_Option $QSO EE_Question_Option
357
-     * @return boolean
358
-     */
359
-    public function add_temp_option(EE_Question_Option $QSO)
360
-    {
361
-        $this->_QST->add_temp_option($QSO);
362
-    }
363
-
364
-
365
-    /**
366
-     * set property values for question form input
367
-     *
368
-     * @access public
369
-     * @param    string $property
370
-     * @param    mixed  $value
371
-     * @return mixed
372
-     */
373
-    public function set($property = null, $value = null)
374
-    {
375
-        if (! empty($property)) {
376
-            if (EEM_Question::instance()->has_field($property)) {
377
-                $this->_QST->set($property, $value);
378
-            } elseif (EEM_Answer::instance()->has_field($property)) {
379
-                $this->_ANS->set($property, $value);
380
-            } elseif ($this->_question_form_input_property_exists(__CLASS__, $property)) {
381
-                echo "<hr>$property is a prop of QFI";
382
-                $this->{$property} = $value;
383
-                return true;
384
-            }
385
-        }
386
-        return null;
387
-    }
388
-
389
-
390
-    /**
391
-     *    _question_form_input_property_exists
392
-     *
393
-     * @access public
394
-     * @param boolean      $notDeletedOptionsOnly            1
395
-     *                                                       whether to return ALL options, or only the ones which have
396
-     *                                                       not yet been deleted
397
-     * @param string|array $selected_value_to_always_include , when retrieving options to an ANSWERED question,
398
-     *                                                       we want to usually only show non-deleted options AND the
399
-     *                                                       value that was selected for the answer, whether it was
400
-     *                                                       trashed or not.
401
-     * @return EE_Question_Option
402
-     */
403
-    public function options($notDeletedOptionsOnly = true, $selected_value_to_always_include = null)
404
-    {
405
-        $temp_options = $this->_QST->temp_options();
406
-        return ! empty($temp_options)
407
-            ? $temp_options
408
-            : $this->_QST->options(
409
-                $notDeletedOptionsOnly,
410
-                $selected_value_to_always_include
411
-            );
412
-    }
413
-
414
-
415
-    /**
416
-     *    get_meta
417
-     *
418
-     * @access public
419
-     * @param mixed $key
420
-     * @return mixed
421
-     */
422
-    public function get_meta($key = false)
423
-    {
424
-        return $key && isset($this->_QST_meta[ $key ]) ? $this->_QST_meta[ $key ] : false;
425
-    }
17
+	/**
18
+	 *    EE_Question object
19
+	 *
20
+	 * @access private
21
+	 * @var object
22
+	 */
23
+	private $_QST = null;
24
+
25
+	/**
26
+	 *    EE_Answer object
27
+	 *
28
+	 * @access private
29
+	 * @var object
30
+	 */
31
+	private $_ANS = null;
32
+
33
+	/**
34
+	 *    $_QST_meta
35
+	 * @access private
36
+	 * @var array
37
+	 */
38
+	private $_QST_meta = array();
39
+
40
+	/**
41
+	 *    $QST_input_name
42
+	 * @access private
43
+	 * @var string
44
+	 */
45
+	private $QST_input_name = '';
46
+
47
+	/**
48
+	 *    $QST_input_id
49
+	 * @access private
50
+	 * @var string
51
+	 */
52
+	private $QST_input_id = '';
53
+
54
+	/**
55
+	 *    $QST_input_class
56
+	 * @access private
57
+	 * @var string
58
+	 */
59
+	private $QST_input_class = '';
60
+
61
+
62
+	/**
63
+	 * constructor for questions
64
+	 *
65
+	 * @param \EE_Question $QST EE_Question object
66
+	 * @param \EE_Answer   $ANS EE_Answer object
67
+	 * @param array        $q_meta
68
+	 * @access public
69
+	 * @return \EE_Question_Form_Input
70
+	 */
71
+	public function __construct(EE_Question $QST = null, EE_Answer $ANS = null, $q_meta = array())
72
+	{
73
+		if (empty($QST) || empty($ANS)) {
74
+			EE_Error::add_error(
75
+				__('An error occurred. A valid EE_Question or EE_Answer object was not received.', 'event_espresso'),
76
+				__FILE__,
77
+				__FUNCTION__,
78
+				__LINE__
79
+			);
80
+			return null;
81
+		}
82
+		$this->_QST = $QST;
83
+		$this->_ANS = $ANS;
84
+		$this->set_question_form_input_meta($q_meta);
85
+		$this->set_question_form_input_init();
86
+	}
87
+
88
+
89
+	/**
90
+	 * sets meta data for the question form input
91
+	 *
92
+	 * @access public
93
+	 * @param array $q_meta
94
+	 * @return void
95
+	 */
96
+	public function set_question_form_input_meta($q_meta = array())
97
+	{
98
+		$default_q_meta = array(
99
+			'att_nmbr'       => 1,
100
+			'ticket_id'      => '',
101
+			'date'           => '',
102
+			'time'           => '',
103
+			'input_name'     => '',
104
+			'input_id'       => '',
105
+			'input_class'    => '',
106
+			'input_prefix'   => 'qstn',
107
+			'append_qstn_id' => true,
108
+			'htmlentities'   => true,
109
+			'allow_null'     => false,
110
+		);
111
+		$this->_QST_meta = array_merge($default_q_meta, $q_meta);
112
+	}
113
+
114
+
115
+	/**
116
+	 * set_question_form_input_init
117
+	 *
118
+	 * @access public
119
+	 * @return void
120
+	 */
121
+	public function set_question_form_input_init()
122
+	{
123
+		$qstn_id = $this->_QST->system_ID() ? $this->_QST->system_ID() : $this->_QST->ID();
124
+		$this->_set_input_name($qstn_id);
125
+		$this->_set_input_id($qstn_id);
126
+		$this->_set_input_class($qstn_id);
127
+		$this->set_question_form_input_answer($qstn_id);
128
+	}
129
+
130
+
131
+	/**
132
+	 * set_input_name
133
+	 *
134
+	 * @access private
135
+	 * @param $qstn_id
136
+	 * @return void
137
+	 */
138
+	private function _set_input_name($qstn_id)
139
+	{
140
+		if (! empty($qstn_id)) {
141
+			$ANS_ID = $this->get('ANS_ID');
142
+			$qstn_id = ! empty($ANS_ID) ? '[' . $qstn_id . '][' . $ANS_ID . ']' : '[' . $qstn_id . ']';
143
+		}
144
+		$this->QST_input_name = $this->_QST_meta['append_qstn_id'] && ! empty($qstn_id)
145
+			? $this->_QST_meta['input_prefix'] . $this->_QST_meta['input_name'] . $qstn_id
146
+			: $this->_QST_meta['input_prefix'] . $this->_QST_meta['input_name'];
147
+	}
148
+
149
+
150
+	/**
151
+	 * get property values for question form input
152
+	 *
153
+	 * @access public
154
+	 * @param    string $property
155
+	 * @return mixed
156
+	 */
157
+	public function get($property = null)
158
+	{
159
+		if (! empty($property)) {
160
+			if (EEM_Question::instance()->has_field($property)) {
161
+				return $this->_QST->get($property);
162
+			} elseif (EEM_Answer::instance()->has_field($property)) {
163
+				return $this->_ANS->get($property);
164
+			} elseif ($this->_question_form_input_property_exists(__CLASS__, $property)) {
165
+				return $this->{$property};
166
+			}
167
+		}
168
+		return null;
169
+	}
170
+
171
+
172
+	/**
173
+	 *    _question_form_input_property_exists
174
+	 *
175
+	 * @access private
176
+	 * @param    string $classname
177
+	 * @param    string $property
178
+	 * @return boolean
179
+	 */
180
+	private function _question_form_input_property_exists($classname, $property)
181
+	{
182
+		// first try regular property exists method which works as expected in PHP 5.3+
183
+		$prop = EEH_Class_Tools::has_property($classname, $property);
184
+		if (! $prop) {
185
+			// use reflection for < PHP 5.3 as a double check when property is not found, possible due to access restriction
186
+			$reflector = new ReflectionClass($classname);
187
+			$prop = $reflector->hasProperty($property);
188
+		}
189
+		return $prop;
190
+	}
191
+
192
+
193
+	/**
194
+	 * set_input_id
195
+	 *
196
+	 * @access private
197
+	 * @param $qstn_id
198
+	 * @return void
199
+	 */
200
+	private function _set_input_id($qstn_id)
201
+	{
202
+		$input_id = isset($this->_QST_meta['input_id']) && ! empty($this->_QST_meta['input_id'])
203
+			? $this->_QST_meta['input_id'] : sanitize_key(strip_tags($this->_QST->get('QST_display_text')));
204
+		$this->QST_input_id = $this->_QST_meta['append_qstn_id'] && ! empty($qstn_id) ? $input_id . '-' . $qstn_id
205
+			: $input_id;
206
+	}
207
+
208
+
209
+	/**
210
+	 * set_input_class
211
+	 *
212
+	 * @access private
213
+	 * @return void
214
+	 */
215
+	private function _set_input_class()
216
+	{
217
+		$this->QST_input_class = isset($this->_QST_meta['input_class']) ? $this->_QST_meta['input_class'] : '';
218
+	}
219
+
220
+
221
+	/**
222
+	 * set_question_form_input_answer
223
+	 *
224
+	 * @access public
225
+	 * @param mixed    int | string    $qstn_id
226
+	 * @return void
227
+	 */
228
+	public function set_question_form_input_answer($qstn_id)
229
+	{
230
+		// check for answer in $_REQUEST in case we are reprocessing a form after an error
231
+		if (isset($this->_QST_meta['EVT_ID']) && isset($this->_QST_meta['att_nmbr']) && isset($this->_QST_meta['date']) && isset($this->_QST_meta['time']) && isset($this->_QST_meta['price_id'])) {
232
+			if (isset($_REQUEST['qstn'][ $this->_QST_meta['EVT_ID'] ][ $this->_QST_meta['att_nmbr'] ][ $this->_QST_meta['date'] ][ $this->_QST_meta['time'] ][ $this->_QST_meta['price_id'] ][ $qstn_id ])) {
233
+				$answer = $_REQUEST['qstn'][ $this->_QST_meta['EVT_ID'] ][ $this->_QST_meta['att_nmbr'] ][ $this->_QST_meta['date'] ][ $this->_QST_meta['time'] ][ $this->_QST_meta['price_id'] ][ $qstn_id ];
234
+				$this->_ANS->set('ANS_value', $answer);
235
+			}
236
+		}
237
+	}
238
+
239
+
240
+	/**
241
+	 *        generate_question_form_inputs_for_object
242
+	 *
243
+	 * @access    protected
244
+	 * @param bool|object $object $object
245
+	 * @param    array    $input_types
246
+	 * @return        array
247
+	 */
248
+	public static function generate_question_form_inputs_for_object($object = false, $input_types = array())
249
+	{
250
+		if (! is_object($object)) {
251
+			return false;
252
+		}
253
+		$inputs = array();
254
+		$fields = $object->get_model()->field_settings(false);
255
+		// $pk = $object->ID(); <<< NO!
256
+		// EEH_Debug_Tools::printr( $object, get_class( $object ) . '<br /><span style="font-size:10px;font-weight:normal;">' . __FILE__ . '<br />line no: ' . __LINE__ . '</span>', 'auto' );
257
+		// EEH_Debug_Tools::printr( $fields, '$fields  <br /><span style="font-size:10px;font-weight:normal;">' . __FILE__ . '<br />line no: ' . __LINE__ . '</span>', 'auto' );
258
+		// EEH_Debug_Tools::printr( $input_types, '$input_types  <br /><span style="font-size:10px;font-weight:normal;">' . __FILE__ . '<br />line no: ' . __LINE__ . '</span>', 'auto' );
259
+		foreach ($fields as $field_ID => $field) {
260
+			if ($field instanceof EE_Model_Field_Base) {
261
+				// echo '<h4>$field_ID : ' . $field_ID . '  <br /><span style="font-size:10px;font-weight:normal;">' . __FILE__ . '<br />line no: ' . __LINE__ . '</span></h4>';
262
+				// EEH_Debug_Tools::printr( $field, '$field  <br /><span style="font-size:10px;font-weight:normal;">' . __FILE__ . '<br />line no: ' . __LINE__ . '</span>', 'auto' );
263
+				if (isset($input_types[ $field_ID ])) {
264
+					// get saved value for field
265
+					$value = $object->get($field_ID);
266
+					// echo '<h4>$value : ' . $value . '  <br /><span style="font-size:10px;font-weight:normal;">' . __FILE__ . '<br />line no: ' . __LINE__ . '</span></h4>';
267
+					// if no saved value, then use default
268
+					$value = $value !== null ? $value : $field->get_default_value();
269
+					// if ( $field_ID == 'CNT_active' )
270
+					// echo '<h4>$value : ' . $value . '  <br /><span style="font-size:10px;font-weight:normal;">' . __FILE__ . '<br />line no: ' . __LINE__ . '</span></h4>';
271
+					// determine question type
272
+					$type = isset($input_types[ $field_ID ]) ? $input_types[ $field_ID ]['type'] : 'TEXT';
273
+					// input name
274
+					$input_name = isset($input_types[ $field_ID ]) && isset($input_types[ $field_ID ]['input_name'])
275
+						? $input_types[ $field_ID ]['input_name'] . '[' . $field_ID . ']' : $field_ID;
276
+					// css class for input
277
+					$class = isset($input_types[ $field_ID ]['class']) && ! empty($input_types[ $field_ID ]['class'])
278
+						? ' ' . $input_types[ $field_ID ]['class'] : '';
279
+					// whether to apply htmlentities to answer
280
+					$htmlentities = isset($input_types[ $field_ID ]['htmlentities'])
281
+						? $input_types[ $field_ID ]['htmlentities'] : true;
282
+					// whether to apply htmlentities to answer
283
+					$label_b4 = isset($input_types[ $field_ID ]['label_b4']) ? $input_types[ $field_ID ]['label_b4']
284
+						: false;
285
+					// whether to apply htmlentities to answer
286
+					$use_desc_4_label = isset($input_types[ $field_ID ]['use_desc_4_label'])
287
+						? $input_types[ $field_ID ]['use_desc_4_label'] : false;
288
+
289
+					// create EE_Question_Form_Input object
290
+					$QFI = new EE_Question_Form_Input(
291
+						EE_Question::new_instance(
292
+							array(
293
+								'QST_ID'           => 0,
294
+								'QST_display_text' => $field->get_nicename(),
295
+								'QST_type'         => $type,
296
+							)
297
+						),
298
+						EE_Answer::new_instance(
299
+							array(
300
+								'ANS_ID'    => 0,
301
+								'QST_ID'    => 0,
302
+								'REG_ID'    => 0,
303
+								'ANS_value' => $value,
304
+							)
305
+						),
306
+						array(
307
+							'input_id'         => $field_ID . '-' . $object->ID(),
308
+							'input_name'       => $input_name,
309
+							'input_class'      => $field_ID . $class,
310
+							'input_prefix'     => '',
311
+							'append_qstn_id'   => false,
312
+							'htmlentities'     => $htmlentities,
313
+							'label_b4'         => $label_b4,
314
+							'use_desc_4_label' => $use_desc_4_label,
315
+						)
316
+					);
317
+					// does question type have options ?
318
+					if (in_array($type, array('DROPDOWN', 'RADIO_BTN', 'CHECKBOX'))
319
+						&& isset($input_types[ $field_ID ])
320
+						&& isset($input_types[ $field_ID ]['options'])
321
+					) {
322
+						foreach ($input_types[ $field_ID ]['options'] as $option) {
323
+							$option = stripslashes_deep($option);
324
+							$option_id = ! empty($option['id']) ? $option['id'] : 0;
325
+							$QSO = EE_Question_Option::new_instance(
326
+								array(
327
+									'QSO_value'   => (string) $option_id,
328
+									'QSO_desc'    => $option['text'],
329
+									'QSO_deleted' => false,
330
+								)
331
+							);
332
+							// all QST (and ANS) properties can be accessed indirectly thru QFI
333
+							$QFI->add_temp_option($QSO);
334
+						}
335
+					}
336
+					// we don't want ppl manually changing primary keys cuz that would just lead to total craziness man
337
+					if ($field_ID == $object->get_model()->primary_key_name()) {
338
+						$QFI->set('QST_disabled', true);
339
+					}
340
+					// EEH_Debug_Tools::printr( $QFI, '$QFI  <br /><span style="font-size:10px;font-weight:normal;">' . __FILE__ . '<br />line no: ' . __LINE__ . '</span>', 'auto' );
341
+					$inputs[ $field_ID ] = $QFI;
342
+					// if ( $field_ID == 'CNT_active' ) {
343
+					// EEH_Debug_Tools::printr( $QFI, '$QFI  <br /><span style="font-size:10px;font-weight:normal;">' . __FILE__ . '<br />line no: ' . __LINE__ . '</span>', 'auto' );
344
+					// }
345
+				}
346
+			}
347
+		}
348
+		return $inputs;
349
+	}
350
+
351
+
352
+	/**
353
+	 *    add_temp_option
354
+	 *
355
+	 * @access public
356
+	 * @param \EE_Question_Option $QSO EE_Question_Option
357
+	 * @return boolean
358
+	 */
359
+	public function add_temp_option(EE_Question_Option $QSO)
360
+	{
361
+		$this->_QST->add_temp_option($QSO);
362
+	}
363
+
364
+
365
+	/**
366
+	 * set property values for question form input
367
+	 *
368
+	 * @access public
369
+	 * @param    string $property
370
+	 * @param    mixed  $value
371
+	 * @return mixed
372
+	 */
373
+	public function set($property = null, $value = null)
374
+	{
375
+		if (! empty($property)) {
376
+			if (EEM_Question::instance()->has_field($property)) {
377
+				$this->_QST->set($property, $value);
378
+			} elseif (EEM_Answer::instance()->has_field($property)) {
379
+				$this->_ANS->set($property, $value);
380
+			} elseif ($this->_question_form_input_property_exists(__CLASS__, $property)) {
381
+				echo "<hr>$property is a prop of QFI";
382
+				$this->{$property} = $value;
383
+				return true;
384
+			}
385
+		}
386
+		return null;
387
+	}
388
+
389
+
390
+	/**
391
+	 *    _question_form_input_property_exists
392
+	 *
393
+	 * @access public
394
+	 * @param boolean      $notDeletedOptionsOnly            1
395
+	 *                                                       whether to return ALL options, or only the ones which have
396
+	 *                                                       not yet been deleted
397
+	 * @param string|array $selected_value_to_always_include , when retrieving options to an ANSWERED question,
398
+	 *                                                       we want to usually only show non-deleted options AND the
399
+	 *                                                       value that was selected for the answer, whether it was
400
+	 *                                                       trashed or not.
401
+	 * @return EE_Question_Option
402
+	 */
403
+	public function options($notDeletedOptionsOnly = true, $selected_value_to_always_include = null)
404
+	{
405
+		$temp_options = $this->_QST->temp_options();
406
+		return ! empty($temp_options)
407
+			? $temp_options
408
+			: $this->_QST->options(
409
+				$notDeletedOptionsOnly,
410
+				$selected_value_to_always_include
411
+			);
412
+	}
413
+
414
+
415
+	/**
416
+	 *    get_meta
417
+	 *
418
+	 * @access public
419
+	 * @param mixed $key
420
+	 * @return mixed
421
+	 */
422
+	public function get_meta($key = false)
423
+	{
424
+		return $key && isset($this->_QST_meta[ $key ]) ? $this->_QST_meta[ $key ] : false;
425
+	}
426 426
 }
Please login to merge, or discard this patch.
Spacing   +29 added lines, -29 removed lines patch added patch discarded remove patch
@@ -137,13 +137,13 @@  discard block
 block discarded – undo
137 137
      */
138 138
     private function _set_input_name($qstn_id)
139 139
     {
140
-        if (! empty($qstn_id)) {
140
+        if ( ! empty($qstn_id)) {
141 141
             $ANS_ID = $this->get('ANS_ID');
142
-            $qstn_id = ! empty($ANS_ID) ? '[' . $qstn_id . '][' . $ANS_ID . ']' : '[' . $qstn_id . ']';
142
+            $qstn_id = ! empty($ANS_ID) ? '['.$qstn_id.']['.$ANS_ID.']' : '['.$qstn_id.']';
143 143
         }
144 144
         $this->QST_input_name = $this->_QST_meta['append_qstn_id'] && ! empty($qstn_id)
145
-            ? $this->_QST_meta['input_prefix'] . $this->_QST_meta['input_name'] . $qstn_id
146
-            : $this->_QST_meta['input_prefix'] . $this->_QST_meta['input_name'];
145
+            ? $this->_QST_meta['input_prefix'].$this->_QST_meta['input_name'].$qstn_id
146
+            : $this->_QST_meta['input_prefix'].$this->_QST_meta['input_name'];
147 147
     }
148 148
 
149 149
 
@@ -156,7 +156,7 @@  discard block
 block discarded – undo
156 156
      */
157 157
     public function get($property = null)
158 158
     {
159
-        if (! empty($property)) {
159
+        if ( ! empty($property)) {
160 160
             if (EEM_Question::instance()->has_field($property)) {
161 161
                 return $this->_QST->get($property);
162 162
             } elseif (EEM_Answer::instance()->has_field($property)) {
@@ -181,7 +181,7 @@  discard block
 block discarded – undo
181 181
     {
182 182
         // first try regular property exists method which works as expected in PHP 5.3+
183 183
         $prop = EEH_Class_Tools::has_property($classname, $property);
184
-        if (! $prop) {
184
+        if ( ! $prop) {
185 185
             // use reflection for < PHP 5.3 as a double check when property is not found, possible due to access restriction
186 186
             $reflector = new ReflectionClass($classname);
187 187
             $prop = $reflector->hasProperty($property);
@@ -201,7 +201,7 @@  discard block
 block discarded – undo
201 201
     {
202 202
         $input_id = isset($this->_QST_meta['input_id']) && ! empty($this->_QST_meta['input_id'])
203 203
             ? $this->_QST_meta['input_id'] : sanitize_key(strip_tags($this->_QST->get('QST_display_text')));
204
-        $this->QST_input_id = $this->_QST_meta['append_qstn_id'] && ! empty($qstn_id) ? $input_id . '-' . $qstn_id
204
+        $this->QST_input_id = $this->_QST_meta['append_qstn_id'] && ! empty($qstn_id) ? $input_id.'-'.$qstn_id
205 205
             : $input_id;
206 206
     }
207 207
 
@@ -229,8 +229,8 @@  discard block
 block discarded – undo
229 229
     {
230 230
         // check for answer in $_REQUEST in case we are reprocessing a form after an error
231 231
         if (isset($this->_QST_meta['EVT_ID']) && isset($this->_QST_meta['att_nmbr']) && isset($this->_QST_meta['date']) && isset($this->_QST_meta['time']) && isset($this->_QST_meta['price_id'])) {
232
-            if (isset($_REQUEST['qstn'][ $this->_QST_meta['EVT_ID'] ][ $this->_QST_meta['att_nmbr'] ][ $this->_QST_meta['date'] ][ $this->_QST_meta['time'] ][ $this->_QST_meta['price_id'] ][ $qstn_id ])) {
233
-                $answer = $_REQUEST['qstn'][ $this->_QST_meta['EVT_ID'] ][ $this->_QST_meta['att_nmbr'] ][ $this->_QST_meta['date'] ][ $this->_QST_meta['time'] ][ $this->_QST_meta['price_id'] ][ $qstn_id ];
232
+            if (isset($_REQUEST['qstn'][$this->_QST_meta['EVT_ID']][$this->_QST_meta['att_nmbr']][$this->_QST_meta['date']][$this->_QST_meta['time']][$this->_QST_meta['price_id']][$qstn_id])) {
233
+                $answer = $_REQUEST['qstn'][$this->_QST_meta['EVT_ID']][$this->_QST_meta['att_nmbr']][$this->_QST_meta['date']][$this->_QST_meta['time']][$this->_QST_meta['price_id']][$qstn_id];
234 234
                 $this->_ANS->set('ANS_value', $answer);
235 235
             }
236 236
         }
@@ -247,7 +247,7 @@  discard block
 block discarded – undo
247 247
      */
248 248
     public static function generate_question_form_inputs_for_object($object = false, $input_types = array())
249 249
     {
250
-        if (! is_object($object)) {
250
+        if ( ! is_object($object)) {
251 251
             return false;
252 252
         }
253 253
         $inputs = array();
@@ -260,7 +260,7 @@  discard block
 block discarded – undo
260 260
             if ($field instanceof EE_Model_Field_Base) {
261 261
                 // echo '<h4>$field_ID : ' . $field_ID . '  <br /><span style="font-size:10px;font-weight:normal;">' . __FILE__ . '<br />line no: ' . __LINE__ . '</span></h4>';
262 262
                 // EEH_Debug_Tools::printr( $field, '$field  <br /><span style="font-size:10px;font-weight:normal;">' . __FILE__ . '<br />line no: ' . __LINE__ . '</span>', 'auto' );
263
-                if (isset($input_types[ $field_ID ])) {
263
+                if (isset($input_types[$field_ID])) {
264 264
                     // get saved value for field
265 265
                     $value = $object->get($field_ID);
266 266
                     // echo '<h4>$value : ' . $value . '  <br /><span style="font-size:10px;font-weight:normal;">' . __FILE__ . '<br />line no: ' . __LINE__ . '</span></h4>';
@@ -269,22 +269,22 @@  discard block
 block discarded – undo
269 269
                     // if ( $field_ID == 'CNT_active' )
270 270
                     // echo '<h4>$value : ' . $value . '  <br /><span style="font-size:10px;font-weight:normal;">' . __FILE__ . '<br />line no: ' . __LINE__ . '</span></h4>';
271 271
                     // determine question type
272
-                    $type = isset($input_types[ $field_ID ]) ? $input_types[ $field_ID ]['type'] : 'TEXT';
272
+                    $type = isset($input_types[$field_ID]) ? $input_types[$field_ID]['type'] : 'TEXT';
273 273
                     // input name
274
-                    $input_name = isset($input_types[ $field_ID ]) && isset($input_types[ $field_ID ]['input_name'])
275
-                        ? $input_types[ $field_ID ]['input_name'] . '[' . $field_ID . ']' : $field_ID;
274
+                    $input_name = isset($input_types[$field_ID]) && isset($input_types[$field_ID]['input_name'])
275
+                        ? $input_types[$field_ID]['input_name'].'['.$field_ID.']' : $field_ID;
276 276
                     // css class for input
277
-                    $class = isset($input_types[ $field_ID ]['class']) && ! empty($input_types[ $field_ID ]['class'])
278
-                        ? ' ' . $input_types[ $field_ID ]['class'] : '';
277
+                    $class = isset($input_types[$field_ID]['class']) && ! empty($input_types[$field_ID]['class'])
278
+                        ? ' '.$input_types[$field_ID]['class'] : '';
279 279
                     // whether to apply htmlentities to answer
280
-                    $htmlentities = isset($input_types[ $field_ID ]['htmlentities'])
281
-                        ? $input_types[ $field_ID ]['htmlentities'] : true;
280
+                    $htmlentities = isset($input_types[$field_ID]['htmlentities'])
281
+                        ? $input_types[$field_ID]['htmlentities'] : true;
282 282
                     // whether to apply htmlentities to answer
283
-                    $label_b4 = isset($input_types[ $field_ID ]['label_b4']) ? $input_types[ $field_ID ]['label_b4']
283
+                    $label_b4 = isset($input_types[$field_ID]['label_b4']) ? $input_types[$field_ID]['label_b4']
284 284
                         : false;
285 285
                     // whether to apply htmlentities to answer
286
-                    $use_desc_4_label = isset($input_types[ $field_ID ]['use_desc_4_label'])
287
-                        ? $input_types[ $field_ID ]['use_desc_4_label'] : false;
286
+                    $use_desc_4_label = isset($input_types[$field_ID]['use_desc_4_label'])
287
+                        ? $input_types[$field_ID]['use_desc_4_label'] : false;
288 288
 
289 289
                     // create EE_Question_Form_Input object
290 290
                     $QFI = new EE_Question_Form_Input(
@@ -304,9 +304,9 @@  discard block
 block discarded – undo
304 304
                             )
305 305
                         ),
306 306
                         array(
307
-                            'input_id'         => $field_ID . '-' . $object->ID(),
307
+                            'input_id'         => $field_ID.'-'.$object->ID(),
308 308
                             'input_name'       => $input_name,
309
-                            'input_class'      => $field_ID . $class,
309
+                            'input_class'      => $field_ID.$class,
310 310
                             'input_prefix'     => '',
311 311
                             'append_qstn_id'   => false,
312 312
                             'htmlentities'     => $htmlentities,
@@ -316,10 +316,10 @@  discard block
 block discarded – undo
316 316
                     );
317 317
                     // does question type have options ?
318 318
                     if (in_array($type, array('DROPDOWN', 'RADIO_BTN', 'CHECKBOX'))
319
-                        && isset($input_types[ $field_ID ])
320
-                        && isset($input_types[ $field_ID ]['options'])
319
+                        && isset($input_types[$field_ID])
320
+                        && isset($input_types[$field_ID]['options'])
321 321
                     ) {
322
-                        foreach ($input_types[ $field_ID ]['options'] as $option) {
322
+                        foreach ($input_types[$field_ID]['options'] as $option) {
323 323
                             $option = stripslashes_deep($option);
324 324
                             $option_id = ! empty($option['id']) ? $option['id'] : 0;
325 325
                             $QSO = EE_Question_Option::new_instance(
@@ -338,7 +338,7 @@  discard block
 block discarded – undo
338 338
                         $QFI->set('QST_disabled', true);
339 339
                     }
340 340
                     // EEH_Debug_Tools::printr( $QFI, '$QFI  <br /><span style="font-size:10px;font-weight:normal;">' . __FILE__ . '<br />line no: ' . __LINE__ . '</span>', 'auto' );
341
-                    $inputs[ $field_ID ] = $QFI;
341
+                    $inputs[$field_ID] = $QFI;
342 342
                     // if ( $field_ID == 'CNT_active' ) {
343 343
                     // EEH_Debug_Tools::printr( $QFI, '$QFI  <br /><span style="font-size:10px;font-weight:normal;">' . __FILE__ . '<br />line no: ' . __LINE__ . '</span>', 'auto' );
344 344
                     // }
@@ -372,7 +372,7 @@  discard block
 block discarded – undo
372 372
      */
373 373
     public function set($property = null, $value = null)
374 374
     {
375
-        if (! empty($property)) {
375
+        if ( ! empty($property)) {
376 376
             if (EEM_Question::instance()->has_field($property)) {
377 377
                 $this->_QST->set($property, $value);
378 378
             } elseif (EEM_Answer::instance()->has_field($property)) {
@@ -421,6 +421,6 @@  discard block
 block discarded – undo
421 421
      */
422 422
     public function get_meta($key = false)
423 423
     {
424
-        return $key && isset($this->_QST_meta[ $key ]) ? $this->_QST_meta[ $key ] : false;
424
+        return $key && isset($this->_QST_meta[$key]) ? $this->_QST_meta[$key] : false;
425 425
     }
426 426
 }
Please login to merge, or discard this patch.
core/db_classes/EE_Question_Group.class.php 2 patches
Doc Comments   +2 added lines, -2 removed lines patch added patch discarded remove patch
@@ -215,7 +215,7 @@  discard block
 block discarded – undo
215 215
      * Adds the question to this question group
216 216
      *
217 217
      * @param EE_Question || int $question object or ID
218
-     * @return boolean if successful
218
+     * @return EE_Base_Class if successful
219 219
      */
220 220
     public function add_question($questionObjectOrID)
221 221
     {
@@ -227,7 +227,7 @@  discard block
 block discarded – undo
227 227
      * Removes the question from this question group
228 228
      *
229 229
      * @param EE_Question || int $question object or ID
230
-     * @return boolean of success
230
+     * @return EE_Base_Class of success
231 231
      */
232 232
     public function remove_question($questionObjectOrID)
233 233
     {
Please login to merge, or discard this patch.
Indentation   +276 added lines, -276 removed lines patch added patch discarded remove patch
@@ -12,280 +12,280 @@
 block discarded – undo
12 12
 class EE_Question_Group extends EE_Soft_Delete_Base_Class
13 13
 {
14 14
 
15
-    /**
16
-     * @param array $props_n_values
17
-     * @return EE_Question_Group|mixed
18
-     */
19
-    public static function new_instance($props_n_values = array())
20
-    {
21
-        $has_object = parent::_check_for_object($props_n_values, __CLASS__);
22
-        return $has_object ? $has_object : new self($props_n_values);
23
-    }
24
-
25
-
26
-    /**
27
-     * @param array $props_n_values
28
-     * @return EE_Question_Group
29
-     */
30
-    public static function new_instance_from_db($props_n_values = array())
31
-    {
32
-        return new self($props_n_values, true);
33
-    }
34
-
35
-
36
-    /**
37
-     * gets the question group's name
38
-     *
39
-     * @access public
40
-     * @param bool $pretty
41
-     * @return string
42
-     */
43
-    public function name($pretty = false)
44
-    {
45
-        return $pretty ? $this->get_pretty('QSG_name') : $this->get('QSG_name');
46
-    }
47
-
48
-
49
-    /**
50
-     * Gets the question group's internal name
51
-     *
52
-     * @access public
53
-     * @return string
54
-     */
55
-    public function identifier()
56
-    {
57
-        return $this->get('QSG_identifier');
58
-    }
59
-
60
-
61
-    /**
62
-     * Gets the question group's description
63
-     *
64
-     * @access public
65
-     * @param bool $pretty
66
-     * @return string
67
-     */
68
-    public function desc($pretty = false)
69
-    {
70
-        return $pretty ? $this->get_pretty('QSG_desc') : $this->get('QSG_desc');
71
-    }
72
-
73
-
74
-    /**
75
-     * Gets the question group's order number in a sequence
76
-     * of other question groups
77
-     *
78
-     * @access public
79
-     * @return int
80
-     */
81
-    public function order()
82
-    {
83
-        return $this->get('QSG_order');
84
-    }
85
-
86
-
87
-    /**
88
-     * Returns whether to show the group's name on the frontend
89
-     *
90
-     * @access public
91
-     * @return boolean
92
-     */
93
-    public function show_group_name()
94
-    {
95
-        return $this->get('QSG_show_group_name');
96
-    }
97
-
98
-
99
-    /**
100
-     * Returns whether to show the group's description
101
-     * on the frontend
102
-     *
103
-     * @access public
104
-     * @return boolean
105
-     */
106
-    public function show_group_desc()
107
-    {
108
-        return $this->get('QSG_show_group_desc');
109
-    }
110
-
111
-
112
-    /**
113
-     * Returns whether this is a 'system group' (meaning
114
-     * a question group integral to the system, whose questions
115
-     * relate to the attendee table)
116
-     *
117
-     * @access public
118
-     * @return int
119
-     */
120
-    public function system_group()
121
-    {
122
-        return $this->get('QSG_system');
123
-    }
124
-
125
-
126
-    /**
127
-     * get the author of the question group.
128
-     *
129
-     * @since 4.5.0
130
-     *
131
-     * @return int
132
-     */
133
-    public function wp_user()
134
-    {
135
-        return $this->get('QSG_wp_user');
136
-    }
137
-
138
-
139
-    /**
140
-     * Returns whether this question group has
141
-     * been deleted
142
-     *
143
-     * @access public
144
-     * @return boolean
145
-     */
146
-    public function deleted()
147
-    {
148
-        return $this->get('QST_deleted');
149
-    }
150
-
151
-
152
-    /**
153
-     * Gets an array of questions with questions IN the group at the start of the array and questions NOT in the group
154
-     * at the end of the array.  Questions in the group are ordered by Question_Group_Question.QGQ_order and questions
155
-     * NOT in the group are ordered by Question.QGQ_order
156
-     *
157
-     * @return EE_Question[]
158
-     */
159
-    public function questions_in_and_not_in_group()
160
-    {
161
-        $questions_in_group = $this->questions();
162
-        $exclude_question_ids = ! empty($questions_in_group) ? array_keys($questions_in_group) : array();
163
-        $questions_not_in_group = $this->questions_not_in_group($exclude_question_ids);
164
-        return $questions_in_group + $questions_not_in_group;
165
-    }
166
-
167
-
168
-    /**
169
-     * Gets all the questions which are part of this question group (ordered Question_Group_Question.QGQ_order)
170
-     *
171
-     * @param array $query_params
172
-     * @return EE_Question[]
173
-     */
174
-    public function questions($query_params = array())
175
-    {
176
-        $query_params = ! empty($query_params) ? $query_params
177
-            : array('order_by' => array('Question_Group_Question.QGQ_order' => 'ASC'));
178
-        return $this->ID() ? $this->get_many_related('Question', $query_params) : array();
179
-    }
180
-
181
-
182
-    /**
183
-     * Gets all the questions which are NOT part of this question group.
184
-     *
185
-     * @param  mixed $question_IDS_in_group if empty array then all questions returned.  if FALSE then we first get
186
-     *                                      questions in this group and exclude them from questions get all. IF empty
187
-     *                                      array then we just return all questions.
188
-     * @return EE_Question[]
189
-     */
190
-    public function questions_not_in_group($question_IDS_in_group = false)
191
-    {
192
-        if ($question_IDS_in_group === false) {
193
-            $questions = $this->questions();
194
-            $question_IDS_in_group = ! empty($questions) ? array_keys($questions) : array();
195
-        }
196
-        $_where = ! empty($question_IDS_in_group) ? array('QST_ID' => array('not_in', $question_IDS_in_group))
197
-            : array();
198
-
199
-        return EEM_Question::instance()->get_all(array($_where, 'order_by' => array('QST_ID' => 'ASC')));
200
-    }
201
-
202
-
203
-    /**
204
-     * Gets all events which are related to this question group
205
-     *
206
-     * @return EE_Event[]
207
-     */
208
-    public function events()
209
-    {
210
-        return $this->get_many_related('Event');
211
-    }
212
-
213
-
214
-    /**
215
-     * Adds the question to this question group
216
-     *
217
-     * @param EE_Question || int $question object or ID
218
-     * @return boolean if successful
219
-     */
220
-    public function add_question($questionObjectOrID)
221
-    {
222
-        return $this->_add_relation_to($questionObjectOrID, 'Question');
223
-    }
224
-
225
-
226
-    /**
227
-     * Removes the question from this question group
228
-     *
229
-     * @param EE_Question || int $question object or ID
230
-     * @return boolean of success
231
-     */
232
-    public function remove_question($questionObjectOrID)
233
-    {
234
-        return $this->_remove_relation_to($questionObjectOrID, 'Question');
235
-    }
236
-
237
-
238
-    /**
239
-     * @param $questionObjectOrID
240
-     * @param $qst_order
241
-     * @return int
242
-     */
243
-    public function update_question_order($questionObjectOrID, $qst_order)
244
-    {
245
-        $qst_ID = $questionObjectOrID instanceof EE_Question ? $questionObjectOrID->ID() : (int) $questionObjectOrID;
246
-        return EEM_Question_Group_Question::instance()->update(
247
-            array('QGQ_order' => $qst_order),
248
-            array(
249
-                array(
250
-                    'QST_ID' => $qst_ID,
251
-                    'QSG_ID' => $this->ID(),
252
-                ),
253
-            )
254
-        );
255
-    }
256
-
257
-
258
-    /**
259
-     * Basically this is method just returns whether the question group has any questions with answers.  This is used
260
-     * by the admin currently to determine whether we should display the ui for deleting permanently or not b/c
261
-     * question groups with questions that have answers should not be possible to delete permanently
262
-     *
263
-     * @return boolean true if has questions with answers, false if not.
264
-     */
265
-    public function has_questions_with_answers()
266
-    {
267
-        $has_answers = false;
268
-        $questions = $this->get_many_related('Question');
269
-        foreach ($questions as $question) {
270
-            if ($question->count_related('Answer') > 0) {
271
-                $has_answers = true;
272
-            }
273
-        }
274
-        return $has_answers;
275
-    }
276
-
277
-
278
-    /**
279
-     * The purpose of this method is set the question group order for this question group to be the max out of all
280
-     * question groups
281
-     *
282
-     * @access public
283
-     * @return void
284
-     */
285
-    public function set_order_to_latest()
286
-    {
287
-        $latest_order = $this->get_model()->get_latest_question_group_order();
288
-        $latest_order++;
289
-        $this->set('QSG_order', $latest_order);
290
-    }
15
+	/**
16
+	 * @param array $props_n_values
17
+	 * @return EE_Question_Group|mixed
18
+	 */
19
+	public static function new_instance($props_n_values = array())
20
+	{
21
+		$has_object = parent::_check_for_object($props_n_values, __CLASS__);
22
+		return $has_object ? $has_object : new self($props_n_values);
23
+	}
24
+
25
+
26
+	/**
27
+	 * @param array $props_n_values
28
+	 * @return EE_Question_Group
29
+	 */
30
+	public static function new_instance_from_db($props_n_values = array())
31
+	{
32
+		return new self($props_n_values, true);
33
+	}
34
+
35
+
36
+	/**
37
+	 * gets the question group's name
38
+	 *
39
+	 * @access public
40
+	 * @param bool $pretty
41
+	 * @return string
42
+	 */
43
+	public function name($pretty = false)
44
+	{
45
+		return $pretty ? $this->get_pretty('QSG_name') : $this->get('QSG_name');
46
+	}
47
+
48
+
49
+	/**
50
+	 * Gets the question group's internal name
51
+	 *
52
+	 * @access public
53
+	 * @return string
54
+	 */
55
+	public function identifier()
56
+	{
57
+		return $this->get('QSG_identifier');
58
+	}
59
+
60
+
61
+	/**
62
+	 * Gets the question group's description
63
+	 *
64
+	 * @access public
65
+	 * @param bool $pretty
66
+	 * @return string
67
+	 */
68
+	public function desc($pretty = false)
69
+	{
70
+		return $pretty ? $this->get_pretty('QSG_desc') : $this->get('QSG_desc');
71
+	}
72
+
73
+
74
+	/**
75
+	 * Gets the question group's order number in a sequence
76
+	 * of other question groups
77
+	 *
78
+	 * @access public
79
+	 * @return int
80
+	 */
81
+	public function order()
82
+	{
83
+		return $this->get('QSG_order');
84
+	}
85
+
86
+
87
+	/**
88
+	 * Returns whether to show the group's name on the frontend
89
+	 *
90
+	 * @access public
91
+	 * @return boolean
92
+	 */
93
+	public function show_group_name()
94
+	{
95
+		return $this->get('QSG_show_group_name');
96
+	}
97
+
98
+
99
+	/**
100
+	 * Returns whether to show the group's description
101
+	 * on the frontend
102
+	 *
103
+	 * @access public
104
+	 * @return boolean
105
+	 */
106
+	public function show_group_desc()
107
+	{
108
+		return $this->get('QSG_show_group_desc');
109
+	}
110
+
111
+
112
+	/**
113
+	 * Returns whether this is a 'system group' (meaning
114
+	 * a question group integral to the system, whose questions
115
+	 * relate to the attendee table)
116
+	 *
117
+	 * @access public
118
+	 * @return int
119
+	 */
120
+	public function system_group()
121
+	{
122
+		return $this->get('QSG_system');
123
+	}
124
+
125
+
126
+	/**
127
+	 * get the author of the question group.
128
+	 *
129
+	 * @since 4.5.0
130
+	 *
131
+	 * @return int
132
+	 */
133
+	public function wp_user()
134
+	{
135
+		return $this->get('QSG_wp_user');
136
+	}
137
+
138
+
139
+	/**
140
+	 * Returns whether this question group has
141
+	 * been deleted
142
+	 *
143
+	 * @access public
144
+	 * @return boolean
145
+	 */
146
+	public function deleted()
147
+	{
148
+		return $this->get('QST_deleted');
149
+	}
150
+
151
+
152
+	/**
153
+	 * Gets an array of questions with questions IN the group at the start of the array and questions NOT in the group
154
+	 * at the end of the array.  Questions in the group are ordered by Question_Group_Question.QGQ_order and questions
155
+	 * NOT in the group are ordered by Question.QGQ_order
156
+	 *
157
+	 * @return EE_Question[]
158
+	 */
159
+	public function questions_in_and_not_in_group()
160
+	{
161
+		$questions_in_group = $this->questions();
162
+		$exclude_question_ids = ! empty($questions_in_group) ? array_keys($questions_in_group) : array();
163
+		$questions_not_in_group = $this->questions_not_in_group($exclude_question_ids);
164
+		return $questions_in_group + $questions_not_in_group;
165
+	}
166
+
167
+
168
+	/**
169
+	 * Gets all the questions which are part of this question group (ordered Question_Group_Question.QGQ_order)
170
+	 *
171
+	 * @param array $query_params
172
+	 * @return EE_Question[]
173
+	 */
174
+	public function questions($query_params = array())
175
+	{
176
+		$query_params = ! empty($query_params) ? $query_params
177
+			: array('order_by' => array('Question_Group_Question.QGQ_order' => 'ASC'));
178
+		return $this->ID() ? $this->get_many_related('Question', $query_params) : array();
179
+	}
180
+
181
+
182
+	/**
183
+	 * Gets all the questions which are NOT part of this question group.
184
+	 *
185
+	 * @param  mixed $question_IDS_in_group if empty array then all questions returned.  if FALSE then we first get
186
+	 *                                      questions in this group and exclude them from questions get all. IF empty
187
+	 *                                      array then we just return all questions.
188
+	 * @return EE_Question[]
189
+	 */
190
+	public function questions_not_in_group($question_IDS_in_group = false)
191
+	{
192
+		if ($question_IDS_in_group === false) {
193
+			$questions = $this->questions();
194
+			$question_IDS_in_group = ! empty($questions) ? array_keys($questions) : array();
195
+		}
196
+		$_where = ! empty($question_IDS_in_group) ? array('QST_ID' => array('not_in', $question_IDS_in_group))
197
+			: array();
198
+
199
+		return EEM_Question::instance()->get_all(array($_where, 'order_by' => array('QST_ID' => 'ASC')));
200
+	}
201
+
202
+
203
+	/**
204
+	 * Gets all events which are related to this question group
205
+	 *
206
+	 * @return EE_Event[]
207
+	 */
208
+	public function events()
209
+	{
210
+		return $this->get_many_related('Event');
211
+	}
212
+
213
+
214
+	/**
215
+	 * Adds the question to this question group
216
+	 *
217
+	 * @param EE_Question || int $question object or ID
218
+	 * @return boolean if successful
219
+	 */
220
+	public function add_question($questionObjectOrID)
221
+	{
222
+		return $this->_add_relation_to($questionObjectOrID, 'Question');
223
+	}
224
+
225
+
226
+	/**
227
+	 * Removes the question from this question group
228
+	 *
229
+	 * @param EE_Question || int $question object or ID
230
+	 * @return boolean of success
231
+	 */
232
+	public function remove_question($questionObjectOrID)
233
+	{
234
+		return $this->_remove_relation_to($questionObjectOrID, 'Question');
235
+	}
236
+
237
+
238
+	/**
239
+	 * @param $questionObjectOrID
240
+	 * @param $qst_order
241
+	 * @return int
242
+	 */
243
+	public function update_question_order($questionObjectOrID, $qst_order)
244
+	{
245
+		$qst_ID = $questionObjectOrID instanceof EE_Question ? $questionObjectOrID->ID() : (int) $questionObjectOrID;
246
+		return EEM_Question_Group_Question::instance()->update(
247
+			array('QGQ_order' => $qst_order),
248
+			array(
249
+				array(
250
+					'QST_ID' => $qst_ID,
251
+					'QSG_ID' => $this->ID(),
252
+				),
253
+			)
254
+		);
255
+	}
256
+
257
+
258
+	/**
259
+	 * Basically this is method just returns whether the question group has any questions with answers.  This is used
260
+	 * by the admin currently to determine whether we should display the ui for deleting permanently or not b/c
261
+	 * question groups with questions that have answers should not be possible to delete permanently
262
+	 *
263
+	 * @return boolean true if has questions with answers, false if not.
264
+	 */
265
+	public function has_questions_with_answers()
266
+	{
267
+		$has_answers = false;
268
+		$questions = $this->get_many_related('Question');
269
+		foreach ($questions as $question) {
270
+			if ($question->count_related('Answer') > 0) {
271
+				$has_answers = true;
272
+			}
273
+		}
274
+		return $has_answers;
275
+	}
276
+
277
+
278
+	/**
279
+	 * The purpose of this method is set the question group order for this question group to be the max out of all
280
+	 * question groups
281
+	 *
282
+	 * @access public
283
+	 * @return void
284
+	 */
285
+	public function set_order_to_latest()
286
+	{
287
+		$latest_order = $this->get_model()->get_latest_question_group_order();
288
+		$latest_order++;
289
+		$this->set('QSG_order', $latest_order);
290
+	}
291 291
 }
Please login to merge, or discard this patch.
core/db_classes/EE_Question_Option.class.php 2 patches
Doc Comments   +7 added lines, -7 removed lines patch added patch discarded remove patch
@@ -39,7 +39,7 @@  discard block
 block discarded – undo
39 39
      * @param array  $props_n_values  incoming values from the database
40 40
      * @param string $timezone        incoming timezone as set by the model.  If not set the timezone for
41 41
      *                                the website will be used.
42
-     * @return EE_Attendee
42
+     * @return EE_Question_Option
43 43
      */
44 44
     public static function new_instance_from_db($props_n_values = array(), $timezone = null)
45 45
     {
@@ -51,7 +51,7 @@  discard block
 block discarded – undo
51 51
      * Sets the option's key value
52 52
      *
53 53
      * @param string $value
54
-     * @return bool success
54
+     * @return boolean|null success
55 55
      */
56 56
     public function set_value($value)
57 57
     {
@@ -63,7 +63,7 @@  discard block
 block discarded – undo
63 63
      * Sets the option's Display Text
64 64
      *
65 65
      * @param string $text
66
-     * @return bool success
66
+     * @return boolean|null success
67 67
      */
68 68
     public function set_desc($text)
69 69
     {
@@ -76,7 +76,7 @@  discard block
 block discarded – undo
76 76
      *
77 77
      * @access public
78 78
      * @param integer $order
79
-     * @return bool      $success
79
+     * @return boolean|null      $success
80 80
      */
81 81
     public function set_order($order)
82 82
     {
@@ -88,7 +88,7 @@  discard block
 block discarded – undo
88 88
      * Sets the ID of the related question
89 89
      *
90 90
      * @param int $question_ID
91
-     * @return bool success
91
+     * @return boolean|null success
92 92
      */
93 93
     public function set_question_ID($question_ID)
94 94
     {
@@ -100,7 +100,7 @@  discard block
 block discarded – undo
100 100
      * Sets the option's opt_group
101 101
      *
102 102
      * @param string $text
103
-     * @return bool success
103
+     * @return string success
104 104
      */
105 105
     public function set_opt_group($text)
106 106
     {
@@ -220,7 +220,7 @@  discard block
 block discarded – undo
220 220
      * Sets QSO_system
221 221
      *
222 222
      * @param string $QSO_system
223
-     * @return bool
223
+     * @return boolean|null
224 224
      */
225 225
     public function set_system($QSO_system)
226 226
     {
Please login to merge, or discard this patch.
Indentation   +216 added lines, -216 removed lines patch added patch discarded remove patch
@@ -10,220 +10,220 @@
 block discarded – undo
10 10
 class EE_Question_Option extends EE_Soft_Delete_Base_Class implements EEI_Duplicatable
11 11
 {
12 12
 
13
-    /**
14
-     * Question Option Opt Group Name
15
-     *
16
-     * @access protected
17
-     * @var string
18
-     */
19
-    protected $_QSO_opt_group = null;
20
-
21
-
22
-    /**
23
-     *
24
-     * @param array  $props_n_values          incoming values
25
-     * @param string $timezone                incoming timezone (if not set the timezone set for the website will be
26
-     *                                        used.)
27
-     * @param array  $date_formats            incoming date_formats in an array where the first value is the
28
-     *                                        date_format and the second value is the time format
29
-     * @return EE_Attendee
30
-     */
31
-    public static function new_instance($props_n_values = array(), $timezone = null, $date_formats = array())
32
-    {
33
-        $has_object = parent::_check_for_object($props_n_values, __CLASS__, $timezone, $date_formats);
34
-        return $has_object ? $has_object : new self($props_n_values, false, $timezone, $date_formats);
35
-    }
36
-
37
-
38
-    /**
39
-     * @param array  $props_n_values  incoming values from the database
40
-     * @param string $timezone        incoming timezone as set by the model.  If not set the timezone for
41
-     *                                the website will be used.
42
-     * @return EE_Attendee
43
-     */
44
-    public static function new_instance_from_db($props_n_values = array(), $timezone = null)
45
-    {
46
-        return new self($props_n_values, true, $timezone);
47
-    }
48
-
49
-
50
-    /**
51
-     * Sets the option's key value
52
-     *
53
-     * @param string $value
54
-     * @return bool success
55
-     */
56
-    public function set_value($value)
57
-    {
58
-        $this->set('QSO_value', $value);
59
-    }
60
-
61
-
62
-    /**
63
-     * Sets the option's Display Text
64
-     *
65
-     * @param string $text
66
-     * @return bool success
67
-     */
68
-    public function set_desc($text)
69
-    {
70
-        $this->set('QSO_desc', $text);
71
-    }
72
-
73
-
74
-    /**
75
-     * Sets the order for this option
76
-     *
77
-     * @access public
78
-     * @param integer $order
79
-     * @return bool      $success
80
-     */
81
-    public function set_order($order)
82
-    {
83
-        $this->set('QSO_order', $order);
84
-    }
85
-
86
-
87
-    /**
88
-     * Sets the ID of the related question
89
-     *
90
-     * @param int $question_ID
91
-     * @return bool success
92
-     */
93
-    public function set_question_ID($question_ID)
94
-    {
95
-        $this->set('QST_ID', $question_ID);
96
-    }
97
-
98
-
99
-    /**
100
-     * Sets the option's opt_group
101
-     *
102
-     * @param string $text
103
-     * @return bool success
104
-     */
105
-    public function set_opt_group($text)
106
-    {
107
-        return $this->_QSO_opt_group = $text;
108
-    }
109
-
110
-
111
-    /**
112
-     * Gets the option's key value
113
-     *
114
-     * @return string
115
-     */
116
-    public function value()
117
-    {
118
-        return $this->get('QSO_value');
119
-    }
120
-
121
-
122
-    /**
123
-     * Gets the option's display text
124
-     *
125
-     * @return string
126
-     */
127
-    public function desc()
128
-    {
129
-        return $this->get('QSO_desc');
130
-    }
131
-
132
-
133
-    /**
134
-     * Returns whether this option has been deleted or not
135
-     *
136
-     * @return boolean
137
-     */
138
-    public function deleted()
139
-    {
140
-        return $this->get('QSO_deleted');
141
-    }
142
-
143
-
144
-    /**
145
-     * Returns the order or the Question Option
146
-     *
147
-     * @access public
148
-     * @return integer
149
-     */
150
-    public function order()
151
-    {
152
-        return $this->get('QSO_option');
153
-    }
154
-
155
-
156
-    /**
157
-     * Gets the related question's ID
158
-     *
159
-     * @return int
160
-     */
161
-    public function question_ID()
162
-    {
163
-        return $this->get('QST_ID');
164
-    }
165
-
166
-
167
-    /**
168
-     * Returns the question related to this question option
169
-     *
170
-     * @return EE_Question
171
-     */
172
-    public function question()
173
-    {
174
-        return $this->get_first_related('Question');
175
-    }
176
-
177
-
178
-    /**
179
-     * Gets the option's opt_group
180
-     *
181
-     * @return string
182
-     */
183
-    public function opt_group()
184
-    {
185
-        return $this->_QSO_opt_group;
186
-    }
187
-
188
-    /**
189
-     * Duplicates this question option. By default the new question option will be for the same question,
190
-     * but that can be overriden by setting the 'QST_ID' option
191
-     *
192
-     * @param array $options {
193
-     * @type int    $QST_ID  the QST_ID attribute of this question option, otherwise it will be for the same question
194
-     *                       as the original
195
-     */
196
-    public function duplicate($options = array())
197
-    {
198
-        $new_question_option = clone $this;
199
-        $new_question_option->set('QSO_ID', null);
200
-        if (array_key_exists(
201
-            'QST_ID',
202
-            $options
203
-        )) {// use array_key_exists instead of isset because NULL might be a valid value
204
-            $new_question_option->set_question_ID($options['QST_ID']);
205
-        }
206
-        $new_question_option->save();
207
-    }
208
-
209
-    /**
210
-     * Gets the QSO_system value
211
-     *
212
-     * @return string|null
213
-     */
214
-    public function system()
215
-    {
216
-        return $this->get('QSO_system');
217
-    }
218
-
219
-    /**
220
-     * Sets QSO_system
221
-     *
222
-     * @param string $QSO_system
223
-     * @return bool
224
-     */
225
-    public function set_system($QSO_system)
226
-    {
227
-        return $this->set('QSO_system', $QSO_system);
228
-    }
13
+	/**
14
+	 * Question Option Opt Group Name
15
+	 *
16
+	 * @access protected
17
+	 * @var string
18
+	 */
19
+	protected $_QSO_opt_group = null;
20
+
21
+
22
+	/**
23
+	 *
24
+	 * @param array  $props_n_values          incoming values
25
+	 * @param string $timezone                incoming timezone (if not set the timezone set for the website will be
26
+	 *                                        used.)
27
+	 * @param array  $date_formats            incoming date_formats in an array where the first value is the
28
+	 *                                        date_format and the second value is the time format
29
+	 * @return EE_Attendee
30
+	 */
31
+	public static function new_instance($props_n_values = array(), $timezone = null, $date_formats = array())
32
+	{
33
+		$has_object = parent::_check_for_object($props_n_values, __CLASS__, $timezone, $date_formats);
34
+		return $has_object ? $has_object : new self($props_n_values, false, $timezone, $date_formats);
35
+	}
36
+
37
+
38
+	/**
39
+	 * @param array  $props_n_values  incoming values from the database
40
+	 * @param string $timezone        incoming timezone as set by the model.  If not set the timezone for
41
+	 *                                the website will be used.
42
+	 * @return EE_Attendee
43
+	 */
44
+	public static function new_instance_from_db($props_n_values = array(), $timezone = null)
45
+	{
46
+		return new self($props_n_values, true, $timezone);
47
+	}
48
+
49
+
50
+	/**
51
+	 * Sets the option's key value
52
+	 *
53
+	 * @param string $value
54
+	 * @return bool success
55
+	 */
56
+	public function set_value($value)
57
+	{
58
+		$this->set('QSO_value', $value);
59
+	}
60
+
61
+
62
+	/**
63
+	 * Sets the option's Display Text
64
+	 *
65
+	 * @param string $text
66
+	 * @return bool success
67
+	 */
68
+	public function set_desc($text)
69
+	{
70
+		$this->set('QSO_desc', $text);
71
+	}
72
+
73
+
74
+	/**
75
+	 * Sets the order for this option
76
+	 *
77
+	 * @access public
78
+	 * @param integer $order
79
+	 * @return bool      $success
80
+	 */
81
+	public function set_order($order)
82
+	{
83
+		$this->set('QSO_order', $order);
84
+	}
85
+
86
+
87
+	/**
88
+	 * Sets the ID of the related question
89
+	 *
90
+	 * @param int $question_ID
91
+	 * @return bool success
92
+	 */
93
+	public function set_question_ID($question_ID)
94
+	{
95
+		$this->set('QST_ID', $question_ID);
96
+	}
97
+
98
+
99
+	/**
100
+	 * Sets the option's opt_group
101
+	 *
102
+	 * @param string $text
103
+	 * @return bool success
104
+	 */
105
+	public function set_opt_group($text)
106
+	{
107
+		return $this->_QSO_opt_group = $text;
108
+	}
109
+
110
+
111
+	/**
112
+	 * Gets the option's key value
113
+	 *
114
+	 * @return string
115
+	 */
116
+	public function value()
117
+	{
118
+		return $this->get('QSO_value');
119
+	}
120
+
121
+
122
+	/**
123
+	 * Gets the option's display text
124
+	 *
125
+	 * @return string
126
+	 */
127
+	public function desc()
128
+	{
129
+		return $this->get('QSO_desc');
130
+	}
131
+
132
+
133
+	/**
134
+	 * Returns whether this option has been deleted or not
135
+	 *
136
+	 * @return boolean
137
+	 */
138
+	public function deleted()
139
+	{
140
+		return $this->get('QSO_deleted');
141
+	}
142
+
143
+
144
+	/**
145
+	 * Returns the order or the Question Option
146
+	 *
147
+	 * @access public
148
+	 * @return integer
149
+	 */
150
+	public function order()
151
+	{
152
+		return $this->get('QSO_option');
153
+	}
154
+
155
+
156
+	/**
157
+	 * Gets the related question's ID
158
+	 *
159
+	 * @return int
160
+	 */
161
+	public function question_ID()
162
+	{
163
+		return $this->get('QST_ID');
164
+	}
165
+
166
+
167
+	/**
168
+	 * Returns the question related to this question option
169
+	 *
170
+	 * @return EE_Question
171
+	 */
172
+	public function question()
173
+	{
174
+		return $this->get_first_related('Question');
175
+	}
176
+
177
+
178
+	/**
179
+	 * Gets the option's opt_group
180
+	 *
181
+	 * @return string
182
+	 */
183
+	public function opt_group()
184
+	{
185
+		return $this->_QSO_opt_group;
186
+	}
187
+
188
+	/**
189
+	 * Duplicates this question option. By default the new question option will be for the same question,
190
+	 * but that can be overriden by setting the 'QST_ID' option
191
+	 *
192
+	 * @param array $options {
193
+	 * @type int    $QST_ID  the QST_ID attribute of this question option, otherwise it will be for the same question
194
+	 *                       as the original
195
+	 */
196
+	public function duplicate($options = array())
197
+	{
198
+		$new_question_option = clone $this;
199
+		$new_question_option->set('QSO_ID', null);
200
+		if (array_key_exists(
201
+			'QST_ID',
202
+			$options
203
+		)) {// use array_key_exists instead of isset because NULL might be a valid value
204
+			$new_question_option->set_question_ID($options['QST_ID']);
205
+		}
206
+		$new_question_option->save();
207
+	}
208
+
209
+	/**
210
+	 * Gets the QSO_system value
211
+	 *
212
+	 * @return string|null
213
+	 */
214
+	public function system()
215
+	{
216
+		return $this->get('QSO_system');
217
+	}
218
+
219
+	/**
220
+	 * Sets QSO_system
221
+	 *
222
+	 * @param string $QSO_system
223
+	 * @return bool
224
+	 */
225
+	public function set_system($QSO_system)
226
+	{
227
+		return $this->set('QSO_system', $QSO_system);
228
+	}
229 229
 }
Please login to merge, or discard this patch.
core/db_classes/EE_Status.class.php 3 patches
Doc Comments   +5 added lines, -5 removed lines patch added patch discarded remove patch
@@ -52,7 +52,7 @@  discard block
 block discarded – undo
52 52
      * Sets code
53 53
      *
54 54
      * @param string $code
55
-     * @return boolean
55
+     * @return boolean|null
56 56
      */
57 57
     public function set_code($code)
58 58
     {
@@ -75,7 +75,7 @@  discard block
 block discarded – undo
75 75
      * Sets desc
76 76
      *
77 77
      * @param string $desc
78
-     * @return boolean
78
+     * @return boolean|null
79 79
      */
80 80
     public function set_desc($desc)
81 81
     {
@@ -98,7 +98,7 @@  discard block
 block discarded – undo
98 98
      * Sets type
99 99
      *
100 100
      * @param string $type
101
-     * @return boolean
101
+     * @return boolean|null
102 102
      */
103 103
     public function set_type($type)
104 104
     {
@@ -121,7 +121,7 @@  discard block
 block discarded – undo
121 121
      * Sets can_edit
122 122
      *
123 123
      * @param boolean $can_edit
124
-     * @return boolean
124
+     * @return boolean|null
125 125
      */
126 126
     public function set_can_edit($can_edit)
127 127
     {
@@ -144,7 +144,7 @@  discard block
 block discarded – undo
144 144
      * Sets open
145 145
      *
146 146
      * @param boolean $open
147
-     * @return boolean
147
+     * @return boolean|null
148 148
      */
149 149
     public function set_open($open)
150 150
     {
Please login to merge, or discard this patch.
Indentation   +138 added lines, -138 removed lines patch added patch discarded remove patch
@@ -12,142 +12,142 @@
 block discarded – undo
12 12
 class EE_Status extends EE_Base_Class
13 13
 {
14 14
 
15
-    /**
16
-     * @param array $props_n_values
17
-     * @return EE_Status
18
-     */
19
-    public static function new_instance($props_n_values = array())
20
-    {
21
-        $has_object = parent::_check_for_object($props_n_values, __CLASS__);
22
-        return $has_object ? $has_object : new self($props_n_values);
23
-    }
24
-
25
-
26
-    /**
27
-     * @param array $props_n_values
28
-     * @return EE_Status
29
-     */
30
-    public static function new_instance_from_db($props_n_values = array())
31
-    {
32
-        return new self($props_n_values, true);
33
-    }
34
-
35
-
36
-    /**
37
-     * Gets code
38
-     *
39
-     * @param bool   $plural
40
-     * @param string $schema
41
-     * @return string
42
-     */
43
-    public function code($plural = false, $schema = 'upper')
44
-    {
45
-        $id = $this->get('STS_ID');
46
-        $code = EEM_Status::instance()->localized_status(array($id => $this->get('STS_code')), $plural, $schema);
47
-        return $code[ $id ];
48
-    }
49
-
50
-
51
-    /**
52
-     * Sets code
53
-     *
54
-     * @param string $code
55
-     * @return boolean
56
-     */
57
-    public function set_code($code)
58
-    {
59
-        $this->set('STS_code', $code);
60
-    }
61
-
62
-
63
-    /**
64
-     * Gets desc
65
-     *
66
-     * @return string
67
-     */
68
-    public function desc()
69
-    {
70
-        return $this->get('STS_desc');
71
-    }
72
-
73
-
74
-    /**
75
-     * Sets desc
76
-     *
77
-     * @param string $desc
78
-     * @return boolean
79
-     */
80
-    public function set_desc($desc)
81
-    {
82
-        $this->set('STS_desc', $desc);
83
-    }
84
-
85
-
86
-    /**
87
-     * Gets type
88
-     *
89
-     * @return string
90
-     */
91
-    public function type()
92
-    {
93
-        return $this->get('STS_type');
94
-    }
95
-
96
-
97
-    /**
98
-     * Sets type
99
-     *
100
-     * @param string $type
101
-     * @return boolean
102
-     */
103
-    public function set_type($type)
104
-    {
105
-        $this->set('STS_type', $type);
106
-    }
107
-
108
-
109
-    /**
110
-     * Gets can_edit
111
-     *
112
-     * @return boolean
113
-     */
114
-    public function can_edit()
115
-    {
116
-        return $this->get('STS_can_edit');
117
-    }
118
-
119
-
120
-    /**
121
-     * Sets can_edit
122
-     *
123
-     * @param boolean $can_edit
124
-     * @return boolean
125
-     */
126
-    public function set_can_edit($can_edit)
127
-    {
128
-        $this->set('STS_can_edit', $can_edit);
129
-    }
130
-
131
-
132
-    /**
133
-     * Gets open
134
-     *
135
-     * @return boolean
136
-     */
137
-    public function open()
138
-    {
139
-        return $this->get('STS_open');
140
-    }
141
-
142
-
143
-    /**
144
-     * Sets open
145
-     *
146
-     * @param boolean $open
147
-     * @return boolean
148
-     */
149
-    public function set_open($open)
150
-    {
151
-        $this->set('STS_open', $open);
152
-    }
15
+	/**
16
+	 * @param array $props_n_values
17
+	 * @return EE_Status
18
+	 */
19
+	public static function new_instance($props_n_values = array())
20
+	{
21
+		$has_object = parent::_check_for_object($props_n_values, __CLASS__);
22
+		return $has_object ? $has_object : new self($props_n_values);
23
+	}
24
+
25
+
26
+	/**
27
+	 * @param array $props_n_values
28
+	 * @return EE_Status
29
+	 */
30
+	public static function new_instance_from_db($props_n_values = array())
31
+	{
32
+		return new self($props_n_values, true);
33
+	}
34
+
35
+
36
+	/**
37
+	 * Gets code
38
+	 *
39
+	 * @param bool   $plural
40
+	 * @param string $schema
41
+	 * @return string
42
+	 */
43
+	public function code($plural = false, $schema = 'upper')
44
+	{
45
+		$id = $this->get('STS_ID');
46
+		$code = EEM_Status::instance()->localized_status(array($id => $this->get('STS_code')), $plural, $schema);
47
+		return $code[ $id ];
48
+	}
49
+
50
+
51
+	/**
52
+	 * Sets code
53
+	 *
54
+	 * @param string $code
55
+	 * @return boolean
56
+	 */
57
+	public function set_code($code)
58
+	{
59
+		$this->set('STS_code', $code);
60
+	}
61
+
62
+
63
+	/**
64
+	 * Gets desc
65
+	 *
66
+	 * @return string
67
+	 */
68
+	public function desc()
69
+	{
70
+		return $this->get('STS_desc');
71
+	}
72
+
73
+
74
+	/**
75
+	 * Sets desc
76
+	 *
77
+	 * @param string $desc
78
+	 * @return boolean
79
+	 */
80
+	public function set_desc($desc)
81
+	{
82
+		$this->set('STS_desc', $desc);
83
+	}
84
+
85
+
86
+	/**
87
+	 * Gets type
88
+	 *
89
+	 * @return string
90
+	 */
91
+	public function type()
92
+	{
93
+		return $this->get('STS_type');
94
+	}
95
+
96
+
97
+	/**
98
+	 * Sets type
99
+	 *
100
+	 * @param string $type
101
+	 * @return boolean
102
+	 */
103
+	public function set_type($type)
104
+	{
105
+		$this->set('STS_type', $type);
106
+	}
107
+
108
+
109
+	/**
110
+	 * Gets can_edit
111
+	 *
112
+	 * @return boolean
113
+	 */
114
+	public function can_edit()
115
+	{
116
+		return $this->get('STS_can_edit');
117
+	}
118
+
119
+
120
+	/**
121
+	 * Sets can_edit
122
+	 *
123
+	 * @param boolean $can_edit
124
+	 * @return boolean
125
+	 */
126
+	public function set_can_edit($can_edit)
127
+	{
128
+		$this->set('STS_can_edit', $can_edit);
129
+	}
130
+
131
+
132
+	/**
133
+	 * Gets open
134
+	 *
135
+	 * @return boolean
136
+	 */
137
+	public function open()
138
+	{
139
+		return $this->get('STS_open');
140
+	}
141
+
142
+
143
+	/**
144
+	 * Sets open
145
+	 *
146
+	 * @param boolean $open
147
+	 * @return boolean
148
+	 */
149
+	public function set_open($open)
150
+	{
151
+		$this->set('STS_open', $open);
152
+	}
153 153
 }
Please login to merge, or discard this patch.
Spacing   +1 added lines, -1 removed lines patch added patch discarded remove patch
@@ -44,7 +44,7 @@
 block discarded – undo
44 44
     {
45 45
         $id = $this->get('STS_ID');
46 46
         $code = EEM_Status::instance()->localized_status(array($id => $this->get('STS_code')), $plural, $schema);
47
-        return $code[ $id ];
47
+        return $code[$id];
48 48
     }
49 49
 
50 50
 
Please login to merge, or discard this patch.
core/db_classes/EE_Term.class.php 3 patches
Doc Comments   +2 added lines, -2 removed lines patch added patch discarded remove patch
@@ -66,7 +66,7 @@  discard block
 block discarded – undo
66 66
      * Sets name
67 67
      *
68 68
      * @param string $name
69
-     * @return boolean
69
+     * @return boolean|null
70 70
      */
71 71
     public function set_name($name)
72 72
     {
@@ -89,7 +89,7 @@  discard block
 block discarded – undo
89 89
      * Sets slug
90 90
      *
91 91
      * @param string $slug
92
-     * @return boolean
92
+     * @return boolean|null
93 93
      */
94 94
     public function set_slug($slug)
95 95
     {
Please login to merge, or discard this patch.
Indentation   +70 added lines, -70 removed lines patch added patch discarded remove patch
@@ -12,87 +12,87 @@
 block discarded – undo
12 12
 class EE_Term extends EE_Base_Class
13 13
 {
14 14
 
15
-    public $post_type;
15
+	public $post_type;
16 16
 
17
-    /**
18
-     * Sets some dynamic defaults
19
-     *
20
-     * @param array  $fieldValues
21
-     * @param bool   $bydb
22
-     * @param string $timezone
23
-     */
24
-    protected function __construct($fieldValues = array(), $bydb = false, $timezone = '')
25
-    {
26
-        if (! isset($fieldValues['slug'])) {
27
-            $fieldValues['slug'] = $fieldValues['name'];
28
-        }
29
-        parent::__construct($fieldValues, $bydb, $timezone);
30
-    }
17
+	/**
18
+	 * Sets some dynamic defaults
19
+	 *
20
+	 * @param array  $fieldValues
21
+	 * @param bool   $bydb
22
+	 * @param string $timezone
23
+	 */
24
+	protected function __construct($fieldValues = array(), $bydb = false, $timezone = '')
25
+	{
26
+		if (! isset($fieldValues['slug'])) {
27
+			$fieldValues['slug'] = $fieldValues['name'];
28
+		}
29
+		parent::__construct($fieldValues, $bydb, $timezone);
30
+	}
31 31
 
32 32
 
33
-    /**
34
-     * @param array $props_n_values
35
-     * @return EE_Term|mixed
36
-     */
37
-    public static function new_instance($props_n_values = array())
38
-    {
39
-        $has_object = parent::_check_for_object($props_n_values, __CLASS__);
40
-        return $has_object ? $has_object : new self($props_n_values);
41
-    }
33
+	/**
34
+	 * @param array $props_n_values
35
+	 * @return EE_Term|mixed
36
+	 */
37
+	public static function new_instance($props_n_values = array())
38
+	{
39
+		$has_object = parent::_check_for_object($props_n_values, __CLASS__);
40
+		return $has_object ? $has_object : new self($props_n_values);
41
+	}
42 42
 
43 43
 
44
-    /**
45
-     * @param array $props_n_values
46
-     * @return EE_Term
47
-     */
48
-    public static function new_instance_from_db($props_n_values = array())
49
-    {
50
-        return new self($props_n_values, true);
51
-    }
44
+	/**
45
+	 * @param array $props_n_values
46
+	 * @return EE_Term
47
+	 */
48
+	public static function new_instance_from_db($props_n_values = array())
49
+	{
50
+		return new self($props_n_values, true);
51
+	}
52 52
 
53 53
 
54
-    /**
55
-     * Gets name
56
-     *
57
-     * @return string
58
-     */
59
-    public function name()
60
-    {
61
-        return $this->get('name');
62
-    }
54
+	/**
55
+	 * Gets name
56
+	 *
57
+	 * @return string
58
+	 */
59
+	public function name()
60
+	{
61
+		return $this->get('name');
62
+	}
63 63
 
64 64
 
65
-    /**
66
-     * Sets name
67
-     *
68
-     * @param string $name
69
-     * @return boolean
70
-     */
71
-    public function set_name($name)
72
-    {
73
-        $this->set('name', $name);
74
-    }
65
+	/**
66
+	 * Sets name
67
+	 *
68
+	 * @param string $name
69
+	 * @return boolean
70
+	 */
71
+	public function set_name($name)
72
+	{
73
+		$this->set('name', $name);
74
+	}
75 75
 
76 76
 
77
-    /**
78
-     * Gets slug
79
-     *
80
-     * @return string
81
-     */
82
-    public function slug()
83
-    {
84
-        return $this->get('slug');
85
-    }
77
+	/**
78
+	 * Gets slug
79
+	 *
80
+	 * @return string
81
+	 */
82
+	public function slug()
83
+	{
84
+		return $this->get('slug');
85
+	}
86 86
 
87 87
 
88
-    /**
89
-     * Sets slug
90
-     *
91
-     * @param string $slug
92
-     * @return boolean
93
-     */
94
-    public function set_slug($slug)
95
-    {
96
-        $this->set('slug', $slug);
97
-    }
88
+	/**
89
+	 * Sets slug
90
+	 *
91
+	 * @param string $slug
92
+	 * @return boolean
93
+	 */
94
+	public function set_slug($slug)
95
+	{
96
+		$this->set('slug', $slug);
97
+	}
98 98
 }
Please login to merge, or discard this patch.
Spacing   +1 added lines, -1 removed lines patch added patch discarded remove patch
@@ -23,7 +23,7 @@
 block discarded – undo
23 23
      */
24 24
     protected function __construct($fieldValues = array(), $bydb = false, $timezone = '')
25 25
     {
26
-        if (! isset($fieldValues['slug'])) {
26
+        if ( ! isset($fieldValues['slug'])) {
27 27
             $fieldValues['slug'] = $fieldValues['name'];
28 28
         }
29 29
         parent::__construct($fieldValues, $bydb, $timezone);
Please login to merge, or discard this patch.