Completed
Branch FET/9575/invisible-recaptcha (8a7ce4)
by
unknown
40:06 queued 25:41
created
modules/ticket_sales_monitor/EED_Ticket_Sales_Monitor.module.php 3 patches
Doc Comments   +3 added lines, -2 removed lines patch added patch discarded remove patch
@@ -326,7 +326,7 @@  discard block
 block discarded – undo
326 326
      *
327 327
      * @param    EE_Ticket $ticket
328 328
      * @param int          $quantity
329
-     * @return bool
329
+     * @return integer
330 330
      * @throws EE_Error
331 331
      */
332 332
     protected function _reserve_ticket(EE_Ticket $ticket, $quantity = 1)
@@ -343,7 +343,7 @@  discard block
 block discarded – undo
343 343
     /**
344 344
      * @param  EE_Ticket $ticket
345 345
      * @param  int       $quantity
346
-     * @return bool
346
+     * @return integer
347 347
      * @throws EE_Error
348 348
      */
349 349
     protected function _release_reserved_ticket(EE_Ticket $ticket, $quantity = 1)
@@ -969,6 +969,7 @@  discard block
 block discarded – undo
969 969
     /**
970 970
      * @param EE_Ticket[]    $tickets_with_reservations
971 971
      * @param EE_Line_Item[] $valid_reserved_ticket_line_items
972
+     * @param string $source
972 973
      * @return int
973 974
      * @throws UnexpectedEntityException
974 975
      * @throws DomainException
Please login to merge, or discard this patch.
Indentation   +1043 added lines, -1043 removed lines patch added patch discarded remove patch
@@ -23,1050 +23,1050 @@
 block discarded – undo
23 23
 class EED_Ticket_Sales_Monitor extends EED_Module
24 24
 {
25 25
 
26
-    const debug = false;    //	true false
27
-
28
-    /**
29
-     * an array of raw ticket data from EED_Ticket_Selector
30
-     *
31
-     * @var array $ticket_selections
32
-     */
33
-    protected $ticket_selections = array();
34
-
35
-    /**
36
-     * the raw ticket data from EED_Ticket_Selector is organized in rows
37
-     * according to how they are displayed in the actual Ticket_Selector
38
-     * this tracks the current row being processed
39
-     *
40
-     * @var int $current_row
41
-     */
42
-    protected $current_row = 0;
43
-
44
-    /**
45
-     * an array for tracking names of tickets that have sold out
46
-     *
47
-     * @var array $sold_out_tickets
48
-     */
49
-    protected $sold_out_tickets = array();
50
-
51
-    /**
52
-     * an array for tracking names of tickets that have had their quantities reduced
53
-     *
54
-     * @var array $decremented_tickets
55
-     */
56
-    protected $decremented_tickets = array();
57
-
58
-
59
-
60
-    /**
61
-     * set_hooks - for hooking into EE Core, other modules, etc
62
-     *
63
-     * @return    void
64
-     */
65
-    public static function set_hooks()
66
-    {
67
-        // release tickets for expired carts
68
-        add_action(
69
-            'EED_Ticket_Selector__process_ticket_selections__before',
70
-            array('EED_Ticket_Sales_Monitor', 'release_tickets_for_expired_carts'),
71
-            1
72
-        );
73
-        // check ticket reserves AFTER MER does it's check (hence priority 20)
74
-        add_filter(
75
-            'FHEE__EE_Ticket_Selector___add_ticket_to_cart__ticket_qty',
76
-            array('EED_Ticket_Sales_Monitor', 'validate_ticket_sale'),
77
-            20,
78
-            3
79
-        );
80
-        // add notices for sold out tickets
81
-        add_action(
82
-            'AHEE__EE_Ticket_Selector__process_ticket_selections__after_tickets_added_to_cart',
83
-            array('EED_Ticket_Sales_Monitor', 'post_notices'),
84
-            10
85
-        );
86
-        // handle ticket quantities adjusted in cart
87
-        //add_action(
88
-        //	'FHEE__EED_Multi_Event_Registration__adjust_line_item_quantity__line_item_quantity_updated',
89
-        //	array( 'EED_Ticket_Sales_Monitor', 'ticket_quantity_updated' ),
90
-        //	10, 2
91
-        //);
92
-        // handle tickets deleted from cart
93
-        add_action(
94
-            'FHEE__EED_Multi_Event_Registration__delete_ticket__ticket_removed_from_cart',
95
-            array('EED_Ticket_Sales_Monitor', 'ticket_removed_from_cart'),
96
-            10,
97
-            2
98
-        );
99
-        // handle emptied carts
100
-        add_action(
101
-            'AHEE__EE_Session__reset_cart__before_reset',
102
-            array('EED_Ticket_Sales_Monitor', 'session_cart_reset'),
103
-            10,
104
-            1
105
-        );
106
-        add_action(
107
-            'AHEE__EED_Multi_Event_Registration__empty_event_cart__before_delete_cart',
108
-            array('EED_Ticket_Sales_Monitor', 'session_cart_reset'),
109
-            10,
110
-            1
111
-        );
112
-        // handle cancelled registrations
113
-        add_action(
114
-            'AHEE__EE_Session__reset_checkout__before_reset',
115
-            array('EED_Ticket_Sales_Monitor', 'session_checkout_reset'),
116
-            10,
117
-            1
118
-        );
119
-        // cron tasks
120
-        add_action(
121
-            'AHEE__EE_Cron_Tasks__process_expired_transactions__abandoned_transaction',
122
-            array('EED_Ticket_Sales_Monitor', 'process_abandoned_transactions'),
123
-            10,
124
-            1
125
-        );
126
-        add_action(
127
-            'AHEE__EE_Cron_Tasks__process_expired_transactions__incomplete_transaction',
128
-            array('EED_Ticket_Sales_Monitor', 'process_abandoned_transactions'),
129
-            10,
130
-            1
131
-        );
132
-        add_action(
133
-            'AHEE__EE_Cron_Tasks__process_expired_transactions__failed_transaction',
134
-            array('EED_Ticket_Sales_Monitor', 'process_failed_transactions'),
135
-            10,
136
-            1
137
-        );
138
-    }
139
-
140
-
141
-
142
-    /**
143
-     * set_hooks_admin - for hooking into EE Admin Core, other modules, etc
144
-     *
145
-     * @return void
146
-     */
147
-    public static function set_hooks_admin()
148
-    {
149
-        EED_Ticket_Sales_Monitor::set_hooks();
150
-    }
151
-
152
-
153
-
154
-    /**
155
-     * @return EED_Ticket_Sales_Monitor|EED_Module
156
-     */
157
-    public static function instance()
158
-    {
159
-        return parent::get_instance(__CLASS__);
160
-    }
161
-
162
-
163
-
164
-    /**
165
-     * @param WP_Query $WP_Query
166
-     * @return    void
167
-     */
168
-    public function run($WP_Query)
169
-    {
170
-    }
171
-
172
-
173
-
174
-    /********************************** PRE_TICKET_SALES  **********************************/
175
-
176
-
177
-
178
-    /**
179
-     * Retrieves grand totals from the line items that have no TXN ID
180
-     * and timestamps less than the current time minus the session lifespan.
181
-     * These are carts that have been abandoned before the "registrant" even attempted to checkout.
182
-     * We're going to release the tickets for these line items before attempting to add more to the cart.
183
-     *
184
-     * @return void
185
-     * @throws DomainException
186
-     * @throws EE_Error
187
-     * @throws InvalidArgumentException
188
-     * @throws InvalidDataTypeException
189
-     * @throws InvalidInterfaceException
190
-     * @throws UnexpectedEntityException
191
-     */
192
-    public static function release_tickets_for_expired_carts()
193
-    {
194
-        do_action('AHEE__EED_Ticket_Sales_Monitor__release_tickets_for_expired_carts__begin');
195
-        $expired_ticket_IDs      = array();
196
-        $valid_ticket_line_items = array();
197
-        $total_line_items        = EEM_Line_Item::instance()->get_total_line_items_with_no_transaction();
198
-        if (empty($total_line_items)) {
199
-            do_action(
200
-                'AHEE__EED_Ticket_Sales_Monitor__release_tickets_for_expired_carts__end',
201
-                $total_line_items,
202
-                $valid_ticket_line_items,
203
-                $expired_ticket_IDs
204
-            );
205
-            return;
206
-        }
207
-        $expired = current_time('timestamp') - EE_Registry::instance()->SSN->lifespan();
208
-        foreach ($total_line_items as $total_line_item) {
209
-            /** @var EE_Line_Item $total_line_item */
210
-            $ticket_line_items = EED_Ticket_Sales_Monitor::get_ticket_line_items_for_grand_total($total_line_item);
211
-            foreach ($ticket_line_items as $ticket_line_item) {
212
-                if (! $ticket_line_item instanceof EE_Line_Item) {
213
-                    continue;
214
-                }
215
-                if ($total_line_item->timestamp(true) <= $expired) {
216
-                    $expired_ticket_IDs[ $ticket_line_item->OBJ_ID() ] = $ticket_line_item->OBJ_ID();
217
-                } else {
218
-                    $valid_ticket_line_items[ $ticket_line_item->OBJ_ID() ] = $ticket_line_item;
219
-                }
220
-            }
221
-        }
222
-        if (! empty($expired_ticket_IDs)) {
223
-            EED_Ticket_Sales_Monitor::release_reservations_for_tickets(
224
-                \EEM_Ticket::instance()->get_tickets_with_IDs($expired_ticket_IDs),
225
-                $valid_ticket_line_items,
226
-                __FUNCTION__
227
-            );
228
-            // let's get rid of expired line items so that they can't interfere with tracking
229
-            add_action(
230
-                'shutdown',
231
-                array('EED_Ticket_Sales_Monitor', 'clear_expired_line_items_with_no_transaction'),
232
-                999
233
-            );
234
-        }
235
-        do_action(
236
-            'AHEE__EED_Ticket_Sales_Monitor__release_tickets_for_expired_carts__end',
237
-            $total_line_items,
238
-            $valid_ticket_line_items,
239
-            $expired_ticket_IDs
240
-        );
241
-    }
242
-
243
-
244
-
245
-    /********************************** VALIDATE_TICKET_SALE  **********************************/
246
-
247
-
248
-
249
-    /**
250
-     * callback for 'FHEE__EED_Ticket_Selector__process_ticket_selections__valid_post_data'
251
-     *
252
-     * @param int       $qty
253
-     * @param EE_Ticket $ticket
254
-     * @return bool
255
-     * @throws UnexpectedEntityException
256
-     * @throws EE_Error
257
-     */
258
-    public static function validate_ticket_sale($qty = 1, EE_Ticket $ticket)
259
-    {
260
-        $qty = absint($qty);
261
-        if ($qty > 0) {
262
-            $qty = EED_Ticket_Sales_Monitor::instance()->_validate_ticket_sale($ticket, $qty);
263
-        }
264
-        if (self::debug) {
265
-            echo '<br /><br /> ' . __LINE__ . ') ' . __METHOD__ . '()';
266
-            echo '<br /><br /><b> RETURNED QTY: ' . $qty . '</b>';
267
-        }
268
-        return $qty;
269
-    }
270
-
271
-
272
-
273
-    /**
274
-     * checks whether an individual ticket is available for purchase based on datetime, and ticket details
275
-     *
276
-     * @param   EE_Ticket $ticket
277
-     * @param int         $qty
278
-     * @return int
279
-     * @throws UnexpectedEntityException
280
-     * @throws EE_Error
281
-     */
282
-    protected function _validate_ticket_sale(EE_Ticket $ticket, $qty = 1)
283
-    {
284
-        if (self::debug) {
285
-            echo '<br /><br /> ' . __LINE__ . ') ' . __METHOD__ . '() ';
286
-        }
287
-        if (! $ticket instanceof EE_Ticket) {
288
-            return 0;
289
-        }
290
-        if (self::debug) {
291
-            echo '<br /><b> . ticket->ID: ' . $ticket->ID() . '</b>';
292
-            echo '<br /> . original ticket->reserved: ' . $ticket->reserved();
293
-        }
294
-        $ticket->refresh_from_db();
295
-        // first let's determine the ticket availability based on sales
296
-        $available = $ticket->qty('saleable');
297
-        if (self::debug) {
298
-            echo '<br /> . . . ticket->qty: ' . $ticket->qty();
299
-            echo '<br /> . . . ticket->sold: ' . $ticket->sold();
300
-            echo '<br /> . . . ticket->reserved: ' . $ticket->reserved();
301
-            echo '<br /> . . . ticket->qty(saleable): ' . $ticket->qty('saleable');
302
-            echo '<br /> . . . available: ' . $available;
303
-        }
304
-        if ($available < 1) {
305
-            $this->_ticket_sold_out($ticket);
306
-            return 0;
307
-        }
308
-        if (self::debug) {
309
-            echo '<br /> . . . qty: ' . $qty;
310
-        }
311
-        if ($available < $qty) {
312
-            $qty = $available;
313
-            if (self::debug) {
314
-                echo '<br /> . . . QTY ADJUSTED: ' . $qty;
315
-            }
316
-            $this->_ticket_quantity_decremented($ticket);
317
-        }
318
-        $this->_reserve_ticket($ticket, $qty);
319
-        return $qty;
320
-    }
321
-
322
-
323
-
324
-    /**
325
-     * increments ticket reserved based on quantity passed
326
-     *
327
-     * @param    EE_Ticket $ticket
328
-     * @param int          $quantity
329
-     * @return bool
330
-     * @throws EE_Error
331
-     */
332
-    protected function _reserve_ticket(EE_Ticket $ticket, $quantity = 1)
333
-    {
334
-        if (self::debug) {
335
-            echo '<br /><br /> . . . INCREASE RESERVED: ' . $quantity;
336
-        }
337
-        $ticket->increase_reserved($quantity, 'TicketSalesMonitor:'. __LINE__);
338
-        return $ticket->save();
339
-    }
340
-
341
-
342
-
343
-    /**
344
-     * @param  EE_Ticket $ticket
345
-     * @param  int       $quantity
346
-     * @return bool
347
-     * @throws EE_Error
348
-     */
349
-    protected function _release_reserved_ticket(EE_Ticket $ticket, $quantity = 1)
350
-    {
351
-        if (self::debug) {
352
-            echo '<br /> . . . ticket->ID: ' . $ticket->ID();
353
-            echo '<br /> . . . ticket->reserved: ' . $ticket->reserved();
354
-        }
355
-        $ticket->decrease_reserved($quantity, true, 'TicketSalesMonitor:'. __LINE__);
356
-        if (self::debug) {
357
-            echo '<br /> . . . ticket->reserved: ' . $ticket->reserved();
358
-        }
359
-        return $ticket->save() ? 1 : 0;
360
-    }
361
-
362
-
363
-
364
-    /**
365
-     * removes quantities within the ticket selector based on zero ticket availability
366
-     *
367
-     * @param    EE_Ticket $ticket
368
-     * @return    void
369
-     * @throws UnexpectedEntityException
370
-     * @throws EE_Error
371
-     */
372
-    protected function _ticket_sold_out(EE_Ticket $ticket)
373
-    {
374
-        if (self::debug) {
375
-            echo '<br /><br /> ' . __LINE__ . ') ' . __METHOD__ . '() ';
376
-            echo '<br /> . . ticket->name: ' . $this->_get_ticket_and_event_name($ticket);
377
-        }
378
-        $this->sold_out_tickets[] = $this->_get_ticket_and_event_name($ticket);
379
-    }
380
-
381
-
382
-
383
-    /**
384
-     * adjusts quantities within the ticket selector based on decreased ticket availability
385
-     *
386
-     * @param    EE_Ticket $ticket
387
-     * @return void
388
-     * @throws UnexpectedEntityException
389
-     * @throws EE_Error
390
-     */
391
-    protected function _ticket_quantity_decremented(EE_Ticket $ticket)
392
-    {
393
-        if (self::debug) {
394
-            echo '<br /><br /> ' . __LINE__ . ') ' . __METHOD__ . '() ';
395
-            echo '<br /> . . ticket->name: ' . $this->_get_ticket_and_event_name($ticket);
396
-        }
397
-        $this->decremented_tickets[] = $this->_get_ticket_and_event_name($ticket);
398
-    }
399
-
400
-
401
-
402
-    /**
403
-     * builds string out of ticket and event name
404
-     *
405
-     * @param    EE_Ticket $ticket
406
-     * @return string
407
-     * @throws UnexpectedEntityException
408
-     * @throws EE_Error
409
-     */
410
-    protected function _get_ticket_and_event_name(EE_Ticket $ticket)
411
-    {
412
-        $event = $ticket->get_related_event();
413
-        if ($event instanceof EE_Event) {
414
-            $ticket_name = sprintf(
415
-                _x('%1$s for %2$s', 'ticket name for event name', 'event_espresso'),
416
-                $ticket->name(),
417
-                $event->name()
418
-            );
419
-        } else {
420
-            $ticket_name = $ticket->name();
421
-        }
422
-        return $ticket_name;
423
-    }
424
-
425
-
426
-
427
-    /********************************** EVENT CART  **********************************/
428
-
429
-
430
-
431
-    /**
432
-     * releases or reserves ticket(s) based on quantity passed
433
-     *
434
-     * @param  EE_Line_Item $line_item
435
-     * @param  int          $quantity
436
-     * @return void
437
-     * @throws EE_Error
438
-     * @throws InvalidArgumentException
439
-     * @throws InvalidDataTypeException
440
-     * @throws InvalidInterfaceException
441
-     */
442
-    public static function ticket_quantity_updated(EE_Line_Item $line_item, $quantity = 1)
443
-    {
444
-        $ticket = EEM_Ticket::instance()->get_one_by_ID(absint($line_item->OBJ_ID()));
445
-        if ($ticket instanceof EE_Ticket) {
446
-            $ticket->add_extra_meta(
447
-                EE_Ticket::META_KEY_TICKET_RESERVATIONS,
448
-                __LINE__ . ') ' . __METHOD__ . '()'
449
-            );
450
-            if ($quantity > 0) {
451
-                EED_Ticket_Sales_Monitor::instance()->_reserve_ticket($ticket, $quantity);
452
-            } else {
453
-                EED_Ticket_Sales_Monitor::instance()->_release_reserved_ticket($ticket, $quantity);
454
-            }
455
-        }
456
-    }
457
-
458
-
459
-
460
-    /**
461
-     * releases reserved ticket(s) based on quantity passed
462
-     *
463
-     * @param  EE_Ticket $ticket
464
-     * @param  int       $quantity
465
-     * @return void
466
-     * @throws EE_Error
467
-     */
468
-    public static function ticket_removed_from_cart(EE_Ticket $ticket, $quantity = 1)
469
-    {
470
-        $ticket->add_extra_meta(
471
-            EE_Ticket::META_KEY_TICKET_RESERVATIONS,
472
-            __LINE__ . ') ' . __METHOD__ . '()'
473
-        );
474
-        EED_Ticket_Sales_Monitor::instance()->_release_reserved_ticket($ticket, $quantity);
475
-    }
476
-
477
-
478
-
479
-    /********************************** POST_NOTICES  **********************************/
480
-
481
-
482
-
483
-    /**
484
-     * @return void
485
-     * @throws EE_Error
486
-     * @throws InvalidArgumentException
487
-     * @throws ReflectionException
488
-     * @throws InvalidDataTypeException
489
-     * @throws InvalidInterfaceException
490
-     */
491
-    public static function post_notices()
492
-    {
493
-        EED_Ticket_Sales_Monitor::instance()->_post_notices();
494
-    }
495
-
496
-
497
-
498
-    /**
499
-     * @return void
500
-     * @throws EE_Error
501
-     * @throws InvalidArgumentException
502
-     * @throws ReflectionException
503
-     * @throws InvalidDataTypeException
504
-     * @throws InvalidInterfaceException
505
-     */
506
-    protected function _post_notices()
507
-    {
508
-        if (self::debug) {
509
-            echo '<br /><br /> ' . __LINE__ . ') ' . __METHOD__ . '() ';
510
-        }
511
-        $refresh_msg    = '';
512
-        $none_added_msg = '';
513
-        if (defined('DOING_AJAX') && DOING_AJAX) {
514
-            $refresh_msg    = __(
515
-                'Please refresh the page to view updated ticket quantities.',
516
-                'event_espresso'
517
-            );
518
-            $none_added_msg = __('No tickets were added for the event.', 'event_espresso');
519
-        }
520
-        if (! empty($this->sold_out_tickets)) {
521
-            EE_Error::add_attention(
522
-                sprintf(
523
-                    apply_filters(
524
-                        'FHEE__EED_Ticket_Sales_Monitor___post_notices__sold_out_tickets_notice',
525
-                        __(
526
-                            'We\'re sorry...%1$sThe following items have sold out since you first viewed this page, and can no longer be registered for:%1$s%1$s%2$s%1$s%1$sPlease note that availability can change at any time due to cancellations, so please check back again later if registration for this event(s) is important to you.%1$s%1$s%3$s%1$s%4$s%1$s',
527
-                            'event_espresso'
528
-                        )
529
-                    ),
530
-                    '<br />',
531
-                    implode('<br />', $this->sold_out_tickets),
532
-                    $none_added_msg,
533
-                    $refresh_msg
534
-                )
535
-            );
536
-            // alter code flow in the Ticket Selector for better UX
537
-            add_filter('FHEE__EED_Ticket_Selector__process_ticket_selections__tckts_slctd', '__return_true');
538
-            add_filter('FHEE__EED_Ticket_Selector__process_ticket_selections__success', '__return_false');
539
-            $this->sold_out_tickets = array();
540
-            // and reset the cart
541
-            EED_Ticket_Sales_Monitor::session_cart_reset(EE_Registry::instance()->SSN);
542
-        }
543
-        if (! empty($this->decremented_tickets)) {
544
-            EE_Error::add_attention(
545
-                sprintf(
546
-                    apply_filters(
547
-                        'FHEE__EED_Ticket_Sales_Monitor___ticket_quantity_decremented__notice',
548
-                        __(
549
-                            'We\'re sorry...%1$sDue to sales that have occurred since you first viewed the last page, the following items have had their quantities adjusted to match the current available amount:%1$s%1$s%2$s%1$s%1$sPlease note that availability can change at any time due to cancellations, so please check back again later if registration for this event(s) is important to you.%1$s%1$s%3$s%1$s%4$s%1$s',
550
-                            'event_espresso'
551
-                        )
552
-                    ),
553
-                    '<br />',
554
-                    implode('<br />', $this->decremented_tickets),
555
-                    $none_added_msg,
556
-                    $refresh_msg
557
-                )
558
-            );
559
-            $this->decremented_tickets = array();
560
-        }
561
-    }
562
-
563
-
564
-
565
-    /********************************** RELEASE_ALL_RESERVED_TICKETS_FOR_TRANSACTION  **********************************/
566
-
567
-
568
-
569
-    /**
570
-     * releases reserved tickets for all registrations of an EE_Transaction
571
-     * by default, will NOT release tickets for finalized transactions
572
-     *
573
-     * @param    EE_Transaction $transaction
574
-     * @return int
575
-     * @throws EE_Error
576
-     * @throws InvalidSessionDataException
577
-     */
578
-    protected function _release_all_reserved_tickets_for_transaction(EE_Transaction $transaction)
579
-    {
580
-        if (self::debug) {
581
-            echo '<br /><br /> ' . __LINE__ . ') ' . __METHOD__ . '() ';
582
-            echo '<br /> . transaction->ID: ' . $transaction->ID();
583
-            echo '<br /> . TXN status_ID: ' . $transaction->status_ID();
584
-        }
585
-        // check if 'finalize_registration' step has been completed...
586
-        $finalized = $transaction->reg_step_completed('finalize_registration');
587
-        if (self::debug) {
588
-            // DEBUG LOG
589
-            EEH_Debug_Tools::log(
590
-                __CLASS__,
591
-                __FUNCTION__,
592
-                __LINE__,
593
-                array('finalized' => $finalized),
594
-                false,
595
-                'EE_Transaction: ' . $transaction->ID()
596
-            );
597
-        }
598
-        // how many tickets were released
599
-        $count = 0;
600
-        if (self::debug) {
601
-            echo '<br /> . . . TXN finalized: ' . $finalized;
602
-        }
603
-        $release_tickets_with_TXN_status = array(
604
-            EEM_Transaction::failed_status_code,
605
-            EEM_Transaction::abandoned_status_code,
606
-            EEM_Transaction::incomplete_status_code,
607
-        );
608
-        $events = array();
609
-        // if the session is getting cleared BEFORE the TXN has been finalized or the transaction is not completed
610
-        if (! $finalized || in_array($transaction->status_ID(), $release_tickets_with_TXN_status, true)) {
611
-            // cancel any reserved tickets for registrations that were not approved
612
-            $registrations = $transaction->registrations();
613
-            if (self::debug) {
614
-                echo '<br /> . . . # registrations: ' . count($registrations);
615
-                $reg    = reset($registrations);
616
-                $ticket = $reg->ticket();
617
-                if ($ticket instanceof EE_Ticket) {
618
-                    $ticket->add_extra_meta(
619
-                        EE_Ticket::META_KEY_TICKET_RESERVATIONS,
620
-                        __LINE__ . ') Release All Tickets TXN:' . $transaction->ID()
621
-                    );
622
-                }
623
-            }
624
-            if (! empty($registrations)) {
625
-                foreach ($registrations as $registration) {
626
-                    if (
627
-                        $registration instanceof EE_Registration
628
-                        && $this->_release_reserved_ticket_for_registration($registration, $transaction)
629
-                    ) {
630
-                        $count++;
631
-                        $events[ $registration->event_ID() ] = $registration->event();
632
-                    }
633
-                }
634
-            }
635
-        }
636
-        if ($events !== array()) {
637
-            foreach ($events as $event) {
638
-                /** @var EE_Event $event */
639
-                $event->perform_sold_out_status_check();
640
-            }
641
-        }
642
-        return $count;
643
-    }
644
-
645
-
646
-
647
-    /**
648
-     * releases reserved tickets for an EE_Registration
649
-     * by default, will NOT release tickets for APPROVED registrations
650
-     *
651
-     * @param EE_Registration $registration
652
-     * @param EE_Transaction  $transaction
653
-     * @return int
654
-     * @throws EE_Error
655
-     */
656
-    protected function _release_reserved_ticket_for_registration(
657
-        EE_Registration $registration,
658
-        EE_Transaction $transaction
659
-    ) {
660
-        $STS_ID = $transaction->status_ID();
661
-        if (self::debug) {
662
-            echo '<br /><br /> ' . __LINE__ . ') ' . __METHOD__ . '() ';
663
-            echo '<br /> . . registration->ID: ' . $registration->ID();
664
-            echo '<br /> . . registration->status_ID: ' . $registration->status_ID();
665
-            echo '<br /> . . transaction->status_ID(): ' . $STS_ID;
666
-        }
667
-        if (
668
-            // release Tickets for Failed Transactions and Abandoned Transactions
669
-            $STS_ID === EEM_Transaction::failed_status_code
670
-            || $STS_ID === EEM_Transaction::abandoned_status_code
671
-            || (
672
-                // also release Tickets for Incomplete Transactions, but ONLY if the Registrations are NOT Approved
673
-                $STS_ID === EEM_Transaction::incomplete_status_code
674
-                && $registration->status_ID() !== EEM_Registration::status_id_approved
675
-            )
676
-        ) {
677
-            if (self::debug) {
678
-                echo '<br /><br /> . . RELEASE RESERVED TICKET';
679
-                $rsrvd = $registration->get_extra_meta(EE_Registration::HAS_RESERVED_TICKET_KEY, true);
680
-                echo '<br /> . . . registration HAS_RESERVED_TICKET_KEY: ';
681
-                var_dump($rsrvd);
682
-            }
683
-            $registration->release_reserved_ticket(true, 'TicketSalesMonitor:'. __LINE__);
684
-            return 1;
685
-        }
686
-        return 0;
687
-    }
688
-
689
-
690
-
691
-    /********************************** SESSION_CART_RESET  **********************************/
692
-
693
-
694
-
695
-    /**
696
-     * callback hooked into 'AHEE__EE_Session__reset_cart__before_reset'
697
-     *
698
-     * @param EE_Session $session
699
-     * @return void
700
-     * @throws EE_Error
701
-     * @throws InvalidArgumentException
702
-     * @throws ReflectionException
703
-     * @throws InvalidDataTypeException
704
-     * @throws InvalidInterfaceException
705
-     */
706
-    public static function session_cart_reset(EE_Session $session)
707
-    {
708
-        if (self::debug) {
709
-            echo '<br /><br /> ' . __LINE__ . ') ' . __METHOD__ . '() ';
710
-        }
711
-        // first check of the session has a valid Checkout object
712
-        $checkout = $session->checkout();
713
-        if ($checkout instanceof EE_Checkout) {
714
-            // and use that to clear ticket reservations because it will update the associated registration meta data
715
-            EED_Ticket_Sales_Monitor::instance()->_session_checkout_reset($checkout);
716
-            return;
717
-        }
718
-        $cart = $session->cart();
719
-        if ($cart instanceof EE_Cart) {
720
-            if (self::debug) {
721
-                echo '<br /><br /> cart instance of EE_Cart: ';
722
-            }
723
-            EED_Ticket_Sales_Monitor::instance()->_session_cart_reset($cart, $session);
724
-        } else {
725
-            if (self::debug) {
726
-                echo '<br /><br /> invalid EE_Cart: ';
727
-                var_export($cart, true);
728
-            }
729
-        }
730
-    }
731
-
732
-
733
-
734
-    /**
735
-     * releases reserved tickets in the EE_Cart
736
-     *
737
-     * @param EE_Cart $cart
738
-     * @return void
739
-     * @throws EE_Error
740
-     * @throws InvalidArgumentException
741
-     * @throws ReflectionException
742
-     * @throws InvalidDataTypeException
743
-     * @throws InvalidInterfaceException
744
-     */
745
-    protected function _session_cart_reset(EE_Cart $cart, EE_Session $session)
746
-    {
747
-        if (self::debug) {
748
-            echo '<br /><br /> ' . __LINE__ . ') ' . __METHOD__ . '() ';
749
-        }
750
-        EE_Registry::instance()->load_helper('Line_Item');
751
-        $ticket_line_items = $cart->get_tickets();
752
-        if (empty($ticket_line_items)) {
753
-            return;
754
-        }
755
-        foreach ($ticket_line_items as $ticket_line_item) {
756
-            if (self::debug) {
757
-                echo '<br /> . ticket_line_item->ID(): ' . $ticket_line_item->ID();
758
-            }
759
-            if ($ticket_line_item instanceof EE_Line_Item && $ticket_line_item->OBJ_type() === 'Ticket') {
760
-                if (self::debug) {
761
-                    echo '<br /> . . ticket_line_item->OBJ_ID(): ' . $ticket_line_item->OBJ_ID();
762
-                }
763
-                $ticket = EEM_Ticket::instance()->get_one_by_ID($ticket_line_item->OBJ_ID());
764
-                if ($ticket instanceof EE_Ticket) {
765
-                    if (self::debug) {
766
-                        echo '<br /> . . ticket->ID(): ' . $ticket->ID();
767
-                        echo '<br /> . . ticket_line_item->quantity(): ' . $ticket_line_item->quantity();
768
-                    }
769
-                    $ticket->add_extra_meta(
770
-                        EE_Ticket::META_KEY_TICKET_RESERVATIONS,
771
-                        __LINE__ . ') ' . __METHOD__ . '() SID = ' . $session->id()
772
-                    );
773
-                    $this->_release_reserved_ticket($ticket, $ticket_line_item->quantity());
774
-                }
775
-            }
776
-        }
777
-        if (self::debug) {
778
-            echo '<br /><br /> RESET COMPLETED ';
779
-        }
780
-    }
781
-
782
-
783
-
784
-    /********************************** SESSION_CHECKOUT_RESET  **********************************/
785
-
786
-
787
-
788
-    /**
789
-     * callback hooked into 'AHEE__EE_Session__reset_checkout__before_reset'
790
-     *
791
-     * @param EE_Session $session
792
-     * @return void
793
-     * @throws EE_Error
794
-     * @throws InvalidSessionDataException
795
-     */
796
-    public static function session_checkout_reset(EE_Session $session)
797
-    {
798
-        $checkout = $session->checkout();
799
-        if ($checkout instanceof EE_Checkout) {
800
-            EED_Ticket_Sales_Monitor::instance()->_session_checkout_reset($checkout);
801
-        }
802
-    }
803
-
804
-
805
-
806
-    /**
807
-     * releases reserved tickets for the EE_Checkout->transaction
808
-     *
809
-     * @param EE_Checkout $checkout
810
-     * @return void
811
-     * @throws EE_Error
812
-     * @throws InvalidSessionDataException
813
-     */
814
-    protected function _session_checkout_reset(EE_Checkout $checkout)
815
-    {
816
-        if (self::debug) {
817
-            echo '<br /><br /> ' . __LINE__ . ') ' . __METHOD__ . '() ';
818
-        }
819
-        // we want to release the each registration's reserved tickets if the session was cleared, but not if this is a revisit
820
-        if ($checkout->revisit || ! $checkout->transaction instanceof EE_Transaction) {
821
-            return;
822
-        }
823
-        $this->_release_all_reserved_tickets_for_transaction($checkout->transaction);
824
-    }
825
-
826
-
827
-
828
-    /********************************** SESSION_EXPIRED_RESET  **********************************/
829
-
830
-
831
-
832
-    /**
833
-     * @param    EE_Session $session
834
-     * @return    void
835
-     */
836
-    public static function session_expired_reset(EE_Session $session)
837
-    {
838
-    }
839
-
840
-
841
-
842
-    /********************************** PROCESS_ABANDONED_TRANSACTIONS  **********************************/
843
-
844
-
845
-
846
-    /**
847
-     * releases reserved tickets for all registrations of an ABANDONED EE_Transaction
848
-     * by default, will NOT release tickets for free transactions, or any that have received a payment
849
-     *
850
-     * @param EE_Transaction $transaction
851
-     * @return void
852
-     * @throws EE_Error
853
-     * @throws InvalidSessionDataException
854
-     */
855
-    public static function process_abandoned_transactions(EE_Transaction $transaction)
856
-    {
857
-        // is this TXN free or has any money been paid towards this TXN? If so, then leave it alone
858
-        if ($transaction->is_free() || $transaction->paid() > 0) {
859
-            if (self::debug) {
860
-                // DEBUG LOG
861
-                EEH_Debug_Tools::log(
862
-                    __CLASS__,
863
-                    __FUNCTION__,
864
-                    __LINE__,
865
-                    array($transaction),
866
-                    false,
867
-                    'EE_Transaction: ' . $transaction->ID()
868
-                );
869
-            }
870
-            return;
871
-        }
872
-        // have their been any successful payments made ?
873
-        $payments = $transaction->payments();
874
-        foreach ($payments as $payment) {
875
-            if ($payment instanceof EE_Payment && $payment->status() === EEM_Payment::status_id_approved) {
876
-                if (self::debug) {
877
-                    // DEBUG LOG
878
-                    EEH_Debug_Tools::log(
879
-                        __CLASS__,
880
-                        __FUNCTION__,
881
-                        __LINE__,
882
-                        array($payment),
883
-                        false,
884
-                        'EE_Transaction: ' . $transaction->ID()
885
-                    );
886
-                }
887
-                return;
888
-            }
889
-        }
890
-        // since you haven't even attempted to pay for your ticket...
891
-        EED_Ticket_Sales_Monitor::instance()->_release_all_reserved_tickets_for_transaction($transaction);
892
-    }
893
-
894
-
895
-
896
-    /********************************** PROCESS_FAILED_TRANSACTIONS  **********************************/
897
-
898
-
899
-
900
-    /**
901
-     * releases reserved tickets for absolutely ALL registrations of a FAILED EE_Transaction
902
-     *
903
-     * @param EE_Transaction $transaction
904
-     * @return void
905
-     * @throws EE_Error
906
-     * @throws InvalidSessionDataException
907
-     */
908
-    public static function process_failed_transactions(EE_Transaction $transaction)
909
-    {
910
-        // since you haven't even attempted to pay for your ticket...
911
-        EED_Ticket_Sales_Monitor::instance()->_release_all_reserved_tickets_for_transaction($transaction);
912
-    }
913
-
914
-
915
-
916
-    /********************************** RESET RESERVATION COUNTS  *********************************/
917
-
918
-
919
-
920
-    /**
921
-     * Resets all ticket and datetime reserved counts to zero
922
-     * Tickets that are currently associated with a Transaction that is in progress
923
-     *
924
-     * @throws EE_Error
925
-     * @throws DomainException
926
-     * @throws InvalidDataTypeException
927
-     * @throws InvalidInterfaceException
928
-     * @throws InvalidArgumentException
929
-     * @throws UnexpectedEntityException
930
-     */
931
-    public static function reset_reservation_counts()
932
-    {
933
-        /** @var EE_Line_Item[] $valid_reserved_tickets */
934
-        $valid_reserved_tickets = array();
935
-        /** @var EE_Transaction[] $transactions_not_in_progress */
936
-        $transactions_not_in_progress = EEM_Transaction::instance()->get_transactions_not_in_progress();
937
-        foreach ($transactions_not_in_progress as $transaction) {
938
-            // if this TXN has been fully completed, then skip it
939
-            if ($transaction->reg_step_completed('finalize_registration')) {
940
-                continue;
941
-            }
942
-            $total_line_item = $transaction->total_line_item();
943
-            // $transaction_in_progress->line
944
-            if (! $total_line_item instanceof EE_Line_Item) {
945
-                throw new DomainException(
946
-                    esc_html__(
947
-                        'Transaction does not have a valid Total Line Item associated with it.',
948
-                        'event_espresso'
949
-                    )
950
-                );
951
-            }
952
-            $valid_reserved_tickets += EED_Ticket_Sales_Monitor::get_ticket_line_items_for_grand_total(
953
-                $total_line_item
954
-            );
955
-        }
956
-        $total_line_items = EEM_Line_Item::instance()->get_total_line_items_for_active_carts();
957
-        foreach ($total_line_items as $total_line_item) {
958
-            $valid_reserved_tickets += EED_Ticket_Sales_Monitor::get_ticket_line_items_for_grand_total(
959
-                $total_line_item
960
-            );
961
-        }
962
-        $tickets_with_reservations = EEM_Ticket::instance()->get_tickets_with_reservations();
963
-        return EED_Ticket_Sales_Monitor::release_reservations_for_tickets(
964
-            $tickets_with_reservations,
965
-            $valid_reserved_tickets,
966
-            __FUNCTION__
967
-        );
968
-    }
969
-
970
-
971
-
972
-    /**
973
-     * @param EE_Line_Item $total_line_item
974
-     * @return EE_Line_Item[]
975
-     */
976
-    private static function get_ticket_line_items_for_grand_total(EE_Line_Item $total_line_item)
977
-    {
978
-        /** @var EE_Line_Item[] $valid_reserved_tickets */
979
-        $valid_reserved_tickets = array();
980
-        $ticket_line_items      = EEH_Line_Item::get_ticket_line_items($total_line_item);
981
-        foreach ($ticket_line_items as $ticket_line_item) {
982
-            if ($ticket_line_item instanceof EE_Line_Item) {
983
-                $valid_reserved_tickets[] = $ticket_line_item;
984
-            }
985
-        }
986
-        return $valid_reserved_tickets;
987
-    }
988
-
989
-
990
-
991
-    /**
992
-     * @param EE_Ticket[]    $tickets_with_reservations
993
-     * @param EE_Line_Item[] $valid_reserved_ticket_line_items
994
-     * @return int
995
-     * @throws UnexpectedEntityException
996
-     * @throws DomainException
997
-     * @throws EE_Error
998
-     */
999
-    private static function release_reservations_for_tickets(
1000
-        array $tickets_with_reservations,
1001
-        array $valid_reserved_ticket_line_items = array(),
1002
-        $source
1003
-    ) {
1004
-        $total_tickets_released = 0;
1005
-        $sold_out_events = array();
1006
-        foreach ($tickets_with_reservations as $ticket_with_reservations) {
1007
-            if (! $ticket_with_reservations instanceof EE_Ticket) {
1008
-                continue;
1009
-            }
1010
-            $reserved_qty = $ticket_with_reservations->reserved();
1011
-            foreach ($valid_reserved_ticket_line_items as $valid_reserved_ticket_line_item) {
1012
-                if (
1013
-                    $valid_reserved_ticket_line_item instanceof EE_Line_Item
1014
-                    && $valid_reserved_ticket_line_item->OBJ_ID() === $ticket_with_reservations->ID()
1015
-                ) {
1016
-                    $reserved_qty -= $valid_reserved_ticket_line_item->quantity();
1017
-                }
1018
-            }
1019
-            if ($reserved_qty > 0) {
1020
-                $ticket_with_reservations->add_extra_meta(
1021
-                    EE_Ticket::META_KEY_TICKET_RESERVATIONS,
1022
-                    __LINE__ . ') ' . $source . '()'
1023
-                );
1024
-                $ticket_with_reservations->decrease_reserved($reserved_qty, true, 'TicketSalesMonitor:'. __LINE__);
1025
-                $ticket_with_reservations->save();
1026
-                $total_tickets_released += $reserved_qty;
1027
-                $event = $ticket_with_reservations->get_related_event();
1028
-                // track sold out events
1029
-                if ($event instanceof EE_Event && $event->is_sold_out()) {
1030
-                    $sold_out_events[] = $event;
1031
-                }
1032
-            }
1033
-        }
1034
-        // double check whether sold out events should remain sold out after releasing tickets
1035
-        if($sold_out_events !== array()){
1036
-            foreach ($sold_out_events as $sold_out_event) {
1037
-                /** @var EE_Event $sold_out_event */
1038
-                $sold_out_event->perform_sold_out_status_check();
1039
-            }
1040
-        }
1041
-        return $total_tickets_released;
1042
-    }
1043
-
1044
-
1045
-
1046
-    /********************************** SHUTDOWN  **********************************/
1047
-
1048
-
1049
-
1050
-    /**
1051
-     * @return false|int
1052
-     * @throws EE_Error
1053
-     * @throws InvalidArgumentException
1054
-     * @throws InvalidDataTypeException
1055
-     * @throws InvalidInterfaceException
1056
-     */
1057
-    public static function clear_expired_line_items_with_no_transaction()
1058
-    {
1059
-        /** @type WPDB $wpdb */
1060
-        global $wpdb;
1061
-        return $wpdb->query(
1062
-            $wpdb->prepare(
1063
-                'DELETE FROM ' . EEM_Line_Item::instance()->table() . '
26
+	const debug = false;    //	true false
27
+
28
+	/**
29
+	 * an array of raw ticket data from EED_Ticket_Selector
30
+	 *
31
+	 * @var array $ticket_selections
32
+	 */
33
+	protected $ticket_selections = array();
34
+
35
+	/**
36
+	 * the raw ticket data from EED_Ticket_Selector is organized in rows
37
+	 * according to how they are displayed in the actual Ticket_Selector
38
+	 * this tracks the current row being processed
39
+	 *
40
+	 * @var int $current_row
41
+	 */
42
+	protected $current_row = 0;
43
+
44
+	/**
45
+	 * an array for tracking names of tickets that have sold out
46
+	 *
47
+	 * @var array $sold_out_tickets
48
+	 */
49
+	protected $sold_out_tickets = array();
50
+
51
+	/**
52
+	 * an array for tracking names of tickets that have had their quantities reduced
53
+	 *
54
+	 * @var array $decremented_tickets
55
+	 */
56
+	protected $decremented_tickets = array();
57
+
58
+
59
+
60
+	/**
61
+	 * set_hooks - for hooking into EE Core, other modules, etc
62
+	 *
63
+	 * @return    void
64
+	 */
65
+	public static function set_hooks()
66
+	{
67
+		// release tickets for expired carts
68
+		add_action(
69
+			'EED_Ticket_Selector__process_ticket_selections__before',
70
+			array('EED_Ticket_Sales_Monitor', 'release_tickets_for_expired_carts'),
71
+			1
72
+		);
73
+		// check ticket reserves AFTER MER does it's check (hence priority 20)
74
+		add_filter(
75
+			'FHEE__EE_Ticket_Selector___add_ticket_to_cart__ticket_qty',
76
+			array('EED_Ticket_Sales_Monitor', 'validate_ticket_sale'),
77
+			20,
78
+			3
79
+		);
80
+		// add notices for sold out tickets
81
+		add_action(
82
+			'AHEE__EE_Ticket_Selector__process_ticket_selections__after_tickets_added_to_cart',
83
+			array('EED_Ticket_Sales_Monitor', 'post_notices'),
84
+			10
85
+		);
86
+		// handle ticket quantities adjusted in cart
87
+		//add_action(
88
+		//	'FHEE__EED_Multi_Event_Registration__adjust_line_item_quantity__line_item_quantity_updated',
89
+		//	array( 'EED_Ticket_Sales_Monitor', 'ticket_quantity_updated' ),
90
+		//	10, 2
91
+		//);
92
+		// handle tickets deleted from cart
93
+		add_action(
94
+			'FHEE__EED_Multi_Event_Registration__delete_ticket__ticket_removed_from_cart',
95
+			array('EED_Ticket_Sales_Monitor', 'ticket_removed_from_cart'),
96
+			10,
97
+			2
98
+		);
99
+		// handle emptied carts
100
+		add_action(
101
+			'AHEE__EE_Session__reset_cart__before_reset',
102
+			array('EED_Ticket_Sales_Monitor', 'session_cart_reset'),
103
+			10,
104
+			1
105
+		);
106
+		add_action(
107
+			'AHEE__EED_Multi_Event_Registration__empty_event_cart__before_delete_cart',
108
+			array('EED_Ticket_Sales_Monitor', 'session_cart_reset'),
109
+			10,
110
+			1
111
+		);
112
+		// handle cancelled registrations
113
+		add_action(
114
+			'AHEE__EE_Session__reset_checkout__before_reset',
115
+			array('EED_Ticket_Sales_Monitor', 'session_checkout_reset'),
116
+			10,
117
+			1
118
+		);
119
+		// cron tasks
120
+		add_action(
121
+			'AHEE__EE_Cron_Tasks__process_expired_transactions__abandoned_transaction',
122
+			array('EED_Ticket_Sales_Monitor', 'process_abandoned_transactions'),
123
+			10,
124
+			1
125
+		);
126
+		add_action(
127
+			'AHEE__EE_Cron_Tasks__process_expired_transactions__incomplete_transaction',
128
+			array('EED_Ticket_Sales_Monitor', 'process_abandoned_transactions'),
129
+			10,
130
+			1
131
+		);
132
+		add_action(
133
+			'AHEE__EE_Cron_Tasks__process_expired_transactions__failed_transaction',
134
+			array('EED_Ticket_Sales_Monitor', 'process_failed_transactions'),
135
+			10,
136
+			1
137
+		);
138
+	}
139
+
140
+
141
+
142
+	/**
143
+	 * set_hooks_admin - for hooking into EE Admin Core, other modules, etc
144
+	 *
145
+	 * @return void
146
+	 */
147
+	public static function set_hooks_admin()
148
+	{
149
+		EED_Ticket_Sales_Monitor::set_hooks();
150
+	}
151
+
152
+
153
+
154
+	/**
155
+	 * @return EED_Ticket_Sales_Monitor|EED_Module
156
+	 */
157
+	public static function instance()
158
+	{
159
+		return parent::get_instance(__CLASS__);
160
+	}
161
+
162
+
163
+
164
+	/**
165
+	 * @param WP_Query $WP_Query
166
+	 * @return    void
167
+	 */
168
+	public function run($WP_Query)
169
+	{
170
+	}
171
+
172
+
173
+
174
+	/********************************** PRE_TICKET_SALES  **********************************/
175
+
176
+
177
+
178
+	/**
179
+	 * Retrieves grand totals from the line items that have no TXN ID
180
+	 * and timestamps less than the current time minus the session lifespan.
181
+	 * These are carts that have been abandoned before the "registrant" even attempted to checkout.
182
+	 * We're going to release the tickets for these line items before attempting to add more to the cart.
183
+	 *
184
+	 * @return void
185
+	 * @throws DomainException
186
+	 * @throws EE_Error
187
+	 * @throws InvalidArgumentException
188
+	 * @throws InvalidDataTypeException
189
+	 * @throws InvalidInterfaceException
190
+	 * @throws UnexpectedEntityException
191
+	 */
192
+	public static function release_tickets_for_expired_carts()
193
+	{
194
+		do_action('AHEE__EED_Ticket_Sales_Monitor__release_tickets_for_expired_carts__begin');
195
+		$expired_ticket_IDs      = array();
196
+		$valid_ticket_line_items = array();
197
+		$total_line_items        = EEM_Line_Item::instance()->get_total_line_items_with_no_transaction();
198
+		if (empty($total_line_items)) {
199
+			do_action(
200
+				'AHEE__EED_Ticket_Sales_Monitor__release_tickets_for_expired_carts__end',
201
+				$total_line_items,
202
+				$valid_ticket_line_items,
203
+				$expired_ticket_IDs
204
+			);
205
+			return;
206
+		}
207
+		$expired = current_time('timestamp') - EE_Registry::instance()->SSN->lifespan();
208
+		foreach ($total_line_items as $total_line_item) {
209
+			/** @var EE_Line_Item $total_line_item */
210
+			$ticket_line_items = EED_Ticket_Sales_Monitor::get_ticket_line_items_for_grand_total($total_line_item);
211
+			foreach ($ticket_line_items as $ticket_line_item) {
212
+				if (! $ticket_line_item instanceof EE_Line_Item) {
213
+					continue;
214
+				}
215
+				if ($total_line_item->timestamp(true) <= $expired) {
216
+					$expired_ticket_IDs[ $ticket_line_item->OBJ_ID() ] = $ticket_line_item->OBJ_ID();
217
+				} else {
218
+					$valid_ticket_line_items[ $ticket_line_item->OBJ_ID() ] = $ticket_line_item;
219
+				}
220
+			}
221
+		}
222
+		if (! empty($expired_ticket_IDs)) {
223
+			EED_Ticket_Sales_Monitor::release_reservations_for_tickets(
224
+				\EEM_Ticket::instance()->get_tickets_with_IDs($expired_ticket_IDs),
225
+				$valid_ticket_line_items,
226
+				__FUNCTION__
227
+			);
228
+			// let's get rid of expired line items so that they can't interfere with tracking
229
+			add_action(
230
+				'shutdown',
231
+				array('EED_Ticket_Sales_Monitor', 'clear_expired_line_items_with_no_transaction'),
232
+				999
233
+			);
234
+		}
235
+		do_action(
236
+			'AHEE__EED_Ticket_Sales_Monitor__release_tickets_for_expired_carts__end',
237
+			$total_line_items,
238
+			$valid_ticket_line_items,
239
+			$expired_ticket_IDs
240
+		);
241
+	}
242
+
243
+
244
+
245
+	/********************************** VALIDATE_TICKET_SALE  **********************************/
246
+
247
+
248
+
249
+	/**
250
+	 * callback for 'FHEE__EED_Ticket_Selector__process_ticket_selections__valid_post_data'
251
+	 *
252
+	 * @param int       $qty
253
+	 * @param EE_Ticket $ticket
254
+	 * @return bool
255
+	 * @throws UnexpectedEntityException
256
+	 * @throws EE_Error
257
+	 */
258
+	public static function validate_ticket_sale($qty = 1, EE_Ticket $ticket)
259
+	{
260
+		$qty = absint($qty);
261
+		if ($qty > 0) {
262
+			$qty = EED_Ticket_Sales_Monitor::instance()->_validate_ticket_sale($ticket, $qty);
263
+		}
264
+		if (self::debug) {
265
+			echo '<br /><br /> ' . __LINE__ . ') ' . __METHOD__ . '()';
266
+			echo '<br /><br /><b> RETURNED QTY: ' . $qty . '</b>';
267
+		}
268
+		return $qty;
269
+	}
270
+
271
+
272
+
273
+	/**
274
+	 * checks whether an individual ticket is available for purchase based on datetime, and ticket details
275
+	 *
276
+	 * @param   EE_Ticket $ticket
277
+	 * @param int         $qty
278
+	 * @return int
279
+	 * @throws UnexpectedEntityException
280
+	 * @throws EE_Error
281
+	 */
282
+	protected function _validate_ticket_sale(EE_Ticket $ticket, $qty = 1)
283
+	{
284
+		if (self::debug) {
285
+			echo '<br /><br /> ' . __LINE__ . ') ' . __METHOD__ . '() ';
286
+		}
287
+		if (! $ticket instanceof EE_Ticket) {
288
+			return 0;
289
+		}
290
+		if (self::debug) {
291
+			echo '<br /><b> . ticket->ID: ' . $ticket->ID() . '</b>';
292
+			echo '<br /> . original ticket->reserved: ' . $ticket->reserved();
293
+		}
294
+		$ticket->refresh_from_db();
295
+		// first let's determine the ticket availability based on sales
296
+		$available = $ticket->qty('saleable');
297
+		if (self::debug) {
298
+			echo '<br /> . . . ticket->qty: ' . $ticket->qty();
299
+			echo '<br /> . . . ticket->sold: ' . $ticket->sold();
300
+			echo '<br /> . . . ticket->reserved: ' . $ticket->reserved();
301
+			echo '<br /> . . . ticket->qty(saleable): ' . $ticket->qty('saleable');
302
+			echo '<br /> . . . available: ' . $available;
303
+		}
304
+		if ($available < 1) {
305
+			$this->_ticket_sold_out($ticket);
306
+			return 0;
307
+		}
308
+		if (self::debug) {
309
+			echo '<br /> . . . qty: ' . $qty;
310
+		}
311
+		if ($available < $qty) {
312
+			$qty = $available;
313
+			if (self::debug) {
314
+				echo '<br /> . . . QTY ADJUSTED: ' . $qty;
315
+			}
316
+			$this->_ticket_quantity_decremented($ticket);
317
+		}
318
+		$this->_reserve_ticket($ticket, $qty);
319
+		return $qty;
320
+	}
321
+
322
+
323
+
324
+	/**
325
+	 * increments ticket reserved based on quantity passed
326
+	 *
327
+	 * @param    EE_Ticket $ticket
328
+	 * @param int          $quantity
329
+	 * @return bool
330
+	 * @throws EE_Error
331
+	 */
332
+	protected function _reserve_ticket(EE_Ticket $ticket, $quantity = 1)
333
+	{
334
+		if (self::debug) {
335
+			echo '<br /><br /> . . . INCREASE RESERVED: ' . $quantity;
336
+		}
337
+		$ticket->increase_reserved($quantity, 'TicketSalesMonitor:'. __LINE__);
338
+		return $ticket->save();
339
+	}
340
+
341
+
342
+
343
+	/**
344
+	 * @param  EE_Ticket $ticket
345
+	 * @param  int       $quantity
346
+	 * @return bool
347
+	 * @throws EE_Error
348
+	 */
349
+	protected function _release_reserved_ticket(EE_Ticket $ticket, $quantity = 1)
350
+	{
351
+		if (self::debug) {
352
+			echo '<br /> . . . ticket->ID: ' . $ticket->ID();
353
+			echo '<br /> . . . ticket->reserved: ' . $ticket->reserved();
354
+		}
355
+		$ticket->decrease_reserved($quantity, true, 'TicketSalesMonitor:'. __LINE__);
356
+		if (self::debug) {
357
+			echo '<br /> . . . ticket->reserved: ' . $ticket->reserved();
358
+		}
359
+		return $ticket->save() ? 1 : 0;
360
+	}
361
+
362
+
363
+
364
+	/**
365
+	 * removes quantities within the ticket selector based on zero ticket availability
366
+	 *
367
+	 * @param    EE_Ticket $ticket
368
+	 * @return    void
369
+	 * @throws UnexpectedEntityException
370
+	 * @throws EE_Error
371
+	 */
372
+	protected function _ticket_sold_out(EE_Ticket $ticket)
373
+	{
374
+		if (self::debug) {
375
+			echo '<br /><br /> ' . __LINE__ . ') ' . __METHOD__ . '() ';
376
+			echo '<br /> . . ticket->name: ' . $this->_get_ticket_and_event_name($ticket);
377
+		}
378
+		$this->sold_out_tickets[] = $this->_get_ticket_and_event_name($ticket);
379
+	}
380
+
381
+
382
+
383
+	/**
384
+	 * adjusts quantities within the ticket selector based on decreased ticket availability
385
+	 *
386
+	 * @param    EE_Ticket $ticket
387
+	 * @return void
388
+	 * @throws UnexpectedEntityException
389
+	 * @throws EE_Error
390
+	 */
391
+	protected function _ticket_quantity_decremented(EE_Ticket $ticket)
392
+	{
393
+		if (self::debug) {
394
+			echo '<br /><br /> ' . __LINE__ . ') ' . __METHOD__ . '() ';
395
+			echo '<br /> . . ticket->name: ' . $this->_get_ticket_and_event_name($ticket);
396
+		}
397
+		$this->decremented_tickets[] = $this->_get_ticket_and_event_name($ticket);
398
+	}
399
+
400
+
401
+
402
+	/**
403
+	 * builds string out of ticket and event name
404
+	 *
405
+	 * @param    EE_Ticket $ticket
406
+	 * @return string
407
+	 * @throws UnexpectedEntityException
408
+	 * @throws EE_Error
409
+	 */
410
+	protected function _get_ticket_and_event_name(EE_Ticket $ticket)
411
+	{
412
+		$event = $ticket->get_related_event();
413
+		if ($event instanceof EE_Event) {
414
+			$ticket_name = sprintf(
415
+				_x('%1$s for %2$s', 'ticket name for event name', 'event_espresso'),
416
+				$ticket->name(),
417
+				$event->name()
418
+			);
419
+		} else {
420
+			$ticket_name = $ticket->name();
421
+		}
422
+		return $ticket_name;
423
+	}
424
+
425
+
426
+
427
+	/********************************** EVENT CART  **********************************/
428
+
429
+
430
+
431
+	/**
432
+	 * releases or reserves ticket(s) based on quantity passed
433
+	 *
434
+	 * @param  EE_Line_Item $line_item
435
+	 * @param  int          $quantity
436
+	 * @return void
437
+	 * @throws EE_Error
438
+	 * @throws InvalidArgumentException
439
+	 * @throws InvalidDataTypeException
440
+	 * @throws InvalidInterfaceException
441
+	 */
442
+	public static function ticket_quantity_updated(EE_Line_Item $line_item, $quantity = 1)
443
+	{
444
+		$ticket = EEM_Ticket::instance()->get_one_by_ID(absint($line_item->OBJ_ID()));
445
+		if ($ticket instanceof EE_Ticket) {
446
+			$ticket->add_extra_meta(
447
+				EE_Ticket::META_KEY_TICKET_RESERVATIONS,
448
+				__LINE__ . ') ' . __METHOD__ . '()'
449
+			);
450
+			if ($quantity > 0) {
451
+				EED_Ticket_Sales_Monitor::instance()->_reserve_ticket($ticket, $quantity);
452
+			} else {
453
+				EED_Ticket_Sales_Monitor::instance()->_release_reserved_ticket($ticket, $quantity);
454
+			}
455
+		}
456
+	}
457
+
458
+
459
+
460
+	/**
461
+	 * releases reserved ticket(s) based on quantity passed
462
+	 *
463
+	 * @param  EE_Ticket $ticket
464
+	 * @param  int       $quantity
465
+	 * @return void
466
+	 * @throws EE_Error
467
+	 */
468
+	public static function ticket_removed_from_cart(EE_Ticket $ticket, $quantity = 1)
469
+	{
470
+		$ticket->add_extra_meta(
471
+			EE_Ticket::META_KEY_TICKET_RESERVATIONS,
472
+			__LINE__ . ') ' . __METHOD__ . '()'
473
+		);
474
+		EED_Ticket_Sales_Monitor::instance()->_release_reserved_ticket($ticket, $quantity);
475
+	}
476
+
477
+
478
+
479
+	/********************************** POST_NOTICES  **********************************/
480
+
481
+
482
+
483
+	/**
484
+	 * @return void
485
+	 * @throws EE_Error
486
+	 * @throws InvalidArgumentException
487
+	 * @throws ReflectionException
488
+	 * @throws InvalidDataTypeException
489
+	 * @throws InvalidInterfaceException
490
+	 */
491
+	public static function post_notices()
492
+	{
493
+		EED_Ticket_Sales_Monitor::instance()->_post_notices();
494
+	}
495
+
496
+
497
+
498
+	/**
499
+	 * @return void
500
+	 * @throws EE_Error
501
+	 * @throws InvalidArgumentException
502
+	 * @throws ReflectionException
503
+	 * @throws InvalidDataTypeException
504
+	 * @throws InvalidInterfaceException
505
+	 */
506
+	protected function _post_notices()
507
+	{
508
+		if (self::debug) {
509
+			echo '<br /><br /> ' . __LINE__ . ') ' . __METHOD__ . '() ';
510
+		}
511
+		$refresh_msg    = '';
512
+		$none_added_msg = '';
513
+		if (defined('DOING_AJAX') && DOING_AJAX) {
514
+			$refresh_msg    = __(
515
+				'Please refresh the page to view updated ticket quantities.',
516
+				'event_espresso'
517
+			);
518
+			$none_added_msg = __('No tickets were added for the event.', 'event_espresso');
519
+		}
520
+		if (! empty($this->sold_out_tickets)) {
521
+			EE_Error::add_attention(
522
+				sprintf(
523
+					apply_filters(
524
+						'FHEE__EED_Ticket_Sales_Monitor___post_notices__sold_out_tickets_notice',
525
+						__(
526
+							'We\'re sorry...%1$sThe following items have sold out since you first viewed this page, and can no longer be registered for:%1$s%1$s%2$s%1$s%1$sPlease note that availability can change at any time due to cancellations, so please check back again later if registration for this event(s) is important to you.%1$s%1$s%3$s%1$s%4$s%1$s',
527
+							'event_espresso'
528
+						)
529
+					),
530
+					'<br />',
531
+					implode('<br />', $this->sold_out_tickets),
532
+					$none_added_msg,
533
+					$refresh_msg
534
+				)
535
+			);
536
+			// alter code flow in the Ticket Selector for better UX
537
+			add_filter('FHEE__EED_Ticket_Selector__process_ticket_selections__tckts_slctd', '__return_true');
538
+			add_filter('FHEE__EED_Ticket_Selector__process_ticket_selections__success', '__return_false');
539
+			$this->sold_out_tickets = array();
540
+			// and reset the cart
541
+			EED_Ticket_Sales_Monitor::session_cart_reset(EE_Registry::instance()->SSN);
542
+		}
543
+		if (! empty($this->decremented_tickets)) {
544
+			EE_Error::add_attention(
545
+				sprintf(
546
+					apply_filters(
547
+						'FHEE__EED_Ticket_Sales_Monitor___ticket_quantity_decremented__notice',
548
+						__(
549
+							'We\'re sorry...%1$sDue to sales that have occurred since you first viewed the last page, the following items have had their quantities adjusted to match the current available amount:%1$s%1$s%2$s%1$s%1$sPlease note that availability can change at any time due to cancellations, so please check back again later if registration for this event(s) is important to you.%1$s%1$s%3$s%1$s%4$s%1$s',
550
+							'event_espresso'
551
+						)
552
+					),
553
+					'<br />',
554
+					implode('<br />', $this->decremented_tickets),
555
+					$none_added_msg,
556
+					$refresh_msg
557
+				)
558
+			);
559
+			$this->decremented_tickets = array();
560
+		}
561
+	}
562
+
563
+
564
+
565
+	/********************************** RELEASE_ALL_RESERVED_TICKETS_FOR_TRANSACTION  **********************************/
566
+
567
+
568
+
569
+	/**
570
+	 * releases reserved tickets for all registrations of an EE_Transaction
571
+	 * by default, will NOT release tickets for finalized transactions
572
+	 *
573
+	 * @param    EE_Transaction $transaction
574
+	 * @return int
575
+	 * @throws EE_Error
576
+	 * @throws InvalidSessionDataException
577
+	 */
578
+	protected function _release_all_reserved_tickets_for_transaction(EE_Transaction $transaction)
579
+	{
580
+		if (self::debug) {
581
+			echo '<br /><br /> ' . __LINE__ . ') ' . __METHOD__ . '() ';
582
+			echo '<br /> . transaction->ID: ' . $transaction->ID();
583
+			echo '<br /> . TXN status_ID: ' . $transaction->status_ID();
584
+		}
585
+		// check if 'finalize_registration' step has been completed...
586
+		$finalized = $transaction->reg_step_completed('finalize_registration');
587
+		if (self::debug) {
588
+			// DEBUG LOG
589
+			EEH_Debug_Tools::log(
590
+				__CLASS__,
591
+				__FUNCTION__,
592
+				__LINE__,
593
+				array('finalized' => $finalized),
594
+				false,
595
+				'EE_Transaction: ' . $transaction->ID()
596
+			);
597
+		}
598
+		// how many tickets were released
599
+		$count = 0;
600
+		if (self::debug) {
601
+			echo '<br /> . . . TXN finalized: ' . $finalized;
602
+		}
603
+		$release_tickets_with_TXN_status = array(
604
+			EEM_Transaction::failed_status_code,
605
+			EEM_Transaction::abandoned_status_code,
606
+			EEM_Transaction::incomplete_status_code,
607
+		);
608
+		$events = array();
609
+		// if the session is getting cleared BEFORE the TXN has been finalized or the transaction is not completed
610
+		if (! $finalized || in_array($transaction->status_ID(), $release_tickets_with_TXN_status, true)) {
611
+			// cancel any reserved tickets for registrations that were not approved
612
+			$registrations = $transaction->registrations();
613
+			if (self::debug) {
614
+				echo '<br /> . . . # registrations: ' . count($registrations);
615
+				$reg    = reset($registrations);
616
+				$ticket = $reg->ticket();
617
+				if ($ticket instanceof EE_Ticket) {
618
+					$ticket->add_extra_meta(
619
+						EE_Ticket::META_KEY_TICKET_RESERVATIONS,
620
+						__LINE__ . ') Release All Tickets TXN:' . $transaction->ID()
621
+					);
622
+				}
623
+			}
624
+			if (! empty($registrations)) {
625
+				foreach ($registrations as $registration) {
626
+					if (
627
+						$registration instanceof EE_Registration
628
+						&& $this->_release_reserved_ticket_for_registration($registration, $transaction)
629
+					) {
630
+						$count++;
631
+						$events[ $registration->event_ID() ] = $registration->event();
632
+					}
633
+				}
634
+			}
635
+		}
636
+		if ($events !== array()) {
637
+			foreach ($events as $event) {
638
+				/** @var EE_Event $event */
639
+				$event->perform_sold_out_status_check();
640
+			}
641
+		}
642
+		return $count;
643
+	}
644
+
645
+
646
+
647
+	/**
648
+	 * releases reserved tickets for an EE_Registration
649
+	 * by default, will NOT release tickets for APPROVED registrations
650
+	 *
651
+	 * @param EE_Registration $registration
652
+	 * @param EE_Transaction  $transaction
653
+	 * @return int
654
+	 * @throws EE_Error
655
+	 */
656
+	protected function _release_reserved_ticket_for_registration(
657
+		EE_Registration $registration,
658
+		EE_Transaction $transaction
659
+	) {
660
+		$STS_ID = $transaction->status_ID();
661
+		if (self::debug) {
662
+			echo '<br /><br /> ' . __LINE__ . ') ' . __METHOD__ . '() ';
663
+			echo '<br /> . . registration->ID: ' . $registration->ID();
664
+			echo '<br /> . . registration->status_ID: ' . $registration->status_ID();
665
+			echo '<br /> . . transaction->status_ID(): ' . $STS_ID;
666
+		}
667
+		if (
668
+			// release Tickets for Failed Transactions and Abandoned Transactions
669
+			$STS_ID === EEM_Transaction::failed_status_code
670
+			|| $STS_ID === EEM_Transaction::abandoned_status_code
671
+			|| (
672
+				// also release Tickets for Incomplete Transactions, but ONLY if the Registrations are NOT Approved
673
+				$STS_ID === EEM_Transaction::incomplete_status_code
674
+				&& $registration->status_ID() !== EEM_Registration::status_id_approved
675
+			)
676
+		) {
677
+			if (self::debug) {
678
+				echo '<br /><br /> . . RELEASE RESERVED TICKET';
679
+				$rsrvd = $registration->get_extra_meta(EE_Registration::HAS_RESERVED_TICKET_KEY, true);
680
+				echo '<br /> . . . registration HAS_RESERVED_TICKET_KEY: ';
681
+				var_dump($rsrvd);
682
+			}
683
+			$registration->release_reserved_ticket(true, 'TicketSalesMonitor:'. __LINE__);
684
+			return 1;
685
+		}
686
+		return 0;
687
+	}
688
+
689
+
690
+
691
+	/********************************** SESSION_CART_RESET  **********************************/
692
+
693
+
694
+
695
+	/**
696
+	 * callback hooked into 'AHEE__EE_Session__reset_cart__before_reset'
697
+	 *
698
+	 * @param EE_Session $session
699
+	 * @return void
700
+	 * @throws EE_Error
701
+	 * @throws InvalidArgumentException
702
+	 * @throws ReflectionException
703
+	 * @throws InvalidDataTypeException
704
+	 * @throws InvalidInterfaceException
705
+	 */
706
+	public static function session_cart_reset(EE_Session $session)
707
+	{
708
+		if (self::debug) {
709
+			echo '<br /><br /> ' . __LINE__ . ') ' . __METHOD__ . '() ';
710
+		}
711
+		// first check of the session has a valid Checkout object
712
+		$checkout = $session->checkout();
713
+		if ($checkout instanceof EE_Checkout) {
714
+			// and use that to clear ticket reservations because it will update the associated registration meta data
715
+			EED_Ticket_Sales_Monitor::instance()->_session_checkout_reset($checkout);
716
+			return;
717
+		}
718
+		$cart = $session->cart();
719
+		if ($cart instanceof EE_Cart) {
720
+			if (self::debug) {
721
+				echo '<br /><br /> cart instance of EE_Cart: ';
722
+			}
723
+			EED_Ticket_Sales_Monitor::instance()->_session_cart_reset($cart, $session);
724
+		} else {
725
+			if (self::debug) {
726
+				echo '<br /><br /> invalid EE_Cart: ';
727
+				var_export($cart, true);
728
+			}
729
+		}
730
+	}
731
+
732
+
733
+
734
+	/**
735
+	 * releases reserved tickets in the EE_Cart
736
+	 *
737
+	 * @param EE_Cart $cart
738
+	 * @return void
739
+	 * @throws EE_Error
740
+	 * @throws InvalidArgumentException
741
+	 * @throws ReflectionException
742
+	 * @throws InvalidDataTypeException
743
+	 * @throws InvalidInterfaceException
744
+	 */
745
+	protected function _session_cart_reset(EE_Cart $cart, EE_Session $session)
746
+	{
747
+		if (self::debug) {
748
+			echo '<br /><br /> ' . __LINE__ . ') ' . __METHOD__ . '() ';
749
+		}
750
+		EE_Registry::instance()->load_helper('Line_Item');
751
+		$ticket_line_items = $cart->get_tickets();
752
+		if (empty($ticket_line_items)) {
753
+			return;
754
+		}
755
+		foreach ($ticket_line_items as $ticket_line_item) {
756
+			if (self::debug) {
757
+				echo '<br /> . ticket_line_item->ID(): ' . $ticket_line_item->ID();
758
+			}
759
+			if ($ticket_line_item instanceof EE_Line_Item && $ticket_line_item->OBJ_type() === 'Ticket') {
760
+				if (self::debug) {
761
+					echo '<br /> . . ticket_line_item->OBJ_ID(): ' . $ticket_line_item->OBJ_ID();
762
+				}
763
+				$ticket = EEM_Ticket::instance()->get_one_by_ID($ticket_line_item->OBJ_ID());
764
+				if ($ticket instanceof EE_Ticket) {
765
+					if (self::debug) {
766
+						echo '<br /> . . ticket->ID(): ' . $ticket->ID();
767
+						echo '<br /> . . ticket_line_item->quantity(): ' . $ticket_line_item->quantity();
768
+					}
769
+					$ticket->add_extra_meta(
770
+						EE_Ticket::META_KEY_TICKET_RESERVATIONS,
771
+						__LINE__ . ') ' . __METHOD__ . '() SID = ' . $session->id()
772
+					);
773
+					$this->_release_reserved_ticket($ticket, $ticket_line_item->quantity());
774
+				}
775
+			}
776
+		}
777
+		if (self::debug) {
778
+			echo '<br /><br /> RESET COMPLETED ';
779
+		}
780
+	}
781
+
782
+
783
+
784
+	/********************************** SESSION_CHECKOUT_RESET  **********************************/
785
+
786
+
787
+
788
+	/**
789
+	 * callback hooked into 'AHEE__EE_Session__reset_checkout__before_reset'
790
+	 *
791
+	 * @param EE_Session $session
792
+	 * @return void
793
+	 * @throws EE_Error
794
+	 * @throws InvalidSessionDataException
795
+	 */
796
+	public static function session_checkout_reset(EE_Session $session)
797
+	{
798
+		$checkout = $session->checkout();
799
+		if ($checkout instanceof EE_Checkout) {
800
+			EED_Ticket_Sales_Monitor::instance()->_session_checkout_reset($checkout);
801
+		}
802
+	}
803
+
804
+
805
+
806
+	/**
807
+	 * releases reserved tickets for the EE_Checkout->transaction
808
+	 *
809
+	 * @param EE_Checkout $checkout
810
+	 * @return void
811
+	 * @throws EE_Error
812
+	 * @throws InvalidSessionDataException
813
+	 */
814
+	protected function _session_checkout_reset(EE_Checkout $checkout)
815
+	{
816
+		if (self::debug) {
817
+			echo '<br /><br /> ' . __LINE__ . ') ' . __METHOD__ . '() ';
818
+		}
819
+		// we want to release the each registration's reserved tickets if the session was cleared, but not if this is a revisit
820
+		if ($checkout->revisit || ! $checkout->transaction instanceof EE_Transaction) {
821
+			return;
822
+		}
823
+		$this->_release_all_reserved_tickets_for_transaction($checkout->transaction);
824
+	}
825
+
826
+
827
+
828
+	/********************************** SESSION_EXPIRED_RESET  **********************************/
829
+
830
+
831
+
832
+	/**
833
+	 * @param    EE_Session $session
834
+	 * @return    void
835
+	 */
836
+	public static function session_expired_reset(EE_Session $session)
837
+	{
838
+	}
839
+
840
+
841
+
842
+	/********************************** PROCESS_ABANDONED_TRANSACTIONS  **********************************/
843
+
844
+
845
+
846
+	/**
847
+	 * releases reserved tickets for all registrations of an ABANDONED EE_Transaction
848
+	 * by default, will NOT release tickets for free transactions, or any that have received a payment
849
+	 *
850
+	 * @param EE_Transaction $transaction
851
+	 * @return void
852
+	 * @throws EE_Error
853
+	 * @throws InvalidSessionDataException
854
+	 */
855
+	public static function process_abandoned_transactions(EE_Transaction $transaction)
856
+	{
857
+		// is this TXN free or has any money been paid towards this TXN? If so, then leave it alone
858
+		if ($transaction->is_free() || $transaction->paid() > 0) {
859
+			if (self::debug) {
860
+				// DEBUG LOG
861
+				EEH_Debug_Tools::log(
862
+					__CLASS__,
863
+					__FUNCTION__,
864
+					__LINE__,
865
+					array($transaction),
866
+					false,
867
+					'EE_Transaction: ' . $transaction->ID()
868
+				);
869
+			}
870
+			return;
871
+		}
872
+		// have their been any successful payments made ?
873
+		$payments = $transaction->payments();
874
+		foreach ($payments as $payment) {
875
+			if ($payment instanceof EE_Payment && $payment->status() === EEM_Payment::status_id_approved) {
876
+				if (self::debug) {
877
+					// DEBUG LOG
878
+					EEH_Debug_Tools::log(
879
+						__CLASS__,
880
+						__FUNCTION__,
881
+						__LINE__,
882
+						array($payment),
883
+						false,
884
+						'EE_Transaction: ' . $transaction->ID()
885
+					);
886
+				}
887
+				return;
888
+			}
889
+		}
890
+		// since you haven't even attempted to pay for your ticket...
891
+		EED_Ticket_Sales_Monitor::instance()->_release_all_reserved_tickets_for_transaction($transaction);
892
+	}
893
+
894
+
895
+
896
+	/********************************** PROCESS_FAILED_TRANSACTIONS  **********************************/
897
+
898
+
899
+
900
+	/**
901
+	 * releases reserved tickets for absolutely ALL registrations of a FAILED EE_Transaction
902
+	 *
903
+	 * @param EE_Transaction $transaction
904
+	 * @return void
905
+	 * @throws EE_Error
906
+	 * @throws InvalidSessionDataException
907
+	 */
908
+	public static function process_failed_transactions(EE_Transaction $transaction)
909
+	{
910
+		// since you haven't even attempted to pay for your ticket...
911
+		EED_Ticket_Sales_Monitor::instance()->_release_all_reserved_tickets_for_transaction($transaction);
912
+	}
913
+
914
+
915
+
916
+	/********************************** RESET RESERVATION COUNTS  *********************************/
917
+
918
+
919
+
920
+	/**
921
+	 * Resets all ticket and datetime reserved counts to zero
922
+	 * Tickets that are currently associated with a Transaction that is in progress
923
+	 *
924
+	 * @throws EE_Error
925
+	 * @throws DomainException
926
+	 * @throws InvalidDataTypeException
927
+	 * @throws InvalidInterfaceException
928
+	 * @throws InvalidArgumentException
929
+	 * @throws UnexpectedEntityException
930
+	 */
931
+	public static function reset_reservation_counts()
932
+	{
933
+		/** @var EE_Line_Item[] $valid_reserved_tickets */
934
+		$valid_reserved_tickets = array();
935
+		/** @var EE_Transaction[] $transactions_not_in_progress */
936
+		$transactions_not_in_progress = EEM_Transaction::instance()->get_transactions_not_in_progress();
937
+		foreach ($transactions_not_in_progress as $transaction) {
938
+			// if this TXN has been fully completed, then skip it
939
+			if ($transaction->reg_step_completed('finalize_registration')) {
940
+				continue;
941
+			}
942
+			$total_line_item = $transaction->total_line_item();
943
+			// $transaction_in_progress->line
944
+			if (! $total_line_item instanceof EE_Line_Item) {
945
+				throw new DomainException(
946
+					esc_html__(
947
+						'Transaction does not have a valid Total Line Item associated with it.',
948
+						'event_espresso'
949
+					)
950
+				);
951
+			}
952
+			$valid_reserved_tickets += EED_Ticket_Sales_Monitor::get_ticket_line_items_for_grand_total(
953
+				$total_line_item
954
+			);
955
+		}
956
+		$total_line_items = EEM_Line_Item::instance()->get_total_line_items_for_active_carts();
957
+		foreach ($total_line_items as $total_line_item) {
958
+			$valid_reserved_tickets += EED_Ticket_Sales_Monitor::get_ticket_line_items_for_grand_total(
959
+				$total_line_item
960
+			);
961
+		}
962
+		$tickets_with_reservations = EEM_Ticket::instance()->get_tickets_with_reservations();
963
+		return EED_Ticket_Sales_Monitor::release_reservations_for_tickets(
964
+			$tickets_with_reservations,
965
+			$valid_reserved_tickets,
966
+			__FUNCTION__
967
+		);
968
+	}
969
+
970
+
971
+
972
+	/**
973
+	 * @param EE_Line_Item $total_line_item
974
+	 * @return EE_Line_Item[]
975
+	 */
976
+	private static function get_ticket_line_items_for_grand_total(EE_Line_Item $total_line_item)
977
+	{
978
+		/** @var EE_Line_Item[] $valid_reserved_tickets */
979
+		$valid_reserved_tickets = array();
980
+		$ticket_line_items      = EEH_Line_Item::get_ticket_line_items($total_line_item);
981
+		foreach ($ticket_line_items as $ticket_line_item) {
982
+			if ($ticket_line_item instanceof EE_Line_Item) {
983
+				$valid_reserved_tickets[] = $ticket_line_item;
984
+			}
985
+		}
986
+		return $valid_reserved_tickets;
987
+	}
988
+
989
+
990
+
991
+	/**
992
+	 * @param EE_Ticket[]    $tickets_with_reservations
993
+	 * @param EE_Line_Item[] $valid_reserved_ticket_line_items
994
+	 * @return int
995
+	 * @throws UnexpectedEntityException
996
+	 * @throws DomainException
997
+	 * @throws EE_Error
998
+	 */
999
+	private static function release_reservations_for_tickets(
1000
+		array $tickets_with_reservations,
1001
+		array $valid_reserved_ticket_line_items = array(),
1002
+		$source
1003
+	) {
1004
+		$total_tickets_released = 0;
1005
+		$sold_out_events = array();
1006
+		foreach ($tickets_with_reservations as $ticket_with_reservations) {
1007
+			if (! $ticket_with_reservations instanceof EE_Ticket) {
1008
+				continue;
1009
+			}
1010
+			$reserved_qty = $ticket_with_reservations->reserved();
1011
+			foreach ($valid_reserved_ticket_line_items as $valid_reserved_ticket_line_item) {
1012
+				if (
1013
+					$valid_reserved_ticket_line_item instanceof EE_Line_Item
1014
+					&& $valid_reserved_ticket_line_item->OBJ_ID() === $ticket_with_reservations->ID()
1015
+				) {
1016
+					$reserved_qty -= $valid_reserved_ticket_line_item->quantity();
1017
+				}
1018
+			}
1019
+			if ($reserved_qty > 0) {
1020
+				$ticket_with_reservations->add_extra_meta(
1021
+					EE_Ticket::META_KEY_TICKET_RESERVATIONS,
1022
+					__LINE__ . ') ' . $source . '()'
1023
+				);
1024
+				$ticket_with_reservations->decrease_reserved($reserved_qty, true, 'TicketSalesMonitor:'. __LINE__);
1025
+				$ticket_with_reservations->save();
1026
+				$total_tickets_released += $reserved_qty;
1027
+				$event = $ticket_with_reservations->get_related_event();
1028
+				// track sold out events
1029
+				if ($event instanceof EE_Event && $event->is_sold_out()) {
1030
+					$sold_out_events[] = $event;
1031
+				}
1032
+			}
1033
+		}
1034
+		// double check whether sold out events should remain sold out after releasing tickets
1035
+		if($sold_out_events !== array()){
1036
+			foreach ($sold_out_events as $sold_out_event) {
1037
+				/** @var EE_Event $sold_out_event */
1038
+				$sold_out_event->perform_sold_out_status_check();
1039
+			}
1040
+		}
1041
+		return $total_tickets_released;
1042
+	}
1043
+
1044
+
1045
+
1046
+	/********************************** SHUTDOWN  **********************************/
1047
+
1048
+
1049
+
1050
+	/**
1051
+	 * @return false|int
1052
+	 * @throws EE_Error
1053
+	 * @throws InvalidArgumentException
1054
+	 * @throws InvalidDataTypeException
1055
+	 * @throws InvalidInterfaceException
1056
+	 */
1057
+	public static function clear_expired_line_items_with_no_transaction()
1058
+	{
1059
+		/** @type WPDB $wpdb */
1060
+		global $wpdb;
1061
+		return $wpdb->query(
1062
+			$wpdb->prepare(
1063
+				'DELETE FROM ' . EEM_Line_Item::instance()->table() . '
1064 1064
                 WHERE TXN_ID = 0 AND LIN_timestamp <= %s',
1065
-                // use GMT time because that's what LIN_timestamps are in
1066
-                date('Y-m-d H:i:s', time() - EE_Registry::instance()->SSN->lifespan())
1067
-            )
1068
-        );
1069
-    }
1065
+				// use GMT time because that's what LIN_timestamps are in
1066
+				date('Y-m-d H:i:s', time() - EE_Registry::instance()->SSN->lifespan())
1067
+			)
1068
+		);
1069
+	}
1070 1070
 
