Completed
Branch BUG/11268/session-ticket-relea... (71e39e)
by
unknown
27:50 queued 13:47
created
core/libraries/payment_methods/EE_PMT_Base.lib.php 1 patch
Indentation   +722 added lines, -722 removed lines patch added patch discarded remove patch
@@ -21,728 +21,728 @@
 block discarded – undo
21 21
 abstract class EE_PMT_Base
22 22
 {
23 23
 
24
-    const onsite = 'on-site';
25
-    const offsite = 'off-site';
26
-    const offline = 'off-line';
27
-
28
-    /**
29
-     * @var EE_Payment_Method
30
-     */
31
-    protected $_pm_instance = NULL;
32
-
33
-    /**
34
-     * @var boolean
35
-     */
36
-    protected $_requires_https = FALSE;
37
-
38
-    /**
39
-     * @var boolean
40
-     */
41
-    protected $_has_billing_form;
42
-
43
-    /**
44
-     * @var EE_Gateway
45
-     */
46
-    protected $_gateway = NULL;
47
-
48
-    /**
49
-     * @var EE_Payment_Method_Form
50
-     */
51
-    protected $_settings_form = NULL;
52
-
53
-    /**
54
-     * @var EE_Form_Section_Proper
55
-     */
56
-    protected $_billing_form = NULL;
57
-
58
-    /**
59
-     * @var boolean
60
-     */
61
-    protected $_cache_billing_form = TRUE;
62
-
63
-    /**
64
-     * String of the absolute path to the folder containing this file, with a trailing slash.
65
-     * eg '/public_html/wp-site/wp-content/plugins/event-espresso/payment_methods/Invoice/'
66
-     * @var string
67
-     */
68
-    protected $_file_folder = NULL;
69
-
70
-    /**
71
-     * String to the absolute URL to this file (useful for getting its web-accessible resources
72
-     * like images, js, or css)
73
-     * @var string
74
-     */
75
-    protected $_file_url = NULL;
76
-
77
-    /**
78
-     * Pretty name for the payment method
79
-     * @var string
80
-     */
81
-    protected $_pretty_name = NULL;
82
-
83
-    /**
84
-     *
85
-     * @var string
86
-     */
87
-    protected $_default_button_url = NULL;
88
-
89
-    /**
90
-     *
91
-     * @var string
92
-     */
93
-    protected $_default_description = NULL;
94
-
95
-
96
-    /**
97
-     *
98
-     * @param EE_Payment_Method $pm_instance
99
-     * @throws EE_Error
100
-     * @return EE_PMT_Base
101
-     */
102
-    function __construct($pm_instance = NULL)
103
-    {
104
-        if ($pm_instance instanceof EE_Payment_Method) {
105
-            $this->set_instance($pm_instance);
106
-        }
107
-        if ($this->_gateway) {
108
-            $this->_gateway->set_payment_model(EEM_Payment::instance());
109
-            $this->_gateway->set_payment_log(EEM_Change_Log::instance());
110
-            $this->_gateway->set_template_helper(new EEH_Template());
111
-            $this->_gateway->set_line_item_helper(new EEH_Line_Item());
112
-            $this->_gateway->set_money_helper(new EEH_Money());
113
-            $this->_gateway->set_gateway_data_formatter(new GatewayDataFormatter());
114
-            $this->_gateway->set_unsupported_character_remover(new AsciiOnly());
115
-            do_action('AHEE__EE_PMT_Base___construct__done_initializing_gateway_class', $this, $this->_gateway);
116
-        }
117
-        if (!isset($this->_has_billing_form)) {
118
-            // by default, On Site gateways have a billing form
119
-            if ($this->payment_occurs() == EE_PMT_Base::onsite) {
120
-                $this->set_has_billing_form(true);
121
-            } else {
122
-                $this->set_has_billing_form(false);
123
-            }
124
-        }
125
-
126
-        if (!$this->_pretty_name) {
127
-            throw new EE_Error(sprintf(__("You must set the pretty name for the Payment Method Type in the constructor (_pretty_name), and please make it internationalized", "event_espresso")));
128
-        }
129
-        //if the child didn't specify a default button, use the credit card one
130
-        if ($this->_default_button_url === NULL) {
131
-            $this->_default_button_url = EE_PLUGIN_DIR_URL . 'payment_methods' . DS . 'pay-by-credit-card.png';
132
-        }
133
-    }
134
-
135
-
136
-    /**
137
-     * @param boolean $has_billing_form
138
-     */
139
-    public function set_has_billing_form($has_billing_form)
140
-    {
141
-        $this->_has_billing_form = filter_var($has_billing_form, FILTER_VALIDATE_BOOLEAN);
142
-    }
143
-
144
-
145
-    /**
146
-     * sets the file_folder property
147
-     */
148
-    protected function _set_file_folder()
149
-    {
150
-        $reflector = new ReflectionClass(get_class($this));
151
-        $fn = $reflector->getFileName();
152
-        $this->_file_folder = dirname($fn) . DS;
153
-    }
154
-
155
-
156
-    /**
157
-     * sets the file URL with a trailing slash for this PMT
158
-     */
159
-    protected function _set_file_url()
160
-    {
161
-        $plugins_dir_fixed = str_replace('\\', DS, WP_PLUGIN_DIR);
162
-        $file_folder_fixed = str_replace('\\', DS, $this->file_folder());
163
-        $file_path = str_replace($plugins_dir_fixed, WP_PLUGIN_URL, $file_folder_fixed);
164
-        $this->_file_url = $file_path;
165
-    }
166
-
167
-    /**
168
-     * Gets the default description on all payment methods of this type
169
-     * @return string
170
-     */
171
-    public function default_description()
172
-    {
173
-        return $this->_default_description;
174
-    }
175
-
176
-
177
-    /**
178
-     * Returns the folder containing the PMT child class, with a trailing slash
179
-     * @return string
180
-     */
181
-    public function file_folder()
182
-    {
183
-        if (!$this->_file_folder) {
184
-            $this->_set_file_folder();
185
-        }
186
-        return $this->_file_folder;
187
-    }
188
-
189
-
190
-    /**
191
-     * @return string
192
-     */
193
-    public function file_url()
194
-    {
195
-        if (!$this->_file_url) {
196
-            $this->_set_file_url();
197
-        }
198
-        return $this->_file_url;
199
-    }
200
-
201
-
202
-    /**
203
-     * Sets the payment method instance this payment method type is for.
204
-     * Its important teh payment method instance is set before
205
-     * @param EE_Payment_Method $payment_method_instance
206
-     */
207
-    function set_instance($payment_method_instance)
208
-    {
209
-        $this->_pm_instance = $payment_method_instance;
210
-        //if they have already requested the settings form, make sure its
211
-        //data matches this model object
212
-        if ($this->_settings_form) {
213
-            $this->settings_form()->populate_model_obj($payment_method_instance);
214
-        }
215
-        if ($this->_gateway && $this->_gateway instanceof EE_Gateway) {
216
-            $this->_gateway->set_settings($payment_method_instance->settings_array());
217
-        }
218
-    }
219
-
220
-
221
-    /**
222
-     * Gets teh form for displaying to admins where they setup the payment method
223
-     * @return EE_Payment_Method_Form
224
-     */
225
-    function settings_form()
226
-    {
227
-        if (!$this->_settings_form) {
228
-            $this->_settings_form = $this->generate_new_settings_form();
229
-            $this->_settings_form->set_payment_method_type($this);
230
-            //if we have already assigned a model object to this pmt, make
231
-            //sure its reflected in teh form we just generated
232
-            if ($this->_pm_instance) {
233
-                $this->_settings_form->populate_model_obj($this->_pm_instance);
234
-            }
235
-        }
236
-        return $this->_settings_form;
237
-    }
238
-
239
-
240
-    /**
241
-     * Gets the form for all the settings related to this payment method type
242
-     * @return EE_Payment_Method_Form
243
-     */
244
-    abstract function generate_new_settings_form();
245
-
246
-
247
-    /**
248
-     * Sets the form for settings. This may be useful if we have already received
249
-     * a form submission and have form data it in, and want to use it anytime we're showing
250
-     * this payment method type's settings form later in the request
251
-     * @param EE_Payment_Method_Form $form
252
-     */
253
-    public function set_settings_form($form)
254
-    {
255
-        $this->_settings_form = $form;
256
-    }
257
-
258
-
259
-    /**
260
-     * @return boolean
261
-     */
262
-    public function has_billing_form()
263
-    {
264
-        return $this->_has_billing_form;
265
-    }
266
-
267
-
268
-    /**
269
-     * Gets the form for displaying to attendees where they can enter their billing info
270
-     * which will be sent to teh gateway (can be null)
271
-     *
272
-     * @param \EE_Transaction $transaction
273
-     * @param array $extra_args
274
-     * @return \EE_Billing_Attendee_Info_Form|\EE_Billing_Info_Form|null
275
-     */
276
-    public function billing_form(EE_Transaction $transaction = NULL, $extra_args = array())
277
-    {
278
-        // has billing form already been regenerated ? or overwrite cache?
279
-        if (!$this->_billing_form instanceof EE_Billing_Info_Form || !$this->_cache_billing_form) {
280
-            $this->_billing_form = $this->generate_new_billing_form($transaction, $extra_args);
281
-        }
282
-        //if we know who the attendee is, and this is a billing form
283
-        //that uses attendee info, populate it
284
-        if (
285
-        apply_filters(
286
-            'FHEE__populate_billing_form_fields_from_attendee',
287
-            (
288
-                $this->_billing_form instanceof EE_Billing_Attendee_Info_Form
289
-                && $transaction instanceof EE_Transaction
290
-                && $transaction->primary_registration() instanceof EE_Registration
291
-                && $transaction->primary_registration()->attendee() instanceof EE_Attendee
292
-            ),
293
-            $this->_billing_form,
294
-            $transaction
295
-        )
296
-        ) {
297
-            $this->_billing_form->populate_from_attendee($transaction->primary_registration()->attendee());
298
-        }
299
-        return $this->_billing_form;
300
-    }
301
-
302
-
303
-    /**
304
-     * Creates the billing form for this payment method type
305
-     * @param \EE_Transaction $transaction
306
-     * @return \EE_Billing_Info_Form
307
-     */
308
-    abstract function generate_new_billing_form(EE_Transaction $transaction = NULL);
309
-
310
-
311
-    /**
312
-     * apply_billing_form_debug_settings
313
-     * applies debug data to the form
314
-     *
315
-     * @param \EE_Billing_Info_Form $billing_form
316
-     * @return \EE_Billing_Info_Form
317
-     */
318
-    public function apply_billing_form_debug_settings(EE_Billing_Info_Form $billing_form)
319
-    {
320
-        return $billing_form;
321
-    }
322
-
323
-
324
-    /**
325
-     * Sets the billing form for this payment method type. You may want to use this
326
-     * if you have form
327
-     * @param EE_Payment_Method $form
328
-     */
329
-    public function set_billing_form($form)
330
-    {
331
-        $this->_billing_form = $form;
332
-    }
333
-
334
-
335
-    /**
336
-     * Returns whether or not this payment method requires HTTPS to be used
337
-     * @return boolean
338
-     */
339
-    function requires_https()
340
-    {
341
-        return $this->_requires_https;
342
-    }
343
-
344
-
345
-    /**
346
-     *
347
-     * @param EE_Transaction $transaction
348
-     * @param float $amount
349
-     * @param EE_Billing_Info_Form $billing_info
350
-     * @param string $return_url
351
-     * @param string $fail_url
352
-     * @param string $method
353
-     * @param bool $by_admin
354
-     * @return EE_Payment
355
-     * @throws EE_Error
356
-     */
357
-    function process_payment(EE_Transaction $transaction, $amount = null, $billing_info = null, $return_url = null, $fail_url = '', $method = 'CART', $by_admin = false)
358
-    {
359
-        // @todo: add surcharge for the payment method, if any
360
-        if ($this->_gateway) {
361
-            //there is a gateway, so we're going to make a payment object
362
-            //but wait! do they already have a payment in progress that we thought was failed?
363
-            $duplicate_properties = array(
364
-                'STS_ID' => EEM_Payment::status_id_failed,
365
-                'TXN_ID' => $transaction->ID(),
366
-                'PMD_ID' => $this->_pm_instance->ID(),
367
-                'PAY_source' => $method,
368
-                'PAY_amount' => $amount !== null ? $amount : $transaction->remaining(),
369
-                'PAY_gateway_response' => null,
370
-            );
371
-            $payment = EEM_Payment::instance()->get_one(array($duplicate_properties));
372
-            //if we didn't already have a payment in progress for the same thing,
373
-            //then we actually want to make a new payment
374
-            if (!$payment instanceof EE_Payment) {
375
-                $payment = EE_Payment::new_instance(
376
-                    array_merge(
377
-                        $duplicate_properties,
378
-                        array(
379
-                            'PAY_timestamp' => time(),
380
-                            'PAY_txn_id_chq_nmbr' => null,
381
-                            'PAY_po_number' => null,
382
-                            'PAY_extra_accntng' => null,
383
-                            'PAY_details' => null,
384
-                        )
385
-                    )
386
-                );
387
-            }
388
-            //make sure the payment has been saved to show we started it, and so it has an ID should the gateway try to log it
389
-            $payment->save();
390
-            $billing_values = $this->_get_billing_values_from_form($billing_info);
391
-
392
-            //  Offsite Gateway
393
-            if ($this->_gateway instanceof EE_Offsite_Gateway) {
394
-
395
-                $payment = $this->_gateway->set_redirection_info(
396
-                    $payment,
397
-                    $billing_values,
398
-                    $return_url,
399
-                    EE_Config::instance()->core->txn_page_url(
400
-                        array(
401
-                            'e_reg_url_link' => $transaction->primary_registration()->reg_url_link(),
402
-                            'ee_payment_method' => $this->_pm_instance->slug()
403
-                        )
404
-                    ),
405
-                    $fail_url
406
-                );
407
-                $payment->save();
408
-                //  Onsite Gateway
409
-            } elseif ($this->_gateway instanceof EE_Onsite_Gateway) {
410
-
411
-                $payment = $this->_gateway->do_direct_payment($payment, $billing_values);
412
-                $payment->save();
413
-
414
-            } else {
415
-                throw new EE_Error(
416
-                    sprintf(
417
-                        __('Gateway for payment method type "%s" is "%s", not a subclass of either EE_Offsite_Gateway or EE_Onsite_Gateway, or null (to indicate NO gateway)', 'event_espresso'),
418
-                        get_class($this),
419
-                        gettype($this->_gateway)
420
-                    )
421
-                );
422
-            }
423
-
424
-        } else {
425
-            // no gateway provided
426
-            // there is no payment. Must be an offline gateway
427
-            // create a payment object anyways, but dont save it
428
-            $payment = EE_Payment::new_instance(
429
-                array(
430
-                    'STS_ID' => EEM_Payment::status_id_pending,
431
-                    'TXN_ID' => $transaction->ID(),
432
-                    'PMD_ID' => $transaction->payment_method_ID(),
433
-                    'PAY_amount' => 0.00,
434
-                    'PAY_timestamp' => time(),
435
-                )
436
-            );
437
-
438
-        }
439
-
440
-        // if there is billing info, clean it and save it now
441
-        if ($billing_info instanceof EE_Billing_Attendee_Info_Form) {
442
-            $this->_save_billing_info_to_attendee($billing_info, $transaction);
443
-        }
444
-
445
-        return $payment;
446
-    }
447
-
448
-    /**
449
-     * Gets the values we want to pass onto the gateway. Normally these
450
-     * are just the 'pretty' values, but there may be times the data may need
451
-     * a  little massaging. Proper subsections will become arrays of inputs
452
-     * @param EE_Billing_Info_Form $billing_form
453
-     * @return array
454
-     */
455
-    protected function _get_billing_values_from_form($billing_form)
456
-    {
457
-        if ($billing_form instanceof EE_Form_Section_Proper) {
458
-            return $billing_form->input_pretty_values(true);
459
-        } else {
460
-            return NULL;
461
-        }
462
-    }
463
-
464
-
465
-    /**
466
-     * Handles an instant payment notification when the transaction is known (by default).
467
-     * @param array $req_data
468
-     * @param EE_Transaction $transaction
469
-     * @return EE_Payment
470
-     * @throws EE_Error
471
-     */
472
-    public function handle_ipn($req_data, $transaction)
473
-    {
474
-        $transaction = EEM_Transaction::instance()->ensure_is_obj($transaction);
475
-        if (!$this->_gateway instanceof EE_Offsite_Gateway) {
476
-            throw new EE_Error(sprintf(__("Could not handle IPN because '%s' is not an offsite gateway", "event_espresso"), print_r($this->_gateway, TRUE)));
477
-
478
-        }
479
-        $payment = $this->_gateway->handle_payment_update($req_data, $transaction);
480
-        return $payment;
481
-    }
482
-
483
-
484
-    /**
485
-     * Saves the billing info onto the attendee of the primary registrant on this transaction, and
486
-     * cleans it first.
487
-     * @param EE_Billing_Attendee_Info_Form $billing_form
488
-     * @param EE_Transaction $transaction
489
-     * @return boolean success
490
-     */
491
-    protected function _save_billing_info_to_attendee($billing_form, $transaction)
492
-    {
493
-        if (!$transaction || !$transaction instanceof EE_Transaction) {
494
-            EE_Error::add_error(__("Cannot save billing info because no transaction was specified", "event_espresso"), __FILE__, __FUNCTION__, __LINE__);
495
-            return false;
496
-        }
497
-        $primary_reg = $transaction->primary_registration();
498
-        if (!$primary_reg) {
499
-            EE_Error::add_error(__("Cannot save billing info because the transaction has no primary registration", "event_espresso"), __FILE__, __FUNCTION__, __LINE__);
500
-            return false;
501
-        }
502
-        $attendee = $primary_reg->attendee();
503
-        if (!$attendee) {
504
-            EE_Error::add_error(__("Cannot save billing info because the transaction's primary registration has no attendee!", "event_espresso"), __FILE__, __FUNCTION__, __LINE__);
505
-            return false;
506
-        }
507
-        return $attendee->save_and_clean_billing_info_for_payment_method($billing_form, $transaction->payment_method());
508
-
509
-    }
510
-
511
-
512
-    /**
513
-     * Gets the payment this IPN is for. Children may often want to
514
-     * override this to inspect the request
515
-     * @param EE_Transaction $transaction
516
-     * @param array $req_data
517
-     * @return EE_Payment
518
-     */
519
-    protected function find_payment_for_ipn(EE_Transaction $transaction, $req_data = array())
520
-    {
521
-        return $transaction->last_payment();
522
-    }
523
-
524
-
525
-    /**
526
-     * In case generic code cannot provide the payment processor with a specific payment method
527
-     * and transaction, it will try calling this method on each activate payment method.
528
-     * If the payment method is able to identify the request as being for it, it should fetch
529
-     * the payment its for and return it. If not, it should throw an EE_Error to indicate it cannot
530
-     * handle the IPN
531
-     * @param array $req_data
532
-     * @return EE_Payment only if this payment method can find the info its needs from $req_data
533
-     * and identifies the IPN as being for this payment method (not just fo ra payment method of this type)
534
-     * @throws EE_Error
535
-     */
536
-    public function handle_unclaimed_ipn($req_data = array())
537
-    {
538
-        throw new EE_Error(sprintf(__("Payment Method '%s' cannot handle unclaimed IPNs", "event_espresso"), get_class($this)));
539
-    }
540
-
541
-
542
-    /**
543
-     * Logic to be accomplished when the payment attempt is complete.
544
-     * Most payment methods don't need to do anything at this point; but some, like Mijireh, do.
545
-     * (Mijireh is an offsite gateway which doesn't send an IPN. So when the user returns to EE from
546
-     * mijireh, this method needs to be called so the Mijireh PM can ping Mijireh to know the status
547
-     * of the payment). Fed a transaction because it's always assumed to be the last payment that
548
-     * we're dealing with. Returns that last payment (if there is one)
549
-     *
550
-     * @param EE_Transaction $transaction
551
-     * @return EE_Payment
552
-     */
553
-    public function finalize_payment_for($transaction)
554
-    {
555
-        return $transaction->last_payment();
556
-    }
557
-
558
-
559
-    /**
560
-     * Whether or not this payment method's gateway supports sending refund requests
561
-     * @return boolean
562
-     */
563
-    public function supports_sending_refunds()
564
-    {
565
-        if ($this->_gateway && $this->_gateway instanceof EE_Gateway) {
566
-            return $this->_gateway->supports_sending_refunds();
567
-        } else {
568
-            return false;
569
-        }
570
-    }
571
-
572
-
573
-    /**
574
-     *
575
-     * @param EE_Payment $payment
576
-     * @param array $refund_info
577
-     * @throws EE_Error
578
-     * @return EE_Payment
579
-     */
580
-    public function process_refund(EE_Payment $payment, $refund_info = array())
581
-    {
582
-        if ($this->_gateway && $this->_gateway instanceof EE_Gateway) {
583
-            return $this->_gateway->do_direct_refund($payment, $refund_info);
584
-        } else {
585
-            throw new EE_Error(
586
-                sprintf(
587
-                    __('Payment Method Type "%s" does not support sending refund requests', 'event_espresso'),
588
-                    get_class($this)
589
-                )
590
-            );
591
-        }
592
-    }
593
-
594
-
595
-    /**
596
-     * Returns one the class's constants onsite,offsite, or offline, depending on this
597
-     * payment method's gateway.
598
-     * @return string
599
-     * @throws EE_Error
600
-     */
601
-    public function payment_occurs()
602
-    {
603
-        if (!$this->_gateway) {
604
-            return EE_PMT_Base::offline;
605
-        } elseif ($this->_gateway instanceof EE_Onsite_Gateway) {
606
-            return EE_PMT_Base::onsite;
607
-        } elseif ($this->_gateway instanceof EE_Offsite_Gateway) {
608
-            return EE_PMT_Base::offsite;
609
-        } else {
610
-            throw new EE_Error(sprintf(__("Payment method type '%s's gateway isn't an instance of EE_Onsite_Gateway, EE_Offsite_Gateway, or null. It must be one of those", "event_espresso"), get_class($this)));
611
-        }
612
-    }
613
-
614
-
615
-    /**
616
-     * For adding any html output ab ove the payment overview.
617
-     * Many gateways won't want ot display anything, so this function just returns an empty string.
618
-     * Other gateways may want to override this, such as offline gateways.
619
-     * @param EE_Payment $payment
620
-     * @return string
621
-     */
622
-    public function payment_overview_content(EE_Payment $payment)
623
-    {
624
-        return EEH_Template::display_template(EE_LIBRARIES . 'payment_methods' . DS . 'templates' . DS . 'payment_details_content.template.php', array('payment_method' => $this->_pm_instance, 'payment' => $payment), true);
625
-    }
626
-
627
-
628
-    /**
629
-     * @return array where keys are the help tab name,
630
-     * values are: array {
631
-     * @type string $title i18n name for the help tab
632
-     * @type string $filename name of the file located in ./help_tabs/ (ie, in a folder next to this file)
633
-     * @type array $template_args any arguments you want passed to the template file while rendering.
634
-     *                Keys will be variable names and values with be their values.
635
-     */
636
-    public function help_tabs_config()
637
-    {
638
-        return array();
639
-    }
640
-
641
-
642
-    /**
643
-     * The system name for this PMT (eg AIM, Paypal_Pro, Invoice... what gets put into
644
-     * the payment method's table's PMT_type column)
645
-     * @return string
646
-     */
647
-    public function system_name()
648
-    {
649
-        $classname = get_class($this);
650
-        return str_replace("EE_PMT_", '', $classname);
651
-    }
652
-
653
-
654
-    /**
655
-     * A pretty i18n version of the PMT name
656
-     * @return string
657
-     */
658
-    public function pretty_name()
659
-    {
660
-        return $this->_pretty_name;
661
-    }
662
-
663
-
664
-    /**
665
-     * Gets the default absolute URL to the payment method type's button
666
-     * @return string
667
-     */
668
-    public function default_button_url()
669
-    {
670
-        return $this->_default_button_url;
671
-    }
672
-
673
-
674
-    /**
675
-     * Gets the gateway used by this payment method (if any)
676
-     * @return EE_Gateway
677
-     */
678
-    public function get_gateway()
679
-    {
680
-        return $this->_gateway;
681
-    }
682
-
683
-
684
-    /**
685
-     * @return string html for the link to a help tab
686
-     */
687
-    public function get_help_tab_link()
688
-    {
689
-        return EEH_Template::get_help_tab_link(
690
-            $this->get_help_tab_name(),
691
-            'espresso_payment_settings',
692
-            'default'
693
-        );
694
-    }
695
-
696
-
697
-    /**
698
-     * Returns the name of the help tab for this PMT
699
-     * @return string
700
-     */
701
-    public function get_help_tab_name()
702
-    {
703
-        return 'ee_' . strtolower($this->system_name()) . '_help_tab';
704
-    }
705
-
706
-    /**
707
-     * The name of the wp capability that should be associated with the usage of
708
-     * this PMT by an admin
709
-     * @return string
710
-     */
711
-    public function cap_name()
712
-    {
713
-        return 'ee_payment_method_' . strtolower($this->system_name());
714
-    }
715
-
716
-    /**
717
-     * Called by client code to tell the gateway that if it wants to change
718
-     * the transaction or line items or registrations related to teh payment it already
719
-     * processed (we think, but possibly not) that now's the time to do it.
720
-     * It is expected that gateways will store any info they need for this on the PAY_details,
721
-     * or maybe an extra meta value
722
-     * @param EE_Payment $payment
723
-     * @return void
724
-     */
725
-    public function update_txn_based_on_payment($payment)
726
-    {
727
-        if ($this->_gateway instanceof EE_Gateway) {
728
-            $this->_gateway->update_txn_based_on_payment($payment);
729
-        }
730
-    }
731
-
732
-    /**
733
-     * Returns a string of HTML describing this payment method type for an admin,
734
-     * primarily intended for them to read before activating it.
735
-     * The easiest way to set this is to create a folder 'templates' alongside
736
-     * your EE_PMT_{System_Name} file, and in it create a file named "{system_name}_intro.template.php".
737
-     * Eg, if your payment method file is named "EE_PMT_Foo_Bar.pm.php",
738
-     * then you'd create a file named "templates" in the same folder as it, and name the file
739
-     * "foo_bar_intro.template.php", and its content will be returned by this method
740
-     * @return string
741
-     */
742
-    public function introductory_html()
743
-    {
744
-        return EEH_Template::locate_template($this->file_folder() . 'templates' . DS . strtolower($this->system_name()) . '_intro.template.php', array('pmt_obj' => $this, 'pm_instance' => $this->_pm_instance));
745
-    }
24
+	const onsite = 'on-site';
25
+	const offsite = 'off-site';
26
+	const offline = 'off-line';
27
+
28
+	/**
29
+	 * @var EE_Payment_Method
30
+	 */
31
+	protected $_pm_instance = NULL;
32
+
33
+	/**
34
+	 * @var boolean
35
+	 */
36
+	protected $_requires_https = FALSE;
37
+
38
+	/**
39
+	 * @var boolean
40
+	 */
41
+	protected $_has_billing_form;
42
+
43
+	/**
44
+	 * @var EE_Gateway
45
+	 */
46
+	protected $_gateway = NULL;
47
+
48
+	/**
49
+	 * @var EE_Payment_Method_Form
50
+	 */
51
+	protected $_settings_form = NULL;
52
+
53
+	/**
54
+	 * @var EE_Form_Section_Proper
55
+	 */
56
+	protected $_billing_form = NULL;
57
+
58
+	/**
59
+	 * @var boolean
60
+	 */
61
+	protected $_cache_billing_form = TRUE;
62
+
63
+	/**
64
+	 * String of the absolute path to the folder containing this file, with a trailing slash.
65
+	 * eg '/public_html/wp-site/wp-content/plugins/event-espresso/payment_methods/Invoice/'
66
+	 * @var string
67
+	 */
68
+	protected $_file_folder = NULL;
69
+
70
+	/**
71
+	 * String to the absolute URL to this file (useful for getting its web-accessible resources
72
+	 * like images, js, or css)
73
+	 * @var string
74
+	 */
75
+	protected $_file_url = NULL;
76
+
77
+	/**
78
+	 * Pretty name for the payment method
79
+	 * @var string
80
+	 */
81
+	protected $_pretty_name = NULL;
82
+
83
+	/**
84
+	 *
85
+	 * @var string
86
+	 */
87
+	protected $_default_button_url = NULL;
88
+
89
+	/**
90
+	 *
91
+	 * @var string
92
+	 */
93
+	protected $_default_description = NULL;
94
+
95
+
96
+	/**
97
+	 *
98
+	 * @param EE_Payment_Method $pm_instance
99
+	 * @throws EE_Error
100
+	 * @return EE_PMT_Base
101
+	 */
102
+	function __construct($pm_instance = NULL)
103
+	{
104
+		if ($pm_instance instanceof EE_Payment_Method) {
105
+			$this->set_instance($pm_instance);
106
+		}
107
+		if ($this->_gateway) {
108
+			$this->_gateway->set_payment_model(EEM_Payment::instance());
109
+			$this->_gateway->set_payment_log(EEM_Change_Log::instance());
110
+			$this->_gateway->set_template_helper(new EEH_Template());
111
+			$this->_gateway->set_line_item_helper(new EEH_Line_Item());
112
+			$this->_gateway->set_money_helper(new EEH_Money());
113
+			$this->_gateway->set_gateway_data_formatter(new GatewayDataFormatter());
114
+			$this->_gateway->set_unsupported_character_remover(new AsciiOnly());
115
+			do_action('AHEE__EE_PMT_Base___construct__done_initializing_gateway_class', $this, $this->_gateway);
116
+		}
117
+		if (!isset($this->_has_billing_form)) {
118
+			// by default, On Site gateways have a billing form
119
+			if ($this->payment_occurs() == EE_PMT_Base::onsite) {
120
+				$this->set_has_billing_form(true);
121
+			} else {
122
+				$this->set_has_billing_form(false);
123
+			}
124
+		}
125
+
126
+		if (!$this->_pretty_name) {
127
+			throw new EE_Error(sprintf(__("You must set the pretty name for the Payment Method Type in the constructor (_pretty_name), and please make it internationalized", "event_espresso")));
128
+		}
129
+		//if the child didn't specify a default button, use the credit card one
130
+		if ($this->_default_button_url === NULL) {
131
+			$this->_default_button_url = EE_PLUGIN_DIR_URL . 'payment_methods' . DS . 'pay-by-credit-card.png';
132
+		}
133
+	}
134
+
135
+
136
+	/**
137
+	 * @param boolean $has_billing_form
138
+	 */
139
+	public function set_has_billing_form($has_billing_form)
140
+	{
141
+		$this->_has_billing_form = filter_var($has_billing_form, FILTER_VALIDATE_BOOLEAN);
142
+	}
143
+
144
+
145
+	/**
146
+	 * sets the file_folder property
147
+	 */
148
+	protected function _set_file_folder()
149
+	{
150
+		$reflector = new ReflectionClass(get_class($this));
151
+		$fn = $reflector->getFileName();
152
+		$this->_file_folder = dirname($fn) . DS;
153
+	}
154
+
155
+
156
+	/**
157
+	 * sets the file URL with a trailing slash for this PMT
158
+	 */
159
+	protected function _set_file_url()
160
+	{
161
+		$plugins_dir_fixed = str_replace('\\', DS, WP_PLUGIN_DIR);
162
+		$file_folder_fixed = str_replace('\\', DS, $this->file_folder());
163
+		$file_path = str_replace($plugins_dir_fixed, WP_PLUGIN_URL, $file_folder_fixed);
164
+		$this->_file_url = $file_path;
165
+	}
166
+
167
+	/**
168
+	 * Gets the default description on all payment methods of this type
169
+	 * @return string
170
+	 */
171
+	public function default_description()
172
+	{
173
+		return $this->_default_description;
174
+	}
175
+
176
+
177
+	/**
178
+	 * Returns the folder containing the PMT child class, with a trailing slash
179
+	 * @return string
180
+	 */
181
+	public function file_folder()
182
+	{
183
+		if (!$this->_file_folder) {
184
+			$this->_set_file_folder();
185
+		}
186
+		return $this->_file_folder;
187
+	}
188
+
189
+
190
+	/**
191
+	 * @return string
192
+	 */
193
+	public function file_url()
194
+	{
195
+		if (!$this->_file_url) {
196
+			$this->_set_file_url();
197
+		}
198
+		return $this->_file_url;
199
+	}
200
+
201
+
202
+	/**
203
+	 * Sets the payment method instance this payment method type is for.
204
+	 * Its important teh payment method instance is set before
205
+	 * @param EE_Payment_Method $payment_method_instance
206
+	 */
207
+	function set_instance($payment_method_instance)
208
+	{
209
+		$this->_pm_instance = $payment_method_instance;
210
+		//if they have already requested the settings form, make sure its
211
+		//data matches this model object
212
+		if ($this->_settings_form) {
213
+			$this->settings_form()->populate_model_obj($payment_method_instance);
214
+		}
215
+		if ($this->_gateway && $this->_gateway instanceof EE_Gateway) {
216
+			$this->_gateway->set_settings($payment_method_instance->settings_array());
217
+		}
218
+	}
219
+
220
+
221
+	/**
222
+	 * Gets teh form for displaying to admins where they setup the payment method
223
+	 * @return EE_Payment_Method_Form
224
+	 */
225
+	function settings_form()
226
+	{
227
+		if (!$this->_settings_form) {
228
+			$this->_settings_form = $this->generate_new_settings_form();
229
+			$this->_settings_form->set_payment_method_type($this);
230
+			//if we have already assigned a model object to this pmt, make
231
+			//sure its reflected in teh form we just generated
232
+			if ($this->_pm_instance) {
233
+				$this->_settings_form->populate_model_obj($this->_pm_instance);
234
+			}
235
+		}
236
+		return $this->_settings_form;
237
+	}
238
+
239
+
240
+	/**
241
+	 * Gets the form for all the settings related to this payment method type
242
+	 * @return EE_Payment_Method_Form
243
+	 */
244
+	abstract function generate_new_settings_form();
245
+
246
+
247
+	/**
248
+	 * Sets the form for settings. This may be useful if we have already received
249
+	 * a form submission and have form data it in, and want to use it anytime we're showing
250
+	 * this payment method type's settings form later in the request
251
+	 * @param EE_Payment_Method_Form $form
252
+	 */
253
+	public function set_settings_form($form)
254
+	{
255
+		$this->_settings_form = $form;
256
+	}
257
+
258
+
259
+	/**
260
+	 * @return boolean
261
+	 */
262
+	public function has_billing_form()
263
+	{
264
+		return $this->_has_billing_form;
265
+	}
266
+
267
+
268
+	/**
269
+	 * Gets the form for displaying to attendees where they can enter their billing info
270
+	 * which will be sent to teh gateway (can be null)
271
+	 *
272
+	 * @param \EE_Transaction $transaction
273
+	 * @param array $extra_args
274
+	 * @return \EE_Billing_Attendee_Info_Form|\EE_Billing_Info_Form|null
275
+	 */
276
+	public function billing_form(EE_Transaction $transaction = NULL, $extra_args = array())
277
+	{
278
+		// has billing form already been regenerated ? or overwrite cache?
279
+		if (!$this->_billing_form instanceof EE_Billing_Info_Form || !$this->_cache_billing_form) {
280
+			$this->_billing_form = $this->generate_new_billing_form($transaction, $extra_args);
281
+		}
282
+		//if we know who the attendee is, and this is a billing form
283
+		//that uses attendee info, populate it
284
+		if (
285
+		apply_filters(
286
+			'FHEE__populate_billing_form_fields_from_attendee',
287
+			(
288
+				$this->_billing_form instanceof EE_Billing_Attendee_Info_Form
289
+				&& $transaction instanceof EE_Transaction
290
+				&& $transaction->primary_registration() instanceof EE_Registration
291
+				&& $transaction->primary_registration()->attendee() instanceof EE_Attendee
292
+			),
293
+			$this->_billing_form,
294
+			$transaction
295
+		)
296
+		) {
297
+			$this->_billing_form->populate_from_attendee($transaction->primary_registration()->attendee());
298
+		}
299
+		return $this->_billing_form;
300
+	}
301
+
302
+
303
+	/**
304
+	 * Creates the billing form for this payment method type
305
+	 * @param \EE_Transaction $transaction
306
+	 * @return \EE_Billing_Info_Form
307
+	 */
308
+	abstract function generate_new_billing_form(EE_Transaction $transaction = NULL);
309
+
310
+
311
+	/**
312
+	 * apply_billing_form_debug_settings
313
+	 * applies debug data to the form
314
+	 *
315
+	 * @param \EE_Billing_Info_Form $billing_form
316
+	 * @return \EE_Billing_Info_Form
317
+	 */
318
+	public function apply_billing_form_debug_settings(EE_Billing_Info_Form $billing_form)
319
+	{
320
+		return $billing_form;
321
+	}
322
+
323
+
324
+	/**
325
+	 * Sets the billing form for this payment method type. You may want to use this
326
+	 * if you have form
327
+	 * @param EE_Payment_Method $form
328
+	 */
329
+	public function set_billing_form($form)
330
+	{
331
+		$this->_billing_form = $form;
332
+	}
333
+
334
+
335
+	/**
336
+	 * Returns whether or not this payment method requires HTTPS to be used
337
+	 * @return boolean
338
+	 */
339
+	function requires_https()
340
+	{
341
+		return $this->_requires_https;
342
+	}
343
+
344
+
345
+	/**
346
+	 *
347
+	 * @param EE_Transaction $transaction
348
+	 * @param float $amount
349
+	 * @param EE_Billing_Info_Form $billing_info
350
+	 * @param string $return_url
351
+	 * @param string $fail_url
352
+	 * @param string $method
353
+	 * @param bool $by_admin
354
+	 * @return EE_Payment
355
+	 * @throws EE_Error
356
+	 */
357
+	function process_payment(EE_Transaction $transaction, $amount = null, $billing_info = null, $return_url = null, $fail_url = '', $method = 'CART', $by_admin = false)
358
+	{
359
+		// @todo: add surcharge for the payment method, if any
360
+		if ($this->_gateway) {
361
+			//there is a gateway, so we're going to make a payment object
362
+			//but wait! do they already have a payment in progress that we thought was failed?
363
+			$duplicate_properties = array(
364
+				'STS_ID' => EEM_Payment::status_id_failed,
365
+				'TXN_ID' => $transaction->ID(),
366
+				'PMD_ID' => $this->_pm_instance->ID(),
367
+				'PAY_source' => $method,
368
+				'PAY_amount' => $amount !== null ? $amount : $transaction->remaining(),
369
+				'PAY_gateway_response' => null,
370
+			);
371
+			$payment = EEM_Payment::instance()->get_one(array($duplicate_properties));
372
+			//if we didn't already have a payment in progress for the same thing,
373
+			//then we actually want to make a new payment
374
+			if (!$payment instanceof EE_Payment) {
375
+				$payment = EE_Payment::new_instance(
376
+					array_merge(
377
+						$duplicate_properties,
378
+						array(
379
+							'PAY_timestamp' => time(),
380
+							'PAY_txn_id_chq_nmbr' => null,
381
+							'PAY_po_number' => null,
382
+							'PAY_extra_accntng' => null,
383
+							'PAY_details' => null,
384
+						)
385
+					)
386
+				);
387
+			}
388
+			//make sure the payment has been saved to show we started it, and so it has an ID should the gateway try to log it
389
+			$payment->save();
390
+			$billing_values = $this->_get_billing_values_from_form($billing_info);
391
+
392
+			//  Offsite Gateway
393
+			if ($this->_gateway instanceof EE_Offsite_Gateway) {
394
+
395
+				$payment = $this->_gateway->set_redirection_info(
396
+					$payment,
397
+					$billing_values,
398
+					$return_url,
399
+					EE_Config::instance()->core->txn_page_url(
400
+						array(
401
+							'e_reg_url_link' => $transaction->primary_registration()->reg_url_link(),
402
+							'ee_payment_method' => $this->_pm_instance->slug()
403
+						)
404
+					),
405
+					$fail_url
406
+				);
407
+				$payment->save();
408
+				//  Onsite Gateway
409
+			} elseif ($this->_gateway instanceof EE_Onsite_Gateway) {
410
+
411
+				$payment = $this->_gateway->do_direct_payment($payment, $billing_values);
412
+				$payment->save();
413
+
414
+			} else {
415
+				throw new EE_Error(
416
+					sprintf(
417
+						__('Gateway for payment method type "%s" is "%s", not a subclass of either EE_Offsite_Gateway or EE_Onsite_Gateway, or null (to indicate NO gateway)', 'event_espresso'),
418
+						get_class($this),
419
+						gettype($this->_gateway)
420
+					)
421
+				);
422
+			}
423
+
424
+		} else {
425
+			// no gateway provided
426
+			// there is no payment. Must be an offline gateway
427
+			// create a payment object anyways, but dont save it
428
+			$payment = EE_Payment::new_instance(
429
+				array(
430
+					'STS_ID' => EEM_Payment::status_id_pending,
431
+					'TXN_ID' => $transaction->ID(),
432
+					'PMD_ID' => $transaction->payment_method_ID(),
433
+					'PAY_amount' => 0.00,
434
+					'PAY_timestamp' => time(),
435
+				)
436
+			);
437
+
438
+		}
439
+
440
+		// if there is billing info, clean it and save it now
441
+		if ($billing_info instanceof EE_Billing_Attendee_Info_Form) {
442
+			$this->_save_billing_info_to_attendee($billing_info, $transaction);
443
+		}
444
+
445
+		return $payment;
446
+	}
447
+
448
+	/**
449
+	 * Gets the values we want to pass onto the gateway. Normally these
450
+	 * are just the 'pretty' values, but there may be times the data may need
451
+	 * a  little massaging. Proper subsections will become arrays of inputs
452
+	 * @param EE_Billing_Info_Form $billing_form
453
+	 * @return array
454
+	 */
455
+	protected function _get_billing_values_from_form($billing_form)
456
+	{
457
+		if ($billing_form instanceof EE_Form_Section_Proper) {
458
+			return $billing_form->input_pretty_values(true);
459
+		} else {
460
+			return NULL;
461
+		}
462
+	}
463
+
464
+
465
+	/**
466
+	 * Handles an instant payment notification when the transaction is known (by default).
467
+	 * @param array $req_data
468
+	 * @param EE_Transaction $transaction
469
+	 * @return EE_Payment
470
+	 * @throws EE_Error
471
+	 */
472
+	public function handle_ipn($req_data, $transaction)
473
+	{
474
+		$transaction = EEM_Transaction::instance()->ensure_is_obj($transaction);
475
+		if (!$this->_gateway instanceof EE_Offsite_Gateway) {
476
+			throw new EE_Error(sprintf(__("Could not handle IPN because '%s' is not an offsite gateway", "event_espresso"), print_r($this->_gateway, TRUE)));
477
+
478
+		}
479
+		$payment = $this->_gateway->handle_payment_update($req_data, $transaction);
480
+		return $payment;
481
+	}
482
+
483
+
484
+	/**
485
+	 * Saves the billing info onto the attendee of the primary registrant on this transaction, and
486
+	 * cleans it first.
487
+	 * @param EE_Billing_Attendee_Info_Form $billing_form
488
+	 * @param EE_Transaction $transaction
489
+	 * @return boolean success
490
+	 */
491
+	protected function _save_billing_info_to_attendee($billing_form, $transaction)
492
+	{
493
+		if (!$transaction || !$transaction instanceof EE_Transaction) {
494
+			EE_Error::add_error(__("Cannot save billing info because no transaction was specified", "event_espresso"), __FILE__, __FUNCTION__, __LINE__);
495
+			return false;
496
+		}
497
+		$primary_reg = $transaction->primary_registration();
498
+		if (!$primary_reg) {
499
+			EE_Error::add_error(__("Cannot save billing info because the transaction has no primary registration", "event_espresso"), __FILE__, __FUNCTION__, __LINE__);
500
+			return false;
501
+		}
502
+		$attendee = $primary_reg->attendee();
503
+		if (!$attendee) {
504
+			EE_Error::add_error(__("Cannot save billing info because the transaction's primary registration has no attendee!", "event_espresso"), __FILE__, __FUNCTION__, __LINE__);
505
+			return false;
506
+		}
507
+		return $attendee->save_and_clean_billing_info_for_payment_method($billing_form, $transaction->payment_method());
508
+
509
+	}
510
+
511
+
512
+	/**
513
+	 * Gets the payment this IPN is for. Children may often want to
514
+	 * override this to inspect the request
515
+	 * @param EE_Transaction $transaction
516
+	 * @param array $req_data
517
+	 * @return EE_Payment
518
+	 */
519
+	protected function find_payment_for_ipn(EE_Transaction $transaction, $req_data = array())
520
+	{
521
+		return $transaction->last_payment();
522
+	}
523
+
524
+
525
+	/**
526
+	 * In case generic code cannot provide the payment processor with a specific payment method
527
+	 * and transaction, it will try calling this method on each activate payment method.
528
+	 * If the payment method is able to identify the request as being for it, it should fetch
529
+	 * the payment its for and return it. If not, it should throw an EE_Error to indicate it cannot
530
+	 * handle the IPN
531
+	 * @param array $req_data
532
+	 * @return EE_Payment only if this payment method can find the info its needs from $req_data
533
+	 * and identifies the IPN as being for this payment method (not just fo ra payment method of this type)
534
+	 * @throws EE_Error
535
+	 */
536
+	public function handle_unclaimed_ipn($req_data = array())
537
+	{
538
+		throw new EE_Error(sprintf(__("Payment Method '%s' cannot handle unclaimed IPNs", "event_espresso"), get_class($this)));
539
+	}
540
+
541
+
542
+	/**
543
+	 * Logic to be accomplished when the payment attempt is complete.
544
+	 * Most payment methods don't need to do anything at this point; but some, like Mijireh, do.
545
+	 * (Mijireh is an offsite gateway which doesn't send an IPN. So when the user returns to EE from
546
+	 * mijireh, this method needs to be called so the Mijireh PM can ping Mijireh to know the status
547
+	 * of the payment). Fed a transaction because it's always assumed to be the last payment that
548
+	 * we're dealing with. Returns that last payment (if there is one)
549
+	 *
550
+	 * @param EE_Transaction $transaction
551
+	 * @return EE_Payment
552
+	 */
553
+	public function finalize_payment_for($transaction)
554
+	{
555
+		return $transaction->last_payment();
556
+	}
557
+
558
+
559
+	/**
560
+	 * Whether or not this payment method's gateway supports sending refund requests
561
+	 * @return boolean
562
+	 */
563
+	public function supports_sending_refunds()
564
+	{
565
+		if ($this->_gateway && $this->_gateway instanceof EE_Gateway) {
566
+			return $this->_gateway->supports_sending_refunds();
567
+		} else {
568
+			return false;
569
+		}
570
+	}
571
+
572
+
573
+	/**
574
+	 *
575
+	 * @param EE_Payment $payment
576
+	 * @param array $refund_info
577
+	 * @throws EE_Error
578
+	 * @return EE_Payment
579
+	 */
580
+	public function process_refund(EE_Payment $payment, $refund_info = array())
581
+	{
582
+		if ($this->_gateway && $this->_gateway instanceof EE_Gateway) {
583
+			return $this->_gateway->do_direct_refund($payment, $refund_info);
584
+		} else {
585
+			throw new EE_Error(
586
+				sprintf(
587
+					__('Payment Method Type "%s" does not support sending refund requests', 'event_espresso'),
588
+					get_class($this)
589
+				)
590
+			);
591
+		}
592
+	}
593
+
594
+
595
+	/**
596
+	 * Returns one the class's constants onsite,offsite, or offline, depending on this
597
+	 * payment method's gateway.
598
+	 * @return string
599
+	 * @throws EE_Error
600
+	 */
601
+	public function payment_occurs()
602
+	{
603
+		if (!$this->_gateway) {
604
+			return EE_PMT_Base::offline;
605
+		} elseif ($this->_gateway instanceof EE_Onsite_Gateway) {
606
+			return EE_PMT_Base::onsite;
607
+		} elseif ($this->_gateway instanceof EE_Offsite_Gateway) {
608
+			return EE_PMT_Base::offsite;
609
+		} else {
610
+			throw new EE_Error(sprintf(__("Payment method type '%s's gateway isn't an instance of EE_Onsite_Gateway, EE_Offsite_Gateway, or null. It must be one of those", "event_espresso"), get_class($this)));
611
+		}
612
+	}
613
+
614
+
615
+	/**
616
+	 * For adding any html output ab ove the payment overview.
617
+	 * Many gateways won't want ot display anything, so this function just returns an empty string.
618
+	 * Other gateways may want to override this, such as offline gateways.
619
+	 * @param EE_Payment $payment
620
+	 * @return string
621
+	 */
622
+	public function payment_overview_content(EE_Payment $payment)
623
+	{
624
+		return EEH_Template::display_template(EE_LIBRARIES . 'payment_methods' . DS . 'templates' . DS . 'payment_details_content.template.php', array('payment_method' => $this->_pm_instance, 'payment' => $payment), true);
625
+	}
626
+
627
+
628
+	/**
629
+	 * @return array where keys are the help tab name,
630
+	 * values are: array {
631
+	 * @type string $title i18n name for the help tab
632
+	 * @type string $filename name of the file located in ./help_tabs/ (ie, in a folder next to this file)
633
+	 * @type array $template_args any arguments you want passed to the template file while rendering.
634
+	 *                Keys will be variable names and values with be their values.
635
+	 */
636
+	public function help_tabs_config()
637
+	{
638
+		return array();
639
+	}
640
+
641
+
642
+	/**
643
+	 * The system name for this PMT (eg AIM, Paypal_Pro, Invoice... what gets put into
644
+	 * the payment method's table's PMT_type column)
645
+	 * @return string
646
+	 */
647
+	public function system_name()
648
+	{
649
+		$classname = get_class($this);
650
+		return str_replace("EE_PMT_", '', $classname);
651
+	}
652
+
653
+
654
+	/**
655
+	 * A pretty i18n version of the PMT name
656
+	 * @return string
657
+	 */
658
+	public function pretty_name()
659
+	{
660
+		return $this->_pretty_name;
661
+	}
662
+
663
+
664
+	/**
665
+	 * Gets the default absolute URL to the payment method type's button
666
+	 * @return string
667
+	 */
668
+	public function default_button_url()
669
+	{
670
+		return $this->_default_button_url;
671
+	}
672
+
673
+
674
+	/**
675
+	 * Gets the gateway used by this payment method (if any)
676
+	 * @return EE_Gateway
677
+	 */
678
+	public function get_gateway()
679
+	{
680
+		return $this->_gateway;
681
+	}
682
+
683
+
684
+	/**
685
+	 * @return string html for the link to a help tab
686
+	 */
687
+	public function get_help_tab_link()
688
+	{
689
+		return EEH_Template::get_help_tab_link(
690
+			$this->get_help_tab_name(),
691
+			'espresso_payment_settings',
692
+			'default'
693
+		);
694
+	}
695
+
696
+
697
+	/**
698
+	 * Returns the name of the help tab for this PMT
699
+	 * @return string
700
+	 */
701
+	public function get_help_tab_name()
702
+	{
703
+		return 'ee_' . strtolower($this->system_name()) . '_help_tab';
704
+	}
705
+
706
+	/**
707
+	 * The name of the wp capability that should be associated with the usage of
708
+	 * this PMT by an admin
709
+	 * @return string
710
+	 */
711
+	public function cap_name()
712
+	{
713
+		return 'ee_payment_method_' . strtolower($this->system_name());
714
+	}
715
+
716
+	/**
717
+	 * Called by client code to tell the gateway that if it wants to change
718
+	 * the transaction or line items or registrations related to teh payment it already
719
+	 * processed (we think, but possibly not) that now's the time to do it.
720
+	 * It is expected that gateways will store any info they need for this on the PAY_details,
721
+	 * or maybe an extra meta value
722
+	 * @param EE_Payment $payment
723
+	 * @return void
724
+	 */
725
+	public function update_txn_based_on_payment($payment)
726
+	{
727
+		if ($this->_gateway instanceof EE_Gateway) {
728
+			$this->_gateway->update_txn_based_on_payment($payment);
729
+		}
730
+	}
731
+
732
+	/**
733
+	 * Returns a string of HTML describing this payment method type for an admin,
734
+	 * primarily intended for them to read before activating it.
735
+	 * The easiest way to set this is to create a folder 'templates' alongside
736
+	 * your EE_PMT_{System_Name} file, and in it create a file named "{system_name}_intro.template.php".
737
+	 * Eg, if your payment method file is named "EE_PMT_Foo_Bar.pm.php",
738
+	 * then you'd create a file named "templates" in the same folder as it, and name the file
739
+	 * "foo_bar_intro.template.php", and its content will be returned by this method
740
+	 * @return string
741
+	 */
742
+	public function introductory_html()
743
+	{
744
+		return EEH_Template::locate_template($this->file_folder() . 'templates' . DS . strtolower($this->system_name()) . '_intro.template.php', array('pmt_obj' => $this, 'pm_instance' => $this->_pm_instance));
745
+	}
746 746
 
747 747
 
748 748
 }
Please login to merge, or discard this patch.
core/domain/services/registration/CreateRegistrationService.php 2 patches
Indentation   +76 added lines, -76 removed lines patch added patch discarded remove patch
@@ -17,7 +17,7 @@  discard block
 block discarded – undo
17 17
 use OutOfRangeException;
18 18
 
19 19
 if ( ! defined('EVENT_ESPRESSO_VERSION')) {
20
-    exit('No direct script access allowed');
20
+	exit('No direct script access allowed');
21 21
 }
22 22
 
23 23
 
@@ -41,54 +41,54 @@  discard block
 block discarded – undo
41 41
 	 * @param EE_Line_Item   $ticket_line_item
42 42
 	 * @param                 $reg_count
43 43
 	 * @param                 $reg_group_size
44
-     * @param string          $reg_status
45
-     * @return EE_Registration
44
+	 * @param string          $reg_status
45
+	 * @return EE_Registration
46 46
 	 * @throws OutOfRangeException
47 47
 	 * @throws EE_Error
48 48
 	 * @throws UnexpectedEntityException
49 49
 	 */
50
-    public function create(
51
-        EE_Event $event,
52
-        EE_Transaction $transaction,
53
-        EE_Ticket $ticket,
54
-        EE_Line_Item $ticket_line_item,
55
-        $reg_count,
56
-        $reg_group_size,
57
-        $reg_status = EEM_Registration::status_id_incomplete
58
-    ) {
59
-        $registrations = $transaction->registrations();
60
-        $reg_count = $reg_count ? $reg_count : count($registrations) + 1;
61
-        $reg_url_link = new RegUrlLink($reg_count, $ticket_line_item);
62
-        $reg_code = new RegCode($reg_url_link, $transaction, $ticket);
63
-        // generate new EE_Registration
64
-        $registration = EE_Registration::new_instance(
65
-            array(
66
-                'EVT_ID'          => $event->ID(),
67
-                'TXN_ID'          => $transaction->ID(),
68
-                'TKT_ID'          => $ticket->ID(),
69
-                'STS_ID'          => $reg_status,
70
-                'REG_final_price' => $this->resolveFinalPrice($transaction, $ticket, $ticket_line_item),
71
-                'REG_session'     => EE_Registry::instance()->SSN->id(),
72
-                'REG_count'       => $reg_count,
73
-                'REG_group_size'  => $reg_group_size ? $reg_group_size : $this->incrementRegCount($registrations),
74
-                'REG_url_link'    => $reg_url_link,
75
-                'REG_code'        => $reg_code,
76
-            )
77
-        );
78
-        if ( ! $registration instanceof EE_Registration) {
79
-            throw new UnexpectedEntityException($registration, 'EE_Registration');
80
-        }
81
-        // save registration so that we have an ID
82
-        $registration->save();
83
-        // track reservation on reg but don't adjust ticket and datetime reserved counts
84
-        // because that is done as soon as the tickets are added/removed from the cart
85
-        $registration->reserve_ticket(false, 'CreateRegistrationService:'. __LINE__);
86
-        $registration->_add_relation_to($event, 'Event', array(), $event->ID());
87
-        $registration->_add_relation_to($ticket, 'Ticket', array(), $ticket->ID());
88
-        $transaction->_add_relation_to($registration, 'Registration', array(), $registration->ID());
89
-        $registration->save();
90
-        return $registration;
91
-    }
50
+	public function create(
51
+		EE_Event $event,
52
+		EE_Transaction $transaction,
53
+		EE_Ticket $ticket,
54
+		EE_Line_Item $ticket_line_item,
55
+		$reg_count,
56
+		$reg_group_size,
57
+		$reg_status = EEM_Registration::status_id_incomplete
58
+	) {
59
+		$registrations = $transaction->registrations();
60
+		$reg_count = $reg_count ? $reg_count : count($registrations) + 1;
61
+		$reg_url_link = new RegUrlLink($reg_count, $ticket_line_item);
62
+		$reg_code = new RegCode($reg_url_link, $transaction, $ticket);
63
+		// generate new EE_Registration
64
+		$registration = EE_Registration::new_instance(
65
+			array(
66
+				'EVT_ID'          => $event->ID(),
67
+				'TXN_ID'          => $transaction->ID(),
68
+				'TKT_ID'          => $ticket->ID(),
69
+				'STS_ID'          => $reg_status,
70
+				'REG_final_price' => $this->resolveFinalPrice($transaction, $ticket, $ticket_line_item),
71
+				'REG_session'     => EE_Registry::instance()->SSN->id(),
72
+				'REG_count'       => $reg_count,
73
+				'REG_group_size'  => $reg_group_size ? $reg_group_size : $this->incrementRegCount($registrations),
74
+				'REG_url_link'    => $reg_url_link,
75
+				'REG_code'        => $reg_code,
76
+			)
77
+		);
78
+		if ( ! $registration instanceof EE_Registration) {
79
+			throw new UnexpectedEntityException($registration, 'EE_Registration');
80
+		}
81
+		// save registration so that we have an ID
82
+		$registration->save();
83
+		// track reservation on reg but don't adjust ticket and datetime reserved counts
84
+		// because that is done as soon as the tickets are added/removed from the cart
85
+		$registration->reserve_ticket(false, 'CreateRegistrationService:'. __LINE__);
86
+		$registration->_add_relation_to($event, 'Event', array(), $event->ID());
87
+		$registration->_add_relation_to($ticket, 'Ticket', array(), $ticket->ID());
88
+		$transaction->_add_relation_to($registration, 'Registration', array(), $registration->ID());
89
+		$registration->save();
90
+		return $registration;
91
+	}
92 92
 
93 93
 
94 94
 
@@ -100,40 +100,40 @@  discard block
 block discarded – undo
100 100
 	 * @throws EE_Error
101 101
 	 * @throws OutOfRangeException
102 102
 	 */
103
-    protected function resolveFinalPrice(
104
-        EE_Transaction $transaction,
105
-        EE_Ticket $ticket,
106
-        EE_Line_Item $ticket_line_item
107
-    ) {
108
-        $final_price = EEH_Line_Item::calculate_final_price_for_ticket_line_item(
109
-            $transaction->total_line_item(),
110
-            $ticket_line_item
111
-        );
112
-        $final_price = $final_price !== null ? $final_price : $ticket->get_ticket_total_with_taxes();
113
-        return (float)$final_price;
114
-    }
103
+	protected function resolveFinalPrice(
104
+		EE_Transaction $transaction,
105
+		EE_Ticket $ticket,
106
+		EE_Line_Item $ticket_line_item
107
+	) {
108
+		$final_price = EEH_Line_Item::calculate_final_price_for_ticket_line_item(
109
+			$transaction->total_line_item(),
110
+			$ticket_line_item
111
+		);
112
+		$final_price = $final_price !== null ? $final_price : $ticket->get_ticket_total_with_taxes();
113
+		return (float)$final_price;
114
+	}
115 115
 
116 116
 
117 117
 
118
-    /**
119
-     * @param  EE_Registration[] $registrations
120
-     * @param  boolean            $update_existing_registrations
121
-     * @return int
122
-     * @throws EE_Error
123
-     */
124
-    protected function incrementRegCount(array $registrations, $update_existing_registrations = true)
125
-    {
126
-        $new_reg_count = count($registrations) + 1;
127
-        if ($update_existing_registrations) {
128
-            foreach ($registrations as $registration) {
129
-                if ($registration instanceof EE_Registration) {
130
-                    $registration->set_count($new_reg_count);
131
-                    $registration->save();
132
-                }
133
-            }
134
-        }
135
-        return $new_reg_count;
136
-    }
118
+	/**
119
+	 * @param  EE_Registration[] $registrations
120
+	 * @param  boolean            $update_existing_registrations
121
+	 * @return int
122
+	 * @throws EE_Error
123
+	 */
124
+	protected function incrementRegCount(array $registrations, $update_existing_registrations = true)
125
+	{
126
+		$new_reg_count = count($registrations) + 1;
127
+		if ($update_existing_registrations) {
128
+			foreach ($registrations as $registration) {
129
+				if ($registration instanceof EE_Registration) {
130
+					$registration->set_count($new_reg_count);
131
+					$registration->save();
132
+				}
133
+			}
134
+		}
135
+		return $new_reg_count;
136
+	}
137 137
 
138 138
 
139 139
 }
Please login to merge, or discard this patch.
Spacing   +2 added lines, -2 removed lines patch added patch discarded remove patch
@@ -82,7 +82,7 @@  discard block
 block discarded – undo
82 82
         $registration->save();
83 83
         // track reservation on reg but don't adjust ticket and datetime reserved counts
84 84
         // because that is done as soon as the tickets are added/removed from the cart
85
-        $registration->reserve_ticket(false, 'CreateRegistrationService:'. __LINE__);
85
+        $registration->reserve_ticket(false, 'CreateRegistrationService:'.__LINE__);
86 86
         $registration->_add_relation_to($event, 'Event', array(), $event->ID());
87 87
         $registration->_add_relation_to($ticket, 'Ticket', array(), $ticket->ID());
88 88
         $transaction->_add_relation_to($registration, 'Registration', array(), $registration->ID());
@@ -110,7 +110,7 @@  discard block
 block discarded – undo
110 110
             $ticket_line_item
111 111
         );
112 112
         $final_price = $final_price !== null ? $final_price : $ticket->get_ticket_total_with_taxes();
113
-        return (float)$final_price;
113
+        return (float) $final_price;
114 114
     }
115 115
 
116 116
 
Please login to merge, or discard this patch.
core/business/EE_Registration_Processor.class.php 2 patches
Indentation   +775 added lines, -775 removed lines patch added patch discarded remove patch
@@ -27,781 +27,781 @@
 block discarded – undo
27 27
 class EE_Registration_Processor extends EE_Processor_Base
28 28
 {
29 29
 
30
-    /**
31
-     * @var EE_Registration_Processor $_instance
32
-     * @access    private
33
-     */
34
-    private static $_instance;
35
-
36
-    /**
37
-     * initial reg status at the beginning of this request.
38
-     * indexed by registration ID
39
-     *
40
-     * @var array
41
-     */
42
-    protected $_old_reg_status = array();
43
-
44
-    /**
45
-     * reg status at the end of the request after all processing.
46
-     * indexed by registration ID
47
-     *
48
-     * @var array
49
-     */
50
-    protected $_new_reg_status = array();
51
-
52
-    /**
53
-     * amounts paid at the end of the request after all processing.
54
-     * indexed by registration ID
55
-     *
56
-     * @var array
57
-     */
58
-    protected static $_amount_paid = array();
59
-
60
-    /**
61
-     * Cache of the reg final price for registrations corresponding to a ticket line item
62
-     *
63
-     * @deprecated
64
-     * @var array @see EEH_Line_Item::calculate_reg_final_prices_per_line_item()'s return value
65
-     */
66
-    protected $_reg_final_price_per_tkt_line_item;
67
-
68
-    /**
69
-     * @var EE_Request $request
70
-     */
71
-    protected $request;
72
-
73
-
74
-
75
-    /**
76
-     * @singleton method used to instantiate class object
77
-     * @param EE_Request|null $request
78
-     * @return EE_Registration_Processor instance
79
-     * @throws \InvalidArgumentException
80
-     * @throws \EventEspresso\core\exceptions\InvalidInterfaceException
81
-     * @throws \EventEspresso\core\exceptions\InvalidDataTypeException
82
-     */
83
-    public static function instance(EE_Request $request = null)
84
-    {
85
-        // check if class object is instantiated
86
-        if (! self::$_instance instanceof EE_Registration_Processor) {
87
-            if(! $request instanceof EE_Request) {
88
-                $request = LoaderFactory::getLoader()->getShared('EE_Request');
89
-            }
90
-            self::$_instance = new self($request);
91
-        }
92
-        return self::$_instance;
93
-    }
94
-
95
-
96
-    /**
97
-     * EE_Registration_Processor constructor.
98
-     *
99
-     * @param EE_Request $request
100
-     */
101
-    public function __construct(EE_Request $request)
102
-    {
103
-        $this->request = $request;
104
-    }
105
-
106
-
107
-
108
-    /**
109
-     * @param int $REG_ID
110
-     * @return string
111
-     */
112
-    public function old_reg_status($REG_ID)
113
-    {
114
-        return isset($this->_old_reg_status[$REG_ID]) ? $this->_old_reg_status[$REG_ID] : null;
115
-    }
116
-
117
-
118
-
119
-    /**
120
-     * @param int    $REG_ID
121
-     * @param string $old_reg_status
122
-     */
123
-    public function set_old_reg_status($REG_ID, $old_reg_status)
124
-    {
125
-        // only set the first time
126
-        if (! isset($this->_old_reg_status[$REG_ID])) {
127
-            $this->_old_reg_status[$REG_ID] = $old_reg_status;
128
-        }
129
-    }
130
-
131
-
132
-
133
-    /**
134
-     * @param int $REG_ID
135
-     * @return string
136
-     */
137
-    public function new_reg_status($REG_ID)
138
-    {
139
-        return isset($this->_new_reg_status[$REG_ID]) ? $this->_new_reg_status[$REG_ID] : null;
140
-    }
141
-
142
-
143
-
144
-    /**
145
-     * @param int    $REG_ID
146
-     * @param string $new_reg_status
147
-     */
148
-    public function set_new_reg_status($REG_ID, $new_reg_status)
149
-    {
150
-        $this->_new_reg_status[$REG_ID] = $new_reg_status;
151
-    }
152
-
153
-
154
-
155
-    /**
156
-     * reg_status_updated
157
-     *
158
-     * @param int $REG_ID
159
-     * @return bool
160
-     */
161
-    public function reg_status_updated($REG_ID)
162
-    {
163
-        return $this->new_reg_status($REG_ID) !== $this->old_reg_status($REG_ID);
164
-    }
165
-
166
-
167
-
168
-    /**
169
-     * @param EE_Registration $registration
170
-     * @throws EE_Error
171
-     * @throws EntityNotFoundException
172
-     * @throws InvalidArgumentException
173
-     * @throws InvalidDataTypeException
174
-     * @throws InvalidInterfaceException
175
-     * @throws ReflectionException
176
-     * @throws RuntimeException
177
-     */
178
-    public function update_registration_status_and_trigger_notifications(EE_Registration $registration)
179
-    {
180
-        $this->toggle_incomplete_registration_status_to_default($registration, false);
181
-        $this->toggle_registration_status_for_default_approved_events($registration, false);
182
-        $this->toggle_registration_status_if_no_monies_owing($registration, false);
183
-        $registration->save();
184
-        // trigger notifications
185
-        $this->trigger_registration_update_notifications($registration);
186
-    }
187
-
188
-
189
-
190
-    /**
191
-     *    manually_update_registration_status
192
-     *
193
-     * @access public
194
-     * @param EE_Registration $registration
195
-     * @param string          $new_reg_status
196
-     * @param bool            $save TRUE will save the registration if the status is updated, FALSE will leave that up
197
-     *                              to client code
198
-     * @return bool
199
-     * @throws EE_Error
200
-     * @throws EntityNotFoundException
201
-     * @throws InvalidArgumentException
202
-     * @throws InvalidDataTypeException
203
-     * @throws InvalidInterfaceException
204
-     * @throws ReflectionException
205
-     * @throws RuntimeException
206
-     */
207
-    public function manually_update_registration_status(
208
-        EE_Registration $registration,
209
-        $new_reg_status = '',
210
-        $save = true
211
-    ) {
212
-        // set initial REG_Status
213
-        $this->set_old_reg_status($registration->ID(), $registration->status_ID());
214
-        // set incoming REG_Status
215
-        $this->set_new_reg_status($registration->ID(), $new_reg_status);
216
-        // toggle reg status but only if it has changed and the user can do so
217
-        if (
218
-            $this->reg_status_updated($registration->ID())
219
-            && (
220
-                (! $this->request->isAdmin() || $this->request->isFrontAjax())
221
-                || EE_Registry::instance()->CAP->current_user_can(
222
-                    'ee_edit_registration',
223
-                    'toggle_registration_status',
224
-                    $registration->ID()
225
-                )
226
-            )
227
-        ) {
228
-            // change status to new value
229
-            $updated = $registration->set_status($this->new_reg_status($registration->ID()));
230
-            if ($updated && $save) {
231
-                $registration->save();
232
-            }
233
-            return true;
234
-        }
235
-        return false;
236
-    }
237
-
238
-
239
-
240
-    /**
241
-     *    toggle_incomplete_registration_status_to_default
242
-     *        changes any incomplete registrations to either the event or global default registration status
243
-     *
244
-     * @access public
245
-     * @param EE_Registration $registration
246
-     * @param bool            $save TRUE will save the registration if the status is updated, FALSE will leave that up
247
-     *                              to client code
248
-     * @param ContextInterface|null    $context
249
-     * @return void
250
-     * @throws EE_Error
251
-     * @throws InvalidArgumentException
252
-     * @throws ReflectionException
253
-     * @throws RuntimeException
254
-     * @throws EntityNotFoundException
255
-     * @throws InvalidDataTypeException
256
-     * @throws InvalidInterfaceException
257
-     */
258
-    public function toggle_incomplete_registration_status_to_default(
259
-        EE_Registration $registration,
260
-        $save = true,
261
-        ContextInterface $context = null
262
-    ) {
263
-        $existing_reg_status = $registration->status_ID();
264
-        // set initial REG_Status
265
-        $this->set_old_reg_status($registration->ID(), $existing_reg_status);
266
-        // is the registration currently incomplete ?
267
-        if ($registration->status_ID() === EEM_Registration::status_id_incomplete) {
268
-            // grab default reg status for the event, if set
269
-            $event_default_registration_status = $registration->event()->default_registration_status();
270
-            // if no default reg status is set for the event, then use the global value
271
-            $STS_ID = ! empty($event_default_registration_status)
272
-                ? $event_default_registration_status
273
-                : EE_Registry::instance()->CFG->registration->default_STS_ID;
274
-            // if the event default reg status is approved, then downgrade temporarily to payment pending to ensure that payments are triggered
275
-            $STS_ID = $STS_ID === EEM_Registration::status_id_approved ? EEM_Registration::status_id_pending_payment
276
-                : $STS_ID;
277
-            // set incoming REG_Status
278
-            $this->set_new_reg_status($registration->ID(), $STS_ID);
279
-            $registration->set_status($STS_ID, false, $context);
280
-            if ($save) {
281
-                $registration->save();
282
-            }
283
-            // don't trigger notifications during IPNs because they will get triggered by EE_Payment_Processor
284
-            if (! EE_Processor_Base::$IPN) {
285
-                // otherwise, send out notifications
286
-                add_filter('FHEE__EED_Messages___maybe_registration__deliver_notifications', '__return_true', 10);
287
-            }
288
-            // DEBUG LOG
289
-            //$this->log(
290
-            //	__CLASS__, __FUNCTION__, __LINE__,
291
-            //	$registration->transaction(),
292
-            //	array(
293
-            //		'IPN'                   => EE_Processor_Base::$IPN,
294
-            //		'deliver_notifications' => has_filter( 'FHEE__EED_Messages___maybe_registration__deliver_notifications' ),
295
-            //	)
296
-            //);
297
-        }
298
-    }
299
-
300
-
301
-
302
-    /**
303
-     *    toggle_registration_status_for_default_approved_events
304
-     *
305
-     * @access public
306
-     * @param EE_Registration $registration
307
-     * @param bool            $save TRUE will save the registration if the status is updated, FALSE will leave that up
308
-     *                              to client code
309
-     * @return bool
310
-     * @throws EE_Error
311
-     * @throws EntityNotFoundException
312
-     * @throws InvalidArgumentException
313
-     * @throws InvalidDataTypeException
314
-     * @throws InvalidInterfaceException
315
-     * @throws ReflectionException
316
-     * @throws RuntimeException
317
-     */
318
-    public function toggle_registration_status_for_default_approved_events(EE_Registration $registration, $save = true)
319
-    {
320
-        $reg_status = $registration->status_ID();
321
-        // set initial REG_Status
322
-        $this->set_old_reg_status($registration->ID(), $reg_status);
323
-        // if not already, toggle reg status to approved IF the event default reg status is approved
324
-        // ( as long as the registration wasn't cancelled or declined at some point )
325
-        if (
326
-            $reg_status !== EEM_Registration::status_id_cancelled
327
-            && $reg_status
328
-               !== EEM_Registration::status_id_declined
329
-            && $reg_status !== EEM_Registration::status_id_approved
330
-            && $registration->event()->default_registration_status() === EEM_Registration::status_id_approved
331
-        ) {
332
-            // set incoming REG_Status
333
-            $this->set_new_reg_status($registration->ID(), EEM_Registration::status_id_approved);
334
-            // toggle status to approved
335
-            $registration->set_status(EEM_Registration::status_id_approved);
336
-            if ($save) {
337
-                $registration->save();
338
-            }
339
-            // don't trigger notifications during IPNs because they will get triggered by EE_Payment_Processor
340
-            if (! EE_Processor_Base::$IPN) {
341
-                // otherwise, send out notifications
342
-                add_filter('FHEE__EED_Messages___maybe_registration__deliver_notifications', '__return_true', 10);
343
-            }
344
-            // DEBUG LOG
345
-            //$this->log(
346
-            //	__CLASS__, __FUNCTION__, __LINE__,
347
-            //	$registration->transaction(),
348
-            //	array(
349
-            //		'IPN'                   => EE_Processor_Base::$IPN,
350
-            //		'deliver_notifications' => has_filter( 'FHEE__EED_Messages___maybe_registration__deliver_notifications' ),
351
-            //	)
352
-            //);
353
-            return true;
354
-        }
355
-        return false;
356
-    }
357
-
358
-
359
-
360
-    /**
361
-     *    toggle_registration_statuses_if_no_monies_owing
362
-     *
363
-     * @access public
364
-     * @param EE_Registration $registration
365
-     * @param bool            $save TRUE will save the registration if the status is updated, FALSE will leave that up
366
-     *                              to client code
367
-     * @param array           $additional_details
368
-     * @return bool
369
-     * @throws EE_Error
370
-     * @throws EntityNotFoundException
371
-     * @throws InvalidArgumentException
372
-     * @throws InvalidDataTypeException
373
-     * @throws InvalidInterfaceException
374
-     * @throws ReflectionException
375
-     * @throws RuntimeException
376
-     */
377
-    public function toggle_registration_status_if_no_monies_owing(
378
-        EE_Registration $registration,
379
-        $save = true,
380
-        array $additional_details = array()
381
-    ) {
382
-        // set initial REG_Status
383
-        $this->set_old_reg_status($registration->ID(), $registration->status_ID());
384
-        // was a payment just made ?
385
-        $payment    = isset($additional_details['payment_updates'], $additional_details['last_payment'])
386
-                      && $additional_details['payment_updates']
387
-                      && $additional_details['last_payment'] instanceof EE_Payment
388
-            ? $additional_details['last_payment']
389
-            : null;
390
-        $total_paid = array_sum(self::$_amount_paid);
391
-        // toggle reg status to approved IF
392
-        if (
393
-            // REG status is pending payment
394
-            $registration->status_ID() === EEM_Registration::status_id_pending_payment
395
-            // AND no monies are owing
396
-            && (
397
-                (
398
-                    $registration->transaction()->is_completed()
399
-                    || $registration->transaction()->is_overpaid()
400
-                    || $registration->transaction()->is_free()
401
-                    || apply_filters(
402
-                        'FHEE__EE_Registration_Processor__toggle_registration_status_if_no_monies_owing',
403
-                        false,
404
-                        $registration
405
-                    )
406
-                )
407
-                || (
408
-                    $payment instanceof EE_Payment && $payment->is_approved()
409
-                    && // this specific registration has not yet been paid for
410
-                    ! isset(self::$_amount_paid[$registration->ID()])
411
-                    && // payment amount, less what we have already attributed to other registrations, is greater than this reg's final price
412
-                    $payment->amount() - $total_paid >= $registration->final_price()
413
-                )
414
-            )
415
-        ) {
416
-            // mark as paid
417
-            self::$_amount_paid[$registration->ID()] = $registration->final_price();
418
-            // track new REG_Status
419
-            $this->set_new_reg_status($registration->ID(), EEM_Registration::status_id_approved);
420
-            // toggle status to approved
421
-            $registration->set_status(EEM_Registration::status_id_approved);
422
-            if ($save) {
423
-                $registration->save();
424
-            }
425
-            // don't trigger notifications during IPNs because they will get triggered by EE_Payment_Processor
426
-            if (! EE_Processor_Base::$IPN) {
427
-                // otherwise, send out notifications
428
-                add_filter('FHEE__EED_Messages___maybe_registration__deliver_notifications', '__return_true', 10);
429
-            }
430
-            // DEBUG LOG
431
-            //$this->log(
432
-            //	__CLASS__, __FUNCTION__, __LINE__,
433
-            //	$registration->transaction(),
434
-            //	array(
435
-            //		'IPN'                   => EE_Processor_Base::$IPN,
436
-            //		'deliver_notifications' => has_filter( 'FHEE__EED_Messages___maybe_registration__deliver_notifications' ),
437
-            //	)
438
-            //);
439
-            return true;
440
-        }
441
-        return false;
442
-    }
443
-
444
-
445
-
446
-    /**
447
-     *    registration_status_changed
448
-     *
449
-     * @access public
450
-     * @param EE_Registration $registration
451
-     * @param array           $additional_details
452
-     * @return void
453
-     */
454
-    public function trigger_registration_update_notifications($registration, array $additional_details = array())
455
-    {
456
-        try {
457
-            if (! $registration instanceof EE_Registration) {
458
-                throw new EE_Error(
459
-                    esc_html__('An invalid registration was received.', 'event_espresso')
460
-                );
461
-            }
462
-            // EE_Registry::instance()->load_helper( 'Debug_Tools' );
463
-            // EEH_Debug_Tools::log(
464
-            // 	__CLASS__,
465
-            // 	__FUNCTION__,
466
-            // 	__LINE__,
467
-            // 	array( $registration->transaction(), $additional_details ),
468
-            // 	false,
469
-            // 	'EE_Transaction: ' . $registration->transaction()->ID()
470
-            // );
471
-            if (! $registration->is_primary_registrant()) {
472
-                return;
473
-            }
474
-            do_action(
475
-                'AHEE__EE_Registration_Processor__trigger_registration_update_notifications',
476
-                $registration,
477
-                $additional_details
478
-            );
479
-        } catch (Exception $e) {
480
-            EE_Error::add_error($e->getMessage(), $e->getFile(), 'unknown_function_from_exception', $e->getLine());
481
-        }
482
-    }
483
-
484
-
485
-
486
-    /**
487
-     * sets reg status based either on passed param or on transaction status and event pre-approval setting
488
-     *
489
-     * @param EE_Registration $registration
490
-     * @param array           $additional_details
491
-     * @return bool
492
-     * @throws EE_Error
493
-     * @throws EntityNotFoundException
494
-     * @throws InvalidArgumentException
495
-     * @throws InvalidDataTypeException
496
-     * @throws InvalidInterfaceException
497
-     * @throws ReflectionException
498
-     * @throws RuntimeException
499
-     */
500
-    public function update_registration_after_checkout_or_payment(
501
-        EE_Registration $registration,
502
-        array $additional_details = array()
503
-    ) {
504
-        // set initial REG_Status
505
-        $this->set_old_reg_status($registration->ID(), $registration->status_ID());
506
-        // if the registration status gets updated, then save the registration
507
-        if (
508
-            $this->toggle_registration_status_for_default_approved_events($registration, false)
509
-            || $this->toggle_registration_status_if_no_monies_owing(
510
-                $registration,
511
-                false,
512
-                $additional_details
513
-            )
514
-        ) {
515
-            $registration->save();
516
-        }
517
-        // set new  REG_Status
518
-        $this->set_new_reg_status($registration->ID(), $registration->status_ID());
519
-        return $this->reg_status_updated($registration->ID())
520
-               && $this->new_reg_status($registration->ID()) === EEM_Registration::status_id_approved;
521
-    }
522
-
523
-
524
-
525
-    /**
526
-     * Updates the registration' final prices based on the current line item tree (taking into account
527
-     * discounts, taxes, and other line items unrelated to tickets.)
528
-     *
529
-     * @param EE_Transaction $transaction
530
-     * @param boolean        $save_regs whether to immediately save registrations in this function or not
531
-     * @return void
532
-     * @throws EE_Error
533
-     * @throws InvalidArgumentException
534
-     * @throws InvalidDataTypeException
535
-     * @throws InvalidInterfaceException
536
-     * @throws RuntimeException
537
-     */
538
-    public function update_registration_final_prices($transaction, $save_regs = true)
539
-    {
540
-        $reg_final_price_per_ticket_line_item = EEH_Line_Item::calculate_reg_final_prices_per_line_item(
541
-            $transaction->total_line_item()
542
-        );
543
-        foreach ($transaction->registrations() as $registration) {
544
-            /** @var EE_Line_Item $line_item */
545
-            $line_item = EEM_Line_Item::instance()->get_line_item_for_registration($registration);
546
-            if (isset($reg_final_price_per_ticket_line_item[$line_item->ID()])) {
547
-                $registration->set_final_price($reg_final_price_per_ticket_line_item[$line_item->ID()]);
548
-                if ($save_regs) {
549
-                    $registration->save();
550
-                }
551
-            }
552
-        }
553
-        //and make sure there's no rounding problem
554
-        $this->fix_reg_final_price_rounding_issue($transaction);
555
-    }
556
-
557
-
558
-
559
-    /**
560
-     * Makes sure there is no rounding errors for the REG_final_prices.
561
-     * Eg, if we have 3 registrations for $1, and there is a $0.01 discount between the three of them,
562
-     * they will each be for $0.99333333, which gets rounded to $1 again.
563
-     * So the transaction total will be $2.99, but each registration will be for $1,
564
-     * so if each registrant paid individually they will have overpaid by $0.01.
565
-     * So in order to overcome this, we check for any difference, and if there is a difference
566
-     * we just grab one registrant at random and make them responsible for it.
567
-     * This should be used after setting REG_final_prices (it's done automatically as part of
568
-     * EE_Registration_Processor::update_registration_final_prices())
569
-     *
570
-     * @param EE_Transaction $transaction
571
-     * @return bool success verifying that there is NO difference after this method is done
572
-     * @throws EE_Error
573
-     * @throws InvalidArgumentException
574
-     * @throws InvalidDataTypeException
575
-     * @throws InvalidInterfaceException
576
-     */
577
-    public function fix_reg_final_price_rounding_issue($transaction)
578
-    {
579
-        $reg_final_price_sum = EEM_Registration::instance()->sum(
580
-            array(
581
-                array(
582
-                    'TXN_ID' => $transaction->ID(),
583
-                ),
584
-            ),
585
-            'REG_final_price'
586
-        );
587
-        $diff = $transaction->total() - $reg_final_price_sum;
588
-        //ok then, just grab one of the registrations
589
-        if ($diff !== 0) {
590
-            $a_reg   = EEM_Registration::instance()->get_one(
591
-                array(
592
-                    array(
593
-                        'TXN_ID' => $transaction->ID(),
594
-                    ),
595
-                )
596
-            );
597
-            return $a_reg instanceof EE_Registration
598
-                ? (bool) $a_reg->save(array('REG_final_price' => $a_reg->final_price() + $diff))
599
-                : false;
600
-        }
601
-        return true;
602
-    }
603
-
604
-
605
-
606
-    /**
607
-     * update_registration_after_being_canceled_or_declined
608
-     *
609
-     * @param EE_Registration $registration
610
-     * @param array           $closed_reg_statuses
611
-     * @param bool            $update_reg
612
-     * @return bool
613
-     * @throws EE_Error
614
-     * @throws RuntimeException
615
-     */
616
-    public function update_registration_after_being_canceled_or_declined(
617
-        EE_Registration $registration,
618
-        array $closed_reg_statuses = array(),
619
-        $update_reg = true
620
-    ) {
621
-        // these reg statuses should not be considered in any calculations involving monies owing
622
-        $closed_reg_statuses = ! empty($closed_reg_statuses)
623
-            ? $closed_reg_statuses
624
-            : EEM_Registration::closed_reg_statuses();
625
-        if (! in_array($registration->status_ID(), $closed_reg_statuses, true)) {
626
-            return false;
627
-        }
628
-        // release a reserved ticket by decrementing ticket and datetime reserved values
629
-        $registration->release_reserved_ticket(true, 'RegProcessor:'. __LINE__);
630
-        $registration->set_final_price(0);
631
-        if ($update_reg) {
632
-            $registration->save();
633
-        }
634
-        return true;
635
-    }
636
-
637
-
638
-
639
-    /**
640
-     * update_canceled_or_declined_registration_after_being_reinstated
641
-     *
642
-     * @param EE_Registration $registration
643
-     * @param array           $closed_reg_statuses
644
-     * @param bool            $update_reg
645
-     * @return bool
646
-     * @throws EE_Error
647
-     * @throws RuntimeException
648
-     */
649
-    public function update_canceled_or_declined_registration_after_being_reinstated(
650
-        EE_Registration $registration,
651
-        array $closed_reg_statuses = array(),
652
-        $update_reg = true
653
-    ) {
654
-        // these reg statuses should not be considered in any calculations involving monies owing
655
-        $closed_reg_statuses = ! empty($closed_reg_statuses) ? $closed_reg_statuses
656
-            : EEM_Registration::closed_reg_statuses();
657
-        if (in_array($registration->status_ID(), $closed_reg_statuses, true)) {
658
-            return false;
659
-        }
660
-        $ticket = $registration->ticket();
661
-        if (! $ticket instanceof EE_Ticket) {
662
-            throw new EE_Error(
663
-                sprintf(
664
-                    esc_html__(
665
-                        'The Ticket for Registration %1$d was not found or is invalid.',
666
-                        'event_espresso'
667
-                    ),
668
-                    $registration->ticket_ID()
669
-                )
670
-            );
671
-        }
672
-        $registration->set_final_price($ticket->price());
673
-        if ($update_reg) {
674
-            $registration->save();
675
-        }
676
-        return true;
677
-    }
678
-
679
-
680
-
681
-    /**
682
-     * generate_ONE_registration_from_line_item
683
-     * Although a ticket line item may have a quantity greater than 1,
684
-     * this method will ONLY CREATE ONE REGISTRATION !!!
685
-     * Regardless of the ticket line item quantity.
686
-     * This means that any code calling this method is responsible for ensuring
687
-     * that the final registration count matches the ticket line item quantity.
688
-     * This was done to make it easier to match the number of registrations
689
-     * to the number of tickets in the cart, when the cart has been edited
690
-     * after SPCO has already been initialized. So if an additional ticket was added to the cart, you can simply pass
691
-     * the line item to this method to add a second ticket, and in this case, you would not want to add 2 tickets.
692
-     *
693
-     * @deprecated
694
-     * @since 4.9.1
695
-     * @param EE_Line_Item    $line_item
696
-     * @param \EE_Transaction $transaction
697
-     * @param int             $att_nmbr
698
-     * @param int             $total_ticket_count
699
-     * @return EE_Registration | null
700
-     * @throws \OutOfRangeException
701
-     * @throws \EventEspresso\core\exceptions\UnexpectedEntityException
702
-     * @throws \EE_Error
703
-     */
704
-    public function generate_ONE_registration_from_line_item(
705
-        EE_Line_Item $line_item,
706
-        EE_Transaction $transaction,
707
-        $att_nmbr = 1,
708
-        $total_ticket_count = 1
709
-    ) {
710
-        EE_Error::doing_it_wrong(
711
-            __CLASS__ . '::' . __FUNCTION__,
712
-            sprintf(
713
-                esc_html__('This method is deprecated. Please use "%s" instead', 'event_espresso'),
714
-                '\EventEspresso\core\domain\services\registration\CreateRegistrationService::create()'
715
-            ),
716
-            '4.9.1',
717
-            '5.0.0'
718
-        );
719
-        // grab the related ticket object for this line_item
720
-        $ticket = $line_item->ticket();
721
-        if (! $ticket instanceof EE_Ticket) {
722
-            EE_Error::add_error(
723
-                sprintf(
724
-                    esc_html__('Line item %s did not contain a valid ticket', 'event_espresso'),
725
-                    $line_item->ID()
726
-                ),
727
-                __FILE__,
728
-                __FUNCTION__,
729
-                __LINE__
730
-            );
731
-            return null;
732
-        }
733
-        $registration_service = new CreateRegistrationService();
734
-        // then generate a new registration from that
735
-        return $registration_service->create(
736
-            $ticket->get_related_event(),
737
-            $transaction,
738
-            $ticket,
739
-            $line_item,
740
-            $att_nmbr,
741
-            $total_ticket_count
742
-        );
743
-    }
744
-
745
-
746
-
747
-    /**
748
-     * generates reg_url_link
749
-     *
750
-     * @deprecated
751
-     * @since 4.9.1
752
-     * @param int                   $att_nmbr
753
-     * @param EE_Line_Item | string $item
754
-     * @return string
755
-     * @throws InvalidArgumentException
756
-     */
757
-    public function generate_reg_url_link($att_nmbr, $item)
758
-    {
759
-        EE_Error::doing_it_wrong(
760
-            __CLASS__ . '::' . __FUNCTION__,
761
-            sprintf(
762
-                esc_html__('This method is deprecated. Please use "%s" instead', 'event_espresso'),
763
-                'EventEspresso\core\domain\entities\RegUrlLink'
764
-            ),
765
-            '4.9.1',
766
-            '5.0.0'
767
-        );
768
-        return new RegUrlLink($att_nmbr, $item);
769
-    }
770
-
771
-
772
-
773
-    /**
774
-     * generates reg code
775
-     *
776
-     * @deprecated
777
-     * @since 4.9.1
778
-     * @param EE_Registration $registration
779
-     * @return string
780
-     * @throws EE_Error
781
-     * @throws EntityNotFoundException
782
-     * @throws InvalidArgumentException
783
-     */
784
-    public function generate_reg_code(EE_Registration $registration)
785
-    {
786
-        EE_Error::doing_it_wrong(
787
-            __CLASS__ . '::' . __FUNCTION__,
788
-            sprintf(
789
-                esc_html__('This method is deprecated. Please use "%s" instead', 'event_espresso'),
790
-                'EventEspresso\core\domain\entities\RegCode'
791
-            ),
792
-            '4.9.1',
793
-            '5.0.0'
794
-        );
795
-        return apply_filters(
796
-            'FHEE__EE_Registration_Processor___generate_reg_code__new_reg_code',
797
-            new RegCode(
798
-                RegUrlLink::fromRegistration($registration),
799
-                $registration->transaction(),
800
-                $registration->ticket()
801
-            ),
802
-            $registration
803
-        );
804
-    }
30
+	/**
31
+	 * @var EE_Registration_Processor $_instance
32
+	 * @access    private
33
+	 */
34
+	private static $_instance;
35
+
36
+	/**
37
+	 * initial reg status at the beginning of this request.
38
+	 * indexed by registration ID
39
+	 *
40
+	 * @var array
41
+	 */
42
+	protected $_old_reg_status = array();
43
+
44
+	/**
45
+	 * reg status at the end of the request after all processing.
46
+	 * indexed by registration ID
47
+	 *
48
+	 * @var array
49
+	 */
50
+	protected $_new_reg_status = array();
51
+
52
+	/**
53
+	 * amounts paid at the end of the request after all processing.
54
+	 * indexed by registration ID
55
+	 *
56
+	 * @var array
57
+	 */
58
+	protected static $_amount_paid = array();
59
+
60
+	/**
61
+	 * Cache of the reg final price for registrations corresponding to a ticket line item
62
+	 *
63
+	 * @deprecated
64
+	 * @var array @see EEH_Line_Item::calculate_reg_final_prices_per_line_item()'s return value
65
+	 */
66
+	protected $_reg_final_price_per_tkt_line_item;
67
+
68
+	/**
69
+	 * @var EE_Request $request
70
+	 */
71
+	protected $request;
72
+
73
+
74
+
75
+	/**
76
+	 * @singleton method used to instantiate class object
77
+	 * @param EE_Request|null $request
78
+	 * @return EE_Registration_Processor instance
79
+	 * @throws \InvalidArgumentException
80
+	 * @throws \EventEspresso\core\exceptions\InvalidInterfaceException
81
+	 * @throws \EventEspresso\core\exceptions\InvalidDataTypeException
82
+	 */
83
+	public static function instance(EE_Request $request = null)
84
+	{
85
+		// check if class object is instantiated
86
+		if (! self::$_instance instanceof EE_Registration_Processor) {
87
+			if(! $request instanceof EE_Request) {
88
+				$request = LoaderFactory::getLoader()->getShared('EE_Request');
89
+			}
90
+			self::$_instance = new self($request);
91
+		}
92
+		return self::$_instance;
93
+	}
94
+
95
+
96
+	/**
97
+	 * EE_Registration_Processor constructor.
98
+	 *
99
+	 * @param EE_Request $request
100
+	 */
101
+	public function __construct(EE_Request $request)
102
+	{
103
+		$this->request = $request;
104
+	}
105
+
106
+
107
+
108
+	/**
109
+	 * @param int $REG_ID
110
+	 * @return string
111
+	 */
112
+	public function old_reg_status($REG_ID)
113
+	{
114
+		return isset($this->_old_reg_status[$REG_ID]) ? $this->_old_reg_status[$REG_ID] : null;
115
+	}
116
+
117
+
118
+
119
+	/**
120
+	 * @param int    $REG_ID
121
+	 * @param string $old_reg_status
122
+	 */
123
+	public function set_old_reg_status($REG_ID, $old_reg_status)
124
+	{
125
+		// only set the first time
126
+		if (! isset($this->_old_reg_status[$REG_ID])) {
127
+			$this->_old_reg_status[$REG_ID] = $old_reg_status;
128
+		}
129
+	}
130
+
131
+
132
+
133
+	/**
134
+	 * @param int $REG_ID
135
+	 * @return string
136
+	 */
137
+	public function new_reg_status($REG_ID)
138
+	{
139
+		return isset($this->_new_reg_status[$REG_ID]) ? $this->_new_reg_status[$REG_ID] : null;
140
+	}
141
+
142
+
143
+
144
+	/**
145
+	 * @param int    $REG_ID
146
+	 * @param string $new_reg_status
147
+	 */
148
+	public function set_new_reg_status($REG_ID, $new_reg_status)
149
+	{
150
+		$this->_new_reg_status[$REG_ID] = $new_reg_status;
151
+	}
152
+
153
+
154
+
155
+	/**
156
+	 * reg_status_updated
157
+	 *
158
+	 * @param int $REG_ID
159
+	 * @return bool
160
+	 */
161
+	public function reg_status_updated($REG_ID)
162
+	{
163
+		return $this->new_reg_status($REG_ID) !== $this->old_reg_status($REG_ID);
164
+	}
165
+
166
+
167
+
168
+	/**
169
+	 * @param EE_Registration $registration
170
+	 * @throws EE_Error
171
+	 * @throws EntityNotFoundException
172
+	 * @throws InvalidArgumentException
173
+	 * @throws InvalidDataTypeException
174
+	 * @throws InvalidInterfaceException
175
+	 * @throws ReflectionException
176
+	 * @throws RuntimeException
177
+	 */
178
+	public function update_registration_status_and_trigger_notifications(EE_Registration $registration)
179
+	{
180
+		$this->toggle_incomplete_registration_status_to_default($registration, false);
181
+		$this->toggle_registration_status_for_default_approved_events($registration, false);
182
+		$this->toggle_registration_status_if_no_monies_owing($registration, false);
183
+		$registration->save();
184
+		// trigger notifications
185
+		$this->trigger_registration_update_notifications($registration);
186
+	}
187
+
188
+
189
+
190
+	/**
191
+	 *    manually_update_registration_status
192
+	 *
193
+	 * @access public
194
+	 * @param EE_Registration $registration
195
+	 * @param string          $new_reg_status
196
+	 * @param bool            $save TRUE will save the registration if the status is updated, FALSE will leave that up
197
+	 *                              to client code
198
+	 * @return bool
199
+	 * @throws EE_Error
200
+	 * @throws EntityNotFoundException
201
+	 * @throws InvalidArgumentException
202
+	 * @throws InvalidDataTypeException
203
+	 * @throws InvalidInterfaceException
204
+	 * @throws ReflectionException
205
+	 * @throws RuntimeException
206
+	 */
207
+	public function manually_update_registration_status(
208
+		EE_Registration $registration,
209
+		$new_reg_status = '',
210
+		$save = true
211
+	) {
212
+		// set initial REG_Status
213
+		$this->set_old_reg_status($registration->ID(), $registration->status_ID());
214
+		// set incoming REG_Status
215
+		$this->set_new_reg_status($registration->ID(), $new_reg_status);
216
+		// toggle reg status but only if it has changed and the user can do so
217
+		if (
218
+			$this->reg_status_updated($registration->ID())
219
+			&& (
220
+				(! $this->request->isAdmin() || $this->request->isFrontAjax())
221
+				|| EE_Registry::instance()->CAP->current_user_can(
222
+					'ee_edit_registration',
223
+					'toggle_registration_status',
224
+					$registration->ID()
225
+				)
226
+			)
227
+		) {
228
+			// change status to new value
229
+			$updated = $registration->set_status($this->new_reg_status($registration->ID()));
230
+			if ($updated && $save) {
231
+				$registration->save();
232
+			}
233
+			return true;
234
+		}
235
+		return false;
236
+	}
237
+
238
+
239
+
240
+	/**
241
+	 *    toggle_incomplete_registration_status_to_default
242
+	 *        changes any incomplete registrations to either the event or global default registration status
243
+	 *
244
+	 * @access public
245
+	 * @param EE_Registration $registration
246
+	 * @param bool            $save TRUE will save the registration if the status is updated, FALSE will leave that up
247
+	 *                              to client code
248
+	 * @param ContextInterface|null    $context
249
+	 * @return void
250
+	 * @throws EE_Error
251
+	 * @throws InvalidArgumentException
252
+	 * @throws ReflectionException
253
+	 * @throws RuntimeException
254
+	 * @throws EntityNotFoundException
255
+	 * @throws InvalidDataTypeException
256
+	 * @throws InvalidInterfaceException
257
+	 */
258
+	public function toggle_incomplete_registration_status_to_default(
259
+		EE_Registration $registration,
260
+		$save = true,
261
+		ContextInterface $context = null
262
+	) {
263
+		$existing_reg_status = $registration->status_ID();
264
+		// set initial REG_Status
265
+		$this->set_old_reg_status($registration->ID(), $existing_reg_status);
266
+		// is the registration currently incomplete ?
267
+		if ($registration->status_ID() === EEM_Registration::status_id_incomplete) {
268
+			// grab default reg status for the event, if set
269
+			$event_default_registration_status = $registration->event()->default_registration_status();
270
+			// if no default reg status is set for the event, then use the global value
271
+			$STS_ID = ! empty($event_default_registration_status)
272
+				? $event_default_registration_status
273
+				: EE_Registry::instance()->CFG->registration->default_STS_ID;
274
+			// if the event default reg status is approved, then downgrade temporarily to payment pending to ensure that payments are triggered
275
+			$STS_ID = $STS_ID === EEM_Registration::status_id_approved ? EEM_Registration::status_id_pending_payment
276
+				: $STS_ID;
277
+			// set incoming REG_Status
278
+			$this->set_new_reg_status($registration->ID(), $STS_ID);
279
+			$registration->set_status($STS_ID, false, $context);
280
+			if ($save) {
281
+				$registration->save();
282
+			}
283
+			// don't trigger notifications during IPNs because they will get triggered by EE_Payment_Processor
284
+			if (! EE_Processor_Base::$IPN) {
285
+				// otherwise, send out notifications
286
+				add_filter('FHEE__EED_Messages___maybe_registration__deliver_notifications', '__return_true', 10);
287
+			}
288
+			// DEBUG LOG
289
+			//$this->log(
290
+			//	__CLASS__, __FUNCTION__, __LINE__,
291
+			//	$registration->transaction(),
292
+			//	array(
293
+			//		'IPN'                   => EE_Processor_Base::$IPN,
294
+			//		'deliver_notifications' => has_filter( 'FHEE__EED_Messages___maybe_registration__deliver_notifications' ),
295
+			//	)
296
+			//);
297
+		}
298
+	}
299
+
300
+
301
+
302
+	/**
303
+	 *    toggle_registration_status_for_default_approved_events
304
+	 *
305
+	 * @access public
306
+	 * @param EE_Registration $registration
307
+	 * @param bool            $save TRUE will save the registration if the status is updated, FALSE will leave that up
308
+	 *                              to client code
309
+	 * @return bool
310
+	 * @throws EE_Error
311
+	 * @throws EntityNotFoundException
312
+	 * @throws InvalidArgumentException
313
+	 * @throws InvalidDataTypeException
314
+	 * @throws InvalidInterfaceException
315
+	 * @throws ReflectionException
316
+	 * @throws RuntimeException
317
+	 */
318
+	public function toggle_registration_status_for_default_approved_events(EE_Registration $registration, $save = true)
319
+	{
320
+		$reg_status = $registration->status_ID();
321
+		// set initial REG_Status
322
+		$this->set_old_reg_status($registration->ID(), $reg_status);
323
+		// if not already, toggle reg status to approved IF the event default reg status is approved
324
+		// ( as long as the registration wasn't cancelled or declined at some point )
325
+		if (
326
+			$reg_status !== EEM_Registration::status_id_cancelled
327
+			&& $reg_status
328
+			   !== EEM_Registration::status_id_declined
329
+			&& $reg_status !== EEM_Registration::status_id_approved
330
+			&& $registration->event()->default_registration_status() === EEM_Registration::status_id_approved
331
+		) {
332
+			// set incoming REG_Status
333
+			$this->set_new_reg_status($registration->ID(), EEM_Registration::status_id_approved);
334
+			// toggle status to approved
335
+			$registration->set_status(EEM_Registration::status_id_approved);
336
+			if ($save) {
337
+				$registration->save();
338
+			}
339
+			// don't trigger notifications during IPNs because they will get triggered by EE_Payment_Processor
340
+			if (! EE_Processor_Base::$IPN) {
341
+				// otherwise, send out notifications
342
+				add_filter('FHEE__EED_Messages___maybe_registration__deliver_notifications', '__return_true', 10);
343
+			}
344
+			// DEBUG LOG
345
+			//$this->log(
346
+			//	__CLASS__, __FUNCTION__, __LINE__,
347
+			//	$registration->transaction(),
348
+			//	array(
349
+			//		'IPN'                   => EE_Processor_Base::$IPN,
350
+			//		'deliver_notifications' => has_filter( 'FHEE__EED_Messages___maybe_registration__deliver_notifications' ),
351
+			//	)
352
+			//);
353
+			return true;
354
+		}
355
+		return false;
356
+	}
357
+
358
+
359
+
360
+	/**
361
+	 *    toggle_registration_statuses_if_no_monies_owing
362
+	 *
363
+	 * @access public
364
+	 * @param EE_Registration $registration
365
+	 * @param bool            $save TRUE will save the registration if the status is updated, FALSE will leave that up
366
+	 *                              to client code
367
+	 * @param array           $additional_details
368
+	 * @return bool
369
+	 * @throws EE_Error
370
+	 * @throws EntityNotFoundException
371
+	 * @throws InvalidArgumentException
372
+	 * @throws InvalidDataTypeException
373
+	 * @throws InvalidInterfaceException
374
+	 * @throws ReflectionException
375
+	 * @throws RuntimeException
376
+	 */
377
+	public function toggle_registration_status_if_no_monies_owing(
378
+		EE_Registration $registration,
379
+		$save = true,
380
+		array $additional_details = array()
381
+	) {
382
+		// set initial REG_Status
383
+		$this->set_old_reg_status($registration->ID(), $registration->status_ID());
384
+		// was a payment just made ?
385
+		$payment    = isset($additional_details['payment_updates'], $additional_details['last_payment'])
386
+					  && $additional_details['payment_updates']
387
+					  && $additional_details['last_payment'] instanceof EE_Payment
388
+			? $additional_details['last_payment']
389
+			: null;
390
+		$total_paid = array_sum(self::$_amount_paid);
391
+		// toggle reg status to approved IF
392
+		if (
393
+			// REG status is pending payment
394
+			$registration->status_ID() === EEM_Registration::status_id_pending_payment
395
+			// AND no monies are owing
396
+			&& (
397
+				(
398
+					$registration->transaction()->is_completed()
399
+					|| $registration->transaction()->is_overpaid()
400
+					|| $registration->transaction()->is_free()
401
+					|| apply_filters(
402
+						'FHEE__EE_Registration_Processor__toggle_registration_status_if_no_monies_owing',
403
+						false,
404
+						$registration
405
+					)
406
+				)
407
+				|| (
408
+					$payment instanceof EE_Payment && $payment->is_approved()
409
+					&& // this specific registration has not yet been paid for
410
+					! isset(self::$_amount_paid[$registration->ID()])
411
+					&& // payment amount, less what we have already attributed to other registrations, is greater than this reg's final price
412
+					$payment->amount() - $total_paid >= $registration->final_price()
413
+				)
414
+			)
415
+		) {
416
+			// mark as paid
417
+			self::$_amount_paid[$registration->ID()] = $registration->final_price();
418
+			// track new REG_Status
419
+			$this->set_new_reg_status($registration->ID(), EEM_Registration::status_id_approved);
420
+			// toggle status to approved
421
+			$registration->set_status(EEM_Registration::status_id_approved);
422
+			if ($save) {
423
+				$registration->save();
424
+			}
425
+			// don't trigger notifications during IPNs because they will get triggered by EE_Payment_Processor
426
+			if (! EE_Processor_Base::$IPN) {
427
+				// otherwise, send out notifications
428
+				add_filter('FHEE__EED_Messages___maybe_registration__deliver_notifications', '__return_true', 10);
429
+			}
430
+			// DEBUG LOG
431
+			//$this->log(
432
+			//	__CLASS__, __FUNCTION__, __LINE__,
433
+			//	$registration->transaction(),
434
+			//	array(
435
+			//		'IPN'                   => EE_Processor_Base::$IPN,
436
+			//		'deliver_notifications' => has_filter( 'FHEE__EED_Messages___maybe_registration__deliver_notifications' ),
437
+			//	)
438
+			//);
439
+			return true;
440
+		}
441
+		return false;
442
+	}
443
+
444
+
445
+
446
+	/**
447
+	 *    registration_status_changed
448
+	 *
449
+	 * @access public
450
+	 * @param EE_Registration $registration
451
+	 * @param array           $additional_details
452
+	 * @return void
453
+	 */
454
+	public function trigger_registration_update_notifications($registration, array $additional_details = array())
455
+	{
456
+		try {
457
+			if (! $registration instanceof EE_Registration) {
458
+				throw new EE_Error(
459
+					esc_html__('An invalid registration was received.', 'event_espresso')
460
+				);
461
+			}
462
+			// EE_Registry::instance()->load_helper( 'Debug_Tools' );
463
+			// EEH_Debug_Tools::log(
464
+			// 	__CLASS__,
465
+			// 	__FUNCTION__,
466
+			// 	__LINE__,
467
+			// 	array( $registration->transaction(), $additional_details ),
468
+			// 	false,
469
+			// 	'EE_Transaction: ' . $registration->transaction()->ID()
470
+			// );
471
+			if (! $registration->is_primary_registrant()) {
472
+				return;
473
+			}
474
+			do_action(
475
+				'AHEE__EE_Registration_Processor__trigger_registration_update_notifications',
476
+				$registration,
477
+				$additional_details
478
+			);
479
+		} catch (Exception $e) {
480
+			EE_Error::add_error($e->getMessage(), $e->getFile(), 'unknown_function_from_exception', $e->getLine());
481
+		}
482
+	}
483
+
484
+
485
+
486
+	/**
487
+	 * sets reg status based either on passed param or on transaction status and event pre-approval setting
488
+	 *
489
+	 * @param EE_Registration $registration
490
+	 * @param array           $additional_details
491
+	 * @return bool
492
+	 * @throws EE_Error
493
+	 * @throws EntityNotFoundException
494
+	 * @throws InvalidArgumentException
495
+	 * @throws InvalidDataTypeException
496
+	 * @throws InvalidInterfaceException
497
+	 * @throws ReflectionException
498
+	 * @throws RuntimeException
499
+	 */
500
+	public function update_registration_after_checkout_or_payment(
501
+		EE_Registration $registration,
502
+		array $additional_details = array()
503
+	) {
504
+		// set initial REG_Status
505
+		$this->set_old_reg_status($registration->ID(), $registration->status_ID());
506
+		// if the registration status gets updated, then save the registration
507
+		if (
508
+			$this->toggle_registration_status_for_default_approved_events($registration, false)
509
+			|| $this->toggle_registration_status_if_no_monies_owing(
510
+				$registration,
511
+				false,
512
+				$additional_details
513
+			)
514
+		) {
515
+			$registration->save();
516
+		}
517
+		// set new  REG_Status
518
+		$this->set_new_reg_status($registration->ID(), $registration->status_ID());
519
+		return $this->reg_status_updated($registration->ID())
520
+			   && $this->new_reg_status($registration->ID()) === EEM_Registration::status_id_approved;
521
+	}
522
+
523
+
524
+
525
+	/**
526
+	 * Updates the registration' final prices based on the current line item tree (taking into account
527
+	 * discounts, taxes, and other line items unrelated to tickets.)
528
+	 *
529
+	 * @param EE_Transaction $transaction
530
+	 * @param boolean        $save_regs whether to immediately save registrations in this function or not
531
+	 * @return void
532
+	 * @throws EE_Error
533
+	 * @throws InvalidArgumentException
534
+	 * @throws InvalidDataTypeException
535
+	 * @throws InvalidInterfaceException
536
+	 * @throws RuntimeException
537
+	 */
538
+	public function update_registration_final_prices($transaction, $save_regs = true)
539
+	{
540
+		$reg_final_price_per_ticket_line_item = EEH_Line_Item::calculate_reg_final_prices_per_line_item(
541
+			$transaction->total_line_item()
542
+		);
543
+		foreach ($transaction->registrations() as $registration) {
544
+			/** @var EE_Line_Item $line_item */
545
+			$line_item = EEM_Line_Item::instance()->get_line_item_for_registration($registration);
546
+			if (isset($reg_final_price_per_ticket_line_item[$line_item->ID()])) {
547
+				$registration->set_final_price($reg_final_price_per_ticket_line_item[$line_item->ID()]);
548
+				if ($save_regs) {
549
+					$registration->save();
550
+				}
551
+			}
552
+		}
553
+		//and make sure there's no rounding problem
554
+		$this->fix_reg_final_price_rounding_issue($transaction);
555
+	}
556
+
557
+
558
+
559
+	/**
560
+	 * Makes sure there is no rounding errors for the REG_final_prices.
561
+	 * Eg, if we have 3 registrations for $1, and there is a $0.01 discount between the three of them,
562
+	 * they will each be for $0.99333333, which gets rounded to $1 again.
563
+	 * So the transaction total will be $2.99, but each registration will be for $1,
564
+	 * so if each registrant paid individually they will have overpaid by $0.01.
565
+	 * So in order to overcome this, we check for any difference, and if there is a difference
566
+	 * we just grab one registrant at random and make them responsible for it.
567
+	 * This should be used after setting REG_final_prices (it's done automatically as part of
568
+	 * EE_Registration_Processor::update_registration_final_prices())
569
+	 *
570
+	 * @param EE_Transaction $transaction
571
+	 * @return bool success verifying that there is NO difference after this method is done
572
+	 * @throws EE_Error
573
+	 * @throws InvalidArgumentException
574
+	 * @throws InvalidDataTypeException
575
+	 * @throws InvalidInterfaceException
576
+	 */
577
+	public function fix_reg_final_price_rounding_issue($transaction)
578
+	{
579
+		$reg_final_price_sum = EEM_Registration::instance()->sum(
580
+			array(
581
+				array(
582
+					'TXN_ID' => $transaction->ID(),
583
+				),
584
+			),
585
+			'REG_final_price'
586
+		);
587
+		$diff = $transaction->total() - $reg_final_price_sum;
588
+		//ok then, just grab one of the registrations
589
+		if ($diff !== 0) {
590
+			$a_reg   = EEM_Registration::instance()->get_one(
591
+				array(
592
+					array(
593
+						'TXN_ID' => $transaction->ID(),
594
+					),
595
+				)
596
+			);
597
+			return $a_reg instanceof EE_Registration
598
+				? (bool) $a_reg->save(array('REG_final_price' => $a_reg->final_price() + $diff))
599
+				: false;
600
+		}
601
+		return true;
602
+	}
603
+
604
+
605
+
606
+	/**
607
+	 * update_registration_after_being_canceled_or_declined
608
+	 *
609
+	 * @param EE_Registration $registration
610
+	 * @param array           $closed_reg_statuses
611
+	 * @param bool            $update_reg
612
+	 * @return bool
613
+	 * @throws EE_Error
614
+	 * @throws RuntimeException
615
+	 */
616
+	public function update_registration_after_being_canceled_or_declined(
617
+		EE_Registration $registration,
618
+		array $closed_reg_statuses = array(),
619
+		$update_reg = true
620
+	) {
621
+		// these reg statuses should not be considered in any calculations involving monies owing
622
+		$closed_reg_statuses = ! empty($closed_reg_statuses)
623
+			? $closed_reg_statuses
624
+			: EEM_Registration::closed_reg_statuses();
625
+		if (! in_array($registration->status_ID(), $closed_reg_statuses, true)) {
626
+			return false;
627
+		}
628
+		// release a reserved ticket by decrementing ticket and datetime reserved values
629
+		$registration->release_reserved_ticket(true, 'RegProcessor:'. __LINE__);
630
+		$registration->set_final_price(0);
631
+		if ($update_reg) {
632
+			$registration->save();
633
+		}
634
+		return true;
635
+	}
636
+
637
+
638
+
639
+	/**
640
+	 * update_canceled_or_declined_registration_after_being_reinstated
641
+	 *
642
+	 * @param EE_Registration $registration
643
+	 * @param array           $closed_reg_statuses
644
+	 * @param bool            $update_reg
645
+	 * @return bool
646
+	 * @throws EE_Error
647
+	 * @throws RuntimeException
648
+	 */
649
+	public function update_canceled_or_declined_registration_after_being_reinstated(
650
+		EE_Registration $registration,
651
+		array $closed_reg_statuses = array(),
652
+		$update_reg = true
653
+	) {
654
+		// these reg statuses should not be considered in any calculations involving monies owing
655
+		$closed_reg_statuses = ! empty($closed_reg_statuses) ? $closed_reg_statuses
656
+			: EEM_Registration::closed_reg_statuses();
657
+		if (in_array($registration->status_ID(), $closed_reg_statuses, true)) {
658
+			return false;
659
+		}
660
+		$ticket = $registration->ticket();
661
+		if (! $ticket instanceof EE_Ticket) {
662
+			throw new EE_Error(
663
+				sprintf(
664
+					esc_html__(
665
+						'The Ticket for Registration %1$d was not found or is invalid.',
666
+						'event_espresso'
667
+					),
668
+					$registration->ticket_ID()
669
+				)
670
+			);
671
+		}
672
+		$registration->set_final_price($ticket->price());
673
+		if ($update_reg) {
674
+			$registration->save();
675
+		}
676
+		return true;
677
+	}
678
+
679
+
680
+
681
+	/**
682
+	 * generate_ONE_registration_from_line_item
683
+	 * Although a ticket line item may have a quantity greater than 1,
684
+	 * this method will ONLY CREATE ONE REGISTRATION !!!
685
+	 * Regardless of the ticket line item quantity.
686
+	 * This means that any code calling this method is responsible for ensuring
687
+	 * that the final registration count matches the ticket line item quantity.
688
+	 * This was done to make it easier to match the number of registrations
689
+	 * to the number of tickets in the cart, when the cart has been edited
690
+	 * after SPCO has already been initialized. So if an additional ticket was added to the cart, you can simply pass
691
+	 * the line item to this method to add a second ticket, and in this case, you would not want to add 2 tickets.
692
+	 *
693
+	 * @deprecated
694
+	 * @since 4.9.1
695
+	 * @param EE_Line_Item    $line_item
696
+	 * @param \EE_Transaction $transaction
697
+	 * @param int             $att_nmbr
698
+	 * @param int             $total_ticket_count
699
+	 * @return EE_Registration | null
700
+	 * @throws \OutOfRangeException
701
+	 * @throws \EventEspresso\core\exceptions\UnexpectedEntityException
702
+	 * @throws \EE_Error
703
+	 */
704
+	public function generate_ONE_registration_from_line_item(
705
+		EE_Line_Item $line_item,
706
+		EE_Transaction $transaction,
707
+		$att_nmbr = 1,
708
+		$total_ticket_count = 1
709
+	) {
710
+		EE_Error::doing_it_wrong(
711
+			__CLASS__ . '::' . __FUNCTION__,
712
+			sprintf(
713
+				esc_html__('This method is deprecated. Please use "%s" instead', 'event_espresso'),
714
+				'\EventEspresso\core\domain\services\registration\CreateRegistrationService::create()'
715
+			),
716
+			'4.9.1',
717
+			'5.0.0'
718
+		);
719
+		// grab the related ticket object for this line_item
720
+		$ticket = $line_item->ticket();
721
+		if (! $ticket instanceof EE_Ticket) {
722
+			EE_Error::add_error(
723
+				sprintf(
724
+					esc_html__('Line item %s did not contain a valid ticket', 'event_espresso'),
725
+					$line_item->ID()
726
+				),
727
+				__FILE__,
728
+				__FUNCTION__,
729
+				__LINE__
730
+			);
731
+			return null;
732
+		}
733
+		$registration_service = new CreateRegistrationService();
734
+		// then generate a new registration from that
735
+		return $registration_service->create(
736
+			$ticket->get_related_event(),
737
+			$transaction,
738
+			$ticket,
739
+			$line_item,
740
+			$att_nmbr,
741
+			$total_ticket_count
742
+		);
743
+	}
744
+
745
+
746
+
747
+	/**
748
+	 * generates reg_url_link
749
+	 *
750
+	 * @deprecated
751
+	 * @since 4.9.1
752
+	 * @param int                   $att_nmbr
753
+	 * @param EE_Line_Item | string $item
754
+	 * @return string
755
+	 * @throws InvalidArgumentException
756
+	 */
757
+	public function generate_reg_url_link($att_nmbr, $item)
758
+	{
759
+		EE_Error::doing_it_wrong(
760
+			__CLASS__ . '::' . __FUNCTION__,
761
+			sprintf(
762
+				esc_html__('This method is deprecated. Please use "%s" instead', 'event_espresso'),
763
+				'EventEspresso\core\domain\entities\RegUrlLink'
764
+			),
765
+			'4.9.1',
766
+			'5.0.0'
767
+		);
768
+		return new RegUrlLink($att_nmbr, $item);
769
+	}
770
+
771
+
772
+
773
+	/**
774
+	 * generates reg code
775
+	 *
776
+	 * @deprecated
777
+	 * @since 4.9.1
778
+	 * @param EE_Registration $registration
779
+	 * @return string
780
+	 * @throws EE_Error
781
+	 * @throws EntityNotFoundException
782
+	 * @throws InvalidArgumentException
783
+	 */
784
+	public function generate_reg_code(EE_Registration $registration)
785
+	{
786
+		EE_Error::doing_it_wrong(
787
+			__CLASS__ . '::' . __FUNCTION__,
788
+			sprintf(
789
+				esc_html__('This method is deprecated. Please use "%s" instead', 'event_espresso'),
790
+				'EventEspresso\core\domain\entities\RegCode'
791
+			),
792
+			'4.9.1',
793
+			'5.0.0'
794
+		);
795
+		return apply_filters(
796
+			'FHEE__EE_Registration_Processor___generate_reg_code__new_reg_code',
797
+			new RegCode(
798
+				RegUrlLink::fromRegistration($registration),
799
+				$registration->transaction(),
800
+				$registration->ticket()
801
+			),
802
+			$registration
803
+		);
804
+	}
805 805
 
806 806
 
807 807
 
Please login to merge, or discard this patch.
Spacing   +18 added lines, -18 removed lines patch added patch discarded remove patch
@@ -83,8 +83,8 @@  discard block
 block discarded – undo
83 83
     public static function instance(EE_Request $request = null)
84 84
     {
85 85
         // check if class object is instantiated
86
-        if (! self::$_instance instanceof EE_Registration_Processor) {
87
-            if(! $request instanceof EE_Request) {
86
+        if ( ! self::$_instance instanceof EE_Registration_Processor) {
87
+            if ( ! $request instanceof EE_Request) {
88 88
                 $request = LoaderFactory::getLoader()->getShared('EE_Request');
89 89
             }
90 90
             self::$_instance = new self($request);
@@ -123,7 +123,7 @@  discard block
 block discarded – undo
123 123
     public function set_old_reg_status($REG_ID, $old_reg_status)
124 124
     {
125 125
         // only set the first time
126
-        if (! isset($this->_old_reg_status[$REG_ID])) {
126
+        if ( ! isset($this->_old_reg_status[$REG_ID])) {
127 127
             $this->_old_reg_status[$REG_ID] = $old_reg_status;
128 128
         }
129 129
     }
@@ -217,7 +217,7 @@  discard block
 block discarded – undo
217 217
         if (
218 218
             $this->reg_status_updated($registration->ID())
219 219
             && (
220
-                (! $this->request->isAdmin() || $this->request->isFrontAjax())
220
+                ( ! $this->request->isAdmin() || $this->request->isFrontAjax())
221 221
                 || EE_Registry::instance()->CAP->current_user_can(
222 222
                     'ee_edit_registration',
223 223
                     'toggle_registration_status',
@@ -281,7 +281,7 @@  discard block
 block discarded – undo
281 281
                 $registration->save();
282 282
             }
283 283
             // don't trigger notifications during IPNs because they will get triggered by EE_Payment_Processor
284
-            if (! EE_Processor_Base::$IPN) {
284
+            if ( ! EE_Processor_Base::$IPN) {
285 285
                 // otherwise, send out notifications
286 286
                 add_filter('FHEE__EED_Messages___maybe_registration__deliver_notifications', '__return_true', 10);
287 287
             }
@@ -337,7 +337,7 @@  discard block
 block discarded – undo
337 337
                 $registration->save();
338 338
             }
339 339
             // don't trigger notifications during IPNs because they will get triggered by EE_Payment_Processor
340
-            if (! EE_Processor_Base::$IPN) {
340
+            if ( ! EE_Processor_Base::$IPN) {
341 341
                 // otherwise, send out notifications
342 342
                 add_filter('FHEE__EED_Messages___maybe_registration__deliver_notifications', '__return_true', 10);
343 343
             }
@@ -382,7 +382,7 @@  discard block
 block discarded – undo
382 382
         // set initial REG_Status
383 383
         $this->set_old_reg_status($registration->ID(), $registration->status_ID());
384 384
         // was a payment just made ?
385
-        $payment    = isset($additional_details['payment_updates'], $additional_details['last_payment'])
385
+        $payment = isset($additional_details['payment_updates'], $additional_details['last_payment'])
386 386
                       && $additional_details['payment_updates']
387 387
                       && $additional_details['last_payment'] instanceof EE_Payment
388 388
             ? $additional_details['last_payment']
@@ -423,7 +423,7 @@  discard block
 block discarded – undo
423 423
                 $registration->save();
424 424
             }
425 425
             // don't trigger notifications during IPNs because they will get triggered by EE_Payment_Processor
426
-            if (! EE_Processor_Base::$IPN) {
426
+            if ( ! EE_Processor_Base::$IPN) {
427 427
                 // otherwise, send out notifications
428 428
                 add_filter('FHEE__EED_Messages___maybe_registration__deliver_notifications', '__return_true', 10);
429 429
             }
@@ -454,7 +454,7 @@  discard block
 block discarded – undo
454 454
     public function trigger_registration_update_notifications($registration, array $additional_details = array())
455 455
     {
456 456
         try {
457
-            if (! $registration instanceof EE_Registration) {
457
+            if ( ! $registration instanceof EE_Registration) {
458 458
                 throw new EE_Error(
459 459
                     esc_html__('An invalid registration was received.', 'event_espresso')
460 460
                 );
@@ -468,7 +468,7 @@  discard block
 block discarded – undo
468 468
             // 	false,
469 469
             // 	'EE_Transaction: ' . $registration->transaction()->ID()
470 470
             // );
471
-            if (! $registration->is_primary_registrant()) {
471
+            if ( ! $registration->is_primary_registrant()) {
472 472
                 return;
473 473
             }
474 474
             do_action(
@@ -587,7 +587,7 @@  discard block
 block discarded – undo
587 587
         $diff = $transaction->total() - $reg_final_price_sum;
588 588
         //ok then, just grab one of the registrations
589 589
         if ($diff !== 0) {
590
-            $a_reg   = EEM_Registration::instance()->get_one(
590
+            $a_reg = EEM_Registration::instance()->get_one(
591 591
                 array(
592 592
                     array(
593 593
                         'TXN_ID' => $transaction->ID(),
@@ -622,11 +622,11 @@  discard block
 block discarded – undo
622 622
         $closed_reg_statuses = ! empty($closed_reg_statuses)
623 623
             ? $closed_reg_statuses
624 624
             : EEM_Registration::closed_reg_statuses();
625
-        if (! in_array($registration->status_ID(), $closed_reg_statuses, true)) {
625
+        if ( ! in_array($registration->status_ID(), $closed_reg_statuses, true)) {
626 626
             return false;
627 627
         }
628 628
         // release a reserved ticket by decrementing ticket and datetime reserved values
629
-        $registration->release_reserved_ticket(true, 'RegProcessor:'. __LINE__);
629
+        $registration->release_reserved_ticket(true, 'RegProcessor:'.__LINE__);
630 630
         $registration->set_final_price(0);
631 631
         if ($update_reg) {
632 632
             $registration->save();
@@ -658,7 +658,7 @@  discard block
 block discarded – undo
658 658
             return false;
659 659
         }
660 660
         $ticket = $registration->ticket();
661
-        if (! $ticket instanceof EE_Ticket) {
661
+        if ( ! $ticket instanceof EE_Ticket) {
662 662
             throw new EE_Error(
663 663
                 sprintf(
664 664
                     esc_html__(
@@ -708,7 +708,7 @@  discard block
 block discarded – undo
708 708
         $total_ticket_count = 1
709 709
     ) {
710 710
         EE_Error::doing_it_wrong(
711
-            __CLASS__ . '::' . __FUNCTION__,
711
+            __CLASS__.'::'.__FUNCTION__,
712 712
             sprintf(
713 713
                 esc_html__('This method is deprecated. Please use "%s" instead', 'event_espresso'),
714 714
                 '\EventEspresso\core\domain\services\registration\CreateRegistrationService::create()'
@@ -718,7 +718,7 @@  discard block
 block discarded – undo
718 718
         );
719 719
         // grab the related ticket object for this line_item
720 720
         $ticket = $line_item->ticket();
721
-        if (! $ticket instanceof EE_Ticket) {
721
+        if ( ! $ticket instanceof EE_Ticket) {
722 722
             EE_Error::add_error(
723 723
                 sprintf(
724 724
                     esc_html__('Line item %s did not contain a valid ticket', 'event_espresso'),
@@ -757,7 +757,7 @@  discard block
 block discarded – undo
757 757
     public function generate_reg_url_link($att_nmbr, $item)
758 758
     {
759 759
         EE_Error::doing_it_wrong(
760
-            __CLASS__ . '::' . __FUNCTION__,
760
+            __CLASS__.'::'.__FUNCTION__,
761 761
             sprintf(
762 762
                 esc_html__('This method is deprecated. Please use "%s" instead', 'event_espresso'),
763 763
                 'EventEspresso\core\domain\entities\RegUrlLink'
@@ -784,7 +784,7 @@  discard block
 block discarded – undo
784 784
     public function generate_reg_code(EE_Registration $registration)
785 785
     {
786 786
         EE_Error::doing_it_wrong(
787
-            __CLASS__ . '::' . __FUNCTION__,
787
+            __CLASS__.'::'.__FUNCTION__,
788 788
             sprintf(
789 789
                 esc_html__('This method is deprecated. Please use "%s" instead', 'event_espresso'),
790 790
                 'EventEspresso\core\domain\entities\RegCode'
Please login to merge, or discard this patch.
core/db_classes/EE_Registration.class.php 2 patches
Indentation   +2017 added lines, -2017 removed lines patch added patch discarded remove patch
@@ -18,2023 +18,2023 @@
 block discarded – undo
18 18
 {
19 19
 
20 20
 
21
-    /**
22
-     * Used to reference when a registration has never been checked in.
23
-     *
24
-     * @deprecated use \EE_Checkin::status_checked_never instead
25
-     * @type int
26
-     */
27
-    const checkin_status_never = 2;
28
-
29
-    /**
30
-     * Used to reference when a registration has been checked in.
31
-     *
32
-     * @deprecated use \EE_Checkin::status_checked_in instead
33
-     * @type int
34
-     */
35
-    const checkin_status_in = 1;
36
-
37
-
38
-    /**
39
-     * Used to reference when a registration has been checked out.
40
-     *
41
-     * @deprecated use \EE_Checkin::status_checked_out instead
42
-     * @type int
43
-     */
44
-    const checkin_status_out = 0;
45
-
46
-
47
-    /**
48
-     * extra meta key for tracking reg status os trashed registrations
49
-     *
50
-     * @type string
51
-     */
52
-    const PRE_TRASH_REG_STATUS_KEY = 'pre_trash_registration_status';
53
-
54
-
55
-    /**
56
-     * extra meta key for tracking if registration has reserved ticket
57
-     *
58
-     * @type string
59
-     */
60
-    const HAS_RESERVED_TICKET_KEY = 'has_reserved_ticket';
61
-
62
-
63
-    /**
64
-     * @param array  $props_n_values          incoming values
65
-     * @param string $timezone                incoming timezone (if not set the timezone set for the website will be
66
-     *                                        used.)
67
-     * @param array  $date_formats            incoming date_formats in an array where the first value is the
68
-     *                                        date_format and the second value is the time format
69
-     * @return EE_Registration
70
-     * @throws EE_Error
71
-     */
72
-    public static function new_instance($props_n_values = array(), $timezone = null, $date_formats = array())
73
-    {
74
-        $has_object = parent::_check_for_object($props_n_values, __CLASS__, $timezone, $date_formats);
75
-        return $has_object ? $has_object : new self($props_n_values, false, $timezone, $date_formats);
76
-    }
77
-
78
-
79
-    /**
80
-     * @param array  $props_n_values  incoming values from the database
81
-     * @param string $timezone        incoming timezone as set by the model.  If not set the timezone for
82
-     *                                the website will be used.
83
-     * @return EE_Registration
84
-     */
85
-    public static function new_instance_from_db($props_n_values = array(), $timezone = null)
86
-    {
87
-        return new self($props_n_values, true, $timezone);
88
-    }
89
-
90
-
91
-    /**
92
-     *        Set Event ID
93
-     *
94
-     * @param        int $EVT_ID Event ID
95
-     * @throws EE_Error
96
-     * @throws RuntimeException
97
-     */
98
-    public function set_event($EVT_ID = 0)
99
-    {
100
-        $this->set('EVT_ID', $EVT_ID);
101
-    }
102
-
103
-
104
-    /**
105
-     * Overrides parent set() method so that all calls to set( 'REG_code', $REG_code ) OR set( 'STS_ID', $STS_ID ) can
106
-     * be routed to internal methods
107
-     *
108
-     * @param string $field_name
109
-     * @param mixed  $field_value
110
-     * @param bool   $use_default
111
-     * @throws EE_Error
112
-     * @throws EntityNotFoundException
113
-     * @throws InvalidArgumentException
114
-     * @throws InvalidDataTypeException
115
-     * @throws InvalidInterfaceException
116
-     * @throws ReflectionException
117
-     * @throws RuntimeException
118
-     */
119
-    public function set($field_name, $field_value, $use_default = false)
120
-    {
121
-        switch ($field_name) {
122
-            case 'REG_code':
123
-                if (! empty($field_value) && $this->reg_code() === null) {
124
-                    $this->set_reg_code($field_value, $use_default);
125
-                }
126
-                break;
127
-            case 'STS_ID':
128
-                $this->set_status($field_value, $use_default);
129
-                break;
130
-            default:
131
-                parent::set($field_name, $field_value, $use_default);
132
-        }
133
-    }
134
-
135
-
136
-    /**
137
-     * Set Status ID
138
-     * updates the registration status and ALSO...
139
-     * calls reserve_registration_space() if the reg status changes TO approved from any other reg status
140
-     * calls release_registration_space() if the reg status changes FROM approved to any other reg status
141
-     *
142
-     * @param string       $new_STS_ID
143
-     * @param boolean      $use_default
144
-     * @param ContextInterface|null $context
145
-     * @return bool
146
-     * @throws EE_Error
147
-     * @throws EntityNotFoundException
148
-     * @throws InvalidArgumentException
149
-     * @throws ReflectionException
150
-     * @throws RuntimeException
151
-     * @throws InvalidDataTypeException
152
-     * @throws InvalidInterfaceException
153
-     */
154
-    public function set_status($new_STS_ID = null, $use_default = false, ContextInterface $context = null)
155
-    {
156
-        // get current REG_Status
157
-        $old_STS_ID = $this->status_ID();
158
-        // if status has changed
159
-        if ($old_STS_ID !== $new_STS_ID // and that status has actually changed
160
-            && ! empty($old_STS_ID) // and that old status is actually set
161
-            && ! empty($new_STS_ID) // as well as the new status
162
-            && $this->ID() // ensure registration is in the db
163
-        ) {
164
-            // TO approved
165
-            if ($new_STS_ID === EEM_Registration::status_id_approved) {
166
-                // reserve a space by incrementing ticket and datetime sold values
167
-                $this->_reserve_registration_space();
168
-                do_action('AHEE__EE_Registration__set_status__to_approved', $this, $old_STS_ID, $new_STS_ID, $context);
169
-                // OR FROM  approved
170
-            } elseif ($old_STS_ID === EEM_Registration::status_id_approved) {
171
-                // release a space by decrementing ticket and datetime sold values
172
-                $this->_release_registration_space();
173
-                do_action(
174
-                    'AHEE__EE_Registration__set_status__from_approved',
175
-                    $this,
176
-                    $old_STS_ID,
177
-                    $new_STS_ID,
178
-                    $context
179
-                );
180
-            }
181
-            // update status
182
-            parent::set('STS_ID', $new_STS_ID, $use_default);
183
-            $this->_update_if_canceled_or_declined($new_STS_ID, $old_STS_ID, $context);
184
-            if($this->statusChangeUpdatesTransaction($context)) {
185
-                $this->updateTransactionAfterStatusChange();
186
-            }
187
-            do_action('AHEE__EE_Registration__set_status__after_update', $this, $old_STS_ID, $new_STS_ID, $context);
188
-            return true;
189
-        }
190
-        //even though the old value matches the new value, it's still good to
191
-        //allow the parent set method to have a say
192
-        parent::set('STS_ID', $new_STS_ID, $use_default);
193
-        return true;
194
-    }
195
-
196
-
197
-    /**
198
-     * update REGs and TXN when cancelled or declined registrations involved
199
-     *
200
-     * @param string       $new_STS_ID
201
-     * @param string       $old_STS_ID
202
-     * @param ContextInterface|null $context
203
-     * @throws EE_Error
204
-     * @throws InvalidArgumentException
205
-     * @throws InvalidDataTypeException
206
-     * @throws InvalidInterfaceException
207
-     * @throws ReflectionException
208
-     */
209
-    private function _update_if_canceled_or_declined($new_STS_ID, $old_STS_ID, ContextInterface $context = null)
210
-    {
211
-        // these reg statuses should not be considered in any calculations involving monies owing
212
-        $closed_reg_statuses = EEM_Registration::closed_reg_statuses();
213
-        // true if registration has been cancelled or declined
214
-        $this->updateIfCanceled(
215
-            $closed_reg_statuses,
216
-            $new_STS_ID,
217
-            $old_STS_ID,
218
-            $context
219
-        );
220
-        $this->updateIfDeclined(
221
-            $closed_reg_statuses,
222
-            $new_STS_ID,
223
-            $old_STS_ID,
224
-            $context
225
-        );
226
-    }
227
-
228
-
229
-    /**
230
-     * update REGs and TXN when cancelled or declined registrations involved
231
-     *
232
-     * @param array        $closed_reg_statuses
233
-     * @param string       $new_STS_ID
234
-     * @param string       $old_STS_ID
235
-     * @param ContextInterface|null $context
236
-     * @throws EE_Error
237
-     * @throws InvalidArgumentException
238
-     * @throws InvalidDataTypeException
239
-     * @throws InvalidInterfaceException
240
-     * @throws ReflectionException
241
-     */
242
-    private function updateIfCanceled(array $closed_reg_statuses, $new_STS_ID, $old_STS_ID, ContextInterface $context = null)
243
-    {
244
-        // true if registration has been cancelled or declined
245
-        if (in_array($new_STS_ID, $closed_reg_statuses, true)
246
-            && ! in_array($old_STS_ID, $closed_reg_statuses, true)
247
-        ) {
248
-            /** @type EE_Registration_Processor $registration_processor */
249
-            $registration_processor = EE_Registry::instance()->load_class('Registration_Processor');
250
-            /** @type EE_Transaction_Processor $transaction_processor */
251
-            $transaction_processor = EE_Registry::instance()->load_class('Transaction_Processor');
252
-            // cancelled or declined registration
253
-            $registration_processor->update_registration_after_being_canceled_or_declined(
254
-                $this,
255
-                $closed_reg_statuses
256
-            );
257
-            $transaction_processor->update_transaction_after_canceled_or_declined_registration(
258
-                $this,
259
-                $closed_reg_statuses,
260
-                false
261
-            );
262
-            do_action(
263
-                'AHEE__EE_Registration__set_status__canceled_or_declined',
264
-                $this,
265
-                $old_STS_ID,
266
-                $new_STS_ID,
267
-                $context
268
-            );
269
-            return;
270
-        }
271
-    }
272
-
273
-
274
-    /**
275
-     * update REGs and TXN when cancelled or declined registrations involved
276
-     *
277
-     * @param array        $closed_reg_statuses
278
-     * @param string       $new_STS_ID
279
-     * @param string       $old_STS_ID
280
-     * @param ContextInterface|null $context
281
-     * @throws EE_Error
282
-     * @throws InvalidArgumentException
283
-     * @throws InvalidDataTypeException
284
-     * @throws InvalidInterfaceException
285
-     * @throws ReflectionException
286
-     */
287
-    private function updateIfDeclined(array $closed_reg_statuses, $new_STS_ID, $old_STS_ID, ContextInterface $context = null)
288
-    {
289
-        // true if reinstating cancelled or declined registration
290
-        if (in_array($old_STS_ID, $closed_reg_statuses, true)
291
-            && ! in_array($new_STS_ID, $closed_reg_statuses, true)
292
-        ) {
293
-            /** @type EE_Registration_Processor $registration_processor */
294
-            $registration_processor = EE_Registry::instance()->load_class('Registration_Processor');
295
-            /** @type EE_Transaction_Processor $transaction_processor */
296
-            $transaction_processor = EE_Registry::instance()->load_class('Transaction_Processor');
297
-            // reinstating cancelled or declined registration
298
-            $registration_processor->update_canceled_or_declined_registration_after_being_reinstated(
299
-                $this,
300
-                $closed_reg_statuses
301
-            );
302
-            $transaction_processor->update_transaction_after_reinstating_canceled_registration(
303
-                $this,
304
-                $closed_reg_statuses,
305
-                false
306
-            );
307
-            do_action(
308
-                'AHEE__EE_Registration__set_status__after_reinstated',
309
-                $this,
310
-                $old_STS_ID,
311
-                $new_STS_ID,
312
-                $context
313
-            );
314
-        }
315
-    }
316
-
317
-
318
-    /**
319
-     * @param ContextInterface|null $context
320
-     * @return bool
321
-     */
322
-    private function statusChangeUpdatesTransaction(ContextInterface $context = null)
323
-    {
324
-        $contexts_that_do_not_update_transaction = (array) apply_filters(
325
-            'AHEE__EE_Registration__statusChangeUpdatesTransaction__contexts_that_do_not_update_transaction',
326
-            array('spco_reg_step_attendee_information_process_registrations'),
327
-            $context,
328
-            $this
329
-        );
330
-        return ! (
331
-            $context instanceof ContextInterface
332
-            && in_array($context->slug(), $contexts_that_do_not_update_transaction, true)
333
-        );
334
-    }
335
-
336
-
337
-    /**
338
-     * @throws EE_Error
339
-     * @throws EntityNotFoundException
340
-     * @throws InvalidArgumentException
341
-     * @throws InvalidDataTypeException
342
-     * @throws InvalidInterfaceException
343
-     * @throws ReflectionException
344
-     * @throws RuntimeException
345
-     */
346
-    private function updateTransactionAfterStatusChange()
347
-    {
348
-        /** @type EE_Transaction_Payments $transaction_payments */
349
-        $transaction_payments = EE_Registry::instance()->load_class('Transaction_Payments');
350
-        $transaction_payments->recalculate_transaction_total($this->transaction(), false);
351
-        $this->transaction()->update_status_based_on_total_paid(true);
352
-    }
353
-
354
-
355
-    /**
356
-     *        get Status ID
357
-     */
358
-    public function status_ID()
359
-    {
360
-        return $this->get('STS_ID');
361
-    }
362
-
363
-
364
-    /**
365
-     * increments this registration's related ticket sold and corresponding datetime sold values
366
-     *
367
-     * @return void
368
-     * @throws EE_Error
369
-     * @throws EntityNotFoundException
370
-     */
371
-    private function _reserve_registration_space()
372
-    {
373
-        // reserved ticket and datetime counts will be decremented as sold counts are incremented
374
-        // so stop tracking that this reg has a ticket reserved
375
-        $this->release_reserved_ticket(false, "REG: {$this->ID()} (ln:". __LINE__ . ')');
376
-        $ticket = $this->ticket();
377
-        $ticket->increase_sold();
378
-        $ticket->save();
379
-        // possibly set event status to sold out
380
-        $this->event()->perform_sold_out_status_check();
381
-    }
382
-
383
-
384
-    /**
385
-     * Gets the ticket this registration is for
386
-     *
387
-     * @param boolean $include_archived whether to include archived tickets or not.
388
-     *
389
-     * @return EE_Ticket|EE_Base_Class
390
-     * @throws EE_Error
391
-     */
392
-    public function ticket($include_archived = true)
393
-    {
394
-        $query_params = array();
395
-        if ($include_archived) {
396
-            $query_params['default_where_conditions'] = 'none';
397
-        }
398
-        return $this->get_first_related('Ticket', $query_params);
399
-    }
400
-
401
-
402
-    /**
403
-     * Gets the event this registration is for
404
-     *
405
-     * @return EE_Event
406
-     * @throws EE_Error
407
-     * @throws EntityNotFoundException
408
-     */
409
-    public function event()
410
-    {
411
-        $event = $this->get_first_related('Event');
412
-        if (! $event instanceof \EE_Event) {
413
-            throw new EntityNotFoundException('Event ID', $this->event_ID());
414
-        }
415
-        return $event;
416
-    }
417
-
418
-
419
-    /**
420
-     * Gets the "author" of the registration.  Note that for the purposes of registrations, the author will correspond
421
-     * with the author of the event this registration is for.
422
-     *
423
-     * @since 4.5.0
424
-     * @return int
425
-     * @throws EE_Error
426
-     * @throws EntityNotFoundException
427
-     */
428
-    public function wp_user()
429
-    {
430
-        $event = $this->event();
431
-        if ($event instanceof EE_Event) {
432
-            return $event->wp_user();
433
-        }
434
-        return 0;
435
-    }
436
-
437
-
438
-    /**
439
-     * decrements (subtracts) this registration's related ticket sold and corresponding datetime sold values
440
-     *
441
-     * @return void
442
-     * @throws EE_Error
443
-     */
444
-    private function _release_registration_space()
445
-    {
446
-        $ticket = $this->ticket();
447
-        $ticket->decrease_sold();
448
-        $ticket->save();
449
-    }
450
-
451
-
452
-    /**
453
-     * tracks this registration's ticket reservation in extra meta
454
-     * and can increment related ticket reserved and corresponding datetime reserved values
455
-     *
456
-     * @param bool $update_ticket if true, will increment ticket and datetime reserved count
457
-     * @return void
458
-     * @throws EE_Error
459
-     * @throws InvalidArgumentException
460
-     * @throws InvalidDataTypeException
461
-     * @throws InvalidInterfaceException
462
-     * @throws ReflectionException
463
-     */
464
-    public function reserve_ticket($update_ticket = false, $source = 'unknown')
465
-    {
466
-        // only reserve ticket if space is not currently reserved
467
-        if ((bool) $this->get_extra_meta(EE_Registration::HAS_RESERVED_TICKET_KEY, true) !== true) {
468
-            $this->update_extra_meta('reserve_ticket', "{$this->ticket_ID()} from {$source}");
469
-            // IMPORTANT !!!
470
-            // although checking $update_ticket first would be more efficient,
471
-            // we NEED to ALWAYS call update_extra_meta(), which is why that is done first
472
-            if (
473
-                $this->update_extra_meta(EE_Registration::HAS_RESERVED_TICKET_KEY, true)
474
-                && $update_ticket
475
-            ) {
476
-                $ticket = $this->ticket();
477
-                $ticket->increase_reserved(1, "REG: {$this->ID()} (ln:" . __LINE__ . ')');
478
-                $ticket->save();
479
-            }
480
-        }
481
-    }
482
-
483
-
484
-    /**
485
-     * stops tracking this registration's ticket reservation in extra meta
486
-     * decrements (subtracts) related ticket reserved and corresponding datetime reserved values
487
-     *
488
-     * @param bool $update_ticket if true, will decrement ticket and datetime reserved count
489
-     * @return void
490
-     * @throws EE_Error
491
-     * @throws InvalidArgumentException
492
-     * @throws InvalidDataTypeException
493
-     * @throws InvalidInterfaceException
494
-     * @throws ReflectionException
495
-     */
496
-    public function release_reserved_ticket($update_ticket = false, $source = 'unknown')
497
-    {
498
-        // only release ticket if space is currently reserved
499
-        if ((bool) $this->get_extra_meta(EE_Registration::HAS_RESERVED_TICKET_KEY, true) === true) {
500
-            $this->update_extra_meta('release_reserved_ticket', "{$this->ticket_ID()} from {$source}");
501
-            // IMPORTANT !!!
502
-            // although checking $update_ticket first would be more efficient,
503
-            // we NEED to ALWAYS call update_extra_meta(), which is why that is done first
504
-            if (
505
-                $this->update_extra_meta(EE_Registration::HAS_RESERVED_TICKET_KEY, false)
506
-                && $update_ticket
507
-            ) {
508
-                $ticket = $this->ticket();
509
-                $ticket->decrease_reserved(1, true, "REG: {$this->ID()} (ln:" . __LINE__ . ')');
510
-                $ticket->save();
511
-            }
512
-        }
513
-    }
514
-
515
-
516
-    /**
517
-     * Set Attendee ID
518
-     *
519
-     * @param        int $ATT_ID Attendee ID
520
-     * @throws EE_Error
521
-     * @throws RuntimeException
522
-     */
523
-    public function set_attendee_id($ATT_ID = 0)
524
-    {
525
-        $this->set('ATT_ID', $ATT_ID);
526
-    }
527
-
528
-
529
-    /**
530
-     *        Set Transaction ID
531
-     *
532
-     * @param        int $TXN_ID Transaction ID
533
-     * @throws EE_Error
534
-     * @throws RuntimeException
535
-     */
536
-    public function set_transaction_id($TXN_ID = 0)
537
-    {
538
-        $this->set('TXN_ID', $TXN_ID);
539
-    }
540
-
541
-
542
-    /**
543
-     *        Set Session
544
-     *
545
-     * @param    string $REG_session PHP Session ID
546
-     * @throws EE_Error
547
-     * @throws RuntimeException
548
-     */
549
-    public function set_session($REG_session = '')
550
-    {
551
-        $this->set('REG_session', $REG_session);
552
-    }
553
-
554
-
555
-    /**
556
-     *        Set Registration URL Link
557
-     *
558
-     * @param    string $REG_url_link Registration URL Link
559
-     * @throws EE_Error
560
-     * @throws RuntimeException
561
-     */
562
-    public function set_reg_url_link($REG_url_link = '')
563
-    {
564
-        $this->set('REG_url_link', $REG_url_link);
565
-    }
566
-
567
-
568
-    /**
569
-     *        Set Attendee Counter
570
-     *
571
-     * @param        int $REG_count Primary Attendee
572
-     * @throws EE_Error
573
-     * @throws RuntimeException
574
-     */
575
-    public function set_count($REG_count = 1)
576
-    {
577
-        $this->set('REG_count', $REG_count);
578
-    }
579
-
580
-
581
-    /**
582
-     *        Set Group Size
583
-     *
584
-     * @param        boolean $REG_group_size Group Registration
585
-     * @throws EE_Error
586
-     * @throws RuntimeException
587
-     */
588
-    public function set_group_size($REG_group_size = false)
589
-    {
590
-        $this->set('REG_group_size', $REG_group_size);
591
-    }
592
-
593
-
594
-    /**
595
-     *    is_not_approved -  convenience method that returns TRUE if REG status ID ==
596
-     *    EEM_Registration::status_id_not_approved
597
-     *
598
-     * @return        boolean
599
-     */
600
-    public function is_not_approved()
601
-    {
602
-        return $this->status_ID() == EEM_Registration::status_id_not_approved ? true : false;
603
-    }
604
-
605
-
606
-    /**
607
-     *    is_pending_payment -  convenience method that returns TRUE if REG status ID ==
608
-     *    EEM_Registration::status_id_pending_payment
609
-     *
610
-     * @return        boolean
611
-     */
612
-    public function is_pending_payment()
613
-    {
614
-        return $this->status_ID() == EEM_Registration::status_id_pending_payment ? true : false;
615
-    }
616
-
617
-
618
-    /**
619
-     *    is_approved -  convenience method that returns TRUE if REG status ID == EEM_Registration::status_id_approved
620
-     *
621
-     * @return        boolean
622
-     */
623
-    public function is_approved()
624
-    {
625
-        return $this->status_ID() == EEM_Registration::status_id_approved ? true : false;
626
-    }
627
-
628
-
629
-    /**
630
-     *    is_cancelled -  convenience method that returns TRUE if REG status ID == EEM_Registration::status_id_cancelled
631
-     *
632
-     * @return        boolean
633
-     */
634
-    public function is_cancelled()
635
-    {
636
-        return $this->status_ID() == EEM_Registration::status_id_cancelled ? true : false;
637
-    }
638
-
639
-
640
-    /**
641
-     *    is_declined -  convenience method that returns TRUE if REG status ID == EEM_Registration::status_id_declined
642
-     *
643
-     * @return        boolean
644
-     */
645
-    public function is_declined()
646
-    {
647
-        return $this->status_ID() == EEM_Registration::status_id_declined ? true : false;
648
-    }
649
-
650
-
651
-    /**
652
-     *    is_incomplete -  convenience method that returns TRUE if REG status ID ==
653
-     *    EEM_Registration::status_id_incomplete
654
-     *
655
-     * @return        boolean
656
-     */
657
-    public function is_incomplete()
658
-    {
659
-        return $this->status_ID() == EEM_Registration::status_id_incomplete ? true : false;
660
-    }
661
-
662
-
663
-    /**
664
-     *        Set Registration Date
665
-     *
666
-     * @param        mixed ( int or string ) $REG_date Registration Date - Unix timestamp or string representation of
667
-     *                                                 Date
668
-     * @throws EE_Error
669
-     * @throws RuntimeException
670
-     */
671
-    public function set_reg_date($REG_date = false)
672
-    {
673
-        $this->set('REG_date', $REG_date);
674
-    }
675
-
676
-
677
-    /**
678
-     *    Set final price owing for this registration after all ticket/price modifications
679
-     *
680
-     * @access    public
681
-     * @param    float $REG_final_price
682
-     * @throws EE_Error
683
-     * @throws RuntimeException
684
-     */
685
-    public function set_final_price($REG_final_price = 0.00)
686
-    {
687
-        $this->set('REG_final_price', $REG_final_price);
688
-    }
689
-
690
-
691
-    /**
692
-     *    Set amount paid towards this registration's final price
693
-     *
694
-     * @access    public
695
-     * @param    float $REG_paid
696
-     * @throws EE_Error
697
-     * @throws RuntimeException
698
-     */
699
-    public function set_paid($REG_paid = 0.00)
700
-    {
701
-        $this->set('REG_paid', $REG_paid);
702
-    }
703
-
704
-
705
-    /**
706
-     *        Attendee Is Going
707
-     *
708
-     * @param        boolean $REG_att_is_going Attendee Is Going
709
-     * @throws EE_Error
710
-     * @throws RuntimeException
711
-     */
712
-    public function set_att_is_going($REG_att_is_going = false)
713
-    {
714
-        $this->set('REG_att_is_going', $REG_att_is_going);
715
-    }
716
-
717
-
718
-    /**
719
-     * Gets the related attendee
720
-     *
721
-     * @return EE_Attendee
722
-     * @throws EE_Error
723
-     */
724
-    public function attendee()
725
-    {
726
-        return $this->get_first_related('Attendee');
727
-    }
728
-
729
-
730
-    /**
731
-     *        get Event ID
732
-     */
733
-    public function event_ID()
734
-    {
735
-        return $this->get('EVT_ID');
736
-    }
737
-
738
-
739
-    /**
740
-     *        get Event ID
741
-     */
742
-    public function event_name()
743
-    {
744
-        $event = $this->event_obj();
745
-        if ($event) {
746
-            return $event->name();
747
-        } else {
748
-            return null;
749
-        }
750
-    }
751
-
752
-
753
-    /**
754
-     * Fetches the event this registration is for
755
-     *
756
-     * @return EE_Event
757
-     * @throws EE_Error
758
-     */
759
-    public function event_obj()
760
-    {
761
-        return $this->get_first_related('Event');
762
-    }
763
-
764
-
765
-    /**
766
-     *        get Attendee ID
767
-     */
768
-    public function attendee_ID()
769
-    {
770
-        return $this->get('ATT_ID');
771
-    }
772
-
773
-
774
-    /**
775
-     *        get PHP Session ID
776
-     */
777
-    public function session_ID()
778
-    {
779
-        return $this->get('REG_session');
780
-    }
781
-
782
-
783
-    /**
784
-     * Gets the string which represents the URL trigger for the receipt template in the message template system.
785
-     *
786
-     * @param string $messenger 'pdf' or 'html'.  Default 'html'.
787
-     * @return string
788
-     */
789
-    public function receipt_url($messenger = 'html')
790
-    {
791
-
792
-        /**
793
-         * The below will be deprecated one version after this.  We check first if there is a custom receipt template
794
-         * already in use on old system.  If there is then we just return the standard url for it.
795
-         *
796
-         * @since 4.5.0
797
-         */
798
-        $template_relative_path = 'modules/gateways/Invoice/lib/templates/receipt_body.template.php';
799
-        $has_custom             = EEH_Template::locate_template(
800
-            $template_relative_path,
801
-            array(),
802
-            true,
803
-            true,
804
-            true
805
-        );
806
-
807
-        if ($has_custom) {
808
-            return add_query_arg(array('receipt' => 'true'), $this->invoice_url('launch'));
809
-        }
810
-        return apply_filters('FHEE__EE_Registration__receipt_url__receipt_url', '', $this, $messenger, 'receipt');
811
-    }
812
-
813
-
814
-    /**
815
-     * Gets the string which represents the URL trigger for the invoice template in the message template system.
816
-     *
817
-     * @param string $messenger 'pdf' or 'html'.  Default 'html'.
818
-     * @return string
819
-     * @throws EE_Error
820
-     */
821
-    public function invoice_url($messenger = 'html')
822
-    {
823
-        /**
824
-         * The below will be deprecated one version after this.  We check first if there is a custom invoice template
825
-         * already in use on old system.  If there is then we just return the standard url for it.
826
-         *
827
-         * @since 4.5.0
828
-         */
829
-        $template_relative_path = 'modules/gateways/Invoice/lib/templates/invoice_body.template.php';
830
-        $has_custom             = EEH_Template::locate_template(
831
-            $template_relative_path,
832
-            array(),
833
-            true,
834
-            true,
835
-            true
836
-        );
837
-
838
-        if ($has_custom) {
839
-            if ($messenger == 'html') {
840
-                return $this->invoice_url('launch');
841
-            }
842
-            $route = $messenger == 'download' || $messenger == 'pdf' ? 'download_invoice' : 'launch_invoice';
843
-
844
-            $query_args = array('ee' => $route, 'id' => $this->reg_url_link());
845
-            if ($messenger == 'html') {
846
-                $query_args['html'] = true;
847
-            }
848
-            return add_query_arg($query_args, get_permalink(EE_Registry::instance()->CFG->core->thank_you_page_id));
849
-        }
850
-        return apply_filters('FHEE__EE_Registration__invoice_url__invoice_url', '', $this, $messenger, 'invoice');
851
-    }
852
-
853
-
854
-    /**
855
-     * get Registration URL Link
856
-     *
857
-     * @access public
858
-     * @return string
859
-     * @throws EE_Error
860
-     */
861
-    public function reg_url_link()
862
-    {
863
-        return (string) $this->get('REG_url_link');
864
-    }
865
-
866
-
867
-    /**
868
-     * Echoes out invoice_url()
869
-     *
870
-     * @param string $type 'download','launch', or 'html' (default is 'launch')
871
-     * @return void
872
-     * @throws EE_Error
873
-     */
874
-    public function e_invoice_url($type = 'launch')
875
-    {
876
-        echo $this->invoice_url($type);
877
-    }
878
-
879
-
880
-    /**
881
-     * Echoes out payment_overview_url
882
-     */
883
-    public function e_payment_overview_url()
884
-    {
885
-        echo $this->payment_overview_url();
886
-    }
887
-
888
-
889
-    /**
890
-     * Gets the URL for the checkout payment options reg step
891
-     * with this registration's REG_url_link added as a query parameter
892
-     *
893
-     * @param bool $clear_session Set to true when you want to clear the session on revisiting the
894
-     *                            payment overview url.
895
-     * @return string
896
-     * @throws InvalidInterfaceException
897
-     * @throws InvalidDataTypeException
898
-     * @throws EE_Error
899
-     * @throws InvalidArgumentException
900
-     */
901
-    public function payment_overview_url($clear_session = false)
902
-    {
903
-        return add_query_arg(
904
-            (array) apply_filters(
905
-                'FHEE__EE_Registration__payment_overview_url__query_args',
906
-                array(
907
-                    'e_reg_url_link' => $this->reg_url_link(),
908
-                    'step'           => 'payment_options',
909
-                    'revisit'        => true,
910
-                    'clear_session'  => (bool) $clear_session,
911
-                ),
912
-                $this
913
-            ),
914
-            EE_Registry::instance()->CFG->core->reg_page_url()
915
-        );
916
-    }
917
-
918
-
919
-    /**
920
-     * Gets the URL for the checkout attendee information reg step
921
-     * with this registration's REG_url_link added as a query parameter
922
-     *
923
-     * @return string
924
-     * @throws InvalidInterfaceException
925
-     * @throws InvalidDataTypeException
926
-     * @throws EE_Error
927
-     * @throws InvalidArgumentException
928
-     */
929
-    public function edit_attendee_information_url()
930
-    {
931
-        return add_query_arg(
932
-            (array) apply_filters(
933
-                'FHEE__EE_Registration__edit_attendee_information_url__query_args',
934
-                array(
935
-                    'e_reg_url_link' => $this->reg_url_link(),
936
-                    'step'           => 'attendee_information',
937
-                    'revisit'        => true,
938
-                ),
939
-                $this
940
-            ),
941
-            EE_Registry::instance()->CFG->core->reg_page_url()
942
-        );
943
-    }
944
-
945
-
946
-    /**
947
-     * Simply generates and returns the appropriate admin_url link to edit this registration
948
-     *
949
-     * @return string
950
-     * @throws EE_Error
951
-     */
952
-    public function get_admin_edit_url()
953
-    {
954
-        return EEH_URL::add_query_args_and_nonce(array(
955
-            'page'    => 'espresso_registrations',
956
-            'action'  => 'view_registration',
957
-            '_REG_ID' => $this->ID(),
958
-        ), admin_url('admin.php'));
959
-    }
960
-
961
-
962
-    /**
963
-     *    is_primary_registrant?
964
-     */
965
-    public function is_primary_registrant()
966
-    {
967
-        return $this->get('REG_count') == 1 ? true : false;
968
-    }
969
-
970
-
971
-    /**
972
-     * This returns the primary registration object for this registration group (which may be this object).
973
-     *
974
-     * @return EE_Registration
975
-     * @throws EE_Error
976
-     */
977
-    public function get_primary_registration()
978
-    {
979
-        if ($this->is_primary_registrant()) {
980
-            return $this;
981
-        }
982
-
983
-        //k reg_count !== 1 so let's get the EE_Registration object matching this txn_id and reg_count == 1
984
-        /** @var EE_Registration $primary_registrant */
985
-        $primary_registrant = EEM_Registration::instance()->get_one(array(
986
-            array(
987
-                'TXN_ID'    => $this->transaction_ID(),
988
-                'REG_count' => 1,
989
-            ),
990
-        ));
991
-        return $primary_registrant;
992
-    }
993
-
994
-
995
-    /**
996
-     *        get  Attendee Number
997
-     *
998
-     * @access        public
999
-     */
1000
-    public function count()
1001
-    {
1002
-        return $this->get('REG_count');
1003
-    }
1004
-
1005
-
1006
-    /**
1007
-     *        get Group Size
1008
-     */
1009
-    public function group_size()
1010
-    {
1011
-        return $this->get('REG_group_size');
1012
-    }
1013
-
1014
-
1015
-    /**
1016
-     *        get Registration Date
1017
-     */
1018
-    public function date()
1019
-    {
1020
-        return $this->get('REG_date');
1021
-    }
1022
-
1023
-
1024
-    /**
1025
-     * gets a pretty date
1026
-     *
1027
-     * @param string $date_format
1028
-     * @param string $time_format
1029
-     * @return string
1030
-     * @throws EE_Error
1031
-     */
1032
-    public function pretty_date($date_format = null, $time_format = null)
1033
-    {
1034
-        return $this->get_datetime('REG_date', $date_format, $time_format);
1035
-    }
1036
-
1037
-
1038
-    /**
1039
-     * final_price
1040
-     * the registration's share of the transaction total, so that the
1041
-     * sum of all the transaction's REG_final_prices equal the transaction's total
1042
-     *
1043
-     * @return float
1044
-     * @throws EE_Error
1045
-     */
1046
-    public function final_price()
1047
-    {
1048
-        return $this->get('REG_final_price');
1049
-    }
1050
-
1051
-
1052
-    /**
1053
-     * pretty_final_price
1054
-     *  final price as formatted string, with correct decimal places and currency symbol
1055
-     *
1056
-     * @return string
1057
-     * @throws EE_Error
1058
-     */
1059
-    public function pretty_final_price()
1060
-    {
1061
-        return $this->get_pretty('REG_final_price');
1062
-    }
1063
-
1064
-
1065
-    /**
1066
-     * get paid (yeah)
1067
-     *
1068
-     * @return float
1069
-     * @throws EE_Error
1070
-     */
1071
-    public function paid()
1072
-    {
1073
-        return $this->get('REG_paid');
1074
-    }
1075
-
1076
-
1077
-    /**
1078
-     * pretty_paid
1079
-     *
1080
-     * @return float
1081
-     * @throws EE_Error
1082
-     */
1083
-    public function pretty_paid()
1084
-    {
1085
-        return $this->get_pretty('REG_paid');
1086
-    }
1087
-
1088
-
1089
-    /**
1090
-     * owes_monies_and_can_pay
1091
-     * whether or not this registration has monies owing and it's' status allows payment
1092
-     *
1093
-     * @param array $requires_payment
1094
-     * @return bool
1095
-     * @throws EE_Error
1096
-     */
1097
-    public function owes_monies_and_can_pay($requires_payment = array())
1098
-    {
1099
-        // these reg statuses require payment (if event is not free)
1100
-        $requires_payment = ! empty($requires_payment)
1101
-            ? $requires_payment
1102
-            : EEM_Registration::reg_statuses_that_allow_payment();
1103
-        if (in_array($this->status_ID(), $requires_payment) &&
1104
-            $this->final_price() != 0 &&
1105
-            $this->final_price() != $this->paid()
1106
-        ) {
1107
-            return true;
1108
-        } else {
1109
-            return false;
1110
-        }
1111
-    }
1112
-
1113
-
1114
-    /**
1115
-     * Prints out the return value of $this->pretty_status()
1116
-     *
1117
-     * @param bool $show_icons
1118
-     * @return void
1119
-     * @throws EE_Error
1120
-     */
1121
-    public function e_pretty_status($show_icons = false)
1122
-    {
1123
-        echo $this->pretty_status($show_icons);
1124
-    }
1125
-
1126
-
1127
-    /**
1128
-     * Returns a nice version of the status for displaying to customers
1129
-     *
1130
-     * @param bool $show_icons
1131
-     * @return string
1132
-     * @throws EE_Error
1133
-     */
1134
-    public function pretty_status($show_icons = false)
1135
-    {
1136
-        $status = EEM_Status::instance()->localized_status(
1137
-            array($this->status_ID() => esc_html__('unknown', 'event_espresso')),
1138
-            false,
1139
-            'sentence'
1140
-        );
1141
-        $icon   = '';
1142
-        switch ($this->status_ID()) {
1143
-            case EEM_Registration::status_id_approved:
1144
-                $icon = $show_icons
1145
-                    ? '<span class="dashicons dashicons-star-filled ee-icon-size-16 green-text"></span>'
1146
-                    : '';
1147
-                break;
1148
-            case EEM_Registration::status_id_pending_payment:
1149
-                $icon = $show_icons
1150
-                    ? '<span class="dashicons dashicons-star-half ee-icon-size-16 orange-text"></span>'
1151
-                    : '';
1152
-                break;
1153
-            case EEM_Registration::status_id_not_approved:
1154
-                $icon = $show_icons
1155
-                    ? '<span class="dashicons dashicons-marker ee-icon-size-16 orange-text"></span>'
1156
-                    : '';
1157
-                break;
1158
-            case EEM_Registration::status_id_cancelled:
1159
-                $icon = $show_icons
1160
-                    ? '<span class="dashicons dashicons-no ee-icon-size-16 lt-grey-text"></span>'
1161
-                    : '';
1162
-                break;
1163
-            case EEM_Registration::status_id_incomplete:
1164
-                $icon = $show_icons
1165
-                    ? '<span class="dashicons dashicons-no ee-icon-size-16 lt-orange-text"></span>'
1166
-                    : '';
1167
-                break;
1168
-            case EEM_Registration::status_id_declined:
1169
-                $icon = $show_icons
1170
-                    ? '<span class="dashicons dashicons-no ee-icon-size-16 red-text"></span>'
1171
-                    : '';
1172
-                break;
1173
-            case EEM_Registration::status_id_wait_list:
1174
-                $icon = $show_icons
1175
-                    ? '<span class="dashicons dashicons-clipboard ee-icon-size-16 purple-text"></span>'
1176
-                    : '';
1177
-                break;
1178
-        }
1179
-        return $icon . $status[$this->status_ID()];
1180
-    }
1181
-
1182
-
1183
-    /**
1184
-     *        get Attendee Is Going
1185
-     */
1186
-    public function att_is_going()
1187
-    {
1188
-        return $this->get('REG_att_is_going');
1189
-    }
1190
-
1191
-
1192
-    /**
1193
-     * Gets related answers
1194
-     *
1195
-     * @param array $query_params like EEM_Base::get_all
1196
-     * @return EE_Answer[]
1197
-     * @throws EE_Error
1198
-     */
1199
-    public function answers($query_params = null)
1200
-    {
1201
-        return $this->get_many_related('Answer', $query_params);
1202
-    }
1203
-
1204
-
1205
-    /**
1206
-     * Gets the registration's answer value to the specified question
1207
-     * (either the question's ID or a question object)
1208
-     *
1209
-     * @param EE_Question|int $question
1210
-     * @param bool            $pretty_value
1211
-     * @return array|string if pretty_value= true, the result will always be a string
1212
-     * (because the answer might be an array of answer values, so passing pretty_value=true
1213
-     * will convert it into some kind of string)
1214
-     * @throws EE_Error
1215
-     */
1216
-    public function answer_value_to_question($question, $pretty_value = true)
1217
-    {
1218
-        $question_id = EEM_Question::instance()->ensure_is_ID($question);
1219
-        return EEM_Answer::instance()->get_answer_value_to_question($this, $question_id, $pretty_value);
1220
-    }
1221
-
1222
-
1223
-    /**
1224
-     * question_groups
1225
-     * returns an array of EE_Question_Group objects for this registration
1226
-     *
1227
-     * @return EE_Question_Group[]
1228
-     * @throws EE_Error
1229
-     * @throws EntityNotFoundException
1230
-     */
1231
-    public function question_groups()
1232
-    {
1233
-        $question_groups = array();
1234
-        if ($this->event() instanceof EE_Event) {
1235
-            $question_groups = $this->event()->question_groups(
1236
-                array(
1237
-                    array(
1238
-                        'Event_Question_Group.EQG_primary' => $this->count() == 1 ? true : false,
1239
-                    ),
1240
-                    'order_by' => array('QSG_order' => 'ASC'),
1241
-                )
1242
-            );
1243
-        }
1244
-        return $question_groups;
1245
-    }
1246
-
1247
-
1248
-    /**
1249
-     * count_question_groups
1250
-     * returns a count of the number of EE_Question_Group objects for this registration
1251
-     *
1252
-     * @return int
1253
-     * @throws EE_Error
1254
-     * @throws EntityNotFoundException
1255
-     */
1256
-    public function count_question_groups()
1257
-    {
1258
-        $qg_count = 0;
1259
-        if ($this->event() instanceof EE_Event) {
1260
-            $qg_count = $this->event()->count_related(
1261
-                'Question_Group',
1262
-                array(
1263
-                    array(
1264
-                        'Event_Question_Group.EQG_primary' => $this->count() == 1 ? true : false,
1265
-                    ),
1266
-                )
1267
-            );
1268
-        }
1269
-        return $qg_count;
1270
-    }
1271
-
1272
-
1273
-    /**
1274
-     * Returns the registration date in the 'standard' string format
1275
-     * (function may be improved in the future to allow for different formats and timezones)
1276
-     *
1277
-     * @return string
1278
-     * @throws EE_Error
1279
-     */
1280
-    public function reg_date()
1281
-    {
1282
-        return $this->get_datetime('REG_date');
1283
-    }
1284
-
1285
-
1286
-    /**
1287
-     * Gets the datetime-ticket for this registration (ie, it can be used to isolate
1288
-     * the ticket this registration purchased, or the datetime they have registered
1289
-     * to attend)
1290
-     *
1291
-     * @return EE_Datetime_Ticket
1292
-     * @throws EE_Error
1293
-     */
1294
-    public function datetime_ticket()
1295
-    {
1296
-        return $this->get_first_related('Datetime_Ticket');
1297
-    }
1298
-
1299
-
1300
-    /**
1301
-     * Sets the registration's datetime_ticket.
1302
-     *
1303
-     * @param EE_Datetime_Ticket $datetime_ticket
1304
-     * @return EE_Datetime_Ticket
1305
-     * @throws EE_Error
1306
-     */
1307
-    public function set_datetime_ticket($datetime_ticket)
1308
-    {
1309
-        return $this->_add_relation_to($datetime_ticket, 'Datetime_Ticket');
1310
-    }
1311
-
1312
-    /**
1313
-     * Gets deleted
1314
-     *
1315
-     * @return bool
1316
-     * @throws EE_Error
1317
-     */
1318
-    public function deleted()
1319
-    {
1320
-        return $this->get('REG_deleted');
1321
-    }
1322
-
1323
-    /**
1324
-     * Sets deleted
1325
-     *
1326
-     * @param boolean $deleted
1327
-     * @return bool
1328
-     * @throws EE_Error
1329
-     * @throws RuntimeException
1330
-     */
1331
-    public function set_deleted($deleted)
1332
-    {
1333
-        if ($deleted) {
1334
-            $this->delete();
1335
-        } else {
1336
-            $this->restore();
1337
-        }
1338
-    }
1339
-
1340
-
1341
-    /**
1342
-     * Get the status object of this object
1343
-     *
1344
-     * @return EE_Status
1345
-     * @throws EE_Error
1346
-     */
1347
-    public function status_obj()
1348
-    {
1349
-        return $this->get_first_related('Status');
1350
-    }
1351
-
1352
-
1353
-    /**
1354
-     * Returns the number of times this registration has checked into any of the datetimes
1355
-     * its available for
1356
-     *
1357
-     * @return int
1358
-     * @throws EE_Error
1359
-     */
1360
-    public function count_checkins()
1361
-    {
1362
-        return $this->get_model()->count_related($this, 'Checkin');
1363
-    }
1364
-
1365
-
1366
-    /**
1367
-     * Returns the number of current Check-ins this registration is checked into for any of the datetimes the
1368
-     * registration is for.  Note, this is ONLY checked in (does not include checkedout)
1369
-     *
1370
-     * @return int
1371
-     * @throws EE_Error
1372
-     */
1373
-    public function count_checkins_not_checkedout()
1374
-    {
1375
-        return $this->get_model()->count_related($this, 'Checkin', array(array('CHK_in' => 1)));
1376
-    }
1377
-
1378
-
1379
-    /**
1380
-     * The purpose of this method is simply to check whether this registration can checkin to the given datetime.
1381
-     *
1382
-     * @param int | EE_Datetime $DTT_OR_ID      The datetime the registration is being checked against
1383
-     * @param bool              $check_approved This is used to indicate whether the caller wants can_checkin to also
1384
-     *                                          consider registration status as well as datetime access.
1385
-     * @return bool
1386
-     * @throws EE_Error
1387
-     */
1388
-    public function can_checkin($DTT_OR_ID, $check_approved = true)
1389
-    {
1390
-        $DTT_ID = EEM_Datetime::instance()->ensure_is_ID($DTT_OR_ID);
1391
-
1392
-        //first check registration status
1393
-        if (($check_approved && ! $this->is_approved()) || ! $DTT_ID) {
1394
-            return false;
1395
-        }
1396
-        //is there a datetime ticket that matches this dtt_ID?
1397
-        if (! (EEM_Datetime_Ticket::instance()->exists(array(
1398
-            array(
1399
-                'TKT_ID' => $this->get('TKT_ID'),
1400
-                'DTT_ID' => $DTT_ID,
1401
-            ),
1402
-        )))
1403
-        ) {
1404
-            return false;
1405
-        }
1406
-
1407
-        //final check is against TKT_uses
1408
-        return $this->verify_can_checkin_against_TKT_uses($DTT_ID);
1409
-    }
1410
-
1411
-
1412
-    /**
1413
-     * This method verifies whether the user can checkin for the given datetime considering the max uses value set on
1414
-     * the ticket. To do this,  a query is done to get the count of the datetime records already checked into.  If the
1415
-     * datetime given does not have a check-in record and checking in for that datetime will exceed the allowed uses,
1416
-     * then return false.  Otherwise return true.
1417
-     *
1418
-     * @param int | EE_Datetime $DTT_OR_ID The datetime the registration is being checked against
1419
-     * @return bool true means can checkin.  false means cannot checkin.
1420
-     * @throws EE_Error
1421
-     */
1422
-    public function verify_can_checkin_against_TKT_uses($DTT_OR_ID)
1423
-    {
1424
-        $DTT_ID = EEM_Datetime::instance()->ensure_is_ID($DTT_OR_ID);
1425
-
1426
-        if (! $DTT_ID) {
1427
-            return false;
1428
-        }
1429
-
1430
-        $max_uses = $this->ticket() instanceof EE_Ticket ? $this->ticket()->uses() : EE_INF;
1431
-
1432
-        // if max uses is not set or equals infinity then return true cause its not a factor for whether user can
1433
-        // check-in or not.
1434
-        if (! $max_uses || $max_uses === EE_INF) {
1435
-            return true;
1436
-        }
1437
-
1438
-        //does this datetime have a checkin record?  If so, then the dtt count has already been verified so we can just
1439
-        //go ahead and toggle.
1440
-        if (EEM_Checkin::instance()->exists(array(array('REG_ID' => $this->ID(), 'DTT_ID' => $DTT_ID)))) {
1441
-            return true;
1442
-        }
1443
-
1444
-        //made it here so the last check is whether the number of checkins per unique datetime on this registration
1445
-        //disallows further check-ins.
1446
-        $count_unique_dtt_checkins = EEM_Checkin::instance()->count(array(
1447
-            array(
1448
-                'REG_ID' => $this->ID(),
1449
-                'CHK_in' => true,
1450
-            ),
1451
-        ), 'DTT_ID', true);
1452
-        // checkins have already reached their max number of uses
1453
-        // so registrant can NOT checkin
1454
-        if ($count_unique_dtt_checkins >= $max_uses) {
1455
-            EE_Error::add_error(
1456
-                esc_html__(
1457
-                    'Check-in denied because number of datetime uses for the ticket has been reached or exceeded.',
1458
-                    'event_espresso'
1459
-                ),
1460
-                __FILE__,
1461
-                __FUNCTION__,
1462
-                __LINE__
1463
-            );
1464
-            return false;
1465
-        }
1466
-        return true;
1467
-    }
1468
-
1469
-
1470
-    /**
1471
-     * toggle Check-in status for this registration
1472
-     * Check-ins are toggled in the following order:
1473
-     * never checked in -> checked in
1474
-     * checked in -> checked out
1475
-     * checked out -> checked in
1476
-     *
1477
-     * @param  int $DTT_ID  include specific datetime to toggle Check-in for.
1478
-     *                      If not included or null, then it is assumed latest datetime is being toggled.
1479
-     * @param bool $verify  If true then can_checkin() is used to verify whether the person
1480
-     *                      can be checked in or not.  Otherwise this forces change in checkin status.
1481
-     * @return bool|int     the chk_in status toggled to OR false if nothing got changed.
1482
-     * @throws EE_Error
1483
-     */
1484
-    public function toggle_checkin_status($DTT_ID = null, $verify = false)
1485
-    {
1486
-        if (empty($DTT_ID)) {
1487
-            $datetime = $this->get_latest_related_datetime();
1488
-            $DTT_ID   = $datetime instanceof EE_Datetime ? $datetime->ID() : 0;
1489
-            // verify the registration can checkin for the given DTT_ID
1490
-        } elseif (! $this->can_checkin($DTT_ID, $verify)) {
1491
-            EE_Error::add_error(
1492
-                sprintf(
1493
-                    esc_html__(
1494
-                        'The given registration (ID:%1$d) can not be checked in to the given DTT_ID (%2$d), because the registration does not have access',
1495
-                        'event_espresso'
1496
-                    ),
1497
-                    $this->ID(),
1498
-                    $DTT_ID
1499
-                ),
1500
-                __FILE__,
1501
-                __FUNCTION__,
1502
-                __LINE__
1503
-            );
1504
-            return false;
1505
-        }
1506
-        $status_paths = array(
1507
-            EE_Checkin::status_checked_never => EE_Checkin::status_checked_in,
1508
-            EE_Checkin::status_checked_in    => EE_Checkin::status_checked_out,
1509
-            EE_Checkin::status_checked_out   => EE_Checkin::status_checked_in,
1510
-        );
1511
-        //start by getting the current status so we know what status we'll be changing to.
1512
-        $cur_status = $this->check_in_status_for_datetime($DTT_ID, null);
1513
-        $status_to  = $status_paths[$cur_status];
1514
-        // database only records true for checked IN or false for checked OUT
1515
-        // no record ( null ) means checked in NEVER, but we obviously don't save that
1516
-        $new_status = $status_to === EE_Checkin::status_checked_in ? true : false;
1517
-        // add relation - note Check-ins are always creating new rows
1518
-        // because we are keeping track of Check-ins over time.
1519
-        // Eventually we'll probably want to show a list table
1520
-        // for the individual Check-ins so that they can be managed.
1521
-        $checkin = EE_Checkin::new_instance(array(
1522
-            'REG_ID' => $this->ID(),
1523
-            'DTT_ID' => $DTT_ID,
1524
-            'CHK_in' => $new_status,
1525
-        ));
1526
-        // if the record could not be saved then return false
1527
-        if ($checkin->save() === 0) {
1528
-            if (WP_DEBUG) {
1529
-                global $wpdb;
1530
-                $error = sprintf(
1531
-                    esc_html__(
1532
-                        'Registration check in update failed because of the following database error: %1$s%2$s',
1533
-                        'event_espresso'
1534
-                    ),
1535
-                    '<br />',
1536
-                    $wpdb->last_error
1537
-                );
1538
-            } else {
1539
-                $error = esc_html__(
1540
-                    'Registration check in update failed because of an unknown database error',
1541
-                    'event_espresso'
1542
-                );
1543
-            }
1544
-            EE_Error::add_error($error, __FILE__, __FUNCTION__, __LINE__);
1545
-            return false;
1546
-        }
1547
-        return $status_to;
1548
-    }
1549
-
1550
-
1551
-    /**
1552
-     * Returns the latest datetime related to this registration (via the ticket attached to the registration).
1553
-     * "Latest" is defined by the `DTT_EVT_start` column.
1554
-     *
1555
-     * @return EE_Datetime|null
1556
-     * @throws EE_Error
1557
-     */
1558
-    public function get_latest_related_datetime()
1559
-    {
1560
-        return EEM_Datetime::instance()->get_one(
1561
-            array(
1562
-                array(
1563
-                    'Ticket.Registration.REG_ID' => $this->ID(),
1564
-                ),
1565
-                'order_by' => array('DTT_EVT_start' => 'DESC'),
1566
-            )
1567
-        );
1568
-    }
1569
-
1570
-
1571
-    /**
1572
-     * Returns the earliest datetime related to this registration (via the ticket attached to the registration).
1573
-     * "Earliest" is defined by the `DTT_EVT_start` column.
1574
-     *
1575
-     * @throws EE_Error
1576
-     */
1577
-    public function get_earliest_related_datetime()
1578
-    {
1579
-        return EEM_Datetime::instance()->get_one(
1580
-            array(
1581
-                array(
1582
-                    'Ticket.Registration.REG_ID' => $this->ID(),
1583
-                ),
1584
-                'order_by' => array('DTT_EVT_start' => 'ASC'),
1585
-            )
1586
-        );
1587
-    }
1588
-
1589
-
1590
-    /**
1591
-     * This method simply returns the check-in status for this registration and the given datetime.
1592
-     * If neither the datetime nor the checkin values are provided as arguments,
1593
-     * then this will return the LATEST check-in status for the registration across all datetimes it belongs to.
1594
-     *
1595
-     * @param  int       $DTT_ID  The ID of the datetime we're checking against
1596
-     *                            (if empty we'll get the primary datetime for
1597
-     *                            this registration (via event) and use it's ID);
1598
-     * @param EE_Checkin $checkin If present, we use the given checkin object rather than the dtt_id.
1599
-     *
1600
-     * @return int                Integer representing Check-in status.
1601
-     * @throws EE_Error
1602
-     */
1603
-    public function check_in_status_for_datetime($DTT_ID = 0, $checkin = null)
1604
-    {
1605
-        $checkin_query_params = array(
1606
-            'order_by' => array('CHK_timestamp' => 'DESC'),
1607
-        );
1608
-
1609
-        if ($DTT_ID > 0) {
1610
-            $checkin_query_params[0] = array('DTT_ID' => $DTT_ID);
1611
-        }
1612
-
1613
-        //get checkin object (if exists)
1614
-        $checkin = $checkin instanceof EE_Checkin
1615
-            ? $checkin
1616
-            : $this->get_first_related('Checkin', $checkin_query_params);
1617
-        if ($checkin instanceof EE_Checkin) {
1618
-            if ($checkin->get('CHK_in')) {
1619
-                return EE_Checkin::status_checked_in; //checked in
1620
-            }
1621
-            return EE_Checkin::status_checked_out; //had checked in but is now checked out.
1622
-        }
1623
-        return EE_Checkin::status_checked_never; //never been checked in
1624
-    }
1625
-
1626
-
1627
-    /**
1628
-     * This method returns a localized message for the toggled Check-in message.
1629
-     *
1630
-     * @param  int $DTT_ID include specific datetime to get the correct Check-in message.  If not included or null,
1631
-     *                     then it is assumed Check-in for primary datetime was toggled.
1632
-     * @param bool $error  This just flags that you want an error message returned. This is put in so that the error
1633
-     *                     message can be customized with the attendee name.
1634
-     * @return string internationalized message
1635
-     * @throws EE_Error
1636
-     */
1637
-    public function get_checkin_msg($DTT_ID, $error = false)
1638
-    {
1639
-        //let's get the attendee first so we can include the name of the attendee
1640
-        $attendee = $this->get_first_related('Attendee');
1641
-        if ($attendee instanceof EE_Attendee) {
1642
-            if ($error) {
1643
-                return sprintf(__("%s's check-in status was not changed.", "event_espresso"), $attendee->full_name());
1644
-            }
1645
-            $cur_status = $this->check_in_status_for_datetime($DTT_ID);
1646
-            //what is the status message going to be?
1647
-            switch ($cur_status) {
1648
-                case EE_Checkin::status_checked_never:
1649
-                    return sprintf(__("%s has been removed from Check-in records", "event_espresso"),
1650
-                        $attendee->full_name());
1651
-                    break;
1652
-                case EE_Checkin::status_checked_in:
1653
-                    return sprintf(__('%s has been checked in', 'event_espresso'), $attendee->full_name());
1654
-                    break;
1655
-                case EE_Checkin::status_checked_out:
1656
-                    return sprintf(__('%s has been checked out', 'event_espresso'), $attendee->full_name());
1657
-                    break;
1658
-            }
1659
-        }
1660
-        return esc_html__("The check-in status could not be determined.", "event_espresso");
1661
-    }
1662
-
1663
-
1664
-    /**
1665
-     * Returns the related EE_Transaction to this registration
1666
-     *
1667
-     * @return EE_Transaction
1668
-     * @throws EE_Error
1669
-     * @throws EntityNotFoundException
1670
-     */
1671
-    public function transaction()
1672
-    {
1673
-        $transaction = $this->get_first_related('Transaction');
1674
-        if (! $transaction instanceof \EE_Transaction) {
1675
-            throw new EntityNotFoundException('Transaction ID', $this->transaction_ID());
1676
-        }
1677
-        return $transaction;
1678
-    }
1679
-
1680
-
1681
-    /**
1682
-     *        get Registration Code
1683
-     */
1684
-    public function reg_code()
1685
-    {
1686
-        return $this->get('REG_code');
1687
-    }
1688
-
1689
-
1690
-    /**
1691
-     *        get Transaction ID
1692
-     */
1693
-    public function transaction_ID()
1694
-    {
1695
-        return $this->get('TXN_ID');
1696
-    }
1697
-
1698
-
1699
-    /**
1700
-     * @return int
1701
-     * @throws EE_Error
1702
-     */
1703
-    public function ticket_ID()
1704
-    {
1705
-        return $this->get('TKT_ID');
1706
-    }
1707
-
1708
-
1709
-    /**
1710
-     *        Set Registration Code
1711
-     *
1712
-     * @access    public
1713
-     * @param    string  $REG_code Registration Code
1714
-     * @param    boolean $use_default
1715
-     * @throws EE_Error
1716
-     */
1717
-    public function set_reg_code($REG_code, $use_default = false)
1718
-    {
1719
-        if (empty($REG_code)) {
1720
-            EE_Error::add_error(
1721
-                esc_html__('REG_code can not be empty.', 'event_espresso'),
1722
-                __FILE__,
1723
-                __FUNCTION__,
1724
-                __LINE__
1725
-            );
1726
-            return;
1727
-        }
1728
-        if (! $this->reg_code()) {
1729
-            parent::set('REG_code', $REG_code, $use_default);
1730
-        } else {
1731
-            EE_Error::doing_it_wrong(
1732
-                __CLASS__ . '::' . __FUNCTION__,
1733
-                esc_html__('Can not change a registration REG_code once it has been set.', 'event_espresso'),
1734
-                '4.6.0'
1735
-            );
1736
-        }
1737
-    }
1738
-
1739
-
1740
-    /**
1741
-     * Returns all other registrations in the same group as this registrant who have the same ticket option.
1742
-     * Note, if you want to just get all registrations in the same transaction (group), use:
1743
-     *    $registration->transaction()->registrations();
1744
-     *
1745
-     * @since 4.5.0
1746
-     * @return EE_Registration[] or empty array if this isn't a group registration.
1747
-     * @throws EE_Error
1748
-     */
1749
-    public function get_all_other_registrations_in_group()
1750
-    {
1751
-        if ($this->group_size() < 2) {
1752
-            return array();
1753
-        }
1754
-
1755
-        $query[0] = array(
1756
-            'TXN_ID' => $this->transaction_ID(),
1757
-            'REG_ID' => array('!=', $this->ID()),
1758
-            'TKT_ID' => $this->ticket_ID(),
1759
-        );
1760
-        /** @var EE_Registration[] $registrations */
1761
-        $registrations = $this->get_model()->get_all($query);
1762
-        return $registrations;
1763
-    }
1764
-
1765
-    /**
1766
-     * Return the link to the admin details for the object.
1767
-     *
1768
-     * @return string
1769
-     * @throws EE_Error
1770
-     */
1771
-    public function get_admin_details_link()
1772
-    {
1773
-        EE_Registry::instance()->load_helper('URL');
1774
-        return EEH_URL::add_query_args_and_nonce(
1775
-            array(
1776
-                'page'    => 'espresso_registrations',
1777
-                'action'  => 'view_registration',
1778
-                '_REG_ID' => $this->ID(),
1779
-            ),
1780
-            admin_url('admin.php')
1781
-        );
1782
-    }
1783
-
1784
-    /**
1785
-     * Returns the link to the editor for the object.  Sometimes this is the same as the details.
1786
-     *
1787
-     * @return string
1788
-     * @throws EE_Error
1789
-     */
1790
-    public function get_admin_edit_link()
1791
-    {
1792
-        return $this->get_admin_details_link();
1793
-    }
1794
-
1795
-    /**
1796
-     * Returns the link to a settings page for the object.
1797
-     *
1798
-     * @return string
1799
-     * @throws EE_Error
1800
-     */
1801
-    public function get_admin_settings_link()
1802
-    {
1803
-        return $this->get_admin_details_link();
1804
-    }
1805
-
1806
-    /**
1807
-     * Returns the link to the "overview" for the object (typically the "list table" view).
1808
-     *
1809
-     * @return string
1810
-     */
1811
-    public function get_admin_overview_link()
1812
-    {
1813
-        EE_Registry::instance()->load_helper('URL');
1814
-        return EEH_URL::add_query_args_and_nonce(
1815
-            array(
1816
-                'page' => 'espresso_registrations',
1817
-            ),
1818
-            admin_url('admin.php')
1819
-        );
1820
-    }
1821
-
1822
-
1823
-    /**
1824
-     * @param array $query_params
1825
-     *
1826
-     * @return \EE_Registration[]
1827
-     * @throws EE_Error
1828
-     */
1829
-    public function payments($query_params = array())
1830
-    {
1831
-        return $this->get_many_related('Payment', $query_params);
1832
-    }
1833
-
1834
-
1835
-    /**
1836
-     * @param array $query_params
1837
-     *
1838
-     * @return \EE_Registration_Payment[]
1839
-     * @throws EE_Error
1840
-     */
1841
-    public function registration_payments($query_params = array())
1842
-    {
1843
-        return $this->get_many_related('Registration_Payment', $query_params);
1844
-    }
1845
-
1846
-
1847
-    /**
1848
-     * This grabs the payment method corresponding to the last payment made for the amount owing on the registration.
1849
-     * Note: if there are no payments on the registration there will be no payment method returned.
1850
-     *
1851
-     * @return EE_Payment_Method|null
1852
-     */
1853
-    public function payment_method()
1854
-    {
1855
-        return EEM_Payment_Method::instance()->get_last_used_for_registration($this);
1856
-    }
1857
-
1858
-
1859
-    /**
1860
-     * @return \EE_Line_Item
1861
-     * @throws EntityNotFoundException
1862
-     * @throws EE_Error
1863
-     */
1864
-    public function ticket_line_item()
1865
-    {
1866
-        $ticket            = $this->ticket();
1867
-        $transaction       = $this->transaction();
1868
-        $line_item         = null;
1869
-        $ticket_line_items = \EEH_Line_Item::get_line_items_by_object_type_and_IDs(
1870
-            $transaction->total_line_item(),
1871
-            'Ticket',
1872
-            array($ticket->ID())
1873
-        );
1874
-        foreach ($ticket_line_items as $ticket_line_item) {
1875
-            if (
1876
-                $ticket_line_item instanceof \EE_Line_Item
1877
-                && $ticket_line_item->OBJ_type() === 'Ticket'
1878
-                && $ticket_line_item->OBJ_ID() === $ticket->ID()
1879
-            ) {
1880
-                $line_item = $ticket_line_item;
1881
-                break;
1882
-            }
1883
-        }
1884
-        if (! ($line_item instanceof \EE_Line_Item && $line_item->OBJ_type() === 'Ticket')) {
1885
-            throw new EntityNotFoundException('Line Item Ticket ID', $ticket->ID());
1886
-        }
1887
-        return $line_item;
1888
-    }
1889
-
1890
-
1891
-    /**
1892
-     * Soft Deletes this model object.
1893
-     *
1894
-     * @return boolean | int
1895
-     * @throws RuntimeException
1896
-     * @throws EE_Error
1897
-     */
1898
-    public function delete()
1899
-    {
1900
-        if ($this->update_extra_meta(EE_Registration::PRE_TRASH_REG_STATUS_KEY, $this->status_ID()) === true) {
1901
-            $this->set_status(EEM_Registration::status_id_cancelled);
1902
-        }
1903
-        return parent::delete();
1904
-    }
1905
-
1906
-
1907
-    /**
1908
-     * Restores whatever the previous status was on a registration before it was trashed (if possible)
1909
-     *
1910
-     * @throws EE_Error
1911
-     * @throws RuntimeException
1912
-     */
1913
-    public function restore()
1914
-    {
1915
-        $previous_status = $this->get_extra_meta(
1916
-            EE_Registration::PRE_TRASH_REG_STATUS_KEY,
1917
-            true,
1918
-            EEM_Registration::status_id_cancelled
1919
-        );
1920
-        if ($previous_status) {
1921
-            $this->delete_extra_meta(EE_Registration::PRE_TRASH_REG_STATUS_KEY);
1922
-            $this->set_status($previous_status);
1923
-        }
1924
-        return parent::restore();
1925
-    }
1926
-
1927
-
1928
-    /**
1929
-     * possibly toggle Registration status based on comparison of REG_paid vs REG_final_price
1930
-     *
1931
-     * @param  boolean $trigger_set_status_logic EE_Registration::set_status() can trigger additional logic
1932
-     *                                           depending on whether the reg status changes to or from "Approved"
1933
-     * @return boolean whether the Registration status was updated
1934
-     * @throws EE_Error
1935
-     * @throws RuntimeException
1936
-     */
1937
-    public function updateStatusBasedOnTotalPaid($trigger_set_status_logic = true)
1938
-    {
1939
-        $paid = $this->paid();
1940
-        $price = $this->final_price();
1941
-        switch(true) {
1942
-            // overpaid or paid
1943
-            case EEH_Money::compare_floats($paid, $price, '>'):
1944
-            case EEH_Money::compare_floats($paid, $price):
1945
-                $new_status = EEM_Registration::status_id_approved;
1946
-                break;
1947
-            //  underpaid
1948
-            case EEH_Money::compare_floats($paid, $price, '<'):
1949
-                $new_status = EEM_Registration::status_id_pending_payment;
1950
-                break;
1951
-            // uhhh Houston...
1952
-            default:
1953
-                throw new RuntimeException(
1954
-                    esc_html__('The total paid calculation for this registration is inaccurate.', 'event_espresso')
1955
-                );
1956
-        }
1957
-        if ($new_status !== $this->status_ID()) {
1958
-            if ($trigger_set_status_logic) {
1959
-                return $this->set_status($new_status);
1960
-            }
1961
-            parent::set('STS_ID', $new_status);
1962
-            return true;
1963
-        }
1964
-        return false;
1965
-    }
1966
-
1967
-
1968
-    /*************************** DEPRECATED ***************************/
1969
-
1970
-
1971
-    /**
1972
-     * @deprecated
1973
-     * @since     4.7.0
1974
-     * @access    public
1975
-     */
1976
-    public function price_paid()
1977
-    {
1978
-        EE_Error::doing_it_wrong('EE_Registration::price_paid()',
1979
-            esc_html__('This method is deprecated, please use EE_Registration::final_price() instead.', 'event_espresso'),
1980
-            '4.7.0');
1981
-        return $this->final_price();
1982
-    }
1983
-
1984
-
1985
-    /**
1986
-     * @deprecated
1987
-     * @since     4.7.0
1988
-     * @access    public
1989
-     * @param    float $REG_final_price
1990
-     * @throws EE_Error
1991
-     * @throws RuntimeException
1992
-     */
1993
-    public function set_price_paid($REG_final_price = 0.00)
1994
-    {
1995
-        EE_Error::doing_it_wrong('EE_Registration::set_price_paid()',
1996
-            esc_html__('This method is deprecated, please use EE_Registration::set_final_price() instead.', 'event_espresso'),
1997
-            '4.7.0');
1998
-        $this->set_final_price($REG_final_price);
1999
-    }
2000
-
2001
-
2002
-    /**
2003
-     * @deprecated
2004
-     * @since 4.7.0
2005
-     * @return string
2006
-     * @throws EE_Error
2007
-     */
2008
-    public function pretty_price_paid()
2009
-    {
2010
-        EE_Error::doing_it_wrong('EE_Registration::pretty_price_paid()',
2011
-            esc_html__('This method is deprecated, please use EE_Registration::pretty_final_price() instead.',
2012
-                'event_espresso'), '4.7.0');
2013
-        return $this->pretty_final_price();
2014
-    }
2015
-
2016
-
2017
-    /**
2018
-     * Gets the primary datetime related to this registration via the related Event to this registration
2019
-     *
2020
-     * @deprecated 4.9.17
2021
-     * @return EE_Datetime
2022
-     * @throws EE_Error
2023
-     * @throws EntityNotFoundException
2024
-     */
2025
-    public function get_related_primary_datetime()
2026
-    {
2027
-        EE_Error::doing_it_wrong(
2028
-            __METHOD__,
2029
-            esc_html__(
2030
-                'Use EE_Registration::get_latest_related_datetime() or EE_Registration::get_earliest_related_datetime()',
2031
-                'event_espresso'
2032
-            ),
2033
-            '4.9.17',
2034
-            '5.0.0'
2035
-        );
2036
-        return $this->event()->primary_datetime();
2037
-    }
21
+	/**
22
+	 * Used to reference when a registration has never been checked in.
23
+	 *
24
+	 * @deprecated use \EE_Checkin::status_checked_never instead
25
+	 * @type int
26
+	 */
27
+	const checkin_status_never = 2;
28
+
29
+	/**
30
+	 * Used to reference when a registration has been checked in.
31
+	 *
32
+	 * @deprecated use \EE_Checkin::status_checked_in instead
33
+	 * @type int
34
+	 */
35
+	const checkin_status_in = 1;
36
+
37
+
38
+	/**
39
+	 * Used to reference when a registration has been checked out.
40
+	 *
41
+	 * @deprecated use \EE_Checkin::status_checked_out instead
42
+	 * @type int
43
+	 */
44
+	const checkin_status_out = 0;
45
+
46
+
47
+	/**
48
+	 * extra meta key for tracking reg status os trashed registrations
49
+	 *
50
+	 * @type string
51
+	 */
52
+	const PRE_TRASH_REG_STATUS_KEY = 'pre_trash_registration_status';
53
+
54
+
55
+	/**
56
+	 * extra meta key for tracking if registration has reserved ticket
57
+	 *
58
+	 * @type string
59
+	 */
60
+	const HAS_RESERVED_TICKET_KEY = 'has_reserved_ticket';
61
+
62
+
63
+	/**
64
+	 * @param array  $props_n_values          incoming values
65
+	 * @param string $timezone                incoming timezone (if not set the timezone set for the website will be
66
+	 *                                        used.)
67
+	 * @param array  $date_formats            incoming date_formats in an array where the first value is the
68
+	 *                                        date_format and the second value is the time format
69
+	 * @return EE_Registration
70
+	 * @throws EE_Error
71
+	 */
72
+	public static function new_instance($props_n_values = array(), $timezone = null, $date_formats = array())
73
+	{
74
+		$has_object = parent::_check_for_object($props_n_values, __CLASS__, $timezone, $date_formats);
75
+		return $has_object ? $has_object : new self($props_n_values, false, $timezone, $date_formats);
76
+	}
77
+
78
+
79
+	/**
80
+	 * @param array  $props_n_values  incoming values from the database
81
+	 * @param string $timezone        incoming timezone as set by the model.  If not set the timezone for
82
+	 *                                the website will be used.
83
+	 * @return EE_Registration
84
+	 */
85
+	public static function new_instance_from_db($props_n_values = array(), $timezone = null)
86
+	{
87
+		return new self($props_n_values, true, $timezone);
88
+	}
89
+
90
+
91
+	/**
92
+	 *        Set Event ID
93
+	 *
94
+	 * @param        int $EVT_ID Event ID
95
+	 * @throws EE_Error
96
+	 * @throws RuntimeException
97
+	 */
98
+	public function set_event($EVT_ID = 0)
99
+	{
100
+		$this->set('EVT_ID', $EVT_ID);
101
+	}
102
+
103
+
104
+	/**
105
+	 * Overrides parent set() method so that all calls to set( 'REG_code', $REG_code ) OR set( 'STS_ID', $STS_ID ) can
106
+	 * be routed to internal methods
107
+	 *
108
+	 * @param string $field_name
109
+	 * @param mixed  $field_value
110
+	 * @param bool   $use_default
111
+	 * @throws EE_Error
112
+	 * @throws EntityNotFoundException
113
+	 * @throws InvalidArgumentException
114
+	 * @throws InvalidDataTypeException
115
+	 * @throws InvalidInterfaceException
116
+	 * @throws ReflectionException
117
+	 * @throws RuntimeException
118
+	 */
119
+	public function set($field_name, $field_value, $use_default = false)
120
+	{
121
+		switch ($field_name) {
122
+			case 'REG_code':
123
+				if (! empty($field_value) && $this->reg_code() === null) {
124
+					$this->set_reg_code($field_value, $use_default);
125
+				}
126
+				break;
127
+			case 'STS_ID':
128
+				$this->set_status($field_value, $use_default);
129
+				break;
130
+			default:
131
+				parent::set($field_name, $field_value, $use_default);
132
+		}
133
+	}
134
+
135
+
136
+	/**
137
+	 * Set Status ID
138
+	 * updates the registration status and ALSO...
139
+	 * calls reserve_registration_space() if the reg status changes TO approved from any other reg status
140
+	 * calls release_registration_space() if the reg status changes FROM approved to any other reg status
141
+	 *
142
+	 * @param string       $new_STS_ID
143
+	 * @param boolean      $use_default
144
+	 * @param ContextInterface|null $context
145
+	 * @return bool
146
+	 * @throws EE_Error
147
+	 * @throws EntityNotFoundException
148
+	 * @throws InvalidArgumentException
149
+	 * @throws ReflectionException
150
+	 * @throws RuntimeException
151
+	 * @throws InvalidDataTypeException
152
+	 * @throws InvalidInterfaceException
153
+	 */
154
+	public function set_status($new_STS_ID = null, $use_default = false, ContextInterface $context = null)
155
+	{
156
+		// get current REG_Status
157
+		$old_STS_ID = $this->status_ID();
158
+		// if status has changed
159
+		if ($old_STS_ID !== $new_STS_ID // and that status has actually changed
160
+			&& ! empty($old_STS_ID) // and that old status is actually set
161
+			&& ! empty($new_STS_ID) // as well as the new status
162
+			&& $this->ID() // ensure registration is in the db
163
+		) {
164
+			// TO approved
165
+			if ($new_STS_ID === EEM_Registration::status_id_approved) {
166
+				// reserve a space by incrementing ticket and datetime sold values
167
+				$this->_reserve_registration_space();
168
+				do_action('AHEE__EE_Registration__set_status__to_approved', $this, $old_STS_ID, $new_STS_ID, $context);
169
+				// OR FROM  approved
170
+			} elseif ($old_STS_ID === EEM_Registration::status_id_approved) {
171
+				// release a space by decrementing ticket and datetime sold values
172
+				$this->_release_registration_space();
173
+				do_action(
174
+					'AHEE__EE_Registration__set_status__from_approved',
175
+					$this,
176
+					$old_STS_ID,
177
+					$new_STS_ID,
178
+					$context
179
+				);
180
+			}
181
+			// update status
182
+			parent::set('STS_ID', $new_STS_ID, $use_default);
183
+			$this->_update_if_canceled_or_declined($new_STS_ID, $old_STS_ID, $context);
184
+			if($this->statusChangeUpdatesTransaction($context)) {
185
+				$this->updateTransactionAfterStatusChange();
186
+			}
187
+			do_action('AHEE__EE_Registration__set_status__after_update', $this, $old_STS_ID, $new_STS_ID, $context);
188
+			return true;
189
+		}
190
+		//even though the old value matches the new value, it's still good to
191
+		//allow the parent set method to have a say
192
+		parent::set('STS_ID', $new_STS_ID, $use_default);
193
+		return true;
194
+	}
195
+
196
+
197
+	/**
198
+	 * update REGs and TXN when cancelled or declined registrations involved
199
+	 *
200
+	 * @param string       $new_STS_ID
201
+	 * @param string       $old_STS_ID
202
+	 * @param ContextInterface|null $context
203
+	 * @throws EE_Error
204
+	 * @throws InvalidArgumentException
205
+	 * @throws InvalidDataTypeException
206
+	 * @throws InvalidInterfaceException
207
+	 * @throws ReflectionException
208
+	 */
209
+	private function _update_if_canceled_or_declined($new_STS_ID, $old_STS_ID, ContextInterface $context = null)
210
+	{
211
+		// these reg statuses should not be considered in any calculations involving monies owing
212
+		$closed_reg_statuses = EEM_Registration::closed_reg_statuses();
213
+		// true if registration has been cancelled or declined
214
+		$this->updateIfCanceled(
215
+			$closed_reg_statuses,
216
+			$new_STS_ID,
217
+			$old_STS_ID,
218
+			$context
219
+		);
220
+		$this->updateIfDeclined(
221
+			$closed_reg_statuses,
222
+			$new_STS_ID,
223
+			$old_STS_ID,
224
+			$context
225
+		);
226
+	}
227
+
228
+
229
+	/**
230
+	 * update REGs and TXN when cancelled or declined registrations involved
231
+	 *
232
+	 * @param array        $closed_reg_statuses
233
+	 * @param string       $new_STS_ID
234
+	 * @param string       $old_STS_ID
235
+	 * @param ContextInterface|null $context
236
+	 * @throws EE_Error
237
+	 * @throws InvalidArgumentException
238
+	 * @throws InvalidDataTypeException
239
+	 * @throws InvalidInterfaceException
240
+	 * @throws ReflectionException
241
+	 */
242
+	private function updateIfCanceled(array $closed_reg_statuses, $new_STS_ID, $old_STS_ID, ContextInterface $context = null)
243
+	{
244
+		// true if registration has been cancelled or declined
245
+		if (in_array($new_STS_ID, $closed_reg_statuses, true)
246
+			&& ! in_array($old_STS_ID, $closed_reg_statuses, true)
247
+		) {
248
+			/** @type EE_Registration_Processor $registration_processor */
249
+			$registration_processor = EE_Registry::instance()->load_class('Registration_Processor');
250
+			/** @type EE_Transaction_Processor $transaction_processor */
251
+			$transaction_processor = EE_Registry::instance()->load_class('Transaction_Processor');
252
+			// cancelled or declined registration
253
+			$registration_processor->update_registration_after_being_canceled_or_declined(
254
+				$this,
255
+				$closed_reg_statuses
256
+			);
257
+			$transaction_processor->update_transaction_after_canceled_or_declined_registration(
258
+				$this,
259
+				$closed_reg_statuses,
260
+				false
261
+			);
262
+			do_action(
263
+				'AHEE__EE_Registration__set_status__canceled_or_declined',
264
+				$this,
265
+				$old_STS_ID,
266
+				$new_STS_ID,
267
+				$context
268
+			);
269
+			return;
270
+		}
271
+	}
272
+
273
+
274
+	/**
275
+	 * update REGs and TXN when cancelled or declined registrations involved
276
+	 *
277
+	 * @param array        $closed_reg_statuses
278
+	 * @param string       $new_STS_ID
279
+	 * @param string       $old_STS_ID
280
+	 * @param ContextInterface|null $context
281
+	 * @throws EE_Error
282
+	 * @throws InvalidArgumentException
283
+	 * @throws InvalidDataTypeException
284
+	 * @throws InvalidInterfaceException
285
+	 * @throws ReflectionException
286
+	 */
287
+	private function updateIfDeclined(array $closed_reg_statuses, $new_STS_ID, $old_STS_ID, ContextInterface $context = null)
288
+	{
289
+		// true if reinstating cancelled or declined registration
290
+		if (in_array($old_STS_ID, $closed_reg_statuses, true)
291
+			&& ! in_array($new_STS_ID, $closed_reg_statuses, true)
292
+		) {
293
+			/** @type EE_Registration_Processor $registration_processor */
294
+			$registration_processor = EE_Registry::instance()->load_class('Registration_Processor');
295
+			/** @type EE_Transaction_Processor $transaction_processor */
296
+			$transaction_processor = EE_Registry::instance()->load_class('Transaction_Processor');
297
+			// reinstating cancelled or declined registration
298
+			$registration_processor->update_canceled_or_declined_registration_after_being_reinstated(
299
+				$this,
300
+				$closed_reg_statuses
301
+			);
302
+			$transaction_processor->update_transaction_after_reinstating_canceled_registration(
303
+				$this,
304
+				$closed_reg_statuses,
305
+				false
306
+			);
307
+			do_action(
308
+				'AHEE__EE_Registration__set_status__after_reinstated',
309
+				$this,
310
+				$old_STS_ID,
311
+				$new_STS_ID,
312
+				$context
313
+			);
314
+		}
315
+	}
316
+
317
+
318
+	/**
319
+	 * @param ContextInterface|null $context
320
+	 * @return bool
321
+	 */
322
+	private function statusChangeUpdatesTransaction(ContextInterface $context = null)
323
+	{
324
+		$contexts_that_do_not_update_transaction = (array) apply_filters(
325
+			'AHEE__EE_Registration__statusChangeUpdatesTransaction__contexts_that_do_not_update_transaction',
326
+			array('spco_reg_step_attendee_information_process_registrations'),
327
+			$context,
328
+			$this
329
+		);
330
+		return ! (
331
+			$context instanceof ContextInterface
332
+			&& in_array($context->slug(), $contexts_that_do_not_update_transaction, true)
333
+		);
334
+	}
335
+
336
+
337
+	/**
338
+	 * @throws EE_Error
339
+	 * @throws EntityNotFoundException
340
+	 * @throws InvalidArgumentException
341
+	 * @throws InvalidDataTypeException
342
+	 * @throws InvalidInterfaceException
343
+	 * @throws ReflectionException
344
+	 * @throws RuntimeException
345
+	 */
346
+	private function updateTransactionAfterStatusChange()
347
+	{
348
+		/** @type EE_Transaction_Payments $transaction_payments */
349
+		$transaction_payments = EE_Registry::instance()->load_class('Transaction_Payments');
350
+		$transaction_payments->recalculate_transaction_total($this->transaction(), false);
351
+		$this->transaction()->update_status_based_on_total_paid(true);
352
+	}
353
+
354
+
355
+	/**
356
+	 *        get Status ID
357
+	 */
358
+	public function status_ID()
359
+	{
360
+		return $this->get('STS_ID');
361
+	}
362
+
363
+
364
+	/**
365
+	 * increments this registration's related ticket sold and corresponding datetime sold values
366
+	 *
367
+	 * @return void
368
+	 * @throws EE_Error
369
+	 * @throws EntityNotFoundException
370
+	 */
371
+	private function _reserve_registration_space()
372
+	{
373
+		// reserved ticket and datetime counts will be decremented as sold counts are incremented
374
+		// so stop tracking that this reg has a ticket reserved
375
+		$this->release_reserved_ticket(false, "REG: {$this->ID()} (ln:". __LINE__ . ')');
376
+		$ticket = $this->ticket();
377
+		$ticket->increase_sold();
378
+		$ticket->save();
379
+		// possibly set event status to sold out
380
+		$this->event()->perform_sold_out_status_check();
381
+	}
382
+
383
+
384
+	/**
385
+	 * Gets the ticket this registration is for
386
+	 *
387
+	 * @param boolean $include_archived whether to include archived tickets or not.
388
+	 *
389
+	 * @return EE_Ticket|EE_Base_Class
390
+	 * @throws EE_Error
391
+	 */
392
+	public function ticket($include_archived = true)
393
+	{
394
+		$query_params = array();
395
+		if ($include_archived) {
396
+			$query_params['default_where_conditions'] = 'none';
397
+		}
398
+		return $this->get_first_related('Ticket', $query_params);
399
+	}
400
+
401
+
402
+	/**
403
+	 * Gets the event this registration is for
404
+	 *
405
+	 * @return EE_Event
406
+	 * @throws EE_Error
407
+	 * @throws EntityNotFoundException
408
+	 */
409
+	public function event()
410
+	{
411
+		$event = $this->get_first_related('Event');
412
+		if (! $event instanceof \EE_Event) {
413
+			throw new EntityNotFoundException('Event ID', $this->event_ID());
414
+		}
415
+		return $event;
416
+	}
417
+
418
+
419
+	/**
420
+	 * Gets the "author" of the registration.  Note that for the purposes of registrations, the author will correspond
421
+	 * with the author of the event this registration is for.
422
+	 *
423
+	 * @since 4.5.0
424
+	 * @return int
425
+	 * @throws EE_Error
426
+	 * @throws EntityNotFoundException
427
+	 */
428
+	public function wp_user()
429
+	{
430
+		$event = $this->event();
431
+		if ($event instanceof EE_Event) {
432
+			return $event->wp_user();
433
+		}
434
+		return 0;
435
+	}
436
+
437
+
438
+	/**
439
+	 * decrements (subtracts) this registration's related ticket sold and corresponding datetime sold values
440
+	 *
441
+	 * @return void
442
+	 * @throws EE_Error
443
+	 */
444
+	private function _release_registration_space()
445
+	{
446
+		$ticket = $this->ticket();
447
+		$ticket->decrease_sold();
448
+		$ticket->save();
449
+	}
450
+
451
+
452
+	/**
453
+	 * tracks this registration's ticket reservation in extra meta
454
+	 * and can increment related ticket reserved and corresponding datetime reserved values
455
+	 *
456
+	 * @param bool $update_ticket if true, will increment ticket and datetime reserved count
457
+	 * @return void
458
+	 * @throws EE_Error
459
+	 * @throws InvalidArgumentException
460
+	 * @throws InvalidDataTypeException
461
+	 * @throws InvalidInterfaceException
462
+	 * @throws ReflectionException
463
+	 */
464
+	public function reserve_ticket($update_ticket = false, $source = 'unknown')
465
+	{
466
+		// only reserve ticket if space is not currently reserved
467
+		if ((bool) $this->get_extra_meta(EE_Registration::HAS_RESERVED_TICKET_KEY, true) !== true) {
468
+			$this->update_extra_meta('reserve_ticket', "{$this->ticket_ID()} from {$source}");
469
+			// IMPORTANT !!!
470
+			// although checking $update_ticket first would be more efficient,
471
+			// we NEED to ALWAYS call update_extra_meta(), which is why that is done first
472
+			if (
473
+				$this->update_extra_meta(EE_Registration::HAS_RESERVED_TICKET_KEY, true)
474
+				&& $update_ticket
475
+			) {
476
+				$ticket = $this->ticket();
477
+				$ticket->increase_reserved(1, "REG: {$this->ID()} (ln:" . __LINE__ . ')');
478
+				$ticket->save();
479
+			}
480
+		}
481
+	}
482
+
483
+
484
+	/**
485
+	 * stops tracking this registration's ticket reservation in extra meta
486
+	 * decrements (subtracts) related ticket reserved and corresponding datetime reserved values
487
+	 *
488
+	 * @param bool $update_ticket if true, will decrement ticket and datetime reserved count
489
+	 * @return void
490
+	 * @throws EE_Error
491
+	 * @throws InvalidArgumentException
492
+	 * @throws InvalidDataTypeException
493
+	 * @throws InvalidInterfaceException
494
+	 * @throws ReflectionException
495
+	 */
496
+	public function release_reserved_ticket($update_ticket = false, $source = 'unknown')
497
+	{
498
+		// only release ticket if space is currently reserved
499
+		if ((bool) $this->get_extra_meta(EE_Registration::HAS_RESERVED_TICKET_KEY, true) === true) {
500
+			$this->update_extra_meta('release_reserved_ticket', "{$this->ticket_ID()} from {$source}");
501
+			// IMPORTANT !!!
502
+			// although checking $update_ticket first would be more efficient,
503
+			// we NEED to ALWAYS call update_extra_meta(), which is why that is done first
504
+			if (
505
+				$this->update_extra_meta(EE_Registration::HAS_RESERVED_TICKET_KEY, false)
506
+				&& $update_ticket
507
+			) {
508
+				$ticket = $this->ticket();
509
+				$ticket->decrease_reserved(1, true, "REG: {$this->ID()} (ln:" . __LINE__ . ')');
510
+				$ticket->save();
511
+			}
512
+		}
513
+	}
514
+
515
+
516
+	/**
517
+	 * Set Attendee ID
518
+	 *
519
+	 * @param        int $ATT_ID Attendee ID
520
+	 * @throws EE_Error
521
+	 * @throws RuntimeException
522
+	 */
523
+	public function set_attendee_id($ATT_ID = 0)
524
+	{
525
+		$this->set('ATT_ID', $ATT_ID);
526
+	}
527
+
528
+
529
+	/**
530
+	 *        Set Transaction ID
531
+	 *
532
+	 * @param        int $TXN_ID Transaction ID
533
+	 * @throws EE_Error
534
+	 * @throws RuntimeException
535
+	 */
536
+	public function set_transaction_id($TXN_ID = 0)
537
+	{
538
+		$this->set('TXN_ID', $TXN_ID);
539
+	}
540
+
541
+
542
+	/**
543
+	 *        Set Session
544
+	 *
545
+	 * @param    string $REG_session PHP Session ID
546
+	 * @throws EE_Error
547
+	 * @throws RuntimeException
548
+	 */
549
+	public function set_session($REG_session = '')
550
+	{
551
+		$this->set('REG_session', $REG_session);
552
+	}
553
+
554
+
555
+	/**
556
+	 *        Set Registration URL Link
557
+	 *
558
+	 * @param    string $REG_url_link Registration URL Link
559
+	 * @throws EE_Error
560
+	 * @throws RuntimeException
561
+	 */
562
+	public function set_reg_url_link($REG_url_link = '')
563
+	{
564
+		$this->set('REG_url_link', $REG_url_link);
565
+	}
566
+
567
+
568
+	/**
569
+	 *        Set Attendee Counter
570
+	 *
571
+	 * @param        int $REG_count Primary Attendee
572
+	 * @throws EE_Error
573
+	 * @throws RuntimeException
574
+	 */
575
+	public function set_count($REG_count = 1)
576
+	{
577
+		$this->set('REG_count', $REG_count);
578
+	}
579
+
580
+
581
+	/**
582
+	 *        Set Group Size
583
+	 *
584
+	 * @param        boolean $REG_group_size Group Registration
585
+	 * @throws EE_Error
586
+	 * @throws RuntimeException
587
+	 */
588
+	public function set_group_size($REG_group_size = false)
589
+	{
590
+		$this->set('REG_group_size', $REG_group_size);
591
+	}
592
+
593
+
594
+	/**
595
+	 *    is_not_approved -  convenience method that returns TRUE if REG status ID ==
596
+	 *    EEM_Registration::status_id_not_approved
597
+	 *
598
+	 * @return        boolean
599
+	 */
600
+	public function is_not_approved()
601
+	{
602
+		return $this->status_ID() == EEM_Registration::status_id_not_approved ? true : false;
603
+	}
604
+
605
+
606
+	/**
607
+	 *    is_pending_payment -  convenience method that returns TRUE if REG status ID ==
608
+	 *    EEM_Registration::status_id_pending_payment
609
+	 *
610
+	 * @return        boolean
611
+	 */
612
+	public function is_pending_payment()
613
+	{
614
+		return $this->status_ID() == EEM_Registration::status_id_pending_payment ? true : false;
615
+	}
616
+
617
+
618
+	/**
619
+	 *    is_approved -  convenience method that returns TRUE if REG status ID == EEM_Registration::status_id_approved
620
+	 *
621
+	 * @return        boolean
622
+	 */
623
+	public function is_approved()
624
+	{
625
+		return $this->status_ID() == EEM_Registration::status_id_approved ? true : false;
626
+	}
627
+
628
+
629
+	/**
630
+	 *    is_cancelled -  convenience method that returns TRUE if REG status ID == EEM_Registration::status_id_cancelled
631
+	 *
632
+	 * @return        boolean
633
+	 */
634
+	public function is_cancelled()
635
+	{
636
+		return $this->status_ID() == EEM_Registration::status_id_cancelled ? true : false;
637
+	}
638
+
639
+
640
+	/**
641
+	 *    is_declined -  convenience method that returns TRUE if REG status ID == EEM_Registration::status_id_declined
642
+	 *
643
+	 * @return        boolean
644
+	 */
645
+	public function is_declined()
646
+	{
647
+		return $this->status_ID() == EEM_Registration::status_id_declined ? true : false;
648
+	}
649
+
650
+
651
+	/**
652
+	 *    is_incomplete -  convenience method that returns TRUE if REG status ID ==
653
+	 *    EEM_Registration::status_id_incomplete
654
+	 *
655
+	 * @return        boolean
656
+	 */
657
+	public function is_incomplete()
658
+	{
659
+		return $this->status_ID() == EEM_Registration::status_id_incomplete ? true : false;
660
+	}
661
+
662
+
663
+	/**
664
+	 *        Set Registration Date
665
+	 *
666
+	 * @param        mixed ( int or string ) $REG_date Registration Date - Unix timestamp or string representation of
667
+	 *                                                 Date
668
+	 * @throws EE_Error
669
+	 * @throws RuntimeException
670
+	 */
671
+	public function set_reg_date($REG_date = false)
672
+	{
673
+		$this->set('REG_date', $REG_date);
674
+	}
675
+
676
+
677
+	/**
678
+	 *    Set final price owing for this registration after all ticket/price modifications
679
+	 *
680
+	 * @access    public
681
+	 * @param    float $REG_final_price
682
+	 * @throws EE_Error
683
+	 * @throws RuntimeException
684
+	 */
685
+	public function set_final_price($REG_final_price = 0.00)
686
+	{
687
+		$this->set('REG_final_price', $REG_final_price);
688
+	}
689
+
690
+
691
+	/**
692
+	 *    Set amount paid towards this registration's final price
693
+	 *
694
+	 * @access    public
695
+	 * @param    float $REG_paid
696
+	 * @throws EE_Error
697
+	 * @throws RuntimeException
698
+	 */
699
+	public function set_paid($REG_paid = 0.00)
700
+	{
701
+		$this->set('REG_paid', $REG_paid);
702
+	}
703
+
704
+
705
+	/**
706
+	 *        Attendee Is Going
707
+	 *
708
+	 * @param        boolean $REG_att_is_going Attendee Is Going
709
+	 * @throws EE_Error
710
+	 * @throws RuntimeException
711
+	 */
712
+	public function set_att_is_going($REG_att_is_going = false)
713
+	{
714
+		$this->set('REG_att_is_going', $REG_att_is_going);
715
+	}
716
+
717
+
718
+	/**
719
+	 * Gets the related attendee
720
+	 *
721
+	 * @return EE_Attendee
722
+	 * @throws EE_Error
723
+	 */
724
+	public function attendee()
725
+	{
726
+		return $this->get_first_related('Attendee');
727
+	}
728
+
729
+
730
+	/**
731
+	 *        get Event ID
732
+	 */
733
+	public function event_ID()
734
+	{
735
+		return $this->get('EVT_ID');
736
+	}
737
+
738
+
739
+	/**
740
+	 *        get Event ID
741
+	 */
742
+	public function event_name()
743
+	{
744
+		$event = $this->event_obj();
745
+		if ($event) {
746
+			return $event->name();
747
+		} else {
748
+			return null;
749
+		}
750
+	}
751
+
752
+
753
+	/**
754
+	 * Fetches the event this registration is for
755
+	 *
756
+	 * @return EE_Event
757
+	 * @throws EE_Error
758
+	 */
759
+	public function event_obj()
760
+	{
761
+		return $this->get_first_related('Event');
762
+	}
763
+
764
+
765
+	/**
766
+	 *        get Attendee ID
767
+	 */
768
+	public function attendee_ID()
769
+	{
770
+		return $this->get('ATT_ID');
771
+	}
772
+
773
+
774
+	/**
775
+	 *        get PHP Session ID
776
+	 */
777
+	public function session_ID()
778
+	{
779
+		return $this->get('REG_session');
780
+	}
781
+
782
+
783
+	/**
784
+	 * Gets the string which represents the URL trigger for the receipt template in the message template system.
785
+	 *
786
+	 * @param string $messenger 'pdf' or 'html'.  Default 'html'.
787
+	 * @return string
788
+	 */
789
+	public function receipt_url($messenger = 'html')
790
+	{
791
+
792
+		/**
793
+		 * The below will be deprecated one version after this.  We check first if there is a custom receipt template
794
+		 * already in use on old system.  If there is then we just return the standard url for it.
795
+		 *
796
+		 * @since 4.5.0
797
+		 */
798
+		$template_relative_path = 'modules/gateways/Invoice/lib/templates/receipt_body.template.php';
799
+		$has_custom             = EEH_Template::locate_template(
800
+			$template_relative_path,
801
+			array(),
802
+			true,
803
+			true,
804
+			true
805
+		);
806
+
807
+		if ($has_custom) {
808
+			return add_query_arg(array('receipt' => 'true'), $this->invoice_url('launch'));
809
+		}
810
+		return apply_filters('FHEE__EE_Registration__receipt_url__receipt_url', '', $this, $messenger, 'receipt');
811
+	}
812
+
813
+
814
+	/**
815
+	 * Gets the string which represents the URL trigger for the invoice template in the message template system.
816
+	 *
817
+	 * @param string $messenger 'pdf' or 'html'.  Default 'html'.
818
+	 * @return string
819
+	 * @throws EE_Error
820
+	 */
821
+	public function invoice_url($messenger = 'html')
822
+	{
823
+		/**
824
+		 * The below will be deprecated one version after this.  We check first if there is a custom invoice template
825
+		 * already in use on old system.  If there is then we just return the standard url for it.
826
+		 *
827
+		 * @since 4.5.0
828
+		 */
829
+		$template_relative_path = 'modules/gateways/Invoice/lib/templates/invoice_body.template.php';
830
+		$has_custom             = EEH_Template::locate_template(
831
+			$template_relative_path,
832
+			array(),
833
+			true,
834
+			true,
835
+			true
836
+		);
837
+
838
+		if ($has_custom) {
839
+			if ($messenger == 'html') {
840
+				return $this->invoice_url('launch');
841
+			}
842
+			$route = $messenger == 'download' || $messenger == 'pdf' ? 'download_invoice' : 'launch_invoice';
843
+
844
+			$query_args = array('ee' => $route, 'id' => $this->reg_url_link());
845
+			if ($messenger == 'html') {
846
+				$query_args['html'] = true;
847
+			}
848
+			return add_query_arg($query_args, get_permalink(EE_Registry::instance()->CFG->core->thank_you_page_id));
849
+		}
850
+		return apply_filters('FHEE__EE_Registration__invoice_url__invoice_url', '', $this, $messenger, 'invoice');
851
+	}
852
+
853
+
854
+	/**
855
+	 * get Registration URL Link
856
+	 *
857
+	 * @access public
858
+	 * @return string
859
+	 * @throws EE_Error
860
+	 */
861
+	public function reg_url_link()
862
+	{
863
+		return (string) $this->get('REG_url_link');
864
+	}
865
+
866
+
867
+	/**
868
+	 * Echoes out invoice_url()
869
+	 *
870
+	 * @param string $type 'download','launch', or 'html' (default is 'launch')
871
+	 * @return void
872
+	 * @throws EE_Error
873
+	 */
874
+	public function e_invoice_url($type = 'launch')
875
+	{
876
+		echo $this->invoice_url($type);
877
+	}
878
+
879
+
880
+	/**
881
+	 * Echoes out payment_overview_url
882
+	 */
883
+	public function e_payment_overview_url()
884
+	{
885
+		echo $this->payment_overview_url();
886
+	}
887
+
888
+
889
+	/**
890
+	 * Gets the URL for the checkout payment options reg step
891
+	 * with this registration's REG_url_link added as a query parameter
892
+	 *
893
+	 * @param bool $clear_session Set to true when you want to clear the session on revisiting the
894
+	 *                            payment overview url.
895
+	 * @return string
896
+	 * @throws InvalidInterfaceException
897
+	 * @throws InvalidDataTypeException
898
+	 * @throws EE_Error
899
+	 * @throws InvalidArgumentException
900
+	 */
901
+	public function payment_overview_url($clear_session = false)
902
+	{
903
+		return add_query_arg(
904
+			(array) apply_filters(
905
+				'FHEE__EE_Registration__payment_overview_url__query_args',
906
+				array(
907
+					'e_reg_url_link' => $this->reg_url_link(),
908
+					'step'           => 'payment_options',
909
+					'revisit'        => true,
910
+					'clear_session'  => (bool) $clear_session,
911
+				),
912
+				$this
913
+			),
914
+			EE_Registry::instance()->CFG->core->reg_page_url()
915
+		);
916
+	}
917
+
918
+
919
+	/**
920
+	 * Gets the URL for the checkout attendee information reg step
921
+	 * with this registration's REG_url_link added as a query parameter
922
+	 *
923
+	 * @return string
924
+	 * @throws InvalidInterfaceException
925
+	 * @throws InvalidDataTypeException
926
+	 * @throws EE_Error
927
+	 * @throws InvalidArgumentException
928
+	 */
929
+	public function edit_attendee_information_url()
930
+	{
931
+		return add_query_arg(
932
+			(array) apply_filters(
933
+				'FHEE__EE_Registration__edit_attendee_information_url__query_args',
934
+				array(
935
+					'e_reg_url_link' => $this->reg_url_link(),
936
+					'step'           => 'attendee_information',
937
+					'revisit'        => true,
938
+				),
939
+				$this
940
+			),
941
+			EE_Registry::instance()->CFG->core->reg_page_url()
942
+		);
943
+	}
944
+
945
+
946
+	/**
947
+	 * Simply generates and returns the appropriate admin_url link to edit this registration
948
+	 *
949
+	 * @return string
950
+	 * @throws EE_Error
951
+	 */
952
+	public function get_admin_edit_url()
953
+	{
954
+		return EEH_URL::add_query_args_and_nonce(array(
955
+			'page'    => 'espresso_registrations',
956
+			'action'  => 'view_registration',
957
+			'_REG_ID' => $this->ID(),
958
+		), admin_url('admin.php'));
959
+	}
960
+
961
+
962
+	/**
963
+	 *    is_primary_registrant?
964
+	 */
965
+	public function is_primary_registrant()
966
+	{
967
+		return $this->get('REG_count') == 1 ? true : false;
968
+	}
969
+
970
+
971
+	/**
972
+	 * This returns the primary registration object for this registration group (which may be this object).
973
+	 *
974
+	 * @return EE_Registration
975
+	 * @throws EE_Error
976
+	 */
977
+	public function get_primary_registration()
978
+	{
979
+		if ($this->is_primary_registrant()) {
980
+			return $this;
981
+		}
982
+
983
+		//k reg_count !== 1 so let's get the EE_Registration object matching this txn_id and reg_count == 1
984
+		/** @var EE_Registration $primary_registrant */
985
+		$primary_registrant = EEM_Registration::instance()->get_one(array(
986
+			array(
987
+				'TXN_ID'    => $this->transaction_ID(),
988
+				'REG_count' => 1,
989
+			),
990
+		));
991
+		return $primary_registrant;
992
+	}
993
+
994
+
995
+	/**
996
+	 *        get  Attendee Number
997
+	 *
998
+	 * @access        public
999
+	 */
1000
+	public function count()
1001
+	{
1002
+		return $this->get('REG_count');
1003
+	}
1004
+
1005
+
1006
+	/**
1007
+	 *        get Group Size
1008
+	 */
1009
+	public function group_size()
1010
+	{
1011
+		return $this->get('REG_group_size');
1012
+	}
1013
+
1014
+
1015
+	/**
1016
+	 *        get Registration Date
1017
+	 */
1018
+	public function date()
1019
+	{
1020
+		return $this->get('REG_date');
1021
+	}
1022
+
1023
+
1024
+	/**
1025
+	 * gets a pretty date
1026
+	 *
1027
+	 * @param string $date_format
1028
+	 * @param string $time_format
1029
+	 * @return string
1030
+	 * @throws EE_Error
1031
+	 */
1032
+	public function pretty_date($date_format = null, $time_format = null)
1033
+	{
1034
+		return $this->get_datetime('REG_date', $date_format, $time_format);
1035
+	}
1036
+
1037
+
1038
+	/**
1039
+	 * final_price
1040
+	 * the registration's share of the transaction total, so that the
1041
+	 * sum of all the transaction's REG_final_prices equal the transaction's total
1042
+	 *
1043
+	 * @return float
1044
+	 * @throws EE_Error
1045
+	 */
1046
+	public function final_price()
1047
+	{
1048
+		return $this->get('REG_final_price');
1049
+	}
1050
+
1051
+
1052
+	/**
1053
+	 * pretty_final_price
1054
+	 *  final price as formatted string, with correct decimal places and currency symbol
1055
+	 *
1056
+	 * @return string
1057
+	 * @throws EE_Error
1058
+	 */
1059
+	public function pretty_final_price()
1060
+	{
1061
+		return $this->get_pretty('REG_final_price');
1062
+	}
1063
+
1064
+
1065
+	/**
1066
+	 * get paid (yeah)
1067
+	 *
1068
+	 * @return float
1069
+	 * @throws EE_Error
1070
+	 */
1071
+	public function paid()
1072
+	{
1073
+		return $this->get('REG_paid');
1074
+	}
1075
+
1076
+
1077
+	/**
1078
+	 * pretty_paid
1079
+	 *
1080
+	 * @return float
1081
+	 * @throws EE_Error
1082
+	 */
1083
+	public function pretty_paid()
1084
+	{
1085
+		return $this->get_pretty('REG_paid');
1086
+	}
1087
+
1088
+
1089
+	/**
1090
+	 * owes_monies_and_can_pay
1091
+	 * whether or not this registration has monies owing and it's' status allows payment
1092
+	 *
1093
+	 * @param array $requires_payment
1094
+	 * @return bool
1095
+	 * @throws EE_Error
1096
+	 */
1097
+	public function owes_monies_and_can_pay($requires_payment = array())
1098
+	{
1099
+		// these reg statuses require payment (if event is not free)
1100
+		$requires_payment = ! empty($requires_payment)
1101
+			? $requires_payment
1102
+			: EEM_Registration::reg_statuses_that_allow_payment();
1103
+		if (in_array($this->status_ID(), $requires_payment) &&
1104
+			$this->final_price() != 0 &&
1105
+			$this->final_price() != $this->paid()
1106
+		) {
1107
+			return true;
1108
+		} else {
1109
+			return false;
1110
+		}
1111
+	}
1112
+
1113
+
1114
+	/**
1115
+	 * Prints out the return value of $this->pretty_status()
1116
+	 *
1117
+	 * @param bool $show_icons
1118
+	 * @return void
1119
+	 * @throws EE_Error
1120
+	 */
1121
+	public function e_pretty_status($show_icons = false)
1122
+	{
1123
+		echo $this->pretty_status($show_icons);
1124
+	}
1125
+
1126
+
1127
+	/**
1128
+	 * Returns a nice version of the status for displaying to customers
1129
+	 *
1130
+	 * @param bool $show_icons
1131
+	 * @return string
1132
+	 * @throws EE_Error
1133
+	 */
1134
+	public function pretty_status($show_icons = false)
1135
+	{
1136
+		$status = EEM_Status::instance()->localized_status(
1137
+			array($this->status_ID() => esc_html__('unknown', 'event_espresso')),
1138
+			false,
1139
+			'sentence'
1140
+		);
1141
+		$icon   = '';
1142
+		switch ($this->status_ID()) {
1143
+			case EEM_Registration::status_id_approved:
1144
+				$icon = $show_icons
1145
+					? '<span class="dashicons dashicons-star-filled ee-icon-size-16 green-text"></span>'
1146
+					: '';
1147
+				break;
1148
+			case EEM_Registration::status_id_pending_payment:
1149
+				$icon = $show_icons
1150
+					? '<span class="dashicons dashicons-star-half ee-icon-size-16 orange-text"></span>'
1151
+					: '';
1152
+				break;
1153
+			case EEM_Registration::status_id_not_approved:
1154
+				$icon = $show_icons
1155
+					? '<span class="dashicons dashicons-marker ee-icon-size-16 orange-text"></span>'
1156
+					: '';
1157
+				break;
1158
+			case EEM_Registration::status_id_cancelled:
1159
+				$icon = $show_icons
1160
+					? '<span class="dashicons dashicons-no ee-icon-size-16 lt-grey-text"></span>'
1161
+					: '';
1162
+				break;
1163
+			case EEM_Registration::status_id_incomplete:
1164
+				$icon = $show_icons
1165
+					? '<span class="dashicons dashicons-no ee-icon-size-16 lt-orange-text"></span>'
1166
+					: '';
1167
+				break;
1168
+			case EEM_Registration::status_id_declined:
1169
+				$icon = $show_icons
1170
+					? '<span class="dashicons dashicons-no ee-icon-size-16 red-text"></span>'
1171
+					: '';
1172
+				break;
1173
+			case EEM_Registration::status_id_wait_list:
1174
+				$icon = $show_icons
1175
+					? '<span class="dashicons dashicons-clipboard ee-icon-size-16 purple-text"></span>'
1176
+					: '';
1177
+				break;
1178
+		}
1179
+		return $icon . $status[$this->status_ID()];
1180
+	}
1181
+
1182
+
1183
+	/**
1184
+	 *        get Attendee Is Going
1185
+	 */
1186
+	public function att_is_going()
1187
+	{
1188
+		return $this->get('REG_att_is_going');
1189
+	}
1190
+
1191
+
1192
+	/**
1193
+	 * Gets related answers
1194
+	 *
1195
+	 * @param array $query_params like EEM_Base::get_all
1196
+	 * @return EE_Answer[]
1197
+	 * @throws EE_Error
1198
+	 */
1199
+	public function answers($query_params = null)
1200
+	{
1201
+		return $this->get_many_related('Answer', $query_params);
1202
+	}
1203
+
1204
+
1205
+	/**
1206
+	 * Gets the registration's answer value to the specified question
1207
+	 * (either the question's ID or a question object)
1208
+	 *
1209
+	 * @param EE_Question|int $question
1210
+	 * @param bool            $pretty_value
1211
+	 * @return array|string if pretty_value= true, the result will always be a string
1212
+	 * (because the answer might be an array of answer values, so passing pretty_value=true
1213
+	 * will convert it into some kind of string)
1214
+	 * @throws EE_Error
1215
+	 */
1216
+	public function answer_value_to_question($question, $pretty_value = true)
1217
+	{
1218
+		$question_id = EEM_Question::instance()->ensure_is_ID($question);
1219
+		return EEM_Answer::instance()->get_answer_value_to_question($this, $question_id, $pretty_value);
1220
+	}
1221
+
1222
+
1223
+	/**
1224
+	 * question_groups
1225
+	 * returns an array of EE_Question_Group objects for this registration
1226
+	 *
1227
+	 * @return EE_Question_Group[]
1228
+	 * @throws EE_Error
1229
+	 * @throws EntityNotFoundException
1230
+	 */
1231
+	public function question_groups()
1232
+	{
1233
+		$question_groups = array();
1234
+		if ($this->event() instanceof EE_Event) {
1235
+			$question_groups = $this->event()->question_groups(
1236
+				array(
1237
+					array(
1238
+						'Event_Question_Group.EQG_primary' => $this->count() == 1 ? true : false,
1239
+					),
1240
+					'order_by' => array('QSG_order' => 'ASC'),
1241
+				)
1242
+			);
1243
+		}
1244
+		return $question_groups;
1245
+	}
1246
+
1247
+
1248
+	/**
1249
+	 * count_question_groups
1250
+	 * returns a count of the number of EE_Question_Group objects for this registration
1251
+	 *
1252
+	 * @return int
1253
+	 * @throws EE_Error
1254
+	 * @throws EntityNotFoundException
1255
+	 */
1256
+	public function count_question_groups()
1257
+	{
1258
+		$qg_count = 0;
1259
+		if ($this->event() instanceof EE_Event) {
1260
+			$qg_count = $this->event()->count_related(
1261
+				'Question_Group',
1262
+				array(
1263
+					array(
1264
+						'Event_Question_Group.EQG_primary' => $this->count() == 1 ? true : false,
1265
+					),
1266
+				)
1267
+			);
1268
+		}
1269
+		return $qg_count;
1270
+	}
1271
+
1272
+
1273
+	/**
1274
+	 * Returns the registration date in the 'standard' string format
1275
+	 * (function may be improved in the future to allow for different formats and timezones)
1276
+	 *
1277
+	 * @return string
1278
+	 * @throws EE_Error
1279
+	 */
1280
+	public function reg_date()
1281
+	{
1282
+		return $this->get_datetime('REG_date');
1283
+	}
1284
+
1285
+
1286
+	/**
1287
+	 * Gets the datetime-ticket for this registration (ie, it can be used to isolate
1288
+	 * the ticket this registration purchased, or the datetime they have registered
1289
+	 * to attend)
1290
+	 *
1291
+	 * @return EE_Datetime_Ticket
1292
+	 * @throws EE_Error
1293
+	 */
1294
+	public function datetime_ticket()
1295
+	{
1296
+		return $this->get_first_related('Datetime_Ticket');
1297
+	}
1298
+
1299
+
1300
+	/**
1301
+	 * Sets the registration's datetime_ticket.
1302
+	 *
1303
+	 * @param EE_Datetime_Ticket $datetime_ticket
1304
+	 * @return EE_Datetime_Ticket
1305
+	 * @throws EE_Error
1306
+	 */
1307
+	public function set_datetime_ticket($datetime_ticket)
1308
+	{
1309
+		return $this->_add_relation_to($datetime_ticket, 'Datetime_Ticket');
1310
+	}
1311
+
1312
+	/**
1313
+	 * Gets deleted
1314
+	 *
1315
+	 * @return bool
1316
+	 * @throws EE_Error
1317
+	 */
1318
+	public function deleted()
1319
+	{
1320
+		return $this->get('REG_deleted');
1321
+	}
1322
+
1323
+	/**
1324
+	 * Sets deleted
1325
+	 *
1326
+	 * @param boolean $deleted
1327
+	 * @return bool
1328
+	 * @throws EE_Error
1329
+	 * @throws RuntimeException
1330
+	 */
1331
+	public function set_deleted($deleted)
1332
+	{
1333
+		if ($deleted) {
1334
+			$this->delete();
1335
+		} else {
1336
+			$this->restore();
1337
+		}
1338
+	}
1339
+
1340
+
1341
+	/**
1342
+	 * Get the status object of this object
1343
+	 *
1344
+	 * @return EE_Status
1345
+	 * @throws EE_Error
1346
+	 */
1347
+	public function status_obj()
1348
+	{
1349
+		return $this->get_first_related('Status');
1350
+	}
1351
+
1352
+
1353
+	/**
1354
+	 * Returns the number of times this registration has checked into any of the datetimes
1355
+	 * its available for
1356
+	 *
1357
+	 * @return int
1358
+	 * @throws EE_Error
1359
+	 */
1360
+	public function count_checkins()
1361
+	{
1362
+		return $this->get_model()->count_related($this, 'Checkin');
1363
+	}
1364
+
1365
+
1366
+	/**
1367
+	 * Returns the number of current Check-ins this registration is checked into for any of the datetimes the
1368
+	 * registration is for.  Note, this is ONLY checked in (does not include checkedout)
1369
+	 *
1370
+	 * @return int
1371
+	 * @throws EE_Error
1372
+	 */
1373
+	public function count_checkins_not_checkedout()
1374
+	{
1375
+		return $this->get_model()->count_related($this, 'Checkin', array(array('CHK_in' => 1)));
1376
+	}
1377
+
1378
+
1379
+	/**
1380
+	 * The purpose of this method is simply to check whether this registration can checkin to the given datetime.
1381
+	 *
1382
+	 * @param int | EE_Datetime $DTT_OR_ID      The datetime the registration is being checked against
1383
+	 * @param bool              $check_approved This is used to indicate whether the caller wants can_checkin to also
1384
+	 *                                          consider registration status as well as datetime access.
1385
+	 * @return bool
1386
+	 * @throws EE_Error
1387
+	 */
1388
+	public function can_checkin($DTT_OR_ID, $check_approved = true)
1389
+	{
1390
+		$DTT_ID = EEM_Datetime::instance()->ensure_is_ID($DTT_OR_ID);
1391
+
1392
+		//first check registration status
1393
+		if (($check_approved && ! $this->is_approved()) || ! $DTT_ID) {
1394
+			return false;
1395
+		}
1396
+		//is there a datetime ticket that matches this dtt_ID?
1397
+		if (! (EEM_Datetime_Ticket::instance()->exists(array(
1398
+			array(
1399
+				'TKT_ID' => $this->get('TKT_ID'),
1400
+				'DTT_ID' => $DTT_ID,
1401
+			),
1402
+		)))
1403
+		) {
1404
+			return false;
1405
+		}
1406
+
1407
+		//final check is against TKT_uses
1408
+		return $this->verify_can_checkin_against_TKT_uses($DTT_ID);
1409
+	}
1410
+
1411
+
1412
+	/**
1413
+	 * This method verifies whether the user can checkin for the given datetime considering the max uses value set on
1414
+	 * the ticket. To do this,  a query is done to get the count of the datetime records already checked into.  If the
1415
+	 * datetime given does not have a check-in record and checking in for that datetime will exceed the allowed uses,
1416
+	 * then return false.  Otherwise return true.
1417
+	 *
1418
+	 * @param int | EE_Datetime $DTT_OR_ID The datetime the registration is being checked against
1419
+	 * @return bool true means can checkin.  false means cannot checkin.
1420
+	 * @throws EE_Error
1421
+	 */
1422
+	public function verify_can_checkin_against_TKT_uses($DTT_OR_ID)
1423
+	{
1424
+		$DTT_ID = EEM_Datetime::instance()->ensure_is_ID($DTT_OR_ID);
1425
+
1426
+		if (! $DTT_ID) {
1427
+			return false;
1428
+		}
1429
+
1430
+		$max_uses = $this->ticket() instanceof EE_Ticket ? $this->ticket()->uses() : EE_INF;
1431
+
1432
+		// if max uses is not set or equals infinity then return true cause its not a factor for whether user can
1433
+		// check-in or not.
1434
+		if (! $max_uses || $max_uses === EE_INF) {
1435
+			return true;
1436
+		}
1437
+
1438
+		//does this datetime have a checkin record?  If so, then the dtt count has already been verified so we can just
1439
+		//go ahead and toggle.
1440
+		if (EEM_Checkin::instance()->exists(array(array('REG_ID' => $this->ID(), 'DTT_ID' => $DTT_ID)))) {
1441
+			return true;
1442
+		}
1443
+
1444
+		//made it here so the last check is whether the number of checkins per unique datetime on this registration
1445
+		//disallows further check-ins.
1446
+		$count_unique_dtt_checkins = EEM_Checkin::instance()->count(array(
1447
+			array(
1448
+				'REG_ID' => $this->ID(),
1449
+				'CHK_in' => true,
1450
+			),
1451
+		), 'DTT_ID', true);
1452
+		// checkins have already reached their max number of uses
1453
+		// so registrant can NOT checkin
1454
+		if ($count_unique_dtt_checkins >= $max_uses) {
1455
+			EE_Error::add_error(
1456
+				esc_html__(
1457
+					'Check-in denied because number of datetime uses for the ticket has been reached or exceeded.',
1458
+					'event_espresso'
1459
+				),
1460
+				__FILE__,
1461
+				__FUNCTION__,
1462
+				__LINE__
1463
+			);
1464
+			return false;
1465
+		}
1466
+		return true;
1467
+	}
1468
+
1469
+
1470
+	/**
1471
+	 * toggle Check-in status for this registration
1472
+	 * Check-ins are toggled in the following order:
1473
+	 * never checked in -> checked in
1474
+	 * checked in -> checked out
1475
+	 * checked out -> checked in
1476
+	 *
1477
+	 * @param  int $DTT_ID  include specific datetime to toggle Check-in for.
1478
+	 *                      If not included or null, then it is assumed latest datetime is being toggled.
1479
+	 * @param bool $verify  If true then can_checkin() is used to verify whether the person
1480
+	 *                      can be checked in or not.  Otherwise this forces change in checkin status.
1481
+	 * @return bool|int     the chk_in status toggled to OR false if nothing got changed.
1482
+	 * @throws EE_Error
1483
+	 */
1484
+	public function toggle_checkin_status($DTT_ID = null, $verify = false)
1485
+	{
1486
+		if (empty($DTT_ID)) {
1487
+			$datetime = $this->get_latest_related_datetime();
1488
+			$DTT_ID   = $datetime instanceof EE_Datetime ? $datetime->ID() : 0;
1489
+			// verify the registration can checkin for the given DTT_ID
1490
+		} elseif (! $this->can_checkin($DTT_ID, $verify)) {
1491
+			EE_Error::add_error(
1492
+				sprintf(
1493
+					esc_html__(
1494
+						'The given registration (ID:%1$d) can not be checked in to the given DTT_ID (%2$d), because the registration does not have access',
1495
+						'event_espresso'
1496
+					),
1497
+					$this->ID(),
1498
+					$DTT_ID
1499
+				),
1500
+				__FILE__,
1501
+				__FUNCTION__,
1502
+				__LINE__
1503
+			);
1504
+			return false;
1505
+		}
1506
+		$status_paths = array(
1507
+			EE_Checkin::status_checked_never => EE_Checkin::status_checked_in,
1508
+			EE_Checkin::status_checked_in    => EE_Checkin::status_checked_out,
1509
+			EE_Checkin::status_checked_out   => EE_Checkin::status_checked_in,
1510
+		);
1511
+		//start by getting the current status so we know what status we'll be changing to.
1512
+		$cur_status = $this->check_in_status_for_datetime($DTT_ID, null);
1513
+		$status_to  = $status_paths[$cur_status];
1514
+		// database only records true for checked IN or false for checked OUT
1515
+		// no record ( null ) means checked in NEVER, but we obviously don't save that
1516
+		$new_status = $status_to === EE_Checkin::status_checked_in ? true : false;
1517
+		// add relation - note Check-ins are always creating new rows
1518
+		// because we are keeping track of Check-ins over time.
1519
+		// Eventually we'll probably want to show a list table
1520
+		// for the individual Check-ins so that they can be managed.
1521
+		$checkin = EE_Checkin::new_instance(array(
1522
+			'REG_ID' => $this->ID(),
1523
+			'DTT_ID' => $DTT_ID,
1524
+			'CHK_in' => $new_status,
1525
+		));
1526
+		// if the record could not be saved then return false
1527
+		if ($checkin->save() === 0) {
1528
+			if (WP_DEBUG) {
1529
+				global $wpdb;
1530
+				$error = sprintf(
1531
+					esc_html__(
1532
+						'Registration check in update failed because of the following database error: %1$s%2$s',
1533
+						'event_espresso'
1534
+					),
1535
+					'<br />',
1536
+					$wpdb->last_error
1537
+				);
1538
+			} else {
1539
+				$error = esc_html__(
1540
+					'Registration check in update failed because of an unknown database error',
1541
+					'event_espresso'
1542
+				);
1543
+			}
1544
+			EE_Error::add_error($error, __FILE__, __FUNCTION__, __LINE__);
1545
+			return false;
1546
+		}
1547
+		return $status_to;
1548
+	}
1549
+
1550
+
1551
+	/**
1552
+	 * Returns the latest datetime related to this registration (via the ticket attached to the registration).
1553
+	 * "Latest" is defined by the `DTT_EVT_start` column.
1554
+	 *
1555
+	 * @return EE_Datetime|null
1556
+	 * @throws EE_Error
1557
+	 */
1558
+	public function get_latest_related_datetime()
1559
+	{
1560
+		return EEM_Datetime::instance()->get_one(
1561
+			array(
1562
+				array(
1563
+					'Ticket.Registration.REG_ID' => $this->ID(),
1564
+				),
1565
+				'order_by' => array('DTT_EVT_start' => 'DESC'),
1566
+			)
1567
+		);
1568
+	}
1569
+
1570
+
1571
+	/**
1572
+	 * Returns the earliest datetime related to this registration (via the ticket attached to the registration).
1573
+	 * "Earliest" is defined by the `DTT_EVT_start` column.
1574
+	 *
1575
+	 * @throws EE_Error
1576
+	 */
1577
+	public function get_earliest_related_datetime()
1578
+	{
1579
+		return EEM_Datetime::instance()->get_one(
1580
+			array(
1581
+				array(
1582
+					'Ticket.Registration.REG_ID' => $this->ID(),
1583
+				),
1584
+				'order_by' => array('DTT_EVT_start' => 'ASC'),
1585
+			)
1586
+		);
1587
+	}
1588
+
1589
+
1590
+	/**
1591
+	 * This method simply returns the check-in status for this registration and the given datetime.
1592
+	 * If neither the datetime nor the checkin values are provided as arguments,
1593
+	 * then this will return the LATEST check-in status for the registration across all datetimes it belongs to.
1594
+	 *
1595
+	 * @param  int       $DTT_ID  The ID of the datetime we're checking against
1596
+	 *                            (if empty we'll get the primary datetime for
1597
+	 *                            this registration (via event) and use it's ID);
1598
+	 * @param EE_Checkin $checkin If present, we use the given checkin object rather than the dtt_id.
1599
+	 *
1600
+	 * @return int                Integer representing Check-in status.
1601
+	 * @throws EE_Error
1602
+	 */
1603
+	public function check_in_status_for_datetime($DTT_ID = 0, $checkin = null)
1604
+	{
1605
+		$checkin_query_params = array(
1606
+			'order_by' => array('CHK_timestamp' => 'DESC'),
1607
+		);
1608
+
1609
+		if ($DTT_ID > 0) {
1610
+			$checkin_query_params[0] = array('DTT_ID' => $DTT_ID);
1611
+		}
1612
+
1613
+		//get checkin object (if exists)
1614
+		$checkin = $checkin instanceof EE_Checkin
1615
+			? $checkin
1616
+			: $this->get_first_related('Checkin', $checkin_query_params);
1617
+		if ($checkin instanceof EE_Checkin) {
1618
+			if ($checkin->get('CHK_in')) {
1619
+				return EE_Checkin::status_checked_in; //checked in
1620
+			}
1621
+			return EE_Checkin::status_checked_out; //had checked in but is now checked out.
1622
+		}
1623
+		return EE_Checkin::status_checked_never; //never been checked in
1624
+	}
1625
+
1626
+
1627
+	/**
1628
+	 * This method returns a localized message for the toggled Check-in message.
1629
+	 *
1630
+	 * @param  int $DTT_ID include specific datetime to get the correct Check-in message.  If not included or null,
1631
+	 *                     then it is assumed Check-in for primary datetime was toggled.
1632
+	 * @param bool $error  This just flags that you want an error message returned. This is put in so that the error
1633
+	 *                     message can be customized with the attendee name.
1634
+	 * @return string internationalized message
1635
+	 * @throws EE_Error
1636
+	 */
1637
+	public function get_checkin_msg($DTT_ID, $error = false)
1638
+	{
1639
+		//let's get the attendee first so we can include the name of the attendee
1640
+		$attendee = $this->get_first_related('Attendee');
1641
+		if ($attendee instanceof EE_Attendee) {
1642
+			if ($error) {
1643
+				return sprintf(__("%s's check-in status was not changed.", "event_espresso"), $attendee->full_name());
1644
+			}
1645
+			$cur_status = $this->check_in_status_for_datetime($DTT_ID);
1646
+			//what is the status message going to be?
1647
+			switch ($cur_status) {
1648
+				case EE_Checkin::status_checked_never:
1649
+					return sprintf(__("%s has been removed from Check-in records", "event_espresso"),
1650
+						$attendee->full_name());
1651
+					break;
1652
+				case EE_Checkin::status_checked_in:
1653
+					return sprintf(__('%s has been checked in', 'event_espresso'), $attendee->full_name());
1654
+					break;
1655
+				case EE_Checkin::status_checked_out:
1656
+					return sprintf(__('%s has been checked out', 'event_espresso'), $attendee->full_name());
1657
+					break;
1658
+			}
1659
+		}
1660
+		return esc_html__("The check-in status could not be determined.", "event_espresso");
1661
+	}
1662
+
1663
+
1664
+	/**
1665
+	 * Returns the related EE_Transaction to this registration
1666
+	 *
1667
+	 * @return EE_Transaction
1668
+	 * @throws EE_Error
1669
+	 * @throws EntityNotFoundException
1670
+	 */
1671
+	public function transaction()
1672
+	{
1673
+		$transaction = $this->get_first_related('Transaction');
1674
+		if (! $transaction instanceof \EE_Transaction) {
1675
+			throw new EntityNotFoundException('Transaction ID', $this->transaction_ID());
1676
+		}
1677
+		return $transaction;
1678
+	}
1679
+
1680
+
1681
+	/**
1682
+	 *        get Registration Code
1683
+	 */
1684
+	public function reg_code()
1685
+	{
1686
+		return $this->get('REG_code');
1687
+	}
1688
+
1689
+
1690
+	/**
1691
+	 *        get Transaction ID
1692
+	 */
1693
+	public function transaction_ID()
1694
+	{
1695
+		return $this->get('TXN_ID');
1696
+	}
1697
+
1698
+
1699
+	/**
1700
+	 * @return int
1701
+	 * @throws EE_Error
1702
+	 */
1703
+	public function ticket_ID()
1704
+	{
1705
+		return $this->get('TKT_ID');
1706
+	}
1707
+
1708
+
1709
+	/**
1710
+	 *        Set Registration Code
1711
+	 *
1712
+	 * @access    public
1713
+	 * @param    string  $REG_code Registration Code
1714
+	 * @param    boolean $use_default
1715
+	 * @throws EE_Error
1716
+	 */
1717
+	public function set_reg_code($REG_code, $use_default = false)
1718
+	{
1719
+		if (empty($REG_code)) {
1720
+			EE_Error::add_error(
1721
+				esc_html__('REG_code can not be empty.', 'event_espresso'),
1722
+				__FILE__,
1723
+				__FUNCTION__,
1724
+				__LINE__
1725
+			);
1726
+			return;
1727
+		}
1728
+		if (! $this->reg_code()) {
1729
+			parent::set('REG_code', $REG_code, $use_default);
1730
+		} else {
1731
+			EE_Error::doing_it_wrong(
1732
+				__CLASS__ . '::' . __FUNCTION__,
1733
+				esc_html__('Can not change a registration REG_code once it has been set.', 'event_espresso'),
1734
+				'4.6.0'
1735
+			);
1736
+		}
1737
+	}
1738
+
1739
+
1740
+	/**
1741
+	 * Returns all other registrations in the same group as this registrant who have the same ticket option.
1742
+	 * Note, if you want to just get all registrations in the same transaction (group), use:
1743
+	 *    $registration->transaction()->registrations();
1744
+	 *
1745
+	 * @since 4.5.0
1746
+	 * @return EE_Registration[] or empty array if this isn't a group registration.
1747
+	 * @throws EE_Error
1748
+	 */
1749
+	public function get_all_other_registrations_in_group()
1750
+	{
1751
+		if ($this->group_size() < 2) {
1752
+			return array();
1753
+		}
1754
+
1755
+		$query[0] = array(
1756
+			'TXN_ID' => $this->transaction_ID(),
1757
+			'REG_ID' => array('!=', $this->ID()),
1758
+			'TKT_ID' => $this->ticket_ID(),
1759
+		);
1760
+		/** @var EE_Registration[] $registrations */
1761
+		$registrations = $this->get_model()->get_all($query);
1762
+		return $registrations;
1763
+	}
1764
+
1765
+	/**
1766
+	 * Return the link to the admin details for the object.
1767
+	 *
1768
+	 * @return string
1769
+	 * @throws EE_Error
1770
+	 */
1771
+	public function get_admin_details_link()
1772
+	{
1773
+		EE_Registry::instance()->load_helper('URL');
1774
+		return EEH_URL::add_query_args_and_nonce(
1775
+			array(
1776
+				'page'    => 'espresso_registrations',
1777
+				'action'  => 'view_registration',
1778
+				'_REG_ID' => $this->ID(),
1779
+			),
1780
+			admin_url('admin.php')
1781
+		);
1782
+	}
1783
+
1784
+	/**
1785
+	 * Returns the link to the editor for the object.  Sometimes this is the same as the details.
1786
+	 *
1787
+	 * @return string
1788
+	 * @throws EE_Error
1789
+	 */
1790
+	public function get_admin_edit_link()
1791
+	{
1792
+		return $this->get_admin_details_link();
1793
+	}
1794
+
1795
+	/**
1796
+	 * Returns the link to a settings page for the object.
1797
+	 *
1798
+	 * @return string
1799
+	 * @throws EE_Error
1800
+	 */
1801
+	public function get_admin_settings_link()
1802
+	{
1803
+		return $this->get_admin_details_link();
1804
+	}
1805
+
1806
+	/**
1807
+	 * Returns the link to the "overview" for the object (typically the "list table" view).
1808
+	 *
1809
+	 * @return string
1810
+	 */
1811
+	public function get_admin_overview_link()
1812
+	{
1813
+		EE_Registry::instance()->load_helper('URL');
1814
+		return EEH_URL::add_query_args_and_nonce(
1815
+			array(
1816
+				'page' => 'espresso_registrations',
1817
+			),
1818
+			admin_url('admin.php')
1819
+		);
1820
+	}
1821
+
1822
+
1823
+	/**
1824
+	 * @param array $query_params
1825
+	 *
1826
+	 * @return \EE_Registration[]
1827
+	 * @throws EE_Error
1828
+	 */
1829
+	public function payments($query_params = array())
1830
+	{
1831
+		return $this->get_many_related('Payment', $query_params);
1832
+	}
1833
+
1834
+
1835
+	/**
1836
+	 * @param array $query_params
1837
+	 *
1838
+	 * @return \EE_Registration_Payment[]
1839
+	 * @throws EE_Error
1840
+	 */
1841
+	public function registration_payments($query_params = array())
1842
+	{
1843
+		return $this->get_many_related('Registration_Payment', $query_params);
1844
+	}
1845
+
1846
+
1847
+	/**
1848
+	 * This grabs the payment method corresponding to the last payment made for the amount owing on the registration.
1849
+	 * Note: if there are no payments on the registration there will be no payment method returned.
1850
+	 *
1851
+	 * @return EE_Payment_Method|null
1852
+	 */
1853
+	public function payment_method()
1854
+	{
1855
+		return EEM_Payment_Method::instance()->get_last_used_for_registration($this);
1856
+	}
1857
+
1858
+
1859
+	/**
1860
+	 * @return \EE_Line_Item
1861
+	 * @throws EntityNotFoundException
1862
+	 * @throws EE_Error
1863
+	 */
1864
+	public function ticket_line_item()
1865
+	{
1866
+		$ticket            = $this->ticket();
1867
+		$transaction       = $this->transaction();
1868
+		$line_item         = null;
1869
+		$ticket_line_items = \EEH_Line_Item::get_line_items_by_object_type_and_IDs(
1870
+			$transaction->total_line_item(),
1871
+			'Ticket',
1872
+			array($ticket->ID())
1873
+		);
1874
+		foreach ($ticket_line_items as $ticket_line_item) {
1875
+			if (
1876
+				$ticket_line_item instanceof \EE_Line_Item
1877
+				&& $ticket_line_item->OBJ_type() === 'Ticket'
1878
+				&& $ticket_line_item->OBJ_ID() === $ticket->ID()
1879
+			) {
1880
+				$line_item = $ticket_line_item;
1881
+				break;
1882
+			}
1883
+		}
1884
+		if (! ($line_item instanceof \EE_Line_Item && $line_item->OBJ_type() === 'Ticket')) {
1885
+			throw new EntityNotFoundException('Line Item Ticket ID', $ticket->ID());
1886
+		}
1887
+		return $line_item;
1888
+	}
1889
+
1890
+
1891
+	/**
1892
+	 * Soft Deletes this model object.
1893
+	 *
1894
+	 * @return boolean | int
1895
+	 * @throws RuntimeException
1896
+	 * @throws EE_Error
1897
+	 */
1898
+	public function delete()
1899
+	{
1900
+		if ($this->update_extra_meta(EE_Registration::PRE_TRASH_REG_STATUS_KEY, $this->status_ID()) === true) {
1901
+			$this->set_status(EEM_Registration::status_id_cancelled);
1902
+		}
1903
+		return parent::delete();
1904
+	}
1905
+
1906
+
1907
+	/**
1908
+	 * Restores whatever the previous status was on a registration before it was trashed (if possible)
1909
+	 *
1910
+	 * @throws EE_Error
1911
+	 * @throws RuntimeException
1912
+	 */
1913
+	public function restore()
1914
+	{
1915
+		$previous_status = $this->get_extra_meta(
1916
+			EE_Registration::PRE_TRASH_REG_STATUS_KEY,
1917
+			true,
1918
+			EEM_Registration::status_id_cancelled
1919
+		);
1920
+		if ($previous_status) {
1921
+			$this->delete_extra_meta(EE_Registration::PRE_TRASH_REG_STATUS_KEY);
1922
+			$this->set_status($previous_status);
1923
+		}
1924
+		return parent::restore();
1925
+	}
1926
+
1927
+
1928
+	/**
1929
+	 * possibly toggle Registration status based on comparison of REG_paid vs REG_final_price
1930
+	 *
1931
+	 * @param  boolean $trigger_set_status_logic EE_Registration::set_status() can trigger additional logic
1932
+	 *                                           depending on whether the reg status changes to or from "Approved"
1933
+	 * @return boolean whether the Registration status was updated
1934
+	 * @throws EE_Error
1935
+	 * @throws RuntimeException
1936
+	 */
1937
+	public function updateStatusBasedOnTotalPaid($trigger_set_status_logic = true)
1938
+	{
1939
+		$paid = $this->paid();
1940
+		$price = $this->final_price();
1941
+		switch(true) {
1942
+			// overpaid or paid
1943
+			case EEH_Money::compare_floats($paid, $price, '>'):
1944
+			case EEH_Money::compare_floats($paid, $price):
1945
+				$new_status = EEM_Registration::status_id_approved;
1946
+				break;
1947
+			//  underpaid
1948
+			case EEH_Money::compare_floats($paid, $price, '<'):
1949
+				$new_status = EEM_Registration::status_id_pending_payment;
1950
+				break;
1951
+			// uhhh Houston...
1952
+			default:
1953
+				throw new RuntimeException(
1954
+					esc_html__('The total paid calculation for this registration is inaccurate.', 'event_espresso')
1955
+				);
1956
+		}
1957
+		if ($new_status !== $this->status_ID()) {
1958
+			if ($trigger_set_status_logic) {
1959
+				return $this->set_status($new_status);
1960
+			}
1961
+			parent::set('STS_ID', $new_status);
1962
+			return true;
1963
+		}
1964
+		return false;
1965
+	}
1966
+
1967
+
1968
+	/*************************** DEPRECATED ***************************/
1969
+
1970
+
1971
+	/**
1972
+	 * @deprecated
1973
+	 * @since     4.7.0
1974
+	 * @access    public
1975
+	 */
1976
+	public function price_paid()
1977
+	{
1978
+		EE_Error::doing_it_wrong('EE_Registration::price_paid()',
1979
+			esc_html__('This method is deprecated, please use EE_Registration::final_price() instead.', 'event_espresso'),
1980
+			'4.7.0');
1981
+		return $this->final_price();
1982
+	}
1983
+
1984
+
1985
+	/**
1986
+	 * @deprecated
1987
+	 * @since     4.7.0
1988
+	 * @access    public
1989
+	 * @param    float $REG_final_price
1990
+	 * @throws EE_Error
1991
+	 * @throws RuntimeException
1992
+	 */
1993
+	public function set_price_paid($REG_final_price = 0.00)
1994
+	{
1995
+		EE_Error::doing_it_wrong('EE_Registration::set_price_paid()',
1996
+			esc_html__('This method is deprecated, please use EE_Registration::set_final_price() instead.', 'event_espresso'),
1997
+			'4.7.0');
1998
+		$this->set_final_price($REG_final_price);
1999
+	}
2000
+
2001
+
2002
+	/**
2003
+	 * @deprecated
2004
+	 * @since 4.7.0
2005
+	 * @return string
2006
+	 * @throws EE_Error
2007
+	 */
2008
+	public function pretty_price_paid()
2009
+	{
2010
+		EE_Error::doing_it_wrong('EE_Registration::pretty_price_paid()',
2011
+			esc_html__('This method is deprecated, please use EE_Registration::pretty_final_price() instead.',
2012
+				'event_espresso'), '4.7.0');
2013
+		return $this->pretty_final_price();
2014
+	}
2015
+
2016
+
2017
+	/**
2018
+	 * Gets the primary datetime related to this registration via the related Event to this registration
2019
+	 *
2020
+	 * @deprecated 4.9.17
2021
+	 * @return EE_Datetime
2022
+	 * @throws EE_Error
2023
+	 * @throws EntityNotFoundException
2024
+	 */
2025
+	public function get_related_primary_datetime()
2026
+	{
2027
+		EE_Error::doing_it_wrong(
2028
+			__METHOD__,
2029
+			esc_html__(
2030
+				'Use EE_Registration::get_latest_related_datetime() or EE_Registration::get_earliest_related_datetime()',
2031
+				'event_espresso'
2032
+			),
2033
+			'4.9.17',
2034
+			'5.0.0'
2035
+		);
2036
+		return $this->event()->primary_datetime();
2037
+	}
2038 2038
 
2039 2039
 
2040 2040
 }
Please login to merge, or discard this patch.
Spacing   +17 added lines, -17 removed lines patch added patch discarded remove patch
@@ -120,7 +120,7 @@  discard block
 block discarded – undo
120 120
     {
121 121
         switch ($field_name) {
122 122
             case 'REG_code':
123
-                if (! empty($field_value) && $this->reg_code() === null) {
123
+                if ( ! empty($field_value) && $this->reg_code() === null) {
124 124
                     $this->set_reg_code($field_value, $use_default);
125 125
                 }
126 126
                 break;
@@ -181,7 +181,7 @@  discard block
 block discarded – undo
181 181
             // update status
182 182
             parent::set('STS_ID', $new_STS_ID, $use_default);
183 183
             $this->_update_if_canceled_or_declined($new_STS_ID, $old_STS_ID, $context);
184
-            if($this->statusChangeUpdatesTransaction($context)) {
184
+            if ($this->statusChangeUpdatesTransaction($context)) {
185 185
                 $this->updateTransactionAfterStatusChange();
186 186
             }
187 187
             do_action('AHEE__EE_Registration__set_status__after_update', $this, $old_STS_ID, $new_STS_ID, $context);
@@ -372,7 +372,7 @@  discard block
 block discarded – undo
372 372
     {
373 373
         // reserved ticket and datetime counts will be decremented as sold counts are incremented
374 374
         // so stop tracking that this reg has a ticket reserved
375
-        $this->release_reserved_ticket(false, "REG: {$this->ID()} (ln:". __LINE__ . ')');
375
+        $this->release_reserved_ticket(false, "REG: {$this->ID()} (ln:".__LINE__.')');
376 376
         $ticket = $this->ticket();
377 377
         $ticket->increase_sold();
378 378
         $ticket->save();
@@ -409,7 +409,7 @@  discard block
 block discarded – undo
409 409
     public function event()
410 410
     {
411 411
         $event = $this->get_first_related('Event');
412
-        if (! $event instanceof \EE_Event) {
412
+        if ( ! $event instanceof \EE_Event) {
413 413
             throw new EntityNotFoundException('Event ID', $this->event_ID());
414 414
         }
415 415
         return $event;
@@ -474,7 +474,7 @@  discard block
 block discarded – undo
474 474
                 && $update_ticket
475 475
             ) {
476 476
                 $ticket = $this->ticket();
477
-                $ticket->increase_reserved(1, "REG: {$this->ID()} (ln:" . __LINE__ . ')');
477
+                $ticket->increase_reserved(1, "REG: {$this->ID()} (ln:".__LINE__.')');
478 478
                 $ticket->save();
479 479
             }
480 480
         }
@@ -506,7 +506,7 @@  discard block
 block discarded – undo
506 506
                 && $update_ticket
507 507
             ) {
508 508
                 $ticket = $this->ticket();
509
-                $ticket->decrease_reserved(1, true, "REG: {$this->ID()} (ln:" . __LINE__ . ')');
509
+                $ticket->decrease_reserved(1, true, "REG: {$this->ID()} (ln:".__LINE__.')');
510 510
                 $ticket->save();
511 511
             }
512 512
         }
@@ -1138,7 +1138,7 @@  discard block
 block discarded – undo
1138 1138
             false,
1139 1139
             'sentence'
1140 1140
         );
1141
-        $icon   = '';
1141
+        $icon = '';
1142 1142
         switch ($this->status_ID()) {
1143 1143
             case EEM_Registration::status_id_approved:
1144 1144
                 $icon = $show_icons
@@ -1176,7 +1176,7 @@  discard block
 block discarded – undo
1176 1176
                     : '';
1177 1177
                 break;
1178 1178
         }
1179
-        return $icon . $status[$this->status_ID()];
1179
+        return $icon.$status[$this->status_ID()];
1180 1180
     }
1181 1181
 
1182 1182
 
@@ -1394,7 +1394,7 @@  discard block
 block discarded – undo
1394 1394
             return false;
1395 1395
         }
1396 1396
         //is there a datetime ticket that matches this dtt_ID?
1397
-        if (! (EEM_Datetime_Ticket::instance()->exists(array(
1397
+        if ( ! (EEM_Datetime_Ticket::instance()->exists(array(
1398 1398
             array(
1399 1399
                 'TKT_ID' => $this->get('TKT_ID'),
1400 1400
                 'DTT_ID' => $DTT_ID,
@@ -1423,7 +1423,7 @@  discard block
 block discarded – undo
1423 1423
     {
1424 1424
         $DTT_ID = EEM_Datetime::instance()->ensure_is_ID($DTT_OR_ID);
1425 1425
 
1426
-        if (! $DTT_ID) {
1426
+        if ( ! $DTT_ID) {
1427 1427
             return false;
1428 1428
         }
1429 1429
 
@@ -1431,7 +1431,7 @@  discard block
 block discarded – undo
1431 1431
 
1432 1432
         // if max uses is not set or equals infinity then return true cause its not a factor for whether user can
1433 1433
         // check-in or not.
1434
-        if (! $max_uses || $max_uses === EE_INF) {
1434
+        if ( ! $max_uses || $max_uses === EE_INF) {
1435 1435
             return true;
1436 1436
         }
1437 1437
 
@@ -1487,7 +1487,7 @@  discard block
 block discarded – undo
1487 1487
             $datetime = $this->get_latest_related_datetime();
1488 1488
             $DTT_ID   = $datetime instanceof EE_Datetime ? $datetime->ID() : 0;
1489 1489
             // verify the registration can checkin for the given DTT_ID
1490
-        } elseif (! $this->can_checkin($DTT_ID, $verify)) {
1490
+        } elseif ( ! $this->can_checkin($DTT_ID, $verify)) {
1491 1491
             EE_Error::add_error(
1492 1492
                 sprintf(
1493 1493
                     esc_html__(
@@ -1671,7 +1671,7 @@  discard block
 block discarded – undo
1671 1671
     public function transaction()
1672 1672
     {
1673 1673
         $transaction = $this->get_first_related('Transaction');
1674
-        if (! $transaction instanceof \EE_Transaction) {
1674
+        if ( ! $transaction instanceof \EE_Transaction) {
1675 1675
             throw new EntityNotFoundException('Transaction ID', $this->transaction_ID());
1676 1676
         }
1677 1677
         return $transaction;
@@ -1725,11 +1725,11 @@  discard block
 block discarded – undo
1725 1725
             );
1726 1726
             return;
1727 1727
         }
1728
-        if (! $this->reg_code()) {
1728
+        if ( ! $this->reg_code()) {
1729 1729
             parent::set('REG_code', $REG_code, $use_default);
1730 1730
         } else {
1731 1731
             EE_Error::doing_it_wrong(
1732
-                __CLASS__ . '::' . __FUNCTION__,
1732
+                __CLASS__.'::'.__FUNCTION__,
1733 1733
                 esc_html__('Can not change a registration REG_code once it has been set.', 'event_espresso'),
1734 1734
                 '4.6.0'
1735 1735
             );
@@ -1881,7 +1881,7 @@  discard block
 block discarded – undo
1881 1881
                 break;
1882 1882
             }
1883 1883
         }
1884
-        if (! ($line_item instanceof \EE_Line_Item && $line_item->OBJ_type() === 'Ticket')) {
1884
+        if ( ! ($line_item instanceof \EE_Line_Item && $line_item->OBJ_type() === 'Ticket')) {
1885 1885
             throw new EntityNotFoundException('Line Item Ticket ID', $ticket->ID());
1886 1886
         }
1887 1887
         return $line_item;
@@ -1938,7 +1938,7 @@  discard block
 block discarded – undo
1938 1938
     {
1939 1939
         $paid = $this->paid();
1940 1940
         $price = $this->final_price();
1941
-        switch(true) {
1941
+        switch (true) {
1942 1942
             // overpaid or paid
1943 1943
             case EEH_Money::compare_floats($paid, $price, '>'):
1944 1944
             case EEH_Money::compare_floats($paid, $price):
Please login to merge, or discard this patch.
core/libraries/messages/EE_messenger.lib.php 2 patches
Indentation   +9 added lines, -9 removed lines patch added patch discarded remove patch
@@ -647,15 +647,15 @@
 block discarded – undo
647 647
 
648 648
 		if ( $send ) {
649 649
 			//are we overriding any existing template fields?
650
-            $settings = apply_filters(
651
-                'FHEE__EE_messenger__get_preview__messenger_test_settings',
652
-                $this->get_existing_test_settings(),
653
-                $this,
654
-                $send,
655
-                $message,
656
-                $message_type
657
-            );
658
-            if ( ! empty( $settings ) ) {
650
+			$settings = apply_filters(
651
+				'FHEE__EE_messenger__get_preview__messenger_test_settings',
652
+				$this->get_existing_test_settings(),
653
+				$this,
654
+				$send,
655
+				$message,
656
+				$message_type
657
+			);
658
+			if ( ! empty( $settings ) ) {
659 659
 				foreach ( $settings as $field => $value ) {
660 660
 					$this->_set_template_value( $field, $value );
661 661
 				}
Please login to merge, or discard this patch.
Spacing   +101 added lines, -101 removed lines patch added patch discarded remove patch
@@ -1,7 +1,7 @@  discard block
 block discarded – undo
1 1
 <?php
2 2
 use \EventEspresso\core\exceptions\SendMessageException;
3 3
 
4
-if (!defined('EVENT_ESPRESSO_VERSION') )
4
+if ( ! defined('EVENT_ESPRESSO_VERSION'))
5 5
 	exit('NO direct script access allowed');
6 6
 
7 7
 /**
@@ -279,7 +279,7 @@  discard block
 block discarded – undo
279 279
 	 * @return void
280 280
 	 */
281 281
 	public function enqueue_scripts_styles() {
282
-		do_action( 'AHEE__EE_messenger__enqueue_scripts_styles');
282
+		do_action('AHEE__EE_messenger__enqueue_scripts_styles');
283 283
 	}
284 284
 
285 285
 
@@ -349,7 +349,7 @@  discard block
 block discarded – undo
349 349
 
350 350
 		$this->_supports_labels->template_variation_description = __('These are different styles to choose from for the selected template structure.  Usually these affect things like font style, color, borders etc.  In some cases the styles will also make minor layout changes.');
351 351
 
352
-		$this->_supports_labels = apply_filters( 'FHEE__EE_messenger___set_supports_labels_defaults___supports_labels', $this->_supports_labels, $this );
352
+		$this->_supports_labels = apply_filters('FHEE__EE_messenger___set_supports_labels_defaults___supports_labels', $this->_supports_labels, $this);
353 353
 	}
354 354
 
355 355
 
@@ -364,10 +364,10 @@  discard block
 block discarded – undo
364 364
 	 * @return stdClass
365 365
 	 */
366 366
 	public function get_supports_labels() {
367
-		if ( empty( $this->_supports_labels->template_pack ) || empty( $this->_supports_labels->template_variation) ) {
367
+		if (empty($this->_supports_labels->template_pack) || empty($this->_supports_labels->template_variation)) {
368 368
 			$this->_set_supports_labels_defaults();
369 369
 		}
370
-		return apply_filters( 'FHEE__EE_messenger__get_supports_labels', $this->_supports_labels, $this );
370
+		return apply_filters('FHEE__EE_messenger__get_supports_labels', $this->_supports_labels, $this);
371 371
 	}
372 372
 
373 373
 
@@ -387,10 +387,10 @@  discard block
 block discarded – undo
387 387
 	 *
388 388
 	 * @return string                    path or url for the requested variation.
389 389
 	 */
390
-	public function get_variation( EE_Messages_Template_Pack $pack, $message_type_name, $url = FALSE, $type = 'main', $variation = 'default', $skip_filters = FALSE ) {
390
+	public function get_variation(EE_Messages_Template_Pack $pack, $message_type_name, $url = FALSE, $type = 'main', $variation = 'default', $skip_filters = FALSE) {
391 391
 		$this->_tmp_pack = $pack;
392
-		$variation_path = apply_filters( 'EE_messenger__get_variation__variation', false, $pack, $this->name, $message_type_name, $url, $type, $variation, $skip_filters );
393
-		$variation_path = empty( $variation_path ) ? $this->_tmp_pack->get_variation( $this->name, $message_type_name, $type, $variation, $url, '.css', $skip_filters ) : $variation_path;
392
+		$variation_path = apply_filters('EE_messenger__get_variation__variation', false, $pack, $this->name, $message_type_name, $url, $type, $variation, $skip_filters);
393
+		$variation_path = empty($variation_path) ? $this->_tmp_pack->get_variation($this->name, $message_type_name, $type, $variation, $url, '.css', $skip_filters) : $variation_path;
394 394
 		return $variation_path;
395 395
 
396 396
 	}
@@ -408,13 +408,13 @@  discard block
 block discarded – undo
408 408
 	 * @return array
409 409
 	 */
410 410
 	public function get_default_message_types() {
411
-		$class = get_class( $this );
411
+		$class = get_class($this);
412 412
 
413 413
 		//messenger specific filter
414
-		$default_types = apply_filters( 'FHEE__' . $class . '__get_default_message_types__default_types', $this->_default_message_types, $this );
414
+		$default_types = apply_filters('FHEE__'.$class.'__get_default_message_types__default_types', $this->_default_message_types, $this);
415 415
 
416 416
 		//all messengers filter
417
-		$default_types = apply_filters( 'FHEE__EE_messenger__get_default_message_types__default_types', $default_types, $this );
417
+		$default_types = apply_filters('FHEE__EE_messenger__get_default_message_types__default_types', $default_types, $this);
418 418
 		return $default_types;
419 419
 	}
420 420
 
@@ -429,14 +429,14 @@  discard block
 block discarded – undo
429 429
 	 * @return array
430 430
 	 */
431 431
 	public function get_valid_message_types() {
432
-		$class = get_class( $this );
432
+		$class = get_class($this);
433 433
 
434 434
 		//messenger specific filter
435 435
 		//messenger specific filter
436
-		$valid_types = apply_filters( 'FHEE__' . $class . '__get_valid_message_types__valid_types', $this->_valid_message_types, $this );
436
+		$valid_types = apply_filters('FHEE__'.$class.'__get_valid_message_types__valid_types', $this->_valid_message_types, $this);
437 437
 
438 438
 		//all messengers filter
439
-		$valid_types = apply_filters( 'FHEE__EE_messenger__get_valid_message_types__valid_types', $valid_types, $this );
439
+		$valid_types = apply_filters('FHEE__EE_messenger__get_valid_message_types__valid_types', $valid_types, $this);
440 440
 		return $valid_types;
441 441
 	}
442 442
 
@@ -450,7 +450,7 @@  discard block
 block discarded – undo
450 450
 	 * @access public
451 451
 	 * @param array $new_config Whatever is put in here will reset the _validator_config property
452 452
 	 */
453
-	public function set_validator_config( $new_config ) {
453
+	public function set_validator_config($new_config) {
454 454
 		$this->_validator_config = $new_config;
455 455
 	}
456 456
 
@@ -466,8 +466,8 @@  discard block
 block discarded – undo
466 466
 	public function get_validator_config() {
467 467
 		$class = get_class($this);
468 468
 
469
-		$config = apply_filters( 'FHEE__' . $class . '__get_validator_config', $this->_validator_config, $this );
470
-		$config = apply_filters( 'FHEE__EE_messenger__get_validator_config', $config, $this );
469
+		$config = apply_filters('FHEE__'.$class.'__get_validator_config', $this->_validator_config, $this);
470
+		$config = apply_filters('FHEE__EE_messenger__get_validator_config', $config, $this);
471 471
 		return $config;
472 472
 	}
473 473
 
@@ -484,8 +484,8 @@  discard block
 block discarded – undo
484 484
 	 * @access public
485 485
 	 * @return string content for page
486 486
 	 */
487
-	public function get_messenger_admin_page_content( $page, $action = null, $extra = array(), $message_types = array() ) {
488
-		return $this->_get_admin_page_content( $page, $action, $extra, $message_types );
487
+	public function get_messenger_admin_page_content($page, $action = null, $extra = array(), $message_types = array()) {
488
+		return $this->_get_admin_page_content($page, $action, $extra, $message_types);
489 489
 	}
490 490
 
491 491
 
@@ -495,20 +495,20 @@  discard block
 block discarded – undo
495 495
 	 * @param array $extra
496 496
 	 * @return mixed|string
497 497
 	 */
498
-	protected function _get_admin_content_events_edit( $message_types, $extra ) {
498
+	protected function _get_admin_content_events_edit($message_types, $extra) {
499 499
 		//defaults
500 500
 		$template_args = array();
501 501
 		$selector_rows = '';
502 502
 
503 503
 		//we don't need message types here so we're just going to ignore. we do, however, expect the event id here. The event id is needed to provide a link to setup a custom template for this event.
504
-		$event_id = isset( $extra['event'] ) ? $extra['event'] : NULL;
504
+		$event_id = isset($extra['event']) ? $extra['event'] : NULL;
505 505
 
506
-		$template_wrapper_path = EE_LIBRARIES . 'messages/messenger/admin_templates/event_switcher_wrapper.template.php';
507
-		$template_row_path = EE_LIBRARIES . 'messages/messenger/admin_templates/event_switcher_row.template.php';
506
+		$template_wrapper_path = EE_LIBRARIES.'messages/messenger/admin_templates/event_switcher_wrapper.template.php';
507
+		$template_row_path = EE_LIBRARIES.'messages/messenger/admin_templates/event_switcher_row.template.php';
508 508
 
509 509
 		//array of template objects for global and custom (non-trashed) (but remember just for this messenger!)
510 510
 		$global_templates = EEM_Message_Template_Group::instance()->get_all(
511
-			array( array( 'MTP_messenger' => $this->name, 'MTP_is_global' => true, 'MTP_is_active' => true ) )
511
+			array(array('MTP_messenger' => $this->name, 'MTP_is_global' => true, 'MTP_is_active' => true))
512 512
 		);
513 513
 		$templates_for_event = EEM_Message_Template_Group::instance()->get_all_custom_templates_by_event(
514 514
 			$event_id,
@@ -517,55 +517,55 @@  discard block
 block discarded – undo
517 517
 				'MTP_is_active' => true
518 518
 			)
519 519
 		);
520
-		$templates_for_event = !empty( $templates_for_event ) ? $templates_for_event : array();
520
+		$templates_for_event = ! empty($templates_for_event) ? $templates_for_event : array();
521 521
 
522 522
 		//so we need to setup the rows for the selectors and we use the global mtpgs (cause those will the active message template groups)
523
-		foreach ( $global_templates as $mtpgID => $mtpg ) {
524
-			if ( $mtpg instanceof EE_Message_Template_Group ) {
523
+		foreach ($global_templates as $mtpgID => $mtpg) {
524
+			if ($mtpg instanceof EE_Message_Template_Group) {
525 525
 				//verify this message type is supposed to show on this page
526 526
 				$mtp_obj = $mtpg->message_type_obj();
527
-				if ( ! $mtp_obj instanceof EE_message_type ) {
527
+				if ( ! $mtp_obj instanceof EE_message_type) {
528 528
 					continue;
529 529
 				}
530
-				$mtp_obj->admin_registered_pages = (array)$mtp_obj->admin_registered_pages;
531
-				if ( ! in_array( 'events_edit', $mtp_obj->admin_registered_pages ) ) {
530
+				$mtp_obj->admin_registered_pages = (array) $mtp_obj->admin_registered_pages;
531
+				if ( ! in_array('events_edit', $mtp_obj->admin_registered_pages)) {
532 532
 					continue;
533 533
 				}
534 534
 				$select_values = array();
535
-				$select_values[ $mtpgID ] = __( 'Global', 'event_espresso' );
536
-				$default_value = array_key_exists( $mtpgID, $templates_for_event ) && ! $mtpg->get( 'MTP_is_override' ) ? $mtpgID : null;
535
+				$select_values[$mtpgID] = __('Global', 'event_espresso');
536
+				$default_value = array_key_exists($mtpgID, $templates_for_event) && ! $mtpg->get('MTP_is_override') ? $mtpgID : null;
537 537
 				//if the override has been set for the global template, then that means even if there are custom templates already created we ignore them because of the set override.
538
-				if ( ! $mtpg->get( 'MTP_is_override' ) ) {
538
+				if ( ! $mtpg->get('MTP_is_override')) {
539 539
 					//any custom templates for this message type?
540
-					$custom_templates = EEM_Message_Template_Group::instance()->get_custom_message_template_by_m_and_mt( $this->name, $mtpg->message_type() );
541
-					foreach ( $custom_templates as $cmtpgID => $cmtpg ) {
542
-						$select_values[ $cmtpgID ] = $cmtpg->name();
543
-						$default_value = array_key_exists( $cmtpgID, $templates_for_event ) ? $cmtpgID : $default_value;
540
+					$custom_templates = EEM_Message_Template_Group::instance()->get_custom_message_template_by_m_and_mt($this->name, $mtpg->message_type());
541
+					foreach ($custom_templates as $cmtpgID => $cmtpg) {
542
+						$select_values[$cmtpgID] = $cmtpg->name();
543
+						$default_value = array_key_exists($cmtpgID, $templates_for_event) ? $cmtpgID : $default_value;
544 544
 					}
545 545
 				}
546 546
 				//if there is no $default_value then we set it as the global
547
-				$default_value = empty( $default_value ) ? $mtpgID : $default_value;
548
-				$edit_url = EEH_URL::add_query_args_and_nonce( array( 'page' => 'espresso_messages', 'action' => 'edit_message_template', 'id' => $default_value ), admin_url( 'admin.php' ) );
549
-				$create_url = EEH_URL::add_query_args_and_nonce( array( 'page' => 'espresso_messages', 'action' => 'add_new_message_template', 'GRP_ID' => $default_value ), admin_url( 'admin.php' ) );
550
-				$st_args[ 'mt_name' ] = ucwords( $mtp_obj->label[ 'singular' ] );
551
-				$st_args[ 'mt_slug' ] = $mtpg->message_type();
552
-				$st_args[ 'messenger_slug' ] = $this->name;
553
-				$st_args[ 'selector' ] = EEH_Form_Fields::select_input( 'event_message_templates_relation[' . $mtpgID . ']', $select_values, $default_value, 'data-messenger="' . $this->name . '" data-messagetype="' . $mtpg->message_type() . '"', 'message-template-selector' );
547
+				$default_value = empty($default_value) ? $mtpgID : $default_value;
548
+				$edit_url = EEH_URL::add_query_args_and_nonce(array('page' => 'espresso_messages', 'action' => 'edit_message_template', 'id' => $default_value), admin_url('admin.php'));
549
+				$create_url = EEH_URL::add_query_args_and_nonce(array('page' => 'espresso_messages', 'action' => 'add_new_message_template', 'GRP_ID' => $default_value), admin_url('admin.php'));
550
+				$st_args['mt_name'] = ucwords($mtp_obj->label['singular']);
551
+				$st_args['mt_slug'] = $mtpg->message_type();
552
+				$st_args['messenger_slug'] = $this->name;
553
+				$st_args['selector'] = EEH_Form_Fields::select_input('event_message_templates_relation['.$mtpgID.']', $select_values, $default_value, 'data-messenger="'.$this->name.'" data-messagetype="'.$mtpg->message_type().'"', 'message-template-selector');
554 554
 				//note that  message template group that has override_all_custom set will remove the ability to set a custom message template based off of the global (and that also in turn overrides any other custom templates).
555
-				$st_args[ 'create_button' ] = $mtpg->get( 'MTP_is_override' ) ? '' : '<a data-messenger="' . $this->name . '" data-messagetype="' . $mtpg->message_type() . '" data-grpid="' . $default_value . '" target="_blank" href="' . $create_url . '" class="button button-small create-mtpg-button">' . __( 'Create New Custom', 'event_espresso' ) . '</a>';
556
-				$st_args[ 'create_button' ] = EE_Registry::instance()->CAP->current_user_can( 'ee_edit_messages', 'espresso_messages_add_new_message_template' ) ? $st_args[ 'create_button' ] : '';
557
-				$st_args[ 'edit_button' ] = EE_Registry::instance()->CAP->current_user_can( 'ee_edit_message', 'espresso_messages_edit_message_template', $mtpgID ) ? '<a data-messagetype="' . $mtpg->message_type() . '" data-grpid="' . $default_value . '" target="_blank" href="' . $edit_url . '" class="button button-small edit-mtpg-button">' . __( 'Edit', 'event_espresso' ) . '</a>' : '';
558
-				$selector_rows .= EEH_Template::display_template( $template_row_path, $st_args, true );
555
+				$st_args['create_button'] = $mtpg->get('MTP_is_override') ? '' : '<a data-messenger="'.$this->name.'" data-messagetype="'.$mtpg->message_type().'" data-grpid="'.$default_value.'" target="_blank" href="'.$create_url.'" class="button button-small create-mtpg-button">'.__('Create New Custom', 'event_espresso').'</a>';
556
+				$st_args['create_button'] = EE_Registry::instance()->CAP->current_user_can('ee_edit_messages', 'espresso_messages_add_new_message_template') ? $st_args['create_button'] : '';
557
+				$st_args['edit_button'] = EE_Registry::instance()->CAP->current_user_can('ee_edit_message', 'espresso_messages_edit_message_template', $mtpgID) ? '<a data-messagetype="'.$mtpg->message_type().'" data-grpid="'.$default_value.'" target="_blank" href="'.$edit_url.'" class="button button-small edit-mtpg-button">'.__('Edit', 'event_espresso').'</a>' : '';
558
+				$selector_rows .= EEH_Template::display_template($template_row_path, $st_args, true);
559 559
 			}
560 560
 		}
561 561
 
562 562
 		//if no selectors present then get out.
563
-		if ( empty( $selector_rows ) ) {
563
+		if (empty($selector_rows)) {
564 564
 			return '';
565 565
 		}
566 566
 
567 567
 		$template_args['selector_rows'] = $selector_rows;
568
-		return EEH_Template::display_template( $template_wrapper_path, $template_args, TRUE );
568
+		return EEH_Template::display_template($template_wrapper_path, $template_args, TRUE);
569 569
 	}
570 570
 
571 571
 
@@ -580,8 +580,8 @@  discard block
 block discarded – undo
580 580
 	 * @return array $this->_template_fields
581 581
 	 */
582 582
 	public function get_template_fields() {
583
-		$template_fields = apply_filters( 'FHEE__' . get_class($this) . '__get_template_fields', $this->_template_fields, $this );
584
-		$template_fields = apply_filters( 'FHEE__EE_messenger__get_template_fields', $template_fields, $this );
583
+		$template_fields = apply_filters('FHEE__'.get_class($this).'__get_template_fields', $this->_template_fields, $this);
584
+		$template_fields = apply_filters('FHEE__EE_messenger__get_template_fields', $template_fields, $this);
585 585
 		return $template_fields;
586 586
 	}
587 587
 
@@ -595,9 +595,9 @@  discard block
 block discarded – undo
595 595
 	 * @param mixed $value
596 596
 	 */
597 597
 	protected function _set_template_value($item, $value) {
598
-		if ( array_key_exists($item, $this->_template_fields) ) {
599
-			$prop = '_' . $item;
600
-			$this->{$prop}= $value;
598
+		if (array_key_exists($item, $this->_template_fields)) {
599
+			$prop = '_'.$item;
600
+			$this->{$prop} = $value;
601 601
 		}
602 602
 	}
603 603
 
@@ -615,18 +615,18 @@  discard block
 block discarded – undo
615 615
 	 *
616 616
 	 * @throws SendMessageException
617 617
 	 */
618
-	final public function send_message( $message, EE_message_type $message_type ) {
618
+	final public function send_message($message, EE_message_type $message_type) {
619 619
 		try {
620
-			$this->_validate_and_setup( $message );
620
+			$this->_validate_and_setup($message);
621 621
 			$this->_incoming_message_type = $message_type;
622 622
 			$response = $this->_send_message();
623
-			if ( $response instanceof WP_Error ) {
624
-				EE_Error::add_error( $response->get_error_message(), __FILE__, __FUNCTION__, __LINE__ );
623
+			if ($response instanceof WP_Error) {
624
+				EE_Error::add_error($response->get_error_message(), __FILE__, __FUNCTION__, __LINE__);
625 625
 				$response = false;
626 626
 			}
627
-		} catch ( \Exception $e ) {
627
+		} catch (\Exception $e) {
628 628
 			//convert to an instance of SendMessageException
629
-			throw new SendMessageException( $e->getMessage() );
629
+			throw new SendMessageException($e->getMessage());
630 630
 		}
631 631
 		return $response;
632 632
 	}
@@ -640,12 +640,12 @@  discard block
 block discarded – undo
640 640
 	 * @param  bool   $send    true we will actually use the _send method (for test sends). FALSE we just return preview
641 641
 	 * @return string          return the message html content
642 642
 	 */
643
-	public function get_preview( EE_Message $message, EE_message_type $message_type, $send = false ) {
644
-		$this->_validate_and_setup( $message );
643
+	public function get_preview(EE_Message $message, EE_message_type $message_type, $send = false) {
644
+		$this->_validate_and_setup($message);
645 645
 
646 646
 		$this->_incoming_message_type = $message_type;
647 647
 
648
-		if ( $send ) {
648
+		if ($send) {
649 649
 			//are we overriding any existing template fields?
650 650
             $settings = apply_filters(
651 651
                 'FHEE__EE_messenger__get_preview__messenger_test_settings',
@@ -655,20 +655,20 @@  discard block
 block discarded – undo
655 655
                 $message,
656 656
                 $message_type
657 657
             );
658
-            if ( ! empty( $settings ) ) {
659
-				foreach ( $settings as $field => $value ) {
660
-					$this->_set_template_value( $field, $value );
658
+            if ( ! empty($settings)) {
659
+				foreach ($settings as $field => $value) {
660
+					$this->_set_template_value($field, $value);
661 661
 				}
662 662
 			}
663 663
 		}
664 664
 
665 665
 		//enqueue preview js so that any links/buttons on the page are disabled.
666
-		if ( ! $send ) {
666
+		if ( ! $send) {
667 667
 			// the below may seem like duplication.  However, typically if a messenger enqueues scripts/styles,
668 668
 			// it deregisters all existing wp scripts and styles first.  So the second hook ensures our previewer still gets setup.
669
-			add_action( 'admin_enqueue_scripts', array( $this, 'add_preview_script' ), 10 );
670
-			add_action( 'wp_enqueue_scripts', array( $this, 'add_preview_script' ), 10 );
671
-			add_action( 'AHEE__EE_messenger__enqueue_scripts_styles', array( $this, 'add_preview_script' ), 10 );
669
+			add_action('admin_enqueue_scripts', array($this, 'add_preview_script'), 10);
670
+			add_action('wp_enqueue_scripts', array($this, 'add_preview_script'), 10);
671
+			add_action('AHEE__EE_messenger__enqueue_scripts_styles', array($this, 'add_preview_script'), 10);
672 672
 		}
673 673
 
674 674
 		return $send ? $this->_send_message() : $this->_preview();
@@ -686,10 +686,10 @@  discard block
 block discarded – undo
686 686
 	 */
687 687
 	public function add_preview_script() {
688 688
 		//error message
689
-		EE_Registry::$i18n_js_strings[ 'links_disabled' ] = __( 'All the links on this page have been disabled because this is a generated preview message for the purpose of ensuring layout, style, and content setup.  To test generated links, you must trigger an actual message notification.', 'event_espresso' );
690
-		wp_register_script( 'ee-messages-preview-js', EE_LIBRARIES_URL . 'messages/messenger/assets/js/ee-messages-preview.js', array( 'jquery' ), EVENT_ESPRESSO_VERSION, true );
691
-		wp_localize_script( 'ee-messages-preview-js', 'eei18n', EE_Registry::$i18n_js_strings );
692
-		wp_enqueue_script( 'ee-messages-preview-js' );
689
+		EE_Registry::$i18n_js_strings['links_disabled'] = __('All the links on this page have been disabled because this is a generated preview message for the purpose of ensuring layout, style, and content setup.  To test generated links, you must trigger an actual message notification.', 'event_espresso');
690
+		wp_register_script('ee-messages-preview-js', EE_LIBRARIES_URL.'messages/messenger/assets/js/ee-messages-preview.js', array('jquery'), EVENT_ESPRESSO_VERSION, true);
691
+		wp_localize_script('ee-messages-preview-js', 'eei18n', EE_Registry::$i18n_js_strings);
692
+		wp_enqueue_script('ee-messages-preview-js');
693 693
 	}
694 694
 
695 695
 
@@ -700,13 +700,13 @@  discard block
 block discarded – undo
700 700
 	 * @param  EE_Message $message
701 701
 	 * @throws EE_Error
702 702
 	 */
703
-	protected function _validate_and_setup( EE_Message $message ) {
703
+	protected function _validate_and_setup(EE_Message $message) {
704 704
 		$template_pack = $message->get_template_pack();
705 705
 		$variation = $message->get_template_pack_variation();
706 706
 
707 707
 		//verify we have the required template pack value on the $message object.
708
-		if ( ! $template_pack instanceof EE_Messages_Template_Pack ) {
709
-			throw new EE_Error( __('Incoming $message object must have an EE_Messages_Template_Pack object available.', 'event_espresso' ) );
708
+		if ( ! $template_pack instanceof EE_Messages_Template_Pack) {
709
+			throw new EE_Error(__('Incoming $message object must have an EE_Messages_Template_Pack object available.', 'event_espresso'));
710 710
 		}
711 711
 
712 712
 		$this->_tmp_pack = $template_pack;
@@ -715,11 +715,11 @@  discard block
 block discarded – undo
715 715
 
716 716
 		$template_fields = $this->get_template_fields();
717 717
 
718
-		foreach ( $template_fields as $template => $value ) {
719
-			if ( $template !== 'extra' ) {
720
-				$column_value = $message->get_field_or_extra_meta( 'MSG_' . $template );
718
+		foreach ($template_fields as $template => $value) {
719
+			if ($template !== 'extra') {
720
+				$column_value = $message->get_field_or_extra_meta('MSG_'.$template);
721 721
 				$message_template_value = $column_value ? $column_value : null;
722
-				$this->_set_template_value( $template, $message_template_value );
722
+				$this->_set_template_value($template, $message_template_value);
723 723
 			}
724 724
 		}
725 725
 	}
@@ -734,19 +734,19 @@  discard block
 block discarded – undo
734 734
 	 * @return string
735 735
 	 * @throws \EE_Error
736 736
 	 */
737
-	protected function _get_main_template( $preview = FALSE ) {
737
+	protected function _get_main_template($preview = FALSE) {
738 738
 		$type = $preview ? 'preview' : 'main';
739 739
 
740
-		$wrapper_template = $this->_tmp_pack->get_wrapper( $this->name, $type );
740
+		$wrapper_template = $this->_tmp_pack->get_wrapper($this->name, $type);
741 741
 
742 742
 		//check file exists and is readable
743
-		if ( !is_readable( $wrapper_template ) )
744
-			throw new EE_Error( sprintf( __('Unable to access the template file for the %s messenger main content wrapper.  The location being attempted is %s.', 'event_espresso' ), ucwords($this->label['singular']) , $wrapper_template ) );
743
+		if ( ! is_readable($wrapper_template))
744
+			throw new EE_Error(sprintf(__('Unable to access the template file for the %s messenger main content wrapper.  The location being attempted is %s.', 'event_espresso'), ucwords($this->label['singular']), $wrapper_template));
745 745
 
746 746
 		//add message type to template args
747 747
 		$this->_template_args['message_type'] = $this->_incoming_message_type;
748 748
 
749
-		return EEH_Template::display_template( $wrapper_template, $this->_template_args, TRUE );
749
+		return EEH_Template::display_template($wrapper_template, $this->_template_args, TRUE);
750 750
 	}
751 751
 
752 752
 
@@ -782,9 +782,9 @@  discard block
 block discarded – undo
782 782
 	 */
783 783
 	public function get_existing_test_settings() {
784 784
 		/** @var EE_Message_Resource_Manager $Message_Resource_Manager */
785
-		$Message_Resource_Manager = EE_Registry::instance()->load_lib( 'Message_Resource_Manager' );
785
+		$Message_Resource_Manager = EE_Registry::instance()->load_lib('Message_Resource_Manager');
786 786
 		$settings = $Message_Resource_Manager->get_active_messengers_option();
787
-		return isset( $settings[ $this->name ]['test_settings'] ) ? $settings[ $this->name ]['test_settings'] : array();
787
+		return isset($settings[$this->name]['test_settings']) ? $settings[$this->name]['test_settings'] : array();
788 788
 	}
789 789
 
790 790
 
@@ -796,12 +796,12 @@  discard block
 block discarded – undo
796 796
 	 * @param $settings
797 797
 	 * @return bool success/fail
798 798
 	 */
799
-	public function set_existing_test_settings( $settings ) {
799
+	public function set_existing_test_settings($settings) {
800 800
 		/** @var EE_Message_Resource_Manager $Message_Resource_Manager */
801
-		$Message_Resource_Manager = EE_Registry::instance()->load_lib( 'Message_Resource_Manager' );
801
+		$Message_Resource_Manager = EE_Registry::instance()->load_lib('Message_Resource_Manager');
802 802
 		$existing = $Message_Resource_Manager->get_active_messengers_option();
803
-		$existing[ $this->name ]['test_settings'] = $settings;
804
-		return $Message_Resource_Manager->update_active_messengers_option( $existing );
803
+		$existing[$this->name]['test_settings'] = $settings;
804
+		return $Message_Resource_Manager->update_active_messengers_option($existing);
805 805
 	}
806 806
 
807 807
 
@@ -814,21 +814,21 @@  discard block
 block discarded – undo
814 814
 	 * @param string $field The field to retrieve the label for
815 815
 	 * @return string        	  The label
816 816
 	 */
817
-	public function get_field_label( $field ) {
817
+	public function get_field_label($field) {
818 818
 		//first let's see if the field requests is in the top level array.
819
-		if ( isset( $this->_template_fields[$field] ) && !empty( $this->_template_fields[$field]['label'] ) )
819
+		if (isset($this->_template_fields[$field]) && ! empty($this->_template_fields[$field]['label']))
820 820
 			return $this->_template[$field]['label'];
821 821
 
822 822
 		//nope so let's look in the extra array to see if it's there HOWEVER if the field exists as a top level index in the extra array then we know the label is in the 'main' index.
823
-		if ( isset( $this->_template_fields['extra'] ) && !empty( $this->_template_fields['extra'][$field] ) && !empty( $this->_template_fields['extra'][$field]['main']['label'] )  )
823
+		if (isset($this->_template_fields['extra']) && ! empty($this->_template_fields['extra'][$field]) && ! empty($this->_template_fields['extra'][$field]['main']['label']))
824 824
 			return $this->_template_fields['extra'][$field]['main']['label'];
825 825
 
826 826
 		//now it's possible this field may just be existing in any of the extra array items.
827
-		if ( !empty( $this->_template_fields['extra'] ) && is_array( $this->_template_fields['extra'] ) ) {
828
-			foreach ( $this->_template_fields['extra'] as $main_field => $subfields ) {
829
-				if ( !is_array( $subfields ) )
827
+		if ( ! empty($this->_template_fields['extra']) && is_array($this->_template_fields['extra'])) {
828
+			foreach ($this->_template_fields['extra'] as $main_field => $subfields) {
829
+				if ( ! is_array($subfields))
830 830
 					continue;
831
-				if ( isset( $subfields[$field] ) && !empty( $subfields[$field]['label'] ) )
831
+				if (isset($subfields[$field]) && ! empty($subfields[$field]['label']))
832 832
 					return $subfields[$field]['label'];
833 833
 			}
834 834
 		}
@@ -849,7 +849,7 @@  discard block
 block discarded – undo
849 849
 	 *
850 850
 	 * @return void
851 851
 	 */
852
-	public function do_secondary_messenger_hooks( $sending_messenger_name ) {
852
+	public function do_secondary_messenger_hooks($sending_messenger_name) {
853 853
 		return;
854 854
 	}
855 855
 
Please login to merge, or discard this patch.
admin_pages/messages/Messages_Admin_Page.core.php 1 patch
Indentation   +4113 added lines, -4113 removed lines patch added patch discarded remove patch
@@ -5,7 +5,7 @@  discard block
 block discarded – undo
5 5
 use EventEspresso\core\exceptions\InvalidInterfaceException;
6 6
 
7 7
 if ( ! defined('EVENT_ESPRESSO_VERSION')) {
8
-    exit('NO direct script access allowed');
8
+	exit('NO direct script access allowed');
9 9
 }
10 10
 
11 11
 /**
@@ -23,2554 +23,2554 @@  discard block
 block discarded – undo
23 23
 class Messages_Admin_Page extends EE_Admin_Page
24 24
 {
25 25
     
26
-    /**
27
-     * @type EE_Message_Resource_Manager $_message_resource_manager
28
-     */
29
-    protected $_message_resource_manager;
26
+	/**
27
+	 * @type EE_Message_Resource_Manager $_message_resource_manager
28
+	 */
29
+	protected $_message_resource_manager;
30 30
     
31
-    /**
32
-     * @type string $_active_message_type_name
33
-     */
34
-    protected $_active_message_type_name = '';
31
+	/**
32
+	 * @type string $_active_message_type_name
33
+	 */
34
+	protected $_active_message_type_name = '';
35 35
     
36
-    /**
37
-     * @type EE_messenger $_active_messenger
38
-     */
39
-    protected $_active_messenger;
40
-    protected $_activate_state;
41
-    protected $_activate_meta_box_type;
42
-    protected $_current_message_meta_box;
43
-    protected $_current_message_meta_box_object;
44
-    protected $_context_switcher;
45
-    protected $_shortcodes = array();
46
-    protected $_active_messengers = array();
47
-    protected $_active_message_types = array();
36
+	/**
37
+	 * @type EE_messenger $_active_messenger
38
+	 */
39
+	protected $_active_messenger;
40
+	protected $_activate_state;
41
+	protected $_activate_meta_box_type;
42
+	protected $_current_message_meta_box;
43
+	protected $_current_message_meta_box_object;
44
+	protected $_context_switcher;
45
+	protected $_shortcodes = array();
46
+	protected $_active_messengers = array();
47
+	protected $_active_message_types = array();
48 48
     
49
-    /**
50
-     * @var EE_Message_Template_Group $_message_template_group
51
-     */
52
-    protected $_message_template_group;
53
-    protected $_m_mt_settings = array();
49
+	/**
50
+	 * @var EE_Message_Template_Group $_message_template_group
51
+	 */
52
+	protected $_message_template_group;
53
+	protected $_m_mt_settings = array();
54 54
     
55 55
     
56
-    /**
57
-     * This is set via the _set_message_template_group method and holds whatever the template pack for the group is.
58
-     * IF there is no group then it gets automatically set to the Default template pack.
59
-     *
60
-     * @since 4.5.0
61
-     *
62
-     * @var EE_Messages_Template_Pack
63
-     */
64
-    protected $_template_pack;
56
+	/**
57
+	 * This is set via the _set_message_template_group method and holds whatever the template pack for the group is.
58
+	 * IF there is no group then it gets automatically set to the Default template pack.
59
+	 *
60
+	 * @since 4.5.0
61
+	 *
62
+	 * @var EE_Messages_Template_Pack
63
+	 */
64
+	protected $_template_pack;
65 65
     
66 66
     
67
-    /**
68
-     * This is set via the _set_message_template_group method and holds whatever the template pack variation for the
69
-     * group is.  If there is no group then it automatically gets set to default.
70
-     *
71
-     * @since 4.5.0
72
-     *
73
-     * @var string
74
-     */
75
-    protected $_variation;
67
+	/**
68
+	 * This is set via the _set_message_template_group method and holds whatever the template pack variation for the
69
+	 * group is.  If there is no group then it automatically gets set to default.
70
+	 *
71
+	 * @since 4.5.0
72
+	 *
73
+	 * @var string
74
+	 */
75
+	protected $_variation;
76 76
 
77 77
 
78
-    /**
79
-     * @param bool $routing
80
-     * @throws EE_Error
81
-     */
82
-    public function __construct($routing = true)
83
-    {
84
-        //make sure messages autoloader is running
85
-        EED_Messages::set_autoloaders();
86
-        parent::__construct($routing);
87
-    }
78
+	/**
79
+	 * @param bool $routing
80
+	 * @throws EE_Error
81
+	 */
82
+	public function __construct($routing = true)
83
+	{
84
+		//make sure messages autoloader is running
85
+		EED_Messages::set_autoloaders();
86
+		parent::__construct($routing);
87
+	}
88 88
     
89 89
     
90
-    protected function _init_page_props()
91
-    {
92
-        $this->page_slug        = EE_MSG_PG_SLUG;
93
-        $this->page_label       = esc_html__('Messages Settings', 'event_espresso');
94
-        $this->_admin_base_url  = EE_MSG_ADMIN_URL;
95
-        $this->_admin_base_path = EE_MSG_ADMIN;
96
-        
97
-        $this->_activate_state = isset($this->_req_data['activate_state']) ? (array)$this->_req_data['activate_state'] : array();
98
-        
99
-        $this->_active_messenger = isset($this->_req_data['messenger']) ? $this->_req_data['messenger'] : null;
100
-        $this->_load_message_resource_manager();
101
-    }
90
+	protected function _init_page_props()
91
+	{
92
+		$this->page_slug        = EE_MSG_PG_SLUG;
93
+		$this->page_label       = esc_html__('Messages Settings', 'event_espresso');
94
+		$this->_admin_base_url  = EE_MSG_ADMIN_URL;
95
+		$this->_admin_base_path = EE_MSG_ADMIN;
96
+        
97
+		$this->_activate_state = isset($this->_req_data['activate_state']) ? (array)$this->_req_data['activate_state'] : array();
98
+        
99
+		$this->_active_messenger = isset($this->_req_data['messenger']) ? $this->_req_data['messenger'] : null;
100
+		$this->_load_message_resource_manager();
101
+	}
102 102
 
103 103
 
104
-    /**
105
-     * loads messenger objects into the $_active_messengers property (so we can access the needed methods)
106
-     *
107
-     * @throws EE_Error
108
-     * @throws InvalidDataTypeException
109
-     * @throws InvalidInterfaceException
110
-     * @throws InvalidArgumentException
111
-     * @throws ReflectionException
112
-     */
113
-    protected function _load_message_resource_manager()
114
-    {
115
-        $this->_message_resource_manager = EE_Registry::instance()->load_lib('Message_Resource_Manager');
116
-    }
104
+	/**
105
+	 * loads messenger objects into the $_active_messengers property (so we can access the needed methods)
106
+	 *
107
+	 * @throws EE_Error
108
+	 * @throws InvalidDataTypeException
109
+	 * @throws InvalidInterfaceException
110
+	 * @throws InvalidArgumentException
111
+	 * @throws ReflectionException
112
+	 */
113
+	protected function _load_message_resource_manager()
114
+	{
115
+		$this->_message_resource_manager = EE_Registry::instance()->load_lib('Message_Resource_Manager');
116
+	}
117 117
 
118 118
 
119
-    /**
120
-     * @deprecated 4.9.9.rc.014
121
-     * @return array
122
-     * @throws EE_Error
123
-     * @throws InvalidArgumentException
124
-     * @throws InvalidDataTypeException
125
-     * @throws InvalidInterfaceException
126
-     */
127
-    public function get_messengers_for_list_table()
128
-    {
129
-        EE_Error::doing_it_wrong(
130
-            __METHOD__,
131
-            sprintf(
132
-                esc_html__(
133
-                    'This method is no longer in use.  There is no replacement for it. The method was used to generate a set of values for use in creating a messenger filter dropdown which is now generated differently via %s',
134
-                    'event_espresso'
135
-                ),
136
-                'Messages_Admin_Page::get_messengers_select_input()'
137
-            ),
138
-            '4.9.9.rc.014'
139
-        );
140
-        
141
-        $m_values          = array();
142
-        $active_messengers = EEM_Message::instance()->get_all(array('group_by' => 'MSG_messenger'));
143
-        //setup messengers for selects
144
-        $i = 1;
145
-        foreach ($active_messengers as $active_messenger) {
146
-            if ($active_messenger instanceof EE_Message) {
147
-                $m_values[$i]['id']   = $active_messenger->messenger();
148
-                $m_values[$i]['text'] = ucwords($active_messenger->messenger_label());
149
-                $i++;
150
-            }
151
-        }
152
-        
153
-        return $m_values;
154
-    }
119
+	/**
120
+	 * @deprecated 4.9.9.rc.014
121
+	 * @return array
122
+	 * @throws EE_Error
123
+	 * @throws InvalidArgumentException
124
+	 * @throws InvalidDataTypeException
125
+	 * @throws InvalidInterfaceException
126
+	 */
127
+	public function get_messengers_for_list_table()
128
+	{
129
+		EE_Error::doing_it_wrong(
130
+			__METHOD__,
131
+			sprintf(
132
+				esc_html__(
133
+					'This method is no longer in use.  There is no replacement for it. The method was used to generate a set of values for use in creating a messenger filter dropdown which is now generated differently via %s',
134
+					'event_espresso'
135
+				),
136
+				'Messages_Admin_Page::get_messengers_select_input()'
137
+			),
138
+			'4.9.9.rc.014'
139
+		);
140
+        
141
+		$m_values          = array();
142
+		$active_messengers = EEM_Message::instance()->get_all(array('group_by' => 'MSG_messenger'));
143
+		//setup messengers for selects
144
+		$i = 1;
145
+		foreach ($active_messengers as $active_messenger) {
146
+			if ($active_messenger instanceof EE_Message) {
147
+				$m_values[$i]['id']   = $active_messenger->messenger();
148
+				$m_values[$i]['text'] = ucwords($active_messenger->messenger_label());
149
+				$i++;
150
+			}
151
+		}
152
+        
153
+		return $m_values;
154
+	}
155 155
 
156 156
 
157
-    /**
158
-     * @deprecated 4.9.9.rc.014
159
-     * @return array
160
-     * @throws EE_Error
161
-     * @throws InvalidArgumentException
162
-     * @throws InvalidDataTypeException
163
-     * @throws InvalidInterfaceException
164
-     */
165
-    public function get_message_types_for_list_table()
166
-    {
167
-        EE_Error::doing_it_wrong(
168
-            __METHOD__,
169
-            sprintf(
170
-                esc_html__(
171
-                    'This method is no longer in use.  There is no replacement for it. The method was used to generate a set of values for use in creating a message type filter dropdown which is now generated differently via %s',
172
-                    'event_espresso'
173
-                ),
174
-                'Messages_Admin_Page::get_message_types_select_input()'
175
-            ),
176
-            '4.9.9.rc.014'
177
-        );
178
-        
179
-        $mt_values       = array();
180
-        $active_messages = EEM_Message::instance()->get_all(array('group_by' => 'MSG_message_type'));
181
-        $i               = 1;
182
-        foreach ($active_messages as $active_message) {
183
-            if ($active_message instanceof EE_Message) {
184
-                $mt_values[$i]['id']   = $active_message->message_type();
185
-                $mt_values[$i]['text'] = ucwords($active_message->message_type_label());
186
-                $i++;
187
-            }
188
-        }
189
-        
190
-        return $mt_values;
191
-    }
157
+	/**
158
+	 * @deprecated 4.9.9.rc.014
159
+	 * @return array
160
+	 * @throws EE_Error
161
+	 * @throws InvalidArgumentException
162
+	 * @throws InvalidDataTypeException
163
+	 * @throws InvalidInterfaceException
164
+	 */
165
+	public function get_message_types_for_list_table()
166
+	{
167
+		EE_Error::doing_it_wrong(
168
+			__METHOD__,
169
+			sprintf(
170
+				esc_html__(
171
+					'This method is no longer in use.  There is no replacement for it. The method was used to generate a set of values for use in creating a message type filter dropdown which is now generated differently via %s',
172
+					'event_espresso'
173
+				),
174
+				'Messages_Admin_Page::get_message_types_select_input()'
175
+			),
176
+			'4.9.9.rc.014'
177
+		);
178
+        
179
+		$mt_values       = array();
180
+		$active_messages = EEM_Message::instance()->get_all(array('group_by' => 'MSG_message_type'));
181
+		$i               = 1;
182
+		foreach ($active_messages as $active_message) {
183
+			if ($active_message instanceof EE_Message) {
184
+				$mt_values[$i]['id']   = $active_message->message_type();
185
+				$mt_values[$i]['text'] = ucwords($active_message->message_type_label());
186
+				$i++;
187
+			}
188
+		}
189
+        
190
+		return $mt_values;
191
+	}
192 192
 
193 193
 
194
-    /**
195
-     * @deprecated 4.9.9.rc.014
196
-     * @return array
197
-     * @throws EE_Error
198
-     * @throws InvalidArgumentException
199
-     * @throws InvalidDataTypeException
200
-     * @throws InvalidInterfaceException
201
-     */
202
-    public function get_contexts_for_message_types_for_list_table()
203
-    {
204
-        EE_Error::doing_it_wrong(
205
-            __METHOD__,
206
-            sprintf(
207
-                esc_html__(
208
-                    'This method is no longer in use.  There is no replacement for it. The method was used to generate a set of values for use in creating a message type context filter dropdown which is now generated differently via %s',
209
-                    'event_espresso'
210
-                ),
211
-                'Messages_Admin_Page::get_contexts_for_message_types_select_input()'
212
-            ),
213
-            '4.9.9.rc.014'
214
-        );
215
-        
216
-        $contexts                = array();
217
-        $active_message_contexts = EEM_Message::instance()->get_all(array('group_by' => 'MSG_context'));
218
-        foreach ($active_message_contexts as $active_message) {
219
-            if ($active_message instanceof EE_Message) {
220
-                $message_type = $active_message->message_type_object();
221
-                if ($message_type instanceof EE_message_type) {
222
-                    $message_type_contexts = $message_type->get_contexts();
223
-                    foreach ($message_type_contexts as $context => $context_details) {
224
-                        $contexts[$context] = $context_details['label'];
225
-                    }
226
-                }
227
-            }
228
-        }
229
-        
230
-        return $contexts;
231
-    }
194
+	/**
195
+	 * @deprecated 4.9.9.rc.014
196
+	 * @return array
197
+	 * @throws EE_Error
198
+	 * @throws InvalidArgumentException
199
+	 * @throws InvalidDataTypeException
200
+	 * @throws InvalidInterfaceException
201
+	 */
202
+	public function get_contexts_for_message_types_for_list_table()
203
+	{
204
+		EE_Error::doing_it_wrong(
205
+			__METHOD__,
206
+			sprintf(
207
+				esc_html__(
208
+					'This method is no longer in use.  There is no replacement for it. The method was used to generate a set of values for use in creating a message type context filter dropdown which is now generated differently via %s',
209
+					'event_espresso'
210
+				),
211
+				'Messages_Admin_Page::get_contexts_for_message_types_select_input()'
212
+			),
213
+			'4.9.9.rc.014'
214
+		);
215
+        
216
+		$contexts                = array();
217
+		$active_message_contexts = EEM_Message::instance()->get_all(array('group_by' => 'MSG_context'));
218
+		foreach ($active_message_contexts as $active_message) {
219
+			if ($active_message instanceof EE_Message) {
220
+				$message_type = $active_message->message_type_object();
221
+				if ($message_type instanceof EE_message_type) {
222
+					$message_type_contexts = $message_type->get_contexts();
223
+					foreach ($message_type_contexts as $context => $context_details) {
224
+						$contexts[$context] = $context_details['label'];
225
+					}
226
+				}
227
+			}
228
+		}
229
+        
230
+		return $contexts;
231
+	}
232 232
 
233 233
 
234
-    /**
235
-     * Generate select input with provided messenger options array.
236
-     *
237
-     * @param array $messenger_options Array of messengers indexed by messenger slug and values are the messenger
238
-     *                                 labels.
239
-     * @return string
240
-     * @throws EE_Error
241
-     */
242
-    public function get_messengers_select_input($messenger_options)
243
-    {
244
-        //if empty or just one value then just return an empty string
245
-        if (empty($messenger_options)
246
-            || ! is_array($messenger_options)
247
-            || count($messenger_options) === 1
248
-        ) {
249
-            return '';
250
-        }
251
-        //merge in default
252
-        $messenger_options = array_merge(
253
-            array('none_selected' => esc_html__('Show All Messengers', 'event_espresso')),
254
-            $messenger_options
255
-        );
256
-        $input             = new EE_Select_Input(
257
-            $messenger_options,
258
-            array(
259
-                'html_name'  => 'ee_messenger_filter_by',
260
-                'html_id'    => 'ee_messenger_filter_by',
261
-                'html_class' => 'wide',
262
-                'default'    => isset($this->_req_data['ee_messenger_filter_by'])
263
-                    ? sanitize_title($this->_req_data['ee_messenger_filter_by'])
264
-                    : 'none_selected'
265
-            )
266
-        );
267
-        
268
-        return $input->get_html_for_input();
269
-    }
234
+	/**
235
+	 * Generate select input with provided messenger options array.
236
+	 *
237
+	 * @param array $messenger_options Array of messengers indexed by messenger slug and values are the messenger
238
+	 *                                 labels.
239
+	 * @return string
240
+	 * @throws EE_Error
241
+	 */
242
+	public function get_messengers_select_input($messenger_options)
243
+	{
244
+		//if empty or just one value then just return an empty string
245
+		if (empty($messenger_options)
246
+			|| ! is_array($messenger_options)
247
+			|| count($messenger_options) === 1
248
+		) {
249
+			return '';
250
+		}
251
+		//merge in default
252
+		$messenger_options = array_merge(
253
+			array('none_selected' => esc_html__('Show All Messengers', 'event_espresso')),
254
+			$messenger_options
255
+		);
256
+		$input             = new EE_Select_Input(
257
+			$messenger_options,
258
+			array(
259
+				'html_name'  => 'ee_messenger_filter_by',
260
+				'html_id'    => 'ee_messenger_filter_by',
261
+				'html_class' => 'wide',
262
+				'default'    => isset($this->_req_data['ee_messenger_filter_by'])
263
+					? sanitize_title($this->_req_data['ee_messenger_filter_by'])
264
+					: 'none_selected'
265
+			)
266
+		);
267
+        
268
+		return $input->get_html_for_input();
269
+	}
270 270
 
271 271
 
272
-    /**
273
-     * Generate select input with provided message type options array.
274
-     *
275
-     * @param array $message_type_options Array of message types indexed by message type slug, and values are the
276
-     *                                    message type labels
277
-     * @return string
278
-     * @throws EE_Error
279
-     */
280
-    public function get_message_types_select_input($message_type_options)
281
-    {
282
-        //if empty or count of options is 1 then just return an empty string
283
-        if (empty($message_type_options)
284
-            || ! is_array($message_type_options)
285
-            || count($message_type_options) === 1
286
-        ) {
287
-            return '';
288
-        }
289
-        //merge in default
290
-        $message_type_options = array_merge(
291
-            array('none_selected' => esc_html__('Show All Message Types', 'event_espresso')),
292
-            $message_type_options
293
-        );
294
-        $input                = new EE_Select_Input(
295
-            $message_type_options,
296
-            array(
297
-                'html_name'  => 'ee_message_type_filter_by',
298
-                'html_id'    => 'ee_message_type_filter_by',
299
-                'html_class' => 'wide',
300
-                'default'    => isset($this->_req_data['ee_message_type_filter_by'])
301
-                    ? sanitize_title($this->_req_data['ee_message_type_filter_by'])
302
-                    : 'none_selected',
303
-            )
304
-        );
305
-        
306
-        return $input->get_html_for_input();
307
-    }
272
+	/**
273
+	 * Generate select input with provided message type options array.
274
+	 *
275
+	 * @param array $message_type_options Array of message types indexed by message type slug, and values are the
276
+	 *                                    message type labels
277
+	 * @return string
278
+	 * @throws EE_Error
279
+	 */
280
+	public function get_message_types_select_input($message_type_options)
281
+	{
282
+		//if empty or count of options is 1 then just return an empty string
283
+		if (empty($message_type_options)
284
+			|| ! is_array($message_type_options)
285
+			|| count($message_type_options) === 1
286
+		) {
287
+			return '';
288
+		}
289
+		//merge in default
290
+		$message_type_options = array_merge(
291
+			array('none_selected' => esc_html__('Show All Message Types', 'event_espresso')),
292
+			$message_type_options
293
+		);
294
+		$input                = new EE_Select_Input(
295
+			$message_type_options,
296
+			array(
297
+				'html_name'  => 'ee_message_type_filter_by',
298
+				'html_id'    => 'ee_message_type_filter_by',
299
+				'html_class' => 'wide',
300
+				'default'    => isset($this->_req_data['ee_message_type_filter_by'])
301
+					? sanitize_title($this->_req_data['ee_message_type_filter_by'])
302
+					: 'none_selected',
303
+			)
304
+		);
305
+        
306
+		return $input->get_html_for_input();
307
+	}
308 308
 
309 309
 
310
-    /**
311
-     * Generate select input with provide message type contexts array.
312
-     *
313
-     * @param array $context_options Array of message type contexts indexed by context slug, and values are the
314
-     *                               context label.
315
-     * @return string
316
-     * @throws EE_Error
317
-     */
318
-    public function get_contexts_for_message_types_select_input($context_options)
319
-    {
320
-        //if empty or count of options is one then just return empty string
321
-        if (empty($context_options)
322
-            || ! is_array($context_options)
323
-            || count($context_options) === 1
324
-        ) {
325
-            return '';
326
-        }
327
-        //merge in default
328
-        $context_options = array_merge(
329
-            array('none_selected' => esc_html__('Show all Contexts', 'event_espresso')),
330
-            $context_options
331
-        );
332
-        $input           = new EE_Select_Input(
333
-            $context_options,
334
-            array(
335
-                'html_name'  => 'ee_context_filter_by',
336
-                'html_id'    => 'ee_context_filter_by',
337
-                'html_class' => 'wide',
338
-                'default'    => isset($this->_req_data['ee_context_filter_by'])
339
-                    ? sanitize_title($this->_req_data['ee_context_filter_by'])
340
-                    : 'none_selected',
341
-            )
342
-        );
343
-        
344
-        return $input->get_html_for_input();
345
-    }
310
+	/**
311
+	 * Generate select input with provide message type contexts array.
312
+	 *
313
+	 * @param array $context_options Array of message type contexts indexed by context slug, and values are the
314
+	 *                               context label.
315
+	 * @return string
316
+	 * @throws EE_Error
317
+	 */
318
+	public function get_contexts_for_message_types_select_input($context_options)
319
+	{
320
+		//if empty or count of options is one then just return empty string
321
+		if (empty($context_options)
322
+			|| ! is_array($context_options)
323
+			|| count($context_options) === 1
324
+		) {
325
+			return '';
326
+		}
327
+		//merge in default
328
+		$context_options = array_merge(
329
+			array('none_selected' => esc_html__('Show all Contexts', 'event_espresso')),
330
+			$context_options
331
+		);
332
+		$input           = new EE_Select_Input(
333
+			$context_options,
334
+			array(
335
+				'html_name'  => 'ee_context_filter_by',
336
+				'html_id'    => 'ee_context_filter_by',
337
+				'html_class' => 'wide',
338
+				'default'    => isset($this->_req_data['ee_context_filter_by'])
339
+					? sanitize_title($this->_req_data['ee_context_filter_by'])
340
+					: 'none_selected',
341
+			)
342
+		);
343
+        
344
+		return $input->get_html_for_input();
345
+	}
346 346
     
347 347
     
348
-    protected function _ajax_hooks()
349
-    {
350
-        add_action('wp_ajax_activate_messenger', array($this, 'activate_messenger_toggle'));
351
-        add_action('wp_ajax_activate_mt', array($this, 'activate_mt_toggle'));
352
-        add_action('wp_ajax_ee_msgs_save_settings', array($this, 'save_settings'));
353
-        add_action('wp_ajax_ee_msgs_update_mt_form', array($this, 'update_mt_form'));
354
-        add_action('wp_ajax_switch_template_pack', array($this, 'switch_template_pack'));
355
-        add_action('wp_ajax_toggle_context_template', array($this, 'toggle_context_template'));
356
-    }
348
+	protected function _ajax_hooks()
349
+	{
350
+		add_action('wp_ajax_activate_messenger', array($this, 'activate_messenger_toggle'));
351
+		add_action('wp_ajax_activate_mt', array($this, 'activate_mt_toggle'));
352
+		add_action('wp_ajax_ee_msgs_save_settings', array($this, 'save_settings'));
353
+		add_action('wp_ajax_ee_msgs_update_mt_form', array($this, 'update_mt_form'));
354
+		add_action('wp_ajax_switch_template_pack', array($this, 'switch_template_pack'));
355
+		add_action('wp_ajax_toggle_context_template', array($this, 'toggle_context_template'));
356
+	}
357 357
     
358 358
     
359
-    protected function _define_page_props()
360
-    {
361
-        $this->_admin_page_title = $this->page_label;
362
-        $this->_labels           = array(
363
-            'buttons'    => array(
364
-                'add'    => esc_html__('Add New Message Template', 'event_espresso'),
365
-                'edit'   => esc_html__('Edit Message Template', 'event_espresso'),
366
-                'delete' => esc_html__('Delete Message Template', 'event_espresso')
367
-            ),
368
-            'publishbox' => esc_html__('Update Actions', 'event_espresso')
369
-        );
370
-    }
359
+	protected function _define_page_props()
360
+	{
361
+		$this->_admin_page_title = $this->page_label;
362
+		$this->_labels           = array(
363
+			'buttons'    => array(
364
+				'add'    => esc_html__('Add New Message Template', 'event_espresso'),
365
+				'edit'   => esc_html__('Edit Message Template', 'event_espresso'),
366
+				'delete' => esc_html__('Delete Message Template', 'event_espresso')
367
+			),
368
+			'publishbox' => esc_html__('Update Actions', 'event_espresso')
369
+		);
370
+	}
371 371
     
372 372
     
373
-    /**
374
-     *        an array for storing key => value pairs of request actions and their corresponding methods
375
-     * @access protected
376
-     * @return void
377
-     */
378
-    protected function _set_page_routes()
379
-    {
380
-        $grp_id = ! empty($this->_req_data['GRP_ID']) && ! is_array($this->_req_data['GRP_ID'])
381
-            ? $this->_req_data['GRP_ID']
382
-            : 0;
383
-        $grp_id = empty($grp_id) && ! empty($this->_req_data['id'])
384
-            ? $this->_req_data['id']
385
-            : $grp_id;
386
-        $msg_id = ! empty($this->_req_data['MSG_ID']) && ! is_array($this->_req_data['MSG_ID'])
387
-            ? $this->_req_data['MSG_ID']
388
-            : 0;
389
-        
390
-        $this->_page_routes = array(
391
-            'default'                          => array(
392
-                'func'       => '_message_queue_list_table',
393
-                'capability' => 'ee_read_global_messages'
394
-            ),
395
-            'global_mtps'                      => array(
396
-                'func'       => '_ee_default_messages_overview_list_table',
397
-                'capability' => 'ee_read_global_messages'
398
-            ),
399
-            'custom_mtps'                      => array(
400
-                'func'       => '_custom_mtps_preview',
401
-                'capability' => 'ee_read_messages'
402
-            ),
403
-            'add_new_message_template'         => array(
404
-                'func'       => '_add_message_template',
405
-                'capability' => 'ee_edit_messages',
406
-                'noheader'   => true
407
-            ),
408
-            'edit_message_template'            => array(
409
-                'func'       => '_edit_message_template',
410
-                'capability' => 'ee_edit_message',
411
-                'obj_id'     => $grp_id
412
-            ),
413
-            'preview_message'                  => array(
414
-                'func'               => '_preview_message',
415
-                'capability'         => 'ee_read_message',
416
-                'obj_id'             => $grp_id,
417
-                'noheader'           => true,
418
-                'headers_sent_route' => 'display_preview_message'
419
-            ),
420
-            'display_preview_message'          => array(
421
-                'func'       => '_display_preview_message',
422
-                'capability' => 'ee_read_message',
423
-                'obj_id'     => $grp_id
424
-            ),
425
-            'insert_message_template'          => array(
426
-                'func'       => '_insert_or_update_message_template',
427
-                'capability' => 'ee_edit_messages',
428
-                'args'       => array('new_template' => true),
429
-                'noheader'   => true
430
-            ),
431
-            'update_message_template'          => array(
432
-                'func'       => '_insert_or_update_message_template',
433
-                'capability' => 'ee_edit_message',
434
-                'obj_id'     => $grp_id,
435
-                'args'       => array('new_template' => false),
436
-                'noheader'   => true
437
-            ),
438
-            'trash_message_template'           => array(
439
-                'func'       => '_trash_or_restore_message_template',
440
-                'capability' => 'ee_delete_message',
441
-                'obj_id'     => $grp_id,
442
-                'args'       => array('trash' => true, 'all' => true),
443
-                'noheader'   => true
444
-            ),
445
-            'trash_message_template_context'   => array(
446
-                'func'       => '_trash_or_restore_message_template',
447
-                'capability' => 'ee_delete_message',
448
-                'obj_id'     => $grp_id,
449
-                'args'       => array('trash' => true),
450
-                'noheader'   => true
451
-            ),
452
-            'restore_message_template'         => array(
453
-                'func'       => '_trash_or_restore_message_template',
454
-                'capability' => 'ee_delete_message',
455
-                'obj_id'     => $grp_id,
456
-                'args'       => array('trash' => false, 'all' => true),
457
-                'noheader'   => true
458
-            ),
459
-            'restore_message_template_context' => array(
460
-                'func'       => '_trash_or_restore_message_template',
461
-                'capability' => 'ee_delete_message',
462
-                'obj_id'     => $grp_id,
463
-                'args'       => array('trash' => false),
464
-                'noheader'   => true
465
-            ),
466
-            'delete_message_template'          => array(
467
-                'func'       => '_delete_message_template',
468
-                'capability' => 'ee_delete_message',
469
-                'obj_id'     => $grp_id,
470
-                'noheader'   => true
471
-            ),
472
-            'reset_to_default'                 => array(
473
-                'func'       => '_reset_to_default_template',
474
-                'capability' => 'ee_edit_message',
475
-                'obj_id'     => $grp_id,
476
-                'noheader'   => true
477
-            ),
478
-            'settings'                         => array(
479
-                'func'       => '_settings',
480
-                'capability' => 'manage_options'
481
-            ),
482
-            'update_global_settings'           => array(
483
-                'func'       => '_update_global_settings',
484
-                'capability' => 'manage_options',
485
-                'noheader'   => true
486
-            ),
487
-            'generate_now'                     => array(
488
-                'func'       => '_generate_now',
489
-                'capability' => 'ee_send_message',
490
-                'noheader'   => true
491
-            ),
492
-            'generate_and_send_now'            => array(
493
-                'func'       => '_generate_and_send_now',
494
-                'capability' => 'ee_send_message',
495
-                'noheader'   => true
496
-            ),
497
-            'queue_for_resending'              => array(
498
-                'func'       => '_queue_for_resending',
499
-                'capability' => 'ee_send_message',
500
-                'noheader'   => true
501
-            ),
502
-            'send_now'                         => array(
503
-                'func'       => '_send_now',
504
-                'capability' => 'ee_send_message',
505
-                'noheader'   => true
506
-            ),
507
-            'delete_ee_message'                => array(
508
-                'func'       => '_delete_ee_messages',
509
-                'capability' => 'ee_delete_messages',
510
-                'noheader'   => true
511
-            ),
512
-            'delete_ee_messages'               => array(
513
-                'func'       => '_delete_ee_messages',
514
-                'capability' => 'ee_delete_messages',
515
-                'noheader'   => true,
516
-                'obj_id'     => $msg_id
517
-            )
518
-        );
519
-    }
373
+	/**
374
+	 *        an array for storing key => value pairs of request actions and their corresponding methods
375
+	 * @access protected
376
+	 * @return void
377
+	 */
378
+	protected function _set_page_routes()
379
+	{
380
+		$grp_id = ! empty($this->_req_data['GRP_ID']) && ! is_array($this->_req_data['GRP_ID'])
381
+			? $this->_req_data['GRP_ID']
382
+			: 0;
383
+		$grp_id = empty($grp_id) && ! empty($this->_req_data['id'])
384
+			? $this->_req_data['id']
385
+			: $grp_id;
386
+		$msg_id = ! empty($this->_req_data['MSG_ID']) && ! is_array($this->_req_data['MSG_ID'])
387
+			? $this->_req_data['MSG_ID']
388
+			: 0;
389
+        
390
+		$this->_page_routes = array(
391
+			'default'                          => array(
392
+				'func'       => '_message_queue_list_table',
393
+				'capability' => 'ee_read_global_messages'
394
+			),
395
+			'global_mtps'                      => array(
396
+				'func'       => '_ee_default_messages_overview_list_table',
397
+				'capability' => 'ee_read_global_messages'
398
+			),
399
+			'custom_mtps'                      => array(
400
+				'func'       => '_custom_mtps_preview',
401
+				'capability' => 'ee_read_messages'
402
+			),
403
+			'add_new_message_template'         => array(
404
+				'func'       => '_add_message_template',
405
+				'capability' => 'ee_edit_messages',
406
+				'noheader'   => true
407
+			),
408
+			'edit_message_template'            => array(
409
+				'func'       => '_edit_message_template',
410
+				'capability' => 'ee_edit_message',
411
+				'obj_id'     => $grp_id
412
+			),
413
+			'preview_message'                  => array(
414
+				'func'               => '_preview_message',
415
+				'capability'         => 'ee_read_message',
416
+				'obj_id'             => $grp_id,
417
+				'noheader'           => true,
418
+				'headers_sent_route' => 'display_preview_message'
419
+			),
420
+			'display_preview_message'          => array(
421
+				'func'       => '_display_preview_message',
422
+				'capability' => 'ee_read_message',
423
+				'obj_id'     => $grp_id
424
+			),
425
+			'insert_message_template'          => array(
426
+				'func'       => '_insert_or_update_message_template',
427
+				'capability' => 'ee_edit_messages',
428
+				'args'       => array('new_template' => true),
429
+				'noheader'   => true
430
+			),
431
+			'update_message_template'          => array(
432
+				'func'       => '_insert_or_update_message_template',
433
+				'capability' => 'ee_edit_message',
434
+				'obj_id'     => $grp_id,
435
+				'args'       => array('new_template' => false),
436
+				'noheader'   => true
437
+			),
438
+			'trash_message_template'           => array(
439
+				'func'       => '_trash_or_restore_message_template',
440
+				'capability' => 'ee_delete_message',
441
+				'obj_id'     => $grp_id,
442
+				'args'       => array('trash' => true, 'all' => true),
443
+				'noheader'   => true
444
+			),
445
+			'trash_message_template_context'   => array(
446
+				'func'       => '_trash_or_restore_message_template',
447
+				'capability' => 'ee_delete_message',
448
+				'obj_id'     => $grp_id,
449
+				'args'       => array('trash' => true),
450
+				'noheader'   => true
451
+			),
452
+			'restore_message_template'         => array(
453
+				'func'       => '_trash_or_restore_message_template',
454
+				'capability' => 'ee_delete_message',
455
+				'obj_id'     => $grp_id,
456
+				'args'       => array('trash' => false, 'all' => true),
457
+				'noheader'   => true
458
+			),
459
+			'restore_message_template_context' => array(
460
+				'func'       => '_trash_or_restore_message_template',
461
+				'capability' => 'ee_delete_message',
462
+				'obj_id'     => $grp_id,
463
+				'args'       => array('trash' => false),
464
+				'noheader'   => true
465
+			),
466
+			'delete_message_template'          => array(
467
+				'func'       => '_delete_message_template',
468
+				'capability' => 'ee_delete_message',
469
+				'obj_id'     => $grp_id,
470
+				'noheader'   => true
471
+			),
472
+			'reset_to_default'                 => array(
473
+				'func'       => '_reset_to_default_template',
474
+				'capability' => 'ee_edit_message',
475
+				'obj_id'     => $grp_id,
476
+				'noheader'   => true
477
+			),
478
+			'settings'                         => array(
479
+				'func'       => '_settings',
480
+				'capability' => 'manage_options'
481
+			),
482
+			'update_global_settings'           => array(
483
+				'func'       => '_update_global_settings',
484
+				'capability' => 'manage_options',
485
+				'noheader'   => true
486
+			),
487
+			'generate_now'                     => array(
488
+				'func'       => '_generate_now',
489
+				'capability' => 'ee_send_message',
490
+				'noheader'   => true
491
+			),
492
+			'generate_and_send_now'            => array(
493
+				'func'       => '_generate_and_send_now',
494
+				'capability' => 'ee_send_message',
495
+				'noheader'   => true
496
+			),
497
+			'queue_for_resending'              => array(
498
+				'func'       => '_queue_for_resending',
499
+				'capability' => 'ee_send_message',
500
+				'noheader'   => true
501
+			),
502
+			'send_now'                         => array(
503
+				'func'       => '_send_now',
504
+				'capability' => 'ee_send_message',
505
+				'noheader'   => true
506
+			),
507
+			'delete_ee_message'                => array(
508
+				'func'       => '_delete_ee_messages',
509
+				'capability' => 'ee_delete_messages',
510
+				'noheader'   => true
511
+			),
512
+			'delete_ee_messages'               => array(
513
+				'func'       => '_delete_ee_messages',
514
+				'capability' => 'ee_delete_messages',
515
+				'noheader'   => true,
516
+				'obj_id'     => $msg_id
517
+			)
518
+		);
519
+	}
520 520
     
521 521
     
522
-    protected function _set_page_config()
523
-    {
524
-        $this->_page_config = array(
525
-            'default'                  => array(
526
-                'nav'           => array(
527
-                    'label' => esc_html__('Message Activity', 'event_espresso'),
528
-                    'order' => 10
529
-                ),
530
-                'list_table'    => 'EE_Message_List_Table',
531
-                // 'qtips' => array( 'EE_Message_List_Table_Tips' ),
532
-                'require_nonce' => false
533
-            ),
534
-            'global_mtps'              => array(
535
-                'nav'           => array(
536
-                    'label' => esc_html__('Default Message Templates', 'event_espresso'),
537
-                    'order' => 20
538
-                ),
539
-                'list_table'    => 'Messages_Template_List_Table',
540
-                'help_tabs'     => array(
541
-                    'messages_overview_help_tab'                                => array(
542
-                        'title'    => esc_html__('Messages Overview', 'event_espresso'),
543
-                        'filename' => 'messages_overview'
544
-                    ),
545
-                    'messages_overview_messages_table_column_headings_help_tab' => array(
546
-                        'title'    => esc_html__('Messages Table Column Headings', 'event_espresso'),
547
-                        'filename' => 'messages_overview_table_column_headings'
548
-                    ),
549
-                    'messages_overview_messages_filters_help_tab'               => array(
550
-                        'title'    => esc_html__('Message Filters', 'event_espresso'),
551
-                        'filename' => 'messages_overview_filters'
552
-                    ),
553
-                    'messages_overview_messages_views_help_tab'                 => array(
554
-                        'title'    => esc_html__('Message Views', 'event_espresso'),
555
-                        'filename' => 'messages_overview_views'
556
-                    ),
557
-                    'message_overview_message_types_help_tab'                   => array(
558
-                        'title'    => esc_html__('Message Types', 'event_espresso'),
559
-                        'filename' => 'messages_overview_types'
560
-                    ),
561
-                    'messages_overview_messengers_help_tab'                     => array(
562
-                        'title'    => esc_html__('Messengers', 'event_espresso'),
563
-                        'filename' => 'messages_overview_messengers',
564
-                    ),
565
-                ),
566
-                'help_tour'     => array('Messages_Overview_Help_Tour'),
567
-                'require_nonce' => false
568
-            ),
569
-            'custom_mtps'              => array(
570
-                'nav'           => array(
571
-                    'label' => esc_html__('Custom Message Templates', 'event_espresso'),
572
-                    'order' => 30
573
-                ),
574
-                'help_tabs'     => array(),
575
-                'help_tour'     => array(),
576
-                'require_nonce' => false
577
-            ),
578
-            'add_new_message_template' => array(
579
-                'nav'           => array(
580
-                    'label'      => esc_html__('Add New Message Templates', 'event_espresso'),
581
-                    'order'      => 5,
582
-                    'persistent' => false
583
-                ),
584
-                'require_nonce' => false
585
-            ),
586
-            'edit_message_template'    => array(
587
-                'labels'        => array(
588
-                    'buttons'    => array(
589
-                        'reset' => esc_html__('Reset Templates'),
590
-                    ),
591
-                    'publishbox' => esc_html__('Update Actions', 'event_espresso')
592
-                ),
593
-                'nav'           => array(
594
-                    'label'      => esc_html__('Edit Message Templates', 'event_espresso'),
595
-                    'order'      => 5,
596
-                    'persistent' => false,
597
-                    'url'        => ''
598
-                ),
599
-                'metaboxes'     => array('_publish_post_box', '_register_edit_meta_boxes'),
600
-                'has_metaboxes' => true,
601
-                'help_tour'     => array('Message_Templates_Edit_Help_Tour'),
602
-                'help_tabs'     => array(
603
-                    'edit_message_template'       => array(
604
-                        'title'    => esc_html__('Message Template Editor', 'event_espresso'),
605
-                        'callback' => 'edit_message_template_help_tab'
606
-                    ),
607
-                    'message_templates_help_tab'  => array(
608
-                        'title'    => esc_html__('Message Templates', 'event_espresso'),
609
-                        'filename' => 'messages_templates'
610
-                    ),
611
-                    'message_template_shortcodes' => array(
612
-                        'title'    => esc_html__('Message Shortcodes', 'event_espresso'),
613
-                        'callback' => 'message_template_shortcodes_help_tab'
614
-                    ),
615
-                    'message_preview_help_tab'    => array(
616
-                        'title'    => esc_html__('Message Preview', 'event_espresso'),
617
-                        'filename' => 'messages_preview'
618
-                    ),
619
-                    'messages_overview_other_help_tab'                          => array(
620
-                        'title'    => esc_html__('Messages Other', 'event_espresso'),
621
-                        'filename' => 'messages_overview_other',
622
-                    ),
623
-                ),
624
-                'require_nonce' => false
625
-            ),
626
-            'display_preview_message'  => array(
627
-                'nav'           => array(
628
-                    'label'      => esc_html__('Message Preview', 'event_espresso'),
629
-                    'order'      => 5,
630
-                    'url'        => '',
631
-                    'persistent' => false
632
-                ),
633
-                'help_tabs'     => array(
634
-                    'preview_message' => array(
635
-                        'title'    => esc_html__('About Previews', 'event_espresso'),
636
-                        'callback' => 'preview_message_help_tab'
637
-                    )
638
-                ),
639
-                'require_nonce' => false
640
-            ),
641
-            'settings'                 => array(
642
-                'nav'           => array(
643
-                    'label' => esc_html__('Settings', 'event_espresso'),
644
-                    'order' => 40
645
-                ),
646
-                'metaboxes'     => array('_messages_settings_metaboxes'),
647
-                'help_tabs'     => array(
648
-                    'messages_settings_help_tab'               => array(
649
-                        'title'    => esc_html__('Messages Settings', 'event_espresso'),
650
-                        'filename' => 'messages_settings'
651
-                    ),
652
-                    'messages_settings_message_types_help_tab' => array(
653
-                        'title'    => esc_html__('Activating / Deactivating Message Types', 'event_espresso'),
654
-                        'filename' => 'messages_settings_message_types'
655
-                    ),
656
-                    'messages_settings_messengers_help_tab'    => array(
657
-                        'title'    => esc_html__('Activating / Deactivating Messengers', 'event_espresso'),
658
-                        'filename' => 'messages_settings_messengers'
659
-                    ),
660
-                ),
661
-                'help_tour'     => array('Messages_Settings_Help_Tour'),
662
-                'require_nonce' => false
663
-            )
664
-        );
665
-    }
522
+	protected function _set_page_config()
523
+	{
524
+		$this->_page_config = array(
525
+			'default'                  => array(
526
+				'nav'           => array(
527
+					'label' => esc_html__('Message Activity', 'event_espresso'),
528
+					'order' => 10
529
+				),
530
+				'list_table'    => 'EE_Message_List_Table',
531
+				// 'qtips' => array( 'EE_Message_List_Table_Tips' ),
532
+				'require_nonce' => false
533
+			),
534
+			'global_mtps'              => array(
535
+				'nav'           => array(
536
+					'label' => esc_html__('Default Message Templates', 'event_espresso'),
537
+					'order' => 20
538
+				),
539
+				'list_table'    => 'Messages_Template_List_Table',
540
+				'help_tabs'     => array(
541
+					'messages_overview_help_tab'                                => array(
542
+						'title'    => esc_html__('Messages Overview', 'event_espresso'),
543
+						'filename' => 'messages_overview'
544
+					),
545
+					'messages_overview_messages_table_column_headings_help_tab' => array(
546
+						'title'    => esc_html__('Messages Table Column Headings', 'event_espresso'),
547
+						'filename' => 'messages_overview_table_column_headings'
548
+					),
549
+					'messages_overview_messages_filters_help_tab'               => array(
550
+						'title'    => esc_html__('Message Filters', 'event_espresso'),
551
+						'filename' => 'messages_overview_filters'
552
+					),
553
+					'messages_overview_messages_views_help_tab'                 => array(
554
+						'title'    => esc_html__('Message Views', 'event_espresso'),
555
+						'filename' => 'messages_overview_views'
556
+					),
557
+					'message_overview_message_types_help_tab'                   => array(
558
+						'title'    => esc_html__('Message Types', 'event_espresso'),
559
+						'filename' => 'messages_overview_types'
560
+					),
561
+					'messages_overview_messengers_help_tab'                     => array(
562
+						'title'    => esc_html__('Messengers', 'event_espresso'),
563
+						'filename' => 'messages_overview_messengers',
564
+					),
565
+				),
566
+				'help_tour'     => array('Messages_Overview_Help_Tour'),
567
+				'require_nonce' => false
568
+			),
569
+			'custom_mtps'              => array(
570
+				'nav'           => array(
571
+					'label' => esc_html__('Custom Message Templates', 'event_espresso'),
572
+					'order' => 30
573
+				),
574
+				'help_tabs'     => array(),
575
+				'help_tour'     => array(),
576
+				'require_nonce' => false
577
+			),
578
+			'add_new_message_template' => array(
579
+				'nav'           => array(
580
+					'label'      => esc_html__('Add New Message Templates', 'event_espresso'),
581
+					'order'      => 5,
582
+					'persistent' => false
583
+				),
584
+				'require_nonce' => false
585
+			),
586
+			'edit_message_template'    => array(
587
+				'labels'        => array(
588
+					'buttons'    => array(
589
+						'reset' => esc_html__('Reset Templates'),
590
+					),
591
+					'publishbox' => esc_html__('Update Actions', 'event_espresso')
592
+				),
593
+				'nav'           => array(
594
+					'label'      => esc_html__('Edit Message Templates', 'event_espresso'),
595
+					'order'      => 5,
596
+					'persistent' => false,
597
+					'url'        => ''
598
+				),
599
+				'metaboxes'     => array('_publish_post_box', '_register_edit_meta_boxes'),
600
+				'has_metaboxes' => true,
601
+				'help_tour'     => array('Message_Templates_Edit_Help_Tour'),
602
+				'help_tabs'     => array(
603
+					'edit_message_template'       => array(
604
+						'title'    => esc_html__('Message Template Editor', 'event_espresso'),
605
+						'callback' => 'edit_message_template_help_tab'
606
+					),
607
+					'message_templates_help_tab'  => array(
608
+						'title'    => esc_html__('Message Templates', 'event_espresso'),
609
+						'filename' => 'messages_templates'
610
+					),
611
+					'message_template_shortcodes' => array(
612
+						'title'    => esc_html__('Message Shortcodes', 'event_espresso'),
613
+						'callback' => 'message_template_shortcodes_help_tab'
614
+					),
615
+					'message_preview_help_tab'    => array(
616
+						'title'    => esc_html__('Message Preview', 'event_espresso'),
617
+						'filename' => 'messages_preview'
618
+					),
619
+					'messages_overview_other_help_tab'                          => array(
620
+						'title'    => esc_html__('Messages Other', 'event_espresso'),
621
+						'filename' => 'messages_overview_other',
622
+					),
623
+				),
624
+				'require_nonce' => false
625
+			),
626
+			'display_preview_message'  => array(
627
+				'nav'           => array(
628
+					'label'      => esc_html__('Message Preview', 'event_espresso'),
629
+					'order'      => 5,
630
+					'url'        => '',
631
+					'persistent' => false
632
+				),
633
+				'help_tabs'     => array(
634
+					'preview_message' => array(
635
+						'title'    => esc_html__('About Previews', 'event_espresso'),
636
+						'callback' => 'preview_message_help_tab'
637
+					)
638
+				),
639
+				'require_nonce' => false
640
+			),
641
+			'settings'                 => array(
642
+				'nav'           => array(
643
+					'label' => esc_html__('Settings', 'event_espresso'),
644
+					'order' => 40
645
+				),
646
+				'metaboxes'     => array('_messages_settings_metaboxes'),
647
+				'help_tabs'     => array(
648
+					'messages_settings_help_tab'               => array(
649
+						'title'    => esc_html__('Messages Settings', 'event_espresso'),
650
+						'filename' => 'messages_settings'
651
+					),
652
+					'messages_settings_message_types_help_tab' => array(
653
+						'title'    => esc_html__('Activating / Deactivating Message Types', 'event_espresso'),
654
+						'filename' => 'messages_settings_message_types'
655
+					),
656
+					'messages_settings_messengers_help_tab'    => array(
657
+						'title'    => esc_html__('Activating / Deactivating Messengers', 'event_espresso'),
658
+						'filename' => 'messages_settings_messengers'
659
+					),
660
+				),
661
+				'help_tour'     => array('Messages_Settings_Help_Tour'),
662
+				'require_nonce' => false
663
+			)
664
+		);
665
+	}
666 666
     
667 667
     
668
-    protected function _add_screen_options()
669
-    {
670
-        //todo
671
-    }
668
+	protected function _add_screen_options()
669
+	{
670
+		//todo
671
+	}
672 672
     
673 673
     
674
-    protected function _add_screen_options_global_mtps()
675
-    {
676
-        /**
677
-         * Note: the reason for the value swap here on $this->_admin_page_title is because $this->_per_page_screen_options
678
-         * uses the $_admin_page_title property and we want different outputs in the different spots.
679
-         */
680
-        $page_title              = $this->_admin_page_title;
681
-        $this->_admin_page_title = esc_html__('Global Message Templates', 'event_espresso');
682
-        $this->_per_page_screen_option();
683
-        $this->_admin_page_title = $page_title;
684
-    }
674
+	protected function _add_screen_options_global_mtps()
675
+	{
676
+		/**
677
+		 * Note: the reason for the value swap here on $this->_admin_page_title is because $this->_per_page_screen_options
678
+		 * uses the $_admin_page_title property and we want different outputs in the different spots.
679
+		 */
680
+		$page_title              = $this->_admin_page_title;
681
+		$this->_admin_page_title = esc_html__('Global Message Templates', 'event_espresso');
682
+		$this->_per_page_screen_option();
683
+		$this->_admin_page_title = $page_title;
684
+	}
685 685
     
686 686
     
687
-    protected function _add_screen_options_default()
688
-    {
689
-        $this->_admin_page_title = esc_html__('Message Activity', 'event_espresso');
690
-        $this->_per_page_screen_option();
691
-    }
687
+	protected function _add_screen_options_default()
688
+	{
689
+		$this->_admin_page_title = esc_html__('Message Activity', 'event_espresso');
690
+		$this->_per_page_screen_option();
691
+	}
692 692
     
693 693
     
694
-    //none of the below group are currently used for Messages
695
-    protected function _add_feature_pointers()
696
-    {
697
-    }
694
+	//none of the below group are currently used for Messages
695
+	protected function _add_feature_pointers()
696
+	{
697
+	}
698 698
     
699
-    public function admin_init()
700
-    {
701
-    }
699
+	public function admin_init()
700
+	{
701
+	}
702 702
     
703
-    public function admin_notices()
704
-    {
705
-    }
703
+	public function admin_notices()
704
+	{
705
+	}
706 706
     
707
-    public function admin_footer_scripts()
708
-    {
709
-    }
707
+	public function admin_footer_scripts()
708
+	{
709
+	}
710 710
     
711 711
     
712
-    public function messages_help_tab()
713
-    {
714
-        EEH_Template::display_template(EE_MSG_TEMPLATE_PATH . 'ee_msg_messages_help_tab.template.php');
715
-    }
712
+	public function messages_help_tab()
713
+	{
714
+		EEH_Template::display_template(EE_MSG_TEMPLATE_PATH . 'ee_msg_messages_help_tab.template.php');
715
+	}
716 716
     
717 717
     
718
-    public function messengers_help_tab()
719
-    {
720
-        EEH_Template::display_template(EE_MSG_TEMPLATE_PATH . 'ee_msg_messenger_help_tab.template.php');
721
-    }
718
+	public function messengers_help_tab()
719
+	{
720
+		EEH_Template::display_template(EE_MSG_TEMPLATE_PATH . 'ee_msg_messenger_help_tab.template.php');
721
+	}
722 722
     
723 723
     
724
-    public function message_types_help_tab()
725
-    {
726
-        EEH_Template::display_template(EE_MSG_TEMPLATE_PATH . 'ee_msg_message_type_help_tab.template.php');
727
-    }
724
+	public function message_types_help_tab()
725
+	{
726
+		EEH_Template::display_template(EE_MSG_TEMPLATE_PATH . 'ee_msg_message_type_help_tab.template.php');
727
+	}
728 728
     
729 729
     
730
-    public function messages_overview_help_tab()
731
-    {
732
-        EEH_Template::display_template(EE_MSG_TEMPLATE_PATH . 'ee_msg_overview_help_tab.template.php');
733
-    }
730
+	public function messages_overview_help_tab()
731
+	{
732
+		EEH_Template::display_template(EE_MSG_TEMPLATE_PATH . 'ee_msg_overview_help_tab.template.php');
733
+	}
734 734
     
735 735
     
736
-    public function message_templates_help_tab()
737
-    {
738
-        EEH_Template::display_template(EE_MSG_TEMPLATE_PATH . 'ee_msg_message_templates_help_tab.template.php');
739
-    }
736
+	public function message_templates_help_tab()
737
+	{
738
+		EEH_Template::display_template(EE_MSG_TEMPLATE_PATH . 'ee_msg_message_templates_help_tab.template.php');
739
+	}
740 740
     
741 741
     
742
-    public function edit_message_template_help_tab()
743
-    {
744
-        $args['img1'] = '<img src="' . EE_MSG_ASSETS_URL . 'images/editor.png' . '" alt="'
745
-                        . esc_attr__('Editor Title', 'event_espresso')
746
-                        . '" />';
747
-        $args['img2'] = '<img src="' . EE_MSG_ASSETS_URL . 'images/switch-context.png' . '" alt="'
748
-                        . esc_attr__('Context Switcher and Preview', 'event_espresso')
749
-                        . '" />';
750
-        $args['img3'] = '<img class="left" src="' . EE_MSG_ASSETS_URL . 'images/form-fields.png' . '" alt="'
751
-                        . esc_attr__('Message Template Form Fields', 'event_espresso')
752
-                        . '" />';
753
-        $args['img4'] = '<img class="right" src="' . EE_MSG_ASSETS_URL . 'images/shortcodes-metabox.png' . '" alt="'
754
-                        . esc_attr__('Shortcodes Metabox', 'event_espresso')
755
-                        . '" />';
756
-        $args['img5'] = '<img class="right" src="' . EE_MSG_ASSETS_URL . 'images/publish-meta-box.png' . '" alt="'
757
-                        . esc_attr__('Publish Metabox', 'event_espresso')
758
-                        . '" />';
759
-        EEH_Template::display_template(
760
-            EE_MSG_TEMPLATE_PATH  . 'ee_msg_messages_templates_editor_help_tab.template.php',
761
-            $args
762
-        );
763
-    }
742
+	public function edit_message_template_help_tab()
743
+	{
744
+		$args['img1'] = '<img src="' . EE_MSG_ASSETS_URL . 'images/editor.png' . '" alt="'
745
+						. esc_attr__('Editor Title', 'event_espresso')
746
+						. '" />';
747
+		$args['img2'] = '<img src="' . EE_MSG_ASSETS_URL . 'images/switch-context.png' . '" alt="'
748
+						. esc_attr__('Context Switcher and Preview', 'event_espresso')
749
+						. '" />';
750
+		$args['img3'] = '<img class="left" src="' . EE_MSG_ASSETS_URL . 'images/form-fields.png' . '" alt="'
751
+						. esc_attr__('Message Template Form Fields', 'event_espresso')
752
+						. '" />';
753
+		$args['img4'] = '<img class="right" src="' . EE_MSG_ASSETS_URL . 'images/shortcodes-metabox.png' . '" alt="'
754
+						. esc_attr__('Shortcodes Metabox', 'event_espresso')
755
+						. '" />';
756
+		$args['img5'] = '<img class="right" src="' . EE_MSG_ASSETS_URL . 'images/publish-meta-box.png' . '" alt="'
757
+						. esc_attr__('Publish Metabox', 'event_espresso')
758
+						. '" />';
759
+		EEH_Template::display_template(
760
+			EE_MSG_TEMPLATE_PATH  . 'ee_msg_messages_templates_editor_help_tab.template.php',
761
+			$args
762
+		);
763
+	}
764 764
     
765 765
     
766
-    public function message_template_shortcodes_help_tab()
767
-    {
768
-        $this->_set_shortcodes();
769
-        $args['shortcodes'] = $this->_shortcodes;
770
-        EEH_Template::display_template(
771
-            EE_MSG_TEMPLATE_PATH . 'ee_msg_messages_shortcodes_help_tab.template.php',
772
-            $args
773
-        );
774
-    }
766
+	public function message_template_shortcodes_help_tab()
767
+	{
768
+		$this->_set_shortcodes();
769
+		$args['shortcodes'] = $this->_shortcodes;
770
+		EEH_Template::display_template(
771
+			EE_MSG_TEMPLATE_PATH . 'ee_msg_messages_shortcodes_help_tab.template.php',
772
+			$args
773
+		);
774
+	}
775 775
     
776 776
     
777
-    public function preview_message_help_tab()
778
-    {
779
-        EEH_Template::display_template(EE_MSG_TEMPLATE_PATH . 'ee_msg_preview_help_tab.template.php');
780
-    }
777
+	public function preview_message_help_tab()
778
+	{
779
+		EEH_Template::display_template(EE_MSG_TEMPLATE_PATH . 'ee_msg_preview_help_tab.template.php');
780
+	}
781 781
     
782 782
     
783
-    public function settings_help_tab()
784
-    {
785
-        $args['img1'] = '<img class="inline-text" src="' . EE_MSG_ASSETS_URL . 'images/email-tab-active.png'
786
-                        . '" alt="' . esc_attr__('Active Email Tab', 'event_espresso') . '" />';
787
-        $args['img2'] = '<img class="inline-text" src="' . EE_MSG_ASSETS_URL . 'images/email-tab-inactive.png'
788
-                        . '" alt="' . esc_attr__('Inactive Email Tab', 'event_espresso') . '" />';
789
-        $args['img3'] = '<div class="switch">'
790
-                        . '<input class="ee-on-off-toggle ee-toggle-round-flat"'
791
-                        . ' type="checkbox" checked="checked">'
792
-                        . '<label for="ee-on-off-toggle-on"></label>'
793
-                        . '</div>';
794
-        $args['img4'] = '<div class="switch">'
795
-                        . '<input class="ee-on-off-toggle ee-toggle-round-flat"'
796
-                        . ' type="checkbox">'
797
-                        . '<label for="ee-on-off-toggle-on"></label>'
798
-                        . '</div>';
799
-        EEH_Template::display_template(EE_MSG_TEMPLATE_PATH . 'ee_msg_messages_settings_help_tab.template.php', $args);
800
-    }
783
+	public function settings_help_tab()
784
+	{
785
+		$args['img1'] = '<img class="inline-text" src="' . EE_MSG_ASSETS_URL . 'images/email-tab-active.png'
786
+						. '" alt="' . esc_attr__('Active Email Tab', 'event_espresso') . '" />';
787
+		$args['img2'] = '<img class="inline-text" src="' . EE_MSG_ASSETS_URL . 'images/email-tab-inactive.png'
788
+						. '" alt="' . esc_attr__('Inactive Email Tab', 'event_espresso') . '" />';
789
+		$args['img3'] = '<div class="switch">'
790
+						. '<input class="ee-on-off-toggle ee-toggle-round-flat"'
791
+						. ' type="checkbox" checked="checked">'
792
+						. '<label for="ee-on-off-toggle-on"></label>'
793
+						. '</div>';
794
+		$args['img4'] = '<div class="switch">'
795
+						. '<input class="ee-on-off-toggle ee-toggle-round-flat"'
796
+						. ' type="checkbox">'
797
+						. '<label for="ee-on-off-toggle-on"></label>'
798
+						. '</div>';
799
+		EEH_Template::display_template(EE_MSG_TEMPLATE_PATH . 'ee_msg_messages_settings_help_tab.template.php', $args);
800
+	}
801 801
     
802 802
     
803
-    public function load_scripts_styles()
804
-    {
805
-        wp_register_style('espresso_ee_msg', EE_MSG_ASSETS_URL . 'ee_message_admin.css', EVENT_ESPRESSO_VERSION);
806
-        wp_enqueue_style('espresso_ee_msg');
807
-        
808
-        wp_register_script('ee-messages-settings', EE_MSG_ASSETS_URL . 'ee-messages-settings.js',
809
-            array('jquery-ui-droppable', 'ee-serialize-full-array'), EVENT_ESPRESSO_VERSION, true);
810
-        wp_register_script('ee-msg-list-table-js', EE_MSG_ASSETS_URL . 'ee_message_admin_list_table.js',
811
-            array('ee-dialog'), EVENT_ESPRESSO_VERSION);
812
-    }
803
+	public function load_scripts_styles()
804
+	{
805
+		wp_register_style('espresso_ee_msg', EE_MSG_ASSETS_URL . 'ee_message_admin.css', EVENT_ESPRESSO_VERSION);
806
+		wp_enqueue_style('espresso_ee_msg');
807
+        
808
+		wp_register_script('ee-messages-settings', EE_MSG_ASSETS_URL . 'ee-messages-settings.js',
809
+			array('jquery-ui-droppable', 'ee-serialize-full-array'), EVENT_ESPRESSO_VERSION, true);
810
+		wp_register_script('ee-msg-list-table-js', EE_MSG_ASSETS_URL . 'ee_message_admin_list_table.js',
811
+			array('ee-dialog'), EVENT_ESPRESSO_VERSION);
812
+	}
813 813
     
814 814
     
815
-    public function load_scripts_styles_default()
816
-    {
817
-        wp_enqueue_script('ee-msg-list-table-js');
818
-    }
815
+	public function load_scripts_styles_default()
816
+	{
817
+		wp_enqueue_script('ee-msg-list-table-js');
818
+	}
819 819
     
820 820
     
821
-    public function wp_editor_css($mce_css)
822
-    {
823
-        //if we're on the edit_message_template route
824
-        if ($this->_req_action === 'edit_message_template' && $this->_active_messenger instanceof EE_messenger) {
825
-            $message_type_name = $this->_active_message_type_name;
821
+	public function wp_editor_css($mce_css)
822
+	{
823
+		//if we're on the edit_message_template route
824
+		if ($this->_req_action === 'edit_message_template' && $this->_active_messenger instanceof EE_messenger) {
825
+			$message_type_name = $this->_active_message_type_name;
826 826
             
827
-            //we're going to REPLACE the existing mce css
828
-            //we need to get the css file location from the active messenger
829
-            $mce_css = $this->_active_messenger->get_variation($this->_template_pack, $message_type_name, true,
830
-                'wpeditor', $this->_variation);
831
-        }
832
-        
833
-        return $mce_css;
834
-    }
827
+			//we're going to REPLACE the existing mce css
828
+			//we need to get the css file location from the active messenger
829
+			$mce_css = $this->_active_messenger->get_variation($this->_template_pack, $message_type_name, true,
830
+				'wpeditor', $this->_variation);
831
+		}
832
+        
833
+		return $mce_css;
834
+	}
835 835
     
836 836
     
837
-    public function load_scripts_styles_edit_message_template()
838
-    {
839
-        
840
-        $this->_set_shortcodes();
841
-        
842
-        EE_Registry::$i18n_js_strings['confirm_default_reset']        = sprintf(
843
-            esc_html__(
844
-                'Are you sure you want to reset the %s %s message templates?  Remember continuing will reset the templates for all contexts in this messenger and message type group.',
845
-                'event_espresso'
846
-            ),
847
-            $this->_message_template_group->messenger_obj()->label['singular'],
848
-            $this->_message_template_group->message_type_obj()->label['singular']
849
-        );
850
-        EE_Registry::$i18n_js_strings['confirm_switch_template_pack'] = esc_html__(
851
-            'Switching the template pack for a messages template will reset the content for the template so the new layout is loaded.  Any custom content in the existing template will be lost. Are you sure you wish to do this?',
852
-            'event_espresso'
853
-        );
854
-        EE_Registry::$i18n_js_strings['server_error'] = esc_html__(
855
-            'An unknown error occurred on the server while attempting to process your request. Please refresh the page and try again or contact support.',
856
-            'event_espresso'
857
-        );
858
-        
859
-        wp_register_script(
860
-            'ee_msgs_edit_js',
861
-            EE_MSG_ASSETS_URL . 'ee_message_editor.js',
862
-            array('jquery'),
863
-            EVENT_ESPRESSO_VERSION
864
-        );
865
-        
866
-        wp_enqueue_script('ee_admin_js');
867
-        wp_enqueue_script('ee_msgs_edit_js');
868
-        
869
-        //add in special css for tiny_mce
870
-        add_filter('mce_css', array($this, 'wp_editor_css'));
871
-    }
837
+	public function load_scripts_styles_edit_message_template()
838
+	{
839
+        
840
+		$this->_set_shortcodes();
841
+        
842
+		EE_Registry::$i18n_js_strings['confirm_default_reset']        = sprintf(
843
+			esc_html__(
844
+				'Are you sure you want to reset the %s %s message templates?  Remember continuing will reset the templates for all contexts in this messenger and message type group.',
845
+				'event_espresso'
846
+			),
847
+			$this->_message_template_group->messenger_obj()->label['singular'],
848
+			$this->_message_template_group->message_type_obj()->label['singular']
849
+		);
850
+		EE_Registry::$i18n_js_strings['confirm_switch_template_pack'] = esc_html__(
851
+			'Switching the template pack for a messages template will reset the content for the template so the new layout is loaded.  Any custom content in the existing template will be lost. Are you sure you wish to do this?',
852
+			'event_espresso'
853
+		);
854
+		EE_Registry::$i18n_js_strings['server_error'] = esc_html__(
855
+			'An unknown error occurred on the server while attempting to process your request. Please refresh the page and try again or contact support.',
856
+			'event_espresso'
857
+		);
858
+        
859
+		wp_register_script(
860
+			'ee_msgs_edit_js',
861
+			EE_MSG_ASSETS_URL . 'ee_message_editor.js',
862
+			array('jquery'),
863
+			EVENT_ESPRESSO_VERSION
864
+		);
865
+        
866
+		wp_enqueue_script('ee_admin_js');
867
+		wp_enqueue_script('ee_msgs_edit_js');
868
+        
869
+		//add in special css for tiny_mce
870
+		add_filter('mce_css', array($this, 'wp_editor_css'));
871
+	}
872 872
     
873 873
     
874
-    public function load_scripts_styles_display_preview_message()
875
-    {
876
-        
877
-        $this->_set_message_template_group();
878
-        
879
-        if (isset($this->_req_data['messenger'])) {
880
-            $this->_active_messenger = $this->_message_resource_manager->get_active_messenger(
881
-                $this->_req_data['messenger']
882
-            );
883
-        }
884
-        
885
-        $message_type_name = isset($this->_req_data['message_type']) ? $this->_req_data['message_type'] : '';
886
-        
887
-        
888
-        wp_enqueue_style('espresso_preview_css',
889
-            $this->_active_messenger->get_variation(
890
-                $this->_template_pack,
891
-                $message_type_name,
892
-                true,
893
-                'preview',
894
-                $this->_variation
895
-            )
896
-        );
897
-    }
874
+	public function load_scripts_styles_display_preview_message()
875
+	{
876
+        
877
+		$this->_set_message_template_group();
878
+        
879
+		if (isset($this->_req_data['messenger'])) {
880
+			$this->_active_messenger = $this->_message_resource_manager->get_active_messenger(
881
+				$this->_req_data['messenger']
882
+			);
883
+		}
884
+        
885
+		$message_type_name = isset($this->_req_data['message_type']) ? $this->_req_data['message_type'] : '';
886
+        
887
+        
888
+		wp_enqueue_style('espresso_preview_css',
889
+			$this->_active_messenger->get_variation(
890
+				$this->_template_pack,
891
+				$message_type_name,
892
+				true,
893
+				'preview',
894
+				$this->_variation
895
+			)
896
+		);
897
+	}
898 898
     
899 899
     
900
-    public function load_scripts_styles_settings()
901
-    {
902
-        wp_register_style(
903
-            'ee-message-settings',
904
-            EE_MSG_ASSETS_URL . 'ee_message_settings.css',
905
-            array(),
906
-            EVENT_ESPRESSO_VERSION
907
-        );
908
-        wp_enqueue_style('ee-text-links');
909
-        wp_enqueue_style('ee-message-settings');
910
-        wp_enqueue_script('ee-messages-settings');
911
-    }
900
+	public function load_scripts_styles_settings()
901
+	{
902
+		wp_register_style(
903
+			'ee-message-settings',
904
+			EE_MSG_ASSETS_URL . 'ee_message_settings.css',
905
+			array(),
906
+			EVENT_ESPRESSO_VERSION
907
+		);
908
+		wp_enqueue_style('ee-text-links');
909
+		wp_enqueue_style('ee-message-settings');
910
+		wp_enqueue_script('ee-messages-settings');
911
+	}
912 912
     
913 913
     
914
-    /**
915
-     * set views array for List Table
916
-     */
917
-    public function _set_list_table_views_global_mtps()
918
-    {
919
-        $this->_views = array(
920
-            'in_use' => array(
921
-                'slug'        => 'in_use',
922
-                'label'       => esc_html__('In Use', 'event_espresso'),
923
-                'count'       => 0,
924
-            )
925
-        );
926
-    }
914
+	/**
915
+	 * set views array for List Table
916
+	 */
917
+	public function _set_list_table_views_global_mtps()
918
+	{
919
+		$this->_views = array(
920
+			'in_use' => array(
921
+				'slug'        => 'in_use',
922
+				'label'       => esc_html__('In Use', 'event_espresso'),
923
+				'count'       => 0,
924
+			)
925
+		);
926
+	}
927 927
 
928 928
 
929
-    /**
930
-     * Set views array for the Custom Template List Table
931
-     */
932
-    public function _set_list_table_views_custom_mtps()
933
-    {
934
-        $this->_set_list_table_views_global_mtps();
935
-        $this->_views['in_use']['bulk_action'] = array(
936
-                'trash_message_template' => esc_html__('Move to Trash', 'event_espresso')
937
-        );
938
-    }
929
+	/**
930
+	 * Set views array for the Custom Template List Table
931
+	 */
932
+	public function _set_list_table_views_custom_mtps()
933
+	{
934
+		$this->_set_list_table_views_global_mtps();
935
+		$this->_views['in_use']['bulk_action'] = array(
936
+				'trash_message_template' => esc_html__('Move to Trash', 'event_espresso')
937
+		);
938
+	}
939 939
 
940 940
 
941
-    /**
942
-     * set views array for message queue list table
943
-     *
944
-     * @throws InvalidDataTypeException
945
-     * @throws InvalidInterfaceException
946
-     * @throws InvalidArgumentException
947
-     * @throws EE_Error
948
-     * @throws ReflectionException
949
-     */
950
-    public function _set_list_table_views_default()
951
-    {
952
-        EE_Registry::instance()->load_helper('Template');
953
-        
954
-        $common_bulk_actions = EE_Registry::instance()->CAP->current_user_can(
955
-            'ee_send_message',
956
-            'message_list_table_bulk_actions'
957
-        )
958
-            ? array(
959
-                'generate_now'          => esc_html__('Generate Now', 'event_espresso'),
960
-                'generate_and_send_now' => esc_html__('Generate and Send Now', 'event_espresso'),
961
-                'queue_for_resending'   => esc_html__('Queue for Resending', 'event_espresso'),
962
-                'send_now'              => esc_html__('Send Now', 'event_espresso')
963
-            )
964
-            : array();
965
-        
966
-        $delete_bulk_action = EE_Registry::instance()->CAP->current_user_can(
967
-            'ee_delete_messages',
968
-            'message_list_table_bulk_actions'
969
-        )
970
-            ? array('delete_ee_messages' => esc_html__('Delete Messages', 'event_espresso'))
971
-            : array();
972
-        
973
-        
974
-        $this->_views = array(
975
-            'all' => array(
976
-                'slug'        => 'all',
977
-                'label'       => esc_html__('All', 'event_espresso'),
978
-                'count'       => 0,
979
-                'bulk_action' => array_merge($common_bulk_actions, $delete_bulk_action)
980
-            )
981
-        );
982
-        
983
-        
984
-        foreach (EEM_Message::instance()->all_statuses() as $status) {
985
-            if ($status === EEM_Message::status_debug_only && ! EEM_Message::debug()) {
986
-                continue;
987
-            }
988
-            $status_bulk_actions = $common_bulk_actions;
989
-            //unset bulk actions not applying to status
990
-            if (! empty($status_bulk_actions)) {
991
-                switch ($status) {
992
-                    case EEM_Message::status_idle:
993
-                    case EEM_Message::status_resend:
994
-                        $status_bulk_actions['send_now'] = $common_bulk_actions['send_now'];
995
-                        break;
941
+	/**
942
+	 * set views array for message queue list table
943
+	 *
944
+	 * @throws InvalidDataTypeException
945
+	 * @throws InvalidInterfaceException
946
+	 * @throws InvalidArgumentException
947
+	 * @throws EE_Error
948
+	 * @throws ReflectionException
949
+	 */
950
+	public function _set_list_table_views_default()
951
+	{
952
+		EE_Registry::instance()->load_helper('Template');
953
+        
954
+		$common_bulk_actions = EE_Registry::instance()->CAP->current_user_can(
955
+			'ee_send_message',
956
+			'message_list_table_bulk_actions'
957
+		)
958
+			? array(
959
+				'generate_now'          => esc_html__('Generate Now', 'event_espresso'),
960
+				'generate_and_send_now' => esc_html__('Generate and Send Now', 'event_espresso'),
961
+				'queue_for_resending'   => esc_html__('Queue for Resending', 'event_espresso'),
962
+				'send_now'              => esc_html__('Send Now', 'event_espresso')
963
+			)
964
+			: array();
965
+        
966
+		$delete_bulk_action = EE_Registry::instance()->CAP->current_user_can(
967
+			'ee_delete_messages',
968
+			'message_list_table_bulk_actions'
969
+		)
970
+			? array('delete_ee_messages' => esc_html__('Delete Messages', 'event_espresso'))
971
+			: array();
972
+        
973
+        
974
+		$this->_views = array(
975
+			'all' => array(
976
+				'slug'        => 'all',
977
+				'label'       => esc_html__('All', 'event_espresso'),
978
+				'count'       => 0,
979
+				'bulk_action' => array_merge($common_bulk_actions, $delete_bulk_action)
980
+			)
981
+		);
982
+        
983
+        
984
+		foreach (EEM_Message::instance()->all_statuses() as $status) {
985
+			if ($status === EEM_Message::status_debug_only && ! EEM_Message::debug()) {
986
+				continue;
987
+			}
988
+			$status_bulk_actions = $common_bulk_actions;
989
+			//unset bulk actions not applying to status
990
+			if (! empty($status_bulk_actions)) {
991
+				switch ($status) {
992
+					case EEM_Message::status_idle:
993
+					case EEM_Message::status_resend:
994
+						$status_bulk_actions['send_now'] = $common_bulk_actions['send_now'];
995
+						break;
996 996
                     
997
-                    case EEM_Message::status_failed:
998
-                    case EEM_Message::status_debug_only:
999
-                    case EEM_Message::status_messenger_executing:
1000
-                        $status_bulk_actions = array();
1001
-                        break;
997
+					case EEM_Message::status_failed:
998
+					case EEM_Message::status_debug_only:
999
+					case EEM_Message::status_messenger_executing:
1000
+						$status_bulk_actions = array();
1001
+						break;
1002 1002
                     
1003
-                    case EEM_Message::status_incomplete:
1004
-                        unset($status_bulk_actions['queue_for_resending'], $status_bulk_actions['send_now']);
1005
-                        break;
1003
+					case EEM_Message::status_incomplete:
1004
+						unset($status_bulk_actions['queue_for_resending'], $status_bulk_actions['send_now']);
1005
+						break;
1006 1006
                     
1007
-                    case EEM_Message::status_retry:
1008
-                    case EEM_Message::status_sent:
1009
-                        unset($status_bulk_actions['generate_now'], $status_bulk_actions['generate_and_send_now']);
1010
-                        break;
1011
-                }
1012
-            }
1007
+					case EEM_Message::status_retry:
1008
+					case EEM_Message::status_sent:
1009
+						unset($status_bulk_actions['generate_now'], $status_bulk_actions['generate_and_send_now']);
1010
+						break;
1011
+				}
1012
+			}
1013 1013
 
1014
-            //skip adding messenger executing status to views because it will be included with the Failed view.
1015
-            if ( $status === EEM_Message::status_messenger_executing ) {
1016
-                continue;
1017
-            }
1014
+			//skip adding messenger executing status to views because it will be included with the Failed view.
1015
+			if ( $status === EEM_Message::status_messenger_executing ) {
1016
+				continue;
1017
+			}
1018 1018
             
1019
-            $this->_views[strtolower($status)] = array(
1020
-                'slug'        => strtolower($status),
1021
-                'label'       => EEH_Template::pretty_status($status, false, 'sentence'),
1022
-                'count'       => 0,
1023
-                'bulk_action' => array_merge($status_bulk_actions, $delete_bulk_action)
1024
-            );
1025
-        }
1026
-    }
1019
+			$this->_views[strtolower($status)] = array(
1020
+				'slug'        => strtolower($status),
1021
+				'label'       => EEH_Template::pretty_status($status, false, 'sentence'),
1022
+				'count'       => 0,
1023
+				'bulk_action' => array_merge($status_bulk_actions, $delete_bulk_action)
1024
+			);
1025
+		}
1026
+	}
1027 1027
     
1028 1028
     
1029
-    protected function _ee_default_messages_overview_list_table()
1030
-    {
1031
-        $this->_admin_page_title = esc_html__('Default Message Templates', 'event_espresso');
1032
-        $this->display_admin_list_table_page_with_no_sidebar();
1033
-    }
1029
+	protected function _ee_default_messages_overview_list_table()
1030
+	{
1031
+		$this->_admin_page_title = esc_html__('Default Message Templates', 'event_espresso');
1032
+		$this->display_admin_list_table_page_with_no_sidebar();
1033
+	}
1034 1034
     
1035 1035
     
1036
-    protected function _message_queue_list_table()
1037
-    {
1038
-        $this->_search_btn_label                   = esc_html__('Message Activity', 'event_espresso');
1039
-        $this->_template_args['per_column']        = 6;
1040
-        $this->_template_args['after_list_table']  = $this->_display_legend($this->_message_legend_items());
1041
-        $this->_template_args['before_list_table'] = '<h3>'
1042
-                                                     . EEM_Message::instance()->get_pretty_label_for_results()
1043
-                                                     . '</h3>';
1044
-        $this->display_admin_list_table_page_with_no_sidebar();
1045
-    }
1036
+	protected function _message_queue_list_table()
1037
+	{
1038
+		$this->_search_btn_label                   = esc_html__('Message Activity', 'event_espresso');
1039
+		$this->_template_args['per_column']        = 6;
1040
+		$this->_template_args['after_list_table']  = $this->_display_legend($this->_message_legend_items());
1041
+		$this->_template_args['before_list_table'] = '<h3>'
1042
+													 . EEM_Message::instance()->get_pretty_label_for_results()
1043
+													 . '</h3>';
1044
+		$this->display_admin_list_table_page_with_no_sidebar();
1045
+	}
1046 1046
     
1047 1047
     
1048
-    protected function _message_legend_items()
1049
-    {
1050
-        
1051
-        $action_css_classes = EEH_MSG_Template::get_message_action_icons();
1052
-        $action_items       = array();
1053
-        
1054
-        foreach ($action_css_classes as $action_item => $action_details) {
1055
-            if ($action_item === 'see_notifications_for') {
1056
-                continue;
1057
-            }
1058
-            $action_items[$action_item] = array(
1059
-                'class' => $action_details['css_class'],
1060
-                'desc'  => $action_details['label']
1061
-            );
1062
-        }
1063
-        
1064
-        /** @type array $status_items status legend setup */
1065
-        $status_items = array(
1066
-            'sent_status'       => array(
1067
-                'class' => 'ee-status-legend ee-status-legend-' . EEM_Message::status_sent,
1068
-                'desc'  => EEH_Template::pretty_status(EEM_Message::status_sent, false, 'sentence')
1069
-            ),
1070
-            'idle_status'       => array(
1071
-                'class' => 'ee-status-legend ee-status-legend-' . EEM_Message::status_idle,
1072
-                'desc'  => EEH_Template::pretty_status(EEM_Message::status_idle, false, 'sentence')
1073
-            ),
1074
-            'failed_status'     => array(
1075
-                'class' => 'ee-status-legend ee-status-legend-' . EEM_Message::status_failed,
1076
-                'desc'  => EEH_Template::pretty_status(EEM_Message::status_failed, false, 'sentence')
1077
-            ),
1078
-            'messenger_executing_status' => array(
1079
-                'class' => 'ee-status-legend ee-status-legend-' . EEM_Message::status_messenger_executing,
1080
-                'desc' => EEH_Template::pretty_status(EEM_Message::status_messenger_executing, false, 'sentence')
1081
-            ),
1082
-            'resend_status'     => array(
1083
-                'class' => 'ee-status-legend ee-status-legend-' . EEM_Message::status_resend,
1084
-                'desc'  => EEH_Template::pretty_status(EEM_Message::status_resend, false, 'sentence')
1085
-            ),
1086
-            'incomplete_status' => array(
1087
-                'class' => 'ee-status-legend ee-status-legend-' . EEM_Message::status_incomplete,
1088
-                'desc'  => EEH_Template::pretty_status(EEM_Message::status_incomplete, false, 'sentence')
1089
-            ),
1090
-            'retry_status'      => array(
1091
-                'class' => 'ee-status-legend ee-status-legend-' . EEM_Message::status_retry,
1092
-                'desc'  => EEH_Template::pretty_status(EEM_Message::status_retry, false, 'sentence')
1093
-            )
1094
-        );
1095
-        if (EEM_Message::debug()) {
1096
-            $status_items['debug_only_status'] = array(
1097
-                'class' => 'ee-status-legend ee-status-legend-' . EEM_Message::status_debug_only,
1098
-                'desc'  => EEH_Template::pretty_status(EEM_Message::status_debug_only, false, 'sentence')
1099
-            );
1100
-        }
1101
-        
1102
-        return array_merge($action_items, $status_items);
1103
-    }
1048
+	protected function _message_legend_items()
1049
+	{
1050
+        
1051
+		$action_css_classes = EEH_MSG_Template::get_message_action_icons();
1052
+		$action_items       = array();
1053
+        
1054
+		foreach ($action_css_classes as $action_item => $action_details) {
1055
+			if ($action_item === 'see_notifications_for') {
1056
+				continue;
1057
+			}
1058
+			$action_items[$action_item] = array(
1059
+				'class' => $action_details['css_class'],
1060
+				'desc'  => $action_details['label']
1061
+			);
1062
+		}
1063
+        
1064
+		/** @type array $status_items status legend setup */
1065
+		$status_items = array(
1066
+			'sent_status'       => array(
1067
+				'class' => 'ee-status-legend ee-status-legend-' . EEM_Message::status_sent,
1068
+				'desc'  => EEH_Template::pretty_status(EEM_Message::status_sent, false, 'sentence')
1069
+			),
1070
+			'idle_status'       => array(
1071
+				'class' => 'ee-status-legend ee-status-legend-' . EEM_Message::status_idle,
1072
+				'desc'  => EEH_Template::pretty_status(EEM_Message::status_idle, false, 'sentence')
1073
+			),
1074
+			'failed_status'     => array(
1075
+				'class' => 'ee-status-legend ee-status-legend-' . EEM_Message::status_failed,
1076
+				'desc'  => EEH_Template::pretty_status(EEM_Message::status_failed, false, 'sentence')
1077
+			),
1078
+			'messenger_executing_status' => array(
1079
+				'class' => 'ee-status-legend ee-status-legend-' . EEM_Message::status_messenger_executing,
1080
+				'desc' => EEH_Template::pretty_status(EEM_Message::status_messenger_executing, false, 'sentence')
1081
+			),
1082
+			'resend_status'     => array(
1083
+				'class' => 'ee-status-legend ee-status-legend-' . EEM_Message::status_resend,
1084
+				'desc'  => EEH_Template::pretty_status(EEM_Message::status_resend, false, 'sentence')
1085
+			),
1086
+			'incomplete_status' => array(
1087
+				'class' => 'ee-status-legend ee-status-legend-' . EEM_Message::status_incomplete,
1088
+				'desc'  => EEH_Template::pretty_status(EEM_Message::status_incomplete, false, 'sentence')
1089
+			),
1090
+			'retry_status'      => array(
1091
+				'class' => 'ee-status-legend ee-status-legend-' . EEM_Message::status_retry,
1092
+				'desc'  => EEH_Template::pretty_status(EEM_Message::status_retry, false, 'sentence')
1093
+			)
1094
+		);
1095
+		if (EEM_Message::debug()) {
1096
+			$status_items['debug_only_status'] = array(
1097
+				'class' => 'ee-status-legend ee-status-legend-' . EEM_Message::status_debug_only,
1098
+				'desc'  => EEH_Template::pretty_status(EEM_Message::status_debug_only, false, 'sentence')
1099
+			);
1100
+		}
1101
+        
1102
+		return array_merge($action_items, $status_items);
1103
+	}
1104 1104
     
1105 1105
     
1106
-    protected function _custom_mtps_preview()
1107
-    {
1108
-        $this->_admin_page_title              = esc_html__('Custom Message Templates (Preview)', 'event_espresso');
1109
-        $this->_template_args['preview_img']  = '<img src="' . EE_MSG_ASSETS_URL . 'images/custom_mtps_preview.png"'
1110
-            . ' alt="' . esc_attr__('Preview Custom Message Templates screenshot', 'event_espresso') . '" />';
1111
-        $this->_template_args['preview_text'] = '<strong>'
1112
-            . esc_html__(
1113
-                'Custom Message Templates is a feature that is only available in the premium version of Event Espresso 4 which is available with a support license purchase on EventEspresso.com. With the Custom Message Templates feature, you are able to create custom message templates and assign them on a per-event basis.',
1114
-                'event_espresso'
1115
-            )
1116
-            . '</strong>';
1106
+	protected function _custom_mtps_preview()
1107
+	{
1108
+		$this->_admin_page_title              = esc_html__('Custom Message Templates (Preview)', 'event_espresso');
1109
+		$this->_template_args['preview_img']  = '<img src="' . EE_MSG_ASSETS_URL . 'images/custom_mtps_preview.png"'
1110
+			. ' alt="' . esc_attr__('Preview Custom Message Templates screenshot', 'event_espresso') . '" />';
1111
+		$this->_template_args['preview_text'] = '<strong>'
1112
+			. esc_html__(
1113
+				'Custom Message Templates is a feature that is only available in the premium version of Event Espresso 4 which is available with a support license purchase on EventEspresso.com. With the Custom Message Templates feature, you are able to create custom message templates and assign them on a per-event basis.',
1114
+				'event_espresso'
1115
+			)
1116
+			. '</strong>';
1117 1117
 
1118
-        $this->display_admin_caf_preview_page('custom_message_types', false);
1119
-    }
1118
+		$this->display_admin_caf_preview_page('custom_message_types', false);
1119
+	}
1120 1120
 
1121 1121
 
1122
-    /**
1123
-     * get_message_templates
1124
-     * This gets all the message templates for listing on the overview list.
1125
-     *
1126
-     * @access public
1127
-     * @param int    $perpage the amount of templates groups to show per page
1128
-     * @param string $type    the current _view we're getting templates for
1129
-     * @param bool   $count   return count?
1130
-     * @param bool   $all     disregard any paging info (get all data);
1131
-     * @param bool   $global  whether to return just global (true) or custom templates (false)
1132
-     * @return array
1133
-     * @throws EE_Error
1134
-     * @throws InvalidArgumentException
1135
-     * @throws InvalidDataTypeException
1136
-     * @throws InvalidInterfaceException
1137
-     */
1138
-    public function get_message_templates(
1139
-        $perpage = 10,
1140
-        $type = 'in_use',
1141
-        $count = false,
1142
-        $all = false,
1143
-        $global = true)
1144
-    {
1145
-        
1146
-        $MTP = EEM_Message_Template_Group::instance();
1147
-        
1148
-        $this->_req_data['orderby'] = empty($this->_req_data['orderby']) ? 'GRP_ID' : $this->_req_data['orderby'];
1149
-        $orderby                    = $this->_req_data['orderby'];
1150
-        
1151
-        $order = (isset($this->_req_data['order']) && ! empty($this->_req_data['order']))
1152
-            ? $this->_req_data['order']
1153
-            : 'ASC';
1154
-        
1155
-        $current_page = isset($this->_req_data['paged']) && ! empty($this->_req_data['paged'])
1156
-            ? $this->_req_data['paged']
1157
-            : 1;
1158
-        $per_page     = isset($this->_req_data['perpage']) && ! empty($this->_req_data['perpage'])
1159
-            ? $this->_req_data['perpage']
1160
-            : $perpage;
1161
-        
1162
-        $offset = ($current_page - 1) * $per_page;
1163
-        $limit  = $all ? null : array($offset, $per_page);
1164
-        
1165
-        
1166
-        //options will match what is in the _views array property
1167
-        switch ($type) {
1168
-            case 'in_use':
1169
-                $templates = $MTP->get_all_active_message_templates($orderby, $order, $limit, $count, $global, true);
1170
-                break;
1171
-            default:
1172
-                $templates = $MTP->get_all_trashed_grouped_message_templates($orderby, $order, $limit, $count, $global);
1173
-        }
1174
-        
1175
-        return $templates;
1176
-    }
1122
+	/**
1123
+	 * get_message_templates
1124
+	 * This gets all the message templates for listing on the overview list.
1125
+	 *
1126
+	 * @access public
1127
+	 * @param int    $perpage the amount of templates groups to show per page
1128
+	 * @param string $type    the current _view we're getting templates for
1129
+	 * @param bool   $count   return count?
1130
+	 * @param bool   $all     disregard any paging info (get all data);
1131
+	 * @param bool   $global  whether to return just global (true) or custom templates (false)
1132
+	 * @return array
1133
+	 * @throws EE_Error
1134
+	 * @throws InvalidArgumentException
1135
+	 * @throws InvalidDataTypeException
1136
+	 * @throws InvalidInterfaceException
1137
+	 */
1138
+	public function get_message_templates(
1139
+		$perpage = 10,
1140
+		$type = 'in_use',
1141
+		$count = false,
1142
+		$all = false,
1143
+		$global = true)
1144
+	{
1145
+        
1146
+		$MTP = EEM_Message_Template_Group::instance();
1147
+        
1148
+		$this->_req_data['orderby'] = empty($this->_req_data['orderby']) ? 'GRP_ID' : $this->_req_data['orderby'];
1149
+		$orderby                    = $this->_req_data['orderby'];
1150
+        
1151
+		$order = (isset($this->_req_data['order']) && ! empty($this->_req_data['order']))
1152
+			? $this->_req_data['order']
1153
+			: 'ASC';
1154
+        
1155
+		$current_page = isset($this->_req_data['paged']) && ! empty($this->_req_data['paged'])
1156
+			? $this->_req_data['paged']
1157
+			: 1;
1158
+		$per_page     = isset($this->_req_data['perpage']) && ! empty($this->_req_data['perpage'])
1159
+			? $this->_req_data['perpage']
1160
+			: $perpage;
1161
+        
1162
+		$offset = ($current_page - 1) * $per_page;
1163
+		$limit  = $all ? null : array($offset, $per_page);
1164
+        
1165
+        
1166
+		//options will match what is in the _views array property
1167
+		switch ($type) {
1168
+			case 'in_use':
1169
+				$templates = $MTP->get_all_active_message_templates($orderby, $order, $limit, $count, $global, true);
1170
+				break;
1171
+			default:
1172
+				$templates = $MTP->get_all_trashed_grouped_message_templates($orderby, $order, $limit, $count, $global);
1173
+		}
1174
+        
1175
+		return $templates;
1176
+	}
1177 1177
     
1178 1178
     
1179
-    /**
1180
-     * filters etc might need a list of installed message_types
1181
-     * @return array an array of message type objects
1182
-     */
1183
-    public function get_installed_message_types()
1184
-    {
1185
-        $installed_message_types = $this->_message_resource_manager->installed_message_types();
1186
-        $installed               = array();
1187
-        
1188
-        foreach ($installed_message_types as $message_type) {
1189
-            $installed[$message_type->name] = $message_type;
1190
-        }
1191
-        
1192
-        return $installed;
1193
-    }
1179
+	/**
1180
+	 * filters etc might need a list of installed message_types
1181
+	 * @return array an array of message type objects
1182
+	 */
1183
+	public function get_installed_message_types()
1184
+	{
1185
+		$installed_message_types = $this->_message_resource_manager->installed_message_types();
1186
+		$installed               = array();
1187
+        
1188
+		foreach ($installed_message_types as $message_type) {
1189
+			$installed[$message_type->name] = $message_type;
1190
+		}
1191
+        
1192
+		return $installed;
1193
+	}
1194 1194
     
1195 1195
     
1196
-    /**
1197
-     * _add_message_template
1198
-     *
1199
-     * This is used when creating a custom template. All Custom Templates start based off another template.
1200
-     *
1201
-     * @param string $message_type
1202
-     * @param string $messenger
1203
-     * @param string $GRP_ID
1204
-     *
1205
-     * @throws EE_error
1206
-     */
1207
-    protected function _add_message_template($message_type = '', $messenger = '', $GRP_ID = '')
1208
-    {
1209
-        //set values override any request data
1210
-        $message_type = ! empty($message_type) ? $message_type : '';
1211
-        $message_type = empty($message_type) && ! empty($this->_req_data['message_type'])
1212
-            ? $this->_req_data['message_type']
1213
-            : $message_type;
1214
-        
1215
-        $messenger = ! empty($messenger) ? $messenger : '';
1216
-        $messenger = empty($messenger) && ! empty($this->_req_data['messenger'])
1217
-            ? $this->_req_data['messenger']
1218
-            : $messenger;
1219
-        
1220
-        $GRP_ID = ! empty($GRP_ID) ? $GRP_ID : '';
1221
-        $GRP_ID = empty($GRP_ID) && ! empty($this->_req_data['GRP_ID']) ? $this->_req_data['GRP_ID'] : $GRP_ID;
1222
-        
1223
-        //we need messenger and message type.  They should be coming from the event editor. If not here then return error
1224
-        if (empty($message_type) || empty($messenger)) {
1225
-            throw new EE_Error(
1226
-                esc_html__(
1227
-                    'Sorry, but we can\'t create new templates because we\'re missing the messenger or message type',
1228
-                    'event_espresso'
1229
-                )
1230
-            );
1231
-        }
1232
-        
1233
-        //we need the GRP_ID for the template being used as the base for the new template
1234
-        if (empty($GRP_ID)) {
1235
-            throw new EE_Error(
1236
-                esc_html__(
1237
-                    'In order to create a custom message template the GRP_ID of the template being used as a base is needed',
1238
-                    'event_espresso'
1239
-                )
1240
-            );
1241
-        }
1242
-        
1243
-        //let's just make sure the template gets generated!
1244
-        
1245
-        //we need to reassign some variables for what the insert is expecting
1246
-        $this->_req_data['MTP_messenger']    = $messenger;
1247
-        $this->_req_data['MTP_message_type'] = $message_type;
1248
-        $this->_req_data['GRP_ID']           = $GRP_ID;
1249
-        $this->_insert_or_update_message_template(true);
1250
-    }
1196
+	/**
1197
+	 * _add_message_template
1198
+	 *
1199
+	 * This is used when creating a custom template. All Custom Templates start based off another template.
1200
+	 *
1201
+	 * @param string $message_type
1202
+	 * @param string $messenger
1203
+	 * @param string $GRP_ID
1204
+	 *
1205
+	 * @throws EE_error
1206
+	 */
1207
+	protected function _add_message_template($message_type = '', $messenger = '', $GRP_ID = '')
1208
+	{
1209
+		//set values override any request data
1210
+		$message_type = ! empty($message_type) ? $message_type : '';
1211
+		$message_type = empty($message_type) && ! empty($this->_req_data['message_type'])
1212
+			? $this->_req_data['message_type']
1213
+			: $message_type;
1214
+        
1215
+		$messenger = ! empty($messenger) ? $messenger : '';
1216
+		$messenger = empty($messenger) && ! empty($this->_req_data['messenger'])
1217
+			? $this->_req_data['messenger']
1218
+			: $messenger;
1219
+        
1220
+		$GRP_ID = ! empty($GRP_ID) ? $GRP_ID : '';
1221
+		$GRP_ID = empty($GRP_ID) && ! empty($this->_req_data['GRP_ID']) ? $this->_req_data['GRP_ID'] : $GRP_ID;
1222
+        
1223
+		//we need messenger and message type.  They should be coming from the event editor. If not here then return error
1224
+		if (empty($message_type) || empty($messenger)) {
1225
+			throw new EE_Error(
1226
+				esc_html__(
1227
+					'Sorry, but we can\'t create new templates because we\'re missing the messenger or message type',
1228
+					'event_espresso'
1229
+				)
1230
+			);
1231
+		}
1232
+        
1233
+		//we need the GRP_ID for the template being used as the base for the new template
1234
+		if (empty($GRP_ID)) {
1235
+			throw new EE_Error(
1236
+				esc_html__(
1237
+					'In order to create a custom message template the GRP_ID of the template being used as a base is needed',
1238
+					'event_espresso'
1239
+				)
1240
+			);
1241
+		}
1242
+        
1243
+		//let's just make sure the template gets generated!
1244
+        
1245
+		//we need to reassign some variables for what the insert is expecting
1246
+		$this->_req_data['MTP_messenger']    = $messenger;
1247
+		$this->_req_data['MTP_message_type'] = $message_type;
1248
+		$this->_req_data['GRP_ID']           = $GRP_ID;
1249
+		$this->_insert_or_update_message_template(true);
1250
+	}
1251 1251
 
1252 1252
 
1253
-    /**
1254
-     * public wrapper for the _add_message_template method
1255
-     *
1256
-     * @param string $message_type     message type slug
1257
-     * @param string $messenger        messenger slug
1258
-     * @param int    $GRP_ID           GRP_ID for the related message template group this new template will be based
1259
-     *                                 off of.
1260
-     * @throws EE_error
1261
-     */
1262
-    public function add_message_template($message_type, $messenger, $GRP_ID)
1263
-    {
1264
-        $this->_add_message_template($message_type, $messenger, $GRP_ID);
1265
-    }
1253
+	/**
1254
+	 * public wrapper for the _add_message_template method
1255
+	 *
1256
+	 * @param string $message_type     message type slug
1257
+	 * @param string $messenger        messenger slug
1258
+	 * @param int    $GRP_ID           GRP_ID for the related message template group this new template will be based
1259
+	 *                                 off of.
1260
+	 * @throws EE_error
1261
+	 */
1262
+	public function add_message_template($message_type, $messenger, $GRP_ID)
1263
+	{
1264
+		$this->_add_message_template($message_type, $messenger, $GRP_ID);
1265
+	}
1266 1266
 
1267 1267
 
1268
-    /**
1269
-     * _edit_message_template
1270
-     *
1271
-     * @access protected
1272
-     * @return void
1273
-     * @throws InvalidIdentifierException
1274
-     * @throws DomainException
1275
-     * @throws EE_Error
1276
-     * @throws InvalidArgumentException
1277
-     * @throws ReflectionException
1278
-     * @throws InvalidDataTypeException
1279
-     * @throws InvalidInterfaceException
1280
-     */
1281
-    protected function _edit_message_template()
1282
-    {
1283
-        do_action('AHEE_log', __FILE__, __FUNCTION__, '');
1284
-        $template_fields = '';
1285
-        $sidebar_fields  = '';
1286
-        //we filter the tinyMCE settings to remove the validation since message templates by their nature will not have
1287
-        // valid html in the templates.
1288
-        add_filter('tiny_mce_before_init', array($this, 'filter_tinymce_init'), 10, 2);
1289
-        
1290
-        $GRP_ID = isset($this->_req_data['id']) && ! empty($this->_req_data['id'])
1291
-            ? absint($this->_req_data['id'])
1292
-            : false;
1293
-        
1294
-        $this->_set_shortcodes(); //this also sets the _message_template property.
1295
-        $message_template_group = $this->_message_template_group;
1296
-        $c_label                = $message_template_group->context_label();
1297
-        $c_config               = $message_template_group->contexts_config();
1298
-        
1299
-        reset($c_config);
1300
-        $context = isset($this->_req_data['context']) && ! empty($this->_req_data['context'])
1301
-            ? strtolower($this->_req_data['context'])
1302
-            : key($c_config);
1303
-        
1304
-        
1305
-        if (empty($GRP_ID)) {
1306
-            $action = 'insert_message_template';
1307
-            $edit_message_template_form_url = add_query_arg(
1308
-                array('action' => $action, 'noheader' => true),
1309
-                EE_MSG_ADMIN_URL
1310
-            );
1311
-        } else {
1312
-            $action = 'update_message_template';
1313
-            $edit_message_template_form_url = add_query_arg(
1314
-                array('action' => $action, 'noheader' => true),
1315
-                EE_MSG_ADMIN_URL
1316
-            );
1317
-        }
1318
-        
1319
-        //set active messenger for this view
1320
-        $this->_active_messenger         = $this->_message_resource_manager->get_active_messenger(
1321
-            $message_template_group->messenger()
1322
-        );
1323
-        $this->_active_message_type_name = $message_template_group->message_type();
1324
-        
1325
-        
1326
-        //Do we have any validation errors?
1327
-        $validators = $this->_get_transient();
1328
-        $v_fields   = ! empty($validators) ? array_keys($validators) : array();
1329
-        
1330
-        
1331
-        //we need to assemble the title from Various details
1332
-        $context_label = sprintf(
1333
-            esc_html__('(%s %s)', 'event_espresso'),
1334
-            $c_config[$context]['label'],
1335
-            ucwords($c_label['label'])
1336
-        );
1337
-        
1338
-        $title = sprintf(
1339
-            esc_html__(' %s %s Template %s', 'event_espresso'),
1340
-            ucwords($message_template_group->messenger_obj()->label['singular']),
1341
-            ucwords($message_template_group->message_type_obj()->label['singular']),
1342
-            $context_label
1343
-        );
1344
-        
1345
-        $this->_template_args['GRP_ID']           = $GRP_ID;
1346
-        $this->_template_args['message_template'] = $message_template_group;
1347
-        $this->_template_args['is_extra_fields']  = false;
1348
-        
1349
-        
1350
-        //let's get EEH_MSG_Template so we can get template form fields
1351
-        $template_field_structure = EEH_MSG_Template::get_fields(
1352
-            $message_template_group->messenger(),
1353
-            $message_template_group->message_type()
1354
-        );
1355
-        
1356
-        if ( ! $template_field_structure) {
1357
-            $template_field_structure = false;
1358
-            $template_fields          = esc_html__(
1359
-                'There was an error in assembling the fields for this display (you should see an error message)',
1360
-                'event_espresso'
1361
-            );
1362
-        }
1363
-        
1364
-        
1365
-        $message_templates = $message_template_group->context_templates();
1366
-        
1367
-        
1368
-        //if we have the extra key.. then we need to remove the content index from the template_field_structure as it
1369
-        // will get handled in the "extra" array.
1370
-        if (is_array($template_field_structure[$context]) && isset($template_field_structure[$context]['extra'])) {
1371
-            foreach ($template_field_structure[$context]['extra'] as $reference_field => $new_fields) {
1372
-                unset($template_field_structure[$context][$reference_field]);
1373
-            }
1374
-        }
1375
-        
1376
-        //let's loop through the template_field_structure and actually assemble the input fields!
1377
-        if ( ! empty($template_field_structure)) {
1378
-            foreach ($template_field_structure[$context] as $template_field => $field_setup_array) {
1379
-                //if this is an 'extra' template field then we need to remove any existing fields that are keyed up in
1380
-                // the extra array and reset them.
1381
-                if ($template_field === 'extra') {
1382
-                    $this->_template_args['is_extra_fields'] = true;
1383
-                    foreach ($field_setup_array as $reference_field => $new_fields_array) {
1384
-                        $message_template = $message_templates[$context][$reference_field];
1385
-                        $content          = $message_template instanceof EE_Message_Template
1386
-                            ? $message_template->get('MTP_content')
1387
-                            : '';
1388
-                        foreach ($new_fields_array as $extra_field => $extra_array) {
1389
-                            //let's verify if we need this extra field via the shortcodes parameter.
1390
-                            $continue = false;
1391
-                            if (isset($extra_array['shortcodes_required'])) {
1392
-                                foreach ((array)$extra_array['shortcodes_required'] as $shortcode) {
1393
-                                    if ( ! array_key_exists($shortcode, $this->_shortcodes)) {
1394
-                                        $continue = true;
1395
-                                    }
1396
-                                }
1397
-                                if ($continue) {
1398
-                                    continue;
1399
-                                }
1400
-                            }
1268
+	/**
1269
+	 * _edit_message_template
1270
+	 *
1271
+	 * @access protected
1272
+	 * @return void
1273
+	 * @throws InvalidIdentifierException
1274
+	 * @throws DomainException
1275
+	 * @throws EE_Error
1276
+	 * @throws InvalidArgumentException
1277
+	 * @throws ReflectionException
1278
+	 * @throws InvalidDataTypeException
1279
+	 * @throws InvalidInterfaceException
1280
+	 */
1281
+	protected function _edit_message_template()
1282
+	{
1283
+		do_action('AHEE_log', __FILE__, __FUNCTION__, '');
1284
+		$template_fields = '';
1285
+		$sidebar_fields  = '';
1286
+		//we filter the tinyMCE settings to remove the validation since message templates by their nature will not have
1287
+		// valid html in the templates.
1288
+		add_filter('tiny_mce_before_init', array($this, 'filter_tinymce_init'), 10, 2);
1289
+        
1290
+		$GRP_ID = isset($this->_req_data['id']) && ! empty($this->_req_data['id'])
1291
+			? absint($this->_req_data['id'])
1292
+			: false;
1293
+        
1294
+		$this->_set_shortcodes(); //this also sets the _message_template property.
1295
+		$message_template_group = $this->_message_template_group;
1296
+		$c_label                = $message_template_group->context_label();
1297
+		$c_config               = $message_template_group->contexts_config();
1298
+        
1299
+		reset($c_config);
1300
+		$context = isset($this->_req_data['context']) && ! empty($this->_req_data['context'])
1301
+			? strtolower($this->_req_data['context'])
1302
+			: key($c_config);
1303
+        
1304
+        
1305
+		if (empty($GRP_ID)) {
1306
+			$action = 'insert_message_template';
1307
+			$edit_message_template_form_url = add_query_arg(
1308
+				array('action' => $action, 'noheader' => true),
1309
+				EE_MSG_ADMIN_URL
1310
+			);
1311
+		} else {
1312
+			$action = 'update_message_template';
1313
+			$edit_message_template_form_url = add_query_arg(
1314
+				array('action' => $action, 'noheader' => true),
1315
+				EE_MSG_ADMIN_URL
1316
+			);
1317
+		}
1318
+        
1319
+		//set active messenger for this view
1320
+		$this->_active_messenger         = $this->_message_resource_manager->get_active_messenger(
1321
+			$message_template_group->messenger()
1322
+		);
1323
+		$this->_active_message_type_name = $message_template_group->message_type();
1324
+        
1325
+        
1326
+		//Do we have any validation errors?
1327
+		$validators = $this->_get_transient();
1328
+		$v_fields   = ! empty($validators) ? array_keys($validators) : array();
1329
+        
1330
+        
1331
+		//we need to assemble the title from Various details
1332
+		$context_label = sprintf(
1333
+			esc_html__('(%s %s)', 'event_espresso'),
1334
+			$c_config[$context]['label'],
1335
+			ucwords($c_label['label'])
1336
+		);
1337
+        
1338
+		$title = sprintf(
1339
+			esc_html__(' %s %s Template %s', 'event_espresso'),
1340
+			ucwords($message_template_group->messenger_obj()->label['singular']),
1341
+			ucwords($message_template_group->message_type_obj()->label['singular']),
1342
+			$context_label
1343
+		);
1344
+        
1345
+		$this->_template_args['GRP_ID']           = $GRP_ID;
1346
+		$this->_template_args['message_template'] = $message_template_group;
1347
+		$this->_template_args['is_extra_fields']  = false;
1348
+        
1349
+        
1350
+		//let's get EEH_MSG_Template so we can get template form fields
1351
+		$template_field_structure = EEH_MSG_Template::get_fields(
1352
+			$message_template_group->messenger(),
1353
+			$message_template_group->message_type()
1354
+		);
1355
+        
1356
+		if ( ! $template_field_structure) {
1357
+			$template_field_structure = false;
1358
+			$template_fields          = esc_html__(
1359
+				'There was an error in assembling the fields for this display (you should see an error message)',
1360
+				'event_espresso'
1361
+			);
1362
+		}
1363
+        
1364
+        
1365
+		$message_templates = $message_template_group->context_templates();
1366
+        
1367
+        
1368
+		//if we have the extra key.. then we need to remove the content index from the template_field_structure as it
1369
+		// will get handled in the "extra" array.
1370
+		if (is_array($template_field_structure[$context]) && isset($template_field_structure[$context]['extra'])) {
1371
+			foreach ($template_field_structure[$context]['extra'] as $reference_field => $new_fields) {
1372
+				unset($template_field_structure[$context][$reference_field]);
1373
+			}
1374
+		}
1375
+        
1376
+		//let's loop through the template_field_structure and actually assemble the input fields!
1377
+		if ( ! empty($template_field_structure)) {
1378
+			foreach ($template_field_structure[$context] as $template_field => $field_setup_array) {
1379
+				//if this is an 'extra' template field then we need to remove any existing fields that are keyed up in
1380
+				// the extra array and reset them.
1381
+				if ($template_field === 'extra') {
1382
+					$this->_template_args['is_extra_fields'] = true;
1383
+					foreach ($field_setup_array as $reference_field => $new_fields_array) {
1384
+						$message_template = $message_templates[$context][$reference_field];
1385
+						$content          = $message_template instanceof EE_Message_Template
1386
+							? $message_template->get('MTP_content')
1387
+							: '';
1388
+						foreach ($new_fields_array as $extra_field => $extra_array) {
1389
+							//let's verify if we need this extra field via the shortcodes parameter.
1390
+							$continue = false;
1391
+							if (isset($extra_array['shortcodes_required'])) {
1392
+								foreach ((array)$extra_array['shortcodes_required'] as $shortcode) {
1393
+									if ( ! array_key_exists($shortcode, $this->_shortcodes)) {
1394
+										$continue = true;
1395
+									}
1396
+								}
1397
+								if ($continue) {
1398
+									continue;
1399
+								}
1400
+							}
1401 1401
                             
1402
-                            $field_id                                = $reference_field
1403
-                                                                       . '-'
1404
-                                                                       . $extra_field
1405
-                                                                       . '-content';
1406
-                            $template_form_fields[$field_id]         = $extra_array;
1407
-                            $template_form_fields[$field_id]['name'] = 'MTP_template_fields['
1408
-                                                                       . $reference_field
1409
-                                                                       . '][content]['
1410
-                                                                       . $extra_field . ']';
1411
-                            $css_class                               = isset($extra_array['css_class'])
1412
-                                ? $extra_array['css_class']
1413
-                                : '';
1402
+							$field_id                                = $reference_field
1403
+																	   . '-'
1404
+																	   . $extra_field
1405
+																	   . '-content';
1406
+							$template_form_fields[$field_id]         = $extra_array;
1407
+							$template_form_fields[$field_id]['name'] = 'MTP_template_fields['
1408
+																	   . $reference_field
1409
+																	   . '][content]['
1410
+																	   . $extra_field . ']';
1411
+							$css_class                               = isset($extra_array['css_class'])
1412
+								? $extra_array['css_class']
1413
+								: '';
1414 1414
                             
1415
-                            $template_form_fields[$field_id]['css_class'] = ! empty($v_fields)
1416
-                                && in_array($extra_field, $v_fields, true)
1417
-                                &&
1418
-                                (
1419
-                                    is_array($validators[$extra_field])
1420
-                                    && isset($validators[$extra_field]['msg'])
1421
-                                )
1422
-                                ? 'validate-error ' . $css_class
1423
-                                : $css_class;
1415
+							$template_form_fields[$field_id]['css_class'] = ! empty($v_fields)
1416
+								&& in_array($extra_field, $v_fields, true)
1417
+								&&
1418
+								(
1419
+									is_array($validators[$extra_field])
1420
+									&& isset($validators[$extra_field]['msg'])
1421
+								)
1422
+								? 'validate-error ' . $css_class
1423
+								: $css_class;
1424 1424
                             
1425
-                            $template_form_fields[$field_id]['value'] = ! empty($message_templates)
1426
-                                                                        && isset($content[$extra_field])
1427
-                                ? $content[$extra_field]
1428
-                                : '';
1425
+							$template_form_fields[$field_id]['value'] = ! empty($message_templates)
1426
+																		&& isset($content[$extra_field])
1427
+								? $content[$extra_field]
1428
+								: '';
1429 1429
                             
1430
-                            //do we have a validation error?  if we do then let's use that value instead
1431
-                            $template_form_fields[$field_id]['value'] = isset($validators[$extra_field])
1432
-                                ? $validators[$extra_field]['value']
1433
-                                : $template_form_fields[$field_id]['value'];
1430
+							//do we have a validation error?  if we do then let's use that value instead
1431
+							$template_form_fields[$field_id]['value'] = isset($validators[$extra_field])
1432
+								? $validators[$extra_field]['value']
1433
+								: $template_form_fields[$field_id]['value'];
1434 1434
                             
1435 1435
                             
1436
-                            $template_form_fields[$field_id]['db-col'] = 'MTP_content';
1436
+							$template_form_fields[$field_id]['db-col'] = 'MTP_content';
1437 1437
                             
1438
-                            //shortcode selector
1439
-                            $field_name_to_use                                 = $extra_field === 'main'
1440
-                                ? 'content'
1441
-                                : $extra_field;
1442
-                            $template_form_fields[$field_id]['append_content'] = $this->_get_shortcode_selector(
1443
-                                $field_name_to_use,
1444
-                                $field_id
1445
-                            );
1438
+							//shortcode selector
1439
+							$field_name_to_use                                 = $extra_field === 'main'
1440
+								? 'content'
1441
+								: $extra_field;
1442
+							$template_form_fields[$field_id]['append_content'] = $this->_get_shortcode_selector(
1443
+								$field_name_to_use,
1444
+								$field_id
1445
+							);
1446 1446
                             
1447
-                            if (isset($extra_array['input']) && $extra_array['input'] === 'wp_editor') {
1448
-                                //we want to decode the entities
1449
-                                $template_form_fields[$field_id]['value'] = $template_form_fields[$field_id]['value'];
1447
+							if (isset($extra_array['input']) && $extra_array['input'] === 'wp_editor') {
1448
+								//we want to decode the entities
1449
+								$template_form_fields[$field_id]['value'] = $template_form_fields[$field_id]['value'];
1450 1450
                                 
1451
-                            }/**/
1452
-                        }
1453
-                        $templatefield_MTP_id          = $reference_field . '-MTP_ID';
1454
-                        $templatefield_templatename_id = $reference_field . '-name';
1451
+							}/**/
1452
+						}
1453
+						$templatefield_MTP_id          = $reference_field . '-MTP_ID';
1454
+						$templatefield_templatename_id = $reference_field . '-name';
1455 1455
                         
1456
-                        $template_form_fields[$templatefield_MTP_id] = array(
1457
-                            'name'       => 'MTP_template_fields[' . $reference_field . '][MTP_ID]',
1458
-                            'label'      => null,
1459
-                            'input'      => 'hidden',
1460
-                            'type'       => 'int',
1461
-                            'required'   => false,
1462
-                            'validation' => false,
1463
-                            'value'      => ! empty($message_templates) ? $message_template->ID() : '',
1464
-                            'css_class'  => '',
1465
-                            'format'     => '%d',
1466
-                            'db-col'     => 'MTP_ID'
1467
-                        );
1456
+						$template_form_fields[$templatefield_MTP_id] = array(
1457
+							'name'       => 'MTP_template_fields[' . $reference_field . '][MTP_ID]',
1458
+							'label'      => null,
1459
+							'input'      => 'hidden',
1460
+							'type'       => 'int',
1461
+							'required'   => false,
1462
+							'validation' => false,
1463
+							'value'      => ! empty($message_templates) ? $message_template->ID() : '',
1464
+							'css_class'  => '',
1465
+							'format'     => '%d',
1466
+							'db-col'     => 'MTP_ID'
1467
+						);
1468 1468
                         
1469
-                        $template_form_fields[$templatefield_templatename_id] = array(
1470
-                            'name'       => 'MTP_template_fields[' . $reference_field . '][name]',
1471
-                            'label'      => null,
1472
-                            'input'      => 'hidden',
1473
-                            'type'       => 'string',
1474
-                            'required'   => false,
1475
-                            'validation' => true,
1476
-                            'value'      => $reference_field,
1477
-                            'css_class'  => '',
1478
-                            'format'     => '%s',
1479
-                            'db-col'     => 'MTP_template_field'
1480
-                        );
1481
-                    }
1482
-                    continue; //skip the next stuff, we got the necessary fields here for this dataset.
1483
-                } else {
1484
-                    $field_id                                 = $template_field . '-content';
1485
-                    $template_form_fields[$field_id]          = $field_setup_array;
1486
-                    $template_form_fields[$field_id]['name']  = 'MTP_template_fields[' . $template_field . '][content]';
1487
-                    $message_template                         = isset($message_templates[$context][$template_field])
1488
-                        ? $message_templates[$context][$template_field]
1489
-                        : null;
1490
-                    $template_form_fields[$field_id]['value'] = ! empty($message_templates)
1491
-                                                                && is_array($message_templates[$context])
1492
-                                                                && $message_template instanceof EE_Message_Template
1493
-                        ? $message_template->get('MTP_content')
1494
-                        : '';
1469
+						$template_form_fields[$templatefield_templatename_id] = array(
1470
+							'name'       => 'MTP_template_fields[' . $reference_field . '][name]',
1471
+							'label'      => null,
1472
+							'input'      => 'hidden',
1473
+							'type'       => 'string',
1474
+							'required'   => false,
1475
+							'validation' => true,
1476
+							'value'      => $reference_field,
1477
+							'css_class'  => '',
1478
+							'format'     => '%s',
1479
+							'db-col'     => 'MTP_template_field'
1480
+						);
1481
+					}
1482
+					continue; //skip the next stuff, we got the necessary fields here for this dataset.
1483
+				} else {
1484
+					$field_id                                 = $template_field . '-content';
1485
+					$template_form_fields[$field_id]          = $field_setup_array;
1486
+					$template_form_fields[$field_id]['name']  = 'MTP_template_fields[' . $template_field . '][content]';
1487
+					$message_template                         = isset($message_templates[$context][$template_field])
1488
+						? $message_templates[$context][$template_field]
1489
+						: null;
1490
+					$template_form_fields[$field_id]['value'] = ! empty($message_templates)
1491
+																&& is_array($message_templates[$context])
1492
+																&& $message_template instanceof EE_Message_Template
1493
+						? $message_template->get('MTP_content')
1494
+						: '';
1495 1495
                     
1496
-                    //do we have a validator error for this field?  if we do then we'll use that value instead
1497
-                    $template_form_fields[$field_id]['value'] = isset($validators[$template_field])
1498
-                        ? $validators[$template_field]['value']
1499
-                        : $template_form_fields[$field_id]['value'];
1496
+					//do we have a validator error for this field?  if we do then we'll use that value instead
1497
+					$template_form_fields[$field_id]['value'] = isset($validators[$template_field])
1498
+						? $validators[$template_field]['value']
1499
+						: $template_form_fields[$field_id]['value'];
1500 1500
                     
1501 1501
                     
1502
-                    $template_form_fields[$field_id]['db-col']    = 'MTP_content';
1503
-                    $css_class                                    = isset($field_setup_array['css_class'])
1504
-                        ? $field_setup_array['css_class']
1505
-                        : '';
1506
-                    $template_form_fields[$field_id]['css_class'] = ! empty($v_fields)
1507
-                                                                    && in_array($template_field, $v_fields, true)
1508
-                                                                    && isset($validators[$template_field]['msg'])
1509
-                        ? 'validate-error ' . $css_class
1510
-                        : $css_class;
1502
+					$template_form_fields[$field_id]['db-col']    = 'MTP_content';
1503
+					$css_class                                    = isset($field_setup_array['css_class'])
1504
+						? $field_setup_array['css_class']
1505
+						: '';
1506
+					$template_form_fields[$field_id]['css_class'] = ! empty($v_fields)
1507
+																	&& in_array($template_field, $v_fields, true)
1508
+																	&& isset($validators[$template_field]['msg'])
1509
+						? 'validate-error ' . $css_class
1510
+						: $css_class;
1511 1511
                     
1512
-                    //shortcode selector
1513
-                    $template_form_fields[$field_id]['append_content'] = $this->_get_shortcode_selector(
1514
-                        $template_field, $field_id
1515
-                    );
1516
-                }
1512
+					//shortcode selector
1513
+					$template_form_fields[$field_id]['append_content'] = $this->_get_shortcode_selector(
1514
+						$template_field, $field_id
1515
+					);
1516
+				}
1517 1517
                 
1518
-                //k took care of content field(s) now let's take care of others.
1518
+				//k took care of content field(s) now let's take care of others.
1519 1519
                 
1520
-                $templatefield_MTP_id                = $template_field . '-MTP_ID';
1521
-                $templatefield_field_templatename_id = $template_field . '-name';
1520
+				$templatefield_MTP_id                = $template_field . '-MTP_ID';
1521
+				$templatefield_field_templatename_id = $template_field . '-name';
1522 1522
                 
1523
-                //foreach template field there are actually two form fields created
1524
-                $template_form_fields[$templatefield_MTP_id] = array(
1525
-                    'name'       => 'MTP_template_fields[' . $template_field . '][MTP_ID]',
1526
-                    'label'      => null,
1527
-                    'input'      => 'hidden',
1528
-                    'type'       => 'int',
1529
-                    'required'   => false,
1530
-                    'validation' => true,
1531
-                    'value'      => $message_template instanceof EE_Message_Template ? $message_template->ID() : '',
1532
-                    'css_class'  => '',
1533
-                    'format'     => '%d',
1534
-                    'db-col'     => 'MTP_ID'
1535
-                );
1523
+				//foreach template field there are actually two form fields created
1524
+				$template_form_fields[$templatefield_MTP_id] = array(
1525
+					'name'       => 'MTP_template_fields[' . $template_field . '][MTP_ID]',
1526
+					'label'      => null,
1527
+					'input'      => 'hidden',
1528
+					'type'       => 'int',
1529
+					'required'   => false,
1530
+					'validation' => true,
1531
+					'value'      => $message_template instanceof EE_Message_Template ? $message_template->ID() : '',
1532
+					'css_class'  => '',
1533
+					'format'     => '%d',
1534
+					'db-col'     => 'MTP_ID'
1535
+				);
1536 1536
                 
1537
-                $template_form_fields[$templatefield_field_templatename_id] = array(
1538
-                    'name'       => 'MTP_template_fields[' . $template_field . '][name]',
1539
-                    'label'      => null,
1540
-                    'input'      => 'hidden',
1541
-                    'type'       => 'string',
1542
-                    'required'   => false,
1543
-                    'validation' => true,
1544
-                    'value'      => $template_field,
1545
-                    'css_class'  => '',
1546
-                    'format'     => '%s',
1547
-                    'db-col'     => 'MTP_template_field'
1548
-                );
1537
+				$template_form_fields[$templatefield_field_templatename_id] = array(
1538
+					'name'       => 'MTP_template_fields[' . $template_field . '][name]',
1539
+					'label'      => null,
1540
+					'input'      => 'hidden',
1541
+					'type'       => 'string',
1542
+					'required'   => false,
1543
+					'validation' => true,
1544
+					'value'      => $template_field,
1545
+					'css_class'  => '',
1546
+					'format'     => '%s',
1547
+					'db-col'     => 'MTP_template_field'
1548
+				);
1549 1549
                 
1550
-            }
1550
+			}
1551 1551
             
1552
-            //add other fields
1553
-            $template_form_fields['ee-msg-current-context'] = array(
1554
-                'name'       => 'MTP_context',
1555
-                'label'      => null,
1556
-                'input'      => 'hidden',
1557
-                'type'       => 'string',
1558
-                'required'   => false,
1559
-                'validation' => true,
1560
-                'value'      => $context,
1561
-                'css_class'  => '',
1562
-                'format'     => '%s',
1563
-                'db-col'     => 'MTP_context'
1564
-            );
1552
+			//add other fields
1553
+			$template_form_fields['ee-msg-current-context'] = array(
1554
+				'name'       => 'MTP_context',
1555
+				'label'      => null,
1556
+				'input'      => 'hidden',
1557
+				'type'       => 'string',
1558
+				'required'   => false,
1559
+				'validation' => true,
1560
+				'value'      => $context,
1561
+				'css_class'  => '',
1562
+				'format'     => '%s',
1563
+				'db-col'     => 'MTP_context'
1564
+			);
1565 1565
             
1566
-            $template_form_fields['ee-msg-grp-id'] = array(
1567
-                'name'       => 'GRP_ID',
1568
-                'label'      => null,
1569
-                'input'      => 'hidden',
1570
-                'type'       => 'int',
1571
-                'required'   => false,
1572
-                'validation' => true,
1573
-                'value'      => $GRP_ID,
1574
-                'css_class'  => '',
1575
-                'format'     => '%d',
1576
-                'db-col'     => 'GRP_ID'
1577
-            );
1566
+			$template_form_fields['ee-msg-grp-id'] = array(
1567
+				'name'       => 'GRP_ID',
1568
+				'label'      => null,
1569
+				'input'      => 'hidden',
1570
+				'type'       => 'int',
1571
+				'required'   => false,
1572
+				'validation' => true,
1573
+				'value'      => $GRP_ID,
1574
+				'css_class'  => '',
1575
+				'format'     => '%d',
1576
+				'db-col'     => 'GRP_ID'
1577
+			);
1578 1578
             
1579
-            $template_form_fields['ee-msg-messenger'] = array(
1580
-                'name'       => 'MTP_messenger',
1581
-                'label'      => null,
1582
-                'input'      => 'hidden',
1583
-                'type'       => 'string',
1584
-                'required'   => false,
1585
-                'validation' => true,
1586
-                'value'      => $message_template_group->messenger(),
1587
-                'css_class'  => '',
1588
-                'format'     => '%s',
1589
-                'db-col'     => 'MTP_messenger'
1590
-            );
1579
+			$template_form_fields['ee-msg-messenger'] = array(
1580
+				'name'       => 'MTP_messenger',
1581
+				'label'      => null,
1582
+				'input'      => 'hidden',
1583
+				'type'       => 'string',
1584
+				'required'   => false,
1585
+				'validation' => true,
1586
+				'value'      => $message_template_group->messenger(),
1587
+				'css_class'  => '',
1588
+				'format'     => '%s',
1589
+				'db-col'     => 'MTP_messenger'
1590
+			);
1591 1591
             
1592
-            $template_form_fields['ee-msg-message-type'] = array(
1593
-                'name'       => 'MTP_message_type',
1594
-                'label'      => null,
1595
-                'input'      => 'hidden',
1596
-                'type'       => 'string',
1597
-                'required'   => false,
1598
-                'validation' => true,
1599
-                'value'      => $message_template_group->message_type(),
1600
-                'css_class'  => '',
1601
-                'format'     => '%s',
1602
-                'db-col'     => 'MTP_message_type'
1603
-            );
1592
+			$template_form_fields['ee-msg-message-type'] = array(
1593
+				'name'       => 'MTP_message_type',
1594
+				'label'      => null,
1595
+				'input'      => 'hidden',
1596
+				'type'       => 'string',
1597
+				'required'   => false,
1598
+				'validation' => true,
1599
+				'value'      => $message_template_group->message_type(),
1600
+				'css_class'  => '',
1601
+				'format'     => '%s',
1602
+				'db-col'     => 'MTP_message_type'
1603
+			);
1604 1604
             
1605
-            $sidebar_form_fields['ee-msg-is-global'] = array(
1606
-                'name'       => 'MTP_is_global',
1607
-                'label'      => esc_html__('Global Template', 'event_espresso'),
1608
-                'input'      => 'hidden',
1609
-                'type'       => 'int',
1610
-                'required'   => false,
1611
-                'validation' => true,
1612
-                'value'      => $message_template_group->get('MTP_is_global'),
1613
-                'css_class'  => '',
1614
-                'format'     => '%d',
1615
-                'db-col'     => 'MTP_is_global'
1616
-            );
1605
+			$sidebar_form_fields['ee-msg-is-global'] = array(
1606
+				'name'       => 'MTP_is_global',
1607
+				'label'      => esc_html__('Global Template', 'event_espresso'),
1608
+				'input'      => 'hidden',
1609
+				'type'       => 'int',
1610
+				'required'   => false,
1611
+				'validation' => true,
1612
+				'value'      => $message_template_group->get('MTP_is_global'),
1613
+				'css_class'  => '',
1614
+				'format'     => '%d',
1615
+				'db-col'     => 'MTP_is_global'
1616
+			);
1617 1617
             
1618
-            $sidebar_form_fields['ee-msg-is-override'] = array(
1619
-                'name'       => 'MTP_is_override',
1620
-                'label'      => esc_html__('Override all custom', 'event_espresso'),
1621
-                'input'      => $message_template_group->is_global() ? 'checkbox' : 'hidden',
1622
-                'type'       => 'int',
1623
-                'required'   => false,
1624
-                'validation' => true,
1625
-                'value'      => $message_template_group->get('MTP_is_override'),
1626
-                'css_class'  => '',
1627
-                'format'     => '%d',
1628
-                'db-col'     => 'MTP_is_override'
1629
-            );
1618
+			$sidebar_form_fields['ee-msg-is-override'] = array(
1619
+				'name'       => 'MTP_is_override',
1620
+				'label'      => esc_html__('Override all custom', 'event_espresso'),
1621
+				'input'      => $message_template_group->is_global() ? 'checkbox' : 'hidden',
1622
+				'type'       => 'int',
1623
+				'required'   => false,
1624
+				'validation' => true,
1625
+				'value'      => $message_template_group->get('MTP_is_override'),
1626
+				'css_class'  => '',
1627
+				'format'     => '%d',
1628
+				'db-col'     => 'MTP_is_override'
1629
+			);
1630 1630
             
1631
-            $sidebar_form_fields['ee-msg-is-active'] = array(
1632
-                'name'       => 'MTP_is_active',
1633
-                'label'      => esc_html__('Active Template', 'event_espresso'),
1634
-                'input'      => 'hidden',
1635
-                'type'       => 'int',
1636
-                'required'   => false,
1637
-                'validation' => true,
1638
-                'value'      => $message_template_group->is_active(),
1639
-                'css_class'  => '',
1640
-                'format'     => '%d',
1641
-                'db-col'     => 'MTP_is_active'
1642
-            );
1631
+			$sidebar_form_fields['ee-msg-is-active'] = array(
1632
+				'name'       => 'MTP_is_active',
1633
+				'label'      => esc_html__('Active Template', 'event_espresso'),
1634
+				'input'      => 'hidden',
1635
+				'type'       => 'int',
1636
+				'required'   => false,
1637
+				'validation' => true,
1638
+				'value'      => $message_template_group->is_active(),
1639
+				'css_class'  => '',
1640
+				'format'     => '%d',
1641
+				'db-col'     => 'MTP_is_active'
1642
+			);
1643 1643
             
1644
-            $sidebar_form_fields['ee-msg-deleted'] = array(
1645
-                'name'       => 'MTP_deleted',
1646
-                'label'      => null,
1647
-                'input'      => 'hidden',
1648
-                'type'       => 'int',
1649
-                'required'   => false,
1650
-                'validation' => true,
1651
-                'value'      => $message_template_group->get('MTP_deleted'),
1652
-                'css_class'  => '',
1653
-                'format'     => '%d',
1654
-                'db-col'     => 'MTP_deleted'
1655
-            );
1656
-            $sidebar_form_fields['ee-msg-author']  = array(
1657
-                'name'       => 'MTP_user_id',
1658
-                'label'      => esc_html__('Author', 'event_espresso'),
1659
-                'input'      => 'hidden',
1660
-                'type'       => 'int',
1661
-                'required'   => false,
1662
-                'validation' => false,
1663
-                'value'      => $message_template_group->user(),
1664
-                'format'     => '%d',
1665
-                'db-col'     => 'MTP_user_id'
1666
-            );
1644
+			$sidebar_form_fields['ee-msg-deleted'] = array(
1645
+				'name'       => 'MTP_deleted',
1646
+				'label'      => null,
1647
+				'input'      => 'hidden',
1648
+				'type'       => 'int',
1649
+				'required'   => false,
1650
+				'validation' => true,
1651
+				'value'      => $message_template_group->get('MTP_deleted'),
1652
+				'css_class'  => '',
1653
+				'format'     => '%d',
1654
+				'db-col'     => 'MTP_deleted'
1655
+			);
1656
+			$sidebar_form_fields['ee-msg-author']  = array(
1657
+				'name'       => 'MTP_user_id',
1658
+				'label'      => esc_html__('Author', 'event_espresso'),
1659
+				'input'      => 'hidden',
1660
+				'type'       => 'int',
1661
+				'required'   => false,
1662
+				'validation' => false,
1663
+				'value'      => $message_template_group->user(),
1664
+				'format'     => '%d',
1665
+				'db-col'     => 'MTP_user_id'
1666
+			);
1667 1667
             
1668
-            $sidebar_form_fields['ee-msg-route'] = array(
1669
-                'name'  => 'action',
1670
-                'input' => 'hidden',
1671
-                'type'  => 'string',
1672
-                'value' => $action
1673
-            );
1668
+			$sidebar_form_fields['ee-msg-route'] = array(
1669
+				'name'  => 'action',
1670
+				'input' => 'hidden',
1671
+				'type'  => 'string',
1672
+				'value' => $action
1673
+			);
1674 1674
             
1675
-            $sidebar_form_fields['ee-msg-id']        = array(
1676
-                'name'  => 'id',
1677
-                'input' => 'hidden',
1678
-                'type'  => 'int',
1679
-                'value' => $GRP_ID
1680
-            );
1681
-            $sidebar_form_fields['ee-msg-evt-nonce'] = array(
1682
-                'name'  => $action . '_nonce',
1683
-                'input' => 'hidden',
1684
-                'type'  => 'string',
1685
-                'value' => wp_create_nonce($action . '_nonce')
1686
-            );
1675
+			$sidebar_form_fields['ee-msg-id']        = array(
1676
+				'name'  => 'id',
1677
+				'input' => 'hidden',
1678
+				'type'  => 'int',
1679
+				'value' => $GRP_ID
1680
+			);
1681
+			$sidebar_form_fields['ee-msg-evt-nonce'] = array(
1682
+				'name'  => $action . '_nonce',
1683
+				'input' => 'hidden',
1684
+				'type'  => 'string',
1685
+				'value' => wp_create_nonce($action . '_nonce')
1686
+			);
1687 1687
             
1688
-            if (isset($this->_req_data['template_switch']) && $this->_req_data['template_switch']) {
1689
-                $sidebar_form_fields['ee-msg-template-switch'] = array(
1690
-                    'name'  => 'template_switch',
1691
-                    'input' => 'hidden',
1692
-                    'type'  => 'int',
1693
-                    'value' => 1
1694
-                );
1695
-            }
1688
+			if (isset($this->_req_data['template_switch']) && $this->_req_data['template_switch']) {
1689
+				$sidebar_form_fields['ee-msg-template-switch'] = array(
1690
+					'name'  => 'template_switch',
1691
+					'input' => 'hidden',
1692
+					'type'  => 'int',
1693
+					'value' => 1
1694
+				);
1695
+			}
1696 1696
             
1697 1697
             
1698
-            $template_fields = $this->_generate_admin_form_fields($template_form_fields);
1699
-            $sidebar_fields  = $this->_generate_admin_form_fields($sidebar_form_fields);
1698
+			$template_fields = $this->_generate_admin_form_fields($template_form_fields);
1699
+			$sidebar_fields  = $this->_generate_admin_form_fields($sidebar_form_fields);
1700 1700
             
1701 1701
             
1702
-        } //end if ( !empty($template_field_structure) )
1703
-        
1704
-        //set extra content for publish box
1705
-        $this->_template_args['publish_box_extra_content'] = $sidebar_fields;
1706
-        $this->_set_publish_post_box_vars(
1707
-            'id',
1708
-            $GRP_ID,
1709
-            false,
1710
-            add_query_arg(
1711
-                array('action' => 'global_mtps'),
1712
-                $this->_admin_base_url
1713
-            )
1714
-        );
1715
-        
1716
-        //add preview button
1717
-        $preview_url    = parent::add_query_args_and_nonce(
1718
-            array(
1719
-                'message_type' => $message_template_group->message_type(),
1720
-                'messenger'    => $message_template_group->messenger(),
1721
-                'context'      => $context,
1722
-                'GRP_ID'       => $GRP_ID,
1723
-                'action'       => 'preview_message'
1724
-            ),
1725
-            $this->_admin_base_url
1726
-        );
1727
-        $preview_button = '<a href="' . $preview_url . '" class="button-secondary messages-preview-button">'
1728
-                          . esc_html__('Preview', 'event_espresso')
1729
-                          . '</a>';
1730
-        
1731
-        
1732
-        //setup context switcher
1733
-        $context_switcher_args = array(
1734
-            'page'    => 'espresso_messages',
1735
-            'action'  => 'edit_message_template',
1736
-            'id'      => $GRP_ID,
1737
-            'context' => $context,
1738
-            'extra'   => $preview_button
1739
-        );
1740
-        $this->_set_context_switcher($message_template_group, $context_switcher_args);
1741
-        
1742
-        
1743
-        //main box
1744
-        $this->_template_args['template_fields']                         = $template_fields;
1745
-        $this->_template_args['sidebar_box_id']                          = 'details';
1746
-        $this->_template_args['action']                                  = $action;
1747
-        $this->_template_args['context']                                 = $context;
1748
-        $this->_template_args['edit_message_template_form_url']          = $edit_message_template_form_url;
1749
-        $this->_template_args['learn_more_about_message_templates_link'] =
1750
-            $this->_learn_more_about_message_templates_link();
1751
-        
1752
-        
1753
-        $this->_template_args['before_admin_page_content'] = $this->add_context_switcher();
1754
-        $this->_template_args['before_admin_page_content'] .= $this->add_active_context_element(
1755
-            $message_template_group,
1756
-            $context,
1757
-            $context_label
1758
-        );
1759
-        $this->_template_args['before_admin_page_content'] .= $this->_add_form_element_before();
1760
-        $this->_template_args['after_admin_page_content'] = $this->_add_form_element_after();
1761
-        
1762
-        $this->_template_path = $this->_template_args['GRP_ID']
1763
-            ? EE_MSG_TEMPLATE_PATH . 'ee_msg_details_main_edit_meta_box.template.php'
1764
-            : EE_MSG_TEMPLATE_PATH . 'ee_msg_details_main_add_meta_box.template.php';
1765
-        
1766
-        //send along EE_Message_Template_Group object for further template use.
1767
-        $this->_template_args['MTP'] = $message_template_group;
1768
-        
1769
-        $this->_template_args['admin_page_content'] = EEH_Template::display_template(
1770
-            $this->_template_path,
1771
-            $this->_template_args,
1772
-            true
1773
-        );
1774
-        
1775
-        
1776
-        //finally, let's set the admin_page title
1777
-        $this->_admin_page_title = sprintf(__('Editing %s', 'event_espresso'), $title);
1778
-        
1779
-        
1780
-        //we need to take care of setting the shortcodes property for use elsewhere.
1781
-        $this->_set_shortcodes();
1782
-        
1783
-        
1784
-        //final template wrapper
1785
-        $this->display_admin_page_with_sidebar();
1786
-    }
1702
+		} //end if ( !empty($template_field_structure) )
1703
+        
1704
+		//set extra content for publish box
1705
+		$this->_template_args['publish_box_extra_content'] = $sidebar_fields;
1706
+		$this->_set_publish_post_box_vars(
1707
+			'id',
1708
+			$GRP_ID,
1709
+			false,
1710
+			add_query_arg(
1711
+				array('action' => 'global_mtps'),
1712
+				$this->_admin_base_url
1713
+			)
1714
+		);
1715
+        
1716
+		//add preview button
1717
+		$preview_url    = parent::add_query_args_and_nonce(
1718
+			array(
1719
+				'message_type' => $message_template_group->message_type(),
1720
+				'messenger'    => $message_template_group->messenger(),
1721
+				'context'      => $context,
1722
+				'GRP_ID'       => $GRP_ID,
1723
+				'action'       => 'preview_message'
1724
+			),
1725
+			$this->_admin_base_url
1726
+		);
1727
+		$preview_button = '<a href="' . $preview_url . '" class="button-secondary messages-preview-button">'
1728
+						  . esc_html__('Preview', 'event_espresso')
1729
+						  . '</a>';
1730
+        
1731
+        
1732
+		//setup context switcher
1733
+		$context_switcher_args = array(
1734
+			'page'    => 'espresso_messages',
1735
+			'action'  => 'edit_message_template',
1736
+			'id'      => $GRP_ID,
1737
+			'context' => $context,
1738
+			'extra'   => $preview_button
1739
+		);
1740
+		$this->_set_context_switcher($message_template_group, $context_switcher_args);
1741
+        
1742
+        
1743
+		//main box
1744
+		$this->_template_args['template_fields']                         = $template_fields;
1745
+		$this->_template_args['sidebar_box_id']                          = 'details';
1746
+		$this->_template_args['action']                                  = $action;
1747
+		$this->_template_args['context']                                 = $context;
1748
+		$this->_template_args['edit_message_template_form_url']          = $edit_message_template_form_url;
1749
+		$this->_template_args['learn_more_about_message_templates_link'] =
1750
+			$this->_learn_more_about_message_templates_link();
1751
+        
1752
+        
1753
+		$this->_template_args['before_admin_page_content'] = $this->add_context_switcher();
1754
+		$this->_template_args['before_admin_page_content'] .= $this->add_active_context_element(
1755
+			$message_template_group,
1756
+			$context,
1757
+			$context_label
1758
+		);
1759
+		$this->_template_args['before_admin_page_content'] .= $this->_add_form_element_before();
1760
+		$this->_template_args['after_admin_page_content'] = $this->_add_form_element_after();
1761
+        
1762
+		$this->_template_path = $this->_template_args['GRP_ID']
1763
+			? EE_MSG_TEMPLATE_PATH . 'ee_msg_details_main_edit_meta_box.template.php'
1764
+			: EE_MSG_TEMPLATE_PATH . 'ee_msg_details_main_add_meta_box.template.php';
1765
+        
1766
+		//send along EE_Message_Template_Group object for further template use.
1767
+		$this->_template_args['MTP'] = $message_template_group;
1768
+        
1769
+		$this->_template_args['admin_page_content'] = EEH_Template::display_template(
1770
+			$this->_template_path,
1771
+			$this->_template_args,
1772
+			true
1773
+		);
1774
+        
1775
+        
1776
+		//finally, let's set the admin_page title
1777
+		$this->_admin_page_title = sprintf(__('Editing %s', 'event_espresso'), $title);
1778
+        
1779
+        
1780
+		//we need to take care of setting the shortcodes property for use elsewhere.
1781
+		$this->_set_shortcodes();
1782
+        
1783
+        
1784
+		//final template wrapper
1785
+		$this->display_admin_page_with_sidebar();
1786
+	}
1787 1787
     
1788 1788
     
1789
-    public function filter_tinymce_init($mceInit, $editor_id)
1790
-    {
1791
-        return $mceInit;
1792
-    }
1789
+	public function filter_tinymce_init($mceInit, $editor_id)
1790
+	{
1791
+		return $mceInit;
1792
+	}
1793 1793
     
1794 1794
     
1795
-    public function add_context_switcher()
1796
-    {
1797
-        return $this->_context_switcher;
1798
-    }
1795
+	public function add_context_switcher()
1796
+	{
1797
+		return $this->_context_switcher;
1798
+	}
1799 1799
 
1800 1800
 
1801
-    /**
1802
-     * Adds the activation/deactivation toggle for the message template context.
1803
-     *
1804
-     * @param EE_Message_Template_Group $message_template_group
1805
-     * @param string                    $context
1806
-     * @param string                    $context_label
1807
-     * @return string
1808
-     * @throws DomainException
1809
-     * @throws EE_Error
1810
-     * @throws InvalidIdentifierException
1811
-     */
1812
-    protected function add_active_context_element(
1813
-        EE_Message_Template_Group $message_template_group,
1814
-        $context,
1815
-        $context_label
1816
-    ) {
1817
-        $template_args = array(
1818
-            'context' => $context,
1819
-            'nonce' => wp_create_nonce('activate_' . $context . '_toggle_nonce'),
1820
-            'is_active' => $message_template_group->is_context_active($context),
1821
-            'on_off_action' => $message_template_group->is_context_active($context)
1822
-                ? 'context-off'
1823
-                : 'context-on',
1824
-            'context_label' => str_replace(array('(', ')'), '', $context_label),
1825
-            'message_template_group_id' => $message_template_group->ID()
1826
-        );
1827
-        return EEH_Template::display_template(
1828
-          EE_MSG_TEMPLATE_PATH . 'ee_msg_editor_active_context_element.template.php',
1829
-          $template_args,
1830
-          true
1831
-        );
1832
-    }
1801
+	/**
1802
+	 * Adds the activation/deactivation toggle for the message template context.
1803
+	 *
1804
+	 * @param EE_Message_Template_Group $message_template_group
1805
+	 * @param string                    $context
1806
+	 * @param string                    $context_label
1807
+	 * @return string
1808
+	 * @throws DomainException
1809
+	 * @throws EE_Error
1810
+	 * @throws InvalidIdentifierException
1811
+	 */
1812
+	protected function add_active_context_element(
1813
+		EE_Message_Template_Group $message_template_group,
1814
+		$context,
1815
+		$context_label
1816
+	) {
1817
+		$template_args = array(
1818
+			'context' => $context,
1819
+			'nonce' => wp_create_nonce('activate_' . $context . '_toggle_nonce'),
1820
+			'is_active' => $message_template_group->is_context_active($context),
1821
+			'on_off_action' => $message_template_group->is_context_active($context)
1822
+				? 'context-off'
1823
+				: 'context-on',
1824
+			'context_label' => str_replace(array('(', ')'), '', $context_label),
1825
+			'message_template_group_id' => $message_template_group->ID()
1826
+		);
1827
+		return EEH_Template::display_template(
1828
+		  EE_MSG_TEMPLATE_PATH . 'ee_msg_editor_active_context_element.template.php',
1829
+		  $template_args,
1830
+		  true
1831
+		);
1832
+	}
1833 1833
 
1834 1834
 
1835
-    /**
1836
-     * Ajax callback for `toggle_context_template` ajax action.
1837
-     * Handles toggling the message context on or off.
1838
-     * @throws EE_Error
1839
-     * @throws InvalidArgumentException
1840
-     * @throws InvalidDataTypeException
1841
-     * @throws InvalidIdentifierException
1842
-     * @throws InvalidInterfaceException
1843
-     */
1844
-    public function toggle_context_template()
1845
-    {
1846
-        $success = true;
1847
-        //check for required data
1848
-        if (!isset(
1849
-            $this->_req_data['message_template_group_id'],
1850
-            $this->_req_data['context'],
1851
-            $this->_req_data['status']
1852
-        )) {
1853
-            EE_Error::add_error(
1854
-                esc_html__('Required data for doing this action is not available.', 'event_espresso'),
1855
-                __FILE__,
1856
-                __FUNCTION__,
1857
-                __LINE__
1858
-            );
1859
-            $success = false;
1860
-        }
1835
+	/**
1836
+	 * Ajax callback for `toggle_context_template` ajax action.
1837
+	 * Handles toggling the message context on or off.
1838
+	 * @throws EE_Error
1839
+	 * @throws InvalidArgumentException
1840
+	 * @throws InvalidDataTypeException
1841
+	 * @throws InvalidIdentifierException
1842
+	 * @throws InvalidInterfaceException
1843
+	 */
1844
+	public function toggle_context_template()
1845
+	{
1846
+		$success = true;
1847
+		//check for required data
1848
+		if (!isset(
1849
+			$this->_req_data['message_template_group_id'],
1850
+			$this->_req_data['context'],
1851
+			$this->_req_data['status']
1852
+		)) {
1853
+			EE_Error::add_error(
1854
+				esc_html__('Required data for doing this action is not available.', 'event_espresso'),
1855
+				__FILE__,
1856
+				__FUNCTION__,
1857
+				__LINE__
1858
+			);
1859
+			$success = false;
1860
+		}
1861 1861
 
1862
-        $nonce = isset($this->_req_data['toggle_context_nonce'])
1863
-            ? sanitize_text_field($this->_req_data['toggle_context_nonce'])
1864
-            : '';
1865
-        $nonce_ref = 'activate_' . $this->_req_data['context'] . '_toggle_nonce';
1866
-        $this->_verify_nonce($nonce, $nonce_ref);
1867
-        $status = $this->_req_data['status'];
1868
-        if ($status !== 'off' && $status !=='on') {
1869
-            EE_Error::add_error(
1870
-                sprintf(
1871
-                    esc_html__('The given status (%s) is not valid. Must be "off" or "on"', 'event_espresso'),
1872
-                    $this->_req_data['status']
1873
-                ),
1874
-                __FILE__,
1875
-                __FUNCTION__,
1876
-                __LINE__
1877
-            );
1878
-            $success = false;
1879
-        }
1880
-        $message_template_group = EEM_Message_Template_Group::instance()->get_one_by_ID(
1881
-            $this->_req_data['message_template_group_id']
1882
-        );
1883
-        if (! $message_template_group instanceof EE_Message_Template_Group) {
1884
-            EE_Error::add_error(
1885
-                sprintf(
1886
-                    esc_html__(
1887
-                        'Unable to change the active state because the given id "%1$d" does not match a valid "%2$s"',
1888
-                        'event_espresso'
1889
-                    ),
1890
-                    $this->_req_data['message_template_group_id'],
1891
-                    'EE_Message_Template_Group'
1892
-                ),
1893
-                __FILE__,
1894
-                __FUNCTION__,
1895
-                __LINE__
1896
-            );
1897
-            $success = false;
1898
-        }
1899
-        if ($success) {
1900
-            $success = $status === 'off'
1901
-                ? $message_template_group->deactivate_context($this->_req_data['context'])
1902
-                : $message_template_group->activate_context($this->_req_data['context']);
1903
-        }
1904
-        $this->_template_args['success'] = $success;
1905
-        $this->_return_json();
1906
-    }
1862
+		$nonce = isset($this->_req_data['toggle_context_nonce'])
1863
+			? sanitize_text_field($this->_req_data['toggle_context_nonce'])
1864
+			: '';
1865
+		$nonce_ref = 'activate_' . $this->_req_data['context'] . '_toggle_nonce';
1866
+		$this->_verify_nonce($nonce, $nonce_ref);
1867
+		$status = $this->_req_data['status'];
1868
+		if ($status !== 'off' && $status !=='on') {
1869
+			EE_Error::add_error(
1870
+				sprintf(
1871
+					esc_html__('The given status (%s) is not valid. Must be "off" or "on"', 'event_espresso'),
1872
+					$this->_req_data['status']
1873
+				),
1874
+				__FILE__,
1875
+				__FUNCTION__,
1876
+				__LINE__
1877
+			);
1878
+			$success = false;
1879
+		}
1880
+		$message_template_group = EEM_Message_Template_Group::instance()->get_one_by_ID(
1881
+			$this->_req_data['message_template_group_id']
1882
+		);
1883
+		if (! $message_template_group instanceof EE_Message_Template_Group) {
1884
+			EE_Error::add_error(
1885
+				sprintf(
1886
+					esc_html__(
1887
+						'Unable to change the active state because the given id "%1$d" does not match a valid "%2$s"',
1888
+						'event_espresso'
1889
+					),
1890
+					$this->_req_data['message_template_group_id'],
1891
+					'EE_Message_Template_Group'
1892
+				),
1893
+				__FILE__,
1894
+				__FUNCTION__,
1895
+				__LINE__
1896
+			);
1897
+			$success = false;
1898
+		}
1899
+		if ($success) {
1900
+			$success = $status === 'off'
1901
+				? $message_template_group->deactivate_context($this->_req_data['context'])
1902
+				: $message_template_group->activate_context($this->_req_data['context']);
1903
+		}
1904
+		$this->_template_args['success'] = $success;
1905
+		$this->_return_json();
1906
+	}
1907 1907
 
1908 1908
 
1909 1909
     
1910
-    public function _add_form_element_before()
1911
-    {
1912
-        return '<form method="post" action="'
1913
-               . $this->_template_args["edit_message_template_form_url"]
1914
-               . '" id="ee-msg-edit-frm">';
1915
-    }
1910
+	public function _add_form_element_before()
1911
+	{
1912
+		return '<form method="post" action="'
1913
+			   . $this->_template_args["edit_message_template_form_url"]
1914
+			   . '" id="ee-msg-edit-frm">';
1915
+	}
1916 1916
     
1917
-    public function _add_form_element_after()
1918
-    {
1919
-        return '</form>';
1920
-    }
1917
+	public function _add_form_element_after()
1918
+	{
1919
+		return '</form>';
1920
+	}
1921 1921
 
1922 1922
 
1923
-    /**
1924
-     * This executes switching the template pack for a message template.
1925
-     *
1926
-     * @since 4.5.0
1927
-     * @throws EE_Error
1928
-     * @throws InvalidDataTypeException
1929
-     * @throws InvalidInterfaceException
1930
-     * @throws InvalidArgumentException
1931
-     * @throws ReflectionException
1932
-     */
1933
-    public function switch_template_pack()
1934
-    {
1935
-        $GRP_ID        = ! empty($this->_req_data['GRP_ID']) ? $this->_req_data['GRP_ID'] : 0;
1936
-        $template_pack = ! empty($this->_req_data['template_pack']) ? $this->_req_data['template_pack'] : '';
1937
-        
1938
-        //verify we have needed values.
1939
-        if (empty($GRP_ID) || empty($template_pack)) {
1940
-            $this->_template_args['error'] = true;
1941
-            EE_Error::add_error(
1942
-                esc_html__('The required date for switching templates is not available.', 'event_espresso'),
1943
-                __FILE__,
1944
-                __FUNCTION__,
1945
-                __LINE__
1946
-            );
1947
-        } else {
1948
-            //get template, set the new template_pack and then reset to default
1949
-            /** @type EE_Message_Template_Group $message_template_group */
1950
-            $message_template_group = EEM_Message_Template_Group::instance()->get_one_by_ID($GRP_ID);
1923
+	/**
1924
+	 * This executes switching the template pack for a message template.
1925
+	 *
1926
+	 * @since 4.5.0
1927
+	 * @throws EE_Error
1928
+	 * @throws InvalidDataTypeException
1929
+	 * @throws InvalidInterfaceException
1930
+	 * @throws InvalidArgumentException
1931
+	 * @throws ReflectionException
1932
+	 */
1933
+	public function switch_template_pack()
1934
+	{
1935
+		$GRP_ID        = ! empty($this->_req_data['GRP_ID']) ? $this->_req_data['GRP_ID'] : 0;
1936
+		$template_pack = ! empty($this->_req_data['template_pack']) ? $this->_req_data['template_pack'] : '';
1937
+        
1938
+		//verify we have needed values.
1939
+		if (empty($GRP_ID) || empty($template_pack)) {
1940
+			$this->_template_args['error'] = true;
1941
+			EE_Error::add_error(
1942
+				esc_html__('The required date for switching templates is not available.', 'event_espresso'),
1943
+				__FILE__,
1944
+				__FUNCTION__,
1945
+				__LINE__
1946
+			);
1947
+		} else {
1948
+			//get template, set the new template_pack and then reset to default
1949
+			/** @type EE_Message_Template_Group $message_template_group */
1950
+			$message_template_group = EEM_Message_Template_Group::instance()->get_one_by_ID($GRP_ID);
1951 1951
             
1952
-            $message_template_group->set_template_pack_name($template_pack);
1953
-            $this->_req_data['msgr'] = $message_template_group->messenger();
1954
-            $this->_req_data['mt']   = $message_template_group->message_type();
1952
+			$message_template_group->set_template_pack_name($template_pack);
1953
+			$this->_req_data['msgr'] = $message_template_group->messenger();
1954
+			$this->_req_data['mt']   = $message_template_group->message_type();
1955 1955
             
1956
-            $query_args = $this->_reset_to_default_template();
1956
+			$query_args = $this->_reset_to_default_template();
1957 1957
             
1958
-            if (empty($query_args['id'])) {
1959
-                EE_Error::add_error(
1960
-                    esc_html__(
1961
-                        'Something went wrong with switching the template pack. Please try again or contact EE support',
1962
-                        'event_espresso'
1963
-                    ),
1964
-                    __FILE__,
1965
-                    __FUNCTION__,
1966
-                    __LINE__
1967
-                );
1968
-                $this->_template_args['error'] = true;
1969
-            } else {
1970
-                $template_label       = $message_template_group->get_template_pack()->label;
1971
-                $template_pack_labels = $message_template_group->messenger_obj()->get_supports_labels();
1972
-                EE_Error::add_success(
1973
-                    sprintf(
1974
-                        esc_html__(
1975
-                            'This message template has been successfully switched to use the %1$s %2$s.  Please wait while the page reloads with your new template.',
1976
-                            'event_espresso'
1977
-                        ),
1978
-                        $template_label,
1979
-                        $template_pack_labels->template_pack
1980
-                    )
1981
-                );
1982
-                //generate the redirect url for js.
1983
-                $url                                          = self::add_query_args_and_nonce($query_args,
1984
-                    $this->_admin_base_url);
1985
-                $this->_template_args['data']['redirect_url'] = $url;
1986
-                $this->_template_args['success']              = true;
1987
-            }
1958
+			if (empty($query_args['id'])) {
1959
+				EE_Error::add_error(
1960
+					esc_html__(
1961
+						'Something went wrong with switching the template pack. Please try again or contact EE support',
1962
+						'event_espresso'
1963
+					),
1964
+					__FILE__,
1965
+					__FUNCTION__,
1966
+					__LINE__
1967
+				);
1968
+				$this->_template_args['error'] = true;
1969
+			} else {
1970
+				$template_label       = $message_template_group->get_template_pack()->label;
1971
+				$template_pack_labels = $message_template_group->messenger_obj()->get_supports_labels();
1972
+				EE_Error::add_success(
1973
+					sprintf(
1974
+						esc_html__(
1975
+							'This message template has been successfully switched to use the %1$s %2$s.  Please wait while the page reloads with your new template.',
1976
+							'event_espresso'
1977
+						),
1978
+						$template_label,
1979
+						$template_pack_labels->template_pack
1980
+					)
1981
+				);
1982
+				//generate the redirect url for js.
1983
+				$url                                          = self::add_query_args_and_nonce($query_args,
1984
+					$this->_admin_base_url);
1985
+				$this->_template_args['data']['redirect_url'] = $url;
1986
+				$this->_template_args['success']              = true;
1987
+			}
1988 1988
             
1989
-            $this->_return_json();
1989
+			$this->_return_json();
1990 1990
             
1991
-        }
1992
-    }
1991
+		}
1992
+	}
1993 1993
 
1994 1994
 
1995
-    /**
1996
-     * This handles resetting the template for the given messenger/message_type so that users can start from scratch if
1997
-     * they want.
1998
-     *
1999
-     * @access protected
2000
-     * @return array|null
2001
-     * @throws EE_Error
2002
-     * @throws InvalidArgumentException
2003
-     * @throws InvalidDataTypeException
2004
-     * @throws InvalidInterfaceException
2005
-     */
2006
-    protected function _reset_to_default_template()
2007
-    {
2008
-        
2009
-        $templates = array();
2010
-        $GRP_ID    = ! empty($this->_req_data['GRP_ID']) ? $this->_req_data['GRP_ID'] : 0;
2011
-        //we need to make sure we've got the info we need.
2012
-        if ( ! isset($this->_req_data['msgr'], $this->_req_data['mt'], $this->_req_data['GRP_ID'])) {
2013
-            EE_Error::add_error(
2014
-                esc_html__(
2015
-                    'In order to reset the template to its default we require the messenger, message type, and message template GRP_ID to know what is being reset.  At least one of these is missing.',
2016
-                    'event_espresso'
2017
-                ),
2018
-                __FILE__, __FUNCTION__, __LINE__
2019
-            );
2020
-        }
2021
-        
2022
-        // all templates will be reset to whatever the defaults are
2023
-        // for the global template matching the messenger and message type.
2024
-        $success = ! empty($GRP_ID) ? true : false;
2025
-        
2026
-        if ($success) {
1995
+	/**
1996
+	 * This handles resetting the template for the given messenger/message_type so that users can start from scratch if
1997
+	 * they want.
1998
+	 *
1999
+	 * @access protected
2000
+	 * @return array|null
2001
+	 * @throws EE_Error
2002
+	 * @throws InvalidArgumentException
2003
+	 * @throws InvalidDataTypeException
2004
+	 * @throws InvalidInterfaceException
2005
+	 */
2006
+	protected function _reset_to_default_template()
2007
+	{
2008
+        
2009
+		$templates = array();
2010
+		$GRP_ID    = ! empty($this->_req_data['GRP_ID']) ? $this->_req_data['GRP_ID'] : 0;
2011
+		//we need to make sure we've got the info we need.
2012
+		if ( ! isset($this->_req_data['msgr'], $this->_req_data['mt'], $this->_req_data['GRP_ID'])) {
2013
+			EE_Error::add_error(
2014
+				esc_html__(
2015
+					'In order to reset the template to its default we require the messenger, message type, and message template GRP_ID to know what is being reset.  At least one of these is missing.',
2016
+					'event_espresso'
2017
+				),
2018
+				__FILE__, __FUNCTION__, __LINE__
2019
+			);
2020
+		}
2021
+        
2022
+		// all templates will be reset to whatever the defaults are
2023
+		// for the global template matching the messenger and message type.
2024
+		$success = ! empty($GRP_ID) ? true : false;
2025
+        
2026
+		if ($success) {
2027 2027
             
2028
-            //let's first determine if the incoming template is a global template,
2029
-            // if it isn't then we need to get the global template matching messenger and message type.
2030
-            //$MTPG = EEM_Message_Template_Group::instance()->get_one_by_ID( $GRP_ID );
2028
+			//let's first determine if the incoming template is a global template,
2029
+			// if it isn't then we need to get the global template matching messenger and message type.
2030
+			//$MTPG = EEM_Message_Template_Group::instance()->get_one_by_ID( $GRP_ID );
2031 2031
             
2032 2032
             
2033
-            //note this is ONLY deleting the template fields (Message Template rows) NOT the message template group.
2034
-            $success = $this->_delete_mtp_permanently($GRP_ID, false);
2033
+			//note this is ONLY deleting the template fields (Message Template rows) NOT the message template group.
2034
+			$success = $this->_delete_mtp_permanently($GRP_ID, false);
2035 2035
             
2036
-            if ($success) {
2037
-                // if successfully deleted, lets generate the new ones.
2038
-                // Note. We set GLOBAL to true, because resets on ANY template
2039
-                // will use the related global template defaults for regeneration.
2040
-                // This means that if a custom template is reset it resets to whatever the related global template is.
2041
-                // HOWEVER, we DO keep the template pack and template variation set
2042
-                // for the current custom template when resetting.
2043
-                $templates = $this->_generate_new_templates(
2044
-                    $this->_req_data['msgr'],
2045
-                    $this->_req_data['mt'],
2046
-                    $GRP_ID,
2047
-                    true
2048
-                );
2049
-            }
2036
+			if ($success) {
2037
+				// if successfully deleted, lets generate the new ones.
2038
+				// Note. We set GLOBAL to true, because resets on ANY template
2039
+				// will use the related global template defaults for regeneration.
2040
+				// This means that if a custom template is reset it resets to whatever the related global template is.
2041
+				// HOWEVER, we DO keep the template pack and template variation set
2042
+				// for the current custom template when resetting.
2043
+				$templates = $this->_generate_new_templates(
2044
+					$this->_req_data['msgr'],
2045
+					$this->_req_data['mt'],
2046
+					$GRP_ID,
2047
+					true
2048
+				);
2049
+			}
2050 2050
             
2051
-        }
2052
-        
2053
-        //any error messages?
2054
-        if ( ! $success) {
2055
-            EE_Error::add_error(
2056
-                esc_html__('Something went wrong with deleting existing templates. Unable to reset to default',
2057
-                    'event_espresso'),
2058
-                __FILE__, __FUNCTION__, __LINE__
2059
-            );
2060
-        }
2061
-        
2062
-        //all good, let's add a success message!
2063
-        if ($success && ! empty($templates)) {
2064
-            //the info for the template we generated is the first element in the returned array
2065
-            // $templates = $templates[0];
2066
-            EE_Error::overwrite_success();
2067
-            EE_Error::add_success(__('Templates have been reset to defaults.', 'event_espresso'));
2068
-        }
2069
-        
2070
-        
2071
-        $query_args = array(
2072
-            'id'      => isset($templates['GRP_ID']) ? $templates['GRP_ID'] : null,
2073
-            'context' => isset($templates['MTP_context']) ? $templates['MTP_context'] : null,
2074
-            'action'  => isset($templates['GRP_ID']) ? 'edit_message_template' : 'global_mtps'
2075
-        );
2076
-        
2077
-        //if called via ajax then we return query args otherwise redirect
2078
-        if (defined('DOING_AJAX') && DOING_AJAX) {
2079
-            return $query_args;
2080
-        } else {
2081
-            $this->_redirect_after_action(false, '', '', $query_args, true);
2051
+		}
2052
+        
2053
+		//any error messages?
2054
+		if ( ! $success) {
2055
+			EE_Error::add_error(
2056
+				esc_html__('Something went wrong with deleting existing templates. Unable to reset to default',
2057
+					'event_espresso'),
2058
+				__FILE__, __FUNCTION__, __LINE__
2059
+			);
2060
+		}
2061
+        
2062
+		//all good, let's add a success message!
2063
+		if ($success && ! empty($templates)) {
2064
+			//the info for the template we generated is the first element in the returned array
2065
+			// $templates = $templates[0];
2066
+			EE_Error::overwrite_success();
2067
+			EE_Error::add_success(__('Templates have been reset to defaults.', 'event_espresso'));
2068
+		}
2069
+        
2070
+        
2071
+		$query_args = array(
2072
+			'id'      => isset($templates['GRP_ID']) ? $templates['GRP_ID'] : null,
2073
+			'context' => isset($templates['MTP_context']) ? $templates['MTP_context'] : null,
2074
+			'action'  => isset($templates['GRP_ID']) ? 'edit_message_template' : 'global_mtps'
2075
+		);
2076
+        
2077
+		//if called via ajax then we return query args otherwise redirect
2078
+		if (defined('DOING_AJAX') && DOING_AJAX) {
2079
+			return $query_args;
2080
+		} else {
2081
+			$this->_redirect_after_action(false, '', '', $query_args, true);
2082 2082
 
2083
-            return null;
2084
-        }
2085
-    }
2083
+			return null;
2084
+		}
2085
+	}
2086 2086
 
2087 2087
 
2088
-    /**
2089
-     * Retrieve and set the message preview for display.
2090
-     *
2091
-     * @param bool $send if TRUE then we are doing an actual TEST send with the results of the preview.
2092
-     * @return string
2093
-     * @throws ReflectionException
2094
-     * @throws EE_Error
2095
-     * @throws InvalidArgumentException
2096
-     * @throws InvalidDataTypeException
2097
-     * @throws InvalidInterfaceException
2098
-     */
2099
-    public function _preview_message($send = false)
2100
-    {
2101
-        //first make sure we've got the necessary parameters
2102
-        if (
2103
-        ! isset(
2104
-            $this->_req_data['message_type'],
2105
-            $this->_req_data['messenger'],
2106
-            $this->_req_data['messenger'],
2107
-            $this->_req_data['GRP_ID']
2108
-        )
2109
-        ) {
2110
-            EE_Error::add_error(
2111
-                esc_html__('Missing necessary parameters for displaying preview', 'event_espresso'),
2112
-                __FILE__, __FUNCTION__, __LINE__
2113
-            );
2114
-        }
2115
-        
2116
-        EE_Registry::instance()->REQ->set('GRP_ID', $this->_req_data['GRP_ID']);
2117
-        
2118
-        
2119
-        //get the preview!
2120
-        $preview = EED_Messages::preview_message($this->_req_data['message_type'], $this->_req_data['context'],
2121
-            $this->_req_data['messenger'], $send);
2122
-        
2123
-        if ($send) {
2124
-            return $preview;
2125
-        }
2126
-        
2127
-        //let's add a button to go back to the edit view
2128
-        $query_args             = array(
2129
-            'id'      => $this->_req_data['GRP_ID'],
2130
-            'context' => $this->_req_data['context'],
2131
-            'action'  => 'edit_message_template'
2132
-        );
2133
-        $go_back_url            = parent::add_query_args_and_nonce($query_args, $this->_admin_base_url);
2134
-        $preview_button         = '<a href="'
2135
-                                  . $go_back_url
2136
-                                  . '" class="button-secondary messages-preview-go-back-button">'
2137
-                                  . esc_html__('Go Back to Edit', 'event_espresso')
2138
-                                  . '</a>';
2139
-        $message_types          = $this->get_installed_message_types();
2140
-        $active_messenger       = $this->_message_resource_manager->get_active_messenger(
2141
-                $this->_req_data['messenger']
2142
-        );
2143
-        $active_messenger_label = $active_messenger instanceof EE_messenger
2144
-            ? ucwords($active_messenger->label['singular'])
2145
-            : esc_html__('Unknown Messenger', 'event_espresso');
2146
-        //let's provide a helpful title for context
2147
-        $preview_title = sprintf(
2148
-            esc_html__('Viewing Preview for %s %s Message Template', 'event_espresso'),
2149
-            $active_messenger_label,
2150
-            ucwords($message_types[$this->_req_data['message_type']]->label['singular'])
2151
-        );
2152
-        //setup display of preview.
2153
-        $this->_admin_page_title                    = $preview_title;
2154
-        $this->_template_args['admin_page_content'] = $preview_button . '<br />' . $preview;
2155
-        $this->_template_args['data']['force_json'] = true;
2156
-        
2157
-        return '';
2158
-    }
2088
+	/**
2089
+	 * Retrieve and set the message preview for display.
2090
+	 *
2091
+	 * @param bool $send if TRUE then we are doing an actual TEST send with the results of the preview.
2092
+	 * @return string
2093
+	 * @throws ReflectionException
2094
+	 * @throws EE_Error
2095
+	 * @throws InvalidArgumentException
2096
+	 * @throws InvalidDataTypeException
2097
+	 * @throws InvalidInterfaceException
2098
+	 */
2099
+	public function _preview_message($send = false)
2100
+	{
2101
+		//first make sure we've got the necessary parameters
2102
+		if (
2103
+		! isset(
2104
+			$this->_req_data['message_type'],
2105
+			$this->_req_data['messenger'],
2106
+			$this->_req_data['messenger'],
2107
+			$this->_req_data['GRP_ID']
2108
+		)
2109
+		) {
2110
+			EE_Error::add_error(
2111
+				esc_html__('Missing necessary parameters for displaying preview', 'event_espresso'),
2112
+				__FILE__, __FUNCTION__, __LINE__
2113
+			);
2114
+		}
2115
+        
2116
+		EE_Registry::instance()->REQ->set('GRP_ID', $this->_req_data['GRP_ID']);
2117
+        
2118
+        
2119
+		//get the preview!
2120
+		$preview = EED_Messages::preview_message($this->_req_data['message_type'], $this->_req_data['context'],
2121
+			$this->_req_data['messenger'], $send);
2122
+        
2123
+		if ($send) {
2124
+			return $preview;
2125
+		}
2126
+        
2127
+		//let's add a button to go back to the edit view
2128
+		$query_args             = array(
2129
+			'id'      => $this->_req_data['GRP_ID'],
2130
+			'context' => $this->_req_data['context'],
2131
+			'action'  => 'edit_message_template'
2132
+		);
2133
+		$go_back_url            = parent::add_query_args_and_nonce($query_args, $this->_admin_base_url);
2134
+		$preview_button         = '<a href="'
2135
+								  . $go_back_url
2136
+								  . '" class="button-secondary messages-preview-go-back-button">'
2137
+								  . esc_html__('Go Back to Edit', 'event_espresso')
2138
+								  . '</a>';
2139
+		$message_types          = $this->get_installed_message_types();
2140
+		$active_messenger       = $this->_message_resource_manager->get_active_messenger(
2141
+				$this->_req_data['messenger']
2142
+		);
2143
+		$active_messenger_label = $active_messenger instanceof EE_messenger
2144
+			? ucwords($active_messenger->label['singular'])
2145
+			: esc_html__('Unknown Messenger', 'event_espresso');
2146
+		//let's provide a helpful title for context
2147
+		$preview_title = sprintf(
2148
+			esc_html__('Viewing Preview for %s %s Message Template', 'event_espresso'),
2149
+			$active_messenger_label,
2150
+			ucwords($message_types[$this->_req_data['message_type']]->label['singular'])
2151
+		);
2152
+		//setup display of preview.
2153
+		$this->_admin_page_title                    = $preview_title;
2154
+		$this->_template_args['admin_page_content'] = $preview_button . '<br />' . $preview;
2155
+		$this->_template_args['data']['force_json'] = true;
2156
+        
2157
+		return '';
2158
+	}
2159 2159
     
2160 2160
     
2161
-    /**
2162
-     * The initial _preview_message is on a no headers route.  It will optionally call this if necessary otherwise it
2163
-     * gets called automatically.
2164
-     *
2165
-     * @since 4.5.0
2166
-     *
2167
-     * @return string
2168
-     */
2169
-    protected function _display_preview_message()
2170
-    {
2171
-        $this->display_admin_page_with_no_sidebar();
2172
-    }
2161
+	/**
2162
+	 * The initial _preview_message is on a no headers route.  It will optionally call this if necessary otherwise it
2163
+	 * gets called automatically.
2164
+	 *
2165
+	 * @since 4.5.0
2166
+	 *
2167
+	 * @return string
2168
+	 */
2169
+	protected function _display_preview_message()
2170
+	{
2171
+		$this->display_admin_page_with_no_sidebar();
2172
+	}
2173 2173
     
2174 2174
     
2175
-    /**
2176
-     * registers metaboxes that should show up on the "edit_message_template" page
2177
-     *
2178
-     * @access protected
2179
-     * @return void
2180
-     */
2181
-    protected function _register_edit_meta_boxes()
2182
-    {
2183
-        add_meta_box(
2184
-            'mtp_valid_shortcodes',
2185
-            esc_html__('Valid Shortcodes', 'event_espresso'),
2186
-            array($this, 'shortcode_meta_box'),
2187
-            $this->_current_screen->id,
2188
-            'side',
2189
-            'default');
2190
-        add_meta_box(
2191
-            'mtp_extra_actions',
2192
-            esc_html__('Extra Actions', 'event_espresso'),
2193
-            array($this, 'extra_actions_meta_box'),
2194
-            $this->_current_screen->id,
2195
-            'side',
2196
-            'high'
2197
-        );
2198
-        add_meta_box(
2199
-            'mtp_templates',
2200
-            esc_html__('Template Styles', 'event_espresso'),
2201
-            array($this, 'template_pack_meta_box'),
2202
-            $this->_current_screen->id,
2203
-            'side',
2204
-            'high'
2205
-        );
2206
-    }
2175
+	/**
2176
+	 * registers metaboxes that should show up on the "edit_message_template" page
2177
+	 *
2178
+	 * @access protected
2179
+	 * @return void
2180
+	 */
2181
+	protected function _register_edit_meta_boxes()
2182
+	{
2183
+		add_meta_box(
2184
+			'mtp_valid_shortcodes',
2185
+			esc_html__('Valid Shortcodes', 'event_espresso'),
2186
+			array($this, 'shortcode_meta_box'),
2187
+			$this->_current_screen->id,
2188
+			'side',
2189
+			'default');
2190
+		add_meta_box(
2191
+			'mtp_extra_actions',
2192
+			esc_html__('Extra Actions', 'event_espresso'),
2193
+			array($this, 'extra_actions_meta_box'),
2194
+			$this->_current_screen->id,
2195
+			'side',
2196
+			'high'
2197
+		);
2198
+		add_meta_box(
2199
+			'mtp_templates',
2200
+			esc_html__('Template Styles', 'event_espresso'),
2201
+			array($this, 'template_pack_meta_box'),
2202
+			$this->_current_screen->id,
2203
+			'side',
2204
+			'high'
2205
+		);
2206
+	}
2207 2207
 
2208 2208
 
2209
-    /**
2210
-     * metabox content for all template pack and variation selection.
2211
-     *
2212
-     * @since 4.5.0
2213
-     * @return string
2214
-     * @throws DomainException
2215
-     * @throws EE_Error
2216
-     * @throws InvalidArgumentException
2217
-     * @throws ReflectionException
2218
-     * @throws InvalidDataTypeException
2219
-     * @throws InvalidInterfaceException
2220
-     */
2221
-    public function template_pack_meta_box()
2222
-    {
2223
-        $this->_set_message_template_group();
2224
-        
2225
-        $tp_collection = EEH_MSG_Template::get_template_pack_collection();
2226
-        
2227
-        $tp_select_values = array();
2228
-        
2229
-        foreach ($tp_collection as $tp) {
2230
-            //only include template packs that support this messenger and message type!
2231
-            $supports = $tp->get_supports();
2232
-            if (
2233
-                ! isset($supports[$this->_message_template_group->messenger()])
2234
-                || ! in_array(
2235
-                    $this->_message_template_group->message_type(),
2236
-                    $supports[$this->_message_template_group->messenger()],
2237
-                    true
2238
-                )
2239
-            ) {
2240
-                //not supported
2241
-                continue;
2242
-            }
2209
+	/**
2210
+	 * metabox content for all template pack and variation selection.
2211
+	 *
2212
+	 * @since 4.5.0
2213
+	 * @return string
2214
+	 * @throws DomainException
2215
+	 * @throws EE_Error
2216
+	 * @throws InvalidArgumentException
2217
+	 * @throws ReflectionException
2218
+	 * @throws InvalidDataTypeException
2219
+	 * @throws InvalidInterfaceException
2220
+	 */
2221
+	public function template_pack_meta_box()
2222
+	{
2223
+		$this->_set_message_template_group();
2224
+        
2225
+		$tp_collection = EEH_MSG_Template::get_template_pack_collection();
2226
+        
2227
+		$tp_select_values = array();
2228
+        
2229
+		foreach ($tp_collection as $tp) {
2230
+			//only include template packs that support this messenger and message type!
2231
+			$supports = $tp->get_supports();
2232
+			if (
2233
+				! isset($supports[$this->_message_template_group->messenger()])
2234
+				|| ! in_array(
2235
+					$this->_message_template_group->message_type(),
2236
+					$supports[$this->_message_template_group->messenger()],
2237
+					true
2238
+				)
2239
+			) {
2240
+				//not supported
2241
+				continue;
2242
+			}
2243 2243
             
2244
-            $tp_select_values[] = array(
2245
-                'text' => $tp->label,
2246
-                'id'   => $tp->dbref
2247
-            );
2248
-        }
2249
-        
2250
-        //if empty $tp_select_values then we make sure default is set because EVERY message type should be supported by
2251
-        // the default template pack.  This still allows for the odd template pack to override.
2252
-        if (empty($tp_select_values)) {
2253
-            $tp_select_values[] = array(
2254
-                'text' => esc_html__('Default', 'event_espresso'),
2255
-                'id'   => 'default'
2256
-            );
2257
-        }
2258
-        
2259
-        //setup variation select values for the currently selected template.
2260
-        $variations               = $this->_message_template_group->get_template_pack()->get_variations(
2261
-            $this->_message_template_group->messenger(),
2262
-            $this->_message_template_group->message_type()
2263
-        );
2264
-        $variations_select_values = array();
2265
-        foreach ($variations as $variation => $label) {
2266
-            $variations_select_values[] = array(
2267
-                'text' => $label,
2268
-                'id'   => $variation
2269
-            );
2270
-        }
2271
-        
2272
-        $template_pack_labels = $this->_message_template_group->messenger_obj()->get_supports_labels();
2273
-        
2274
-        $template_args['template_packs_selector']        = EEH_Form_Fields::select_input(
2275
-            'MTP_template_pack',
2276
-            $tp_select_values,
2277
-            $this->_message_template_group->get_template_pack_name()
2278
-        );
2279
-        $template_args['variations_selector']            = EEH_Form_Fields::select_input(
2280
-            'MTP_template_variation',
2281
-            $variations_select_values,
2282
-            $this->_message_template_group->get_template_pack_variation()
2283
-        );
2284
-        $template_args['template_pack_label']            = $template_pack_labels->template_pack;
2285
-        $template_args['template_variation_label']       = $template_pack_labels->template_variation;
2286
-        $template_args['template_pack_description']      = $template_pack_labels->template_pack_description;
2287
-        $template_args['template_variation_description'] = $template_pack_labels->template_variation_description;
2288
-        
2289
-        $template = EE_MSG_TEMPLATE_PATH . 'template_pack_and_variations_metabox.template.php';
2290
-        
2291
-        EEH_Template::display_template($template, $template_args);
2292
-    }
2244
+			$tp_select_values[] = array(
2245
+				'text' => $tp->label,
2246
+				'id'   => $tp->dbref
2247
+			);
2248
+		}
2249
+        
2250
+		//if empty $tp_select_values then we make sure default is set because EVERY message type should be supported by
2251
+		// the default template pack.  This still allows for the odd template pack to override.
2252
+		if (empty($tp_select_values)) {
2253
+			$tp_select_values[] = array(
2254
+				'text' => esc_html__('Default', 'event_espresso'),
2255
+				'id'   => 'default'
2256
+			);
2257
+		}
2258
+        
2259
+		//setup variation select values for the currently selected template.
2260
+		$variations               = $this->_message_template_group->get_template_pack()->get_variations(
2261
+			$this->_message_template_group->messenger(),
2262
+			$this->_message_template_group->message_type()
2263
+		);
2264
+		$variations_select_values = array();
2265
+		foreach ($variations as $variation => $label) {
2266
+			$variations_select_values[] = array(
2267
+				'text' => $label,
2268
+				'id'   => $variation
2269
+			);
2270
+		}
2271
+        
2272
+		$template_pack_labels = $this->_message_template_group->messenger_obj()->get_supports_labels();
2273
+        
2274
+		$template_args['template_packs_selector']        = EEH_Form_Fields::select_input(
2275
+			'MTP_template_pack',
2276
+			$tp_select_values,
2277
+			$this->_message_template_group->get_template_pack_name()
2278
+		);
2279
+		$template_args['variations_selector']            = EEH_Form_Fields::select_input(
2280
+			'MTP_template_variation',
2281
+			$variations_select_values,
2282
+			$this->_message_template_group->get_template_pack_variation()
2283
+		);
2284
+		$template_args['template_pack_label']            = $template_pack_labels->template_pack;
2285
+		$template_args['template_variation_label']       = $template_pack_labels->template_variation;
2286
+		$template_args['template_pack_description']      = $template_pack_labels->template_pack_description;
2287
+		$template_args['template_variation_description'] = $template_pack_labels->template_variation_description;
2288
+        
2289
+		$template = EE_MSG_TEMPLATE_PATH . 'template_pack_and_variations_metabox.template.php';
2290
+        
2291
+		EEH_Template::display_template($template, $template_args);
2292
+	}
2293 2293
     
2294 2294
     
2295
-    /**
2296
-     * This meta box holds any extra actions related to Message Templates
2297
-     * For now, this includes Resetting templates to defaults and sending a test email.
2298
-     *
2299
-     * @access  public
2300
-     * @return void
2301
-     * @throws EE_Error
2302
-     */
2303
-    public function extra_actions_meta_box()
2304
-    {
2305
-        $template_form_fields = array();
2306
-        
2307
-        $extra_args = array(
2308
-            'msgr'   => $this->_message_template_group->messenger(),
2309
-            'mt'     => $this->_message_template_group->message_type(),
2310
-            'GRP_ID' => $this->_message_template_group->GRP_ID()
2311
-        );
2312
-        //first we need to see if there are any fields
2313
-        $fields = $this->_message_template_group->messenger_obj()->get_test_settings_fields();
2314
-        
2315
-        if ( ! empty($fields)) {
2316
-            //yup there be fields
2317
-            foreach ($fields as $field => $config) {
2318
-                $field_id = $this->_message_template_group->messenger() . '_' . $field;
2319
-                $existing = $this->_message_template_group->messenger_obj()->get_existing_test_settings();
2320
-                $default  = isset($config['default']) ? $config['default'] : '';
2321
-                $default  = isset($config['value']) ? $config['value'] : $default;
2295
+	/**
2296
+	 * This meta box holds any extra actions related to Message Templates
2297
+	 * For now, this includes Resetting templates to defaults and sending a test email.
2298
+	 *
2299
+	 * @access  public
2300
+	 * @return void
2301
+	 * @throws EE_Error
2302
+	 */
2303
+	public function extra_actions_meta_box()
2304
+	{
2305
+		$template_form_fields = array();
2306
+        
2307
+		$extra_args = array(
2308
+			'msgr'   => $this->_message_template_group->messenger(),
2309
+			'mt'     => $this->_message_template_group->message_type(),
2310
+			'GRP_ID' => $this->_message_template_group->GRP_ID()
2311
+		);
2312
+		//first we need to see if there are any fields
2313
+		$fields = $this->_message_template_group->messenger_obj()->get_test_settings_fields();
2314
+        
2315
+		if ( ! empty($fields)) {
2316
+			//yup there be fields
2317
+			foreach ($fields as $field => $config) {
2318
+				$field_id = $this->_message_template_group->messenger() . '_' . $field;
2319
+				$existing = $this->_message_template_group->messenger_obj()->get_existing_test_settings();
2320
+				$default  = isset($config['default']) ? $config['default'] : '';
2321
+				$default  = isset($config['value']) ? $config['value'] : $default;
2322 2322
                 
2323
-                // if type is hidden and the value is empty
2324
-                // something may have gone wrong so let's correct with the defaults
2325
-                $fix              = $config['input'] === 'hidden'
2326
-                                    && isset($existing[$field])
2327
-                                    && empty($existing[$field])
2328
-                    ? $default
2329
-                    : '';
2330
-                $existing[$field] = isset($existing[$field]) && empty($fix)
2331
-                    ? $existing[$field]
2332
-                    : $fix;
2323
+				// if type is hidden and the value is empty
2324
+				// something may have gone wrong so let's correct with the defaults
2325
+				$fix              = $config['input'] === 'hidden'
2326
+									&& isset($existing[$field])
2327
+									&& empty($existing[$field])
2328
+					? $default
2329
+					: '';
2330
+				$existing[$field] = isset($existing[$field]) && empty($fix)
2331
+					? $existing[$field]
2332
+					: $fix;
2333 2333
                 
2334
-                $template_form_fields[$field_id] = array(
2335
-                    'name'       => 'test_settings_fld[' . $field . ']',
2336
-                    'label'      => $config['label'],
2337
-                    'input'      => $config['input'],
2338
-                    'type'       => $config['type'],
2339
-                    'required'   => $config['required'],
2340
-                    'validation' => $config['validation'],
2341
-                    'value'      => isset($existing[$field]) ? $existing[$field] : $default,
2342
-                    'css_class'  => $config['css_class'],
2343
-                    'options'    => isset($config['options']) ? $config['options'] : array(),
2344
-                    'default'    => $default,
2345
-                    'format'     => $config['format']
2346
-                );
2347
-            }
2348
-        }
2349
-        
2350
-        $test_settings_fields = ! empty($template_form_fields)
2351
-            ? $this->_generate_admin_form_fields($template_form_fields, 'string', 'ee_tst_settings_flds')
2352
-            : '';
2353
-        
2354
-        $test_settings_html = '';
2355
-        //print out $test_settings_fields
2356
-        if ( ! empty($test_settings_fields)) {
2357
-            echo $test_settings_fields;
2358
-            $test_settings_html = '<input type="submit" class="button-primary mtp-test-button alignright" ';
2359
-            $test_settings_html .= 'name="test_button" value="';
2360
-            $test_settings_html .= esc_html__('Test Send', 'event_espresso');
2361
-            $test_settings_html .= '" /><div style="clear:both"></div>';
2362
-        }
2363
-        
2364
-        //and button
2365
-        $test_settings_html .= '<p>'
2366
-                               . esc_html__('Need to reset this message type and start over?', 'event_espresso')
2367
-                               . '</p>';
2368
-        $test_settings_html .= '<div class="publishing-action alignright resetbutton">';
2369
-        $test_settings_html .= $this->get_action_link_or_button(
2370
-            'reset_to_default',
2371
-            'reset',
2372
-            $extra_args,
2373
-            'button-primary reset-default-button'
2374
-        );
2375
-        $test_settings_html .= '</div><div style="clear:both"></div>';
2376
-        echo $test_settings_html;
2377
-    }
2334
+				$template_form_fields[$field_id] = array(
2335
+					'name'       => 'test_settings_fld[' . $field . ']',
2336
+					'label'      => $config['label'],
2337
+					'input'      => $config['input'],
2338
+					'type'       => $config['type'],
2339
+					'required'   => $config['required'],
2340
+					'validation' => $config['validation'],
2341
+					'value'      => isset($existing[$field]) ? $existing[$field] : $default,
2342
+					'css_class'  => $config['css_class'],
2343
+					'options'    => isset($config['options']) ? $config['options'] : array(),
2344
+					'default'    => $default,
2345
+					'format'     => $config['format']
2346
+				);
2347
+			}
2348
+		}
2349
+        
2350
+		$test_settings_fields = ! empty($template_form_fields)
2351
+			? $this->_generate_admin_form_fields($template_form_fields, 'string', 'ee_tst_settings_flds')
2352
+			: '';
2353
+        
2354
+		$test_settings_html = '';
2355
+		//print out $test_settings_fields
2356
+		if ( ! empty($test_settings_fields)) {
2357
+			echo $test_settings_fields;
2358
+			$test_settings_html = '<input type="submit" class="button-primary mtp-test-button alignright" ';
2359
+			$test_settings_html .= 'name="test_button" value="';
2360
+			$test_settings_html .= esc_html__('Test Send', 'event_espresso');
2361
+			$test_settings_html .= '" /><div style="clear:both"></div>';
2362
+		}
2363
+        
2364
+		//and button
2365
+		$test_settings_html .= '<p>'
2366
+							   . esc_html__('Need to reset this message type and start over?', 'event_espresso')
2367
+							   . '</p>';
2368
+		$test_settings_html .= '<div class="publishing-action alignright resetbutton">';
2369
+		$test_settings_html .= $this->get_action_link_or_button(
2370
+			'reset_to_default',
2371
+			'reset',
2372
+			$extra_args,
2373
+			'button-primary reset-default-button'
2374
+		);
2375
+		$test_settings_html .= '</div><div style="clear:both"></div>';
2376
+		echo $test_settings_html;
2377
+	}
2378 2378
 
2379 2379
 
2380
-    /**
2381
-     * This returns the shortcode selector skeleton for a given context and field.
2382
-     *
2383
-     * @since 4.9.rc.000
2384
-     * @param string $field           The name of the field retrieving shortcodes for.
2385
-     * @param string $linked_input_id The css id of the input that the shortcodes get added to.
2386
-     * @return string
2387
-     * @throws DomainException
2388
-     * @throws EE_Error
2389
-     * @throws InvalidArgumentException
2390
-     * @throws ReflectionException
2391
-     * @throws InvalidDataTypeException
2392
-     * @throws InvalidInterfaceException
2393
-     */
2394
-    protected function _get_shortcode_selector($field, $linked_input_id)
2395
-    {
2396
-        $template_args = array(
2397
-            'shortcodes'      => $this->_get_shortcodes(array($field), true),
2398
-            'fieldname'       => $field,
2399
-            'linked_input_id' => $linked_input_id
2400
-        );
2401
-        
2402
-        return EEH_Template::display_template(
2403
-            EE_MSG_TEMPLATE_PATH . 'shortcode_selector_skeleton.template.php',
2404
-            $template_args,
2405
-            true
2406
-        );
2407
-    }
2380
+	/**
2381
+	 * This returns the shortcode selector skeleton for a given context and field.
2382
+	 *
2383
+	 * @since 4.9.rc.000
2384
+	 * @param string $field           The name of the field retrieving shortcodes for.
2385
+	 * @param string $linked_input_id The css id of the input that the shortcodes get added to.
2386
+	 * @return string
2387
+	 * @throws DomainException
2388
+	 * @throws EE_Error
2389
+	 * @throws InvalidArgumentException
2390
+	 * @throws ReflectionException
2391
+	 * @throws InvalidDataTypeException
2392
+	 * @throws InvalidInterfaceException
2393
+	 */
2394
+	protected function _get_shortcode_selector($field, $linked_input_id)
2395
+	{
2396
+		$template_args = array(
2397
+			'shortcodes'      => $this->_get_shortcodes(array($field), true),
2398
+			'fieldname'       => $field,
2399
+			'linked_input_id' => $linked_input_id
2400
+		);
2401
+        
2402
+		return EEH_Template::display_template(
2403
+			EE_MSG_TEMPLATE_PATH . 'shortcode_selector_skeleton.template.php',
2404
+			$template_args,
2405
+			true
2406
+		);
2407
+	}
2408 2408
 
2409 2409
 
2410
-    /**
2411
-     * This just takes care of returning the meta box content for shortcodes (only used on the edit message template
2412
-     * page)
2413
-     *
2414
-     * @access public
2415
-     * @return void
2416
-     * @throws EE_Error
2417
-     * @throws InvalidArgumentException
2418
-     * @throws ReflectionException
2419
-     * @throws InvalidDataTypeException
2420
-     * @throws InvalidInterfaceException
2421
-     */
2422
-    public function shortcode_meta_box()
2423
-    {
2424
-        $shortcodes = $this->_get_shortcodes(array(), false); //just make sure shortcodes property is set
2425
-        //$messenger = $this->_message_template_group->messenger_obj();
2426
-        //now let's set the content depending on the status of the shortcodes array
2427
-        if (empty($shortcodes)) {
2428
-            $content = '<p>' . esc_html__('There are no valid shortcodes available', 'event_espresso') . '</p>';
2429
-            echo $content;
2430
-        } else {
2431
-            //$alt = 0;
2432
-            ?>
2410
+	/**
2411
+	 * This just takes care of returning the meta box content for shortcodes (only used on the edit message template
2412
+	 * page)
2413
+	 *
2414
+	 * @access public
2415
+	 * @return void
2416
+	 * @throws EE_Error
2417
+	 * @throws InvalidArgumentException
2418
+	 * @throws ReflectionException
2419
+	 * @throws InvalidDataTypeException
2420
+	 * @throws InvalidInterfaceException
2421
+	 */
2422
+	public function shortcode_meta_box()
2423
+	{
2424
+		$shortcodes = $this->_get_shortcodes(array(), false); //just make sure shortcodes property is set
2425
+		//$messenger = $this->_message_template_group->messenger_obj();
2426
+		//now let's set the content depending on the status of the shortcodes array
2427
+		if (empty($shortcodes)) {
2428
+			$content = '<p>' . esc_html__('There are no valid shortcodes available', 'event_espresso') . '</p>';
2429
+			echo $content;
2430
+		} else {
2431
+			//$alt = 0;
2432
+			?>
2433 2433
             <div style="float:right; margin-top:10px"><?php echo $this->_get_help_tab_link('message_template_shortcodes'); ?></div>
2434 2434
             <p class="small-text"><?php printf(
2435
-                    esc_html__(
2436
-                        'You can view the shortcodes usable in your template by clicking the %s icon next to each field.',
2437
-                        'event_espresso'
2438
-                    ),
2439
-                    '<span class="dashicons dashicons-menu"></span>'
2440
-                ); ?></p>
2435
+					esc_html__(
2436
+						'You can view the shortcodes usable in your template by clicking the %s icon next to each field.',
2437
+						'event_espresso'
2438
+					),
2439
+					'<span class="dashicons dashicons-menu"></span>'
2440
+				); ?></p>
2441 2441
             <?php
2442
-        }
2442
+		}
2443 2443
         
2444 2444
         
2445
-    }
2445
+	}
2446 2446
 
2447 2447
 
2448
-    /**
2449
-     * used to set the $_shortcodes property for when its needed elsewhere.
2450
-     *
2451
-     * @access protected
2452
-     * @return void
2453
-     * @throws EE_Error
2454
-     * @throws InvalidArgumentException
2455
-     * @throws ReflectionException
2456
-     * @throws InvalidDataTypeException
2457
-     * @throws InvalidInterfaceException
2458
-     */
2459
-    protected function _set_shortcodes()
2460
-    {
2461
-        
2462
-        //no need to run this if the property is already set
2463
-        if ( ! empty($this->_shortcodes)) {
2464
-            return;
2465
-        }
2466
-        
2467
-        $this->_shortcodes = $this->_get_shortcodes();
2468
-    }
2448
+	/**
2449
+	 * used to set the $_shortcodes property for when its needed elsewhere.
2450
+	 *
2451
+	 * @access protected
2452
+	 * @return void
2453
+	 * @throws EE_Error
2454
+	 * @throws InvalidArgumentException
2455
+	 * @throws ReflectionException
2456
+	 * @throws InvalidDataTypeException
2457
+	 * @throws InvalidInterfaceException
2458
+	 */
2459
+	protected function _set_shortcodes()
2460
+	{
2461
+        
2462
+		//no need to run this if the property is already set
2463
+		if ( ! empty($this->_shortcodes)) {
2464
+			return;
2465
+		}
2466
+        
2467
+		$this->_shortcodes = $this->_get_shortcodes();
2468
+	}
2469 2469
 
2470 2470
 
2471
-    /**
2472
-     * get's all shortcodes for a given template group. (typically used by _set_shortcodes to set the $_shortcodes
2473
-     * property)
2474
-     *
2475
-     * @access  protected
2476
-     * @param  array   $fields include an array of specific field names that you want to be used to get the shortcodes
2477
-     *                         for. Defaults to all (for the given context)
2478
-     * @param  boolean $merged Whether to merge all the shortcodes into one list of unique shortcodes
2479
-     * @return array Shortcodes indexed by fieldname and the an array of shortcode/label pairs OR if merged is
2480
-     *                         true just an array of shortcode/label pairs.
2481
-     * @throws EE_Error
2482
-     * @throws InvalidArgumentException
2483
-     * @throws ReflectionException
2484
-     * @throws InvalidDataTypeException
2485
-     * @throws InvalidInterfaceException
2486
-     */
2487
-    protected function _get_shortcodes($fields = array(), $merged = true)
2488
-    {
2489
-        $this->_set_message_template_group();
2490
-        
2491
-        //we need the messenger and message template to retrieve the valid shortcodes array.
2492
-        $GRP_ID  = isset($this->_req_data['id']) && ! empty($this->_req_data['id'])
2493
-            ? absint($this->_req_data['id'])
2494
-            : false;
2495
-        $context = isset($this->_req_data['context'])
2496
-            ? $this->_req_data['context']
2497
-            : key($this->_message_template_group->contexts_config());
2498
-        
2499
-        return ! empty($GRP_ID) ? $this->_message_template_group->get_shortcodes($context, $fields, $merged) : array();
2500
-    }
2471
+	/**
2472
+	 * get's all shortcodes for a given template group. (typically used by _set_shortcodes to set the $_shortcodes
2473
+	 * property)
2474
+	 *
2475
+	 * @access  protected
2476
+	 * @param  array   $fields include an array of specific field names that you want to be used to get the shortcodes
2477
+	 *                         for. Defaults to all (for the given context)
2478
+	 * @param  boolean $merged Whether to merge all the shortcodes into one list of unique shortcodes
2479
+	 * @return array Shortcodes indexed by fieldname and the an array of shortcode/label pairs OR if merged is
2480
+	 *                         true just an array of shortcode/label pairs.
2481
+	 * @throws EE_Error
2482
+	 * @throws InvalidArgumentException
2483
+	 * @throws ReflectionException
2484
+	 * @throws InvalidDataTypeException
2485
+	 * @throws InvalidInterfaceException
2486
+	 */
2487
+	protected function _get_shortcodes($fields = array(), $merged = true)
2488
+	{
2489
+		$this->_set_message_template_group();
2490
+        
2491
+		//we need the messenger and message template to retrieve the valid shortcodes array.
2492
+		$GRP_ID  = isset($this->_req_data['id']) && ! empty($this->_req_data['id'])
2493
+			? absint($this->_req_data['id'])
2494
+			: false;
2495
+		$context = isset($this->_req_data['context'])
2496
+			? $this->_req_data['context']
2497
+			: key($this->_message_template_group->contexts_config());
2498
+        
2499
+		return ! empty($GRP_ID) ? $this->_message_template_group->get_shortcodes($context, $fields, $merged) : array();
2500
+	}
2501 2501
 
2502 2502
 
2503
-    /**
2504
-     * This sets the _message_template property (containing the called message_template object)
2505
-     *
2506
-     * @access protected
2507
-     * @return void
2508
-     * @throws EE_Error
2509
-     * @throws InvalidArgumentException
2510
-     * @throws ReflectionException
2511
-     * @throws InvalidDataTypeException
2512
-     * @throws InvalidInterfaceException
2513
-     */
2514
-    protected function _set_message_template_group()
2515
-    {
2516
-        
2517
-        if ( ! empty($this->_message_template_group)) {
2518
-            return;
2519
-        } //get out if this is already set.
2520
-        
2521
-        $GRP_ID = ! empty($this->_req_data['GRP_ID']) ? absint($this->_req_data['GRP_ID']) : false;
2522
-        $GRP_ID = empty($GRP_ID) && ! empty($this->_req_data['id']) ? $this->_req_data['id'] : $GRP_ID;
2523
-        
2524
-        //let's get the message templates
2525
-        $MTP = EEM_Message_Template_Group::instance();
2526
-        
2527
-        if (empty($GRP_ID)) {
2528
-            $this->_message_template_group = $MTP->create_default_object();
2529
-        } else {
2530
-            $this->_message_template_group = $MTP->get_one_by_ID($GRP_ID);
2531
-        }
2532
-        
2533
-        $this->_template_pack = $this->_message_template_group->get_template_pack();
2534
-        $this->_variation     = $this->_message_template_group->get_template_pack_variation();
2535
-        
2536
-    }
2503
+	/**
2504
+	 * This sets the _message_template property (containing the called message_template object)
2505
+	 *
2506
+	 * @access protected
2507
+	 * @return void
2508
+	 * @throws EE_Error
2509
+	 * @throws InvalidArgumentException
2510
+	 * @throws ReflectionException
2511
+	 * @throws InvalidDataTypeException
2512
+	 * @throws InvalidInterfaceException
2513
+	 */
2514
+	protected function _set_message_template_group()
2515
+	{
2516
+        
2517
+		if ( ! empty($this->_message_template_group)) {
2518
+			return;
2519
+		} //get out if this is already set.
2520
+        
2521
+		$GRP_ID = ! empty($this->_req_data['GRP_ID']) ? absint($this->_req_data['GRP_ID']) : false;
2522
+		$GRP_ID = empty($GRP_ID) && ! empty($this->_req_data['id']) ? $this->_req_data['id'] : $GRP_ID;
2523
+        
2524
+		//let's get the message templates
2525
+		$MTP = EEM_Message_Template_Group::instance();
2526
+        
2527
+		if (empty($GRP_ID)) {
2528
+			$this->_message_template_group = $MTP->create_default_object();
2529
+		} else {
2530
+			$this->_message_template_group = $MTP->get_one_by_ID($GRP_ID);
2531
+		}
2532
+        
2533
+		$this->_template_pack = $this->_message_template_group->get_template_pack();
2534
+		$this->_variation     = $this->_message_template_group->get_template_pack_variation();
2535
+        
2536
+	}
2537 2537
 
2538 2538
 
2539
-    /**
2540
-     * sets up a context switcher for edit forms
2541
-     *
2542
-     * @access  protected
2543
-     * @param  EE_Message_Template_Group $template_group_object the template group object being displayed on the form
2544
-     * @param array                      $args                  various things the context switcher needs.
2545
-     * @throws EE_Error
2546
-     */
2547
-    protected function _set_context_switcher(EE_Message_Template_Group $template_group_object, $args)
2548
-    {
2549
-        $context_details = $template_group_object->contexts_config();
2550
-        $context_label   = $template_group_object->context_label();
2551
-        ob_start();
2552
-        ?>
2539
+	/**
2540
+	 * sets up a context switcher for edit forms
2541
+	 *
2542
+	 * @access  protected
2543
+	 * @param  EE_Message_Template_Group $template_group_object the template group object being displayed on the form
2544
+	 * @param array                      $args                  various things the context switcher needs.
2545
+	 * @throws EE_Error
2546
+	 */
2547
+	protected function _set_context_switcher(EE_Message_Template_Group $template_group_object, $args)
2548
+	{
2549
+		$context_details = $template_group_object->contexts_config();
2550
+		$context_label   = $template_group_object->context_label();
2551
+		ob_start();
2552
+		?>
2553 2553
         <div class="ee-msg-switcher-container">
2554 2554
             <form method="get" action="<?php echo EE_MSG_ADMIN_URL; ?>" id="ee-msg-context-switcher-frm">
2555 2555
                 <?php
2556
-                foreach ($args as $name => $value) {
2557
-                    if ($name === 'context' || empty($value) || $name === 'extra') {
2558
-                        continue;
2559
-                    }
2560
-                    ?>
2556
+				foreach ($args as $name => $value) {
2557
+					if ($name === 'context' || empty($value) || $name === 'extra') {
2558
+						continue;
2559
+					}
2560
+					?>
2561 2561
                     <input type="hidden" name="<?php echo $name; ?>" value="<?php echo $value; ?>"/>
2562 2562
                     <?php
2563
-                }
2564
-                //setup nonce_url
2565
-                wp_nonce_field($args['action'] . '_nonce', $args['action'] . '_nonce', false);
2566
-                ?>
2563
+				}
2564
+				//setup nonce_url
2565
+				wp_nonce_field($args['action'] . '_nonce', $args['action'] . '_nonce', false);
2566
+				?>
2567 2567
                 <select name="context">
2568 2568
                     <?php
2569
-                    $context_templates = $template_group_object->context_templates();
2570
-                    if (is_array($context_templates)) :
2571
-                        foreach ($context_templates as $context => $template_fields) :
2572
-                            $checked = ($context === $args['context']) ? 'selected="selected"' : '';
2573
-                            ?>
2569
+					$context_templates = $template_group_object->context_templates();
2570
+					if (is_array($context_templates)) :
2571
+						foreach ($context_templates as $context => $template_fields) :
2572
+							$checked = ($context === $args['context']) ? 'selected="selected"' : '';
2573
+							?>
2574 2574
                             <option value="<?php echo $context; ?>" <?php echo $checked; ?>>
2575 2575
                                 <?php echo $context_details[$context]['label']; ?>
2576 2576
                             </option>
@@ -2583,1898 +2583,1898 @@  discard block
 block discarded – undo
2583 2583
             <?php echo $args['extra']; ?>
2584 2584
         </div> <!-- end .ee-msg-switcher-container -->
2585 2585
         <?php
2586
-        $output = ob_get_contents();
2587
-        ob_clean();
2588
-        $this->_context_switcher = $output;
2589
-    }
2586
+		$output = ob_get_contents();
2587
+		ob_clean();
2588
+		$this->_context_switcher = $output;
2589
+	}
2590 2590
     
2591 2591
     
2592
-    /**
2593
-     * utility for sanitizing new values coming in.
2594
-     * Note: this is only used when updating a context.
2595
-     *
2596
-     * @access protected
2597
-     *
2598
-     * @param int $index This helps us know which template field to select from the request array.
2599
-     *
2600
-     * @return array
2601
-     */
2602
-    protected function _set_message_template_column_values($index)
2603
-    {
2604
-        if (is_array($this->_req_data['MTP_template_fields'][$index]['content'])) {
2605
-            foreach ($this->_req_data['MTP_template_fields'][$index]['content'] as $field => $value) {
2606
-                $this->_req_data['MTP_template_fields'][$index]['content'][$field] = $value;
2607
-            }
2608
-        }
2609
-        
2610
-        
2611
-        $set_column_values = array(
2612
-            'MTP_ID'             => absint($this->_req_data['MTP_template_fields'][$index]['MTP_ID']),
2613
-            'GRP_ID'             => absint($this->_req_data['GRP_ID']),
2614
-            'MTP_user_id'        => absint($this->_req_data['MTP_user_id']),
2615
-            'MTP_messenger'      => strtolower($this->_req_data['MTP_messenger']),
2616
-            'MTP_message_type'   => strtolower($this->_req_data['MTP_message_type']),
2617
-            'MTP_template_field' => strtolower($this->_req_data['MTP_template_fields'][$index]['name']),
2618
-            'MTP_context'        => strtolower($this->_req_data['MTP_context']),
2619
-            'MTP_content'        => $this->_req_data['MTP_template_fields'][$index]['content'],
2620
-            'MTP_is_global'      => isset($this->_req_data['MTP_is_global'])
2621
-                ? absint($this->_req_data['MTP_is_global'])
2622
-                : 0,
2623
-            'MTP_is_override'    => isset($this->_req_data['MTP_is_override'])
2624
-                ? absint($this->_req_data['MTP_is_override'])
2625
-                : 0,
2626
-            'MTP_deleted'        => absint($this->_req_data['MTP_deleted']),
2627
-            'MTP_is_active'      => absint($this->_req_data['MTP_is_active'])
2628
-        );
2629
-        
2630
-        
2631
-        return $set_column_values;
2632
-    }
2592
+	/**
2593
+	 * utility for sanitizing new values coming in.
2594
+	 * Note: this is only used when updating a context.
2595
+	 *
2596
+	 * @access protected
2597
+	 *
2598
+	 * @param int $index This helps us know which template field to select from the request array.
2599
+	 *
2600
+	 * @return array
2601
+	 */
2602
+	protected function _set_message_template_column_values($index)
2603
+	{
2604
+		if (is_array($this->_req_data['MTP_template_fields'][$index]['content'])) {
2605
+			foreach ($this->_req_data['MTP_template_fields'][$index]['content'] as $field => $value) {
2606
+				$this->_req_data['MTP_template_fields'][$index]['content'][$field] = $value;
2607
+			}
2608
+		}
2609
+        
2610
+        
2611
+		$set_column_values = array(
2612
+			'MTP_ID'             => absint($this->_req_data['MTP_template_fields'][$index]['MTP_ID']),
2613
+			'GRP_ID'             => absint($this->_req_data['GRP_ID']),
2614
+			'MTP_user_id'        => absint($this->_req_data['MTP_user_id']),
2615
+			'MTP_messenger'      => strtolower($this->_req_data['MTP_messenger']),
2616
+			'MTP_message_type'   => strtolower($this->_req_data['MTP_message_type']),
2617
+			'MTP_template_field' => strtolower($this->_req_data['MTP_template_fields'][$index]['name']),
2618
+			'MTP_context'        => strtolower($this->_req_data['MTP_context']),
2619
+			'MTP_content'        => $this->_req_data['MTP_template_fields'][$index]['content'],
2620
+			'MTP_is_global'      => isset($this->_req_data['MTP_is_global'])
2621
+				? absint($this->_req_data['MTP_is_global'])
2622
+				: 0,
2623
+			'MTP_is_override'    => isset($this->_req_data['MTP_is_override'])
2624
+				? absint($this->_req_data['MTP_is_override'])
2625
+				: 0,
2626
+			'MTP_deleted'        => absint($this->_req_data['MTP_deleted']),
2627
+			'MTP_is_active'      => absint($this->_req_data['MTP_is_active'])
2628
+		);
2629
+        
2630
+        
2631
+		return $set_column_values;
2632
+	}
2633 2633
     
2634 2634
     
2635
-    protected function _insert_or_update_message_template($new = false)
2636
-    {
2637
-        
2638
-        do_action('AHEE_log', __FILE__, __FUNCTION__, '');
2639
-        $success  = 0;
2640
-        $override = false;
2641
-        
2642
-        //setup notices description
2643
-        $messenger_slug = ! empty($this->_req_data['MTP_messenger']) ? $this->_req_data['MTP_messenger'] : '';
2644
-        
2645
-        //need the message type and messenger objects to be able to use the labels for the notices
2646
-        $messenger_object = $this->_message_resource_manager->get_messenger($messenger_slug);
2647
-        $messenger_label  = $messenger_object instanceof EE_messenger
2648
-            ? ucwords($messenger_object->label['singular'])
2649
-            : '';
2650
-        
2651
-        $message_type_slug   = ! empty($this->_req_data['MTP_message_type'])
2652
-            ? $this->_req_data['MTP_message_type']
2653
-            : '';
2654
-        $message_type_object = $this->_message_resource_manager->get_message_type($message_type_slug);
2655
-        
2656
-        $message_type_label = $message_type_object instanceof EE_message_type
2657
-            ? ucwords($message_type_object->label['singular'])
2658
-            : '';
2659
-        
2660
-        $context_slug = ! empty($this->_req_data['MTP_context'])
2661
-            ? $this->_req_data['MTP_context']
2662
-            : '';
2663
-        $context      = ucwords(str_replace('_', ' ', $context_slug));
2664
-        
2665
-        $item_desc = $messenger_label && $message_type_label
2666
-            ? $messenger_label . ' ' . $message_type_label . ' ' . $context . ' '
2667
-            : '';
2668
-        $item_desc .= 'Message Template';
2669
-        $query_args  = array();
2670
-        $edit_array  = array();
2671
-        $action_desc = '';
2672
-        
2673
-        //if this is "new" then we need to generate the default contexts for the selected messenger/message_type for
2674
-        // user to edit.
2675
-        if ($new) {
2676
-            $GRP_ID = ! empty($this->_req_data['GRP_ID']) ? $this->_req_data['GRP_ID'] : 0;
2677
-            if ($edit_array = $this->_generate_new_templates($messenger_slug, $message_type_slug, $GRP_ID)) {
2678
-                if (empty($edit_array)) {
2679
-                    $success = 0;
2680
-                } else {
2681
-                    $success    = 1;
2682
-                    $edit_array = $edit_array[0];
2683
-                    $query_args = array(
2684
-                        'id'      => $edit_array['GRP_ID'],
2685
-                        'context' => $edit_array['MTP_context'],
2686
-                        'action'  => 'edit_message_template'
2687
-                    );
2688
-                }
2689
-            }
2690
-            $action_desc = 'created';
2691
-        } else {
2692
-            $MTPG = EEM_Message_Template_Group::instance();
2693
-            $MTP  = EEM_Message_Template::instance();
2635
+	protected function _insert_or_update_message_template($new = false)
2636
+	{
2637
+        
2638
+		do_action('AHEE_log', __FILE__, __FUNCTION__, '');
2639
+		$success  = 0;
2640
+		$override = false;
2641
+        
2642
+		//setup notices description
2643
+		$messenger_slug = ! empty($this->_req_data['MTP_messenger']) ? $this->_req_data['MTP_messenger'] : '';
2644
+        
2645
+		//need the message type and messenger objects to be able to use the labels for the notices
2646
+		$messenger_object = $this->_message_resource_manager->get_messenger($messenger_slug);
2647
+		$messenger_label  = $messenger_object instanceof EE_messenger
2648
+			? ucwords($messenger_object->label['singular'])
2649
+			: '';
2650
+        
2651
+		$message_type_slug   = ! empty($this->_req_data['MTP_message_type'])
2652
+			? $this->_req_data['MTP_message_type']
2653
+			: '';
2654
+		$message_type_object = $this->_message_resource_manager->get_message_type($message_type_slug);
2655
+        
2656
+		$message_type_label = $message_type_object instanceof EE_message_type
2657
+			? ucwords($message_type_object->label['singular'])
2658
+			: '';
2659
+        
2660
+		$context_slug = ! empty($this->_req_data['MTP_context'])
2661
+			? $this->_req_data['MTP_context']
2662
+			: '';
2663
+		$context      = ucwords(str_replace('_', ' ', $context_slug));
2664
+        
2665
+		$item_desc = $messenger_label && $message_type_label
2666
+			? $messenger_label . ' ' . $message_type_label . ' ' . $context . ' '
2667
+			: '';
2668
+		$item_desc .= 'Message Template';
2669
+		$query_args  = array();
2670
+		$edit_array  = array();
2671
+		$action_desc = '';
2672
+        
2673
+		//if this is "new" then we need to generate the default contexts for the selected messenger/message_type for
2674
+		// user to edit.
2675
+		if ($new) {
2676
+			$GRP_ID = ! empty($this->_req_data['GRP_ID']) ? $this->_req_data['GRP_ID'] : 0;
2677
+			if ($edit_array = $this->_generate_new_templates($messenger_slug, $message_type_slug, $GRP_ID)) {
2678
+				if (empty($edit_array)) {
2679
+					$success = 0;
2680
+				} else {
2681
+					$success    = 1;
2682
+					$edit_array = $edit_array[0];
2683
+					$query_args = array(
2684
+						'id'      => $edit_array['GRP_ID'],
2685
+						'context' => $edit_array['MTP_context'],
2686
+						'action'  => 'edit_message_template'
2687
+					);
2688
+				}
2689
+			}
2690
+			$action_desc = 'created';
2691
+		} else {
2692
+			$MTPG = EEM_Message_Template_Group::instance();
2693
+			$MTP  = EEM_Message_Template::instance();
2694 2694
             
2695 2695
             
2696
-            //run update for each template field in displayed context
2697
-            if ( ! isset($this->_req_data['MTP_template_fields']) && empty($this->_req_data['MTP_template_fields'])) {
2698
-                EE_Error::add_error(
2699
-                    esc_html__(
2700
-                        'There was a problem saving the template fields from the form because I didn\'t receive any actual template field data.',
2701
-                        'event_espresso'
2702
-                    ),
2703
-                    __FILE__,
2704
-                    __FUNCTION__,
2705
-                    __LINE__
2706
-                );
2707
-                $success = 0;
2696
+			//run update for each template field in displayed context
2697
+			if ( ! isset($this->_req_data['MTP_template_fields']) && empty($this->_req_data['MTP_template_fields'])) {
2698
+				EE_Error::add_error(
2699
+					esc_html__(
2700
+						'There was a problem saving the template fields from the form because I didn\'t receive any actual template field data.',
2701
+						'event_espresso'
2702
+					),
2703
+					__FILE__,
2704
+					__FUNCTION__,
2705
+					__LINE__
2706
+				);
2707
+				$success = 0;
2708 2708
                 
2709
-            } else {
2710
-                //first validate all fields!
2711
-                // this filter allows client code to add its own validation to the template fields as well.
2712
-                // returning an empty array means everything passed validation.
2713
-                // errors in validation should be represented in an array with the following shape:
2714
-                // array(
2715
-                //   'fieldname' => array(
2716
-                //          'msg' => 'error message'
2717
-                //          'value' => 'value for field producing error'
2718
-                // )
2719
-                $custom_validation = (array) apply_filters(
2720
-                    'FHEE__Messages_Admin_Page___insert_or_update_message_template__validates',
2721
-                    array(),
2722
-                    $this->_req_data['MTP_template_fields'],
2723
-                    $context_slug,
2724
-                    $messenger_slug,
2725
-                    $message_type_slug
2726
-                );
2709
+			} else {
2710
+				//first validate all fields!
2711
+				// this filter allows client code to add its own validation to the template fields as well.
2712
+				// returning an empty array means everything passed validation.
2713
+				// errors in validation should be represented in an array with the following shape:
2714
+				// array(
2715
+				//   'fieldname' => array(
2716
+				//          'msg' => 'error message'
2717
+				//          'value' => 'value for field producing error'
2718
+				// )
2719
+				$custom_validation = (array) apply_filters(
2720
+					'FHEE__Messages_Admin_Page___insert_or_update_message_template__validates',
2721
+					array(),
2722
+					$this->_req_data['MTP_template_fields'],
2723
+					$context_slug,
2724
+					$messenger_slug,
2725
+					$message_type_slug
2726
+				);
2727 2727
 
2728
-                $system_validation = $MTPG->validate(
2729
-                    $this->_req_data['MTP_template_fields'],
2730
-                    $context_slug,
2731
-                    $messenger_slug,
2732
-                    $message_type_slug
2733
-                );
2728
+				$system_validation = $MTPG->validate(
2729
+					$this->_req_data['MTP_template_fields'],
2730
+					$context_slug,
2731
+					$messenger_slug,
2732
+					$message_type_slug
2733
+				);
2734 2734
 
2735
-                $system_validation = ! is_array($system_validation) && $system_validation ? array() : $system_validation;
2736
-                $validates = array_merge($custom_validation, $system_validation);
2735
+				$system_validation = ! is_array($system_validation) && $system_validation ? array() : $system_validation;
2736
+				$validates = array_merge($custom_validation, $system_validation);
2737 2737
                 
2738
-                //if $validate returned error messages (i.e. is_array()) then we need to process them and setup an
2739
-                // appropriate response. HMM, dang this isn't correct, $validates will ALWAYS be an array.
2740
-                //  WE need to make sure there is no actual error messages in validates.
2741
-                if (is_array($validates) && ! empty($validates)) {
2742
-                    //add the transient so when the form loads we know which fields to highlight
2743
-                    $this->_add_transient('edit_message_template', $validates);
2738
+				//if $validate returned error messages (i.e. is_array()) then we need to process them and setup an
2739
+				// appropriate response. HMM, dang this isn't correct, $validates will ALWAYS be an array.
2740
+				//  WE need to make sure there is no actual error messages in validates.
2741
+				if (is_array($validates) && ! empty($validates)) {
2742
+					//add the transient so when the form loads we know which fields to highlight
2743
+					$this->_add_transient('edit_message_template', $validates);
2744 2744
                     
2745
-                    $success = 0;
2745
+					$success = 0;
2746 2746
                     
2747
-                    //setup notices
2748
-                    foreach ($validates as $field => $error) {
2749
-                        if (isset($error['msg'])) {
2750
-                            EE_Error::add_error($error['msg'], __FILE__, __FUNCTION__, __LINE__);
2751
-                        }
2752
-                    }
2747
+					//setup notices
2748
+					foreach ($validates as $field => $error) {
2749
+						if (isset($error['msg'])) {
2750
+							EE_Error::add_error($error['msg'], __FILE__, __FUNCTION__, __LINE__);
2751
+						}
2752
+					}
2753 2753
                     
2754
-                } else {
2755
-                    $set_column_values = array();
2756
-                    foreach ($this->_req_data['MTP_template_fields'] as $template_field => $content) {
2757
-                        $set_column_values = $this->_set_message_template_column_values($template_field);
2754
+				} else {
2755
+					$set_column_values = array();
2756
+					foreach ($this->_req_data['MTP_template_fields'] as $template_field => $content) {
2757
+						$set_column_values = $this->_set_message_template_column_values($template_field);
2758 2758
                         
2759
-                        $where_cols_n_values = array(
2760
-                            'MTP_ID' => $this->_req_data['MTP_template_fields'][$template_field]['MTP_ID']
2761
-                        );
2762
-                        //if they aren't allowed to use all JS, restrict them to just posty-y tags
2763
-                        if (! current_user_can('unfiltered_html')){
2764
-                            if (is_array($set_column_values['MTP_content'])){
2765
-                                 foreach($set_column_values['MTP_content'] as $key => $value) {
2766
-                                     //remove slashes so wp_kses works properly (its wp_kses_stripslashes() function
2767
-                                     //only removes slashes from double-quotes, so attributes using single quotes always
2768
-                                     //appear invalid.) But currently the models expect slashed data, so after wp_kses
2769
-                                     //runs we need to re-slash the data. Sheesh. See
2770
-                                     //https://events.codebasehq.com/projects/event-espresso/tickets/11211#update-47321587
2771
-                                     $set_column_values['MTP_content'][$key] = addslashes(
2772
-                                             wp_kses(
2773
-                                                 stripslashes($value),
2774
-                                                 wp_kses_allowed_html('post')
2775
-                                             )
2776
-                                     );
2777
-                                 }
2778
-                            } else {
2779
-                                $set_column_values['MTP_content'] = wp_kses(
2780
-                                    $set_column_values['MTP_content'],
2781
-                                    wp_kses_allowed_html('post')
2782
-                                );
2783
-                            }
2784
-                        }
2785
-                        $message_template_fields = array(
2786
-                            'GRP_ID'             => $set_column_values['GRP_ID'],
2787
-                            'MTP_template_field' => $set_column_values['MTP_template_field'],
2788
-                            'MTP_context'        => $set_column_values['MTP_context'],
2789
-                            'MTP_content'        => $set_column_values['MTP_content']
2790
-                        );
2791
-                        if ($updated = $MTP->update($message_template_fields, array($where_cols_n_values))) {
2792
-                            if ($updated === false) {
2793
-                                EE_Error::add_error(
2794
-                                    sprintf(
2795
-                                        esc_html__('%s field was NOT updated for some reason', 'event_espresso'),
2796
-                                        $template_field
2797
-                                    ),
2798
-                                    __FILE__,
2799
-                                    __FUNCTION__,
2800
-                                    __LINE__
2801
-                                );
2802
-                            } else {
2803
-                                $success = 1;
2804
-                            }
2805
-                        } else {
2806
-                            //only do this logic if we don't have a MTP_ID for this field
2807
-                            if (empty($this->_req_data['MTP_template_fields'][$template_field]['MTP_ID'])) {
2808
-                                //this has already been through the template field validator and sanitized, so it will be
2809
-                                //safe to insert this field.  Why insert?  This typically happens when we introduce a new
2810
-                                //message template field in a messenger/message type and existing users don't have the
2811
-                                //default setup for it.
2812
-                                //@link https://events.codebasehq.com/projects/event-espresso/tickets/9465
2813
-                                $updated = $MTP->insert($message_template_fields);
2814
-                                if (! $updated || is_wp_error($updated)) {
2815
-                                    EE_Error::add_error(
2816
-                                        sprintf(
2817
-                                            esc_html__('%s field could not be updated.', 'event_espresso'),
2818
-                                            $template_field
2819
-                                        ),
2820
-                                        __FILE__,
2821
-                                        __FUNCTION__,
2822
-                                        __LINE__
2823
-                                    );
2824
-                                    $success = 0;
2825
-                                } else {
2826
-                                    $success = 1;
2827
-                                }
2828
-                            }
2829
-                        }
2830
-                        $action_desc = 'updated';
2831
-                    }
2759
+						$where_cols_n_values = array(
2760
+							'MTP_ID' => $this->_req_data['MTP_template_fields'][$template_field]['MTP_ID']
2761
+						);
2762
+						//if they aren't allowed to use all JS, restrict them to just posty-y tags
2763
+						if (! current_user_can('unfiltered_html')){
2764
+							if (is_array($set_column_values['MTP_content'])){
2765
+								 foreach($set_column_values['MTP_content'] as $key => $value) {
2766
+									 //remove slashes so wp_kses works properly (its wp_kses_stripslashes() function
2767
+									 //only removes slashes from double-quotes, so attributes using single quotes always
2768
+									 //appear invalid.) But currently the models expect slashed data, so after wp_kses
2769
+									 //runs we need to re-slash the data. Sheesh. See
2770
+									 //https://events.codebasehq.com/projects/event-espresso/tickets/11211#update-47321587
2771
+									 $set_column_values['MTP_content'][$key] = addslashes(
2772
+											 wp_kses(
2773
+												 stripslashes($value),
2774
+												 wp_kses_allowed_html('post')
2775
+											 )
2776
+									 );
2777
+								 }
2778
+							} else {
2779
+								$set_column_values['MTP_content'] = wp_kses(
2780
+									$set_column_values['MTP_content'],
2781
+									wp_kses_allowed_html('post')
2782
+								);
2783
+							}
2784
+						}
2785
+						$message_template_fields = array(
2786
+							'GRP_ID'             => $set_column_values['GRP_ID'],
2787
+							'MTP_template_field' => $set_column_values['MTP_template_field'],
2788
+							'MTP_context'        => $set_column_values['MTP_context'],
2789
+							'MTP_content'        => $set_column_values['MTP_content']
2790
+						);
2791
+						if ($updated = $MTP->update($message_template_fields, array($where_cols_n_values))) {
2792
+							if ($updated === false) {
2793
+								EE_Error::add_error(
2794
+									sprintf(
2795
+										esc_html__('%s field was NOT updated for some reason', 'event_espresso'),
2796
+										$template_field
2797
+									),
2798
+									__FILE__,
2799
+									__FUNCTION__,
2800
+									__LINE__
2801
+								);
2802
+							} else {
2803
+								$success = 1;
2804
+							}
2805
+						} else {
2806
+							//only do this logic if we don't have a MTP_ID for this field
2807
+							if (empty($this->_req_data['MTP_template_fields'][$template_field]['MTP_ID'])) {
2808
+								//this has already been through the template field validator and sanitized, so it will be
2809
+								//safe to insert this field.  Why insert?  This typically happens when we introduce a new
2810
+								//message template field in a messenger/message type and existing users don't have the
2811
+								//default setup for it.
2812
+								//@link https://events.codebasehq.com/projects/event-espresso/tickets/9465
2813
+								$updated = $MTP->insert($message_template_fields);
2814
+								if (! $updated || is_wp_error($updated)) {
2815
+									EE_Error::add_error(
2816
+										sprintf(
2817
+											esc_html__('%s field could not be updated.', 'event_espresso'),
2818
+											$template_field
2819
+										),
2820
+										__FILE__,
2821
+										__FUNCTION__,
2822
+										__LINE__
2823
+									);
2824
+									$success = 0;
2825
+								} else {
2826
+									$success = 1;
2827
+								}
2828
+							}
2829
+						}
2830
+						$action_desc = 'updated';
2831
+					}
2832 2832
                     
2833
-                    //we can use the last set_column_values for the MTPG update (because its the same for all of these specific MTPs)
2834
-                    $mtpg_fields = array(
2835
-                        'MTP_user_id'      => $set_column_values['MTP_user_id'],
2836
-                        'MTP_messenger'    => $set_column_values['MTP_messenger'],
2837
-                        'MTP_message_type' => $set_column_values['MTP_message_type'],
2838
-                        'MTP_is_global'    => $set_column_values['MTP_is_global'],
2839
-                        'MTP_is_override'  => $set_column_values['MTP_is_override'],
2840
-                        'MTP_deleted'      => $set_column_values['MTP_deleted'],
2841
-                        'MTP_is_active'    => $set_column_values['MTP_is_active'],
2842
-                        'MTP_name'         => ! empty($this->_req_data['ee_msg_non_global_fields']['MTP_name'])
2843
-                            ? $this->_req_data['ee_msg_non_global_fields']['MTP_name']
2844
-                            : '',
2845
-                        'MTP_description'  => ! empty($this->_req_data['ee_msg_non_global_fields']['MTP_description'])
2846
-                            ? $this->_req_data['ee_msg_non_global_fields']['MTP_description']
2847
-                            : ''
2848
-                    );
2833
+					//we can use the last set_column_values for the MTPG update (because its the same for all of these specific MTPs)
2834
+					$mtpg_fields = array(
2835
+						'MTP_user_id'      => $set_column_values['MTP_user_id'],
2836
+						'MTP_messenger'    => $set_column_values['MTP_messenger'],
2837
+						'MTP_message_type' => $set_column_values['MTP_message_type'],
2838
+						'MTP_is_global'    => $set_column_values['MTP_is_global'],
2839
+						'MTP_is_override'  => $set_column_values['MTP_is_override'],
2840
+						'MTP_deleted'      => $set_column_values['MTP_deleted'],
2841
+						'MTP_is_active'    => $set_column_values['MTP_is_active'],
2842
+						'MTP_name'         => ! empty($this->_req_data['ee_msg_non_global_fields']['MTP_name'])
2843
+							? $this->_req_data['ee_msg_non_global_fields']['MTP_name']
2844
+							: '',
2845
+						'MTP_description'  => ! empty($this->_req_data['ee_msg_non_global_fields']['MTP_description'])
2846
+							? $this->_req_data['ee_msg_non_global_fields']['MTP_description']
2847
+							: ''
2848
+					);
2849 2849
                     
2850
-                    $mtpg_where = array('GRP_ID' => $set_column_values['GRP_ID']);
2851
-                    $updated    = $MTPG->update($mtpg_fields, array($mtpg_where));
2850
+					$mtpg_where = array('GRP_ID' => $set_column_values['GRP_ID']);
2851
+					$updated    = $MTPG->update($mtpg_fields, array($mtpg_where));
2852 2852
                     
2853
-                    if ($updated === false) {
2854
-                        EE_Error::add_error(
2855
-                            sprintf(
2856
-                                esc_html__(
2857
-                                    'The Message Template Group (%d) was NOT updated for some reason',
2858
-                                    'event_espresso'
2859
-                                ),
2860
-                                $set_column_values['GRP_ID']
2861
-                            ),
2862
-                            __FILE__,
2863
-                            __FUNCTION__,
2864
-                            __LINE__
2865
-                        );
2866
-                    } else {
2867
-                        //k now we need to ensure the template_pack and template_variation fields are set.
2868
-                        $template_pack = ! empty($this->_req_data['MTP_template_pack'])
2869
-                            ? $this->_req_data['MTP_template_pack']
2870
-                            : 'default';
2853
+					if ($updated === false) {
2854
+						EE_Error::add_error(
2855
+							sprintf(
2856
+								esc_html__(
2857
+									'The Message Template Group (%d) was NOT updated for some reason',
2858
+									'event_espresso'
2859
+								),
2860
+								$set_column_values['GRP_ID']
2861
+							),
2862
+							__FILE__,
2863
+							__FUNCTION__,
2864
+							__LINE__
2865
+						);
2866
+					} else {
2867
+						//k now we need to ensure the template_pack and template_variation fields are set.
2868
+						$template_pack = ! empty($this->_req_data['MTP_template_pack'])
2869
+							? $this->_req_data['MTP_template_pack']
2870
+							: 'default';
2871 2871
                         
2872
-                        $template_variation = ! empty($this->_req_data['MTP_template_variation'])
2873
-                            ? $this->_req_data['MTP_template_variation']
2874
-                            : 'default';
2872
+						$template_variation = ! empty($this->_req_data['MTP_template_variation'])
2873
+							? $this->_req_data['MTP_template_variation']
2874
+							: 'default';
2875 2875
                         
2876
-                        $mtpg_obj = $MTPG->get_one_by_ID($set_column_values['GRP_ID']);
2877
-                        if ($mtpg_obj instanceof EE_Message_Template_Group) {
2878
-                            $mtpg_obj->set_template_pack_name($template_pack);
2879
-                            $mtpg_obj->set_template_pack_variation($template_variation);
2880
-                        }
2881
-                        $success = 1;
2882
-                    }
2883
-                }
2884
-            }
2876
+						$mtpg_obj = $MTPG->get_one_by_ID($set_column_values['GRP_ID']);
2877
+						if ($mtpg_obj instanceof EE_Message_Template_Group) {
2878
+							$mtpg_obj->set_template_pack_name($template_pack);
2879
+							$mtpg_obj->set_template_pack_variation($template_variation);
2880
+						}
2881
+						$success = 1;
2882
+					}
2883
+				}
2884
+			}
2885 2885
             
2886
-        }
2887
-        
2888
-        //we return things differently if doing ajax
2889
-        if (defined('DOING_AJAX') && DOING_AJAX) {
2890
-            $this->_template_args['success'] = $success;
2891
-            $this->_template_args['error']   = ! $success ? true : false;
2892
-            $this->_template_args['content'] = '';
2893
-            $this->_template_args['data']    = array(
2894
-                'grpID'        => $edit_array['GRP_ID'],
2895
-                'templateName' => $edit_array['template_name']
2896
-            );
2897
-            if ($success) {
2898
-                EE_Error::overwrite_success();
2899
-                EE_Error::add_success(
2900
-                    esc_html__(
2901
-                        'The new template has been created and automatically selected for this event.  You can edit the new template by clicking the edit button.  Note before this template is assigned to this event, the event must be saved.',
2902
-                        'event_espresso'
2903
-                    )
2904
-                );
2905
-            }
2886
+		}
2887
+        
2888
+		//we return things differently if doing ajax
2889
+		if (defined('DOING_AJAX') && DOING_AJAX) {
2890
+			$this->_template_args['success'] = $success;
2891
+			$this->_template_args['error']   = ! $success ? true : false;
2892
+			$this->_template_args['content'] = '';
2893
+			$this->_template_args['data']    = array(
2894
+				'grpID'        => $edit_array['GRP_ID'],
2895
+				'templateName' => $edit_array['template_name']
2896
+			);
2897
+			if ($success) {
2898
+				EE_Error::overwrite_success();
2899
+				EE_Error::add_success(
2900
+					esc_html__(
2901
+						'The new template has been created and automatically selected for this event.  You can edit the new template by clicking the edit button.  Note before this template is assigned to this event, the event must be saved.',
2902
+						'event_espresso'
2903
+					)
2904
+				);
2905
+			}
2906 2906
             
2907
-            $this->_return_json();
2908
-        }
2909
-        
2910
-        
2911
-        //was a test send triggered?
2912
-        if (isset($this->_req_data['test_button'])) {
2913
-            EE_Error::overwrite_success();
2914
-            $this->_do_test_send($context_slug, $messenger_slug, $message_type_slug);
2915
-            $override = true;
2916
-        }
2917
-        
2918
-        if (empty($query_args)) {
2919
-            $query_args = array(
2920
-                'id'      => $this->_req_data['GRP_ID'],
2921
-                'context' => $context_slug,
2922
-                'action'  => 'edit_message_template'
2923
-            );
2924
-        }
2925
-        
2926
-        $this->_redirect_after_action($success, $item_desc, $action_desc, $query_args, $override);
2927
-    }
2907
+			$this->_return_json();
2908
+		}
2909
+        
2910
+        
2911
+		//was a test send triggered?
2912
+		if (isset($this->_req_data['test_button'])) {
2913
+			EE_Error::overwrite_success();
2914
+			$this->_do_test_send($context_slug, $messenger_slug, $message_type_slug);
2915
+			$override = true;
2916
+		}
2917
+        
2918
+		if (empty($query_args)) {
2919
+			$query_args = array(
2920
+				'id'      => $this->_req_data['GRP_ID'],
2921
+				'context' => $context_slug,
2922
+				'action'  => 'edit_message_template'
2923
+			);
2924
+		}
2925
+        
2926
+		$this->_redirect_after_action($success, $item_desc, $action_desc, $query_args, $override);
2927
+	}
2928 2928
 
2929 2929
 
2930
-    /**
2931
-     * processes a test send request to do an actual messenger delivery test for the given message template being tested
2932
-     *
2933
-     * @param  string $context      what context being tested
2934
-     * @param  string $messenger    messenger being tested
2935
-     * @param  string $message_type message type being tested
2936
-     * @throws EE_Error
2937
-     * @throws InvalidArgumentException
2938
-     * @throws InvalidDataTypeException
2939
-     * @throws InvalidInterfaceException
2940
-     */
2941
-    protected function _do_test_send($context, $messenger, $message_type)
2942
-    {
2943
-        //set things up for preview
2944
-        $this->_req_data['messenger']    = $messenger;
2945
-        $this->_req_data['message_type'] = $message_type;
2946
-        $this->_req_data['context']      = $context;
2947
-        $this->_req_data['GRP_ID']       = isset($this->_req_data['GRP_ID']) ? $this->_req_data['GRP_ID'] : '';
2948
-        $active_messenger                = $this->_message_resource_manager->get_active_messenger($messenger);
2949
-        
2950
-        //let's save any existing fields that might be required by the messenger
2951
-        if (
2952
-            isset($this->_req_data['test_settings_fld'])
2953
-            && $active_messenger instanceof EE_messenger
2954
-            && apply_filters(
2955
-                'FHEE__Messages_Admin_Page__do_test_send__set_existing_test_settings',
2956
-                true,
2957
-                $this->_req_data['test_settings_fld'],
2958
-                $active_messenger
2959
-            )
2960
-        ) {
2961
-            $active_messenger->set_existing_test_settings($this->_req_data['test_settings_fld']);
2962
-        }
2930
+	/**
2931
+	 * processes a test send request to do an actual messenger delivery test for the given message template being tested
2932
+	 *
2933
+	 * @param  string $context      what context being tested
2934
+	 * @param  string $messenger    messenger being tested
2935
+	 * @param  string $message_type message type being tested
2936
+	 * @throws EE_Error
2937
+	 * @throws InvalidArgumentException
2938
+	 * @throws InvalidDataTypeException
2939
+	 * @throws InvalidInterfaceException
2940
+	 */
2941
+	protected function _do_test_send($context, $messenger, $message_type)
2942
+	{
2943
+		//set things up for preview
2944
+		$this->_req_data['messenger']    = $messenger;
2945
+		$this->_req_data['message_type'] = $message_type;
2946
+		$this->_req_data['context']      = $context;
2947
+		$this->_req_data['GRP_ID']       = isset($this->_req_data['GRP_ID']) ? $this->_req_data['GRP_ID'] : '';
2948
+		$active_messenger                = $this->_message_resource_manager->get_active_messenger($messenger);
2949
+        
2950
+		//let's save any existing fields that might be required by the messenger
2951
+		if (
2952
+			isset($this->_req_data['test_settings_fld'])
2953
+			&& $active_messenger instanceof EE_messenger
2954
+			&& apply_filters(
2955
+				'FHEE__Messages_Admin_Page__do_test_send__set_existing_test_settings',
2956
+				true,
2957
+				$this->_req_data['test_settings_fld'],
2958
+				$active_messenger
2959
+			)
2960
+		) {
2961
+			$active_messenger->set_existing_test_settings($this->_req_data['test_settings_fld']);
2962
+		}
2963 2963
 
2964
-        /**
2965
-         * Use filter to add additional controls on whether message can send or not
2966
-         */
2967
-        if (apply_filters(
2968
-            'FHEE__Messages_Admin_Page__do_test_send__can_send',
2969
-            true,
2970
-            $context,
2971
-            $this->_req_data,
2972
-            $messenger,
2973
-            $message_type
2974
-        )) {
2975
-            $success = $this->_preview_message(true);
2976
-            if ($success) {
2977
-                EE_Error::add_success(__('Test message sent', 'event_espresso'));
2978
-            } else {
2979
-                EE_Error::add_error(
2980
-                    esc_html__('The test message was not sent', 'event_espresso'),
2981
-                    __FILE__,
2982
-                    __FUNCTION__,
2983
-                    __LINE__
2984
-                );
2985
-            }
2986
-        }
2987
-    }
2964
+		/**
2965
+		 * Use filter to add additional controls on whether message can send or not
2966
+		 */
2967
+		if (apply_filters(
2968
+			'FHEE__Messages_Admin_Page__do_test_send__can_send',
2969
+			true,
2970
+			$context,
2971
+			$this->_req_data,
2972
+			$messenger,
2973
+			$message_type
2974
+		)) {
2975
+			$success = $this->_preview_message(true);
2976
+			if ($success) {
2977
+				EE_Error::add_success(__('Test message sent', 'event_espresso'));
2978
+			} else {
2979
+				EE_Error::add_error(
2980
+					esc_html__('The test message was not sent', 'event_espresso'),
2981
+					__FILE__,
2982
+					__FUNCTION__,
2983
+					__LINE__
2984
+				);
2985
+			}
2986
+		}
2987
+	}
2988 2988
     
2989 2989
     
2990
-    /**
2991
-     * _generate_new_templates
2992
-     * This will handle the messenger, message_type selection when "adding a new custom template" for an event and will
2993
-     * automatically create the defaults for the event.  The user would then be redirected to edit the default context
2994
-     * for the event.
2995
-     *
2996
-     *
2997
-     * @param  string $messenger     the messenger we are generating templates for
2998
-     * @param array   $message_types array of message types that the templates are generated for.
2999
-     * @param int     $GRP_ID        If this is a custom template being generated then a GRP_ID needs to be included to
3000
-     *                               indicate the message_template_group being used as the base.
3001
-     *
3002
-     * @param bool    $global
3003
-     *
3004
-     * @return array|bool array of data required for the redirect to the correct edit page or bool if
3005
-     *                               encountering problems.
3006
-     * @throws EE_Error
3007
-     */
3008
-    protected function _generate_new_templates($messenger, $message_types, $GRP_ID = 0, $global = false)
3009
-    {
3010
-        
3011
-        //if no $message_types are given then that's okay... this may be a messenger that just adds shortcodes, so we
3012
-        // just don't generate any templates.
3013
-        if (empty($message_types)) {
3014
-            return true;
3015
-        }
3016
-        
3017
-        return EEH_MSG_Template::generate_new_templates($messenger, $message_types, $GRP_ID, $global);
3018
-    }
2990
+	/**
2991
+	 * _generate_new_templates
2992
+	 * This will handle the messenger, message_type selection when "adding a new custom template" for an event and will
2993
+	 * automatically create the defaults for the event.  The user would then be redirected to edit the default context
2994
+	 * for the event.
2995
+	 *
2996
+	 *
2997
+	 * @param  string $messenger     the messenger we are generating templates for
2998
+	 * @param array   $message_types array of message types that the templates are generated for.
2999
+	 * @param int     $GRP_ID        If this is a custom template being generated then a GRP_ID needs to be included to
3000
+	 *                               indicate the message_template_group being used as the base.
3001
+	 *
3002
+	 * @param bool    $global
3003
+	 *
3004
+	 * @return array|bool array of data required for the redirect to the correct edit page or bool if
3005
+	 *                               encountering problems.
3006
+	 * @throws EE_Error
3007
+	 */
3008
+	protected function _generate_new_templates($messenger, $message_types, $GRP_ID = 0, $global = false)
3009
+	{
3010
+        
3011
+		//if no $message_types are given then that's okay... this may be a messenger that just adds shortcodes, so we
3012
+		// just don't generate any templates.
3013
+		if (empty($message_types)) {
3014
+			return true;
3015
+		}
3016
+        
3017
+		return EEH_MSG_Template::generate_new_templates($messenger, $message_types, $GRP_ID, $global);
3018
+	}
3019 3019
 
3020 3020
 
3021
-    /**
3022
-     * [_trash_or_restore_message_template]
3023
-     *
3024
-     * @param  boolean $trash whether to move an item to trash/restore (TRUE) or restore it (FALSE)
3025
-     * @param boolean  $all   whether this is going to trash/restore all contexts within a template group (TRUE) OR just
3026
-     *                        an individual context (FALSE).
3027
-     * @return void
3028
-     * @throws EE_Error
3029
-     * @throws InvalidArgumentException
3030
-     * @throws InvalidDataTypeException
3031
-     * @throws InvalidInterfaceException
3032
-     */
3033
-    protected function _trash_or_restore_message_template($trash = true, $all = false)
3034
-    {
3035
-        do_action('AHEE_log', __FILE__, __FUNCTION__, '');
3036
-        $MTP = EEM_Message_Template_Group::instance();
3037
-        
3038
-        $success = 1;
3039
-        
3040
-        //incoming GRP_IDs
3041
-        if ($all) {
3042
-            //Checkboxes
3043
-            if ( ! empty($this->_req_data['checkbox']) && is_array($this->_req_data['checkbox'])) {
3044
-                //if array has more than one element then success message should be plural.
3045
-                //todo: what about nonce?
3046
-                $success = count($this->_req_data['checkbox']) > 1 ? 2 : 1;
3021
+	/**
3022
+	 * [_trash_or_restore_message_template]
3023
+	 *
3024
+	 * @param  boolean $trash whether to move an item to trash/restore (TRUE) or restore it (FALSE)
3025
+	 * @param boolean  $all   whether this is going to trash/restore all contexts within a template group (TRUE) OR just
3026
+	 *                        an individual context (FALSE).
3027
+	 * @return void
3028
+	 * @throws EE_Error
3029
+	 * @throws InvalidArgumentException
3030
+	 * @throws InvalidDataTypeException
3031
+	 * @throws InvalidInterfaceException
3032
+	 */
3033
+	protected function _trash_or_restore_message_template($trash = true, $all = false)
3034
+	{
3035
+		do_action('AHEE_log', __FILE__, __FUNCTION__, '');
3036
+		$MTP = EEM_Message_Template_Group::instance();
3037
+        
3038
+		$success = 1;
3039
+        
3040
+		//incoming GRP_IDs
3041
+		if ($all) {
3042
+			//Checkboxes
3043
+			if ( ! empty($this->_req_data['checkbox']) && is_array($this->_req_data['checkbox'])) {
3044
+				//if array has more than one element then success message should be plural.
3045
+				//todo: what about nonce?
3046
+				$success = count($this->_req_data['checkbox']) > 1 ? 2 : 1;
3047 3047
                 
3048
-                //cycle through checkboxes
3049
-                while (list($GRP_ID, $value) = each($this->_req_data['checkbox'])) {
3050
-                    $trashed_or_restored = $trash ? $MTP->delete_by_ID($GRP_ID) : $MTP->restore_by_ID($GRP_ID);
3051
-                    if ( ! $trashed_or_restored) {
3052
-                        $success = 0;
3053
-                    }
3054
-                }
3055
-            } else {
3056
-                //grab single GRP_ID and handle
3057
-                $GRP_ID = isset($this->_req_data['id']) ? absint($this->_req_data['id']) : 0;
3058
-                if ( ! empty($GRP_ID)) {
3059
-                    $trashed_or_restored = $trash ? $MTP->delete_by_ID($GRP_ID) : $MTP->restore_by_ID($GRP_ID);
3060
-                    if ( ! $trashed_or_restored) {
3061
-                        $success = 0;
3062
-                    }
3063
-                } else {
3064
-                    $success = 0;
3065
-                }
3066
-            }
3048
+				//cycle through checkboxes
3049
+				while (list($GRP_ID, $value) = each($this->_req_data['checkbox'])) {
3050
+					$trashed_or_restored = $trash ? $MTP->delete_by_ID($GRP_ID) : $MTP->restore_by_ID($GRP_ID);
3051
+					if ( ! $trashed_or_restored) {
3052
+						$success = 0;
3053
+					}
3054
+				}
3055
+			} else {
3056
+				//grab single GRP_ID and handle
3057
+				$GRP_ID = isset($this->_req_data['id']) ? absint($this->_req_data['id']) : 0;
3058
+				if ( ! empty($GRP_ID)) {
3059
+					$trashed_or_restored = $trash ? $MTP->delete_by_ID($GRP_ID) : $MTP->restore_by_ID($GRP_ID);
3060
+					if ( ! $trashed_or_restored) {
3061
+						$success = 0;
3062
+					}
3063
+				} else {
3064
+					$success = 0;
3065
+				}
3066
+			}
3067 3067
             
3068
-        }
3068
+		}
3069 3069
         
3070
-        $action_desc = $trash
3071
-            ? esc_html__('moved to the trash', 'event_espresso')
3072
-            : esc_html__('restored', 'event_espresso');
3070
+		$action_desc = $trash
3071
+			? esc_html__('moved to the trash', 'event_espresso')
3072
+			: esc_html__('restored', 'event_espresso');
3073 3073
         
3074
-        $action_desc = ! empty($this->_req_data['template_switch']) ? esc_html__('switched') : $action_desc;
3074
+		$action_desc = ! empty($this->_req_data['template_switch']) ? esc_html__('switched') : $action_desc;
3075 3075
         
3076
-        $item_desc = $all ? _n('Message Template Group', 'Message Template Groups', $success,
3077
-            'event_espresso') : _n('Message Template Context', 'Message Template Contexts', $success, 'event_espresso');
3076
+		$item_desc = $all ? _n('Message Template Group', 'Message Template Groups', $success,
3077
+			'event_espresso') : _n('Message Template Context', 'Message Template Contexts', $success, 'event_espresso');
3078 3078
         
3079
-        $item_desc = ! empty($this->_req_data['template_switch']) ? _n('template', 'templates', $success,
3080
-            'event_espresso') : $item_desc;
3079
+		$item_desc = ! empty($this->_req_data['template_switch']) ? _n('template', 'templates', $success,
3080
+			'event_espresso') : $item_desc;
3081 3081
         
3082
-        $this->_redirect_after_action($success, $item_desc, $action_desc, array());
3082
+		$this->_redirect_after_action($success, $item_desc, $action_desc, array());
3083 3083
         
3084
-    }
3084
+	}
3085 3085
 
3086 3086
 
3087
-    /**
3088
-     * [_delete_message_template]
3089
-     * NOTE: this handles not only the deletion of the groups but also all the templates belonging to that group.
3090
-     *
3091
-     * @return void
3092
-     * @throws EE_Error
3093
-     * @throws InvalidArgumentException
3094
-     * @throws InvalidDataTypeException
3095
-     * @throws InvalidInterfaceException
3096
-     */
3097
-    protected function _delete_message_template()
3098
-    {
3099
-        do_action('AHEE_log', __FILE__, __FUNCTION__, '');
3100
-        
3101
-        //checkboxes
3102
-        if ( ! empty($this->_req_data['checkbox']) && is_array($this->_req_data['checkbox'])) {
3103
-            //if array has more than one element then success message should be plural
3104
-            $success = count($this->_req_data['checkbox']) > 1 ? 2 : 1;
3087
+	/**
3088
+	 * [_delete_message_template]
3089
+	 * NOTE: this handles not only the deletion of the groups but also all the templates belonging to that group.
3090
+	 *
3091
+	 * @return void
3092
+	 * @throws EE_Error
3093
+	 * @throws InvalidArgumentException
3094
+	 * @throws InvalidDataTypeException
3095
+	 * @throws InvalidInterfaceException
3096
+	 */
3097
+	protected function _delete_message_template()
3098
+	{
3099
+		do_action('AHEE_log', __FILE__, __FUNCTION__, '');
3100
+        
3101
+		//checkboxes
3102
+		if ( ! empty($this->_req_data['checkbox']) && is_array($this->_req_data['checkbox'])) {
3103
+			//if array has more than one element then success message should be plural
3104
+			$success = count($this->_req_data['checkbox']) > 1 ? 2 : 1;
3105 3105
             
3106
-            //cycle through bulk action checkboxes
3107
-            while (list($GRP_ID, $value) = each($this->_req_data['checkbox'])) {
3108
-                $success = $this->_delete_mtp_permanently($GRP_ID);
3109
-            }
3110
-        } else {
3111
-            //grab single grp_id and delete
3112
-            $GRP_ID  = absint($this->_req_data['id']);
3113
-            $success = $this->_delete_mtp_permanently($GRP_ID);
3114
-        }
3115
-        
3116
-        $this->_redirect_after_action($success, 'Message Templates', 'deleted', array());
3117
-        
3118
-    }
3106
+			//cycle through bulk action checkboxes
3107
+			while (list($GRP_ID, $value) = each($this->_req_data['checkbox'])) {
3108
+				$success = $this->_delete_mtp_permanently($GRP_ID);
3109
+			}
3110
+		} else {
3111
+			//grab single grp_id and delete
3112
+			$GRP_ID  = absint($this->_req_data['id']);
3113
+			$success = $this->_delete_mtp_permanently($GRP_ID);
3114
+		}
3115
+        
3116
+		$this->_redirect_after_action($success, 'Message Templates', 'deleted', array());
3117
+        
3118
+	}
3119 3119
 
3120 3120
 
3121
-    /**
3122
-     * helper for permanently deleting a mtP group and all related message_templates
3123
-     *
3124
-     * @param  int  $GRP_ID        The group being deleted
3125
-     * @param  bool $include_group whether to delete the Message Template Group as well.
3126
-     * @return bool boolean to indicate the success of the deletes or not.
3127
-     * @throws EE_Error
3128
-     * @throws InvalidArgumentException
3129
-     * @throws InvalidDataTypeException
3130
-     * @throws InvalidInterfaceException
3131
-     */
3132
-    private function _delete_mtp_permanently($GRP_ID, $include_group = true)
3133
-    {
3134
-        $success = 1;
3135
-        $MTPG    = EEM_Message_Template_Group::instance();
3136
-        //first let's GET this group
3137
-        $MTG = $MTPG->get_one_by_ID($GRP_ID);
3138
-        //then delete permanently all the related Message Templates
3139
-        $deleted = $MTG->delete_related_permanently('Message_Template');
3140
-        
3141
-        if ($deleted === 0) {
3142
-            $success = 0;
3143
-        }
3144
-        
3145
-        //now delete permanently this particular group
3146
-        
3147
-        if ($include_group && ! $MTG->delete_permanently()) {
3148
-            $success = 0;
3149
-        }
3150
-        
3151
-        return $success;
3152
-    }
3121
+	/**
3122
+	 * helper for permanently deleting a mtP group and all related message_templates
3123
+	 *
3124
+	 * @param  int  $GRP_ID        The group being deleted
3125
+	 * @param  bool $include_group whether to delete the Message Template Group as well.
3126
+	 * @return bool boolean to indicate the success of the deletes or not.
3127
+	 * @throws EE_Error
3128
+	 * @throws InvalidArgumentException
3129
+	 * @throws InvalidDataTypeException
3130
+	 * @throws InvalidInterfaceException
3131
+	 */
3132
+	private function _delete_mtp_permanently($GRP_ID, $include_group = true)
3133
+	{
3134
+		$success = 1;
3135
+		$MTPG    = EEM_Message_Template_Group::instance();
3136
+		//first let's GET this group
3137
+		$MTG = $MTPG->get_one_by_ID($GRP_ID);
3138
+		//then delete permanently all the related Message Templates
3139
+		$deleted = $MTG->delete_related_permanently('Message_Template');
3140
+        
3141
+		if ($deleted === 0) {
3142
+			$success = 0;
3143
+		}
3144
+        
3145
+		//now delete permanently this particular group
3146
+        
3147
+		if ($include_group && ! $MTG->delete_permanently()) {
3148
+			$success = 0;
3149
+		}
3150
+        
3151
+		return $success;
3152
+	}
3153 3153
     
3154 3154
     
3155
-    /**
3156
-     *    _learn_more_about_message_templates_link
3157
-     * @access protected
3158
-     * @return string
3159
-     */
3160
-    protected function _learn_more_about_message_templates_link()
3161
-    {
3162
-        return '<a class="hidden" style="margin:0 20px; cursor:pointer; font-size:12px;" >'
3163
-               . esc_html__('learn more about how message templates works', 'event_espresso')
3164
-               . '</a>';
3165
-    }
3155
+	/**
3156
+	 *    _learn_more_about_message_templates_link
3157
+	 * @access protected
3158
+	 * @return string
3159
+	 */
3160
+	protected function _learn_more_about_message_templates_link()
3161
+	{
3162
+		return '<a class="hidden" style="margin:0 20px; cursor:pointer; font-size:12px;" >'
3163
+			   . esc_html__('learn more about how message templates works', 'event_espresso')
3164
+			   . '</a>';
3165
+	}
3166 3166
 
3167 3167
 
3168
-    /**
3169
-     * Used for setting up messenger/message type activation.  This loads up the initial view.  The rest is handled by
3170
-     * ajax and other routes.
3171
-     *
3172
-     * @return void
3173
-     * @throws DomainException
3174
-     */
3175
-    protected function _settings()
3176
-    {
3177
-        
3178
-        
3179
-        $this->_set_m_mt_settings();
3180
-        
3181
-        $selected_messenger = isset($this->_req_data['selected_messenger'])
3182
-            ? $this->_req_data['selected_messenger']
3183
-            : 'email';
3184
-        
3185
-        //let's setup the messenger tabs
3186
-        $this->_template_args['admin_page_header']         = EEH_Tabbed_Content::tab_text_links(
3187
-            $this->_m_mt_settings['messenger_tabs'],
3188
-            'messenger_links',
3189
-            '|',
3190
-            $selected_messenger
3191
-        );
3192
-        $this->_template_args['before_admin_page_content'] = '<div class="ui-widget ui-helper-clearfix">';
3193
-        $this->_template_args['after_admin_page_content']  = '</div><!-- end .ui-widget -->';
3194
-        
3195
-        $this->display_admin_page_with_sidebar();
3196
-        
3197
-    }
3168
+	/**
3169
+	 * Used for setting up messenger/message type activation.  This loads up the initial view.  The rest is handled by
3170
+	 * ajax and other routes.
3171
+	 *
3172
+	 * @return void
3173
+	 * @throws DomainException
3174
+	 */
3175
+	protected function _settings()
3176
+	{
3177
+        
3178
+        
3179
+		$this->_set_m_mt_settings();
3180
+        
3181
+		$selected_messenger = isset($this->_req_data['selected_messenger'])
3182
+			? $this->_req_data['selected_messenger']
3183
+			: 'email';
3184
+        
3185
+		//let's setup the messenger tabs
3186
+		$this->_template_args['admin_page_header']         = EEH_Tabbed_Content::tab_text_links(
3187
+			$this->_m_mt_settings['messenger_tabs'],
3188
+			'messenger_links',
3189
+			'|',
3190
+			$selected_messenger
3191
+		);
3192
+		$this->_template_args['before_admin_page_content'] = '<div class="ui-widget ui-helper-clearfix">';
3193
+		$this->_template_args['after_admin_page_content']  = '</div><!-- end .ui-widget -->';
3194
+        
3195
+		$this->display_admin_page_with_sidebar();
3196
+        
3197
+	}
3198 3198
 
3199 3199
 
3200
-    /**
3201
-     * This sets the $_m_mt_settings property for when needed (used on the Messages settings page)
3202
-     *
3203
-     * @access protected
3204
-     * @return void
3205
-     * @throws DomainException
3206
-     */
3207
-    protected function _set_m_mt_settings()
3208
-    {
3209
-        //first if this is already set then lets get out no need to regenerate data.
3210
-        if ( ! empty($this->_m_mt_settings)) {
3211
-            return;
3212
-        }
3213
-        
3214
-        //get all installed messengers and message_types
3215
-        /** @type EE_messenger[] $messengers */
3216
-        $messengers = $this->_message_resource_manager->installed_messengers();
3217
-        /** @type EE_message_type[] $message_types */
3218
-        $message_types = $this->_message_resource_manager->installed_message_types();
3219
-        
3220
-        
3221
-        //assemble the array for the _tab_text_links helper
3222
-        
3223
-        foreach ($messengers as $messenger) {
3224
-            $this->_m_mt_settings['messenger_tabs'][$messenger->name] = array(
3225
-                'label' => ucwords($messenger->label['singular']),
3226
-                'class' => $this->_message_resource_manager->is_messenger_active($messenger->name)
3227
-                    ? 'messenger-active'
3228
-                    : '',
3229
-                'href'  => $messenger->name,
3230
-                'title' => esc_html__('Modify this Messenger', 'event_espresso'),
3231
-                'slug'  => $messenger->name,
3232
-                'obj'   => $messenger
3233
-            );
3200
+	/**
3201
+	 * This sets the $_m_mt_settings property for when needed (used on the Messages settings page)
3202
+	 *
3203
+	 * @access protected
3204
+	 * @return void
3205
+	 * @throws DomainException
3206
+	 */
3207
+	protected function _set_m_mt_settings()
3208
+	{
3209
+		//first if this is already set then lets get out no need to regenerate data.
3210
+		if ( ! empty($this->_m_mt_settings)) {
3211
+			return;
3212
+		}
3213
+        
3214
+		//get all installed messengers and message_types
3215
+		/** @type EE_messenger[] $messengers */
3216
+		$messengers = $this->_message_resource_manager->installed_messengers();
3217
+		/** @type EE_message_type[] $message_types */
3218
+		$message_types = $this->_message_resource_manager->installed_message_types();
3219
+        
3220
+        
3221
+		//assemble the array for the _tab_text_links helper
3222
+        
3223
+		foreach ($messengers as $messenger) {
3224
+			$this->_m_mt_settings['messenger_tabs'][$messenger->name] = array(
3225
+				'label' => ucwords($messenger->label['singular']),
3226
+				'class' => $this->_message_resource_manager->is_messenger_active($messenger->name)
3227
+					? 'messenger-active'
3228
+					: '',
3229
+				'href'  => $messenger->name,
3230
+				'title' => esc_html__('Modify this Messenger', 'event_espresso'),
3231
+				'slug'  => $messenger->name,
3232
+				'obj'   => $messenger
3233
+			);
3234 3234
             
3235 3235
             
3236
-            $message_types_for_messenger = $messenger->get_valid_message_types();
3236
+			$message_types_for_messenger = $messenger->get_valid_message_types();
3237 3237
             
3238
-            foreach ($message_types as $message_type) {
3239
-                //first we need to verify that this message type is valid with this messenger. Cause if it isn't then
3240
-                // it shouldn't show in either the inactive OR active metabox.
3241
-                if ( ! in_array($message_type->name, $message_types_for_messenger, true)) {
3242
-                    continue;
3243
-                }
3238
+			foreach ($message_types as $message_type) {
3239
+				//first we need to verify that this message type is valid with this messenger. Cause if it isn't then
3240
+				// it shouldn't show in either the inactive OR active metabox.
3241
+				if ( ! in_array($message_type->name, $message_types_for_messenger, true)) {
3242
+					continue;
3243
+				}
3244 3244
                 
3245
-                $a_or_i = $this->_message_resource_manager->is_message_type_active_for_messenger(
3246
-                    $messenger->name,
3247
-                    $message_type->name
3248
-                )
3249
-                    ? 'active'
3250
-                    : 'inactive';
3245
+				$a_or_i = $this->_message_resource_manager->is_message_type_active_for_messenger(
3246
+					$messenger->name,
3247
+					$message_type->name
3248
+				)
3249
+					? 'active'
3250
+					: 'inactive';
3251 3251
                 
3252
-                $this->_m_mt_settings['message_type_tabs'][$messenger->name][$a_or_i][$message_type->name] = array(
3253
-                    'label'    => ucwords($message_type->label['singular']),
3254
-                    'class'    => 'message-type-' . $a_or_i,
3255
-                    'slug_id'  => $message_type->name . '-messagetype-' . $messenger->name,
3256
-                    'mt_nonce' => wp_create_nonce($message_type->name . '_nonce'),
3257
-                    'href'     => 'espresso_' . $message_type->name . '_message_type_settings',
3258
-                    'title'    => $a_or_i === 'active'
3259
-                        ? esc_html__('Drag this message type to the Inactive window to deactivate', 'event_espresso')
3260
-                        : esc_html__('Drag this message type to the messenger to activate', 'event_espresso'),
3261
-                    'content'  => $a_or_i === 'active'
3262
-                        ? $this->_message_type_settings_content($message_type, $messenger, true)
3263
-                        : $this->_message_type_settings_content($message_type, $messenger),
3264
-                    'slug'     => $message_type->name,
3265
-                    'active'   => $a_or_i === 'active',
3266
-                    'obj'      => $message_type
3267
-                );
3268
-            }
3269
-        }
3270
-    }
3252
+				$this->_m_mt_settings['message_type_tabs'][$messenger->name][$a_or_i][$message_type->name] = array(
3253
+					'label'    => ucwords($message_type->label['singular']),
3254
+					'class'    => 'message-type-' . $a_or_i,
3255
+					'slug_id'  => $message_type->name . '-messagetype-' . $messenger->name,
3256
+					'mt_nonce' => wp_create_nonce($message_type->name . '_nonce'),
3257
+					'href'     => 'espresso_' . $message_type->name . '_message_type_settings',
3258
+					'title'    => $a_or_i === 'active'
3259
+						? esc_html__('Drag this message type to the Inactive window to deactivate', 'event_espresso')
3260
+						: esc_html__('Drag this message type to the messenger to activate', 'event_espresso'),
3261
+					'content'  => $a_or_i === 'active'
3262
+						? $this->_message_type_settings_content($message_type, $messenger, true)
3263
+						: $this->_message_type_settings_content($message_type, $messenger),
3264
+					'slug'     => $message_type->name,
3265
+					'active'   => $a_or_i === 'active',
3266
+					'obj'      => $message_type
3267
+				);
3268
+			}
3269
+		}
3270
+	}
3271 3271
 
3272 3272
 
3273
-    /**
3274
-     * This just prepares the content for the message type settings
3275
-     *
3276
-     * @param  EE_message_type  $message_type The message type object
3277
-     * @param  EE_messenger  $messenger    The messenger object
3278
-     * @param  boolean $active       Whether the message type is active or not
3279
-     * @return string html output for the content
3280
-     * @throws DomainException
3281
-     */
3282
-    protected function _message_type_settings_content($message_type, $messenger, $active = false)
3283
-    {
3284
-        //get message type fields
3285
-        $fields                                         = $message_type->get_admin_settings_fields();
3286
-        $settings_template_args['template_form_fields'] = '';
3287
-        
3288
-        if ( ! empty($fields) && $active) {
3273
+	/**
3274
+	 * This just prepares the content for the message type settings
3275
+	 *
3276
+	 * @param  EE_message_type  $message_type The message type object
3277
+	 * @param  EE_messenger  $messenger    The messenger object
3278
+	 * @param  boolean $active       Whether the message type is active or not
3279
+	 * @return string html output for the content
3280
+	 * @throws DomainException
3281
+	 */
3282
+	protected function _message_type_settings_content($message_type, $messenger, $active = false)
3283
+	{
3284
+		//get message type fields
3285
+		$fields                                         = $message_type->get_admin_settings_fields();
3286
+		$settings_template_args['template_form_fields'] = '';
3287
+        
3288
+		if ( ! empty($fields) && $active) {
3289 3289
             
3290
-            $existing_settings = $message_type->get_existing_admin_settings($messenger->name);
3290
+			$existing_settings = $message_type->get_existing_admin_settings($messenger->name);
3291 3291
             
3292
-            foreach ($fields as $fldname => $fldprops) {
3293
-                $field_id                       = $messenger->name . '-' . $message_type->name . '-' . $fldname;
3294
-                $template_form_field[$field_id] = array(
3295
-                    'name'       => 'message_type_settings[' . $fldname . ']',
3296
-                    'label'      => $fldprops['label'],
3297
-                    'input'      => $fldprops['field_type'],
3298
-                    'type'       => $fldprops['value_type'],
3299
-                    'required'   => $fldprops['required'],
3300
-                    'validation' => $fldprops['validation'],
3301
-                    'value'      => isset($existing_settings[$fldname])
3302
-                        ? $existing_settings[$fldname]
3303
-                        : $fldprops['default'],
3304
-                    'options'    => isset($fldprops['options'])
3305
-                        ? $fldprops['options']
3306
-                        : array(),
3307
-                    'default'    => isset($existing_settings[$fldname])
3308
-                        ? $existing_settings[$fldname]
3309
-                        : $fldprops['default'],
3310
-                    'css_class'  => 'no-drag',
3311
-                    'format'     => $fldprops['format']
3312
-                );
3313
-            }
3292
+			foreach ($fields as $fldname => $fldprops) {
3293
+				$field_id                       = $messenger->name . '-' . $message_type->name . '-' . $fldname;
3294
+				$template_form_field[$field_id] = array(
3295
+					'name'       => 'message_type_settings[' . $fldname . ']',
3296
+					'label'      => $fldprops['label'],
3297
+					'input'      => $fldprops['field_type'],
3298
+					'type'       => $fldprops['value_type'],
3299
+					'required'   => $fldprops['required'],
3300
+					'validation' => $fldprops['validation'],
3301
+					'value'      => isset($existing_settings[$fldname])
3302
+						? $existing_settings[$fldname]
3303
+						: $fldprops['default'],
3304
+					'options'    => isset($fldprops['options'])
3305
+						? $fldprops['options']
3306
+						: array(),
3307
+					'default'    => isset($existing_settings[$fldname])
3308
+						? $existing_settings[$fldname]
3309
+						: $fldprops['default'],
3310
+					'css_class'  => 'no-drag',
3311
+					'format'     => $fldprops['format']
3312
+				);
3313
+			}
3314 3314
             
3315 3315
             
3316
-            $settings_template_args['template_form_fields'] = ! empty($template_form_field)
3317
-                ? $this->_generate_admin_form_fields(
3318
-                    $template_form_field,
3319
-                    'string',
3320
-                    'ee_mt_activate_form'
3321
-                )
3322
-                : '';
3323
-        }
3324
-        
3325
-        $settings_template_args['description'] = $message_type->description;
3326
-        //we also need some hidden fields
3327
-        $settings_template_args['hidden_fields'] = array(
3328
-            'message_type_settings[messenger]'    => array(
3329
-                'type'  => 'hidden',
3330
-                'value' => $messenger->name
3331
-            ),
3332
-            'message_type_settings[message_type]' => array(
3333
-                'type'  => 'hidden',
3334
-                'value' => $message_type->name
3335
-            ),
3336
-            'type'                                => array(
3337
-                'type'  => 'hidden',
3338
-                'value' => 'message_type'
3339
-            )
3340
-        );
3341
-        
3342
-        $settings_template_args['hidden_fields'] = $this->_generate_admin_form_fields(
3343
-            $settings_template_args['hidden_fields'],
3344
-            'array'
3345
-        );
3346
-        $settings_template_args['show_form']     = empty($settings_template_args['template_form_fields'])
3347
-            ? ' hidden'
3348
-            : '';
3349
-        
3350
-        
3351
-        $template = EE_MSG_TEMPLATE_PATH . 'ee_msg_mt_settings_content.template.php';
3352
-        $content  = EEH_Template::display_template($template, $settings_template_args, true);
3353
-        
3354
-        return $content;
3355
-    }
3316
+			$settings_template_args['template_form_fields'] = ! empty($template_form_field)
3317
+				? $this->_generate_admin_form_fields(
3318
+					$template_form_field,
3319
+					'string',
3320
+					'ee_mt_activate_form'
3321
+				)
3322
+				: '';
3323
+		}
3324
+        
3325
+		$settings_template_args['description'] = $message_type->description;
3326
+		//we also need some hidden fields
3327
+		$settings_template_args['hidden_fields'] = array(
3328
+			'message_type_settings[messenger]'    => array(
3329
+				'type'  => 'hidden',
3330
+				'value' => $messenger->name
3331
+			),
3332
+			'message_type_settings[message_type]' => array(
3333
+				'type'  => 'hidden',
3334
+				'value' => $message_type->name
3335
+			),
3336
+			'type'                                => array(
3337
+				'type'  => 'hidden',
3338
+				'value' => 'message_type'
3339
+			)
3340
+		);
3341
+        
3342
+		$settings_template_args['hidden_fields'] = $this->_generate_admin_form_fields(
3343
+			$settings_template_args['hidden_fields'],
3344
+			'array'
3345
+		);
3346
+		$settings_template_args['show_form']     = empty($settings_template_args['template_form_fields'])
3347
+			? ' hidden'
3348
+			: '';
3349
+        
3350
+        
3351
+		$template = EE_MSG_TEMPLATE_PATH . 'ee_msg_mt_settings_content.template.php';
3352
+		$content  = EEH_Template::display_template($template, $settings_template_args, true);
3353
+        
3354
+		return $content;
3355
+	}
3356 3356
 
3357 3357
 
3358
-    /**
3359
-     * Generate all the metaboxes for the message types and register them for the messages settings page.
3360
-     *
3361
-     * @access protected
3362
-     * @return void
3363
-     * @throws DomainException
3364
-     */
3365
-    protected function _messages_settings_metaboxes()
3366
-    {
3367
-        $this->_set_m_mt_settings();
3368
-        $m_boxes         = $mt_boxes = array();
3369
-        $m_template_args = $mt_template_args = array();
3370
-        
3371
-        $selected_messenger = isset($this->_req_data['selected_messenger'])
3372
-            ? $this->_req_data['selected_messenger']
3373
-            : 'email';
3374
-        
3375
-        if (isset($this->_m_mt_settings['messenger_tabs'])) {
3376
-            foreach ($this->_m_mt_settings['messenger_tabs'] as $messenger => $tab_array) {
3377
-                $hide_on_message  = $this->_message_resource_manager->is_messenger_active($messenger) ? '' : 'hidden';
3378
-                $hide_off_message = $this->_message_resource_manager->is_messenger_active($messenger) ? 'hidden' : '';
3379
-                //messenger meta boxes
3380
-                $active                                 = $selected_messenger === $messenger;
3381
-                $active_mt_tabs                         = isset(
3382
-                    $this->_m_mt_settings['message_type_tabs'][$messenger]['active']
3383
-                )
3384
-                    ? $this->_m_mt_settings['message_type_tabs'][$messenger]['active']
3385
-                    : '';
3386
-                $m_boxes[$messenger . '_a_box']         = sprintf(
3387
-                    esc_html__('%s Settings', 'event_espresso'),
3388
-                    $tab_array['label']
3389
-                );
3390
-                $m_template_args[$messenger . '_a_box'] = array(
3391
-                    'active_message_types'   => ! empty($active_mt_tabs) ? $this->_get_mt_tabs($active_mt_tabs) : '',
3392
-                    'inactive_message_types' => isset(
3393
-                        $this->_m_mt_settings['message_type_tabs'][$messenger]['inactive']
3394
-                    )
3395
-                        ? $this->_get_mt_tabs($this->_m_mt_settings['message_type_tabs'][$messenger]['inactive'])
3396
-                        : '',
3397
-                    'content'                => $this->_get_messenger_box_content($tab_array['obj']),
3398
-                    'hidden'                 => $active ? '' : ' hidden',
3399
-                    'hide_on_message'        => $hide_on_message,
3400
-                    'messenger'              => $messenger,
3401
-                    'active'                 => $active
3402
-                );
3403
-                // message type meta boxes
3404
-                // (which is really just the inactive container for each messenger
3405
-                // showing inactive message types for that messenger)
3406
-                $mt_boxes[$messenger . '_i_box']         = esc_html__('Inactive Message Types', 'event_espresso');
3407
-                $mt_template_args[$messenger . '_i_box'] = array(
3408
-                    'active_message_types'   => ! empty($active_mt_tabs) ? $this->_get_mt_tabs($active_mt_tabs) : '',
3409
-                    'inactive_message_types' => isset(
3410
-                        $this->_m_mt_settings['message_type_tabs'][$messenger]['inactive']
3411
-                    )
3412
-                        ? $this->_get_mt_tabs($this->_m_mt_settings['message_type_tabs'][$messenger]['inactive'])
3413
-                        : '',
3414
-                    'hidden'                 => $active ? '' : ' hidden',
3415
-                    'hide_on_message'        => $hide_on_message,
3416
-                    'hide_off_message'       => $hide_off_message,
3417
-                    'messenger'              => $messenger,
3418
-                    'active'                 => $active
3419
-                );
3420
-            }
3421
-        }
3422
-        
3423
-        
3424
-        //register messenger metaboxes
3425
-        $m_template_path = EE_MSG_TEMPLATE_PATH . 'ee_msg_details_messenger_mt_meta_box.template.php';
3426
-        foreach ($m_boxes as $box => $label) {
3427
-            $callback_args = array('template_path' => $m_template_path, 'template_args' => $m_template_args[$box]);
3428
-            $msgr          = str_replace('_a_box', '', $box);
3429
-            add_meta_box(
3430
-                'espresso_' . $msgr . '_settings',
3431
-                $label,
3432
-                function ($post, $metabox) {
3433
-                    echo EEH_Template::display_template(
3434
-                            $metabox["args"]["template_path"],
3435
-                            $metabox["args"]["template_args"],
3436
-                            true
3437
-                    );
3438
-                },
3439
-                $this->_current_screen->id,
3440
-                'normal',
3441
-                'high',
3442
-                $callback_args
3443
-            );
3444
-        }
3445
-        
3446
-        //register message type metaboxes
3447
-        $mt_template_path = EE_MSG_TEMPLATE_PATH . 'ee_msg_details_messenger_meta_box.template.php';
3448
-        foreach ($mt_boxes as $box => $label) {
3449
-            $callback_args = array(
3450
-                'template_path' => $mt_template_path,
3451
-                'template_args' => $mt_template_args[$box]
3452
-            );
3453
-            $mt            = str_replace('_i_box', '', $box);
3454
-            add_meta_box(
3455
-                'espresso_' . $mt . '_inactive_mts',
3456
-                $label,
3457
-                function ($post, $metabox) {
3458
-                    echo EEH_Template::display_template(
3459
-                            $metabox["args"]["template_path"],
3460
-                            $metabox["args"]["template_args"],
3461
-                            true
3462
-                    );
3463
-                },
3464
-                $this->_current_screen->id,
3465
-                'side',
3466
-                'high',
3467
-                $callback_args
3468
-            );
3469
-        }
3470
-        
3471
-        //register metabox for global messages settings but only when on the main site.  On single site installs this
3472
-        // will always result in the metabox showing, on multisite installs the metabox will only show on the main site.
3473
-        if (is_main_site()) {
3474
-            add_meta_box(
3475
-                'espresso_global_message_settings',
3476
-                esc_html__('Global Message Settings', 'event_espresso'),
3477
-                array($this, 'global_messages_settings_metabox_content'),
3478
-                $this->_current_screen->id,
3479
-                'normal',
3480
-                'low',
3481
-                array()
3482
-            );
3483
-        }
3484
-        
3485
-    }
3358
+	/**
3359
+	 * Generate all the metaboxes for the message types and register them for the messages settings page.
3360
+	 *
3361
+	 * @access protected
3362
+	 * @return void
3363
+	 * @throws DomainException
3364
+	 */
3365
+	protected function _messages_settings_metaboxes()
3366
+	{
3367
+		$this->_set_m_mt_settings();
3368
+		$m_boxes         = $mt_boxes = array();
3369
+		$m_template_args = $mt_template_args = array();
3370
+        
3371
+		$selected_messenger = isset($this->_req_data['selected_messenger'])
3372
+			? $this->_req_data['selected_messenger']
3373
+			: 'email';
3374
+        
3375
+		if (isset($this->_m_mt_settings['messenger_tabs'])) {
3376
+			foreach ($this->_m_mt_settings['messenger_tabs'] as $messenger => $tab_array) {
3377
+				$hide_on_message  = $this->_message_resource_manager->is_messenger_active($messenger) ? '' : 'hidden';
3378
+				$hide_off_message = $this->_message_resource_manager->is_messenger_active($messenger) ? 'hidden' : '';
3379
+				//messenger meta boxes
3380
+				$active                                 = $selected_messenger === $messenger;
3381
+				$active_mt_tabs                         = isset(
3382
+					$this->_m_mt_settings['message_type_tabs'][$messenger]['active']
3383
+				)
3384
+					? $this->_m_mt_settings['message_type_tabs'][$messenger]['active']
3385
+					: '';
3386
+				$m_boxes[$messenger . '_a_box']         = sprintf(
3387
+					esc_html__('%s Settings', 'event_espresso'),
3388
+					$tab_array['label']
3389
+				);
3390
+				$m_template_args[$messenger . '_a_box'] = array(
3391
+					'active_message_types'   => ! empty($active_mt_tabs) ? $this->_get_mt_tabs($active_mt_tabs) : '',
3392
+					'inactive_message_types' => isset(
3393
+						$this->_m_mt_settings['message_type_tabs'][$messenger]['inactive']
3394
+					)
3395
+						? $this->_get_mt_tabs($this->_m_mt_settings['message_type_tabs'][$messenger]['inactive'])
3396
+						: '',
3397
+					'content'                => $this->_get_messenger_box_content($tab_array['obj']),
3398
+					'hidden'                 => $active ? '' : ' hidden',
3399
+					'hide_on_message'        => $hide_on_message,
3400
+					'messenger'              => $messenger,
3401
+					'active'                 => $active
3402
+				);
3403
+				// message type meta boxes
3404
+				// (which is really just the inactive container for each messenger
3405
+				// showing inactive message types for that messenger)
3406
+				$mt_boxes[$messenger . '_i_box']         = esc_html__('Inactive Message Types', 'event_espresso');
3407
+				$mt_template_args[$messenger . '_i_box'] = array(
3408
+					'active_message_types'   => ! empty($active_mt_tabs) ? $this->_get_mt_tabs($active_mt_tabs) : '',
3409
+					'inactive_message_types' => isset(
3410
+						$this->_m_mt_settings['message_type_tabs'][$messenger]['inactive']
3411
+					)
3412
+						? $this->_get_mt_tabs($this->_m_mt_settings['message_type_tabs'][$messenger]['inactive'])
3413
+						: '',
3414
+					'hidden'                 => $active ? '' : ' hidden',
3415
+					'hide_on_message'        => $hide_on_message,
3416
+					'hide_off_message'       => $hide_off_message,
3417
+					'messenger'              => $messenger,
3418
+					'active'                 => $active
3419
+				);
3420
+			}
3421
+		}
3422
+        
3423
+        
3424
+		//register messenger metaboxes
3425
+		$m_template_path = EE_MSG_TEMPLATE_PATH . 'ee_msg_details_messenger_mt_meta_box.template.php';
3426
+		foreach ($m_boxes as $box => $label) {
3427
+			$callback_args = array('template_path' => $m_template_path, 'template_args' => $m_template_args[$box]);
3428
+			$msgr          = str_replace('_a_box', '', $box);
3429
+			add_meta_box(
3430
+				'espresso_' . $msgr . '_settings',
3431
+				$label,
3432
+				function ($post, $metabox) {
3433
+					echo EEH_Template::display_template(
3434
+							$metabox["args"]["template_path"],
3435
+							$metabox["args"]["template_args"],
3436
+							true
3437
+					);
3438
+				},
3439
+				$this->_current_screen->id,
3440
+				'normal',
3441
+				'high',
3442
+				$callback_args
3443
+			);
3444
+		}
3445
+        
3446
+		//register message type metaboxes
3447
+		$mt_template_path = EE_MSG_TEMPLATE_PATH . 'ee_msg_details_messenger_meta_box.template.php';
3448
+		foreach ($mt_boxes as $box => $label) {
3449
+			$callback_args = array(
3450
+				'template_path' => $mt_template_path,
3451
+				'template_args' => $mt_template_args[$box]
3452
+			);
3453
+			$mt            = str_replace('_i_box', '', $box);
3454
+			add_meta_box(
3455
+				'espresso_' . $mt . '_inactive_mts',
3456
+				$label,
3457
+				function ($post, $metabox) {
3458
+					echo EEH_Template::display_template(
3459
+							$metabox["args"]["template_path"],
3460
+							$metabox["args"]["template_args"],
3461
+							true
3462
+					);
3463
+				},
3464
+				$this->_current_screen->id,
3465
+				'side',
3466
+				'high',
3467
+				$callback_args
3468
+			);
3469
+		}
3470
+        
3471
+		//register metabox for global messages settings but only when on the main site.  On single site installs this
3472
+		// will always result in the metabox showing, on multisite installs the metabox will only show on the main site.
3473
+		if (is_main_site()) {
3474
+			add_meta_box(
3475
+				'espresso_global_message_settings',
3476
+				esc_html__('Global Message Settings', 'event_espresso'),
3477
+				array($this, 'global_messages_settings_metabox_content'),
3478
+				$this->_current_screen->id,
3479
+				'normal',
3480
+				'low',
3481
+				array()
3482
+			);
3483
+		}
3484
+        
3485
+	}
3486 3486
 
3487 3487
 
3488
-    /**
3489
-     *  This generates the content for the global messages settings metabox.
3490
-     *
3491
-     * @return string
3492
-     * @throws EE_Error
3493
-     * @throws InvalidArgumentException
3494
-     * @throws ReflectionException
3495
-     * @throws InvalidDataTypeException
3496
-     * @throws InvalidInterfaceException
3497
-     */
3498
-    public function global_messages_settings_metabox_content()
3499
-    {
3500
-        $form = $this->_generate_global_settings_form();
3501
-        echo $form->form_open(
3502
-                $this->add_query_args_and_nonce(array('action' => 'update_global_settings'), EE_MSG_ADMIN_URL),
3503
-                'POST'
3504
-            )
3505
-             . $form->get_html()
3506
-             . $form->form_close();
3507
-    }
3488
+	/**
3489
+	 *  This generates the content for the global messages settings metabox.
3490
+	 *
3491
+	 * @return string
3492
+	 * @throws EE_Error
3493
+	 * @throws InvalidArgumentException
3494
+	 * @throws ReflectionException
3495
+	 * @throws InvalidDataTypeException
3496
+	 * @throws InvalidInterfaceException
3497
+	 */
3498
+	public function global_messages_settings_metabox_content()
3499
+	{
3500
+		$form = $this->_generate_global_settings_form();
3501
+		echo $form->form_open(
3502
+				$this->add_query_args_and_nonce(array('action' => 'update_global_settings'), EE_MSG_ADMIN_URL),
3503
+				'POST'
3504
+			)
3505
+			 . $form->get_html()
3506
+			 . $form->form_close();
3507
+	}
3508 3508
 
3509 3509
 
3510
-    /**
3511
-     * This generates and returns the form object for the global messages settings.
3512
-     *
3513
-     * @return EE_Form_Section_Proper
3514
-     * @throws EE_Error
3515
-     * @throws InvalidArgumentException
3516
-     * @throws ReflectionException
3517
-     * @throws InvalidDataTypeException
3518
-     * @throws InvalidInterfaceException
3519
-     */
3520
-    protected function _generate_global_settings_form()
3521
-    {
3522
-        EE_Registry::instance()->load_helper('HTML');
3523
-        /** @var EE_Network_Core_Config $network_config */
3524
-        $network_config = EE_Registry::instance()->NET_CFG->core;
3525
-        
3526
-        return new EE_Form_Section_Proper(
3527
-            array(
3528
-                'name'            => 'global_messages_settings',
3529
-                'html_id'         => 'global_messages_settings',
3530
-                'html_class'      => 'form-table',
3531
-                'layout_strategy' => new EE_Admin_Two_Column_Layout(),
3532
-                'subsections'     => apply_filters(
3533
-                    'FHEE__Messages_Admin_Page__global_messages_settings_metabox_content__form_subsections',
3534
-                    array(
3535
-                        'do_messages_on_same_request' => new EE_Select_Input(
3536
-                            array(
3537
-                                true  => esc_html__("On the same request", "event_espresso"),
3538
-                                false => esc_html__("On a separate request", "event_espresso")
3539
-                            ),
3540
-                            array(
3541
-                                'default'         => $network_config->do_messages_on_same_request,
3542
-                                'html_label_text' => esc_html__(
3543
-                                    'Generate and send all messages:',
3544
-                                    'event_espresso'
3545
-                                ),
3546
-                                'html_help_text'  => esc_html__(
3547
-                                    'By default the messages system uses a more efficient means of processing messages on separate requests and utilizes the wp-cron scheduling system.  This makes things execute faster for people registering for your events.  However, if the wp-cron system is disabled on your site and there is no alternative in place, then you can change this so messages are always executed on the same request.',
3548
-                                    'event_espresso'
3549
-                                ),
3550
-                            )
3551
-                        ),
3552
-                        'delete_threshold' => new EE_Select_Input(
3553
-                            array(
3554
-                                0 => esc_html__('Forever', 'event_espresso'),
3555
-                                3 => esc_html__('3 Months', 'event_espresso'),
3556
-                                6 => esc_html__('6 Months', 'event_espresso'),
3557
-                                9 => esc_html__('9 Months', 'event_espresso'),
3558
-                                12 => esc_html__('12 Months', 'event_espresso'),
3559
-                                24 => esc_html__('24 Months', 'event_espresso'),
3560
-                                36 => esc_html__('36 Months', 'event_espresso')
3561
-                            ),
3562
-                            array(
3563
-                                'default' => EE_Registry::instance()->CFG->messages->delete_threshold,
3564
-                                'html_label_text' => esc_html__('Cleanup of old messages:', 'event_espresso'),
3565
-                                'html_help_text' => esc_html__(
3566
-                                    'You can control how long a record of processed messages is kept via this option.',
3567
-                                    'event_espresso'
3568
-                                ),
3569
-                            )
3570
-                        ),
3571
-                        'update_settings'             => new EE_Submit_Input(
3572
-                            array(
3573
-                                'default'         => esc_html__('Update', 'event_espresso'),
3574
-                                'html_label_text' => '&nbsp'
3575
-                            )
3576
-                        )
3577
-                    )
3578
-                )
3579
-            )
3580
-        );
3581
-    }
3510
+	/**
3511
+	 * This generates and returns the form object for the global messages settings.
3512
+	 *
3513
+	 * @return EE_Form_Section_Proper
3514
+	 * @throws EE_Error
3515
+	 * @throws InvalidArgumentException
3516
+	 * @throws ReflectionException
3517
+	 * @throws InvalidDataTypeException
3518
+	 * @throws InvalidInterfaceException
3519
+	 */
3520
+	protected function _generate_global_settings_form()
3521
+	{
3522
+		EE_Registry::instance()->load_helper('HTML');
3523
+		/** @var EE_Network_Core_Config $network_config */
3524
+		$network_config = EE_Registry::instance()->NET_CFG->core;
3525
+        
3526
+		return new EE_Form_Section_Proper(
3527
+			array(
3528
+				'name'            => 'global_messages_settings',
3529
+				'html_id'         => 'global_messages_settings',
3530
+				'html_class'      => 'form-table',
3531
+				'layout_strategy' => new EE_Admin_Two_Column_Layout(),
3532
+				'subsections'     => apply_filters(
3533
+					'FHEE__Messages_Admin_Page__global_messages_settings_metabox_content__form_subsections',
3534
+					array(
3535
+						'do_messages_on_same_request' => new EE_Select_Input(
3536
+							array(
3537
+								true  => esc_html__("On the same request", "event_espresso"),
3538
+								false => esc_html__("On a separate request", "event_espresso")
3539
+							),
3540
+							array(
3541
+								'default'         => $network_config->do_messages_on_same_request,
3542
+								'html_label_text' => esc_html__(
3543
+									'Generate and send all messages:',
3544
+									'event_espresso'
3545
+								),
3546
+								'html_help_text'  => esc_html__(
3547
+									'By default the messages system uses a more efficient means of processing messages on separate requests and utilizes the wp-cron scheduling system.  This makes things execute faster for people registering for your events.  However, if the wp-cron system is disabled on your site and there is no alternative in place, then you can change this so messages are always executed on the same request.',
3548
+									'event_espresso'
3549
+								),
3550
+							)
3551
+						),
3552
+						'delete_threshold' => new EE_Select_Input(
3553
+							array(
3554
+								0 => esc_html__('Forever', 'event_espresso'),
3555
+								3 => esc_html__('3 Months', 'event_espresso'),
3556
+								6 => esc_html__('6 Months', 'event_espresso'),
3557
+								9 => esc_html__('9 Months', 'event_espresso'),
3558
+								12 => esc_html__('12 Months', 'event_espresso'),
3559
+								24 => esc_html__('24 Months', 'event_espresso'),
3560
+								36 => esc_html__('36 Months', 'event_espresso')
3561
+							),
3562
+							array(
3563
+								'default' => EE_Registry::instance()->CFG->messages->delete_threshold,
3564
+								'html_label_text' => esc_html__('Cleanup of old messages:', 'event_espresso'),
3565
+								'html_help_text' => esc_html__(
3566
+									'You can control how long a record of processed messages is kept via this option.',
3567
+									'event_espresso'
3568
+								),
3569
+							)
3570
+						),
3571
+						'update_settings'             => new EE_Submit_Input(
3572
+							array(
3573
+								'default'         => esc_html__('Update', 'event_espresso'),
3574
+								'html_label_text' => '&nbsp'
3575
+							)
3576
+						)
3577
+					)
3578
+				)
3579
+			)
3580
+		);
3581
+	}
3582 3582
 
3583 3583
 
3584
-    /**
3585
-     * This handles updating the global settings set on the admin page.
3586
-     *
3587
-     * @throws EE_Error
3588
-     * @throws InvalidDataTypeException
3589
-     * @throws InvalidInterfaceException
3590
-     * @throws InvalidArgumentException
3591
-     * @throws ReflectionException
3592
-     */
3593
-    protected function _update_global_settings()
3594
-    {
3595
-        /** @var EE_Network_Core_Config $network_config */
3596
-        $network_config = EE_Registry::instance()->NET_CFG->core;
3597
-        $messages_config = EE_Registry::instance()->CFG->messages;
3598
-        $form           = $this->_generate_global_settings_form();
3599
-        if ($form->was_submitted()) {
3600
-            $form->receive_form_submission();
3601
-            if ($form->is_valid()) {
3602
-                $valid_data = $form->valid_data();
3603
-                foreach ($valid_data as $property => $value) {
3604
-                    $setter = 'set_' . $property;
3605
-                    if (method_exists($network_config, $setter)) {
3606
-                        $network_config->{$setter}($value);
3607
-                    } else if (
3608
-                        property_exists($network_config, $property)
3609
-                        && $network_config->{$property} !== $value
3610
-                    ) {
3611
-                        $network_config->{$property} = $value;
3612
-                    } else if (
3613
-                        property_exists($messages_config, $property)
3614
-                        && $messages_config->{$property} !== $value
3615
-                    ) {
3616
-                        $messages_config->{$property} = $value;
3617
-                    }
3618
-                }
3619
-                //only update if the form submission was valid!
3620
-                EE_Registry::instance()->NET_CFG->update_config(true, false);
3621
-                EE_Registry::instance()->CFG->update_espresso_config();
3622
-                EE_Error::overwrite_success();
3623
-                EE_Error::add_success(__('Global message settings were updated', 'event_espresso'));
3624
-            }
3625
-        }
3626
-        $this->_redirect_after_action(0, '', '', array('action' => 'settings'), true);
3627
-    }
3584
+	/**
3585
+	 * This handles updating the global settings set on the admin page.
3586
+	 *
3587
+	 * @throws EE_Error
3588
+	 * @throws InvalidDataTypeException
3589
+	 * @throws InvalidInterfaceException
3590
+	 * @throws InvalidArgumentException
3591
+	 * @throws ReflectionException
3592
+	 */
3593
+	protected function _update_global_settings()
3594
+	{
3595
+		/** @var EE_Network_Core_Config $network_config */
3596
+		$network_config = EE_Registry::instance()->NET_CFG->core;
3597
+		$messages_config = EE_Registry::instance()->CFG->messages;
3598
+		$form           = $this->_generate_global_settings_form();
3599
+		if ($form->was_submitted()) {
3600
+			$form->receive_form_submission();
3601
+			if ($form->is_valid()) {
3602
+				$valid_data = $form->valid_data();
3603
+				foreach ($valid_data as $property => $value) {
3604
+					$setter = 'set_' . $property;
3605
+					if (method_exists($network_config, $setter)) {
3606
+						$network_config->{$setter}($value);
3607
+					} else if (
3608
+						property_exists($network_config, $property)
3609
+						&& $network_config->{$property} !== $value
3610
+					) {
3611
+						$network_config->{$property} = $value;
3612
+					} else if (
3613
+						property_exists($messages_config, $property)
3614
+						&& $messages_config->{$property} !== $value
3615
+					) {
3616
+						$messages_config->{$property} = $value;
3617
+					}
3618
+				}
3619
+				//only update if the form submission was valid!
3620
+				EE_Registry::instance()->NET_CFG->update_config(true, false);
3621
+				EE_Registry::instance()->CFG->update_espresso_config();
3622
+				EE_Error::overwrite_success();
3623
+				EE_Error::add_success(__('Global message settings were updated', 'event_espresso'));
3624
+			}
3625
+		}
3626
+		$this->_redirect_after_action(0, '', '', array('action' => 'settings'), true);
3627
+	}
3628 3628
 
3629 3629
 
3630
-    /**
3631
-     * this prepares the messenger tabs that can be dragged in and out of messenger boxes to activate/deactivate
3632
-     *
3633
-     * @param  array $tab_array This is an array of message type tab details used to generate the tabs
3634
-     * @return string html formatted tabs
3635
-     * @throws DomainException
3636
-     */
3637
-    protected function _get_mt_tabs($tab_array)
3638
-    {
3639
-        $tab_array = (array)$tab_array;
3640
-        $template  = EE_MSG_TEMPLATE_PATH . 'ee_msg_details_mt_settings_tab_item.template.php';
3641
-        $tabs      = '';
3642
-        
3643
-        foreach ($tab_array as $tab) {
3644
-            $tabs .= EEH_Template::display_template($template, $tab, true);
3645
-        }
3646
-        
3647
-        return $tabs;
3648
-    }
3630
+	/**
3631
+	 * this prepares the messenger tabs that can be dragged in and out of messenger boxes to activate/deactivate
3632
+	 *
3633
+	 * @param  array $tab_array This is an array of message type tab details used to generate the tabs
3634
+	 * @return string html formatted tabs
3635
+	 * @throws DomainException
3636
+	 */
3637
+	protected function _get_mt_tabs($tab_array)
3638
+	{
3639
+		$tab_array = (array)$tab_array;
3640
+		$template  = EE_MSG_TEMPLATE_PATH . 'ee_msg_details_mt_settings_tab_item.template.php';
3641
+		$tabs      = '';
3642
+        
3643
+		foreach ($tab_array as $tab) {
3644
+			$tabs .= EEH_Template::display_template($template, $tab, true);
3645
+		}
3646
+        
3647
+		return $tabs;
3648
+	}
3649 3649
 
3650 3650
 
3651
-    /**
3652
-     * This prepares the content of the messenger meta box admin settings
3653
-     *
3654
-     * @param  EE_messenger $messenger The messenger we're setting up content for
3655
-     * @return string html formatted content
3656
-     * @throws DomainException
3657
-     */
3658
-    protected function _get_messenger_box_content(EE_messenger $messenger)
3659
-    {
3651
+	/**
3652
+	 * This prepares the content of the messenger meta box admin settings
3653
+	 *
3654
+	 * @param  EE_messenger $messenger The messenger we're setting up content for
3655
+	 * @return string html formatted content
3656
+	 * @throws DomainException
3657
+	 */
3658
+	protected function _get_messenger_box_content(EE_messenger $messenger)
3659
+	{
3660 3660
         
3661
-        $fields                                         = $messenger->get_admin_settings_fields();
3662
-        $settings_template_args['template_form_fields'] = '';
3661
+		$fields                                         = $messenger->get_admin_settings_fields();
3662
+		$settings_template_args['template_form_fields'] = '';
3663 3663
         
3664
-        //is $messenger active?
3665
-        $settings_template_args['active'] = $this->_message_resource_manager->is_messenger_active($messenger->name);
3664
+		//is $messenger active?
3665
+		$settings_template_args['active'] = $this->_message_resource_manager->is_messenger_active($messenger->name);
3666 3666
         
3667 3667
         
3668
-        if ( ! empty($fields)) {
3668
+		if ( ! empty($fields)) {
3669 3669
             
3670
-            $existing_settings = $messenger->get_existing_admin_settings();
3670
+			$existing_settings = $messenger->get_existing_admin_settings();
3671 3671
             
3672
-            foreach ($fields as $fldname => $fldprops) {
3673
-                $field_id                       = $messenger->name . '-' . $fldname;
3674
-                $template_form_field[$field_id] = array(
3675
-                    'name'       => 'messenger_settings[' . $field_id . ']',
3676
-                    'label'      => $fldprops['label'],
3677
-                    'input'      => $fldprops['field_type'],
3678
-                    'type'       => $fldprops['value_type'],
3679
-                    'required'   => $fldprops['required'],
3680
-                    'validation' => $fldprops['validation'],
3681
-                    'value'      => isset($existing_settings[$field_id])
3682
-                        ? $existing_settings[$field_id]
3683
-                        : $fldprops['default'],
3684
-                    'css_class'  => '',
3685
-                    'format'     => $fldprops['format']
3686
-                );
3687
-            }
3672
+			foreach ($fields as $fldname => $fldprops) {
3673
+				$field_id                       = $messenger->name . '-' . $fldname;
3674
+				$template_form_field[$field_id] = array(
3675
+					'name'       => 'messenger_settings[' . $field_id . ']',
3676
+					'label'      => $fldprops['label'],
3677
+					'input'      => $fldprops['field_type'],
3678
+					'type'       => $fldprops['value_type'],
3679
+					'required'   => $fldprops['required'],
3680
+					'validation' => $fldprops['validation'],
3681
+					'value'      => isset($existing_settings[$field_id])
3682
+						? $existing_settings[$field_id]
3683
+						: $fldprops['default'],
3684
+					'css_class'  => '',
3685
+					'format'     => $fldprops['format']
3686
+				);
3687
+			}
3688 3688
             
3689 3689
             
3690
-            $settings_template_args['template_form_fields'] = ! empty($template_form_field)
3691
-                ? $this->_generate_admin_form_fields($template_form_field, 'string', 'ee_m_activate_form')
3692
-                : '';
3693
-        }
3694
-        
3695
-        //we also need some hidden fields
3696
-        $settings_template_args['hidden_fields'] = array(
3697
-            'messenger_settings[messenger]' => array(
3698
-                'type'  => 'hidden',
3699
-                'value' => $messenger->name
3700
-            ),
3701
-            'type'                          => array(
3702
-                'type'  => 'hidden',
3703
-                'value' => 'messenger'
3704
-            )
3705
-        );
3706
-        
3707
-        //make sure any active message types that are existing are included in the hidden fields
3708
-        if (isset($this->_m_mt_settings['message_type_tabs'][$messenger->name]['active'])) {
3709
-            foreach ($this->_m_mt_settings['message_type_tabs'][$messenger->name]['active'] as $mt => $values) {
3710
-                $settings_template_args['hidden_fields']['messenger_settings[message_types][' . $mt . ']'] = array(
3711
-                    'type'  => 'hidden',
3712
-                    'value' => $mt
3713
-                );
3714
-            }
3715
-        }
3716
-        $settings_template_args['hidden_fields'] = $this->_generate_admin_form_fields(
3717
-            $settings_template_args['hidden_fields'],
3718
-            'array'
3719
-        );
3720
-        $active = $this->_message_resource_manager->is_messenger_active($messenger->name);
3721
-        
3722
-        $settings_template_args['messenger']           = $messenger->name;
3723
-        $settings_template_args['description']         = $messenger->description;
3724
-        $settings_template_args['show_hide_edit_form'] = $active ? '' : ' hidden';
3725
-        
3726
-        
3727
-        $settings_template_args['show_hide_edit_form'] = $this->_message_resource_manager->is_messenger_active(
3728
-            $messenger->name
3729
-        )
3730
-            ? $settings_template_args['show_hide_edit_form']
3731
-            : ' hidden';
3732
-        
3733
-        $settings_template_args['show_hide_edit_form'] = empty($settings_template_args['template_form_fields'])
3734
-            ? ' hidden'
3735
-            : $settings_template_args['show_hide_edit_form'];
3736
-        
3737
-        
3738
-        $settings_template_args['on_off_action'] = $active ? 'messenger-off' : 'messenger-on';
3739
-        $settings_template_args['nonce']         = wp_create_nonce('activate_' . $messenger->name . '_toggle_nonce');
3740
-        $settings_template_args['on_off_status'] = $active ? true : false;
3741
-        $template                                = EE_MSG_TEMPLATE_PATH . 'ee_msg_m_settings_content.template.php';
3742
-        $content                                 = EEH_Template::display_template(
3743
-            $template,
3744
-            $settings_template_args,
3745
-            true
3746
-        );
3747
-        
3748
-        return $content;
3749
-    }
3690
+			$settings_template_args['template_form_fields'] = ! empty($template_form_field)
3691
+				? $this->_generate_admin_form_fields($template_form_field, 'string', 'ee_m_activate_form')
3692
+				: '';
3693
+		}
3694
+        
3695
+		//we also need some hidden fields
3696
+		$settings_template_args['hidden_fields'] = array(
3697
+			'messenger_settings[messenger]' => array(
3698
+				'type'  => 'hidden',
3699
+				'value' => $messenger->name
3700
+			),
3701
+			'type'                          => array(
3702
+				'type'  => 'hidden',
3703
+				'value' => 'messenger'
3704
+			)
3705
+		);
3706
+        
3707
+		//make sure any active message types that are existing are included in the hidden fields
3708
+		if (isset($this->_m_mt_settings['message_type_tabs'][$messenger->name]['active'])) {
3709
+			foreach ($this->_m_mt_settings['message_type_tabs'][$messenger->name]['active'] as $mt => $values) {
3710
+				$settings_template_args['hidden_fields']['messenger_settings[message_types][' . $mt . ']'] = array(
3711
+					'type'  => 'hidden',
3712
+					'value' => $mt
3713
+				);
3714
+			}
3715
+		}
3716
+		$settings_template_args['hidden_fields'] = $this->_generate_admin_form_fields(
3717
+			$settings_template_args['hidden_fields'],
3718
+			'array'
3719
+		);
3720
+		$active = $this->_message_resource_manager->is_messenger_active($messenger->name);
3721
+        
3722
+		$settings_template_args['messenger']           = $messenger->name;
3723
+		$settings_template_args['description']         = $messenger->description;
3724
+		$settings_template_args['show_hide_edit_form'] = $active ? '' : ' hidden';
3725
+        
3726
+        
3727
+		$settings_template_args['show_hide_edit_form'] = $this->_message_resource_manager->is_messenger_active(
3728
+			$messenger->name
3729
+		)
3730
+			? $settings_template_args['show_hide_edit_form']
3731
+			: ' hidden';
3732
+        
3733
+		$settings_template_args['show_hide_edit_form'] = empty($settings_template_args['template_form_fields'])
3734
+			? ' hidden'
3735
+			: $settings_template_args['show_hide_edit_form'];
3736
+        
3737
+        
3738
+		$settings_template_args['on_off_action'] = $active ? 'messenger-off' : 'messenger-on';
3739
+		$settings_template_args['nonce']         = wp_create_nonce('activate_' . $messenger->name . '_toggle_nonce');
3740
+		$settings_template_args['on_off_status'] = $active ? true : false;
3741
+		$template                                = EE_MSG_TEMPLATE_PATH . 'ee_msg_m_settings_content.template.php';
3742
+		$content                                 = EEH_Template::display_template(
3743
+			$template,
3744
+			$settings_template_args,
3745
+			true
3746
+		);
3747
+        
3748
+		return $content;
3749
+	}
3750 3750
 
3751 3751
 
3752
-    /**
3753
-     * used by ajax on the messages settings page to activate|deactivate the messenger
3754
-     *
3755
-     * @throws DomainException
3756
-     * @throws EE_Error
3757
-     * @throws InvalidDataTypeException
3758
-     * @throws InvalidInterfaceException
3759
-     * @throws InvalidArgumentException
3760
-     * @throws ReflectionException
3761
-     */
3762
-    public function activate_messenger_toggle()
3763
-    {
3764
-        $success = true;
3765
-        $this->_prep_default_response_for_messenger_or_message_type_toggle();
3766
-        //let's check that we have required data
3767
-        if ( ! isset($this->_req_data['messenger'])) {
3768
-            EE_Error::add_error(
3769
-                esc_html__('Messenger name needed to toggle activation. None given', 'event_espresso'),
3770
-                __FILE__,
3771
-                __FUNCTION__,
3772
-                __LINE__
3773
-            );
3774
-            $success = false;
3775
-        }
3776
-        
3777
-        //do a nonce check here since we're not arriving via a normal route
3778
-        $nonce     = isset($this->_req_data['activate_nonce'])
3779
-            ? sanitize_text_field($this->_req_data['activate_nonce'])
3780
-            : '';
3781
-        $nonce_ref = 'activate_' . $this->_req_data['messenger'] . '_toggle_nonce';
3782
-        
3783
-        $this->_verify_nonce($nonce, $nonce_ref);
3784
-        
3785
-        
3786
-        if ( ! isset($this->_req_data['status'])) {
3787
-            EE_Error::add_error(
3788
-                esc_html__(
3789
-                    'Messenger status needed to know whether activation or deactivation is happening. No status is given',
3790
-                    'event_espresso'
3791
-                ),
3792
-                __FILE__,
3793
-                __FUNCTION__,
3794
-                __LINE__
3795
-            );
3796
-            $success = false;
3797
-        }
3798
-        
3799
-        //do check to verify we have a valid status.
3800
-        $status = $this->_req_data['status'];
3801
-        
3802
-        if ($status !== 'off' && $status !== 'on') {
3803
-            EE_Error::add_error(
3804
-                sprintf(
3805
-                    esc_html__('The given status (%s) is not valid. Must be "off" or "on"', 'event_espresso'),
3806
-                    $this->_req_data['status']
3807
-                ),
3808
-                __FILE__,
3809
-                __FUNCTION__,
3810
-                __LINE__
3811
-            );
3812
-            $success = false;
3813
-        }
3814
-        
3815
-        if ($success) {
3816
-            //made it here?  Stop dawdling then!!
3817
-            $success = $status === 'off'
3818
-                ? $this->_deactivate_messenger($this->_req_data['messenger'])
3819
-                : $this->_activate_messenger($this->_req_data['messenger']);
3820
-        }
3821
-        
3822
-        $this->_template_args['success'] = $success;
3823
-        
3824
-        //no special instructions so let's just do the json return (which should automatically do all the special stuff).
3825
-        $this->_return_json();
3826
-        
3827
-    }
3752
+	/**
3753
+	 * used by ajax on the messages settings page to activate|deactivate the messenger
3754
+	 *
3755
+	 * @throws DomainException
3756
+	 * @throws EE_Error
3757
+	 * @throws InvalidDataTypeException
3758
+	 * @throws InvalidInterfaceException
3759
+	 * @throws InvalidArgumentException
3760
+	 * @throws ReflectionException
3761
+	 */
3762
+	public function activate_messenger_toggle()
3763
+	{
3764
+		$success = true;
3765
+		$this->_prep_default_response_for_messenger_or_message_type_toggle();
3766
+		//let's check that we have required data
3767
+		if ( ! isset($this->_req_data['messenger'])) {
3768
+			EE_Error::add_error(
3769
+				esc_html__('Messenger name needed to toggle activation. None given', 'event_espresso'),
3770
+				__FILE__,
3771
+				__FUNCTION__,
3772
+				__LINE__
3773
+			);
3774
+			$success = false;
3775
+		}
3776
+        
3777
+		//do a nonce check here since we're not arriving via a normal route
3778
+		$nonce     = isset($this->_req_data['activate_nonce'])
3779
+			? sanitize_text_field($this->_req_data['activate_nonce'])
3780
+			: '';
3781
+		$nonce_ref = 'activate_' . $this->_req_data['messenger'] . '_toggle_nonce';
3782
+        
3783
+		$this->_verify_nonce($nonce, $nonce_ref);
3784
+        
3785
+        
3786
+		if ( ! isset($this->_req_data['status'])) {
3787
+			EE_Error::add_error(
3788
+				esc_html__(
3789
+					'Messenger status needed to know whether activation or deactivation is happening. No status is given',
3790
+					'event_espresso'
3791
+				),
3792
+				__FILE__,
3793
+				__FUNCTION__,
3794
+				__LINE__
3795
+			);
3796
+			$success = false;
3797
+		}
3798
+        
3799
+		//do check to verify we have a valid status.
3800
+		$status = $this->_req_data['status'];
3801
+        
3802
+		if ($status !== 'off' && $status !== 'on') {
3803
+			EE_Error::add_error(
3804
+				sprintf(
3805
+					esc_html__('The given status (%s) is not valid. Must be "off" or "on"', 'event_espresso'),
3806
+					$this->_req_data['status']
3807
+				),
3808
+				__FILE__,
3809
+				__FUNCTION__,
3810
+				__LINE__
3811
+			);
3812
+			$success = false;
3813
+		}
3814
+        
3815
+		if ($success) {
3816
+			//made it here?  Stop dawdling then!!
3817
+			$success = $status === 'off'
3818
+				? $this->_deactivate_messenger($this->_req_data['messenger'])
3819
+				: $this->_activate_messenger($this->_req_data['messenger']);
3820
+		}
3821
+        
3822
+		$this->_template_args['success'] = $success;
3823
+        
3824
+		//no special instructions so let's just do the json return (which should automatically do all the special stuff).
3825
+		$this->_return_json();
3826
+        
3827
+	}
3828 3828
 
3829 3829
 
3830
-    /**
3831
-     * used by ajax from the messages settings page to activate|deactivate a message type
3832
-     *
3833
-     * @throws DomainException
3834
-     * @throws EE_Error
3835
-     * @throws ReflectionException
3836
-     * @throws InvalidDataTypeException
3837
-     * @throws InvalidInterfaceException
3838
-     * @throws InvalidArgumentException
3839
-     */
3840
-    public function activate_mt_toggle()
3841
-    {
3842
-        $success = true;
3843
-        $this->_prep_default_response_for_messenger_or_message_type_toggle();
3844
-        
3845
-        //let's make sure we have the necessary data
3846
-        if ( ! isset($this->_req_data['message_type'])) {
3847
-            EE_Error::add_error(
3848
-                esc_html__('Message Type name needed to toggle activation. None given', 'event_espresso'),
3849
-                __FILE__,
3850
-                __FUNCTION__,
3851
-                __LINE__
3852
-            );
3853
-            $success = false;
3854
-        }
3855
-        
3856
-        if ( ! isset($this->_req_data['messenger'])) {
3857
-            EE_Error::add_error(
3858
-                esc_html__('Messenger name needed to toggle activation. None given', 'event_espresso'),
3859
-                __FILE__,
3860
-                __FUNCTION__,
3861
-                __LINE__
3862
-            );
3863
-            $success = false;
3864
-        }
3865
-        
3866
-        if ( ! isset($this->_req_data['status'])) {
3867
-            EE_Error::add_error(
3868
-                esc_html__('Messenger status needed to know whether activation or deactivation is happening. No status is given',
3869
-                    'event_espresso'),
3870
-                __FILE__,
3871
-                __FUNCTION__,
3872
-                __LINE__
3873
-            );
3874
-            $success = false;
3875
-        }
3876
-        
3877
-        
3878
-        //do check to verify we have a valid status.
3879
-        $status = $this->_req_data['status'];
3880
-        
3881
-        if ($status !== 'activate' && $status !== 'deactivate') {
3882
-            EE_Error::add_error(
3883
-                sprintf(
3884
-                    esc_html__('The given status (%s) is not valid. Must be "active" or "inactive"', 'event_espresso'),
3885
-                    $this->_req_data['status']
3886
-                ),
3887
-                __FILE__,
3888
-                __FUNCTION__,
3889
-                __LINE__
3890
-            );
3891
-            $success = false;
3892
-        }
3893
-        
3894
-        
3895
-        //do a nonce check here since we're not arriving via a normal route
3896
-        $nonce     = isset($this->_req_data['mt_nonce']) ? sanitize_text_field($this->_req_data['mt_nonce']) : '';
3897
-        $nonce_ref = $this->_req_data['message_type'] . '_nonce';
3898
-        
3899
-        $this->_verify_nonce($nonce, $nonce_ref);
3900
-        
3901
-        if ($success) {
3902
-            //made it here? um, what are you waiting for then?
3903
-            $success = $status === 'deactivate'
3904
-                ? $this->_deactivate_message_type_for_messenger(
3905
-                    $this->_req_data['messenger'],
3906
-                    $this->_req_data['message_type']
3907
-                )
3908
-                : $this->_activate_message_type_for_messenger(
3909
-                    $this->_req_data['messenger'],
3910
-                    $this->_req_data['message_type']
3911
-                );
3912
-        }
3913
-        
3914
-        $this->_template_args['success'] = $success;
3915
-        $this->_return_json();
3916
-    }
3830
+	/**
3831
+	 * used by ajax from the messages settings page to activate|deactivate a message type
3832
+	 *
3833
+	 * @throws DomainException
3834
+	 * @throws EE_Error
3835
+	 * @throws ReflectionException
3836
+	 * @throws InvalidDataTypeException
3837
+	 * @throws InvalidInterfaceException
3838
+	 * @throws InvalidArgumentException
3839
+	 */
3840
+	public function activate_mt_toggle()
3841
+	{
3842
+		$success = true;
3843
+		$this->_prep_default_response_for_messenger_or_message_type_toggle();
3844
+        
3845
+		//let's make sure we have the necessary data
3846
+		if ( ! isset($this->_req_data['message_type'])) {
3847
+			EE_Error::add_error(
3848
+				esc_html__('Message Type name needed to toggle activation. None given', 'event_espresso'),
3849
+				__FILE__,
3850
+				__FUNCTION__,
3851
+				__LINE__
3852
+			);
3853
+			$success = false;
3854
+		}
3855
+        
3856
+		if ( ! isset($this->_req_data['messenger'])) {
3857
+			EE_Error::add_error(
3858
+				esc_html__('Messenger name needed to toggle activation. None given', 'event_espresso'),
3859
+				__FILE__,
3860
+				__FUNCTION__,
3861
+				__LINE__
3862
+			);
3863
+			$success = false;
3864
+		}
3865
+        
3866
+		if ( ! isset($this->_req_data['status'])) {
3867
+			EE_Error::add_error(
3868
+				esc_html__('Messenger status needed to know whether activation or deactivation is happening. No status is given',
3869
+					'event_espresso'),
3870
+				__FILE__,
3871
+				__FUNCTION__,
3872
+				__LINE__
3873
+			);
3874
+			$success = false;
3875
+		}
3876
+        
3877
+        
3878
+		//do check to verify we have a valid status.
3879
+		$status = $this->_req_data['status'];
3880
+        
3881
+		if ($status !== 'activate' && $status !== 'deactivate') {
3882
+			EE_Error::add_error(
3883
+				sprintf(
3884
+					esc_html__('The given status (%s) is not valid. Must be "active" or "inactive"', 'event_espresso'),
3885
+					$this->_req_data['status']
3886
+				),
3887
+				__FILE__,
3888
+				__FUNCTION__,
3889
+				__LINE__
3890
+			);
3891
+			$success = false;
3892
+		}
3893
+        
3894
+        
3895
+		//do a nonce check here since we're not arriving via a normal route
3896
+		$nonce     = isset($this->_req_data['mt_nonce']) ? sanitize_text_field($this->_req_data['mt_nonce']) : '';
3897
+		$nonce_ref = $this->_req_data['message_type'] . '_nonce';
3898
+        
3899
+		$this->_verify_nonce($nonce, $nonce_ref);
3900
+        
3901
+		if ($success) {
3902
+			//made it here? um, what are you waiting for then?
3903
+			$success = $status === 'deactivate'
3904
+				? $this->_deactivate_message_type_for_messenger(
3905
+					$this->_req_data['messenger'],
3906
+					$this->_req_data['message_type']
3907
+				)
3908
+				: $this->_activate_message_type_for_messenger(
3909
+					$this->_req_data['messenger'],
3910
+					$this->_req_data['message_type']
3911
+				);
3912
+		}
3913
+        
3914
+		$this->_template_args['success'] = $success;
3915
+		$this->_return_json();
3916
+	}
3917 3917
 
3918 3918
 
3919
-    /**
3920
-     * Takes care of processing activating a messenger and preparing the appropriate response.
3921
-     *
3922
-     * @param string $messenger_name The name of the messenger being activated
3923
-     * @return bool
3924
-     * @throws DomainException
3925
-     * @throws EE_Error
3926
-     * @throws InvalidArgumentException
3927
-     * @throws ReflectionException
3928
-     * @throws InvalidDataTypeException
3929
-     * @throws InvalidInterfaceException
3930
-     */
3931
-    protected function _activate_messenger($messenger_name)
3932
-    {
3933
-        /** @var EE_messenger $active_messenger This will be present because it can't be toggled if it isn't */
3934
-        $active_messenger          = $this->_message_resource_manager->get_messenger($messenger_name);
3935
-        $message_types_to_activate = $active_messenger instanceof EE_Messenger
3936
-            ? $active_messenger->get_default_message_types()
3937
-            : array();
3938
-        
3939
-        //ensure is active
3940
-        $this->_message_resource_manager->activate_messenger($messenger_name, $message_types_to_activate);
3941
-        
3942
-        //set response_data for reload
3943
-        foreach ($message_types_to_activate as $message_type_name) {
3944
-            /** @var EE_message_type $message_type */
3945
-            $message_type = $this->_message_resource_manager->get_message_type($message_type_name);
3946
-            if ($this->_message_resource_manager->is_message_type_active_for_messenger(
3947
-                    $messenger_name,
3948
-                    $message_type_name
3949
-                )
3950
-                && $message_type instanceof EE_message_type
3951
-            ) {
3952
-                $this->_template_args['data']['active_mts'][] = $message_type_name;
3953
-                if ($message_type->get_admin_settings_fields()) {
3954
-                    $this->_template_args['data']['mt_reload'][] = $message_type_name;
3955
-                }
3956
-            }
3957
-        }
3958
-        
3959
-        //add success message for activating messenger
3960
-        return $this->_setup_response_message_for_activating_messenger_with_message_types($active_messenger);
3961
-        
3962
-    }
3919
+	/**
3920
+	 * Takes care of processing activating a messenger and preparing the appropriate response.
3921
+	 *
3922
+	 * @param string $messenger_name The name of the messenger being activated
3923
+	 * @return bool
3924
+	 * @throws DomainException
3925
+	 * @throws EE_Error
3926
+	 * @throws InvalidArgumentException
3927
+	 * @throws ReflectionException
3928
+	 * @throws InvalidDataTypeException
3929
+	 * @throws InvalidInterfaceException
3930
+	 */
3931
+	protected function _activate_messenger($messenger_name)
3932
+	{
3933
+		/** @var EE_messenger $active_messenger This will be present because it can't be toggled if it isn't */
3934
+		$active_messenger          = $this->_message_resource_manager->get_messenger($messenger_name);
3935
+		$message_types_to_activate = $active_messenger instanceof EE_Messenger
3936
+			? $active_messenger->get_default_message_types()
3937
+			: array();
3938
+        
3939
+		//ensure is active
3940
+		$this->_message_resource_manager->activate_messenger($messenger_name, $message_types_to_activate);
3941
+        
3942
+		//set response_data for reload
3943
+		foreach ($message_types_to_activate as $message_type_name) {
3944
+			/** @var EE_message_type $message_type */
3945
+			$message_type = $this->_message_resource_manager->get_message_type($message_type_name);
3946
+			if ($this->_message_resource_manager->is_message_type_active_for_messenger(
3947
+					$messenger_name,
3948
+					$message_type_name
3949
+				)
3950
+				&& $message_type instanceof EE_message_type
3951
+			) {
3952
+				$this->_template_args['data']['active_mts'][] = $message_type_name;
3953
+				if ($message_type->get_admin_settings_fields()) {
3954
+					$this->_template_args['data']['mt_reload'][] = $message_type_name;
3955
+				}
3956
+			}
3957
+		}
3958
+        
3959
+		//add success message for activating messenger
3960
+		return $this->_setup_response_message_for_activating_messenger_with_message_types($active_messenger);
3961
+        
3962
+	}
3963 3963
 
3964 3964
 
3965
-    /**
3966
-     * Takes care of processing deactivating a messenger and preparing the appropriate response.
3967
-     *
3968
-     * @param string $messenger_name The name of the messenger being activated
3969
-     * @return bool
3970
-     * @throws DomainException
3971
-     * @throws EE_Error
3972
-     * @throws InvalidArgumentException
3973
-     * @throws ReflectionException
3974
-     * @throws InvalidDataTypeException
3975
-     * @throws InvalidInterfaceException
3976
-     */
3977
-    protected function _deactivate_messenger($messenger_name)
3978
-    {
3979
-        /** @var EE_messenger $active_messenger This will be present because it can't be toggled if it isn't */
3980
-        $active_messenger = $this->_message_resource_manager->get_messenger($messenger_name);
3981
-        $this->_message_resource_manager->deactivate_messenger($messenger_name);
3982
-        
3983
-        return $this->_setup_response_message_for_deactivating_messenger_with_message_types($active_messenger);
3984
-    }
3965
+	/**
3966
+	 * Takes care of processing deactivating a messenger and preparing the appropriate response.
3967
+	 *
3968
+	 * @param string $messenger_name The name of the messenger being activated
3969
+	 * @return bool
3970
+	 * @throws DomainException
3971
+	 * @throws EE_Error
3972
+	 * @throws InvalidArgumentException
3973
+	 * @throws ReflectionException
3974
+	 * @throws InvalidDataTypeException
3975
+	 * @throws InvalidInterfaceException
3976
+	 */
3977
+	protected function _deactivate_messenger($messenger_name)
3978
+	{
3979
+		/** @var EE_messenger $active_messenger This will be present because it can't be toggled if it isn't */
3980
+		$active_messenger = $this->_message_resource_manager->get_messenger($messenger_name);
3981
+		$this->_message_resource_manager->deactivate_messenger($messenger_name);
3982
+        
3983
+		return $this->_setup_response_message_for_deactivating_messenger_with_message_types($active_messenger);
3984
+	}
3985 3985
 
3986 3986
 
3987
-    /**
3988
-     * Takes care of processing activating a message type for a messenger and preparing the appropriate response.
3989
-     *
3990
-     * @param string $messenger_name    The name of the messenger the message type is being activated for.
3991
-     * @param string $message_type_name The name of the message type being activated for the messenger
3992
-     * @return bool
3993
-     * @throws DomainException
3994
-     * @throws EE_Error
3995
-     * @throws InvalidArgumentException
3996
-     * @throws ReflectionException
3997
-     * @throws InvalidDataTypeException
3998
-     * @throws InvalidInterfaceException
3999
-     */
4000
-    protected function _activate_message_type_for_messenger($messenger_name, $message_type_name)
4001
-    {
4002
-        /** @var EE_messenger $active_messenger This will be present because it can't be toggled if it isn't */
4003
-        $active_messenger = $this->_message_resource_manager->get_messenger($messenger_name);
4004
-        /** @var EE_message_type $message_type_to_activate This will be present because it can't be toggled if it isn't */
4005
-        $message_type_to_activate = $this->_message_resource_manager->get_message_type($message_type_name);
4006
-        
4007
-        //ensure is active
4008
-        $this->_message_resource_manager->activate_messenger($messenger_name, $message_type_name);
4009
-        
4010
-        //set response for load
4011
-        if ($this->_message_resource_manager->is_message_type_active_for_messenger($messenger_name,
4012
-            $message_type_name)
4013
-        ) {
4014
-            $this->_template_args['data']['active_mts'][] = $message_type_name;
4015
-            if ($message_type_to_activate->get_admin_settings_fields()) {
4016
-                $this->_template_args['data']['mt_reload'][] = $message_type_name;
4017
-            }
4018
-        }
4019
-        
4020
-        return $this->_setup_response_message_for_activating_messenger_with_message_types($active_messenger,
4021
-            $message_type_to_activate);
4022
-    }
3987
+	/**
3988
+	 * Takes care of processing activating a message type for a messenger and preparing the appropriate response.
3989
+	 *
3990
+	 * @param string $messenger_name    The name of the messenger the message type is being activated for.
3991
+	 * @param string $message_type_name The name of the message type being activated for the messenger
3992
+	 * @return bool
3993
+	 * @throws DomainException
3994
+	 * @throws EE_Error
3995
+	 * @throws InvalidArgumentException
3996
+	 * @throws ReflectionException
3997
+	 * @throws InvalidDataTypeException
3998
+	 * @throws InvalidInterfaceException
3999
+	 */
4000
+	protected function _activate_message_type_for_messenger($messenger_name, $message_type_name)
4001
+	{
4002
+		/** @var EE_messenger $active_messenger This will be present because it can't be toggled if it isn't */
4003
+		$active_messenger = $this->_message_resource_manager->get_messenger($messenger_name);
4004
+		/** @var EE_message_type $message_type_to_activate This will be present because it can't be toggled if it isn't */
4005
+		$message_type_to_activate = $this->_message_resource_manager->get_message_type($message_type_name);
4006
+        
4007
+		//ensure is active
4008
+		$this->_message_resource_manager->activate_messenger($messenger_name, $message_type_name);
4009
+        
4010
+		//set response for load
4011
+		if ($this->_message_resource_manager->is_message_type_active_for_messenger($messenger_name,
4012
+			$message_type_name)
4013
+		) {
4014
+			$this->_template_args['data']['active_mts'][] = $message_type_name;
4015
+			if ($message_type_to_activate->get_admin_settings_fields()) {
4016
+				$this->_template_args['data']['mt_reload'][] = $message_type_name;
4017
+			}
4018
+		}
4019
+        
4020
+		return $this->_setup_response_message_for_activating_messenger_with_message_types($active_messenger,
4021
+			$message_type_to_activate);
4022
+	}
4023 4023
 
4024 4024
 
4025
-    /**
4026
-     * Takes care of processing deactivating a message type for a messenger and preparing the appropriate response.
4027
-     *
4028
-     * @param string $messenger_name    The name of the messenger the message type is being deactivated for.
4029
-     * @param string $message_type_name The name of the message type being deactivated for the messenger
4030
-     * @return bool
4031
-     * @throws DomainException
4032
-     * @throws EE_Error
4033
-     * @throws InvalidArgumentException
4034
-     * @throws ReflectionException
4035
-     * @throws InvalidDataTypeException
4036
-     * @throws InvalidInterfaceException
4037
-     */
4038
-    protected function _deactivate_message_type_for_messenger($messenger_name, $message_type_name)
4039
-    {
4040
-        /** @var EE_messenger $active_messenger This will be present because it can't be toggled if it isn't */
4041
-        $active_messenger = $this->_message_resource_manager->get_messenger($messenger_name);
4042
-        /** @var EE_message_type $message_type_to_activate This will be present because it can't be toggled if it isn't */
4043
-        $message_type_to_deactivate = $this->_message_resource_manager->get_message_type($message_type_name);
4044
-        $this->_message_resource_manager->deactivate_message_type_for_messenger($message_type_name, $messenger_name);
4045
-        
4046
-        return $this->_setup_response_message_for_deactivating_messenger_with_message_types($active_messenger,
4047
-            $message_type_to_deactivate);
4048
-    }
4025
+	/**
4026
+	 * Takes care of processing deactivating a message type for a messenger and preparing the appropriate response.
4027
+	 *
4028
+	 * @param string $messenger_name    The name of the messenger the message type is being deactivated for.
4029
+	 * @param string $message_type_name The name of the message type being deactivated for the messenger
4030
+	 * @return bool
4031
+	 * @throws DomainException
4032
+	 * @throws EE_Error
4033
+	 * @throws InvalidArgumentException
4034
+	 * @throws ReflectionException
4035
+	 * @throws InvalidDataTypeException
4036
+	 * @throws InvalidInterfaceException
4037
+	 */
4038
+	protected function _deactivate_message_type_for_messenger($messenger_name, $message_type_name)
4039
+	{
4040
+		/** @var EE_messenger $active_messenger This will be present because it can't be toggled if it isn't */
4041
+		$active_messenger = $this->_message_resource_manager->get_messenger($messenger_name);
4042
+		/** @var EE_message_type $message_type_to_activate This will be present because it can't be toggled if it isn't */
4043
+		$message_type_to_deactivate = $this->_message_resource_manager->get_message_type($message_type_name);
4044
+		$this->_message_resource_manager->deactivate_message_type_for_messenger($message_type_name, $messenger_name);
4045
+        
4046
+		return $this->_setup_response_message_for_deactivating_messenger_with_message_types($active_messenger,
4047
+			$message_type_to_deactivate);
4048
+	}
4049 4049
     
4050 4050
     
4051
-    /**
4052
-     * This just initializes the defaults for activating messenger and message type responses.
4053
-     */
4054
-    protected function _prep_default_response_for_messenger_or_message_type_toggle()
4055
-    {
4056
-        $this->_template_args['data']['active_mts'] = array();
4057
-        $this->_template_args['data']['mt_reload']  = array();
4058
-    }
4051
+	/**
4052
+	 * This just initializes the defaults for activating messenger and message type responses.
4053
+	 */
4054
+	protected function _prep_default_response_for_messenger_or_message_type_toggle()
4055
+	{
4056
+		$this->_template_args['data']['active_mts'] = array();
4057
+		$this->_template_args['data']['mt_reload']  = array();
4058
+	}
4059 4059
 
4060 4060
 
4061
-    /**
4062
-     * Setup appropriate response for activating a messenger and/or message types
4063
-     *
4064
-     * @param EE_messenger         $messenger
4065
-     * @param EE_message_type|null $message_type
4066
-     * @return bool
4067
-     * @throws DomainException
4068
-     * @throws EE_Error
4069
-     * @throws InvalidArgumentException
4070
-     * @throws ReflectionException
4071
-     * @throws InvalidDataTypeException
4072
-     * @throws InvalidInterfaceException
4073
-     */
4074
-    protected function _setup_response_message_for_activating_messenger_with_message_types(
4075
-        $messenger,
4076
-        EE_Message_Type $message_type = null
4077
-    ) {
4078
-        //if $messenger isn't a valid messenger object then get out.
4079
-        if ( ! $messenger instanceof EE_Messenger) {
4080
-            EE_Error::add_error(
4081
-                esc_html__('The messenger being activated is not a valid messenger', 'event_espresso'),
4082
-                __FILE__,
4083
-                __FUNCTION__,
4084
-                __LINE__
4085
-            );
4061
+	/**
4062
+	 * Setup appropriate response for activating a messenger and/or message types
4063
+	 *
4064
+	 * @param EE_messenger         $messenger
4065
+	 * @param EE_message_type|null $message_type
4066
+	 * @return bool
4067
+	 * @throws DomainException
4068
+	 * @throws EE_Error
4069
+	 * @throws InvalidArgumentException
4070
+	 * @throws ReflectionException
4071
+	 * @throws InvalidDataTypeException
4072
+	 * @throws InvalidInterfaceException
4073
+	 */
4074
+	protected function _setup_response_message_for_activating_messenger_with_message_types(
4075
+		$messenger,
4076
+		EE_Message_Type $message_type = null
4077
+	) {
4078
+		//if $messenger isn't a valid messenger object then get out.
4079
+		if ( ! $messenger instanceof EE_Messenger) {
4080
+			EE_Error::add_error(
4081
+				esc_html__('The messenger being activated is not a valid messenger', 'event_espresso'),
4082
+				__FILE__,
4083
+				__FUNCTION__,
4084
+				__LINE__
4085
+			);
4086 4086
             
4087
-            return false;
4088
-        }
4089
-        //activated
4090
-        if ($this->_template_args['data']['active_mts']) {
4091
-            EE_Error::overwrite_success();
4092
-            //activated a message type with the messenger
4093
-            if ($message_type instanceof EE_message_type) {
4094
-                EE_Error::add_success(
4095
-                    sprintf(
4096
-                        esc_html__('%s message type has been successfully activated with the %s messenger', 'event_espresso'),
4097
-                        ucwords($message_type->label['singular']),
4098
-                        ucwords($messenger->label['singular'])
4099
-                    )
4100
-                );
4087
+			return false;
4088
+		}
4089
+		//activated
4090
+		if ($this->_template_args['data']['active_mts']) {
4091
+			EE_Error::overwrite_success();
4092
+			//activated a message type with the messenger
4093
+			if ($message_type instanceof EE_message_type) {
4094
+				EE_Error::add_success(
4095
+					sprintf(
4096
+						esc_html__('%s message type has been successfully activated with the %s messenger', 'event_espresso'),
4097
+						ucwords($message_type->label['singular']),
4098
+						ucwords($messenger->label['singular'])
4099
+					)
4100
+				);
4101 4101
                 
4102
-                //if message type was invoice then let's make sure we activate the invoice payment method.
4103
-                if ($message_type->name === 'invoice') {
4104
-                    EE_Registry::instance()->load_lib('Payment_Method_Manager');
4105
-                    $pm = EE_Payment_Method_Manager::instance()->activate_a_payment_method_of_type('Invoice');
4106
-                    if ($pm instanceof EE_Payment_Method) {
4107
-                        EE_Error::add_attention(
4108
-                            esc_html__(
4109
-                                'Activating the invoice message type also automatically activates the invoice payment method.  If you do not wish the invoice payment method to be active, or to change its settings, visit the payment method admin page.',
4110
-                                'event_espresso'
4111
-                            )
4112
-                        );
4113
-                    }
4114
-                }
4115
-                //just toggles the entire messenger
4116
-            } else {
4117
-                EE_Error::add_success(
4118
-                    sprintf(
4119
-                        esc_html__('%s messenger has been successfully activated', 'event_espresso'),
4120
-                        ucwords($messenger->label['singular'])
4121
-                    )
4122
-                );
4123
-            }
4102
+				//if message type was invoice then let's make sure we activate the invoice payment method.
4103
+				if ($message_type->name === 'invoice') {
4104
+					EE_Registry::instance()->load_lib('Payment_Method_Manager');
4105
+					$pm = EE_Payment_Method_Manager::instance()->activate_a_payment_method_of_type('Invoice');
4106
+					if ($pm instanceof EE_Payment_Method) {
4107
+						EE_Error::add_attention(
4108
+							esc_html__(
4109
+								'Activating the invoice message type also automatically activates the invoice payment method.  If you do not wish the invoice payment method to be active, or to change its settings, visit the payment method admin page.',
4110
+								'event_espresso'
4111
+							)
4112
+						);
4113
+					}
4114
+				}
4115
+				//just toggles the entire messenger
4116
+			} else {
4117
+				EE_Error::add_success(
4118
+					sprintf(
4119
+						esc_html__('%s messenger has been successfully activated', 'event_espresso'),
4120
+						ucwords($messenger->label['singular'])
4121
+					)
4122
+				);
4123
+			}
4124 4124
             
4125
-            return true;
4125
+			return true;
4126 4126
             
4127
-            //possible error condition. This will happen when our active_mts data is empty because it is validated for actual active
4128
-            //message types after the activation process.  However its possible some messengers don't HAVE any default_message_types
4129
-            //in which case we just give a success message for the messenger being successfully activated.
4130
-        } else {
4131
-            if ( ! $messenger->get_default_message_types()) {
4132
-                //messenger doesn't have any default message types so still a success.
4133
-                EE_Error::add_success(
4134
-                    sprintf(
4135
-                        esc_html__('%s messenger was successfully activated.', 'event_espresso'),
4136
-                        ucwords($messenger->label['singular'])
4137
-                    )
4138
-                );
4127
+			//possible error condition. This will happen when our active_mts data is empty because it is validated for actual active
4128
+			//message types after the activation process.  However its possible some messengers don't HAVE any default_message_types
4129
+			//in which case we just give a success message for the messenger being successfully activated.
4130
+		} else {
4131
+			if ( ! $messenger->get_default_message_types()) {
4132
+				//messenger doesn't have any default message types so still a success.
4133
+				EE_Error::add_success(
4134
+					sprintf(
4135
+						esc_html__('%s messenger was successfully activated.', 'event_espresso'),
4136
+						ucwords($messenger->label['singular'])
4137
+					)
4138
+				);
4139 4139
                 
4140
-                return true;
4141
-            } else {
4142
-                EE_Error::add_error(
4143
-                    $message_type instanceof EE_message_type
4144
-                        ? sprintf(
4145
-                        esc_html__('%s message type was not successfully activated with the %s messenger', 'event_espresso'),
4146
-                        ucwords($message_type->label['singular']),
4147
-                        ucwords($messenger->label['singular'])
4148
-                    )
4149
-                        : sprintf(
4150
-                        esc_html__('%s messenger was not successfully activated', 'event_espresso'),
4151
-                        ucwords($messenger->label['singular'])
4152
-                    ),
4153
-                    __FILE__,
4154
-                    __FUNCTION__,
4155
-                    __LINE__
4156
-                );
4140
+				return true;
4141
+			} else {
4142
+				EE_Error::add_error(
4143
+					$message_type instanceof EE_message_type
4144
+						? sprintf(
4145
+						esc_html__('%s message type was not successfully activated with the %s messenger', 'event_espresso'),
4146
+						ucwords($message_type->label['singular']),
4147
+						ucwords($messenger->label['singular'])
4148
+					)
4149
+						: sprintf(
4150
+						esc_html__('%s messenger was not successfully activated', 'event_espresso'),
4151
+						ucwords($messenger->label['singular'])
4152
+					),
4153
+					__FILE__,
4154
+					__FUNCTION__,
4155
+					__LINE__
4156
+				);
4157 4157
                 
4158
-                return false;
4159
-            }
4160
-        }
4161
-    }
4158
+				return false;
4159
+			}
4160
+		}
4161
+	}
4162 4162
 
4163 4163
 
4164
-    /**
4165
-     * This sets up the appropriate response for deactivating a messenger and/or message type.
4166
-     *
4167
-     * @param EE_messenger         $messenger
4168
-     * @param EE_message_type|null $message_type
4169
-     * @return bool
4170
-     * @throws DomainException
4171
-     * @throws EE_Error
4172
-     * @throws InvalidArgumentException
4173
-     * @throws ReflectionException
4174
-     * @throws InvalidDataTypeException
4175
-     * @throws InvalidInterfaceException
4176
-     */
4177
-    protected function _setup_response_message_for_deactivating_messenger_with_message_types(
4178
-        $messenger,
4179
-        EE_message_type $message_type = null
4180
-    ) {
4181
-        EE_Error::overwrite_success();
4182
-        
4183
-        //if $messenger isn't a valid messenger object then get out.
4184
-        if ( ! $messenger instanceof EE_Messenger) {
4185
-            EE_Error::add_error(
4186
-                esc_html__('The messenger being deactivated is not a valid messenger', 'event_espresso'),
4187
-                __FILE__,
4188
-                __FUNCTION__,
4189
-                __LINE__
4190
-            );
4164
+	/**
4165
+	 * This sets up the appropriate response for deactivating a messenger and/or message type.
4166
+	 *
4167
+	 * @param EE_messenger         $messenger
4168
+	 * @param EE_message_type|null $message_type
4169
+	 * @return bool
4170
+	 * @throws DomainException
4171
+	 * @throws EE_Error
4172
+	 * @throws InvalidArgumentException
4173
+	 * @throws ReflectionException
4174
+	 * @throws InvalidDataTypeException
4175
+	 * @throws InvalidInterfaceException
4176
+	 */
4177
+	protected function _setup_response_message_for_deactivating_messenger_with_message_types(
4178
+		$messenger,
4179
+		EE_message_type $message_type = null
4180
+	) {
4181
+		EE_Error::overwrite_success();
4182
+        
4183
+		//if $messenger isn't a valid messenger object then get out.
4184
+		if ( ! $messenger instanceof EE_Messenger) {
4185
+			EE_Error::add_error(
4186
+				esc_html__('The messenger being deactivated is not a valid messenger', 'event_espresso'),
4187
+				__FILE__,
4188
+				__FUNCTION__,
4189
+				__LINE__
4190
+			);
4191 4191
             
4192
-            return false;
4193
-        }
4194
-        
4195
-        if ($message_type instanceof EE_message_type) {
4196
-            $message_type_name = $message_type->name;
4197
-            EE_Error::add_success(
4198
-                sprintf(
4199
-                    esc_html__('%s message type has been successfully deactivated for the %s messenger.', 'event_espresso'),
4200
-                    ucwords($message_type->label['singular']),
4201
-                    ucwords($messenger->label['singular'])
4202
-                )
4203
-            );
4204
-        } else {
4205
-            $message_type_name = '';
4206
-            EE_Error::add_success(
4207
-                sprintf(
4208
-                    esc_html__('%s messenger has been successfully deactivated.', 'event_espresso'),
4209
-                    ucwords($messenger->label['singular'])
4210
-                )
4211
-            );
4212
-        }
4213
-        
4214
-        //if messenger was html or message type was invoice then let's make sure we deactivate invoice payment method.
4215
-        if ($messenger->name === 'html' || $message_type_name === 'invoice') {
4216
-            EE_Registry::instance()->load_lib('Payment_Method_Manager');
4217
-            $count_updated = EE_Payment_Method_Manager::instance()->deactivate_payment_method('invoice');
4218
-            if ($count_updated > 0) {
4219
-                $msg = $message_type_name === 'invoice'
4220
-                    ? esc_html__(
4221
-                        'Deactivating the invoice message type also automatically deactivates the invoice payment method. In order for invoices to be generated the invoice message type must be active. If you completed this action by mistake, simply reactivate the invoice message type and then visit the payment methods admin page to reactivate the invoice payment method.',
4222
-                        'event_espresso'
4223
-                    )
4224
-                    : esc_html__(
4225
-                        'Deactivating the html messenger also automatically deactivates the invoice payment method.  In order for invoices to be generated the html messenger must be be active.  If you completed this action by mistake, simply reactivate the html messenger, then visit the payment methods admin page to reactivate the invoice payment method.',
4226
-                        'event_espresso'
4227
-                    );
4228
-                EE_Error::add_attention($msg);
4229
-            }
4230
-        }
4231
-        
4232
-        return true;
4233
-    }
4192
+			return false;
4193
+		}
4194
+        
4195
+		if ($message_type instanceof EE_message_type) {
4196
+			$message_type_name = $message_type->name;
4197
+			EE_Error::add_success(
4198
+				sprintf(
4199
+					esc_html__('%s message type has been successfully deactivated for the %s messenger.', 'event_espresso'),
4200
+					ucwords($message_type->label['singular']),
4201
+					ucwords($messenger->label['singular'])
4202
+				)
4203
+			);
4204
+		} else {
4205
+			$message_type_name = '';
4206
+			EE_Error::add_success(
4207
+				sprintf(
4208
+					esc_html__('%s messenger has been successfully deactivated.', 'event_espresso'),
4209
+					ucwords($messenger->label['singular'])
4210
+				)
4211
+			);
4212
+		}
4213
+        
4214
+		//if messenger was html or message type was invoice then let's make sure we deactivate invoice payment method.
4215
+		if ($messenger->name === 'html' || $message_type_name === 'invoice') {
4216
+			EE_Registry::instance()->load_lib('Payment_Method_Manager');
4217
+			$count_updated = EE_Payment_Method_Manager::instance()->deactivate_payment_method('invoice');
4218
+			if ($count_updated > 0) {
4219
+				$msg = $message_type_name === 'invoice'
4220
+					? esc_html__(
4221
+						'Deactivating the invoice message type also automatically deactivates the invoice payment method. In order for invoices to be generated the invoice message type must be active. If you completed this action by mistake, simply reactivate the invoice message type and then visit the payment methods admin page to reactivate the invoice payment method.',
4222
+						'event_espresso'
4223
+					)
4224
+					: esc_html__(
4225
+						'Deactivating the html messenger also automatically deactivates the invoice payment method.  In order for invoices to be generated the html messenger must be be active.  If you completed this action by mistake, simply reactivate the html messenger, then visit the payment methods admin page to reactivate the invoice payment method.',
4226
+						'event_espresso'
4227
+					);
4228
+				EE_Error::add_attention($msg);
4229
+			}
4230
+		}
4231
+        
4232
+		return true;
4233
+	}
4234 4234
 
4235 4235
 
4236
-    /**
4237
-     * handles updating a message type form on messenger activation IF the message type has settings fields. (via ajax)
4238
-     *
4239
-     * @throws DomainException
4240
-     */
4241
-    public function update_mt_form()
4242
-    {
4243
-        if ( ! isset($this->_req_data['messenger']) || ! isset($this->_req_data['message_type'])) {
4244
-            EE_Error::add_error(
4245
-                esc_html__('Require message type or messenger to send an updated form', 'event_espresso'),
4246
-                __FILE__,
4247
-                __FUNCTION__,
4248
-                __LINE__
4249
-            );
4250
-            $this->_return_json();
4251
-        }
4252
-        
4253
-        $message_types = $this->get_installed_message_types();
4254
-        
4255
-        $message_type = $message_types[$this->_req_data['message_type']];
4256
-        $messenger    = $this->_message_resource_manager->get_active_messenger($this->_req_data['messenger']);
4257
-        
4258
-        $content                         = $this->_message_type_settings_content(
4259
-            $message_type,
4260
-            $messenger,
4261
-            true
4262
-        );
4263
-        $this->_template_args['success'] = true;
4264
-        $this->_template_args['content'] = $content;
4265
-        $this->_return_json();
4266
-    }
4236
+	/**
4237
+	 * handles updating a message type form on messenger activation IF the message type has settings fields. (via ajax)
4238
+	 *
4239
+	 * @throws DomainException
4240
+	 */
4241
+	public function update_mt_form()
4242
+	{
4243
+		if ( ! isset($this->_req_data['messenger']) || ! isset($this->_req_data['message_type'])) {
4244
+			EE_Error::add_error(
4245
+				esc_html__('Require message type or messenger to send an updated form', 'event_espresso'),
4246
+				__FILE__,
4247
+				__FUNCTION__,
4248
+				__LINE__
4249
+			);
4250
+			$this->_return_json();
4251
+		}
4252
+        
4253
+		$message_types = $this->get_installed_message_types();
4254
+        
4255
+		$message_type = $message_types[$this->_req_data['message_type']];
4256
+		$messenger    = $this->_message_resource_manager->get_active_messenger($this->_req_data['messenger']);
4257
+        
4258
+		$content                         = $this->_message_type_settings_content(
4259
+			$message_type,
4260
+			$messenger,
4261
+			true
4262
+		);
4263
+		$this->_template_args['success'] = true;
4264
+		$this->_template_args['content'] = $content;
4265
+		$this->_return_json();
4266
+	}
4267 4267
     
4268 4268
     
4269
-    /**
4270
-     * this handles saving the settings for a messenger or message type
4271
-     *
4272
-     */
4273
-    public function save_settings()
4274
-    {
4275
-        if ( ! isset($this->_req_data['type'])) {
4276
-            EE_Error::add_error(
4277
-                esc_html__(
4278
-                    'Cannot save settings because type is unknown (messenger settings or messsage type settings?)',
4279
-                    'event_espresso'
4280
-                ),
4281
-                __FILE__,
4282
-                __FUNCTION__,
4283
-                __LINE__
4284
-            );
4285
-            $this->_template_args['error'] = true;
4286
-            $this->_return_json();
4287
-        }
4288
-        
4289
-        
4290
-        if ($this->_req_data['type'] === 'messenger') {
4291
-            //this should be an array.
4292
-            $settings  = $this->_req_data['messenger_settings'];
4293
-            $messenger = $settings['messenger'];
4294
-            //let's setup the settings data
4295
-            foreach ($settings as $key => $value) {
4296
-                switch ($key) {
4297
-                    case 'messenger' :
4298
-                        unset($settings['messenger']);
4299
-                        break;
4300
-                    case 'message_types' :
4301
-                        unset($settings['message_types']);
4302
-                        break;
4303
-                    default :
4304
-                        $settings[$key] = $value;
4305
-                        break;
4306
-                }
4307
-            }
4308
-            $this->_message_resource_manager->add_settings_for_messenger($messenger, $settings);
4309
-        } elseif ($this->_req_data['type'] === 'message_type') {
4310
-            $settings     = $this->_req_data['message_type_settings'];
4311
-            $messenger    = $settings['messenger'];
4312
-            $message_type = $settings['message_type'];
4269
+	/**
4270
+	 * this handles saving the settings for a messenger or message type
4271
+	 *
4272
+	 */
4273
+	public function save_settings()
4274
+	{
4275
+		if ( ! isset($this->_req_data['type'])) {
4276
+			EE_Error::add_error(
4277
+				esc_html__(
4278
+					'Cannot save settings because type is unknown (messenger settings or messsage type settings?)',
4279
+					'event_espresso'
4280
+				),
4281
+				__FILE__,
4282
+				__FUNCTION__,
4283
+				__LINE__
4284
+			);
4285
+			$this->_template_args['error'] = true;
4286
+			$this->_return_json();
4287
+		}
4288
+        
4289
+        
4290
+		if ($this->_req_data['type'] === 'messenger') {
4291
+			//this should be an array.
4292
+			$settings  = $this->_req_data['messenger_settings'];
4293
+			$messenger = $settings['messenger'];
4294
+			//let's setup the settings data
4295
+			foreach ($settings as $key => $value) {
4296
+				switch ($key) {
4297
+					case 'messenger' :
4298
+						unset($settings['messenger']);
4299
+						break;
4300
+					case 'message_types' :
4301
+						unset($settings['message_types']);
4302
+						break;
4303
+					default :
4304
+						$settings[$key] = $value;
4305
+						break;
4306
+				}
4307
+			}
4308
+			$this->_message_resource_manager->add_settings_for_messenger($messenger, $settings);
4309
+		} elseif ($this->_req_data['type'] === 'message_type') {
4310
+			$settings     = $this->_req_data['message_type_settings'];
4311
+			$messenger    = $settings['messenger'];
4312
+			$message_type = $settings['message_type'];
4313 4313
             
4314
-            foreach ($settings as $key => $value) {
4315
-                switch ($key) {
4316
-                    case 'messenger' :
4317
-                        unset($settings['messenger']);
4318
-                        break;
4319
-                    case 'message_type' :
4320
-                        unset($settings['message_type']);
4321
-                        break;
4322
-                    default :
4323
-                        $settings[$key] = $value;
4324
-                        break;
4325
-                }
4326
-            }
4314
+			foreach ($settings as $key => $value) {
4315
+				switch ($key) {
4316
+					case 'messenger' :
4317
+						unset($settings['messenger']);
4318
+						break;
4319
+					case 'message_type' :
4320
+						unset($settings['message_type']);
4321
+						break;
4322
+					default :
4323
+						$settings[$key] = $value;
4324
+						break;
4325
+				}
4326
+			}
4327 4327
             
4328
-            $this->_message_resource_manager->add_settings_for_message_type($messenger, $message_type, $settings);
4329
-        }
4330
-        
4331
-        //okay we should have the data all setup.  Now we just update!
4332
-        $success = $this->_message_resource_manager->update_active_messengers_option();
4333
-        
4334
-        if ($success) {
4335
-            EE_Error::add_success(__('Settings updated', 'event_espresso'));
4336
-        } else {
4337
-            EE_Error::add_error(
4338
-                esc_html__(
4339
-                    'Settings did not get updated',
4340
-                    'event_espresso'
4341
-                ),
4342
-                __FILE__,
4343
-                __FUNCTION__,
4344
-                __LINE__
4345
-            );
4346
-        }
4347
-        
4348
-        $this->_template_args['success'] = $success;
4349
-        $this->_return_json();
4350
-    }
4328
+			$this->_message_resource_manager->add_settings_for_message_type($messenger, $message_type, $settings);
4329
+		}
4330
+        
4331
+		//okay we should have the data all setup.  Now we just update!
4332
+		$success = $this->_message_resource_manager->update_active_messengers_option();
4333
+        
4334
+		if ($success) {
4335
+			EE_Error::add_success(__('Settings updated', 'event_espresso'));
4336
+		} else {
4337
+			EE_Error::add_error(
4338
+				esc_html__(
4339
+					'Settings did not get updated',
4340
+					'event_espresso'
4341
+				),
4342
+				__FILE__,
4343
+				__FUNCTION__,
4344
+				__LINE__
4345
+			);
4346
+		}
4347
+        
4348
+		$this->_template_args['success'] = $success;
4349
+		$this->_return_json();
4350
+	}
4351 4351
     
4352 4352
     
4353 4353
     
4354 4354
     
4355
-    /**  EE MESSAGE PROCESSING ACTIONS **/
4355
+	/**  EE MESSAGE PROCESSING ACTIONS **/
4356 4356
 
4357 4357
 
4358
-    /**
4359
-     * This immediately generates any EE_Message ID's that are selected that are EEM_Message::status_incomplete
4360
-     * However, this does not send immediately, it just queues for sending.
4361
-     *
4362
-     * @since 4.9.0
4363
-     * @throws EE_Error
4364
-     * @throws InvalidDataTypeException
4365
-     * @throws InvalidInterfaceException
4366
-     * @throws InvalidArgumentException
4367
-     * @throws ReflectionException
4368
-     */
4369
-    protected function _generate_now()
4370
-    {
4371
-        EED_Messages::generate_now($this->_get_msg_ids_from_request());
4372
-        $this->_redirect_after_action(false, '', '', array(), true);
4373
-    }
4358
+	/**
4359
+	 * This immediately generates any EE_Message ID's that are selected that are EEM_Message::status_incomplete
4360
+	 * However, this does not send immediately, it just queues for sending.
4361
+	 *
4362
+	 * @since 4.9.0
4363
+	 * @throws EE_Error
4364
+	 * @throws InvalidDataTypeException
4365
+	 * @throws InvalidInterfaceException
4366
+	 * @throws InvalidArgumentException
4367
+	 * @throws ReflectionException
4368
+	 */
4369
+	protected function _generate_now()
4370
+	{
4371
+		EED_Messages::generate_now($this->_get_msg_ids_from_request());
4372
+		$this->_redirect_after_action(false, '', '', array(), true);
4373
+	}
4374 4374
 
4375 4375
 
4376
-    /**
4377
-     * This immediately generates AND sends any EE_Message's selected that are EEM_Message::status_incomplete or that
4378
-     * are EEM_Message::status_resend or EEM_Message::status_idle
4379
-     *
4380
-     * @since 4.9.0
4381
-     * @throws EE_Error
4382
-     * @throws InvalidDataTypeException
4383
-     * @throws InvalidInterfaceException
4384
-     * @throws InvalidArgumentException
4385
-     * @throws ReflectionException
4386
-     */
4387
-    protected function _generate_and_send_now()
4388
-    {
4389
-        EED_Messages::generate_and_send_now($this->_get_msg_ids_from_request());
4390
-        $this->_redirect_after_action(false, '', '', array(), true);
4391
-    }
4376
+	/**
4377
+	 * This immediately generates AND sends any EE_Message's selected that are EEM_Message::status_incomplete or that
4378
+	 * are EEM_Message::status_resend or EEM_Message::status_idle
4379
+	 *
4380
+	 * @since 4.9.0
4381
+	 * @throws EE_Error
4382
+	 * @throws InvalidDataTypeException
4383
+	 * @throws InvalidInterfaceException
4384
+	 * @throws InvalidArgumentException
4385
+	 * @throws ReflectionException
4386
+	 */
4387
+	protected function _generate_and_send_now()
4388
+	{
4389
+		EED_Messages::generate_and_send_now($this->_get_msg_ids_from_request());
4390
+		$this->_redirect_after_action(false, '', '', array(), true);
4391
+	}
4392 4392
 
4393 4393
 
4394
-    /**
4395
-     * This queues any EEM_Message::status_sent EE_Message ids in the request for resending.
4396
-     *
4397
-     * @since 4.9.0
4398
-     * @throws EE_Error
4399
-     * @throws InvalidDataTypeException
4400
-     * @throws InvalidInterfaceException
4401
-     * @throws InvalidArgumentException
4402
-     * @throws ReflectionException
4403
-     */
4404
-    protected function _queue_for_resending()
4405
-    {
4406
-        EED_Messages::queue_for_resending($this->_get_msg_ids_from_request());
4407
-        $this->_redirect_after_action(false, '', '', array(), true);
4408
-    }
4394
+	/**
4395
+	 * This queues any EEM_Message::status_sent EE_Message ids in the request for resending.
4396
+	 *
4397
+	 * @since 4.9.0
4398
+	 * @throws EE_Error
4399
+	 * @throws InvalidDataTypeException
4400
+	 * @throws InvalidInterfaceException
4401
+	 * @throws InvalidArgumentException
4402
+	 * @throws ReflectionException
4403
+	 */
4404
+	protected function _queue_for_resending()
4405
+	{
4406
+		EED_Messages::queue_for_resending($this->_get_msg_ids_from_request());
4407
+		$this->_redirect_after_action(false, '', '', array(), true);
4408
+	}
4409 4409
 
4410 4410
 
4411
-    /**
4412
-     *  This sends immediately any EEM_Message::status_idle or EEM_Message::status_resend messages in the queue
4413
-     *
4414
-     * @since 4.9.0
4415
-     * @throws EE_Error
4416
-     * @throws InvalidDataTypeException
4417
-     * @throws InvalidInterfaceException
4418
-     * @throws InvalidArgumentException
4419
-     * @throws ReflectionException
4420
-     */
4421
-    protected function _send_now()
4422
-    {
4423
-        EED_Messages::send_now($this->_get_msg_ids_from_request());
4424
-        $this->_redirect_after_action(false, '', '', array(), true);
4425
-    }
4411
+	/**
4412
+	 *  This sends immediately any EEM_Message::status_idle or EEM_Message::status_resend messages in the queue
4413
+	 *
4414
+	 * @since 4.9.0
4415
+	 * @throws EE_Error
4416
+	 * @throws InvalidDataTypeException
4417
+	 * @throws InvalidInterfaceException
4418
+	 * @throws InvalidArgumentException
4419
+	 * @throws ReflectionException
4420
+	 */
4421
+	protected function _send_now()
4422
+	{
4423
+		EED_Messages::send_now($this->_get_msg_ids_from_request());
4424
+		$this->_redirect_after_action(false, '', '', array(), true);
4425
+	}
4426 4426
 
4427 4427
 
4428
-    /**
4429
-     * Deletes EE_messages for IDs in the request.
4430
-     *
4431
-     * @since 4.9.0
4432
-     * @throws EE_Error
4433
-     * @throws InvalidDataTypeException
4434
-     * @throws InvalidInterfaceException
4435
-     * @throws InvalidArgumentException
4436
-     */
4437
-    protected function _delete_ee_messages()
4438
-    {
4439
-        $msg_ids       = $this->_get_msg_ids_from_request();
4440
-        $deleted_count = 0;
4441
-        foreach ($msg_ids as $msg_id) {
4442
-            if (EEM_Message::instance()->delete_by_ID($msg_id)) {
4443
-                $deleted_count++;
4444
-            }
4445
-        }
4446
-        if ($deleted_count) {
4447
-            EE_Error::add_success(esc_html(_n('Message successfully deleted', 'Messages successfully deleted', $deleted_count, 'event_espresso')));
4448
-            $this->_redirect_after_action(
4449
-                false,
4450
-                '',
4451
-                '',
4452
-                array(),
4453
-                true
4454
-            );
4455
-        } else {
4456
-            EE_Error::add_error(
4457
-                _n('The message was not deleted.', 'The messages were not deleted', count($msg_ids), 'event_espresso'),
4458
-                __FILE__, __FUNCTION__, __LINE__
4459
-            );
4460
-            $this->_redirect_after_action(false, '', '', array(), true);
4461
-        }
4462
-    }
4428
+	/**
4429
+	 * Deletes EE_messages for IDs in the request.
4430
+	 *
4431
+	 * @since 4.9.0
4432
+	 * @throws EE_Error
4433
+	 * @throws InvalidDataTypeException
4434
+	 * @throws InvalidInterfaceException
4435
+	 * @throws InvalidArgumentException
4436
+	 */
4437
+	protected function _delete_ee_messages()
4438
+	{
4439
+		$msg_ids       = $this->_get_msg_ids_from_request();
4440
+		$deleted_count = 0;
4441
+		foreach ($msg_ids as $msg_id) {
4442
+			if (EEM_Message::instance()->delete_by_ID($msg_id)) {
4443
+				$deleted_count++;
4444
+			}
4445
+		}
4446
+		if ($deleted_count) {
4447
+			EE_Error::add_success(esc_html(_n('Message successfully deleted', 'Messages successfully deleted', $deleted_count, 'event_espresso')));
4448
+			$this->_redirect_after_action(
4449
+				false,
4450
+				'',
4451
+				'',
4452
+				array(),
4453
+				true
4454
+			);
4455
+		} else {
4456
+			EE_Error::add_error(
4457
+				_n('The message was not deleted.', 'The messages were not deleted', count($msg_ids), 'event_espresso'),
4458
+				__FILE__, __FUNCTION__, __LINE__
4459
+			);
4460
+			$this->_redirect_after_action(false, '', '', array(), true);
4461
+		}
4462
+	}
4463 4463
     
4464 4464
     
4465
-    /**
4466
-     *  This looks for 'MSG_ID' key in the request and returns an array of MSG_ID's if present.
4467
-     * @since 4.9.0
4468
-     * @return array
4469
-     */
4470
-    protected function _get_msg_ids_from_request()
4471
-    {
4472
-        if ( ! isset($this->_req_data['MSG_ID'])) {
4473
-            return array();
4474
-        }
4475
-        
4476
-        return is_array($this->_req_data['MSG_ID'])
4477
-            ? array_keys($this->_req_data['MSG_ID'])
4478
-            : array($this->_req_data['MSG_ID']);
4479
-    }
4465
+	/**
4466
+	 *  This looks for 'MSG_ID' key in the request and returns an array of MSG_ID's if present.
4467
+	 * @since 4.9.0
4468
+	 * @return array
4469
+	 */
4470
+	protected function _get_msg_ids_from_request()
4471
+	{
4472
+		if ( ! isset($this->_req_data['MSG_ID'])) {
4473
+			return array();
4474
+		}
4475
+        
4476
+		return is_array($this->_req_data['MSG_ID'])
4477
+			? array_keys($this->_req_data['MSG_ID'])
4478
+			: array($this->_req_data['MSG_ID']);
4479
+	}
4480 4480
 }
Please login to merge, or discard this patch.
admin_pages/payments/Payments_Admin_Page.core.php 1 patch
Indentation   +999 added lines, -999 removed lines patch added patch discarded remove patch
@@ -1,6 +1,6 @@  discard block
 block discarded – undo
1 1
 <?php
2 2
 if (! defined('EVENT_ESPRESSO_VERSION')) {
3
-    exit('NO direct script access allowed');
3
+	exit('NO direct script access allowed');
4 4
 }
5 5
 
6 6
 
@@ -27,838 +27,838 @@  discard block
 block discarded – undo
27 27
 class Payments_Admin_Page extends EE_Admin_Page
28 28
 {
29 29
 
30
-    /**
31
-     * Variables used for when we're re-sorting the logs results, in case
32
-     * we needed to do two queries and we need to resort
33
-     *
34
-     * @var string
35
-     */
36
-    private $_sort_logs_again_direction;
37
-
38
-
39
-
40
-    /**
41
-     * @Constructor
42
-     * @access public
43
-     * @param bool $routing indicate whether we want to just load the object and handle routing or just load the object.
44
-     * @return \Payments_Admin_Page
45
-     */
46
-    public function __construct($routing = true)
47
-    {
48
-        parent::__construct($routing);
49
-    }
50
-
51
-
52
-
53
-    protected function _init_page_props()
54
-    {
55
-        $this->page_slug = EE_PAYMENTS_PG_SLUG;
56
-        $this->page_label = __('Payment Methods', 'event_espresso');
57
-        $this->_admin_base_url = EE_PAYMENTS_ADMIN_URL;
58
-        $this->_admin_base_path = EE_PAYMENTS_ADMIN;
59
-    }
60
-
61
-
62
-
63
-    protected function _ajax_hooks()
64
-    {
65
-        //todo: all hooks for ajax goes here.
66
-    }
67
-
68
-
69
-
70
-    protected function _define_page_props()
71
-    {
72
-        $this->_admin_page_title = $this->page_label;
73
-        $this->_labels = array(
74
-            'publishbox' => __('Update Settings', 'event_espresso'),
75
-        );
76
-    }
77
-
78
-
79
-
80
-    protected function _set_page_routes()
81
-    {
82
-        /**
83
-         * note that with payment method capabilities, although we've implemented
84
-         * capability mapping which will be used for accessing payment methods owned by
85
-         * other users.  This is not fully implemented yet in the payment method ui.
86
-         * Currently only the "plural" caps are in active use.
87
-         * When cap mapping is implemented, some routes will need to use the singular form of
88
-         * capability method and also include the $id of the payment method for the route.
89
-         **/
90
-        $this->_page_routes = array(
91
-            'default'                   => array(
92
-                'func'       => '_payment_methods_list',
93
-                'capability' => 'ee_edit_payment_methods',
94
-            ),
95
-            'payment_settings'          => array(
96
-                'func'       => '_payment_settings',
97
-                'capability' => 'ee_manage_gateways',
98
-            ),
99
-            'activate_payment_method'   => array(
100
-                'func'       => '_activate_payment_method',
101
-                'noheader'   => true,
102
-                'capability' => 'ee_edit_payment_methods',
103
-            ),
104
-            'deactivate_payment_method' => array(
105
-                'func'       => '_deactivate_payment_method',
106
-                'noheader'   => true,
107
-                'capability' => 'ee_delete_payment_methods',
108
-            ),
109
-            'update_payment_method'     => array(
110
-                'func'               => '_update_payment_method',
111
-                'noheader'           => true,
112
-                'headers_sent_route' => 'default',
113
-                'capability'         => 'ee_edit_payment_methods',
114
-            ),
115
-            'update_payment_settings'   => array(
116
-                'func'       => '_update_payment_settings',
117
-                'noheader'   => true,
118
-                'capability' => 'ee_manage_gateways',
119
-            ),
120
-            'payment_log'               => array(
121
-                'func'       => '_payment_log_overview_list_table',
122
-                'capability' => 'ee_read_payment_methods',
123
-            ),
124
-            'payment_log_details'       => array(
125
-                'func'       => '_payment_log_details',
126
-                'capability' => 'ee_read_payment_methods',
127
-            ),
128
-        );
129
-    }
130
-
131
-
132
-
133
-    protected function _set_page_config()
134
-    {
135
-        $payment_method_list_config = array(
136
-            'nav'           => array(
137
-                'label' => __('Payment Methods', 'event_espresso'),
138
-                'order' => 10,
139
-            ),
140
-            'metaboxes'     => $this->_default_espresso_metaboxes,
141
-            'help_tabs'     => array_merge(
142
-                array(
143
-                    'payment_methods_overview_help_tab' => array(
144
-                        'title'    => __('Payment Methods Overview', 'event_espresso'),
145
-                        'filename' => 'payment_methods_overview',
146
-                    ),
147
-                ),
148
-                $this->_add_payment_method_help_tabs()),
149
-            'help_tour'     => array('Payment_Methods_Selection_Help_Tour'),
150
-            'require_nonce' => false,
151
-        );
152
-        $this->_page_config = array(
153
-            'default'          => $payment_method_list_config,
154
-            'payment_settings' => array(
155
-                'nav'           => array(
156
-                    'label' => __('Settings', 'event_espresso'),
157
-                    'order' => 20,
158
-                ),
159
-                'help_tabs'     => array(
160
-                    'payment_methods_settings_help_tab' => array(
161
-                        'title'    => __('Payment Method Settings', 'event_espresso'),
162
-                        'filename' => 'payment_methods_settings',
163
-                    ),
164
-                ),
165
-                //'help_tour' => array( 'Payment_Methods_Settings_Help_Tour' ),
166
-                'metaboxes'     => array_merge($this->_default_espresso_metaboxes, array('_publish_post_box')),
167
-                'require_nonce' => false,
168
-            ),
169
-            'payment_log'      => array(
170
-                'nav'           => array(
171
-                    'label' => __("Logs", 'event_espresso'),
172
-                    'order' => 30,
173
-                ),
174
-                'list_table'    => 'Payment_Log_Admin_List_Table',
175
-                'metaboxes'     => $this->_default_espresso_metaboxes,
176
-                'require_nonce' => false,
177
-            ),
178
-        );
179
-    }
180
-
181
-
182
-
183
-    /**
184
-     * @return array
185
-     */
186
-    protected function _add_payment_method_help_tabs()
187
-    {
188
-        EE_Registry::instance()->load_lib('Payment_Method_Manager');
189
-        $payment_method_types = EE_Payment_Method_Manager::instance()->payment_method_types();
190
-        $all_pmt_help_tabs_config = array();
191
-        foreach ($payment_method_types as $payment_method_type) {
192
-            if (! EE_Registry::instance()->CAP->current_user_can($payment_method_type->cap_name(),
193
-                'specific_payment_method_type_access')
194
-            ) {
195
-                continue;
196
-            }
197
-            foreach ($payment_method_type->help_tabs_config() as $help_tab_name => $config) {
198
-                $template_args = isset($config['template_args']) ? $config['template_args'] : array();
199
-                $template_args['admin_page_obj'] = $this;
200
-                $all_pmt_help_tabs_config[$help_tab_name] = array(
201
-                    'title'   => $config['title'],
202
-                    'content' => EEH_Template::display_template(
203
-                        $payment_method_type->file_folder() . 'help_tabs' . DS . $config['filename'] . '.help_tab.php',
204
-                        $template_args,
205
-                        true),
206
-                );
207
-            }
208
-        }
209
-        return $all_pmt_help_tabs_config;
210
-    }
211
-
212
-
213
-
214
-    //none of the below group are currently used for Gateway Settings
215
-    protected function _add_screen_options()
216
-    {
217
-    }
218
-
219
-
220
-
221
-    protected function _add_feature_pointers()
222
-    {
223
-    }
224
-
225
-
226
-
227
-    public function admin_init()
228
-    {
229
-    }
230
-
231
-
232
-
233
-    public function admin_notices()
234
-    {
235
-    }
236
-
237
-
238
-
239
-    public function admin_footer_scripts()
240
-    {
241
-    }
242
-
243
-
244
-
245
-    public function load_scripts_styles()
246
-    {
247
-        wp_enqueue_script('ee_admin_js');
248
-        wp_enqueue_script('ee-text-links');
249
-        wp_enqueue_script('espresso_payments', EE_PAYMENTS_ASSETS_URL . 'espresso_payments_admin.js',
250
-            array('espresso-ui-theme', 'ee-datepicker'), EVENT_ESPRESSO_VERSION, true);
251
-    }
252
-
253
-
254
-
255
-    public function load_scripts_styles_default()
256
-    {
257
-        //styles
258
-        wp_register_style('espresso_payments', EE_PAYMENTS_ASSETS_URL . 'ee-payments.css', array(),
259
-            EVENT_ESPRESSO_VERSION);
260
-        wp_enqueue_style('espresso_payments');
261
-        wp_enqueue_style('ee-text-links');
262
-        //scripts
263
-    }
264
-
265
-
266
-
267
-    protected function _payment_methods_list()
268
-    {
269
-        /**
270
-         * first let's ensure payment methods have been setup. We do this here because when people activate a
271
-         * payment method for the first time (as an addon), it may not setup its capabilities or get registered correctly due
272
-         * to the loading process.  However, people MUST setup the details for the payment method so its safe to do a
273
-         * recheck here.
274
-         */
275
-        EE_Registry::instance()->load_lib('Payment_Method_Manager');
276
-        EEM_Payment_Method::instance()->verify_button_urls();
277
-        //setup tabs, one for each payment method type
278
-        $tabs = array();
279
-        $payment_methods = array();
280
-        foreach (EE_Payment_Method_Manager::instance()->payment_method_types() as $pmt_obj) {
281
-            // we don't want to show admin-only PMTs for now
282
-            if ($pmt_obj instanceof EE_PMT_Admin_Only) {
283
-                continue;
284
-            }
285
-            //check access
286
-            if (! EE_Registry::instance()->CAP->current_user_can($pmt_obj->cap_name(),
287
-                'specific_payment_method_type_access')
288
-            ) {
289
-                continue;
290
-            }
291
-            //check for any active pms of that type
292
-            $payment_method = EEM_Payment_Method::instance()->get_one_of_type($pmt_obj->system_name());
293
-            if (! $payment_method instanceof EE_Payment_Method) {
294
-                $payment_method = EE_Payment_Method::new_instance(
295
-                    array(
296
-                        'PMD_slug'       => sanitize_key($pmt_obj->system_name()),
297
-                        'PMD_type'       => $pmt_obj->system_name(),
298
-                        'PMD_name'       => $pmt_obj->pretty_name(),
299
-                        'PMD_admin_name' => $pmt_obj->pretty_name(),
300
-                    )
301
-                );
302
-            }
303
-            $payment_methods[$payment_method->slug()] = $payment_method;
304
-        }
305
-        $payment_methods = apply_filters('FHEE__Payments_Admin_Page___payment_methods_list__payment_methods',
306
-            $payment_methods);
307
-        foreach ($payment_methods as $payment_method) {
308
-            if ($payment_method instanceof EE_Payment_Method) {
309
-                add_meta_box(
310
-                //html id
311
-                    'espresso_' . $payment_method->slug() . '_payment_settings',
312
-                    //title
313
-                    sprintf(__('%s Settings', 'event_espresso'), $payment_method->admin_name()),
314
-                    //callback
315
-                    array($this, 'payment_method_settings_meta_box'),
316
-                    //post type
317
-                    null,
318
-                    //context
319
-                    'normal',
320
-                    //priority
321
-                    'default',
322
-                    //callback args
323
-                    array('payment_method' => $payment_method)
324
-                );
325
-                //setup for tabbed content
326
-                $tabs[$payment_method->slug()] = array(
327
-                    'label' => $payment_method->admin_name(),
328
-                    'class' => $payment_method->active() ? 'gateway-active' : '',
329
-                    'href'  => 'espresso_' . $payment_method->slug() . '_payment_settings',
330
-                    'title' => __('Modify this Payment Method', 'event_espresso'),
331
-                    'slug'  => $payment_method->slug(),
332
-                );
333
-            }
334
-        }
335
-        $this->_template_args['admin_page_header'] = EEH_Tabbed_Content::tab_text_links($tabs, 'payment_method_links',
336
-            '|', $this->_get_active_payment_method_slug());
337
-        $this->display_admin_page_with_sidebar();
338
-    }
339
-
340
-
341
-
342
-    /**
343
-     *   _get_active_payment_method_slug
344
-     *
345
-     * @return string
346
-     */
347
-    protected function _get_active_payment_method_slug()
348
-    {
349
-        $payment_method_slug = false;
350
-        //decide which payment method tab to open first, as dictated by the request's 'payment_method'
351
-        if (isset($this->_req_data['payment_method'])) {
352
-            // if they provided the current payment method, use it
353
-            $payment_method_slug = sanitize_key($this->_req_data['payment_method']);
354
-        }
355
-        $payment_method = EEM_Payment_Method::instance()->get_one(array(array('PMD_slug' => $payment_method_slug)));
356
-        // if that didn't work or wasn't provided, find another way to select the current pm
357
-        if (! $this->_verify_payment_method($payment_method)) {
358
-            // like, looking for an active one
359
-            $payment_method = EEM_Payment_Method::instance()->get_one_active('CART');
360
-            // test that one as well
361
-            if ($this->_verify_payment_method($payment_method)) {
362
-                $payment_method_slug = $payment_method->slug();
363
-            } else {
364
-                $payment_method_slug = 'paypal_standard';
365
-            }
366
-        }
367
-        return $payment_method_slug;
368
-    }
369
-
370
-
371
-
372
-    /**
373
-     *    payment_method_settings_meta_box
374
-     *    returns TRUE if the passed payment method is properly constructed and the logged in user has the correct
375
-     *    capabilities to access it
376
-     *
377
-     * @param \EE_Payment_Method $payment_method
378
-     * @return boolean
379
-     */
380
-    protected function _verify_payment_method($payment_method)
381
-    {
382
-        if (
383
-            $payment_method instanceof EE_Payment_Method && $payment_method->type_obj() instanceof EE_PMT_Base
384
-            && EE_Registry::instance()->CAP->current_user_can($payment_method->type_obj()->cap_name(),
385
-                'specific_payment_method_type_access')
386
-        ) {
387
-            return true;
388
-        }
389
-        return false;
390
-    }
391
-
392
-
393
-
394
-    /**
395
-     *    payment_method_settings_meta_box
396
-     *
397
-     * @param NULL  $post_obj_which_is_null is an object containing the current post (as a $post object)
398
-     * @param array $metabox                is an array with metabox id, title, callback, and args elements. the value
399
-     *                                      at 'args' has key 'payment_method', as set within _payment_methods_list
400
-     * @return string
401
-     * @throws EE_Error
402
-     */
403
-    public function payment_method_settings_meta_box($post_obj_which_is_null, $metabox)
404
-    {
405
-        $payment_method = isset($metabox['args'], $metabox['args']['payment_method'])
406
-            ? $metabox['args']['payment_method'] : null;
407
-        if (! $payment_method instanceof EE_Payment_Method) {
408
-            throw new EE_Error(sprintf(__('Payment method metabox setup incorrectly. No Payment method object was supplied',
409
-                'event_espresso')));
410
-        }
411
-        $payment_method_scopes = $payment_method->active();
412
-        // if the payment method really exists show its form, otherwise the activation template
413
-        if ($payment_method->ID() && ! empty($payment_method_scopes)) {
414
-            $form = $this->_generate_payment_method_settings_form($payment_method);
415
-            if ($form->form_data_present_in($this->_req_data)) {
416
-                $form->receive_form_submission($this->_req_data);
417
-            }
418
-            echo $form->form_open() . $form->get_html_and_js() . $form->form_close();
419
-        } else {
420
-            echo $this->_activate_payment_method_button($payment_method)->get_html_and_js();
421
-        }
422
-    }
423
-
424
-
425
-
426
-    /**
427
-     * Gets the form for all the settings related to this payment method type
428
-     *
429
-     * @access protected
430
-     * @param \EE_Payment_Method $payment_method
431
-     * @return \EE_Form_Section_Proper
432
-     */
433
-    protected function _generate_payment_method_settings_form(EE_Payment_Method $payment_method)
434
-    {
435
-        if (! $payment_method instanceof EE_Payment_Method) {
436
-            return new EE_Form_Section_Proper();
437
-        }
438
-        return new EE_Form_Section_Proper(
439
-            array(
440
-                'name'            => $payment_method->slug() . '_settings_form',
441
-                'html_id'         => $payment_method->slug() . '_settings_form',
442
-                'action'          => EE_Admin_Page::add_query_args_and_nonce(
443
-                    array(
444
-                        'action'         => 'update_payment_method',
445
-                        'payment_method' => $payment_method->slug(),
446
-                    ),
447
-                    EE_PAYMENTS_ADMIN_URL
448
-                ),
449
-                'layout_strategy' => new EE_Admin_Two_Column_Layout(),
450
-                'subsections'     => apply_filters(
451
-                    'FHEE__Payments_Admin_Page___generate_payment_method_settings_form__form_subsections',
452
-                    array(
453
-                        'pci_dss_compliance'      => $this->_pci_dss_compliance($payment_method),
454
-                        'currency_support'        => $this->_currency_support($payment_method),
455
-                        'payment_method_settings' => $this->_payment_method_settings($payment_method),
456
-                        'update'                  => $this->_update_payment_method_button($payment_method),
457
-                        'deactivate'              => $this->_deactivate_payment_method_button($payment_method),
458
-                        'fine_print'              => $this->_fine_print(),
459
-                    ),
460
-                    $payment_method
461
-                ),
462
-            )
463
-        );
464
-    }
465
-
466
-
467
-
468
-    /**
469
-     * _pci_dss_compliance
470
-     *
471
-     * @access protected
472
-     * @param \EE_Payment_Method $payment_method
473
-     * @return \EE_Form_Section_Proper
474
-     */
475
-    protected function _pci_dss_compliance(EE_Payment_Method $payment_method)
476
-    {
477
-        if ($payment_method->type_obj()->requires_https()) {
478
-            return new EE_Form_Section_HTML(
479
-                EEH_HTML::tr(
480
-                    EEH_HTML::th(
481
-                        EEH_HTML::label(
482
-                            EEH_HTML::strong(__('IMPORTANT', 'event_espresso'), '', 'important-notice')
483
-                        )
484
-                    ) .
485
-                    EEH_HTML::td(
486
-                        EEH_HTML::strong(__('You are responsible for your own website security and Payment Card Industry Data Security Standards (PCI DSS) compliance.',
487
-                            'event_espresso'))
488
-                        .
489
-                        EEH_HTML::br()
490
-                        .
491
-                        __('Learn more about ', 'event_espresso')
492
-                        . EEH_HTML::link('https://www.pcisecuritystandards.org/merchants/index.php',
493
-                            __('PCI DSS compliance', 'event_espresso'))
494
-                    )
495
-                )
496
-            );
497
-        } else {
498
-            return new EE_Form_Section_HTML('');
499
-        }
500
-    }
501
-
502
-
503
-
504
-    /**
505
-     * _currency_support
506
-     *
507
-     * @access protected
508
-     * @param \EE_Payment_Method $payment_method
509
-     * @return \EE_Form_Section_Proper
510
-     */
511
-    protected function _currency_support(EE_Payment_Method $payment_method)
512
-    {
513
-        if (! $payment_method->usable_for_currency(EE_Config::instance()->currency->code)) {
514
-            return new EE_Form_Section_HTML(
515
-                EEH_HTML::tr(
516
-                    EEH_HTML::th(
517
-                        EEH_HTML::label(
518
-                            EEH_HTML::strong(__('IMPORTANT', 'event_espresso'), '', 'important-notice')
519
-                        )
520
-                    ) .
521
-                    EEH_HTML::td(
522
-                        EEH_HTML::strong(
523
-                            sprintf(
524
-                                __('This payment method does not support the currency set on your site (%1$s). Please activate a different payment method or change your site\'s country and associated currency.',
525
-                                    'event_espresso'),
526
-                                EE_Config::instance()->currency->code
527
-                            )
528
-                        )
529
-                    )
530
-                )
531
-            );
532
-        } else {
533
-            return new EE_Form_Section_HTML('');
534
-        }
535
-    }
536
-
537
-
538
-
539
-    /**
540
-     * _update_payment_method_button
541
-     *
542
-     * @access protected
543
-     * @param \EE_Payment_Method $payment_method
544
-     * @return \EE_Form_Section_HTML
545
-     */
546
-    protected function _payment_method_settings(EE_Payment_Method $payment_method)
547
-    {
548
-        //modify the form so we only have/show fields that will be implemented for this version
549
-        return $this->_simplify_form($payment_method->type_obj()->settings_form(), $payment_method->name());
550
-    }
551
-
552
-
553
-
554
-    /**
555
-     * Simplifies the form to merely reproduce 4.1's gateway settings functionality
556
-     *
557
-     * @param EE_Form_Section_Proper $form_section
558
-     * @param string                 $payment_method_name
559
-     * @return \EE_Payment_Method_Form
560
-     * @throws \EE_Error
561
-     */
562
-    protected function _simplify_form($form_section, $payment_method_name = '')
563
-    {
564
-        if ($form_section instanceof EE_Payment_Method_Form) {
565
-            $form_section->exclude(
566
-                array(
567
-                    'PMD_type', //dont want them changing the type
568
-                    'PMD_slug', //or the slug (probably never)
569
-                    'PMD_wp_user', //or the user's ID
570
-                    'Currency' //or the currency, until the rest of EE supports simultaneous currencies
571
-                )
572
-            );
573
-            return $form_section;
574
-        } else {
575
-            throw new EE_Error(sprintf(__('The EE_Payment_Method_Form for the "%1$s" payment method is missing or invalid.',
576
-                'event_espresso'), $payment_method_name));
577
-        }
578
-    }
579
-
580
-
581
-
582
-    /**
583
-     * _update_payment_method_button
584
-     *
585
-     * @access protected
586
-     * @param \EE_Payment_Method $payment_method
587
-     * @return \EE_Form_Section_HTML
588
-     */
589
-    protected function _update_payment_method_button(EE_Payment_Method $payment_method)
590
-    {
591
-        $update_button = new EE_Submit_Input(
592
-            array(
593
-                'name'       => 'submit',
594
-                'html_id'    => 'save_' . $payment_method->slug() . '_settings',
595
-                'default'    => sprintf(__('Update %s Payment Settings', 'event_espresso'),
596
-                    $payment_method->admin_name()),
597
-                'html_label' => EEH_HTML::nbsp(),
598
-            )
599
-        );
600
-        return new EE_Form_Section_HTML(
601
-            EEH_HTML::no_row(EEH_HTML::br(2)) .
602
-            EEH_HTML::tr(
603
-                EEH_HTML::th(__('Update Settings', 'event_espresso')) .
604
-                EEH_HTML::td(
605
-                    $update_button->get_html_for_input()
606
-                )
607
-            )
608
-        );
609
-    }
610
-
611
-
612
-
613
-    /**
614
-     * _deactivate_payment_method_button
615
-     *
616
-     * @access protected
617
-     * @param \EE_Payment_Method $payment_method
618
-     * @return \EE_Form_Section_Proper
619
-     */
620
-    protected function _deactivate_payment_method_button(EE_Payment_Method $payment_method)
621
-    {
622
-        $link_text_and_title = sprintf(__('Deactivate %1$s Payments?', 'event_espresso'),
623
-            $payment_method->admin_name());
624
-        return new EE_Form_Section_HTML(
625
-            EEH_HTML::tr(
626
-                EEH_HTML::th(__('Deactivate Payment Method', 'event_espresso')) .
627
-                EEH_HTML::td(
628
-                    EEH_HTML::link(
629
-                        EE_Admin_Page::add_query_args_and_nonce(
630
-                            array(
631
-                                'action'         => 'deactivate_payment_method',
632
-                                'payment_method' => $payment_method->slug(),
633
-                            ),
634
-                            EE_PAYMENTS_ADMIN_URL
635
-                        ),
636
-                        $link_text_and_title,
637
-                        $link_text_and_title,
638
-                        'deactivate_' . $payment_method->slug(),
639
-                        'espresso-button button-secondary'
640
-                    )
641
-                )
642
-            )
643
-        );
644
-    }
645
-
646
-
647
-
648
-    /**
649
-     * _activate_payment_method_button
650
-     *
651
-     * @access protected
652
-     * @param \EE_Payment_Method $payment_method
653
-     * @return \EE_Form_Section_Proper
654
-     */
655
-    protected function _activate_payment_method_button(EE_Payment_Method $payment_method)
656
-    {
657
-        $link_text_and_title = sprintf(__('Activate %1$s Payment Method?', 'event_espresso'),
658
-            $payment_method->admin_name());
659
-        return new EE_Form_Section_Proper(
660
-            array(
661
-                'name'            => 'activate_' . $payment_method->slug() . '_settings_form',
662
-                'html_id'         => 'activate_' . $payment_method->slug() . '_settings_form',
663
-                'action'          => '#',
664
-                'layout_strategy' => new EE_Admin_Two_Column_Layout(),
665
-                'subsections'     => apply_filters(
666
-                    'FHEE__Payments_Admin_Page___activate_payment_method_button__form_subsections',
667
-                    array(
668
-                        new EE_Form_Section_HTML(
669
-                            EEH_HTML::tr(
670
-                                EEH_HTML::td($payment_method->type_obj()->introductory_html(),
671
-                                    '',
672
-                                    '',
673
-                                    '',
674
-                                    'colspan="2"'
675
-                                )
676
-                            ) .
677
-                            EEH_HTML::tr(
678
-                                EEH_HTML::th(
679
-                                    EEH_HTML::label(__('Click to Activate ', 'event_espresso'))
680
-                                ) .
681
-                                EEH_HTML::td(
682
-                                    EEH_HTML::link(
683
-                                        EE_Admin_Page::add_query_args_and_nonce(
684
-                                            array(
685
-                                                'action'              => 'activate_payment_method',
686
-                                                'payment_method_type' => $payment_method->type(),
687
-                                            ),
688
-                                            EE_PAYMENTS_ADMIN_URL
689
-                                        ),
690
-                                        $link_text_and_title,
691
-                                        $link_text_and_title,
692
-                                        'activate_' . $payment_method->slug(),
693
-                                        'espresso-button-green button-primary'
694
-                                    )
695
-                                )
696
-                            )
697
-                        ),
698
-                    ),
699
-                    $payment_method
700
-                ),
701
-            )
702
-        );
703
-    }
704
-
705
-
706
-
707
-    /**
708
-     * _fine_print
709
-     *
710
-     * @access protected
711
-     * @return \EE_Form_Section_HTML
712
-     */
713
-    protected function _fine_print()
714
-    {
715
-        return new EE_Form_Section_HTML(
716
-            EEH_HTML::tr(
717
-                EEH_HTML::th() .
718
-                EEH_HTML::td(
719
-                    EEH_HTML::p(__('All fields marked with a * are required fields', 'event_espresso'), '', 'grey-text')
720
-                )
721
-            )
722
-        );
723
-    }
724
-
725
-
726
-
727
-    /**
728
-     * Activates a payment method of that type. Mostly assuming there is only 1 of that type (or none so far)
729
-     *
730
-     * @global WP_User $current_user
731
-     */
732
-    protected function _activate_payment_method()
733
-    {
734
-        if (isset($this->_req_data['payment_method_type'])) {
735
-            $payment_method_type = sanitize_text_field($this->_req_data['payment_method_type']);
736
-            //see if one exists
737
-            EE_Registry::instance()->load_lib('Payment_Method_Manager');
738
-            $payment_method = EE_Payment_Method_Manager::instance()
739
-                                                       ->activate_a_payment_method_of_type($payment_method_type);
740
-            $this->_redirect_after_action(1, 'Payment Method', 'activated',
741
-                array('action' => 'default', 'payment_method' => $payment_method->slug()));
742
-        } else {
743
-            $this->_redirect_after_action(false, 'Payment Method', 'activated', array('action' => 'default'));
744
-        }
745
-    }
746
-
747
-
748
-
749
-    /**
750
-     * Deactivates the payment method with the specified slug, and redirects.
751
-     */
752
-    protected function _deactivate_payment_method()
753
-    {
754
-        if (isset($this->_req_data['payment_method'])) {
755
-            $payment_method_slug = sanitize_key($this->_req_data['payment_method']);
756
-            //deactivate it
757
-            EE_Registry::instance()->load_lib('Payment_Method_Manager');
758
-            $count_updated = EE_Payment_Method_Manager::instance()->deactivate_payment_method($payment_method_slug);
759
-            $this->_redirect_after_action($count_updated, 'Payment Method', 'deactivated',
760
-                array('action' => 'default', 'payment_method' => $payment_method_slug));
761
-        } else {
762
-            $this->_redirect_after_action(false, 'Payment Method', 'deactivated', array('action' => 'default'));
763
-        }
764
-    }
765
-
766
-
767
-
768
-    /**
769
-     * Processes the payment method form that was submitted. This is slightly trickier than usual form
770
-     * processing because we first need to identify WHICH form was processed and which payment method
771
-     * it corresponds to. Once we have done that, we see if the form is valid. If it is, the
772
-     * form's data is saved and we redirect to the default payment methods page, setting the updated payment method
773
-     * as the currently-selected one. If it DOESN'T validate, we render the page with the form's errors (in the
774
-     * subsequently called 'headers_sent_func' which is _payment_methods_list)
775
-     *
776
-     * @return void
777
-     */
778
-    protected function _update_payment_method()
779
-    {
780
-        if ($_SERVER['REQUEST_METHOD'] == 'POST') {
781
-            //ok let's find which gateway form to use based on the form input
782
-            EE_Registry::instance()->load_lib('Payment_Method_Manager');
783
-            /** @var $correct_pmt_form_to_use EE_Payment_Method_Form */
784
-            $correct_pmt_form_to_use = null;
785
-            $payment_method = null;
786
-            foreach (EEM_Payment_Method::instance()->get_all() as $payment_method) {
787
-                //get the form and simplify it, like what we do when we display it
788
-                $pmt_form = $this->_generate_payment_method_settings_form($payment_method);
789
-                if ($pmt_form->form_data_present_in($this->_req_data)) {
790
-                    $correct_pmt_form_to_use = $pmt_form;
791
-                    break;
792
-                }
793
-            }
794
-            //if we couldn't find the correct payment method type...
795
-            if (! $correct_pmt_form_to_use) {
796
-                EE_Error::add_error(__("We could not find which payment method type your form submission related to. Please contact support",
797
-                    'event_espresso'), __FILE__, __FUNCTION__, __LINE__);
798
-                $this->_redirect_after_action(false, 'Payment Method', 'activated', array('action' => 'default'));
799
-            }
800
-            $correct_pmt_form_to_use->receive_form_submission($this->_req_data);
801
-            if ($correct_pmt_form_to_use->is_valid()) {
802
-                $payment_settings_subform = $correct_pmt_form_to_use->get_subsection('payment_method_settings');
803
-                if (! $payment_settings_subform instanceof EE_Payment_Method_Form) {
804
-                    throw new EE_Error(
805
-                        sprintf(
806
-                            __('The payment method could not be saved because the form sections were misnamed. We expected to find %1$s, but did not.',
807
-                                'event_espresso'),
808
-                            'payment_method_settings'
809
-                        )
810
-                    );
811
-                }
812
-                $payment_settings_subform->save();
813
-                /** @var $pm EE_Payment_Method */
814
-                $this->_redirect_after_action(true, 'Payment Method', 'updated',
815
-                    array('action' => 'default', 'payment_method' => $payment_method->slug()));
816
-            } else {
817
-                EE_Error::add_error(
818
-                    sprintf(
819
-                        __('Payment method of type %s was not saved because there were validation errors. They have been marked in the form',
820
-                            'event_espresso'),
821
-                        $payment_method instanceof EE_Payment_Method ? $payment_method->type_obj()->pretty_name()
822
-                            : __('"(unknown)"', 'event_espresso')
823
-                    ),
824
-                    __FILE__,
825
-                    __FUNCTION__,
826
-                    __LINE__
827
-                );
828
-            }
829
-        }
830
-        return;
831
-    }
832
-
833
-
834
-
835
-    protected function _payment_settings()
836
-    {
837
-        $this->_template_args['values'] = $this->_yes_no_values;
838
-        $this->_template_args['show_pending_payment_options'] = isset(EE_Registry::instance()->CFG->registration->show_pending_payment_options)
839
-            ? absint(EE_Registry::instance()->CFG->registration->show_pending_payment_options) : false;
840
-        $this->_set_add_edit_form_tags('update_payment_settings');
841
-        $this->_set_publish_post_box_vars(null, false, false, null, false);
842
-        $this->_template_args['admin_page_content'] = EEH_Template::display_template(EE_PAYMENTS_TEMPLATE_PATH
843
-                                                                                     . 'payment_settings.template.php',
844
-            $this->_template_args, true);
845
-        $this->display_admin_page_with_sidebar();
846
-    }
847
-
848
-
849
-
850
-    /**
851
-     *        _update_payment_settings
852
-     *
853
-     * @access protected
854
-     * @return array
855
-     */
856
-    protected function _update_payment_settings()
857
-    {
858
-        EE_Registry::instance()->CFG->registration->show_pending_payment_options = isset($this->_req_data['show_pending_payment_options'])
859
-            ? $this->_req_data['show_pending_payment_options'] : false;
860
-        EE_Registry::instance()->CFG = apply_filters('FHEE__Payments_Admin_Page___update_payment_settings__CFG',
861
-            EE_Registry::instance()->CFG);
30
+	/**
31
+	 * Variables used for when we're re-sorting the logs results, in case
32
+	 * we needed to do two queries and we need to resort
33
+	 *
34
+	 * @var string
35
+	 */
36
+	private $_sort_logs_again_direction;
37
+
38
+
39
+
40
+	/**
41
+	 * @Constructor
42
+	 * @access public
43
+	 * @param bool $routing indicate whether we want to just load the object and handle routing or just load the object.
44
+	 * @return \Payments_Admin_Page
45
+	 */
46
+	public function __construct($routing = true)
47
+	{
48
+		parent::__construct($routing);
49
+	}
50
+
51
+
52
+
53
+	protected function _init_page_props()
54
+	{
55
+		$this->page_slug = EE_PAYMENTS_PG_SLUG;
56
+		$this->page_label = __('Payment Methods', 'event_espresso');
57
+		$this->_admin_base_url = EE_PAYMENTS_ADMIN_URL;
58
+		$this->_admin_base_path = EE_PAYMENTS_ADMIN;
59
+	}
60
+
61
+
62
+
63
+	protected function _ajax_hooks()
64
+	{
65
+		//todo: all hooks for ajax goes here.
66
+	}
67
+
68
+
69
+
70
+	protected function _define_page_props()
71
+	{
72
+		$this->_admin_page_title = $this->page_label;
73
+		$this->_labels = array(
74
+			'publishbox' => __('Update Settings', 'event_espresso'),
75
+		);
76
+	}
77
+
78
+
79
+
80
+	protected function _set_page_routes()
81
+	{
82
+		/**
83
+		 * note that with payment method capabilities, although we've implemented
84
+		 * capability mapping which will be used for accessing payment methods owned by
85
+		 * other users.  This is not fully implemented yet in the payment method ui.
86
+		 * Currently only the "plural" caps are in active use.
87
+		 * When cap mapping is implemented, some routes will need to use the singular form of
88
+		 * capability method and also include the $id of the payment method for the route.
89
+		 **/
90
+		$this->_page_routes = array(
91
+			'default'                   => array(
92
+				'func'       => '_payment_methods_list',
93
+				'capability' => 'ee_edit_payment_methods',
94
+			),
95
+			'payment_settings'          => array(
96
+				'func'       => '_payment_settings',
97
+				'capability' => 'ee_manage_gateways',
98
+			),
99
+			'activate_payment_method'   => array(
100
+				'func'       => '_activate_payment_method',
101
+				'noheader'   => true,
102
+				'capability' => 'ee_edit_payment_methods',
103
+			),
104
+			'deactivate_payment_method' => array(
105
+				'func'       => '_deactivate_payment_method',
106
+				'noheader'   => true,
107
+				'capability' => 'ee_delete_payment_methods',
108
+			),
109
+			'update_payment_method'     => array(
110
+				'func'               => '_update_payment_method',
111
+				'noheader'           => true,
112
+				'headers_sent_route' => 'default',
113
+				'capability'         => 'ee_edit_payment_methods',
114
+			),
115
+			'update_payment_settings'   => array(
116
+				'func'       => '_update_payment_settings',
117
+				'noheader'   => true,
118
+				'capability' => 'ee_manage_gateways',
119
+			),
120
+			'payment_log'               => array(
121
+				'func'       => '_payment_log_overview_list_table',
122
+				'capability' => 'ee_read_payment_methods',
123
+			),
124
+			'payment_log_details'       => array(
125
+				'func'       => '_payment_log_details',
126
+				'capability' => 'ee_read_payment_methods',
127
+			),
128
+		);
129
+	}
130
+
131
+
132
+
133
+	protected function _set_page_config()
134
+	{
135
+		$payment_method_list_config = array(
136
+			'nav'           => array(
137
+				'label' => __('Payment Methods', 'event_espresso'),
138
+				'order' => 10,
139
+			),
140
+			'metaboxes'     => $this->_default_espresso_metaboxes,
141
+			'help_tabs'     => array_merge(
142
+				array(
143
+					'payment_methods_overview_help_tab' => array(
144
+						'title'    => __('Payment Methods Overview', 'event_espresso'),
145
+						'filename' => 'payment_methods_overview',
146
+					),
147
+				),
148
+				$this->_add_payment_method_help_tabs()),
149
+			'help_tour'     => array('Payment_Methods_Selection_Help_Tour'),
150
+			'require_nonce' => false,
151
+		);
152
+		$this->_page_config = array(
153
+			'default'          => $payment_method_list_config,
154
+			'payment_settings' => array(
155
+				'nav'           => array(
156
+					'label' => __('Settings', 'event_espresso'),
157
+					'order' => 20,
158
+				),
159
+				'help_tabs'     => array(
160
+					'payment_methods_settings_help_tab' => array(
161
+						'title'    => __('Payment Method Settings', 'event_espresso'),
162
+						'filename' => 'payment_methods_settings',
163
+					),
164
+				),
165
+				//'help_tour' => array( 'Payment_Methods_Settings_Help_Tour' ),
166
+				'metaboxes'     => array_merge($this->_default_espresso_metaboxes, array('_publish_post_box')),
167
+				'require_nonce' => false,
168
+			),
169
+			'payment_log'      => array(
170
+				'nav'           => array(
171
+					'label' => __("Logs", 'event_espresso'),
172
+					'order' => 30,
173
+				),
174
+				'list_table'    => 'Payment_Log_Admin_List_Table',
175
+				'metaboxes'     => $this->_default_espresso_metaboxes,
176
+				'require_nonce' => false,
177
+			),
178
+		);
179
+	}
180
+
181
+
182
+
183
+	/**
184
+	 * @return array
185
+	 */
186
+	protected function _add_payment_method_help_tabs()
187
+	{
188
+		EE_Registry::instance()->load_lib('Payment_Method_Manager');
189
+		$payment_method_types = EE_Payment_Method_Manager::instance()->payment_method_types();
190
+		$all_pmt_help_tabs_config = array();
191
+		foreach ($payment_method_types as $payment_method_type) {
192
+			if (! EE_Registry::instance()->CAP->current_user_can($payment_method_type->cap_name(),
193
+				'specific_payment_method_type_access')
194
+			) {
195
+				continue;
196
+			}
197
+			foreach ($payment_method_type->help_tabs_config() as $help_tab_name => $config) {
198
+				$template_args = isset($config['template_args']) ? $config['template_args'] : array();
199
+				$template_args['admin_page_obj'] = $this;
200
+				$all_pmt_help_tabs_config[$help_tab_name] = array(
201
+					'title'   => $config['title'],
202
+					'content' => EEH_Template::display_template(
203
+						$payment_method_type->file_folder() . 'help_tabs' . DS . $config['filename'] . '.help_tab.php',
204
+						$template_args,
205
+						true),
206
+				);
207
+			}
208
+		}
209
+		return $all_pmt_help_tabs_config;
210
+	}
211
+
212
+
213
+
214
+	//none of the below group are currently used for Gateway Settings
215
+	protected function _add_screen_options()
216
+	{
217
+	}
218
+
219
+
220
+
221
+	protected function _add_feature_pointers()
222
+	{
223
+	}
224
+
225
+
226
+
227
+	public function admin_init()
228
+	{
229
+	}
230
+
231
+
232
+
233
+	public function admin_notices()
234
+	{
235
+	}
236
+
237
+
238
+
239
+	public function admin_footer_scripts()
240
+	{
241
+	}
242
+
243
+
244
+
245
+	public function load_scripts_styles()
246
+	{
247
+		wp_enqueue_script('ee_admin_js');
248
+		wp_enqueue_script('ee-text-links');
249
+		wp_enqueue_script('espresso_payments', EE_PAYMENTS_ASSETS_URL . 'espresso_payments_admin.js',
250
+			array('espresso-ui-theme', 'ee-datepicker'), EVENT_ESPRESSO_VERSION, true);
251
+	}
252
+
253
+
254
+
255
+	public function load_scripts_styles_default()
256
+	{
257
+		//styles
258
+		wp_register_style('espresso_payments', EE_PAYMENTS_ASSETS_URL . 'ee-payments.css', array(),
259
+			EVENT_ESPRESSO_VERSION);
260
+		wp_enqueue_style('espresso_payments');
261
+		wp_enqueue_style('ee-text-links');
262
+		//scripts
263
+	}
264
+
265
+
266
+
267
+	protected function _payment_methods_list()
268
+	{
269
+		/**
270
+		 * first let's ensure payment methods have been setup. We do this here because when people activate a
271
+		 * payment method for the first time (as an addon), it may not setup its capabilities or get registered correctly due
272
+		 * to the loading process.  However, people MUST setup the details for the payment method so its safe to do a
273
+		 * recheck here.
274
+		 */
275
+		EE_Registry::instance()->load_lib('Payment_Method_Manager');
276
+		EEM_Payment_Method::instance()->verify_button_urls();
277
+		//setup tabs, one for each payment method type
278
+		$tabs = array();
279
+		$payment_methods = array();
280
+		foreach (EE_Payment_Method_Manager::instance()->payment_method_types() as $pmt_obj) {
281
+			// we don't want to show admin-only PMTs for now
282
+			if ($pmt_obj instanceof EE_PMT_Admin_Only) {
283
+				continue;
284
+			}
285
+			//check access
286
+			if (! EE_Registry::instance()->CAP->current_user_can($pmt_obj->cap_name(),
287
+				'specific_payment_method_type_access')
288
+			) {
289
+				continue;
290
+			}
291
+			//check for any active pms of that type
292
+			$payment_method = EEM_Payment_Method::instance()->get_one_of_type($pmt_obj->system_name());
293
+			if (! $payment_method instanceof EE_Payment_Method) {
294
+				$payment_method = EE_Payment_Method::new_instance(
295
+					array(
296
+						'PMD_slug'       => sanitize_key($pmt_obj->system_name()),
297
+						'PMD_type'       => $pmt_obj->system_name(),
298
+						'PMD_name'       => $pmt_obj->pretty_name(),
299
+						'PMD_admin_name' => $pmt_obj->pretty_name(),
300
+					)
301
+				);
302
+			}
303
+			$payment_methods[$payment_method->slug()] = $payment_method;
304
+		}
305
+		$payment_methods = apply_filters('FHEE__Payments_Admin_Page___payment_methods_list__payment_methods',
306
+			$payment_methods);
307
+		foreach ($payment_methods as $payment_method) {
308
+			if ($payment_method instanceof EE_Payment_Method) {
309
+				add_meta_box(
310
+				//html id
311
+					'espresso_' . $payment_method->slug() . '_payment_settings',
312
+					//title
313
+					sprintf(__('%s Settings', 'event_espresso'), $payment_method->admin_name()),
314
+					//callback
315
+					array($this, 'payment_method_settings_meta_box'),
316
+					//post type
317
+					null,
318
+					//context
319
+					'normal',
320
+					//priority
321
+					'default',
322
+					//callback args
323
+					array('payment_method' => $payment_method)
324
+				);
325
+				//setup for tabbed content
326
+				$tabs[$payment_method->slug()] = array(
327
+					'label' => $payment_method->admin_name(),
328
+					'class' => $payment_method->active() ? 'gateway-active' : '',
329
+					'href'  => 'espresso_' . $payment_method->slug() . '_payment_settings',
330
+					'title' => __('Modify this Payment Method', 'event_espresso'),
331
+					'slug'  => $payment_method->slug(),
332
+				);
333
+			}
334
+		}
335
+		$this->_template_args['admin_page_header'] = EEH_Tabbed_Content::tab_text_links($tabs, 'payment_method_links',
336
+			'|', $this->_get_active_payment_method_slug());
337
+		$this->display_admin_page_with_sidebar();
338
+	}
339
+
340
+
341
+
342
+	/**
343
+	 *   _get_active_payment_method_slug
344
+	 *
345
+	 * @return string
346
+	 */
347
+	protected function _get_active_payment_method_slug()
348
+	{
349
+		$payment_method_slug = false;
350
+		//decide which payment method tab to open first, as dictated by the request's 'payment_method'
351
+		if (isset($this->_req_data['payment_method'])) {
352
+			// if they provided the current payment method, use it
353
+			$payment_method_slug = sanitize_key($this->_req_data['payment_method']);
354
+		}
355
+		$payment_method = EEM_Payment_Method::instance()->get_one(array(array('PMD_slug' => $payment_method_slug)));
356
+		// if that didn't work or wasn't provided, find another way to select the current pm
357
+		if (! $this->_verify_payment_method($payment_method)) {
358
+			// like, looking for an active one
359
+			$payment_method = EEM_Payment_Method::instance()->get_one_active('CART');
360
+			// test that one as well
361
+			if ($this->_verify_payment_method($payment_method)) {
362
+				$payment_method_slug = $payment_method->slug();
363
+			} else {
364
+				$payment_method_slug = 'paypal_standard';
365
+			}
366
+		}
367
+		return $payment_method_slug;
368
+	}
369
+
370
+
371
+
372
+	/**
373
+	 *    payment_method_settings_meta_box
374
+	 *    returns TRUE if the passed payment method is properly constructed and the logged in user has the correct
375
+	 *    capabilities to access it
376
+	 *
377
+	 * @param \EE_Payment_Method $payment_method
378
+	 * @return boolean
379
+	 */
380
+	protected function _verify_payment_method($payment_method)
381
+	{
382
+		if (
383
+			$payment_method instanceof EE_Payment_Method && $payment_method->type_obj() instanceof EE_PMT_Base
384
+			&& EE_Registry::instance()->CAP->current_user_can($payment_method->type_obj()->cap_name(),
385
+				'specific_payment_method_type_access')
386
+		) {
387
+			return true;
388
+		}
389
+		return false;
390
+	}
391
+
392
+
393
+
394
+	/**
395
+	 *    payment_method_settings_meta_box
396
+	 *
397
+	 * @param NULL  $post_obj_which_is_null is an object containing the current post (as a $post object)
398
+	 * @param array $metabox                is an array with metabox id, title, callback, and args elements. the value
399
+	 *                                      at 'args' has key 'payment_method', as set within _payment_methods_list
400
+	 * @return string
401
+	 * @throws EE_Error
402
+	 */
403
+	public function payment_method_settings_meta_box($post_obj_which_is_null, $metabox)
404
+	{
405
+		$payment_method = isset($metabox['args'], $metabox['args']['payment_method'])
406
+			? $metabox['args']['payment_method'] : null;
407
+		if (! $payment_method instanceof EE_Payment_Method) {
408
+			throw new EE_Error(sprintf(__('Payment method metabox setup incorrectly. No Payment method object was supplied',
409
+				'event_espresso')));
410
+		}
411
+		$payment_method_scopes = $payment_method->active();
412
+		// if the payment method really exists show its form, otherwise the activation template
413
+		if ($payment_method->ID() && ! empty($payment_method_scopes)) {
414
+			$form = $this->_generate_payment_method_settings_form($payment_method);
415
+			if ($form->form_data_present_in($this->_req_data)) {
416
+				$form->receive_form_submission($this->_req_data);
417
+			}
418
+			echo $form->form_open() . $form->get_html_and_js() . $form->form_close();
419
+		} else {
420
+			echo $this->_activate_payment_method_button($payment_method)->get_html_and_js();
421
+		}
422
+	}
423
+
424
+
425
+
426
+	/**
427
+	 * Gets the form for all the settings related to this payment method type
428
+	 *
429
+	 * @access protected
430
+	 * @param \EE_Payment_Method $payment_method
431
+	 * @return \EE_Form_Section_Proper
432
+	 */
433
+	protected function _generate_payment_method_settings_form(EE_Payment_Method $payment_method)
434
+	{
435
+		if (! $payment_method instanceof EE_Payment_Method) {
436
+			return new EE_Form_Section_Proper();
437
+		}
438
+		return new EE_Form_Section_Proper(
439
+			array(
440
+				'name'            => $payment_method->slug() . '_settings_form',
441
+				'html_id'         => $payment_method->slug() . '_settings_form',
442
+				'action'          => EE_Admin_Page::add_query_args_and_nonce(
443
+					array(
444
+						'action'         => 'update_payment_method',
445
+						'payment_method' => $payment_method->slug(),
446
+					),
447
+					EE_PAYMENTS_ADMIN_URL
448
+				),
449
+				'layout_strategy' => new EE_Admin_Two_Column_Layout(),
450
+				'subsections'     => apply_filters(
451
+					'FHEE__Payments_Admin_Page___generate_payment_method_settings_form__form_subsections',
452
+					array(
453
+						'pci_dss_compliance'      => $this->_pci_dss_compliance($payment_method),
454
+						'currency_support'        => $this->_currency_support($payment_method),
455
+						'payment_method_settings' => $this->_payment_method_settings($payment_method),
456
+						'update'                  => $this->_update_payment_method_button($payment_method),
457
+						'deactivate'              => $this->_deactivate_payment_method_button($payment_method),
458
+						'fine_print'              => $this->_fine_print(),
459
+					),
460
+					$payment_method
461
+				),
462
+			)
463
+		);
464
+	}
465
+
466
+
467
+
468
+	/**
469
+	 * _pci_dss_compliance
470
+	 *
471
+	 * @access protected
472
+	 * @param \EE_Payment_Method $payment_method
473
+	 * @return \EE_Form_Section_Proper
474
+	 */
475
+	protected function _pci_dss_compliance(EE_Payment_Method $payment_method)
476
+	{
477
+		if ($payment_method->type_obj()->requires_https()) {
478
+			return new EE_Form_Section_HTML(
479
+				EEH_HTML::tr(
480
+					EEH_HTML::th(
481
+						EEH_HTML::label(
482
+							EEH_HTML::strong(__('IMPORTANT', 'event_espresso'), '', 'important-notice')
483
+						)
484
+					) .
485
+					EEH_HTML::td(
486
+						EEH_HTML::strong(__('You are responsible for your own website security and Payment Card Industry Data Security Standards (PCI DSS) compliance.',
487
+							'event_espresso'))
488
+						.
489
+						EEH_HTML::br()
490
+						.
491
+						__('Learn more about ', 'event_espresso')
492
+						. EEH_HTML::link('https://www.pcisecuritystandards.org/merchants/index.php',
493
+							__('PCI DSS compliance', 'event_espresso'))
494
+					)
495
+				)
496
+			);
497
+		} else {
498
+			return new EE_Form_Section_HTML('');
499
+		}
500
+	}
501
+
502
+
503
+
504
+	/**
505
+	 * _currency_support
506
+	 *
507
+	 * @access protected
508
+	 * @param \EE_Payment_Method $payment_method
509
+	 * @return \EE_Form_Section_Proper
510
+	 */
511
+	protected function _currency_support(EE_Payment_Method $payment_method)
512
+	{
513
+		if (! $payment_method->usable_for_currency(EE_Config::instance()->currency->code)) {
514
+			return new EE_Form_Section_HTML(
515
+				EEH_HTML::tr(
516
+					EEH_HTML::th(
517
+						EEH_HTML::label(
518
+							EEH_HTML::strong(__('IMPORTANT', 'event_espresso'), '', 'important-notice')
519
+						)
520
+					) .
521
+					EEH_HTML::td(
522
+						EEH_HTML::strong(
523
+							sprintf(
524
+								__('This payment method does not support the currency set on your site (%1$s). Please activate a different payment method or change your site\'s country and associated currency.',
525
+									'event_espresso'),
526
+								EE_Config::instance()->currency->code
527
+							)
528
+						)
529
+					)
530
+				)
531
+			);
532
+		} else {
533
+			return new EE_Form_Section_HTML('');
534
+		}
535
+	}
536
+
537
+
538
+
539
+	/**
540
+	 * _update_payment_method_button
541
+	 *
542
+	 * @access protected
543
+	 * @param \EE_Payment_Method $payment_method
544
+	 * @return \EE_Form_Section_HTML
545
+	 */
546
+	protected function _payment_method_settings(EE_Payment_Method $payment_method)
547
+	{
548
+		//modify the form so we only have/show fields that will be implemented for this version
549
+		return $this->_simplify_form($payment_method->type_obj()->settings_form(), $payment_method->name());
550
+	}
551
+
552
+
553
+
554
+	/**
555
+	 * Simplifies the form to merely reproduce 4.1's gateway settings functionality
556
+	 *
557
+	 * @param EE_Form_Section_Proper $form_section
558
+	 * @param string                 $payment_method_name
559
+	 * @return \EE_Payment_Method_Form
560
+	 * @throws \EE_Error
561
+	 */
562
+	protected function _simplify_form($form_section, $payment_method_name = '')
563
+	{
564
+		if ($form_section instanceof EE_Payment_Method_Form) {
565
+			$form_section->exclude(
566
+				array(
567
+					'PMD_type', //dont want them changing the type
568
+					'PMD_slug', //or the slug (probably never)
569
+					'PMD_wp_user', //or the user's ID
570
+					'Currency' //or the currency, until the rest of EE supports simultaneous currencies
571
+				)
572
+			);
573
+			return $form_section;
574
+		} else {
575
+			throw new EE_Error(sprintf(__('The EE_Payment_Method_Form for the "%1$s" payment method is missing or invalid.',
576
+				'event_espresso'), $payment_method_name));
577
+		}
578
+	}
579
+
580
+
581
+
582
+	/**
583
+	 * _update_payment_method_button
584
+	 *
585
+	 * @access protected
586
+	 * @param \EE_Payment_Method $payment_method
587
+	 * @return \EE_Form_Section_HTML
588
+	 */
589
+	protected function _update_payment_method_button(EE_Payment_Method $payment_method)
590
+	{
591
+		$update_button = new EE_Submit_Input(
592
+			array(
593
+				'name'       => 'submit',
594
+				'html_id'    => 'save_' . $payment_method->slug() . '_settings',
595
+				'default'    => sprintf(__('Update %s Payment Settings', 'event_espresso'),
596
+					$payment_method->admin_name()),
597
+				'html_label' => EEH_HTML::nbsp(),
598
+			)
599
+		);
600
+		return new EE_Form_Section_HTML(
601
+			EEH_HTML::no_row(EEH_HTML::br(2)) .
602
+			EEH_HTML::tr(
603
+				EEH_HTML::th(__('Update Settings', 'event_espresso')) .
604
+				EEH_HTML::td(
605
+					$update_button->get_html_for_input()
606
+				)
607
+			)
608
+		);
609
+	}
610
+
611
+
612
+
613
+	/**
614
+	 * _deactivate_payment_method_button
615
+	 *
616
+	 * @access protected
617
+	 * @param \EE_Payment_Method $payment_method
618
+	 * @return \EE_Form_Section_Proper
619
+	 */
620
+	protected function _deactivate_payment_method_button(EE_Payment_Method $payment_method)
621
+	{
622
+		$link_text_and_title = sprintf(__('Deactivate %1$s Payments?', 'event_espresso'),
623
+			$payment_method->admin_name());
624
+		return new EE_Form_Section_HTML(
625
+			EEH_HTML::tr(
626
+				EEH_HTML::th(__('Deactivate Payment Method', 'event_espresso')) .
627
+				EEH_HTML::td(
628
+					EEH_HTML::link(
629
+						EE_Admin_Page::add_query_args_and_nonce(
630
+							array(
631
+								'action'         => 'deactivate_payment_method',
632
+								'payment_method' => $payment_method->slug(),
633
+							),
634
+							EE_PAYMENTS_ADMIN_URL
635
+						),
636
+						$link_text_and_title,
637
+						$link_text_and_title,
638
+						'deactivate_' . $payment_method->slug(),
639
+						'espresso-button button-secondary'
640
+					)
641
+				)
642
+			)
643
+		);
644
+	}
645
+
646
+
647
+
648
+	/**
649
+	 * _activate_payment_method_button
650
+	 *
651
+	 * @access protected
652
+	 * @param \EE_Payment_Method $payment_method
653
+	 * @return \EE_Form_Section_Proper
654
+	 */
655
+	protected function _activate_payment_method_button(EE_Payment_Method $payment_method)
656
+	{
657
+		$link_text_and_title = sprintf(__('Activate %1$s Payment Method?', 'event_espresso'),
658
+			$payment_method->admin_name());
659
+		return new EE_Form_Section_Proper(
660
+			array(
661
+				'name'            => 'activate_' . $payment_method->slug() . '_settings_form',
662
+				'html_id'         => 'activate_' . $payment_method->slug() . '_settings_form',
663
+				'action'          => '#',
664
+				'layout_strategy' => new EE_Admin_Two_Column_Layout(),
665
+				'subsections'     => apply_filters(
666
+					'FHEE__Payments_Admin_Page___activate_payment_method_button__form_subsections',
667
+					array(
668
+						new EE_Form_Section_HTML(
669
+							EEH_HTML::tr(
670
+								EEH_HTML::td($payment_method->type_obj()->introductory_html(),
671
+									'',
672
+									'',
673
+									'',
674
+									'colspan="2"'
675
+								)
676
+							) .
677
+							EEH_HTML::tr(
678
+								EEH_HTML::th(
679
+									EEH_HTML::label(__('Click to Activate ', 'event_espresso'))
680
+								) .
681
+								EEH_HTML::td(
682
+									EEH_HTML::link(
683
+										EE_Admin_Page::add_query_args_and_nonce(
684
+											array(
685
+												'action'              => 'activate_payment_method',
686
+												'payment_method_type' => $payment_method->type(),
687
+											),
688
+											EE_PAYMENTS_ADMIN_URL
689
+										),
690
+										$link_text_and_title,
691
+										$link_text_and_title,
692
+										'activate_' . $payment_method->slug(),
693
+										'espresso-button-green button-primary'
694
+									)
695
+								)
696
+							)
697
+						),
698
+					),
699
+					$payment_method
700
+				),
701
+			)
702
+		);
703
+	}
704
+
705
+
706
+
707
+	/**
708
+	 * _fine_print
709
+	 *
710
+	 * @access protected
711
+	 * @return \EE_Form_Section_HTML
712
+	 */
713
+	protected function _fine_print()
714
+	{
715
+		return new EE_Form_Section_HTML(
716
+			EEH_HTML::tr(
717
+				EEH_HTML::th() .
718
+				EEH_HTML::td(
719
+					EEH_HTML::p(__('All fields marked with a * are required fields', 'event_espresso'), '', 'grey-text')
720
+				)
721
+			)
722
+		);
723
+	}
724
+
725
+
726
+
727
+	/**
728
+	 * Activates a payment method of that type. Mostly assuming there is only 1 of that type (or none so far)
729
+	 *
730
+	 * @global WP_User $current_user
731
+	 */
732
+	protected function _activate_payment_method()
733
+	{
734
+		if (isset($this->_req_data['payment_method_type'])) {
735
+			$payment_method_type = sanitize_text_field($this->_req_data['payment_method_type']);
736
+			//see if one exists
737
+			EE_Registry::instance()->load_lib('Payment_Method_Manager');
738
+			$payment_method = EE_Payment_Method_Manager::instance()
739
+													   ->activate_a_payment_method_of_type($payment_method_type);
740
+			$this->_redirect_after_action(1, 'Payment Method', 'activated',
741
+				array('action' => 'default', 'payment_method' => $payment_method->slug()));
742
+		} else {
743
+			$this->_redirect_after_action(false, 'Payment Method', 'activated', array('action' => 'default'));
744
+		}
745
+	}
746
+
747
+
748
+
749
+	/**
750
+	 * Deactivates the payment method with the specified slug, and redirects.
751
+	 */
752
+	protected function _deactivate_payment_method()
753
+	{
754
+		if (isset($this->_req_data['payment_method'])) {
755
+			$payment_method_slug = sanitize_key($this->_req_data['payment_method']);
756
+			//deactivate it
757
+			EE_Registry::instance()->load_lib('Payment_Method_Manager');
758
+			$count_updated = EE_Payment_Method_Manager::instance()->deactivate_payment_method($payment_method_slug);
759
+			$this->_redirect_after_action($count_updated, 'Payment Method', 'deactivated',
760
+				array('action' => 'default', 'payment_method' => $payment_method_slug));
761
+		} else {
762
+			$this->_redirect_after_action(false, 'Payment Method', 'deactivated', array('action' => 'default'));
763
+		}
764
+	}
765
+
766
+
767
+
768
+	/**
769
+	 * Processes the payment method form that was submitted. This is slightly trickier than usual form
770
+	 * processing because we first need to identify WHICH form was processed and which payment method
771
+	 * it corresponds to. Once we have done that, we see if the form is valid. If it is, the
772
+	 * form's data is saved and we redirect to the default payment methods page, setting the updated payment method
773
+	 * as the currently-selected one. If it DOESN'T validate, we render the page with the form's errors (in the
774
+	 * subsequently called 'headers_sent_func' which is _payment_methods_list)
775
+	 *
776
+	 * @return void
777
+	 */
778
+	protected function _update_payment_method()
779
+	{
780
+		if ($_SERVER['REQUEST_METHOD'] == 'POST') {
781
+			//ok let's find which gateway form to use based on the form input
782
+			EE_Registry::instance()->load_lib('Payment_Method_Manager');
783
+			/** @var $correct_pmt_form_to_use EE_Payment_Method_Form */
784
+			$correct_pmt_form_to_use = null;
785
+			$payment_method = null;
786
+			foreach (EEM_Payment_Method::instance()->get_all() as $payment_method) {
787
+				//get the form and simplify it, like what we do when we display it
788
+				$pmt_form = $this->_generate_payment_method_settings_form($payment_method);
789
+				if ($pmt_form->form_data_present_in($this->_req_data)) {
790
+					$correct_pmt_form_to_use = $pmt_form;
791
+					break;
792
+				}
793
+			}
794
+			//if we couldn't find the correct payment method type...
795
+			if (! $correct_pmt_form_to_use) {
796
+				EE_Error::add_error(__("We could not find which payment method type your form submission related to. Please contact support",
797
+					'event_espresso'), __FILE__, __FUNCTION__, __LINE__);
798
+				$this->_redirect_after_action(false, 'Payment Method', 'activated', array('action' => 'default'));
799
+			}
800
+			$correct_pmt_form_to_use->receive_form_submission($this->_req_data);
801
+			if ($correct_pmt_form_to_use->is_valid()) {
802
+				$payment_settings_subform = $correct_pmt_form_to_use->get_subsection('payment_method_settings');
803
+				if (! $payment_settings_subform instanceof EE_Payment_Method_Form) {
804
+					throw new EE_Error(
805
+						sprintf(
806
+							__('The payment method could not be saved because the form sections were misnamed. We expected to find %1$s, but did not.',
807
+								'event_espresso'),
808
+							'payment_method_settings'
809
+						)
810
+					);
811
+				}
812
+				$payment_settings_subform->save();
813
+				/** @var $pm EE_Payment_Method */
814
+				$this->_redirect_after_action(true, 'Payment Method', 'updated',
815
+					array('action' => 'default', 'payment_method' => $payment_method->slug()));
816
+			} else {
817
+				EE_Error::add_error(
818
+					sprintf(
819
+						__('Payment method of type %s was not saved because there were validation errors. They have been marked in the form',
820
+							'event_espresso'),
821
+						$payment_method instanceof EE_Payment_Method ? $payment_method->type_obj()->pretty_name()
822
+							: __('"(unknown)"', 'event_espresso')
823
+					),
824
+					__FILE__,
825
+					__FUNCTION__,
826
+					__LINE__
827
+				);
828
+			}
829
+		}
830
+		return;
831
+	}
832
+
833
+
834
+
835
+	protected function _payment_settings()
836
+	{
837
+		$this->_template_args['values'] = $this->_yes_no_values;
838
+		$this->_template_args['show_pending_payment_options'] = isset(EE_Registry::instance()->CFG->registration->show_pending_payment_options)
839
+			? absint(EE_Registry::instance()->CFG->registration->show_pending_payment_options) : false;
840
+		$this->_set_add_edit_form_tags('update_payment_settings');
841
+		$this->_set_publish_post_box_vars(null, false, false, null, false);
842
+		$this->_template_args['admin_page_content'] = EEH_Template::display_template(EE_PAYMENTS_TEMPLATE_PATH
843
+																					 . 'payment_settings.template.php',
844
+			$this->_template_args, true);
845
+		$this->display_admin_page_with_sidebar();
846
+	}
847
+
848
+
849
+
850
+	/**
851
+	 *        _update_payment_settings
852
+	 *
853
+	 * @access protected
854
+	 * @return array
855
+	 */
856
+	protected function _update_payment_settings()
857
+	{
858
+		EE_Registry::instance()->CFG->registration->show_pending_payment_options = isset($this->_req_data['show_pending_payment_options'])
859
+			? $this->_req_data['show_pending_payment_options'] : false;
860
+		EE_Registry::instance()->CFG = apply_filters('FHEE__Payments_Admin_Page___update_payment_settings__CFG',
861
+			EE_Registry::instance()->CFG);
862 862
 //		 $superform = new EE_Form_Section_Proper(
863 863
 //		 	array(
864 864
 //		 		'subsections' => array(
@@ -876,176 +876,176 @@  discard block
 block discarded – undo
876 876
 //		 	);
877 877
 //		 	$this->_redirect_after_action( 0, 'settings', 'updated', array( 'action' => 'payment_settings' ) );
878 878
 //		 }
879
-        $what = __('Payment Settings', 'event_espresso');
880
-        $success = $this->_update_espresso_configuration($what, EE_Registry::instance()->CFG, __FILE__, __FUNCTION__,
881
-            __LINE__);
882
-        $this->_redirect_after_action($success, $what, __('updated', 'event_espresso'),
883
-            array('action' => 'payment_settings'));
884
-    }
879
+		$what = __('Payment Settings', 'event_espresso');
880
+		$success = $this->_update_espresso_configuration($what, EE_Registry::instance()->CFG, __FILE__, __FUNCTION__,
881
+			__LINE__);
882
+		$this->_redirect_after_action($success, $what, __('updated', 'event_espresso'),
883
+			array('action' => 'payment_settings'));
884
+	}
885 885
 
886 886
 
887 887
 
888
-    protected function _payment_log_overview_list_table()
889
-    {
888
+	protected function _payment_log_overview_list_table()
889
+	{
890 890
 //		$this->_search_btn_label = __('Payment Log', 'event_espresso');
891
-        $this->display_admin_list_table_page_with_sidebar();
892
-    }
893
-
894
-
895
-
896
-    protected function _set_list_table_views_payment_log()
897
-    {
898
-        $this->_views = array(
899
-            'all' => array(
900
-                'slug'  => 'all',
901
-                'label' => __('View All Logs', 'event_espresso'),
902
-                'count' => 0,
903
-            ),
904
-        );
905
-    }
906
-
907
-
908
-
909
-    /**
910
-     * @param int  $per_page
911
-     * @param int  $current_page
912
-     * @param bool $count
913
-     * @return array
914
-     */
915
-    public function get_payment_logs($per_page = 50, $current_page = 0, $count = false)
916
-    {
917
-        EE_Registry::instance()->load_model('Change_Log');
918
-        //we may need to do multiple queries (joining differently), so we actually wan tan array of query params
919
-        $query_params = array(array('LOG_type' => EEM_Change_Log::type_gateway));
920
-        //check if they've selected a specific payment method
921
-        if (isset($this->_req_data['_payment_method']) && $this->_req_data['_payment_method'] !== 'all') {
922
-            $query_params[0]['OR*pm_or_pay_pm'] = array(
923
-                'Payment.Payment_Method.PMD_ID' => $this->_req_data['_payment_method'],
924
-                'Payment_Method.PMD_ID'         => $this->_req_data['_payment_method'],
925
-            );
926
-        }
927
-        //take into account search
928
-        if (isset($this->_req_data['s']) && $this->_req_data['s']) {
929
-            $similarity_string = array('LIKE', '%' . str_replace("", "%", $this->_req_data['s']) . '%');
930
-            $query_params[0]['OR*s']['Payment.Transaction.Registration.Attendee.ATT_fname'] = $similarity_string;
931
-            $query_params[0]['OR*s']['Payment.Transaction.Registration.Attendee.ATT_lname'] = $similarity_string;
932
-            $query_params[0]['OR*s']['Payment.Transaction.Registration.Attendee.ATT_email'] = $similarity_string;
933
-            $query_params[0]['OR*s']['Payment.Payment_Method.PMD_name'] = $similarity_string;
934
-            $query_params[0]['OR*s']['Payment.Payment_Method.PMD_admin_name'] = $similarity_string;
935
-            $query_params[0]['OR*s']['Payment.Payment_Method.PMD_type'] = $similarity_string;
936
-            $query_params[0]['OR*s']['LOG_message'] = $similarity_string;
937
-            $query_params[0]['OR*s']['Payment_Method.PMD_name'] = $similarity_string;
938
-            $query_params[0]['OR*s']['Payment_Method.PMD_admin_name'] = $similarity_string;
939
-            $query_params[0]['OR*s']['Payment_Method.PMD_type'] = $similarity_string;
940
-            $query_params[0]['OR*s']['LOG_message'] = $similarity_string;
941
-        }
942
-        if (isset($this->_req_data['payment-filter-start-date'])
943
-            && isset($this->_req_data['payment-filter-end-date'])
944
-        ) {
945
-            //add date
946
-            $start_date = wp_strip_all_tags($this->_req_data['payment-filter-start-date']);
947
-            $end_date = wp_strip_all_tags($this->_req_data['payment-filter-end-date']);
948
-            //make sure our timestamps start and end right at the boundaries for each day
949
-            $start_date = date('Y-m-d', strtotime($start_date)) . ' 00:00:00';
950
-            $end_date = date('Y-m-d', strtotime($end_date)) . ' 23:59:59';
951
-            //convert to timestamps
952
-            $start_date = strtotime($start_date);
953
-            $end_date = strtotime($end_date);
954
-            //makes sure start date is the lowest value and vice versa
955
-            $start_date = min($start_date, $end_date);
956
-            $end_date = max($start_date, $end_date);
957
-            //convert for query
958
-            $start_date = EEM_Change_Log::instance()
959
-                                        ->convert_datetime_for_query('LOG_time', date('Y-m-d H:i:s', $start_date),
960
-                                            'Y-m-d H:i:s');
961
-            $end_date = EEM_Change_Log::instance()
962
-                                      ->convert_datetime_for_query('LOG_time', date('Y-m-d H:i:s', $end_date),
963
-                                          'Y-m-d H:i:s');
964
-            $query_params[0]['LOG_time'] = array('BETWEEN', array($start_date, $end_date));
965
-        }
966
-        if ($count) {
967
-            return EEM_Change_Log::instance()->count($query_params);
968
-        }
969
-        if (isset($this->_req_data['order'])) {
970
-            $sort = (isset($this->_req_data['order']) && ! empty($this->_req_data['order'])) ? $this->_req_data['order']
971
-                : 'DESC';
972
-            $query_params['order_by'] = array('LOG_time' => $sort);
973
-        } else {
974
-            $query_params['order_by'] = array('LOG_time' => 'DESC');
975
-        }
976
-        $offset = ($current_page - 1) * $per_page;
977
-        if (! isset($this->_req_data['download_results'])) {
978
-            $query_params['limit'] = array($offset, $per_page);
979
-        }
980
-        //now they've requested to instead just download the file instead of viewing it.
981
-        if (isset($this->_req_data['download_results'])) {
982
-            $wpdb_results = EEM_Change_Log::instance()->get_all_efficiently($query_params);
983
-            header('Content-Disposition: attachment');
984
-            header("Content-Disposition: attachment; filename=ee_payment_logs_for_" . sanitize_key(site_url()));
985
-            echo "<h1>Payment Logs for " . site_url() . "</h1>";
986
-            echo "<h3>Query:</h3>";
987
-            var_dump($query_params);
988
-            echo "<h3>Results:</h3>";
989
-            var_dump($wpdb_results);
990
-            die;
991
-        }
992
-        $results = EEM_Change_Log::instance()->get_all($query_params);
993
-        return $results;
994
-    }
995
-
996
-
997
-
998
-    /**
999
-     * Used by usort to RE-sort log query results, because we lose the ordering
1000
-     * because we're possibly combining the results from two queries
1001
-     *
1002
-     * @param EE_Change_Log $logA
1003
-     * @param EE_Change_Log $logB
1004
-     * @return int
1005
-     */
1006
-    protected function _sort_logs_again($logA, $logB)
1007
-    {
1008
-        $timeA = $logA->get_raw('LOG_time');
1009
-        $timeB = $logB->get_raw('LOG_time');
1010
-        if ($timeA == $timeB) {
1011
-            return 0;
1012
-        }
1013
-        $comparison = $timeA < $timeB ? -1 : 1;
1014
-        if (strtoupper($this->_sort_logs_again_direction) == 'DESC') {
1015
-            return $comparison * -1;
1016
-        } else {
1017
-            return $comparison;
1018
-        }
1019
-    }
1020
-
1021
-
1022
-
1023
-    protected function _payment_log_details()
1024
-    {
1025
-        EE_Registry::instance()->load_model('Change_Log');
1026
-        /** @var $payment_log EE_Change_Log */
1027
-        $payment_log = EEM_Change_Log::instance()->get_one_by_ID($this->_req_data['ID']);
1028
-        $payment_method = null;
1029
-        $transaction = null;
1030
-        if ($payment_log instanceof EE_Change_Log) {
1031
-            if ($payment_log->object() instanceof EE_Payment) {
1032
-                $payment_method = $payment_log->object()->payment_method();
1033
-                $transaction = $payment_log->object()->transaction();
1034
-            } elseif ($payment_log->object() instanceof EE_Payment_Method) {
1035
-                $payment_method = $payment_log->object();
1036
-            }
1037
-        }
1038
-        $this->_template_args['admin_page_content'] = EEH_Template::display_template(
1039
-            EE_PAYMENTS_TEMPLATE_PATH . 'payment_log_details.template.php',
1040
-            array(
1041
-                'payment_log'    => $payment_log,
1042
-                'payment_method' => $payment_method,
1043
-                'transaction'    => $transaction,
1044
-            ),
1045
-            true
1046
-        );
1047
-        $this->display_admin_page_with_sidebar();
1048
-    }
891
+		$this->display_admin_list_table_page_with_sidebar();
892
+	}
893
+
894
+
895
+
896
+	protected function _set_list_table_views_payment_log()
897
+	{
898
+		$this->_views = array(
899
+			'all' => array(
900
+				'slug'  => 'all',
901
+				'label' => __('View All Logs', 'event_espresso'),
902
+				'count' => 0,
903
+			),
904
+		);
905
+	}
906
+
907
+
908
+
909
+	/**
910
+	 * @param int  $per_page
911
+	 * @param int  $current_page
912
+	 * @param bool $count
913
+	 * @return array
914
+	 */
915
+	public function get_payment_logs($per_page = 50, $current_page = 0, $count = false)
916
+	{
917
+		EE_Registry::instance()->load_model('Change_Log');
918
+		//we may need to do multiple queries (joining differently), so we actually wan tan array of query params
919
+		$query_params = array(array('LOG_type' => EEM_Change_Log::type_gateway));
920
+		//check if they've selected a specific payment method
921
+		if (isset($this->_req_data['_payment_method']) && $this->_req_data['_payment_method'] !== 'all') {
922
+			$query_params[0]['OR*pm_or_pay_pm'] = array(
923
+				'Payment.Payment_Method.PMD_ID' => $this->_req_data['_payment_method'],
924
+				'Payment_Method.PMD_ID'         => $this->_req_data['_payment_method'],
925
+			);
926
+		}
927
+		//take into account search
928
+		if (isset($this->_req_data['s']) && $this->_req_data['s']) {
929
+			$similarity_string = array('LIKE', '%' . str_replace("", "%", $this->_req_data['s']) . '%');
930
+			$query_params[0]['OR*s']['Payment.Transaction.Registration.Attendee.ATT_fname'] = $similarity_string;
931
+			$query_params[0]['OR*s']['Payment.Transaction.Registration.Attendee.ATT_lname'] = $similarity_string;
932
+			$query_params[0]['OR*s']['Payment.Transaction.Registration.Attendee.ATT_email'] = $similarity_string;
933
+			$query_params[0]['OR*s']['Payment.Payment_Method.PMD_name'] = $similarity_string;
934
+			$query_params[0]['OR*s']['Payment.Payment_Method.PMD_admin_name'] = $similarity_string;
935
+			$query_params[0]['OR*s']['Payment.Payment_Method.PMD_type'] = $similarity_string;
936
+			$query_params[0]['OR*s']['LOG_message'] = $similarity_string;
937
+			$query_params[0]['OR*s']['Payment_Method.PMD_name'] = $similarity_string;
938
+			$query_params[0]['OR*s']['Payment_Method.PMD_admin_name'] = $similarity_string;
939
+			$query_params[0]['OR*s']['Payment_Method.PMD_type'] = $similarity_string;
940
+			$query_params[0]['OR*s']['LOG_message'] = $similarity_string;
941
+		}
942
+		if (isset($this->_req_data['payment-filter-start-date'])
943
+			&& isset($this->_req_data['payment-filter-end-date'])
944
+		) {
945
+			//add date
946
+			$start_date = wp_strip_all_tags($this->_req_data['payment-filter-start-date']);
947
+			$end_date = wp_strip_all_tags($this->_req_data['payment-filter-end-date']);
948
+			//make sure our timestamps start and end right at the boundaries for each day
949
+			$start_date = date('Y-m-d', strtotime($start_date)) . ' 00:00:00';
950
+			$end_date = date('Y-m-d', strtotime($end_date)) . ' 23:59:59';
951
+			//convert to timestamps
952
+			$start_date = strtotime($start_date);
953
+			$end_date = strtotime($end_date);
954
+			//makes sure start date is the lowest value and vice versa
955
+			$start_date = min($start_date, $end_date);
956
+			$end_date = max($start_date, $end_date);
957
+			//convert for query
958
+			$start_date = EEM_Change_Log::instance()
959
+										->convert_datetime_for_query('LOG_time', date('Y-m-d H:i:s', $start_date),
960
+											'Y-m-d H:i:s');
961
+			$end_date = EEM_Change_Log::instance()
962
+									  ->convert_datetime_for_query('LOG_time', date('Y-m-d H:i:s', $end_date),
963
+										  'Y-m-d H:i:s');
964
+			$query_params[0]['LOG_time'] = array('BETWEEN', array($start_date, $end_date));
965
+		}
966
+		if ($count) {
967
+			return EEM_Change_Log::instance()->count($query_params);
968
+		}
969
+		if (isset($this->_req_data['order'])) {
970
+			$sort = (isset($this->_req_data['order']) && ! empty($this->_req_data['order'])) ? $this->_req_data['order']
971
+				: 'DESC';
972
+			$query_params['order_by'] = array('LOG_time' => $sort);
973
+		} else {
974
+			$query_params['order_by'] = array('LOG_time' => 'DESC');
975
+		}
976
+		$offset = ($current_page - 1) * $per_page;
977
+		if (! isset($this->_req_data['download_results'])) {
978
+			$query_params['limit'] = array($offset, $per_page);
979
+		}
980
+		//now they've requested to instead just download the file instead of viewing it.
981
+		if (isset($this->_req_data['download_results'])) {
982
+			$wpdb_results = EEM_Change_Log::instance()->get_all_efficiently($query_params);
983
+			header('Content-Disposition: attachment');
984
+			header("Content-Disposition: attachment; filename=ee_payment_logs_for_" . sanitize_key(site_url()));
985
+			echo "<h1>Payment Logs for " . site_url() . "</h1>";
986
+			echo "<h3>Query:</h3>";
987
+			var_dump($query_params);
988
+			echo "<h3>Results:</h3>";
989
+			var_dump($wpdb_results);
990
+			die;
991
+		}
992
+		$results = EEM_Change_Log::instance()->get_all($query_params);
993
+		return $results;
994
+	}
995
+
996
+
997
+
998
+	/**
999
+	 * Used by usort to RE-sort log query results, because we lose the ordering
1000
+	 * because we're possibly combining the results from two queries
1001
+	 *
1002
+	 * @param EE_Change_Log $logA
1003
+	 * @param EE_Change_Log $logB
1004
+	 * @return int
1005
+	 */
1006
+	protected function _sort_logs_again($logA, $logB)
1007
+	{
1008
+		$timeA = $logA->get_raw('LOG_time');
1009
+		$timeB = $logB->get_raw('LOG_time');
1010
+		if ($timeA == $timeB) {
1011
+			return 0;
1012
+		}
1013
+		$comparison = $timeA < $timeB ? -1 : 1;
1014
+		if (strtoupper($this->_sort_logs_again_direction) == 'DESC') {
1015
+			return $comparison * -1;
1016
+		} else {
1017
+			return $comparison;
1018
+		}
1019
+	}
1020
+
1021
+
1022
+
1023
+	protected function _payment_log_details()
1024
+	{
1025
+		EE_Registry::instance()->load_model('Change_Log');
1026
+		/** @var $payment_log EE_Change_Log */
1027
+		$payment_log = EEM_Change_Log::instance()->get_one_by_ID($this->_req_data['ID']);
1028
+		$payment_method = null;
1029
+		$transaction = null;
1030
+		if ($payment_log instanceof EE_Change_Log) {
1031
+			if ($payment_log->object() instanceof EE_Payment) {
1032
+				$payment_method = $payment_log->object()->payment_method();
1033
+				$transaction = $payment_log->object()->transaction();
1034
+			} elseif ($payment_log->object() instanceof EE_Payment_Method) {
1035
+				$payment_method = $payment_log->object();
1036
+			}
1037
+		}
1038
+		$this->_template_args['admin_page_content'] = EEH_Template::display_template(
1039
+			EE_PAYMENTS_TEMPLATE_PATH . 'payment_log_details.template.php',
1040
+			array(
1041
+				'payment_log'    => $payment_log,
1042
+				'payment_method' => $payment_method,
1043
+				'transaction'    => $transaction,
1044
+			),
1045
+			true
1046
+		);
1047
+		$this->display_admin_page_with_sidebar();
1048
+	}
1049 1049
 
1050 1050
 
1051 1051
 } //end Payments_Admin_Page class
Please login to merge, or discard this patch.
core/middleware/EE_Detect_File_Editor_Request.core.php 1 patch
Indentation   +23 added lines, -23 removed lines patch added patch discarded remove patch
@@ -14,28 +14,28 @@
 block discarded – undo
14 14
 class EE_Detect_File_Editor_Request extends EE_Middleware
15 15
 {
16 16
 
17
-    /**
18
-     * @deprecated
19
-     * @param EE_Request  $request
20
-     * @param EE_Response $response
21
-     * @return EE_Response
22
-     */
23
-    public function handle_request(EE_Request $request, EE_Response $response)
24
-    {
25
-        EE_Error::doing_it_wrong(
26
-            __METHOD__,
27
-            sprintf(
28
-                esc_html__(
29
-                    'This class is deprecated. Please use %1$s instead. All Event Espresso request stack classes have been moved to %2$s and are now under the %3$s namespace',
30
-                    'event_espresso'
31
-                ),
32
-                'EventEspresso\core\services\request\middleware\DetectFileEditorRequest',
33
-                '\core\services\request',
34
-                'EventEspresso\core\services\request'
35
-            ),
36
-            '4.9.52'
37
-        );
38
-        return $response;
39
-    }
17
+	/**
18
+	 * @deprecated
19
+	 * @param EE_Request  $request
20
+	 * @param EE_Response $response
21
+	 * @return EE_Response
22
+	 */
23
+	public function handle_request(EE_Request $request, EE_Response $response)
24
+	{
25
+		EE_Error::doing_it_wrong(
26
+			__METHOD__,
27
+			sprintf(
28
+				esc_html__(
29
+					'This class is deprecated. Please use %1$s instead. All Event Espresso request stack classes have been moved to %2$s and are now under the %3$s namespace',
30
+					'event_espresso'
31
+				),
32
+				'EventEspresso\core\services\request\middleware\DetectFileEditorRequest',
33
+				'\core\services\request',
34
+				'EventEspresso\core\services\request'
35
+			),
36
+			'4.9.52'
37
+		);
38
+		return $response;
39
+	}
40 40
 
41 41
 }
Please login to merge, or discard this patch.
core/services/request/middleware/DetectFileEditorRequest.php 1 patch
Indentation   +37 added lines, -37 removed lines patch added patch discarded remove patch
@@ -21,45 +21,45 @@
 block discarded – undo
21 21
 class DetectFileEditorRequest extends Middleware
22 22
 {
23 23
 
24
-    /**
25
-     * converts a Request to a Response
26
-     *
27
-     * @param RequestInterface  $request
28
-     * @param ResponseInterface $response
29
-     * @return ResponseInterface
30
-     */
31
-    public function handleRequest(RequestInterface $request, ResponseInterface $response)
32
-    {
33
-        $this->request  = $request;
34
-        $this->response = $response;
35
-        if ($this->isFileEditorRequest()) {
36
-            $this->setFiltersForRequest();
37
-        }
38
-        $this->response = $this->processRequestStack($this->request, $this->response);
39
-        return $this->response;
40
-    }
24
+	/**
25
+	 * converts a Request to a Response
26
+	 *
27
+	 * @param RequestInterface  $request
28
+	 * @param ResponseInterface $response
29
+	 * @return ResponseInterface
30
+	 */
31
+	public function handleRequest(RequestInterface $request, ResponseInterface $response)
32
+	{
33
+		$this->request  = $request;
34
+		$this->response = $response;
35
+		if ($this->isFileEditorRequest()) {
36
+			$this->setFiltersForRequest();
37
+		}
38
+		$this->response = $this->processRequestStack($this->request, $this->response);
39
+		return $this->response;
40
+	}
41 41
 
42 42
 
43
-    /**
44
-     * This sets any filters that need set on this request.
45
-     */
46
-    protected function setFiltersForRequest()
47
-    {
48
-        add_filter('FHEE_load_EE_Session', '__return_false', 999);
49
-    }
43
+	/**
44
+	 * This sets any filters that need set on this request.
45
+	 */
46
+	protected function setFiltersForRequest()
47
+	{
48
+		add_filter('FHEE_load_EE_Session', '__return_false', 999);
49
+	}
50 50
 
51 51
 
52
-    /**
53
-     * Conditions for a "file editor request"
54
-     *
55
-     * @see wp-admin/includes/file.php
56
-     *      The file editor does a loopback request to the admin AND to the frontend when checking active theme or
57
-     *      active plugin edits.  So these conditions consider that.
58
-     * @return bool
59
-     */
60
-    protected function isFileEditorRequest()
61
-    {
62
-        return $this->request->getRequestParam('wp_scrape_key')
63
-               && $this->request->getRequestParam('wp_scrape_nonce');
64
-    }
52
+	/**
53
+	 * Conditions for a "file editor request"
54
+	 *
55
+	 * @see wp-admin/includes/file.php
56
+	 *      The file editor does a loopback request to the admin AND to the frontend when checking active theme or
57
+	 *      active plugin edits.  So these conditions consider that.
58
+	 * @return bool
59
+	 */
60
+	protected function isFileEditorRequest()
61
+	{
62
+		return $this->request->getRequestParam('wp_scrape_key')
63
+			   && $this->request->getRequestParam('wp_scrape_nonce');
64
+	}
65 65
 }
Please login to merge, or discard this patch.