1071 1071
 }
1072 1072
 // End of file EED_Ticket_Sales_Monitor.module.php
Please login to merge, or discard this patch.
Spacing   +65 added lines, -65 removed lines patch added patch discarded remove patch
@@ -23,7 +23,7 @@  discard block
 block discarded – undo
23 23
 class EED_Ticket_Sales_Monitor extends EED_Module
24 24
 {
25 25
 
26
-    const debug = false;    //	true false
26
+    const debug = false; //	true false
27 27
 
28 28
     /**
29 29
      * an array of raw ticket data from EED_Ticket_Selector
@@ -209,17 +209,17 @@  discard block
 block discarded – undo
209 209
             /** @var EE_Line_Item $total_line_item */
210 210
             $ticket_line_items = EED_Ticket_Sales_Monitor::get_ticket_line_items_for_grand_total($total_line_item);
211 211
             foreach ($ticket_line_items as $ticket_line_item) {
212
-                if (! $ticket_line_item instanceof EE_Line_Item) {
212
+                if ( ! $ticket_line_item instanceof EE_Line_Item) {
213 213
                     continue;
214 214
                 }
215 215
                 if ($total_line_item->timestamp(true) <= $expired) {
216
-                    $expired_ticket_IDs[ $ticket_line_item->OBJ_ID() ] = $ticket_line_item->OBJ_ID();
216
+                    $expired_ticket_IDs[$ticket_line_item->OBJ_ID()] = $ticket_line_item->OBJ_ID();
217 217
                 } else {
218
-                    $valid_ticket_line_items[ $ticket_line_item->OBJ_ID() ] = $ticket_line_item;
218
+                    $valid_ticket_line_items[$ticket_line_item->OBJ_ID()] = $ticket_line_item;
219 219
                 }
220 220
             }
221 221
         }
222
-        if (! empty($expired_ticket_IDs)) {
222
+        if ( ! empty($expired_ticket_IDs)) {
223 223
             EED_Ticket_Sales_Monitor::release_reservations_for_tickets(
224 224
                 \EEM_Ticket::instance()->get_tickets_with_IDs($expired_ticket_IDs),
225 225
                 $valid_ticket_line_items,
@@ -262,8 +262,8 @@  discard block
 block discarded – undo
262 262
             $qty = EED_Ticket_Sales_Monitor::instance()->_validate_ticket_sale($ticket, $qty);
263 263
         }
264 264
         if (self::debug) {
265
-            echo '<br /><br /> ' . __LINE__ . ') ' . __METHOD__ . '()';
266
-            echo '<br /><br /><b> RETURNED QTY: ' . $qty . '</b>';
265
+            echo '<br /><br /> '.__LINE__.') '.__METHOD__.'()';
266
+            echo '<br /><br /><b> RETURNED QTY: '.$qty.'</b>';
267 267
         }
268 268
         return $qty;
269 269
     }
@@ -282,36 +282,36 @@  discard block
 block discarded – undo
282 282
     protected function _validate_ticket_sale(EE_Ticket $ticket, $qty = 1)
283 283
     {
284 284
         if (self::debug) {
285
-            echo '<br /><br /> ' . __LINE__ . ') ' . __METHOD__ . '() ';
285
+            echo '<br /><br /> '.__LINE__.') '.__METHOD__.'() ';
286 286
         }
287
-        if (! $ticket instanceof EE_Ticket) {
287
+        if ( ! $ticket instanceof EE_Ticket) {
288 288
             return 0;
289 289
         }
290 290
         if (self::debug) {
291
-            echo '<br /><b> . ticket->ID: ' . $ticket->ID() . '</b>';
292
-            echo '<br /> . original ticket->reserved: ' . $ticket->reserved();
291
+            echo '<br /><b> . ticket->ID: '.$ticket->ID().'</b>';
292
+            echo '<br /> . original ticket->reserved: '.$ticket->reserved();
293 293
         }
294 294
         $ticket->refresh_from_db();
295 295
         // first let's determine the ticket availability based on sales
296 296
         $available = $ticket->qty('saleable');
297 297
         if (self::debug) {
298
-            echo '<br /> . . . ticket->qty: ' . $ticket->qty();
299
-            echo '<br /> . . . ticket->sold: ' . $ticket->sold();
300
-            echo '<br /> . . . ticket->reserved: ' . $ticket->reserved();
301
-            echo '<br /> . . . ticket->qty(saleable): ' . $ticket->qty('saleable');
302
-            echo '<br /> . . . available: ' . $available;
298
+            echo '<br /> . . . ticket->qty: '.$ticket->qty();
299
+            echo '<br /> . . . ticket->sold: '.$ticket->sold();
300
+            echo '<br /> . . . ticket->reserved: '.$ticket->reserved();
301
+            echo '<br /> . . . ticket->qty(saleable): '.$ticket->qty('saleable');
302
+            echo '<br /> . . . available: '.$available;
303 303
         }
304 304
         if ($available < 1) {
305 305
             $this->_ticket_sold_out($ticket);
306 306
             return 0;
307 307
         }
308 308
         if (self::debug) {
309
-            echo '<br /> . . . qty: ' . $qty;
309
+            echo '<br /> . . . qty: '.$qty;
310 310
         }
311 311
         if ($available < $qty) {
312 312
             $qty = $available;
313 313
             if (self::debug) {
314
-                echo '<br /> . . . QTY ADJUSTED: ' . $qty;
314
+                echo '<br /> . . . QTY ADJUSTED: '.$qty;
315 315
             }
316 316
             $this->_ticket_quantity_decremented($ticket);
317 317
         }
@@ -332,9 +332,9 @@  discard block
 block discarded – undo
332 332
     protected function _reserve_ticket(EE_Ticket $ticket, $quantity = 1)
333 333
     {
334 334
         if (self::debug) {
335
-            echo '<br /><br /> . . . INCREASE RESERVED: ' . $quantity;
335
+            echo '<br /><br /> . . . INCREASE RESERVED: '.$quantity;
336 336
         }
337
-        $ticket->increase_reserved($quantity, 'TicketSalesMonitor:'. __LINE__);
337
+        $ticket->increase_reserved($quantity, 'TicketSalesMonitor:'.__LINE__);
338 338
         return $ticket->save();
339 339
     }
340 340
 
@@ -349,12 +349,12 @@  discard block
 block discarded – undo
349 349
     protected function _release_reserved_ticket(EE_Ticket $ticket, $quantity = 1)
350 350
     {
351 351
         if (self::debug) {
352
-            echo '<br /> . . . ticket->ID: ' . $ticket->ID();
353
-            echo '<br /> . . . ticket->reserved: ' . $ticket->reserved();
352
+            echo '<br /> . . . ticket->ID: '.$ticket->ID();
353
+            echo '<br /> . . . ticket->reserved: '.$ticket->reserved();
354 354
         }
355
-        $ticket->decrease_reserved($quantity, true, 'TicketSalesMonitor:'. __LINE__);
355
+        $ticket->decrease_reserved($quantity, true, 'TicketSalesMonitor:'.__LINE__);
356 356
         if (self::debug) {
357
-            echo '<br /> . . . ticket->reserved: ' . $ticket->reserved();
357
+            echo '<br /> . . . ticket->reserved: '.$ticket->reserved();
358 358
         }
359 359
         return $ticket->save() ? 1 : 0;
360 360
     }
@@ -372,8 +372,8 @@  discard block
 block discarded – undo
372 372
     protected function _ticket_sold_out(EE_Ticket $ticket)
373 373
     {
374 374
         if (self::debug) {
375
-            echo '<br /><br /> ' . __LINE__ . ') ' . __METHOD__ . '() ';
376
-            echo '<br /> . . ticket->name: ' . $this->_get_ticket_and_event_name($ticket);
375
+            echo '<br /><br /> '.__LINE__.') '.__METHOD__.'() ';
376
+            echo '<br /> . . ticket->name: '.$this->_get_ticket_and_event_name($ticket);
377 377
         }
378 378
         $this->sold_out_tickets[] = $this->_get_ticket_and_event_name($ticket);
379 379
     }
@@ -391,8 +391,8 @@  discard block
 block discarded – undo
391 391
     protected function _ticket_quantity_decremented(EE_Ticket $ticket)
392 392
     {
393 393
         if (self::debug) {
394
-            echo '<br /><br /> ' . __LINE__ . ') ' . __METHOD__ . '() ';
395
-            echo '<br /> . . ticket->name: ' . $this->_get_ticket_and_event_name($ticket);
394
+            echo '<br /><br /> '.__LINE__.') '.__METHOD__.'() ';
395
+            echo '<br /> . . ticket->name: '.$this->_get_ticket_and_event_name($ticket);
396 396
         }
397 397
         $this->decremented_tickets[] = $this->_get_ticket_and_event_name($ticket);
398 398
     }
@@ -445,7 +445,7 @@  discard block
 block discarded – undo
445 445
         if ($ticket instanceof EE_Ticket) {
446 446
             $ticket->add_extra_meta(
447 447
                 EE_Ticket::META_KEY_TICKET_RESERVATIONS,
448
-                __LINE__ . ') ' . __METHOD__ . '()'
448
+                __LINE__.') '.__METHOD__.'()'
449 449
             );
450 450
             if ($quantity > 0) {
451 451
                 EED_Ticket_Sales_Monitor::instance()->_reserve_ticket($ticket, $quantity);
@@ -469,7 +469,7 @@  discard block
 block discarded – undo
469 469
     {
470 470
         $ticket->add_extra_meta(
471 471
             EE_Ticket::META_KEY_TICKET_RESERVATIONS,
472
-            __LINE__ . ') ' . __METHOD__ . '()'
472
+            __LINE__.') '.__METHOD__.'()'
473 473
         );
474 474
         EED_Ticket_Sales_Monitor::instance()->_release_reserved_ticket($ticket, $quantity);
475 475
     }
@@ -506,18 +506,18 @@  discard block
 block discarded – undo
506 506
     protected function _post_notices()
507 507
     {
508 508
         if (self::debug) {
509
-            echo '<br /><br /> ' . __LINE__ . ') ' . __METHOD__ . '() ';
509
+            echo '<br /><br /> '.__LINE__.') '.__METHOD__.'() ';
510 510
         }
511 511
         $refresh_msg    = '';
512 512
         $none_added_msg = '';
513 513
         if (defined('DOING_AJAX') && DOING_AJAX) {
514
-            $refresh_msg    = __(
514
+            $refresh_msg = __(
515 515
                 'Please refresh the page to view updated ticket quantities.',
516 516
                 'event_espresso'
517 517
             );
518 518
             $none_added_msg = __('No tickets were added for the event.', 'event_espresso');
519 519
         }
520
-        if (! empty($this->sold_out_tickets)) {
520
+        if ( ! empty($this->sold_out_tickets)) {
521 521
             EE_Error::add_attention(
522 522
                 sprintf(
523 523
                     apply_filters(
@@ -540,7 +540,7 @@  discard block
 block discarded – undo
540 540
             // and reset the cart
541 541
             EED_Ticket_Sales_Monitor::session_cart_reset(EE_Registry::instance()->SSN);
542 542
         }
543
-        if (! empty($this->decremented_tickets)) {
543
+        if ( ! empty($this->decremented_tickets)) {
544 544
             EE_Error::add_attention(
545 545
                 sprintf(
546 546
                     apply_filters(
@@ -578,9 +578,9 @@  discard block
 block discarded – undo
578 578
     protected function _release_all_reserved_tickets_for_transaction(EE_Transaction $transaction)
579 579
     {
580 580
         if (self::debug) {
581
-            echo '<br /><br /> ' . __LINE__ . ') ' . __METHOD__ . '() ';
582
-            echo '<br /> . transaction->ID: ' . $transaction->ID();
583
-            echo '<br /> . TXN status_ID: ' . $transaction->status_ID();
581
+            echo '<br /><br /> '.__LINE__.') '.__METHOD__.'() ';
582
+            echo '<br /> . transaction->ID: '.$transaction->ID();
583
+            echo '<br /> . TXN status_ID: '.$transaction->status_ID();
584 584
         }
585 585
         // check if 'finalize_registration' step has been completed...
586 586
         $finalized = $transaction->reg_step_completed('finalize_registration');
@@ -592,13 +592,13 @@  discard block
 block discarded – undo
592 592
                 __LINE__,
593 593
                 array('finalized' => $finalized),
594 594
                 false,
595
-                'EE_Transaction: ' . $transaction->ID()
595
+                'EE_Transaction: '.$transaction->ID()
596 596
             );
597 597
         }
598 598
         // how many tickets were released
599 599
         $count = 0;
600 600
         if (self::debug) {
601
-            echo '<br /> . . . TXN finalized: ' . $finalized;
601
+            echo '<br /> . . . TXN finalized: '.$finalized;
602 602
         }
603 603
         $release_tickets_with_TXN_status = array(
604 604
             EEM_Transaction::failed_status_code,
@@ -607,28 +607,28 @@  discard block
 block discarded – undo
607 607
         );
608 608
         $events = array();
609 609
         // if the session is getting cleared BEFORE the TXN has been finalized or the transaction is not completed
610
-        if (! $finalized || in_array($transaction->status_ID(), $release_tickets_with_TXN_status, true)) {
610
+        if ( ! $finalized || in_array($transaction->status_ID(), $release_tickets_with_TXN_status, true)) {
611 611
             // cancel any reserved tickets for registrations that were not approved
612 612
             $registrations = $transaction->registrations();
613 613
             if (self::debug) {
614
-                echo '<br /> . . . # registrations: ' . count($registrations);
614
+                echo '<br /> . . . # registrations: '.count($registrations);
615 615
                 $reg    = reset($registrations);
616 616
                 $ticket = $reg->ticket();
617 617
                 if ($ticket instanceof EE_Ticket) {
618 618
                     $ticket->add_extra_meta(
619 619
                         EE_Ticket::META_KEY_TICKET_RESERVATIONS,
620
-                        __LINE__ . ') Release All Tickets TXN:' . $transaction->ID()
620
+                        __LINE__.') Release All Tickets TXN:'.$transaction->ID()
621 621
                     );
622 622
                 }
623 623
             }
624
-            if (! empty($registrations)) {
624
+            if ( ! empty($registrations)) {
625 625
                 foreach ($registrations as $registration) {
626 626
                     if (
627 627
                         $registration instanceof EE_Registration
628 628
                         && $this->_release_reserved_ticket_for_registration($registration, $transaction)
629 629
                     ) {
630 630
                         $count++;
631
-                        $events[ $registration->event_ID() ] = $registration->event();
631
+                        $events[$registration->event_ID()] = $registration->event();
632 632
                     }
633 633
                 }
634 634
             }
@@ -659,10 +659,10 @@  discard block
 block discarded – undo
659 659
     ) {
660 660
         $STS_ID = $transaction->status_ID();
661 661
         if (self::debug) {
662
-            echo '<br /><br /> ' . __LINE__ . ') ' . __METHOD__ . '() ';
663
-            echo '<br /> . . registration->ID: ' . $registration->ID();
664
-            echo '<br /> . . registration->status_ID: ' . $registration->status_ID();
665
-            echo '<br /> . . transaction->status_ID(): ' . $STS_ID;
662
+            echo '<br /><br /> '.__LINE__.') '.__METHOD__.'() ';
663
+            echo '<br /> . . registration->ID: '.$registration->ID();
664
+            echo '<br /> . . registration->status_ID: '.$registration->status_ID();
665
+            echo '<br /> . . transaction->status_ID(): '.$STS_ID;
666 666
         }
667 667
         if (
668 668
             // release Tickets for Failed Transactions and Abandoned Transactions
@@ -680,7 +680,7 @@  discard block
 block discarded – undo
680 680
                 echo '<br /> . . . registration HAS_RESERVED_TICKET_KEY: ';
681 681
                 var_dump($rsrvd);
682 682
             }
683
-            $registration->release_reserved_ticket(true, 'TicketSalesMonitor:'. __LINE__);
683
+            $registration->release_reserved_ticket(true, 'TicketSalesMonitor:'.__LINE__);
684 684
             return 1;
685 685
         }
686 686
         return 0;
@@ -706,7 +706,7 @@  discard block
 block discarded – undo
706 706
     public static function session_cart_reset(EE_Session $session)
707 707
     {
708 708
         if (self::debug) {
709
-            echo '<br /><br /> ' . __LINE__ . ') ' . __METHOD__ . '() ';
709
+            echo '<br /><br /> '.__LINE__.') '.__METHOD__.'() ';
710 710
         }
711 711
         // first check of the session has a valid Checkout object
712 712
         $checkout = $session->checkout();
@@ -745,7 +745,7 @@  discard block
 block discarded – undo
745 745
     protected function _session_cart_reset(EE_Cart $cart, EE_Session $session)
746 746
     {
747 747
         if (self::debug) {
748
-            echo '<br /><br /> ' . __LINE__ . ') ' . __METHOD__ . '() ';
748
+            echo '<br /><br /> '.__LINE__.') '.__METHOD__.'() ';
749 749
         }
750 750
         EE_Registry::instance()->load_helper('Line_Item');
751 751
         $ticket_line_items = $cart->get_tickets();
@@ -754,21 +754,21 @@  discard block
 block discarded – undo
754 754
         }
755 755
         foreach ($ticket_line_items as $ticket_line_item) {
756 756
             if (self::debug) {
757
-                echo '<br /> . ticket_line_item->ID(): ' . $ticket_line_item->ID();
757
+                echo '<br /> . ticket_line_item->ID(): '.$ticket_line_item->ID();
758 758
             }
759 759
             if ($ticket_line_item instanceof EE_Line_Item && $ticket_line_item->OBJ_type() === 'Ticket') {
760 760
                 if (self::debug) {
761
-                    echo '<br /> . . ticket_line_item->OBJ_ID(): ' . $ticket_line_item->OBJ_ID();
761
+                    echo '<br /> . . ticket_line_item->OBJ_ID(): '.$ticket_line_item->OBJ_ID();
762 762
                 }
763 763
                 $ticket = EEM_Ticket::instance()->get_one_by_ID($ticket_line_item->OBJ_ID());
764 764
                 if ($ticket instanceof EE_Ticket) {
765 765
                     if (self::debug) {
766
-                        echo '<br /> . . ticket->ID(): ' . $ticket->ID();
767
-                        echo '<br /> . . ticket_line_item->quantity(): ' . $ticket_line_item->quantity();
766
+                        echo '<br /> . . ticket->ID(): '.$ticket->ID();
767
+                        echo '<br /> . . ticket_line_item->quantity(): '.$ticket_line_item->quantity();
768 768
                     }
769 769
                     $ticket->add_extra_meta(
770 770
                         EE_Ticket::META_KEY_TICKET_RESERVATIONS,
771
-                        __LINE__ . ') ' . __METHOD__ . '() SID = ' . $session->id()
771
+                        __LINE__.') '.__METHOD__.'() SID = '.$session->id()
772 772
                     );
773 773
                     $this->_release_reserved_ticket($ticket, $ticket_line_item->quantity());
774 774
                 }
@@ -814,7 +814,7 @@  discard block
 block discarded – undo
814 814
     protected function _session_checkout_reset(EE_Checkout $checkout)
815 815
     {
816 816
         if (self::debug) {
817
-            echo '<br /><br /> ' . __LINE__ . ') ' . __METHOD__ . '() ';
817
+            echo '<br /><br /> '.__LINE__.') '.__METHOD__.'() ';
818 818
         }
819 819
         // we want to release the each registration's reserved tickets if the session was cleared, but not if this is a revisit
820 820
         if ($checkout->revisit || ! $checkout->transaction instanceof EE_Transaction) {
@@ -864,7 +864,7 @@  discard block
 block discarded – undo
864 864
                     __LINE__,
865 865
                     array($transaction),
866 866
                     false,
867
-                    'EE_Transaction: ' . $transaction->ID()
867
+                    'EE_Transaction: '.$transaction->ID()
868 868
                 );
869 869
             }
870 870
             return;
@@ -881,7 +881,7 @@  discard block
 block discarded – undo
881 881
                         __LINE__,
882 882
                         array($payment),
883 883
                         false,
884
-                        'EE_Transaction: ' . $transaction->ID()
884
+                        'EE_Transaction: '.$transaction->ID()
885 885
                     );
886 886
                 }
887 887
                 return;
@@ -941,7 +941,7 @@  discard block
 block discarded – undo
941 941
             }
942 942
             $total_line_item = $transaction->total_line_item();
943 943
             // $transaction_in_progress->line
944
-            if (! $total_line_item instanceof EE_Line_Item) {
944
+            if ( ! $total_line_item instanceof EE_Line_Item) {
945 945
                 throw new DomainException(
946 946
                     esc_html__(
947 947
                         'Transaction does not have a valid Total Line Item associated with it.',
@@ -1004,7 +1004,7 @@  discard block
 block discarded – undo
1004 1004
         $total_tickets_released = 0;
1005 1005
         $sold_out_events = array();
1006 1006
         foreach ($tickets_with_reservations as $ticket_with_reservations) {
1007
-            if (! $ticket_with_reservations instanceof EE_Ticket) {
1007
+            if ( ! $ticket_with_reservations instanceof EE_Ticket) {
1008 1008
                 continue;
1009 1009
             }
1010 1010
             $reserved_qty = $ticket_with_reservations->reserved();
@@ -1019,9 +1019,9 @@  discard block
 block discarded – undo
1019 1019
             if ($reserved_qty > 0) {
1020 1020
                 $ticket_with_reservations->add_extra_meta(
1021 1021
                     EE_Ticket::META_KEY_TICKET_RESERVATIONS,
1022
-                    __LINE__ . ') ' . $source . '()'
1022
+                    __LINE__.') '.$source.'()'
1023 1023
                 );
1024
-                $ticket_with_reservations->decrease_reserved($reserved_qty, true, 'TicketSalesMonitor:'. __LINE__);
1024
+                $ticket_with_reservations->decrease_reserved($reserved_qty, true, 'TicketSalesMonitor:'.__LINE__);
1025 1025
                 $ticket_with_reservations->save();
1026 1026
                 $total_tickets_released += $reserved_qty;
1027 1027
                 $event = $ticket_with_reservations->get_related_event();
@@ -1032,7 +1032,7 @@  discard block
 block discarded – undo
1032 1032
             }
1033 1033
         }
1034 1034
         // double check whether sold out events should remain sold out after releasing tickets
1035
-        if($sold_out_events !== array()){
1035
+        if ($sold_out_events !== array()) {
1036 1036
             foreach ($sold_out_events as $sold_out_event) {
1037 1037
                 /** @var EE_Event $sold_out_event */
1038 1038
                 $sold_out_event->perform_sold_out_status_check();
@@ -1060,7 +1060,7 @@  discard block
 block discarded – undo
1060 1060
         global $wpdb;
1061 1061
         return $wpdb->query(
1062 1062
             $wpdb->prepare(
1063
-                'DELETE FROM ' . EEM_Line_Item::instance()->table() . '
1063
+                'DELETE FROM '.EEM_Line_Item::instance()->table().'
1064 1064
                 WHERE TXN_ID = 0 AND LIN_timestamp <= %s',
1065 1065
                 // use GMT time because that's what LIN_timestamps are in
1066 1066
                 date('Y-m-d H:i:s', time() - EE_Registry::instance()->SSN->lifespan())
Please login to merge, or discard this patch.
core/db_classes/EE_Ticket.class.php 2 patches
Indentation   +665 added lines, -665 removed lines patch added patch discarded remove patch
@@ -53,14 +53,14 @@  discard block
 block discarded – undo
53 53
 	 */
54 54
 	const onsale = 'TKO';
55 55
 
56
-    /**
57
-     * extra meta key for tracking ticket reservations
58
-     *
59
-     * @type string
60
-     */
61
-    const META_KEY_TICKET_RESERVATIONS = 'ticket_reservations';
62
-
63
-    /**
56
+	/**
57
+	 * extra meta key for tracking ticket reservations
58
+	 *
59
+	 * @type string
60
+	 */
61
+	const META_KEY_TICKET_RESERVATIONS = 'ticket_reservations';
62
+
63
+	/**
64 64
 	 * cached result from method of the same name
65 65
 	 * @var float $_ticket_total_with_taxes
66 66
 	 */
@@ -68,15 +68,15 @@  discard block
 block discarded – undo
68 68
 
69 69
 
70 70
 
71
-    /**
72
-     * @param array  $props_n_values          incoming values
73
-     * @param string $timezone                incoming timezone (if not set the timezone set for the website will be
74
-     *                                        used.)
75
-     * @param array  $date_formats            incoming date_formats in an array where the first value is the
76
-     *                                        date_format and the second value is the time format
77
-     * @return EE_Ticket
78
-     * @throws \EE_Error
79
-     */
71
+	/**
72
+	 * @param array  $props_n_values          incoming values
73
+	 * @param string $timezone                incoming timezone (if not set the timezone set for the website will be
74
+	 *                                        used.)
75
+	 * @param array  $date_formats            incoming date_formats in an array where the first value is the
76
+	 *                                        date_format and the second value is the time format
77
+	 * @return EE_Ticket
78
+	 * @throws \EE_Error
79
+	 */
80 80
 	public static function new_instance( $props_n_values = array(), $timezone = null, $date_formats = array() ) {
81 81
 		$has_object = parent::_check_for_object( $props_n_values, __CLASS__, $timezone, $date_formats );
82 82
 		return $has_object ? $has_object : new self( $props_n_values, false, $timezone, $date_formats );
@@ -84,36 +84,36 @@  discard block
 block discarded – undo
84 84
 
85 85
 
86 86
 
87
-    /**
88
-     * @param array  $props_n_values  incoming values from the database
89
-     * @param string $timezone        incoming timezone as set by the model.  If not set the timezone for
90
-     *                                the website will be used.
91
-     * @return EE_Ticket
92
-     * @throws \EE_Error
93
-     */
87
+	/**
88
+	 * @param array  $props_n_values  incoming values from the database
89
+	 * @param string $timezone        incoming timezone as set by the model.  If not set the timezone for
90
+	 *                                the website will be used.
91
+	 * @return EE_Ticket
92
+	 * @throws \EE_Error
93
+	 */
94 94
 	public static function new_instance_from_db( $props_n_values = array(), $timezone = null ) {
95 95
 		return new self( $props_n_values, TRUE, $timezone );
96 96
 	}
97 97
 
98 98
 
99 99
 
100
-    /**
101
-     * @return bool
102
-     * @throws \EE_Error
103
-     */
100
+	/**
101
+	 * @return bool
102
+	 * @throws \EE_Error
103
+	 */
104 104
 	public function parent() {
105 105
 		return $this->get( 'TKT_parent' );
106 106
 	}
107 107
 
108 108
 
109 109
 
110
-    /**
111
-     * return if a ticket has quantities available for purchase
112
-     *
113
-     * @param  int $DTT_ID the primary key for a particular datetime
114
-     * @return boolean
115
-     * @throws \EE_Error
116
-     */
110
+	/**
111
+	 * return if a ticket has quantities available for purchase
112
+	 *
113
+	 * @param  int $DTT_ID the primary key for a particular datetime
114
+	 * @return boolean
115
+	 * @throws \EE_Error
116
+	 */
117 117
 	public function available( $DTT_ID = 0 ) {
118 118
 		// are we checking availability for a particular datetime ?
119 119
 		if ( $DTT_ID ) {
@@ -130,14 +130,14 @@  discard block
 block discarded – undo
130 130
 
131 131
 
132 132
 
133
-    /**
134
-     * Using the start date and end date this method calculates whether the ticket is On Sale, Pending, or Expired
135
-     *
136
-     * @param bool        $display   true = we'll return a localized string, otherwise we just return the value of the relevant status const
137
-     * @param bool | null $remaining if it is already known that tickets are available, then simply pass a bool to save further processing
138
-     * @return mixed status int if the display string isn't requested
139
-     * @throws \EE_Error
140
-     */
133
+	/**
134
+	 * Using the start date and end date this method calculates whether the ticket is On Sale, Pending, or Expired
135
+	 *
136
+	 * @param bool        $display   true = we'll return a localized string, otherwise we just return the value of the relevant status const
137
+	 * @param bool | null $remaining if it is already known that tickets are available, then simply pass a bool to save further processing
138
+	 * @return mixed status int if the display string isn't requested
139
+	 * @throws \EE_Error
140
+	 */
141 141
 	public function ticket_status( $display = FALSE, $remaining = null ) {
142 142
 		$remaining = is_bool( $remaining ) ? $remaining : $this->is_remaining();
143 143
 		if ( ! $remaining ) {
@@ -160,14 +160,14 @@  discard block
 block discarded – undo
160 160
 
161 161
 
162 162
 
163
-    /**
164
-     * The purpose of this method is to simply return a boolean for whether there are any tickets remaining for sale considering ALL the factors used for figuring that out.
165
-     *
166
-     * @access public
167
-     * @param  int $DTT_ID if an int above 0 is included here then we get a specific dtt.
168
-     * @return boolean         true = tickets remaining, false not.
169
-     * @throws \EE_Error
170
-     */
163
+	/**
164
+	 * The purpose of this method is to simply return a boolean for whether there are any tickets remaining for sale considering ALL the factors used for figuring that out.
165
+	 *
166
+	 * @access public
167
+	 * @param  int $DTT_ID if an int above 0 is included here then we get a specific dtt.
168
+	 * @return boolean         true = tickets remaining, false not.
169
+	 * @throws \EE_Error
170
+	 */
171 171
 	public function is_remaining( $DTT_ID = 0 ) {
172 172
 		$num_remaining = $this->remaining( $DTT_ID );
173 173
 		if ( $num_remaining === 0 ) {
@@ -181,76 +181,76 @@  discard block
 block discarded – undo
181 181
 
182 182
 
183 183
 
184
-    /**
185
-     * return the total number of tickets available for purchase
186
-     *
187
-     * @param  int $DTT_ID the primary key for a particular datetime.
188
-     *                     set to 0 for all related datetimes
189
-     * @return int
190
-     * @throws \EE_Error
191
-     */
184
+	/**
185
+	 * return the total number of tickets available for purchase
186
+	 *
187
+	 * @param  int $DTT_ID the primary key for a particular datetime.
188
+	 *                     set to 0 for all related datetimes
189
+	 * @return int
190
+	 * @throws \EE_Error
191
+	 */
192 192
 	public function remaining( $DTT_ID = 0 ) {
193 193
 		return $this->real_quantity_on_ticket('saleable', $DTT_ID );
194 194
 	}
195 195
 
196 196
 
197 197
 
198
-    /**
199
-     * Gets min
200
-     *
201
-     * @return int
202
-     * @throws \EE_Error
203
-     */
198
+	/**
199
+	 * Gets min
200
+	 *
201
+	 * @return int
202
+	 * @throws \EE_Error
203
+	 */
204 204
 	public function min() {
205 205
 		return $this->get( 'TKT_min' );
206 206
 	}
207 207
 
208 208
 
209 209
 
210
-    /**
211
-     * return if a ticket is no longer available cause its available dates have expired.
212
-     *
213
-     * @return boolean
214
-     * @throws \EE_Error
215
-     */
210
+	/**
211
+	 * return if a ticket is no longer available cause its available dates have expired.
212
+	 *
213
+	 * @return boolean
214
+	 * @throws \EE_Error
215
+	 */
216 216
 	public function is_expired() {
217 217
 		return ( $this->get_raw( 'TKT_end_date' ) < time() );
218 218
 	}
219 219
 
220 220
 
221 221
 
222
-    /**
223
-     * Return if a ticket is yet to go on sale or not
224
-     *
225
-     * @return boolean
226
-     * @throws \EE_Error
227
-     */
222
+	/**
223
+	 * Return if a ticket is yet to go on sale or not
224
+	 *
225
+	 * @return boolean
226
+	 * @throws \EE_Error
227
+	 */
228 228
 	public function is_pending() {
229 229
 		return ( $this->get_raw( 'TKT_start_date' ) > time() );
230 230
 	}
231 231
 
232 232
 
233 233
 
234
-    /**
235
-     * Return if a ticket is on sale or not
236
-     *
237
-     * @return boolean
238
-     * @throws \EE_Error
239
-     */
234
+	/**
235
+	 * Return if a ticket is on sale or not
236
+	 *
237
+	 * @return boolean
238
+	 * @throws \EE_Error
239
+	 */
240 240
 	public function is_on_sale() {
241 241
 		return ( $this->get_raw( 'TKT_start_date' ) < time() && $this->get_raw( 'TKT_end_date' ) > time() );
242 242
 	}
243 243
 
244 244
 
245 245
 
246
-    /**
247
-     * This returns the chronologically last datetime that this ticket is associated with
248
-     *
249
-     * @param string $dt_frmt
250
-     * @param string $conjunction - conjunction junction what's your function ? this string joins the start date with the end date ie: Jan 01 "to" Dec 31
251
-     * @return string
252
-     * @throws \EE_Error
253
-     */
246
+	/**
247
+	 * This returns the chronologically last datetime that this ticket is associated with
248
+	 *
249
+	 * @param string $dt_frmt
250
+	 * @param string $conjunction - conjunction junction what's your function ? this string joins the start date with the end date ie: Jan 01 "to" Dec 31
251
+	 * @return string
252
+	 * @throws \EE_Error
253
+	 */
254 254
 	public function date_range( $dt_frmt = '', $conjunction = ' - ' ) {
255 255
 		$first_date = $this->first_datetime() instanceof EE_Datetime ? $this->first_datetime()->start_date( $dt_frmt ) : '';
256 256
 		$last_date = $this->last_datetime() instanceof EE_Datetime ? $this->last_datetime()->end_date( $dt_frmt ) : '';
@@ -260,12 +260,12 @@  discard block
 block discarded – undo
260 260
 
261 261
 
262 262
 
263
-    /**
264
-     * This returns the chronologically first datetime that this ticket is associated with
265
-     *
266
-     * @return EE_Datetime
267
-     * @throws \EE_Error
268
-     */
263
+	/**
264
+	 * This returns the chronologically first datetime that this ticket is associated with
265
+	 *
266
+	 * @return EE_Datetime
267
+	 * @throws \EE_Error
268
+	 */
269 269
 	public function first_datetime() {
270 270
 		$datetimes = $this->datetimes( array( 'limit' => 1 ) );
271 271
 		return reset( $datetimes );
@@ -273,14 +273,14 @@  discard block
 block discarded – undo
273 273
 
274 274
 
275 275
 
276
-    /**
277
-     * Gets all the datetimes this ticket can be used for attending.
278
-     * Unless otherwise specified, orders datetimes by start date.
279
-     *
280
-     * @param array $query_params see EEM_Base::get_all()
281
-     * @return EE_Datetime[]|EE_Base_Class[]
282
-     * @throws \EE_Error
283
-     */
276
+	/**
277
+	 * Gets all the datetimes this ticket can be used for attending.
278
+	 * Unless otherwise specified, orders datetimes by start date.
279
+	 *
280
+	 * @param array $query_params see EEM_Base::get_all()
281
+	 * @return EE_Datetime[]|EE_Base_Class[]
282
+	 * @throws \EE_Error
283
+	 */
284 284
 	public function datetimes( $query_params = array() ) {
285 285
 		if ( ! isset( $query_params[ 'order_by' ] ) ) {
286 286
 			$query_params[ 'order_by' ][ 'DTT_order' ] = 'ASC';
@@ -290,12 +290,12 @@  discard block
 block discarded – undo
290 290
 
291 291
 
292 292
 
293
-    /**
294
-     * This returns the chronologically last datetime that this ticket is associated with
295
-     *
296
-     * @return EE_Datetime
297
-     * @throws \EE_Error
298
-     */
293
+	/**
294
+	 * This returns the chronologically last datetime that this ticket is associated with
295
+	 *
296
+	 * @return EE_Datetime
297
+	 * @throws \EE_Error
298
+	 */
299 299
 	public function last_datetime() {
300 300
 		$datetimes = $this->datetimes( array( 'limit' => 1, 'order_by' => array( 'DTT_EVT_start' => 'DESC' ) ) );
301 301
 		return end( $datetimes );
@@ -303,19 +303,19 @@  discard block
 block discarded – undo
303 303
 
304 304
 
305 305
 
306
-    /**
307
-     * This returns the total tickets sold depending on the given parameters.
308
-     *
309
-     * @param  string $what   Can be one of two options: 'ticket', 'datetime'.
310
-     *                        'ticket' = total ticket sales for all datetimes this ticket is related to
311
-     *                        'datetime' = total ticket sales for a specified datetime (required $dtt_id)
312
-     *                        'datetime' = total ticket sales in the datetime_ticket table.
313
-     *                        If $dtt_id is not given then we return an array of sales indexed by datetime.
314
-     *                        If $dtt_id IS given then we return the tickets sold for that given datetime.
315
-     * @param  int    $dtt_id [optional] include the dtt_id with $what = 'datetime'.
316
-     * @return mixed (array|int)          how many tickets have sold
317
-     * @throws \EE_Error
318
-     */
306
+	/**
307
+	 * This returns the total tickets sold depending on the given parameters.
308
+	 *
309
+	 * @param  string $what   Can be one of two options: 'ticket', 'datetime'.
310
+	 *                        'ticket' = total ticket sales for all datetimes this ticket is related to
311
+	 *                        'datetime' = total ticket sales for a specified datetime (required $dtt_id)
312
+	 *                        'datetime' = total ticket sales in the datetime_ticket table.
313
+	 *                        If $dtt_id is not given then we return an array of sales indexed by datetime.
314
+	 *                        If $dtt_id IS given then we return the tickets sold for that given datetime.
315
+	 * @param  int    $dtt_id [optional] include the dtt_id with $what = 'datetime'.
316
+	 * @return mixed (array|int)          how many tickets have sold
317
+	 * @throws \EE_Error
318
+	 */
319 319
 	public function tickets_sold( $what = 'ticket', $dtt_id = NULL ) {
320 320
 		$total = 0;
321 321
 		$tickets_sold = $this->_all_tickets_sold();
@@ -340,12 +340,12 @@  discard block
 block discarded – undo
340 340
 
341 341
 
342 342
 
343
-    /**
344
-     * This returns an array indexed by datetime_id for tickets sold with this ticket.
345
-     *
346
-     * @return EE_Ticket[]
347
-     * @throws \EE_Error
348
-     */
343
+	/**
344
+	 * This returns an array indexed by datetime_id for tickets sold with this ticket.
345
+	 *
346
+	 * @return EE_Ticket[]
347
+	 * @throws \EE_Error
348
+	 */
349 349
 	protected function _all_tickets_sold() {
350 350
 		$datetimes = $this->get_many_related( 'Datetime' );
351 351
 		$tickets_sold = array();
@@ -361,29 +361,29 @@  discard block
 block discarded – undo
361 361
 
362 362
 
363 363
 
364
-    /**
365
-     * This returns the base price object for the ticket.
366
-     *
367
-     * @param  bool $return_array whether to return as an array indexed by price id or just the object.
368
-     * @return EE_Price|EE_Base_Class|EE_Price[]|EE_Base_Class[]
369
-     * @throws \EE_Error
370
-     */
364
+	/**
365
+	 * This returns the base price object for the ticket.
366
+	 *
367
+	 * @param  bool $return_array whether to return as an array indexed by price id or just the object.
368
+	 * @return EE_Price|EE_Base_Class|EE_Price[]|EE_Base_Class[]
369
+	 * @throws \EE_Error
370
+	 */
371 371
 	public function base_price( $return_array = FALSE ) {
372 372
 		$_where = array( 'Price_Type.PBT_ID' => EEM_Price_Type::base_type_base_price );
373 373
 		return $return_array
374
-            ? $this->get_many_related( 'Price', array( $_where ) )
375
-            : $this->get_first_related( 'Price', array( $_where ) );
374
+			? $this->get_many_related( 'Price', array( $_where ) )
375
+			: $this->get_first_related( 'Price', array( $_where ) );
376 376
 	}
377 377
 
378 378
 
379 379
 
380
-    /**
381
-     * This returns ONLY the price modifiers for the ticket (i.e. no taxes or base price)
382
-     *
383
-     * @access public
384
-     * @return EE_Price[]
385
-     * @throws \EE_Error
386
-     */
380
+	/**
381
+	 * This returns ONLY the price modifiers for the ticket (i.e. no taxes or base price)
382
+	 *
383
+	 * @access public
384
+	 * @return EE_Price[]
385
+	 * @throws \EE_Error
386
+	 */
387 387
 	public function price_modifiers() {
388 388
 		$query_params = array( 0 => array( 'Price_Type.PBT_ID' => array( 'NOT IN', array( EEM_Price_Type::base_type_base_price, EEM_Price_Type::base_type_tax ) ) ) );
389 389
 		return $this->prices( $query_params );
@@ -391,132 +391,132 @@  discard block
 block discarded – undo
391 391
 
392 392
 
393 393
 
394
-    /**
395
-     * Gets all the prices that combine to form the final price of this ticket
396
-     *
397
-     * @param array $query_params like EEM_Base::get_all
398
-     * @return EE_Price[]|EE_Base_Class[]
399
-     * @throws \EE_Error
400
-     */
394
+	/**
395
+	 * Gets all the prices that combine to form the final price of this ticket
396
+	 *
397
+	 * @param array $query_params like EEM_Base::get_all
398
+	 * @return EE_Price[]|EE_Base_Class[]
399
+	 * @throws \EE_Error
400
+	 */
401 401
 	public function prices( $query_params = array() ) {
402 402
 		return $this->get_many_related( 'Price', $query_params );
403 403
 	}
404 404
 
405 405
 
406 406
 
407
-    /**
408
-     * Gets all the ticket applicabilities (ie, relations between datetimes and tickets)
409
-     *
410
-     * @param array $query_params see EEM_Base::get_all()
411
-     * @return EE_Datetime_Ticket|EE_Base_Class[]
412
-     * @throws \EE_Error
413
-     */
407
+	/**
408
+	 * Gets all the ticket applicabilities (ie, relations between datetimes and tickets)
409
+	 *
410
+	 * @param array $query_params see EEM_Base::get_all()
411
+	 * @return EE_Datetime_Ticket|EE_Base_Class[]
412
+	 * @throws \EE_Error
413
+	 */
414 414
 	public function datetime_tickets( $query_params = array() ) {
415 415
 		return $this->get_many_related( 'Datetime_Ticket', $query_params );
416 416
 	}
417 417
 
418 418
 
419 419
 
420
-    /**
421
-     * Gets all the datetimes from the db ordered by DTT_order
422
-     *
423
-     * @param boolean $show_expired
424
-     * @param boolean $show_deleted
425
-     * @return EE_Datetime[]
426
-     * @throws \EE_Error
427
-     */
420
+	/**
421
+	 * Gets all the datetimes from the db ordered by DTT_order
422
+	 *
423
+	 * @param boolean $show_expired
424
+	 * @param boolean $show_deleted
425
+	 * @return EE_Datetime[]
426
+	 * @throws \EE_Error
427
+	 */
428 428
 	public function datetimes_ordered( $show_expired = TRUE, $show_deleted = FALSE ) {
429 429
 		return EEM_Datetime::instance( $this->_timezone )->get_datetimes_for_ticket_ordered_by_DTT_order( $this->ID(), $show_expired, $show_deleted );
430 430
 	}
431 431
 
432 432
 
433 433
 
434
-    /**
435
-     * Gets ID
436
-     *
437
-     * @return string
438
-     * @throws \EE_Error
439
-     */
434
+	/**
435
+	 * Gets ID
436
+	 *
437
+	 * @return string
438
+	 * @throws \EE_Error
439
+	 */
440 440
 	public function ID() {
441 441
 		return $this->get( 'TKT_ID' );
442 442
 	}
443 443
 
444 444
 
445 445
 
446
-    /**
447
-     * get the author of the ticket.
448
-     *
449
-     * @since 4.5.0
450
-     * @return int
451
-     * @throws \EE_Error
452
-     */
446
+	/**
447
+	 * get the author of the ticket.
448
+	 *
449
+	 * @since 4.5.0
450
+	 * @return int
451
+	 * @throws \EE_Error
452
+	 */
453 453
 	public function wp_user() {
454 454
 		return $this->get('TKT_wp_user');
455 455
 	}
456 456
 
457 457
 
458 458
 
459
-    /**
460
-     * Gets the template for the ticket
461
-     *
462
-     * @return EE_Ticket_Template|EE_Base_Class
463
-     * @throws \EE_Error
464
-     */
459
+	/**
460
+	 * Gets the template for the ticket
461
+	 *
462
+	 * @return EE_Ticket_Template|EE_Base_Class
463
+	 * @throws \EE_Error
464
+	 */
465 465
 	public function template() {
466 466
 		return $this->get_first_related( 'Ticket_Template' );
467 467
 	}
468 468
 
469 469
 
470 470
 
471
-    /**
472
-     * Simply returns an array of EE_Price objects that are taxes.
473
-     *
474
-     * @return EE_Price[]
475
-     * @throws \EE_Error
476
-     */
471
+	/**
472
+	 * Simply returns an array of EE_Price objects that are taxes.
473
+	 *
474
+	 * @return EE_Price[]
475
+	 * @throws \EE_Error
476
+	 */
477 477
 	public function get_ticket_taxes_for_admin() {
478 478
 		return EE_Taxes::get_taxes_for_admin();
479 479
 	}
480 480
 
481 481
 
482 482
 
483
-    /**
484
-     * @return float
485
-     * @throws \EE_Error
486
-     */
483
+	/**
484
+	 * @return float
485
+	 * @throws \EE_Error
486
+	 */
487 487
 	public function ticket_price() {
488 488
 		return $this->get( 'TKT_price' );
489 489
 	}
490 490
 
491 491
 
492 492
 
493
-    /**
494
-     * @return mixed
495
-     * @throws \EE_Error
496
-     */
493
+	/**
494
+	 * @return mixed
495
+	 * @throws \EE_Error
496
+	 */
497 497
 	public function pretty_price() {
498 498
 		return $this->get_pretty( 'TKT_price' );
499 499
 	}
500 500
 
501 501
 
502 502
 
503
-    /**
504
-     * @return bool
505
-     * @throws \EE_Error
506
-     */
503
+	/**
504
+	 * @return bool
505
+	 * @throws \EE_Error
506
+	 */
507 507
 	public function is_free() {
508 508
 		return $this->get_ticket_total_with_taxes() === (float) 0;
509 509
 	}
510 510
 
511 511
 
512 512
 
513
-    /**
514
-     * get_ticket_total_with_taxes
515
-     *
516
-     * @param bool $no_cache
517
-     * @return float
518
-     * @throws \EE_Error
519
-     */
513
+	/**
514
+	 * get_ticket_total_with_taxes
515
+	 *
516
+	 * @param bool $no_cache
517
+	 * @return float
518
+	 * @throws \EE_Error
519
+	 */
520 520
 	public function get_ticket_total_with_taxes( $no_cache = FALSE ) {
521 521
 		if ($this->_ticket_total_with_taxes === null || $no_cache ) {
522 522
 			$this->_ticket_total_with_taxes = $this->get_ticket_subtotal() + $this->get_ticket_taxes_total_for_admin();
@@ -533,201 +533,201 @@  discard block
 block discarded – undo
533 533
 
534 534
 
535 535
 
536
-    /**
537
-     * @return float
538
-     * @throws \EE_Error
539
-     */
536
+	/**
537
+	 * @return float
538
+	 * @throws \EE_Error
539
+	 */
540 540
 	public function get_ticket_subtotal() {
541 541
 		return EE_Taxes::get_subtotal_for_admin( $this );
542 542
 	}
543 543
 
544 544
 
545 545
 
546
-    /**
547
-     * Returns the total taxes applied to this ticket
548
-     *
549
-     * @return float
550
-     * @throws \EE_Error
551
-     */
546
+	/**
547
+	 * Returns the total taxes applied to this ticket
548
+	 *
549
+	 * @return float
550
+	 * @throws \EE_Error
551
+	 */
552 552
 	public function get_ticket_taxes_total_for_admin() {
553 553
 		return EE_Taxes::get_total_taxes_for_admin( $this );
554 554
 	}
555 555
 
556 556
 
557 557
 
558
-    /**
559
-     * Sets name
560
-     *
561
-     * @param string $name
562
-     * @throws \EE_Error
563
-     */
558
+	/**
559
+	 * Sets name
560
+	 *
561
+	 * @param string $name
562
+	 * @throws \EE_Error
563
+	 */
564 564
 	public function set_name( $name ) {
565 565
 		$this->set( 'TKT_name', $name );
566 566
 	}
567 567
 
568 568
 
569 569
 
570
-    /**
571
-     * Gets description
572
-     *
573
-     * @return string
574
-     * @throws \EE_Error
575
-     */
570
+	/**
571
+	 * Gets description
572
+	 *
573
+	 * @return string
574
+	 * @throws \EE_Error
575
+	 */
576 576
 	public function description() {
577 577
 		return $this->get( 'TKT_description' );
578 578
 	}
579 579
 
580 580
 
581 581
 
582
-    /**
583
-     * Sets description
584
-     *
585
-     * @param string $description
586
-     * @throws \EE_Error
587
-     */
582
+	/**
583
+	 * Sets description
584
+	 *
585
+	 * @param string $description
586
+	 * @throws \EE_Error
587
+	 */
588 588
 	public function set_description( $description ) {
589 589
 		$this->set( 'TKT_description', $description );
590 590
 	}
591 591
 
592 592
 
593 593
 
594
-    /**
595
-     * Gets start_date
596
-     *
597
-     * @param string $dt_frmt
598
-     * @param string $tm_frmt
599
-     * @return string
600
-     * @throws \EE_Error
601
-     */
594
+	/**
595
+	 * Gets start_date
596
+	 *
597
+	 * @param string $dt_frmt
598
+	 * @param string $tm_frmt
599
+	 * @return string
600
+	 * @throws \EE_Error
601
+	 */
602 602
 	public function start_date( $dt_frmt = '', $tm_frmt = '' ) {
603 603
 		return $this->_get_datetime( 'TKT_start_date', $dt_frmt, $tm_frmt );
604 604
 	}
605 605
 
606 606
 
607 607
 
608
-    /**
609
-     * Sets start_date
610
-     *
611
-     * @param string $start_date
612
-     * @return void
613
-     * @throws \EE_Error
614
-     */
608
+	/**
609
+	 * Sets start_date
610
+	 *
611
+	 * @param string $start_date
612
+	 * @return void
613
+	 * @throws \EE_Error
614
+	 */
615 615
 	public function set_start_date( $start_date ) {
616 616
 		$this->_set_date_time( 'B', $start_date, 'TKT_start_date' );
617 617
 	}
618 618
 
619 619
 
620 620
 
621
-    /**
622
-     * Gets end_date
623
-     *
624
-     * @param string $dt_frmt
625
-     * @param string $tm_frmt
626
-     * @return string
627
-     * @throws \EE_Error
628
-     */
621
+	/**
622
+	 * Gets end_date
623
+	 *
624
+	 * @param string $dt_frmt
625
+	 * @param string $tm_frmt
626
+	 * @return string
627
+	 * @throws \EE_Error
628
+	 */
629 629
 	public function end_date( $dt_frmt = '', $tm_frmt = '' ) {
630 630
 		return $this->_get_datetime( 'TKT_end_date', $dt_frmt, $tm_frmt );
631 631
 	}
632 632
 
633 633
 
634 634
 
635
-    /**
636
-     * Sets end_date
637
-     *
638
-     * @param string $end_date
639
-     * @return void
640
-     * @throws \EE_Error
641
-     */
635
+	/**
636
+	 * Sets end_date
637
+	 *
638
+	 * @param string $end_date
639
+	 * @return void
640
+	 * @throws \EE_Error
641
+	 */
642 642
 	public function set_end_date( $end_date ) {
643 643
 		$this->_set_date_time( 'B', $end_date, 'TKT_end_date' );
644 644
 	}
645 645
 
646 646
 
647 647
 
648
-    /**
649
-     * Sets sell until time
650
-     *
651
-     * @since 4.5.0
652
-     * @param string $time a string representation of the sell until time (ex 9am or 7:30pm)
653
-     * @throws \EE_Error
654
-     */
648
+	/**
649
+	 * Sets sell until time
650
+	 *
651
+	 * @since 4.5.0
652
+	 * @param string $time a string representation of the sell until time (ex 9am or 7:30pm)
653
+	 * @throws \EE_Error
654
+	 */
655 655
 	public function set_end_time( $time ) {
656 656
 		$this->_set_time_for( $time, 'TKT_end_date' );
657 657
 	}
658 658
 
659 659
 
660 660
 
661
-    /**
662
-     * Sets min
663
-     *
664
-     * @param int $min
665
-     * @return void
666
-     * @throws \EE_Error
667
-     */
661
+	/**
662
+	 * Sets min
663
+	 *
664
+	 * @param int $min
665
+	 * @return void
666
+	 * @throws \EE_Error
667
+	 */
668 668
 	public function set_min( $min ) {
669 669
 		$this->set( 'TKT_min', $min );
670 670
 	}
671 671
 
672 672
 
673 673
 
674
-    /**
675
-     * Gets max
676
-     *
677
-     * @return int
678
-     * @throws \EE_Error
679
-     */
674
+	/**
675
+	 * Gets max
676
+	 *
677
+	 * @return int
678
+	 * @throws \EE_Error
679
+	 */
680 680
 	public function max() {
681 681
 		return $this->get( 'TKT_max' );
682 682
 	}
683 683
 
684 684
 
685 685
 
686
-    /**
687
-     * Sets max
688
-     *
689
-     * @param int $max
690
-     * @return void
691
-     * @throws \EE_Error
692
-     */
686
+	/**
687
+	 * Sets max
688
+	 *
689
+	 * @param int $max
690
+	 * @return void
691
+	 * @throws \EE_Error
692
+	 */
693 693
 	public function set_max( $max ) {
694 694
 		$this->set( 'TKT_max', $max );
695 695
 	}
696 696
 
697 697
 
698 698
 
699
-    /**
700
-     * Sets price
701
-     *
702
-     * @param float $price
703
-     * @return void
704
-     * @throws \EE_Error
705
-     */
699
+	/**
700
+	 * Sets price
701
+	 *
702
+	 * @param float $price
703
+	 * @return void
704
+	 * @throws \EE_Error
705
+	 */
706 706
 	public function set_price( $price ) {
707 707
 		$this->set( 'TKT_price', $price );
708 708
 	}
709 709
 
710 710
 
711 711
 
712
-    /**
713
-     * Gets sold
714
-     *
715
-     * @return int
716
-     * @throws \EE_Error
717
-     */
712
+	/**
713
+	 * Gets sold
714
+	 *
715
+	 * @return int
716
+	 * @throws \EE_Error
717
+	 */
718 718
 	public function sold() {
719 719
 		return $this->get_raw( 'TKT_sold' );
720 720
 	}
721 721
 
722 722
 
723 723
 
724
-    /**
725
-     * Sets sold
726
-     *
727
-     * @param int $sold
728
-     * @return void
729
-     * @throws \EE_Error
730
-     */
724
+	/**
725
+	 * Sets sold
726
+	 *
727
+	 * @param int $sold
728
+	 * @return void
729
+	 * @throws \EE_Error
730
+	 */
731 731
 	public function set_sold( $sold ) {
732 732
 		// sold can not go below zero
733 733
 		$sold = max( 0, $sold );
@@ -736,13 +736,13 @@  discard block
 block discarded – undo
736 736
 
737 737
 
738 738
 
739
-    /**
740
-     * increments sold by amount passed by $qty
741
-     *
742
-     * @param int $qty
743
-     * @return void
744
-     * @throws \EE_Error
745
-     */
739
+	/**
740
+	 * increments sold by amount passed by $qty
741
+	 *
742
+	 * @param int $qty
743
+	 * @return void
744
+	 * @throws \EE_Error
745
+	 */
746 746
 	public function increase_sold( $qty = 1 ) {
747 747
 		$sold = $this->sold() + $qty;
748 748
 		// remove ticket reservation, but don't adjust datetime reservations,  because that will happen
@@ -751,22 +751,22 @@  discard block
 block discarded – undo
751 751
 		$this->_increase_sold_for_datetimes( $qty );
752 752
 		$this->set_sold( $sold );
753 753
 		do_action(
754
-		    'AHEE__EE_Ticket__increase_sold',
755
-            $this,
756
-            $qty,
757
-            $sold
758
-        );
754
+			'AHEE__EE_Ticket__increase_sold',
755
+			$this,
756
+			$qty,
757
+			$sold
758
+		);
759 759
 	}
760 760
 
761 761
 
762 762
 
763
-    /**
764
-     * Increases sold on related datetimes
765
-     *
766
-     * @param int $qty
767
-     * @return void
768
-     * @throws \EE_Error
769
-     */
763
+	/**
764
+	 * Increases sold on related datetimes
765
+	 *
766
+	 * @param int $qty
767
+	 * @return void
768
+	 * @throws \EE_Error
769
+	 */
770 770
 	protected function _increase_sold_for_datetimes( $qty = 1 ) {
771 771
 		$datetimes = $this->datetimes();
772 772
 		if ( is_array( $datetimes ) ) {
@@ -781,34 +781,34 @@  discard block
 block discarded – undo
781 781
 
782 782
 
783 783
 
784
-    /**
785
-     * decrements (subtracts) sold by amount passed by $qty
786
-     *
787
-     * @param int $qty
788
-     * @return void
789
-     * @throws \EE_Error
790
-     */
784
+	/**
785
+	 * decrements (subtracts) sold by amount passed by $qty
786
+	 *
787
+	 * @param int $qty
788
+	 * @return void
789
+	 * @throws \EE_Error
790
+	 */
791 791
 	public function decrease_sold( $qty = 1 ) {
792 792
 		$sold = $this->sold() - $qty;
793 793
 		$this->_decrease_sold_for_datetimes( $qty );
794 794
 		$this->set_sold( $sold );
795
-        do_action(
796
-            'AHEE__EE_Ticket__decrease_sold',
797
-            $this,
798
-            $qty,
799
-            $sold
800
-        );
801
-    }
802
-
803
-
804
-
805
-    /**
806
-     * Decreases sold on related datetimes
807
-     *
808
-     * @param int $qty
809
-     * @return void
810
-     * @throws \EE_Error
811
-     */
795
+		do_action(
796
+			'AHEE__EE_Ticket__decrease_sold',
797
+			$this,
798
+			$qty,
799
+			$sold
800
+		);
801
+	}
802
+
803
+
804
+
805
+	/**
806
+	 * Decreases sold on related datetimes
807
+	 *
808
+	 * @param int $qty
809
+	 * @return void
810
+	 * @throws \EE_Error
811
+	 */
812 812
 	protected function _decrease_sold_for_datetimes( $qty = 1 ) {
813 813
 		$datetimes = $this->datetimes();
814 814
 		if ( is_array( $datetimes ) ) {
@@ -823,25 +823,25 @@  discard block
 block discarded – undo
823 823
 
824 824
 
825 825
 
826
-    /**
827
-     * Gets qty of reserved tickets
828
-     *
829
-     * @return int
830
-     * @throws \EE_Error
831
-     */
826
+	/**
827
+	 * Gets qty of reserved tickets
828
+	 *
829
+	 * @return int
830
+	 * @throws \EE_Error
831
+	 */
832 832
 	public function reserved() {
833 833
 		return $this->get_raw( 'TKT_reserved' );
834 834
 	}
835 835
 
836 836
 
837 837
 
838
-    /**
839
-     * Sets reserved
840
-     *
841
-     * @param int $reserved
842
-     * @return void
843
-     * @throws \EE_Error
844
-     */
838
+	/**
839
+	 * Sets reserved
840
+	 *
841
+	 * @param int $reserved
842
+	 * @return void
843
+	 * @throws \EE_Error
844
+	 */
845 845
 	public function set_reserved( $reserved ) {
846 846
 		// reserved can not go below zero
847 847
 		$reserved = max( 0, (int) $reserved );
@@ -849,48 +849,48 @@  discard block
 block discarded – undo
849 849
 	}
850 850
 
851 851
 
852
-    /**
853
-     * increments reserved by amount passed by $qty
854
-     *
855
-     * @param int    $qty
856
-     * @param string $source
857
-     * @return void
858
-     * @throws EE_Error
859
-     * @throws InvalidArgumentException
860
-     * @throws ReflectionException
861
-     * @throws \EventEspresso\core\exceptions\InvalidDataTypeException
862
-     * @throws \EventEspresso\core\exceptions\InvalidInterfaceException
863
-     */
852
+	/**
853
+	 * increments reserved by amount passed by $qty
854
+	 *
855
+	 * @param int    $qty
856
+	 * @param string $source
857
+	 * @return void
858
+	 * @throws EE_Error
859
+	 * @throws InvalidArgumentException
860
+	 * @throws ReflectionException
861
+	 * @throws \EventEspresso\core\exceptions\InvalidDataTypeException
862
+	 * @throws \EventEspresso\core\exceptions\InvalidInterfaceException
863
+	 */
864 864
 	public function increase_reserved( $qty = 1, $source = 'unknown' ) {
865 865
 		$qty = absint( $qty );
866 866
 		$reserved = $this->reserved() + $qty;
867
-        if (
868
-            $reserved
869
-            && $this->add_extra_meta(
870
-                EE_Ticket::META_KEY_TICKET_RESERVATIONS,
871
-                "{$qty} from {$source}"
872
-            )
873
-        ) {
874
-            $this->_increase_reserved_for_datetimes($qty);
875
-            $this->set_reserved($reserved);
876
-            do_action(
877
-                'AHEE__EE_Ticket__increase_reserved',
878
-                $this,
879
-                $qty,
880
-                $reserved
881
-            );
882
-        }
883
-    }
884
-
885
-
886
-
887
-    /**
888
-     * Increases sold on related datetimes
889
-     *
890
-     * @param int $qty
891
-     * @return void
892
-     * @throws \EE_Error
893
-     */
867
+		if (
868
+			$reserved
869
+			&& $this->add_extra_meta(
870
+				EE_Ticket::META_KEY_TICKET_RESERVATIONS,
871
+				"{$qty} from {$source}"
872
+			)
873
+		) {
874
+			$this->_increase_reserved_for_datetimes($qty);
875
+			$this->set_reserved($reserved);
876
+			do_action(
877
+				'AHEE__EE_Ticket__increase_reserved',
878
+				$this,
879
+				$qty,
880
+				$reserved
881
+			);
882
+		}
883
+	}
884
+
885
+
886
+
887
+	/**
888
+	 * Increases sold on related datetimes
889
+	 *
890
+	 * @param int $qty
891
+	 * @return void
892
+	 * @throws \EE_Error
893
+	 */
894 894
 	protected function _increase_reserved_for_datetimes( $qty = 1 ) {
895 895
 		$datetimes = $this->datetimes();
896 896
 		if ( is_array( $datetimes ) ) {
@@ -904,49 +904,49 @@  discard block
 block discarded – undo
904 904
 	}
905 905
 
906 906
 
907
-    /**
908
-     * decrements (subtracts) reserved by amount passed by $qty
909
-     *
910
-     * @param int    $qty
911
-     * @param bool   $adjust_datetimes
912
-     * @param string $source
913
-     * @return void
914
-     * @throws EE_Error
915
-     * @throws InvalidArgumentException
916
-     * @throws ReflectionException
917
-     * @throws \EventEspresso\core\exceptions\InvalidDataTypeException
918
-     * @throws \EventEspresso\core\exceptions\InvalidInterfaceException
919
-     */
907
+	/**
908
+	 * decrements (subtracts) reserved by amount passed by $qty
909
+	 *
910
+	 * @param int    $qty
911
+	 * @param bool   $adjust_datetimes
912
+	 * @param string $source
913
+	 * @return void
914
+	 * @throws EE_Error
915
+	 * @throws InvalidArgumentException
916
+	 * @throws ReflectionException
917
+	 * @throws \EventEspresso\core\exceptions\InvalidDataTypeException
918
+	 * @throws \EventEspresso\core\exceptions\InvalidInterfaceException
919
+	 */
920 920
 	public function decrease_reserved( $qty = 1, $adjust_datetimes = true, $source = 'unknown' ) {
921 921
 		$reserved = $this->reserved() - absint( $qty );
922
-        if (
923
-            $this->add_extra_meta(
924
-                EE_Ticket::META_KEY_TICKET_RESERVATIONS,
925
-                "-{$qty} from {$source}"
926
-            )
927
-        ) {
928
-            if ($adjust_datetimes) {
929
-                $this->_decrease_reserved_for_datetimes($qty);
930
-            }
931
-            $this->set_reserved($reserved);
932
-            do_action(
933
-                'AHEE__EE_Ticket__decrease_reserved',
934
-                $this,
935
-                $qty,
936
-                $reserved
937
-            );
938
-        }
939
-    }
940
-
941
-
942
-
943
-    /**
944
-     * Increases sold on related datetimes
945
-     *
946
-     * @param int $qty
947
-     * @return void
948
-     * @throws \EE_Error
949
-     */
922
+		if (
923
+			$this->add_extra_meta(
924
+				EE_Ticket::META_KEY_TICKET_RESERVATIONS,
925
+				"-{$qty} from {$source}"
926
+			)
927
+		) {
928
+			if ($adjust_datetimes) {
929
+				$this->_decrease_reserved_for_datetimes($qty);
930
+			}
931
+			$this->set_reserved($reserved);
932
+			do_action(
933
+				'AHEE__EE_Ticket__decrease_reserved',
934
+				$this,
935
+				$qty,
936
+				$reserved
937
+			);
938
+		}
939
+	}
940
+
941
+
942
+
943
+	/**
944
+	 * Increases sold on related datetimes
945
+	 *
946
+	 * @param int $qty
947
+	 * @return void
948
+	 * @throws \EE_Error
949
+	 */
950 950
 	protected function _decrease_reserved_for_datetimes( $qty = 1 ) {
951 951
 		$datetimes = $this->datetimes();
952 952
 		if ( is_array( $datetimes ) ) {
@@ -961,18 +961,18 @@  discard block
 block discarded – undo
961 961
 
962 962
 
963 963
 
964
-    /**
965
-     * Gets ticket quantity
966
-     *
967
-     * @param string $context     ticket quantity is somewhat subjective depending on the exact information sought
968
-     *                            therefore $context can be one of three values: '', 'reg_limit', or 'saleable'
969
-     *                            '' (default) quantity is the actual db value for TKT_qty, unaffected by other objects
970
-     *                            REG LIMIT: caps qty based on DTT_reg_limit for ALL related datetimes
971
-     *                            SALEABLE: also considers datetime sold and returns zero if ANY DTT is sold out, and
972
-     *                            is therefore the truest measure of tickets that can be purchased at the moment
973
-     * @return int
974
-     * @throws \EE_Error
975
-     */
964
+	/**
965
+	 * Gets ticket quantity
966
+	 *
967
+	 * @param string $context     ticket quantity is somewhat subjective depending on the exact information sought
968
+	 *                            therefore $context can be one of three values: '', 'reg_limit', or 'saleable'
969
+	 *                            '' (default) quantity is the actual db value for TKT_qty, unaffected by other objects
970
+	 *                            REG LIMIT: caps qty based on DTT_reg_limit for ALL related datetimes
971
+	 *                            SALEABLE: also considers datetime sold and returns zero if ANY DTT is sold out, and
972
+	 *                            is therefore the truest measure of tickets that can be purchased at the moment
973
+	 * @return int
974
+	 * @throws \EE_Error
975
+	 */
976 976
 	public function qty( $context = '' ) {
977 977
 		switch ( $context ) {
978 978
 			case 'reg_limit' :
@@ -986,19 +986,19 @@  discard block
 block discarded – undo
986 986
 
987 987
 
988 988
 
989
-    /**
990
-     * Gets ticket quantity
991
-     *
992
-     * @param string $context     ticket quantity is somewhat subjective depending on the exact information sought
993
-     *                            therefore $context can be one of two values: 'reg_limit', or 'saleable'
994
-     *                            REG LIMIT: caps qty based on DTT_reg_limit for ALL related datetimes
995
-     *                            SALEABLE: also considers datetime sold and returns zero if ANY DTT is sold out, and
996
-     *                            is therefore the truest measure of tickets that can be purchased at the moment
997
-     * @param  int   $DTT_ID      the primary key for a particular datetime.
998
-     *                            set to 0 for all related datetimes
999
-     * @return int
1000
-     * @throws \EE_Error
1001
-     */
989
+	/**
990
+	 * Gets ticket quantity
991
+	 *
992
+	 * @param string $context     ticket quantity is somewhat subjective depending on the exact information sought
993
+	 *                            therefore $context can be one of two values: 'reg_limit', or 'saleable'
994
+	 *                            REG LIMIT: caps qty based on DTT_reg_limit for ALL related datetimes
995
+	 *                            SALEABLE: also considers datetime sold and returns zero if ANY DTT is sold out, and
996
+	 *                            is therefore the truest measure of tickets that can be purchased at the moment
997
+	 * @param  int   $DTT_ID      the primary key for a particular datetime.
998
+	 *                            set to 0 for all related datetimes
999
+	 * @return int
1000
+	 * @throws \EE_Error
1001
+	 */
1002 1002
 	public function real_quantity_on_ticket( $context = 'reg_limit', $DTT_ID = 0 ) {
1003 1003
 		$raw = $this->get_raw( 'TKT_qty' );
1004 1004
 		// return immediately if it's zero
@@ -1081,212 +1081,212 @@  discard block
 block discarded – undo
1081 1081
 
1082 1082
 
1083 1083
 
1084
-    /**
1085
-     * Gets uses
1086
-     *
1087
-     * @return int
1088
-     * @throws \EE_Error
1089
-     */
1084
+	/**
1085
+	 * Gets uses
1086
+	 *
1087
+	 * @return int
1088
+	 * @throws \EE_Error
1089
+	 */
1090 1090
 	public function uses() {
1091 1091
 		return $this->get( 'TKT_uses' );
1092 1092
 	}
1093 1093
 
1094 1094
 
1095 1095
 
1096
-    /**
1097
-     * Sets uses
1098
-     *
1099
-     * @param int $uses
1100
-     * @return void
1101
-     * @throws \EE_Error
1102
-     */
1096
+	/**
1097
+	 * Sets uses
1098
+	 *
1099
+	 * @param int $uses
1100
+	 * @return void
1101
+	 * @throws \EE_Error
1102
+	 */
1103 1103
 	public function set_uses( $uses ) {
1104 1104
 		$this->set( 'TKT_uses', $uses );
1105 1105
 	}
1106 1106
 
1107 1107
 
1108 1108
 
1109
-    /**
1110
-     * returns whether ticket is required or not.
1111
-     *
1112
-     * @return boolean
1113
-     * @throws \EE_Error
1114
-     */
1109
+	/**
1110
+	 * returns whether ticket is required or not.
1111
+	 *
1112
+	 * @return boolean
1113
+	 * @throws \EE_Error
1114
+	 */
1115 1115
 	public function required() {
1116 1116
 		return $this->get( 'TKT_required' );
1117 1117
 	}
1118 1118
 
1119 1119
 
1120 1120
 
1121
-    /**
1122
-     * sets the TKT_required property
1123
-     *
1124
-     * @param boolean $required
1125
-     * @return void
1126
-     * @throws \EE_Error
1127
-     */
1121
+	/**
1122
+	 * sets the TKT_required property
1123
+	 *
1124
+	 * @param boolean $required
1125
+	 * @return void
1126
+	 * @throws \EE_Error
1127
+	 */
1128 1128
 	public function set_required( $required ) {
1129 1129
 		$this->set( 'TKT_required', $required );
1130 1130
 	}
1131 1131
 
1132 1132
 
1133 1133
 
1134
-    /**
1135
-     * Gets taxable
1136
-     *
1137
-     * @return boolean
1138
-     * @throws \EE_Error
1139
-     */
1134
+	/**
1135
+	 * Gets taxable
1136
+	 *
1137
+	 * @return boolean
1138
+	 * @throws \EE_Error
1139
+	 */
1140 1140
 	public function taxable() {
1141 1141
 		return $this->get( 'TKT_taxable' );
1142 1142
 	}
1143 1143
 
1144 1144
 
1145 1145
 
1146
-    /**
1147
-     * Sets taxable
1148
-     *
1149
-     * @param boolean $taxable
1150
-     * @return void
1151
-     * @throws \EE_Error
1152
-     */
1146
+	/**
1147
+	 * Sets taxable
1148
+	 *
1149
+	 * @param boolean $taxable
1150
+	 * @return void
1151
+	 * @throws \EE_Error
1152
+	 */
1153 1153
 	public function set_taxable( $taxable ) {
1154 1154
 		$this->set( 'TKT_taxable', $taxable );
1155 1155
 	}
1156 1156
 
1157 1157
 
1158 1158
 
1159
-    /**
1160
-     * Gets is_default
1161
-     *
1162
-     * @return boolean
1163
-     * @throws \EE_Error
1164
-     */
1159
+	/**
1160
+	 * Gets is_default
1161
+	 *
1162
+	 * @return boolean
1163
+	 * @throws \EE_Error
1164
+	 */
1165 1165
 	public function is_default() {
1166 1166
 		return $this->get( 'TKT_is_default' );
1167 1167
 	}
1168 1168
 
1169 1169
 
1170 1170
 
1171
-    /**
1172
-     * Sets is_default
1173
-     *
1174
-     * @param boolean $is_default
1175
-     * @return void
1176
-     * @throws \EE_Error
1177
-     */
1171
+	/**
1172
+	 * Sets is_default
1173
+	 *
1174
+	 * @param boolean $is_default
1175
+	 * @return void
1176
+	 * @throws \EE_Error
1177
+	 */
1178 1178
 	public function set_is_default( $is_default ) {
1179 1179
 		$this->set( 'TKT_is_default', $is_default );
1180 1180
 	}
1181 1181
 
1182 1182
 
1183 1183
 
1184
-    /**
1185
-     * Gets order
1186
-     *
1187
-     * @return int
1188
-     * @throws \EE_Error
1189
-     */
1184
+	/**
1185
+	 * Gets order
1186
+	 *
1187
+	 * @return int
1188
+	 * @throws \EE_Error
1189
+	 */
1190 1190
 	public function order() {
1191 1191
 		return $this->get( 'TKT_order' );
1192 1192
 	}
1193 1193
 
1194 1194
 
1195 1195
 
1196
-    /**
1197
-     * Sets order
1198
-     *
1199
-     * @param int $order
1200
-     * @return void
1201
-     * @throws \EE_Error
1202
-     */
1196
+	/**
1197
+	 * Sets order
1198
+	 *
1199
+	 * @param int $order
1200
+	 * @return void
1201
+	 * @throws \EE_Error
1202
+	 */
1203 1203
 	public function set_order( $order ) {
1204 1204
 		$this->set( 'TKT_order', $order );
1205 1205
 	}
1206 1206
 
1207 1207
 
1208 1208
 
1209
-    /**
1210
-     * Gets row
1211
-     *
1212
-     * @return int
1213
-     * @throws \EE_Error
1214
-     */
1209
+	/**
1210
+	 * Gets row
1211
+	 *
1212
+	 * @return int
1213
+	 * @throws \EE_Error
1214
+	 */
1215 1215
 	public function row() {
1216 1216
 		return $this->get( 'TKT_row' );
1217 1217
 	}
1218 1218
 
1219 1219
 
1220 1220
 
1221
-    /**
1222
-     * Sets row
1223
-     *
1224
-     * @param int $row
1225
-     * @return void
1226
-     * @throws \EE_Error
1227
-     */
1221
+	/**
1222
+	 * Sets row
1223
+	 *
1224
+	 * @param int $row
1225
+	 * @return void
1226
+	 * @throws \EE_Error
1227
+	 */
1228 1228
 	public function set_row( $row ) {
1229 1229
 		$this->set( 'TKT_row', $row );
1230 1230
 	}
1231 1231
 
1232 1232
 
1233 1233
 
1234
-    /**
1235
-     * Gets deleted
1236
-     *
1237
-     * @return boolean
1238
-     * @throws \EE_Error
1239
-     */
1234
+	/**
1235
+	 * Gets deleted
1236
+	 *
1237
+	 * @return boolean
1238
+	 * @throws \EE_Error
1239
+	 */
1240 1240
 	public function deleted() {
1241 1241
 		return $this->get( 'TKT_deleted' );
1242 1242
 	}
1243 1243
 
1244 1244
 
1245 1245
 
1246
-    /**
1247
-     * Sets deleted
1248
-     *
1249
-     * @param boolean $deleted
1250
-     * @return void
1251
-     * @throws \EE_Error
1252
-     */
1246
+	/**
1247
+	 * Sets deleted
1248
+	 *
1249
+	 * @param boolean $deleted
1250
+	 * @return void
1251
+	 * @throws \EE_Error
1252
+	 */
1253 1253
 	public function set_deleted( $deleted ) {
1254 1254
 		$this->set( 'TKT_deleted', $deleted );
1255 1255
 	}
1256 1256
 
1257 1257
 
1258 1258
 
1259
-    /**
1260
-     * Gets parent
1261
-     *
1262
-     * @return int
1263
-     * @throws \EE_Error
1264
-     */
1259
+	/**
1260
+	 * Gets parent
1261
+	 *
1262
+	 * @return int
1263
+	 * @throws \EE_Error
1264
+	 */
1265 1265
 	public function parent_ID() {
1266 1266
 		return $this->get( 'TKT_parent' );
1267 1267
 	}
1268 1268
 
1269 1269
 
1270 1270
 
1271
-    /**
1272
-     * Sets parent
1273
-     *
1274
-     * @param int $parent
1275
-     * @return void
1276
-     * @throws \EE_Error
1277
-     */
1271
+	/**
1272
+	 * Sets parent
1273
+	 *
1274
+	 * @param int $parent
1275
+	 * @return void
1276
+	 * @throws \EE_Error
1277
+	 */
1278 1278
 	public function set_parent_ID( $parent ) {
1279 1279
 		$this->set( 'TKT_parent', $parent );
1280 1280
 	}
1281 1281
 
1282 1282
 
1283 1283
 
1284
-    /**
1285
-     * Gets a string which is handy for showing in gateways etc that describes the ticket.
1286
-     *
1287
-     * @return string
1288
-     * @throws \EE_Error
1289
-     */
1284
+	/**
1285
+	 * Gets a string which is handy for showing in gateways etc that describes the ticket.
1286
+	 *
1287
+	 * @return string
1288
+	 * @throws \EE_Error
1289
+	 */
1290 1290
 	public function name_and_info() {
1291 1291
 		$times = array();
1292 1292
 		foreach ( $this->datetimes() as $datetime ) {
@@ -1297,67 +1297,67 @@  discard block
 block discarded – undo
1297 1297
 
1298 1298
 
1299 1299
 
1300
-    /**
1301
-     * Gets name
1302
-     *
1303
-     * @return string
1304
-     * @throws \EE_Error
1305
-     */
1300
+	/**
1301
+	 * Gets name
1302
+	 *
1303
+	 * @return string
1304
+	 * @throws \EE_Error
1305
+	 */
1306 1306
 	public function name() {
1307 1307
 		return $this->get( 'TKT_name' );
1308 1308
 	}
1309 1309
 
1310 1310
 
1311 1311
 
1312
-    /**
1313
-     * Gets price
1314
-     *
1315
-     * @return float
1316
-     * @throws \EE_Error
1317
-     */
1312
+	/**
1313
+	 * Gets price
1314
+	 *
1315
+	 * @return float
1316
+	 * @throws \EE_Error
1317
+	 */
1318 1318
 	public function price() {
1319 1319
 		return $this->get( 'TKT_price' );
1320 1320
 	}
1321 1321
 
1322 1322
 
1323 1323
 
1324
-    /**
1325
-     * Gets all the registrations for this ticket
1326
-     *
1327
-     * @param array $query_params like EEM_Base::get_all's
1328
-     * @return EE_Registration[]|EE_Base_Class[]
1329
-     * @throws \EE_Error
1330
-     */
1324
+	/**
1325
+	 * Gets all the registrations for this ticket
1326
+	 *
1327
+	 * @param array $query_params like EEM_Base::get_all's
1328
+	 * @return EE_Registration[]|EE_Base_Class[]
1329
+	 * @throws \EE_Error
1330
+	 */
1331 1331
 	public function registrations( $query_params = array() ) {
1332 1332
 		return $this->get_many_related( 'Registration', $query_params );
1333 1333
 	}
1334 1334
 
1335 1335
 
1336 1336
 
1337
-    /**
1338
-     * Updates the TKT_sold attribute (and saves) based on the number of APPROVED registrations for this ticket.
1339
-     * into account
1340
-     *
1341
-     * @return int
1342
-     * @throws \EE_Error
1343
-     */
1337
+	/**
1338
+	 * Updates the TKT_sold attribute (and saves) based on the number of APPROVED registrations for this ticket.
1339
+	 * into account
1340
+	 *
1341
+	 * @return int
1342
+	 * @throws \EE_Error
1343
+	 */
1344 1344
 	public function update_tickets_sold() {
1345
-        $count_regs_for_this_ticket = $this->count_registrations(
1346
-            array(
1347
-                array(
1348
-                    'STS_ID'      => EEM_Registration::status_id_approved,
1349
-                    'REG_deleted' => 0,
1350
-                ),
1351
-            )
1352
-        );
1353
-        $sold = $this->sold();
1354
-        if ($count_regs_for_this_ticket > $sold) {
1355
-            $this->increase_sold($count_regs_for_this_ticket - $sold);
1356
-            $this->save();
1357
-        } else if ($count_regs_for_this_ticket < $sold) {
1358
-            $this->decrease_sold($count_regs_for_this_ticket - $sold);
1359
-            $this->save();
1360
-        }
1345
+		$count_regs_for_this_ticket = $this->count_registrations(
1346
+			array(
1347
+				array(
1348
+					'STS_ID'      => EEM_Registration::status_id_approved,
1349
+					'REG_deleted' => 0,
1350
+				),
1351
+			)
1352
+		);
1353
+		$sold = $this->sold();
1354
+		if ($count_regs_for_this_ticket > $sold) {
1355
+			$this->increase_sold($count_regs_for_this_ticket - $sold);
1356
+			$this->save();
1357
+		} else if ($count_regs_for_this_ticket < $sold) {
1358
+			$this->decrease_sold($count_regs_for_this_ticket - $sold);
1359
+			$this->save();
1360
+		}
1361 1361
 		return $count_regs_for_this_ticket;
1362 1362
 	}
1363 1363
 
@@ -1385,21 +1385,21 @@  discard block
 block discarded – undo
1385 1385
 
1386 1386
 
1387 1387
 
1388
-    /**
1389
-     * Implementation of the EEI_Event_Relation interface method
1390
-     *
1391
-     * @see EEI_Event_Relation for comments
1392
-     * @return EE_Event
1393
-     * @throws \EE_Error
1394
-     * @throws UnexpectedEntityException
1395
-     */
1388
+	/**
1389
+	 * Implementation of the EEI_Event_Relation interface method
1390
+	 *
1391
+	 * @see EEI_Event_Relation for comments
1392
+	 * @return EE_Event
1393
+	 * @throws \EE_Error
1394
+	 * @throws UnexpectedEntityException
1395
+	 */
1396 1396
 	public function get_related_event() {
1397 1397
 		//get one datetime to use for getting the event
1398 1398
 		$datetime = $this->first_datetime();
1399 1399
 		if ( ! $datetime instanceof \EE_Datetime ) {
1400 1400
 			throw new UnexpectedEntityException(
1401 1401
 				$datetime,
1402
-                'EE_Datetime',
1402
+				'EE_Datetime',
1403 1403
 				sprintf(
1404 1404
 					__( 'The ticket (%s) is not associated with any valid datetimes.', 'event_espresso'),
1405 1405
 					$this->name()
@@ -1410,7 +1410,7 @@  discard block
 block discarded – undo
1410 1410
 		if ( ! $event instanceof \EE_Event ) {
1411 1411
 			throw new UnexpectedEntityException(
1412 1412
 				$event,
1413
-                'EE_Event',
1413
+				'EE_Event',
1414 1414
 				sprintf(
1415 1415
 					__( 'The ticket (%s) is not associated with a valid event.', 'event_espresso'),
1416 1416
 					$this->name()
@@ -1422,14 +1422,14 @@  discard block
 block discarded – undo
1422 1422
 
1423 1423
 
1424 1424
 
1425
-    /**
1426
-     * Implementation of the EEI_Event_Relation interface method
1427
-     *
1428
-     * @see EEI_Event_Relation for comments
1429
-     * @return string
1430
-     * @throws UnexpectedEntityException
1431
-     * @throws \EE_Error
1432
-     */
1425
+	/**
1426
+	 * Implementation of the EEI_Event_Relation interface method
1427
+	 *
1428
+	 * @see EEI_Event_Relation for comments
1429
+	 * @return string
1430
+	 * @throws UnexpectedEntityException
1431
+	 * @throws \EE_Error
1432
+	 */
1433 1433
 	public function get_event_name() {
1434 1434
 		$event = $this->get_related_event();
1435 1435
 		return $event instanceof EE_Event ? $event->name() : '';
@@ -1437,28 +1437,28 @@  discard block
 block discarded – undo
1437 1437
 
1438 1438
 
1439 1439
 
1440
-    /**
1441
-     * Implementation of the EEI_Event_Relation interface method
1442
-     *
1443
-     * @see EEI_Event_Relation for comments
1444
-     * @return int
1445
-     * @throws UnexpectedEntityException
1446
-     * @throws \EE_Error
1447
-     */
1440
+	/**
1441
+	 * Implementation of the EEI_Event_Relation interface method
1442
+	 *
1443
+	 * @see EEI_Event_Relation for comments
1444
+	 * @return int
1445
+	 * @throws UnexpectedEntityException
1446
+	 * @throws \EE_Error
1447
+	 */
1448 1448
 	public function get_event_ID() {
1449 1449
 		$event = $this->get_related_event();
1450 1450
 		return $event instanceof EE_Event ? $event->ID() : 0;
1451 1451
 	}
1452 1452
 
1453 1453
 
1454
-    /**
1455
-     * This simply returns whether a ticket can be permanently deleted or not.
1456
-     * The criteria for determining this is whether the ticket has any related registrations.
1457
-     * If there are none then it can be permanently deleted.
1458
-     *
1459
-     * @return bool
1460
-     */
1454
+	/**
1455
+	 * This simply returns whether a ticket can be permanently deleted or not.
1456
+	 * The criteria for determining this is whether the ticket has any related registrations.
1457
+	 * If there are none then it can be permanently deleted.
1458
+	 *
1459
+	 * @return bool
1460
+	 */
1461 1461
 	public function is_permanently_deleteable() {
1462
-	    return $this->count_registrations() === 0;
1463
-    }
1462
+		return $this->count_registrations() === 0;
1463
+	}
1464 1464
 } //end EE_Ticket class
Please login to merge, or discard this patch.
Spacing   +198 added lines, -198 removed lines patch added patch discarded remove patch
@@ -1,7 +1,7 @@  discard block
 block discarded – undo
1 1
 <?php use EventEspresso\core\exceptions\UnexpectedEntityException;
2 2
 
3
-if ( !defined( 'EVENT_ESPRESSO_VERSION' ) ) {
4
-	exit( 'No direct script access allowed' );
3
+if ( ! defined('EVENT_ESPRESSO_VERSION')) {
4
+	exit('No direct script access allowed');
5 5
 }
6 6
 /**
7 7
  * Event Espresso
@@ -77,9 +77,9 @@  discard block
 block discarded – undo
77 77
      * @return EE_Ticket
78 78
      * @throws \EE_Error
79 79
      */
80
-	public static function new_instance( $props_n_values = array(), $timezone = null, $date_formats = array() ) {
81
-		$has_object = parent::_check_for_object( $props_n_values, __CLASS__, $timezone, $date_formats );
82
-		return $has_object ? $has_object : new self( $props_n_values, false, $timezone, $date_formats );
80
+	public static function new_instance($props_n_values = array(), $timezone = null, $date_formats = array()) {
81
+		$has_object = parent::_check_for_object($props_n_values, __CLASS__, $timezone, $date_formats);
82
+		return $has_object ? $has_object : new self($props_n_values, false, $timezone, $date_formats);
83 83
 	}
84 84
 
85 85
 
@@ -91,8 +91,8 @@  discard block
 block discarded – undo
91 91
      * @return EE_Ticket
92 92
      * @throws \EE_Error
93 93
      */
94
-	public static function new_instance_from_db( $props_n_values = array(), $timezone = null ) {
95
-		return new self( $props_n_values, TRUE, $timezone );
94
+	public static function new_instance_from_db($props_n_values = array(), $timezone = null) {
95
+		return new self($props_n_values, TRUE, $timezone);
96 96
 	}
97 97
 
98 98
 
@@ -102,7 +102,7 @@  discard block
 block discarded – undo
102 102
      * @throws \EE_Error
103 103
      */
104 104
 	public function parent() {
105
-		return $this->get( 'TKT_parent' );
105
+		return $this->get('TKT_parent');
106 106
 	}
107 107
 
108 108
 
@@ -114,13 +114,13 @@  discard block
 block discarded – undo
114 114
      * @return boolean
115 115
      * @throws \EE_Error
116 116
      */
117
-	public function available( $DTT_ID = 0 ) {
117
+	public function available($DTT_ID = 0) {
118 118
 		// are we checking availability for a particular datetime ?
119
-		if ( $DTT_ID ) {
119
+		if ($DTT_ID) {
120 120
 			// get that datetime object
121
-			$datetime = $this->get_first_related( 'Datetime', array( array( 'DTT_ID' => $DTT_ID ) ) );
121
+			$datetime = $this->get_first_related('Datetime', array(array('DTT_ID' => $DTT_ID)));
122 122
 			// if  ticket sales for this datetime have exceeded the reg limit...
123
-			if ( $datetime instanceof EE_Datetime && $datetime->sold_out() ) {
123
+			if ($datetime instanceof EE_Datetime && $datetime->sold_out()) {
124 124
 				return FALSE;
125 125
 			}
126 126
 		}
@@ -138,22 +138,22 @@  discard block
 block discarded – undo
138 138
      * @return mixed status int if the display string isn't requested
139 139
      * @throws \EE_Error
140 140
      */
141
-	public function ticket_status( $display = FALSE, $remaining = null ) {
142
-		$remaining = is_bool( $remaining ) ? $remaining : $this->is_remaining();
143
-		if ( ! $remaining ) {
144
-			return $display ? EEH_Template::pretty_status( EE_Ticket::sold_out, FALSE, 'sentence' ) : EE_Ticket::sold_out;
141
+	public function ticket_status($display = FALSE, $remaining = null) {
142
+		$remaining = is_bool($remaining) ? $remaining : $this->is_remaining();
143
+		if ( ! $remaining) {
144
+			return $display ? EEH_Template::pretty_status(EE_Ticket::sold_out, FALSE, 'sentence') : EE_Ticket::sold_out;
145 145
 		}
146
-		if ( $this->get( 'TKT_deleted' ) ) {
147
-			return $display ? EEH_Template::pretty_status( EE_Ticket::archived, FALSE, 'sentence' ) : EE_Ticket::archived;
146
+		if ($this->get('TKT_deleted')) {
147
+			return $display ? EEH_Template::pretty_status(EE_Ticket::archived, FALSE, 'sentence') : EE_Ticket::archived;
148 148
 		}
149
-		if ( $this->is_expired() ) {
150
-			return $display ? EEH_Template::pretty_status( EE_Ticket::expired, FALSE, 'sentence' ) : EE_Ticket::expired;
149
+		if ($this->is_expired()) {
150
+			return $display ? EEH_Template::pretty_status(EE_Ticket::expired, FALSE, 'sentence') : EE_Ticket::expired;
151 151
 		}
152
-		if ( $this->is_pending() ) {
153
-			return $display ? EEH_Template::pretty_status( EE_Ticket::pending, FALSE, 'sentence' ) : EE_Ticket::pending;
152
+		if ($this->is_pending()) {
153
+			return $display ? EEH_Template::pretty_status(EE_Ticket::pending, FALSE, 'sentence') : EE_Ticket::pending;
154 154
 		}
155
-		if ( $this->is_on_sale() ) {
156
-			return $display ? EEH_Template::pretty_status( EE_Ticket::onsale, FALSE, 'sentence' ) : EE_Ticket::onsale;
155
+		if ($this->is_on_sale()) {
156
+			return $display ? EEH_Template::pretty_status(EE_Ticket::onsale, FALSE, 'sentence') : EE_Ticket::onsale;
157 157
 		}
158 158
 		return '';
159 159
 	}
@@ -168,12 +168,12 @@  discard block
 block discarded – undo
168 168
      * @return boolean         true = tickets remaining, false not.
169 169
      * @throws \EE_Error
170 170
      */
171
-	public function is_remaining( $DTT_ID = 0 ) {
172
-		$num_remaining = $this->remaining( $DTT_ID );
173
-		if ( $num_remaining === 0 ) {
171
+	public function is_remaining($DTT_ID = 0) {
172
+		$num_remaining = $this->remaining($DTT_ID);
173
+		if ($num_remaining === 0) {
174 174
 			return FALSE;
175 175
 		}
176
-		if ( $num_remaining > 0 && $num_remaining < $this->min() ) {
176
+		if ($num_remaining > 0 && $num_remaining < $this->min()) {
177 177
 			return FALSE;
178 178
 		}
179 179
 		return TRUE;
@@ -189,8 +189,8 @@  discard block
 block discarded – undo
189 189
      * @return int
190 190
      * @throws \EE_Error
191 191
      */
192
-	public function remaining( $DTT_ID = 0 ) {
193
-		return $this->real_quantity_on_ticket('saleable', $DTT_ID );
192
+	public function remaining($DTT_ID = 0) {
193
+		return $this->real_quantity_on_ticket('saleable', $DTT_ID);
194 194
 	}
195 195
 
196 196
 
@@ -202,7 +202,7 @@  discard block
 block discarded – undo
202 202
      * @throws \EE_Error
203 203
      */
204 204
 	public function min() {
205
-		return $this->get( 'TKT_min' );
205
+		return $this->get('TKT_min');
206 206
 	}
207 207
 
208 208
 
@@ -214,7 +214,7 @@  discard block
 block discarded – undo
214 214
      * @throws \EE_Error
215 215
      */
216 216
 	public function is_expired() {
217
-		return ( $this->get_raw( 'TKT_end_date' ) < time() );
217
+		return ($this->get_raw('TKT_end_date') < time());
218 218
 	}
219 219
 
220 220
 
@@ -226,7 +226,7 @@  discard block
 block discarded – undo
226 226
      * @throws \EE_Error
227 227
      */
228 228
 	public function is_pending() {
229
-		return ( $this->get_raw( 'TKT_start_date' ) > time() );
229
+		return ($this->get_raw('TKT_start_date') > time());
230 230
 	}
231 231
 
232 232
 
@@ -238,7 +238,7 @@  discard block
 block discarded – undo
238 238
      * @throws \EE_Error
239 239
      */
240 240
 	public function is_on_sale() {
241
-		return ( $this->get_raw( 'TKT_start_date' ) < time() && $this->get_raw( 'TKT_end_date' ) > time() );
241
+		return ($this->get_raw('TKT_start_date') < time() && $this->get_raw('TKT_end_date') > time());
242 242
 	}
243 243
 
244 244
 
@@ -251,11 +251,11 @@  discard block
 block discarded – undo
251 251
      * @return string
252 252
      * @throws \EE_Error
253 253
      */
254
-	public function date_range( $dt_frmt = '', $conjunction = ' - ' ) {
255
-		$first_date = $this->first_datetime() instanceof EE_Datetime ? $this->first_datetime()->start_date( $dt_frmt ) : '';
256
-		$last_date = $this->last_datetime() instanceof EE_Datetime ? $this->last_datetime()->end_date( $dt_frmt ) : '';
254
+	public function date_range($dt_frmt = '', $conjunction = ' - ') {
255
+		$first_date = $this->first_datetime() instanceof EE_Datetime ? $this->first_datetime()->start_date($dt_frmt) : '';
256
+		$last_date = $this->last_datetime() instanceof EE_Datetime ? $this->last_datetime()->end_date($dt_frmt) : '';
257 257
 
258
-		return $first_date && $last_date ? $first_date . $conjunction  . $last_date : '';
258
+		return $first_date && $last_date ? $first_date.$conjunction.$last_date : '';
259 259
 	}
260 260
 
261 261
 
@@ -267,8 +267,8 @@  discard block
 block discarded – undo
267 267
      * @throws \EE_Error
268 268
      */
269 269
 	public function first_datetime() {
270
-		$datetimes = $this->datetimes( array( 'limit' => 1 ) );
271
-		return reset( $datetimes );
270
+		$datetimes = $this->datetimes(array('limit' => 1));
271
+		return reset($datetimes);
272 272
 	}
273 273
 
274 274
 
@@ -281,11 +281,11 @@  discard block
 block discarded – undo
281 281
      * @return EE_Datetime[]|EE_Base_Class[]
282 282
      * @throws \EE_Error
283 283
      */
284
-	public function datetimes( $query_params = array() ) {
285
-		if ( ! isset( $query_params[ 'order_by' ] ) ) {
286
-			$query_params[ 'order_by' ][ 'DTT_order' ] = 'ASC';
284
+	public function datetimes($query_params = array()) {
285
+		if ( ! isset($query_params['order_by'])) {
286
+			$query_params['order_by']['DTT_order'] = 'ASC';
287 287
 		}
288
-		return $this->get_many_related( 'Datetime', $query_params );
288
+		return $this->get_many_related('Datetime', $query_params);
289 289
 	}
290 290
 
291 291
 
@@ -297,8 +297,8 @@  discard block
 block discarded – undo
297 297
      * @throws \EE_Error
298 298
      */
299 299
 	public function last_datetime() {
300
-		$datetimes = $this->datetimes( array( 'limit' => 1, 'order_by' => array( 'DTT_EVT_start' => 'DESC' ) ) );
301
-		return end( $datetimes );
300
+		$datetimes = $this->datetimes(array('limit' => 1, 'order_by' => array('DTT_EVT_start' => 'DESC')));
301
+		return end($datetimes);
302 302
 	}
303 303
 
304 304
 
@@ -316,22 +316,22 @@  discard block
 block discarded – undo
316 316
      * @return mixed (array|int)          how many tickets have sold
317 317
      * @throws \EE_Error
318 318
      */
319
-	public function tickets_sold( $what = 'ticket', $dtt_id = NULL ) {
319
+	public function tickets_sold($what = 'ticket', $dtt_id = NULL) {
320 320
 		$total = 0;
321 321
 		$tickets_sold = $this->_all_tickets_sold();
322
-		switch ( $what ) {
322
+		switch ($what) {
323 323
 			case 'ticket' :
324
-				return $tickets_sold[ 'ticket' ];
324
+				return $tickets_sold['ticket'];
325 325
 				break;
326 326
 			case 'datetime' :
327
-				if ( empty( $tickets_sold[ 'datetime' ] ) ) {
327
+				if (empty($tickets_sold['datetime'])) {
328 328
 					return $total;
329 329
 				}
330
-				if ( ! empty( $dtt_id ) && ! isset( $tickets_sold[ 'datetime' ][ $dtt_id ] ) ) {
331
-					EE_Error::add_error( __( 'You\'ve requested the amount of tickets sold for a given ticket and datetime, however there are no records for the datetime id you included.  Are you SURE that is a datetime related to this ticket?', 'event_espresso' ), __FILE__, __FUNCTION__, __LINE__ );
330
+				if ( ! empty($dtt_id) && ! isset($tickets_sold['datetime'][$dtt_id])) {
331
+					EE_Error::add_error(__('You\'ve requested the amount of tickets sold for a given ticket and datetime, however there are no records for the datetime id you included.  Are you SURE that is a datetime related to this ticket?', 'event_espresso'), __FILE__, __FUNCTION__, __LINE__);
332 332
 					return $total;
333 333
 				}
334
-				return empty( $dtt_id ) ? $tickets_sold[ 'datetime' ] : $tickets_sold[ 'datetime' ][ $dtt_id ];
334
+				return empty($dtt_id) ? $tickets_sold['datetime'] : $tickets_sold['datetime'][$dtt_id];
335 335
 				break;
336 336
 			default:
337 337
 				return $total;
@@ -347,15 +347,15 @@  discard block
 block discarded – undo
347 347
      * @throws \EE_Error
348 348
      */
349 349
 	protected function _all_tickets_sold() {
350
-		$datetimes = $this->get_many_related( 'Datetime' );
350
+		$datetimes = $this->get_many_related('Datetime');
351 351
 		$tickets_sold = array();
352
-		if ( ! empty( $datetimes ) ) {
353
-			foreach ( $datetimes as $datetime ) {
354
-				$tickets_sold[ 'datetime' ][ $datetime->ID() ] = $datetime->get( 'DTT_sold' );
352
+		if ( ! empty($datetimes)) {
353
+			foreach ($datetimes as $datetime) {
354
+				$tickets_sold['datetime'][$datetime->ID()] = $datetime->get('DTT_sold');
355 355
 			}
356 356
 		}
357 357
 		//Tickets sold
358
-		$tickets_sold[ 'ticket' ] = $this->sold();
358
+		$tickets_sold['ticket'] = $this->sold();
359 359
 		return $tickets_sold;
360 360
 	}
361 361
 
@@ -368,11 +368,11 @@  discard block
 block discarded – undo
368 368
      * @return EE_Price|EE_Base_Class|EE_Price[]|EE_Base_Class[]
369 369
      * @throws \EE_Error
370 370
      */
371
-	public function base_price( $return_array = FALSE ) {
372
-		$_where = array( 'Price_Type.PBT_ID' => EEM_Price_Type::base_type_base_price );
371
+	public function base_price($return_array = FALSE) {
372
+		$_where = array('Price_Type.PBT_ID' => EEM_Price_Type::base_type_base_price);
373 373
 		return $return_array
374
-            ? $this->get_many_related( 'Price', array( $_where ) )
375
-            : $this->get_first_related( 'Price', array( $_where ) );
374
+            ? $this->get_many_related('Price', array($_where))
375
+            : $this->get_first_related('Price', array($_where));
376 376
 	}
377 377
 
378 378
 
@@ -385,8 +385,8 @@  discard block
 block discarded – undo
385 385
      * @throws \EE_Error
386 386
      */
387 387
 	public function price_modifiers() {
388
-		$query_params = array( 0 => array( 'Price_Type.PBT_ID' => array( 'NOT IN', array( EEM_Price_Type::base_type_base_price, EEM_Price_Type::base_type_tax ) ) ) );
389
-		return $this->prices( $query_params );
388
+		$query_params = array(0 => array('Price_Type.PBT_ID' => array('NOT IN', array(EEM_Price_Type::base_type_base_price, EEM_Price_Type::base_type_tax))));
389
+		return $this->prices($query_params);
390 390
 	}
391 391
 
392 392
 
@@ -398,8 +398,8 @@  discard block
 block discarded – undo
398 398
      * @return EE_Price[]|EE_Base_Class[]
399 399
      * @throws \EE_Error
400 400
      */
401
-	public function prices( $query_params = array() ) {
402
-		return $this->get_many_related( 'Price', $query_params );
401
+	public function prices($query_params = array()) {
402
+		return $this->get_many_related('Price', $query_params);
403 403
 	}
404 404
 
405 405
 
@@ -411,8 +411,8 @@  discard block
 block discarded – undo
411 411
      * @return EE_Datetime_Ticket|EE_Base_Class[]
412 412
      * @throws \EE_Error
413 413
      */
414
-	public function datetime_tickets( $query_params = array() ) {
415
-		return $this->get_many_related( 'Datetime_Ticket', $query_params );
414
+	public function datetime_tickets($query_params = array()) {
415
+		return $this->get_many_related('Datetime_Ticket', $query_params);
416 416
 	}
417 417
 
418 418
 
@@ -425,8 +425,8 @@  discard block
 block discarded – undo
425 425
      * @return EE_Datetime[]
426 426
      * @throws \EE_Error
427 427
      */
428
-	public function datetimes_ordered( $show_expired = TRUE, $show_deleted = FALSE ) {
429
-		return EEM_Datetime::instance( $this->_timezone )->get_datetimes_for_ticket_ordered_by_DTT_order( $this->ID(), $show_expired, $show_deleted );
428
+	public function datetimes_ordered($show_expired = TRUE, $show_deleted = FALSE) {
429
+		return EEM_Datetime::instance($this->_timezone)->get_datetimes_for_ticket_ordered_by_DTT_order($this->ID(), $show_expired, $show_deleted);
430 430
 	}
431 431
 
432 432
 
@@ -438,7 +438,7 @@  discard block
 block discarded – undo
438 438
      * @throws \EE_Error
439 439
      */
440 440
 	public function ID() {
441
-		return $this->get( 'TKT_ID' );
441
+		return $this->get('TKT_ID');
442 442
 	}
443 443
 
444 444
 
@@ -463,7 +463,7 @@  discard block
 block discarded – undo
463 463
      * @throws \EE_Error
464 464
      */
465 465
 	public function template() {
466
-		return $this->get_first_related( 'Ticket_Template' );
466
+		return $this->get_first_related('Ticket_Template');
467 467
 	}
468 468
 
469 469
 
@@ -485,7 +485,7 @@  discard block
 block discarded – undo
485 485
      * @throws \EE_Error
486 486
      */
487 487
 	public function ticket_price() {
488
-		return $this->get( 'TKT_price' );
488
+		return $this->get('TKT_price');
489 489
 	}
490 490
 
491 491
 
@@ -495,7 +495,7 @@  discard block
 block discarded – undo
495 495
      * @throws \EE_Error
496 496
      */
497 497
 	public function pretty_price() {
498
-		return $this->get_pretty( 'TKT_price' );
498
+		return $this->get_pretty('TKT_price');
499 499
 	}
500 500
 
501 501
 
@@ -517,8 +517,8 @@  discard block
 block discarded – undo
517 517
      * @return float
518 518
      * @throws \EE_Error
519 519
      */
520
-	public function get_ticket_total_with_taxes( $no_cache = FALSE ) {
521
-		if ($this->_ticket_total_with_taxes === null || $no_cache ) {
520
+	public function get_ticket_total_with_taxes($no_cache = FALSE) {
521
+		if ($this->_ticket_total_with_taxes === null || $no_cache) {
522 522
 			$this->_ticket_total_with_taxes = $this->get_ticket_subtotal() + $this->get_ticket_taxes_total_for_admin();
523 523
 		}
524 524
 		return (float) $this->_ticket_total_with_taxes;
@@ -527,7 +527,7 @@  discard block
 block discarded – undo
527 527
 
528 528
 
529 529
 	public function ensure_TKT_Price_correct() {
530
-		$this->set( 'TKT_price', EE_Taxes::get_subtotal_for_admin( $this ) );
530
+		$this->set('TKT_price', EE_Taxes::get_subtotal_for_admin($this));
531 531
 		$this->save();
532 532
 	}
533 533
 
@@ -538,7 +538,7 @@  discard block
 block discarded – undo
538 538
      * @throws \EE_Error
539 539
      */
540 540
 	public function get_ticket_subtotal() {
541
-		return EE_Taxes::get_subtotal_for_admin( $this );
541
+		return EE_Taxes::get_subtotal_for_admin($this);
542 542
 	}
543 543
 
544 544
 
@@ -550,7 +550,7 @@  discard block
 block discarded – undo
550 550
      * @throws \EE_Error
551 551
      */
552 552
 	public function get_ticket_taxes_total_for_admin() {
553
-		return EE_Taxes::get_total_taxes_for_admin( $this );
553
+		return EE_Taxes::get_total_taxes_for_admin($this);
554 554
 	}
555 555
 
556 556
 
@@ -561,8 +561,8 @@  discard block
 block discarded – undo
561 561
      * @param string $name
562 562
      * @throws \EE_Error
563 563
      */
564
-	public function set_name( $name ) {
565
-		$this->set( 'TKT_name', $name );
564
+	public function set_name($name) {
565
+		$this->set('TKT_name', $name);
566 566
 	}
567 567
 
568 568
 
@@ -574,7 +574,7 @@  discard block
 block discarded – undo
574 574
      * @throws \EE_Error
575 575
      */
576 576
 	public function description() {
577
-		return $this->get( 'TKT_description' );
577
+		return $this->get('TKT_description');
578 578
 	}
579 579
 
580 580
 
@@ -585,8 +585,8 @@  discard block
 block discarded – undo
585 585
      * @param string $description
586 586
      * @throws \EE_Error
587 587
      */
588
-	public function set_description( $description ) {
589
-		$this->set( 'TKT_description', $description );
588
+	public function set_description($description) {
589
+		$this->set('TKT_description', $description);
590 590
 	}
591 591
 
592 592
 
@@ -599,8 +599,8 @@  discard block
 block discarded – undo
599 599
      * @return string
600 600
      * @throws \EE_Error
601 601
      */
602
-	public function start_date( $dt_frmt = '', $tm_frmt = '' ) {
603
-		return $this->_get_datetime( 'TKT_start_date', $dt_frmt, $tm_frmt );
602
+	public function start_date($dt_frmt = '', $tm_frmt = '') {
603
+		return $this->_get_datetime('TKT_start_date', $dt_frmt, $tm_frmt);
604 604
 	}
605 605
 
606 606
 
@@ -612,8 +612,8 @@  discard block
 block discarded – undo
612 612
      * @return void
613 613
      * @throws \EE_Error
614 614
      */
615
-	public function set_start_date( $start_date ) {
616
-		$this->_set_date_time( 'B', $start_date, 'TKT_start_date' );
615
+	public function set_start_date($start_date) {
616
+		$this->_set_date_time('B', $start_date, 'TKT_start_date');
617 617
 	}
618 618
 
619 619
 
@@ -626,8 +626,8 @@  discard block
 block discarded – undo
626 626
      * @return string
627 627
      * @throws \EE_Error
628 628
      */
629
-	public function end_date( $dt_frmt = '', $tm_frmt = '' ) {
630
-		return $this->_get_datetime( 'TKT_end_date', $dt_frmt, $tm_frmt );
629
+	public function end_date($dt_frmt = '', $tm_frmt = '') {
630
+		return $this->_get_datetime('TKT_end_date', $dt_frmt, $tm_frmt);
631 631
 	}
632 632
 
633 633
 
@@ -639,8 +639,8 @@  discard block
 block discarded – undo
639 639
      * @return void
640 640
      * @throws \EE_Error
641 641
      */
642
-	public function set_end_date( $end_date ) {
643
-		$this->_set_date_time( 'B', $end_date, 'TKT_end_date' );
642
+	public function set_end_date($end_date) {
643
+		$this->_set_date_time('B', $end_date, 'TKT_end_date');
644 644
 	}
645 645
 
646 646
 
@@ -652,8 +652,8 @@  discard block
 block discarded – undo
652 652
      * @param string $time a string representation of the sell until time (ex 9am or 7:30pm)
653 653
      * @throws \EE_Error
654 654
      */
655
-	public function set_end_time( $time ) {
656
-		$this->_set_time_for( $time, 'TKT_end_date' );
655
+	public function set_end_time($time) {
656
+		$this->_set_time_for($time, 'TKT_end_date');
657 657
 	}
658 658
 
659 659
 
@@ -665,8 +665,8 @@  discard block
 block discarded – undo
665 665
      * @return void
666 666
      * @throws \EE_Error
667 667
      */
668
-	public function set_min( $min ) {
669
-		$this->set( 'TKT_min', $min );
668
+	public function set_min($min) {
669
+		$this->set('TKT_min', $min);
670 670
 	}
671 671
 
672 672
 
@@ -678,7 +678,7 @@  discard block
 block discarded – undo
678 678
      * @throws \EE_Error
679 679
      */
680 680
 	public function max() {
681
-		return $this->get( 'TKT_max' );
681
+		return $this->get('TKT_max');
682 682
 	}
683 683
 
684 684
 
@@ -690,8 +690,8 @@  discard block
 block discarded – undo
690 690
      * @return void
691 691
      * @throws \EE_Error
692 692
      */
693
-	public function set_max( $max ) {
694
-		$this->set( 'TKT_max', $max );
693
+	public function set_max($max) {
694
+		$this->set('TKT_max', $max);
695 695
 	}
696 696
 
697 697
 
@@ -703,8 +703,8 @@  discard block
 block discarded – undo
703 703
      * @return void
704 704
      * @throws \EE_Error
705 705
      */
706
-	public function set_price( $price ) {
707
-		$this->set( 'TKT_price', $price );
706
+	public function set_price($price) {
707
+		$this->set('TKT_price', $price);
708 708
 	}
709 709
 
710 710
 
@@ -716,7 +716,7 @@  discard block
 block discarded – undo
716 716
      * @throws \EE_Error
717 717
      */
718 718
 	public function sold() {
719
-		return $this->get_raw( 'TKT_sold' );
719
+		return $this->get_raw('TKT_sold');
720 720
 	}
721 721
 
722 722
 
@@ -728,10 +728,10 @@  discard block
 block discarded – undo
728 728
      * @return void
729 729
      * @throws \EE_Error
730 730
      */
731
-	public function set_sold( $sold ) {
731
+	public function set_sold($sold) {
732 732
 		// sold can not go below zero
733
-		$sold = max( 0, $sold );
734
-		$this->set( 'TKT_sold', $sold );
733
+		$sold = max(0, $sold);
734
+		$this->set('TKT_sold', $sold);
735 735
 	}
736 736
 
737 737
 
@@ -743,13 +743,13 @@  discard block
 block discarded – undo
743 743
      * @return void
744 744
      * @throws \EE_Error
745 745
      */
746
-	public function increase_sold( $qty = 1 ) {
746
+	public function increase_sold($qty = 1) {
747 747
 		$sold = $this->sold() + $qty;
748 748
 		// remove ticket reservation, but don't adjust datetime reservations,  because that will happen
749 749
 		// via \EE_Datetime::increase_sold() when \EE_Ticket::_increase_sold_for_datetimes() is called
750
-		$this->decrease_reserved( $qty, false, "TKT: {$this->ID()} (ln:" . __LINE__ . ')');
751
-		$this->_increase_sold_for_datetimes( $qty );
752
-		$this->set_sold( $sold );
750
+		$this->decrease_reserved($qty, false, "TKT: {$this->ID()} (ln:".__LINE__.')');
751
+		$this->_increase_sold_for_datetimes($qty);
752
+		$this->set_sold($sold);
753 753
 		do_action(
754 754
 		    'AHEE__EE_Ticket__increase_sold',
755 755
             $this,
@@ -767,12 +767,12 @@  discard block
 block discarded – undo
767 767
      * @return void
768 768
      * @throws \EE_Error
769 769
      */
770
-	protected function _increase_sold_for_datetimes( $qty = 1 ) {
770
+	protected function _increase_sold_for_datetimes($qty = 1) {
771 771
 		$datetimes = $this->datetimes();
772
-		if ( is_array( $datetimes ) ) {
773
-			foreach ( $datetimes as $datetime ) {
774
-				if ( $datetime instanceof EE_Datetime ) {
775
-					$datetime->increase_sold( $qty );
772
+		if (is_array($datetimes)) {
773
+			foreach ($datetimes as $datetime) {
774
+				if ($datetime instanceof EE_Datetime) {
775
+					$datetime->increase_sold($qty);
776 776
 					$datetime->save();
777 777
 				}
778 778
 			}
@@ -788,10 +788,10 @@  discard block
 block discarded – undo
788 788
      * @return void
789 789
      * @throws \EE_Error
790 790
      */
791
-	public function decrease_sold( $qty = 1 ) {
791
+	public function decrease_sold($qty = 1) {
792 792
 		$sold = $this->sold() - $qty;
793
-		$this->_decrease_sold_for_datetimes( $qty );
794
-		$this->set_sold( $sold );
793
+		$this->_decrease_sold_for_datetimes($qty);
794
+		$this->set_sold($sold);
795 795
         do_action(
796 796
             'AHEE__EE_Ticket__decrease_sold',
797 797
             $this,
@@ -809,12 +809,12 @@  discard block
 block discarded – undo
809 809
      * @return void
810 810
      * @throws \EE_Error
811 811
      */
812
-	protected function _decrease_sold_for_datetimes( $qty = 1 ) {
812
+	protected function _decrease_sold_for_datetimes($qty = 1) {
813 813
 		$datetimes = $this->datetimes();
814
-		if ( is_array( $datetimes ) ) {
815
-			foreach ( $datetimes as $datetime ) {
816
-				if ( $datetime instanceof EE_Datetime ) {
817
-					$datetime->decrease_sold( $qty );
814
+		if (is_array($datetimes)) {
815
+			foreach ($datetimes as $datetime) {
816
+				if ($datetime instanceof EE_Datetime) {
817
+					$datetime->decrease_sold($qty);
818 818
 					$datetime->save();
819 819
 				}
820 820
 			}
@@ -830,7 +830,7 @@  discard block
 block discarded – undo
830 830
      * @throws \EE_Error
831 831
      */
832 832
 	public function reserved() {
833
-		return $this->get_raw( 'TKT_reserved' );
833
+		return $this->get_raw('TKT_reserved');
834 834
 	}
835 835
 
836 836
 
@@ -842,10 +842,10 @@  discard block
 block discarded – undo
842 842
      * @return void
843 843
      * @throws \EE_Error
844 844
      */
845
-	public function set_reserved( $reserved ) {
845
+	public function set_reserved($reserved) {
846 846
 		// reserved can not go below zero
847
-		$reserved = max( 0, (int) $reserved );
848
-		$this->set( 'TKT_reserved', $reserved );
847
+		$reserved = max(0, (int) $reserved);
848
+		$this->set('TKT_reserved', $reserved);
849 849
 	}
850 850
 
851 851
 
@@ -861,8 +861,8 @@  discard block
 block discarded – undo
861 861
      * @throws \EventEspresso\core\exceptions\InvalidDataTypeException
862 862
      * @throws \EventEspresso\core\exceptions\InvalidInterfaceException
863 863
      */
864
-	public function increase_reserved( $qty = 1, $source = 'unknown' ) {
865
-		$qty = absint( $qty );
864
+	public function increase_reserved($qty = 1, $source = 'unknown') {
865
+		$qty = absint($qty);
866 866
 		$reserved = $this->reserved() + $qty;
867 867
         if (
868 868
             $reserved
@@ -891,12 +891,12 @@  discard block
 block discarded – undo
891 891
      * @return void
892 892
      * @throws \EE_Error
893 893
      */
894
-	protected function _increase_reserved_for_datetimes( $qty = 1 ) {
894
+	protected function _increase_reserved_for_datetimes($qty = 1) {
895 895
 		$datetimes = $this->datetimes();
896
-		if ( is_array( $datetimes ) ) {
897
-			foreach ( $datetimes as $datetime ) {
898
-				if ( $datetime instanceof EE_Datetime ) {
899
-					$datetime->increase_reserved( $qty );
896
+		if (is_array($datetimes)) {
897
+			foreach ($datetimes as $datetime) {
898
+				if ($datetime instanceof EE_Datetime) {
899
+					$datetime->increase_reserved($qty);
900 900
 					$datetime->save();
901 901
 				}
902 902
 			}
@@ -917,8 +917,8 @@  discard block
 block discarded – undo
917 917
      * @throws \EventEspresso\core\exceptions\InvalidDataTypeException
918 918
      * @throws \EventEspresso\core\exceptions\InvalidInterfaceException
919 919
      */
920
-	public function decrease_reserved( $qty = 1, $adjust_datetimes = true, $source = 'unknown' ) {
921
-		$reserved = $this->reserved() - absint( $qty );
920
+	public function decrease_reserved($qty = 1, $adjust_datetimes = true, $source = 'unknown') {
921
+		$reserved = $this->reserved() - absint($qty);
922 922
         if (
923 923
             $this->add_extra_meta(
924 924
                 EE_Ticket::META_KEY_TICKET_RESERVATIONS,
@@ -947,12 +947,12 @@  discard block
 block discarded – undo
947 947
      * @return void
948 948
      * @throws \EE_Error
949 949
      */
950
-	protected function _decrease_reserved_for_datetimes( $qty = 1 ) {
950
+	protected function _decrease_reserved_for_datetimes($qty = 1) {
951 951
 		$datetimes = $this->datetimes();
952
-		if ( is_array( $datetimes ) ) {
953
-			foreach ( $datetimes as $datetime ) {
954
-				if ( $datetime instanceof EE_Datetime ) {
955
-					$datetime->decrease_reserved( $qty );
952
+		if (is_array($datetimes)) {
953
+			foreach ($datetimes as $datetime) {
954
+				if ($datetime instanceof EE_Datetime) {
955
+					$datetime->decrease_reserved($qty);
956 956
 					$datetime->save();
957 957
 				}
958 958
 			}
@@ -973,14 +973,14 @@  discard block
 block discarded – undo
973 973
      * @return int
974 974
      * @throws \EE_Error
975 975
      */
976
-	public function qty( $context = '' ) {
977
-		switch ( $context ) {
976
+	public function qty($context = '') {
977
+		switch ($context) {
978 978
 			case 'reg_limit' :
979 979
 				return $this->real_quantity_on_ticket();
980 980
 			case 'saleable' :
981
-				return $this->real_quantity_on_ticket( 'saleable' );
981
+				return $this->real_quantity_on_ticket('saleable');
982 982
 			default:
983
-				return $this->get_raw( 'TKT_qty' );
983
+				return $this->get_raw('TKT_qty');
984 984
 		}
985 985
 	}
986 986
 
@@ -999,15 +999,15 @@  discard block
 block discarded – undo
999 999
      * @return int
1000 1000
      * @throws \EE_Error
1001 1001
      */
1002
-	public function real_quantity_on_ticket( $context = 'reg_limit', $DTT_ID = 0 ) {
1003
-		$raw = $this->get_raw( 'TKT_qty' );
1002
+	public function real_quantity_on_ticket($context = 'reg_limit', $DTT_ID = 0) {
1003
+		$raw = $this->get_raw('TKT_qty');
1004 1004
 		// return immediately if it's zero
1005
-		if ( $raw === 0 ) {
1005
+		if ($raw === 0) {
1006 1006
 			return $raw;
1007 1007
 		}
1008 1008
 		//echo "\n\n<br />Ticket: " . $this->name() . '<br />';
1009 1009
 		// ensure qty doesn't exceed raw value for THIS ticket
1010
-		$qty = min( EE_INF, $raw );
1010
+		$qty = min(EE_INF, $raw);
1011 1011
 		//echo "\n . qty: " . $qty . '<br />';
1012 1012
 		// calculate this ticket's total sales and reservations
1013 1013
 		$sold_and_reserved_for_this_ticket = $this->sold() + $this->reserved();
@@ -1016,23 +1016,23 @@  discard block
 block discarded – undo
1016 1016
 		//echo "\n . sold_and_reserved_for_this_ticket: " . $sold_and_reserved_for_this_ticket . '<br />';
1017 1017
 		// first we need to calculate the maximum number of tickets available for the datetime
1018 1018
 		// do we want data for one datetime or all of them ?
1019
-		$query_params = $DTT_ID ? array( array( 'DTT_ID' => $DTT_ID ) ) : array();
1020
-		$datetimes = $this->datetimes( $query_params );
1021
-		if ( is_array( $datetimes ) && ! empty( $datetimes ) ) {
1022
-			foreach ( $datetimes as $datetime ) {
1023
-				if ( $datetime instanceof EE_Datetime ) {
1019
+		$query_params = $DTT_ID ? array(array('DTT_ID' => $DTT_ID)) : array();
1020
+		$datetimes = $this->datetimes($query_params);
1021
+		if (is_array($datetimes) && ! empty($datetimes)) {
1022
+			foreach ($datetimes as $datetime) {
1023
+				if ($datetime instanceof EE_Datetime) {
1024 1024
 					$datetime->refresh_from_db();
1025 1025
 					//echo "\n . . datetime name: " . $datetime->name() . '<br />';
1026 1026
 					//echo "\n . . datetime ID: " . $datetime->ID() . '<br />';
1027 1027
 					// initialize with no restrictions for each datetime
1028 1028
 					// but adjust datetime qty based on datetime reg limit
1029
-					$datetime_qty = min( EE_INF, $datetime->reg_limit() );
1029
+					$datetime_qty = min(EE_INF, $datetime->reg_limit());
1030 1030
 					//echo "\n . . . datetime reg_limit: " . $datetime->reg_limit() . '<br />';
1031 1031
 					//echo "\n . . . datetime_qty: " . $datetime_qty . '<br />';
1032 1032
 					// if we want the actual saleable amount, then we need to consider OTHER ticket sales
1033 1033
 					// and reservations for this datetime, that do NOT include sales and reservations
1034 1034
 					// for this ticket (so we add $this->sold() and $this->reserved() back in)
1035
-					if ( $context === 'saleable' ) {
1035
+					if ($context === 'saleable') {
1036 1036
 						$datetime_qty = max(
1037 1037
 							$datetime_qty - $datetime->sold_and_reserved() + $sold_and_reserved_for_this_ticket,
1038 1038
 							0
@@ -1044,16 +1044,16 @@  discard block
 block discarded – undo
1044 1044
 						$datetime_qty = ! $datetime->sold_out() ? $datetime_qty : 0;
1045 1045
 						//echo "\n . . . datetime_qty: " . $datetime_qty . '<br />';
1046 1046
 					}
1047
-					$qty = min( $datetime_qty, $qty );
1047
+					$qty = min($datetime_qty, $qty);
1048 1048
 					//echo "\n . . qty: " . $qty . '<br />';
1049 1049
 				}
1050 1050
 			}
1051 1051
 		}
1052 1052
 		// NOW that we know the  maximum number of tickets available for the datetime
1053 1053
 		// we can finally factor in the details for this specific ticket
1054
-		if ( $qty > 0 && $context === 'saleable' ) {
1054
+		if ($qty > 0 && $context === 'saleable') {
1055 1055
 			// and subtract the sales for THIS ticket
1056
-			$qty = max( $qty - $sold_and_reserved_for_this_ticket, 0 );
1056
+			$qty = max($qty - $sold_and_reserved_for_this_ticket, 0);
1057 1057
 			//echo "\n . qty: " . $qty . '<br />';
1058 1058
 		}
1059 1059
 		//echo "\nFINAL QTY: " . $qty . "<br /><br />";
@@ -1069,14 +1069,14 @@  discard block
 block discarded – undo
1069 1069
 	 * @return void
1070 1070
 	 * @throws \EE_Error
1071 1071
 	 */
1072
-	public function set_qty( $qty ) {
1072
+	public function set_qty($qty) {
1073 1073
 		$datetimes = $this->datetimes();
1074
-		foreach ( $datetimes as $datetime ) {
1075
-			if ( $datetime instanceof EE_Datetime ) {
1076
-				$qty = min( $qty, $datetime->reg_limit() );
1074
+		foreach ($datetimes as $datetime) {
1075
+			if ($datetime instanceof EE_Datetime) {
1076
+				$qty = min($qty, $datetime->reg_limit());
1077 1077
 			}
1078 1078
 		}
1079
-		$this->set( 'TKT_qty', $qty );
1079
+		$this->set('TKT_qty', $qty);
1080 1080
 	}
1081 1081
 
1082 1082
 
@@ -1088,7 +1088,7 @@  discard block
 block discarded – undo
1088 1088
      * @throws \EE_Error
1089 1089
      */
1090 1090
 	public function uses() {
1091
-		return $this->get( 'TKT_uses' );
1091
+		return $this->get('TKT_uses');
1092 1092
 	}
1093 1093
 
1094 1094
 
@@ -1100,8 +1100,8 @@  discard block
 block discarded – undo
1100 1100
      * @return void
1101 1101
      * @throws \EE_Error
1102 1102
      */
1103
-	public function set_uses( $uses ) {
1104
-		$this->set( 'TKT_uses', $uses );
1103
+	public function set_uses($uses) {
1104
+		$this->set('TKT_uses', $uses);
1105 1105
 	}
1106 1106
 
1107 1107
 
@@ -1113,7 +1113,7 @@  discard block
 block discarded – undo
1113 1113
      * @throws \EE_Error
1114 1114
      */
1115 1115
 	public function required() {
1116
-		return $this->get( 'TKT_required' );
1116
+		return $this->get('TKT_required');
1117 1117
 	}
1118 1118
 
1119 1119
 
@@ -1125,8 +1125,8 @@  discard block
 block discarded – undo
1125 1125
      * @return void
1126 1126
      * @throws \EE_Error
1127 1127
      */
1128
-	public function set_required( $required ) {
1129
-		$this->set( 'TKT_required', $required );
1128
+	public function set_required($required) {
1129
+		$this->set('TKT_required', $required);
1130 1130
 	}
1131 1131
 
1132 1132
 
@@ -1138,7 +1138,7 @@  discard block
 block discarded – undo
1138 1138
      * @throws \EE_Error
1139 1139
      */
1140 1140
 	public function taxable() {
1141
-		return $this->get( 'TKT_taxable' );
1141
+		return $this->get('TKT_taxable');
1142 1142
 	}
1143 1143
 
1144 1144
 
@@ -1150,8 +1150,8 @@  discard block
 block discarded – undo
1150 1150
      * @return void
1151 1151
      * @throws \EE_Error
1152 1152
      */
1153
-	public function set_taxable( $taxable ) {
1154
-		$this->set( 'TKT_taxable', $taxable );
1153
+	public function set_taxable($taxable) {
1154
+		$this->set('TKT_taxable', $taxable);
1155 1155
 	}
1156 1156
 
1157 1157
 
@@ -1163,7 +1163,7 @@  discard block
 block discarded – undo
1163 1163
      * @throws \EE_Error
1164 1164
      */
1165 1165
 	public function is_default() {
1166
-		return $this->get( 'TKT_is_default' );
1166
+		return $this->get('TKT_is_default');
1167 1167
 	}
1168 1168
 
1169 1169
 
@@ -1175,8 +1175,8 @@  discard block
 block discarded – undo
1175 1175
      * @return void
1176 1176
      * @throws \EE_Error
1177 1177
      */
1178
-	public function set_is_default( $is_default ) {
1179
-		$this->set( 'TKT_is_default', $is_default );
1178
+	public function set_is_default($is_default) {
1179
+		$this->set('TKT_is_default', $is_default);
1180 1180
 	}
1181 1181
 
1182 1182
 
@@ -1188,7 +1188,7 @@  discard block
 block discarded – undo
1188 1188
      * @throws \EE_Error
1189 1189
      */
1190 1190
 	public function order() {
1191
-		return $this->get( 'TKT_order' );
1191
+		return $this->get('TKT_order');
1192 1192
 	}
1193 1193
 
1194 1194
 
@@ -1200,8 +1200,8 @@  discard block
 block discarded – undo
1200 1200
      * @return void
1201 1201
      * @throws \EE_Error
1202 1202
      */
1203
-	public function set_order( $order ) {
1204
-		$this->set( 'TKT_order', $order );
1203
+	public function set_order($order) {
1204
+		$this->set('TKT_order', $order);
1205 1205
 	}
1206 1206
 
1207 1207
 
@@ -1213,7 +1213,7 @@  discard block
 block discarded – undo
1213 1213
      * @throws \EE_Error
1214 1214
      */
1215 1215
 	public function row() {
1216
-		return $this->get( 'TKT_row' );
1216
+		return $this->get('TKT_row');
1217 1217
 	}
1218 1218
 
1219 1219
 
@@ -1225,8 +1225,8 @@  discard block
 block discarded – undo
1225 1225
      * @return void
1226 1226
      * @throws \EE_Error
1227 1227
      */
1228
-	public function set_row( $row ) {
1229
-		$this->set( 'TKT_row', $row );
1228
+	public function set_row($row) {
1229
+		$this->set('TKT_row', $row);
1230 1230
 	}
1231 1231
 
1232 1232
 
@@ -1238,7 +1238,7 @@  discard block
 block discarded – undo
1238 1238
      * @throws \EE_Error
1239 1239
      */
1240 1240
 	public function deleted() {
1241
-		return $this->get( 'TKT_deleted' );
1241
+		return $this->get('TKT_deleted');
1242 1242
 	}
1243 1243
 
1244 1244
 
@@ -1250,8 +1250,8 @@  discard block
 block discarded – undo
1250 1250
      * @return void
1251 1251
      * @throws \EE_Error
1252 1252
      */
1253
-	public function set_deleted( $deleted ) {
1254
-		$this->set( 'TKT_deleted', $deleted );
1253
+	public function set_deleted($deleted) {
1254
+		$this->set('TKT_deleted', $deleted);
1255 1255
 	}
1256 1256
 
1257 1257
 
@@ -1263,7 +1263,7 @@  discard block
 block discarded – undo
1263 1263
      * @throws \EE_Error
1264 1264
      */
1265 1265
 	public function parent_ID() {
1266
-		return $this->get( 'TKT_parent' );
1266
+		return $this->get('TKT_parent');
1267 1267
 	}
1268 1268
 
1269 1269
 
@@ -1275,8 +1275,8 @@  discard block
 block discarded – undo
1275 1275
      * @return void
1276 1276
      * @throws \EE_Error
1277 1277
      */
1278
-	public function set_parent_ID( $parent ) {
1279
-		$this->set( 'TKT_parent', $parent );
1278
+	public function set_parent_ID($parent) {
1279
+		$this->set('TKT_parent', $parent);
1280 1280
 	}
1281 1281
 
1282 1282
 
@@ -1289,10 +1289,10 @@  discard block
 block discarded – undo
1289 1289
      */
1290 1290
 	public function name_and_info() {
1291 1291
 		$times = array();
1292
-		foreach ( $this->datetimes() as $datetime ) {
1292
+		foreach ($this->datetimes() as $datetime) {
1293 1293
 			$times[] = $datetime->start_date_and_time();
1294 1294
 		}
1295
-		return $this->name() . ' @ ' . implode( ', ', $times ) . ' for ' . $this->pretty_price();
1295
+		return $this->name().' @ '.implode(', ', $times).' for '.$this->pretty_price();
1296 1296
 	}
1297 1297
 
1298 1298
 
@@ -1304,7 +1304,7 @@  discard block
 block discarded – undo
1304 1304
      * @throws \EE_Error
1305 1305
      */
1306 1306
 	public function name() {
1307
-		return $this->get( 'TKT_name' );
1307
+		return $this->get('TKT_name');
1308 1308
 	}
1309 1309
 
1310 1310
 
@@ -1316,7 +1316,7 @@  discard block
 block discarded – undo
1316 1316
      * @throws \EE_Error
1317 1317
      */
1318 1318
 	public function price() {
1319
-		return $this->get( 'TKT_price' );
1319
+		return $this->get('TKT_price');
1320 1320
 	}
1321 1321
 
1322 1322
 
@@ -1328,8 +1328,8 @@  discard block
 block discarded – undo
1328 1328
      * @return EE_Registration[]|EE_Base_Class[]
1329 1329
      * @throws \EE_Error
1330 1330
      */
1331
-	public function registrations( $query_params = array() ) {
1332
-		return $this->get_many_related( 'Registration', $query_params );
1331
+	public function registrations($query_params = array()) {
1332
+		return $this->get_many_related('Registration', $query_params);
1333 1333
 	}
1334 1334
 
1335 1335
 
@@ -1368,7 +1368,7 @@  discard block
 block discarded – undo
1368 1368
 	 * @param array $query_params like EEM_Base::get_all's
1369 1369
 	 * @return int
1370 1370
 	 */
1371
-	public function count_registrations( $query_params = array() ) {
1371
+	public function count_registrations($query_params = array()) {
1372 1372
 		return $this->count_related('Registration', $query_params);
1373 1373
 	}
1374 1374
 
@@ -1396,23 +1396,23 @@  discard block
 block discarded – undo
1396 1396
 	public function get_related_event() {
1397 1397
 		//get one datetime to use for getting the event
1398 1398
 		$datetime = $this->first_datetime();
1399
-		if ( ! $datetime instanceof \EE_Datetime ) {
1399
+		if ( ! $datetime instanceof \EE_Datetime) {
1400 1400
 			throw new UnexpectedEntityException(
1401 1401
 				$datetime,
1402 1402
                 'EE_Datetime',
1403 1403
 				sprintf(
1404
-					__( 'The ticket (%s) is not associated with any valid datetimes.', 'event_espresso'),
1404
+					__('The ticket (%s) is not associated with any valid datetimes.', 'event_espresso'),
1405 1405
 					$this->name()
1406 1406
 				)
1407 1407
 			);
1408 1408
 		}
1409 1409
 		$event = $datetime->event();
1410
-		if ( ! $event instanceof \EE_Event ) {
1410
+		if ( ! $event instanceof \EE_Event) {
1411 1411
 			throw new UnexpectedEntityException(
1412 1412
 				$event,
1413 1413
                 'EE_Event',
1414 1414
 				sprintf(
1415
-					__( 'The ticket (%s) is not associated with a valid event.', 'event_espresso'),
1415
+					__('The ticket (%s) is not associated with a valid event.', 'event_espresso'),
1416 1416
 					$this->name()
1417 1417
 				)
1418 1418
 			);
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.
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.