Completed
Branch FET/11129/facilitate-stripe-an... (2fa192)
by
unknown
178:16 queued 162:33
created
core/domain/CapabilitiesActionRestrictionInterface.php 1 patch
Indentation   +24 added lines, -24 removed lines patch added patch discarded remove patch
@@ -14,36 +14,36 @@
 block discarded – undo
14 14
  */
15 15
 interface CapabilitiesActionRestrictionInterface
16 16
 {
17
-    /**
18
-     * Return whether the item can be edited for the given context.
19
-     * @param Context $context
20
-     * @return bool
21
-     */
22
-    public function canEdit(Context $context);
17
+	/**
18
+	 * Return whether the item can be edited for the given context.
19
+	 * @param Context $context
20
+	 * @return bool
21
+	 */
22
+	public function canEdit(Context $context);
23 23
 
24 24
 
25
-    /**
26
-     * Return whether the item can be read for the given context.
27
-     * @param Context $context
28
-     * @return bool
29
-     */
30
-    public function canRead(Context $context);
25
+	/**
26
+	 * Return whether the item can be read for the given context.
27
+	 * @param Context $context
28
+	 * @return bool
29
+	 */
30
+	public function canRead(Context $context);
31 31
 
32 32
 
33 33
 
34 34
 
35
-    /**
36
-     * Return whether the item can be deleted for the given context.
37
-     * @param Context $context
38
-     * @return bool
39
-     */
40
-    public function canDelete(Context $context);
35
+	/**
36
+	 * Return whether the item can be deleted for the given context.
37
+	 * @param Context $context
38
+	 * @return bool
39
+	 */
40
+	public function canDelete(Context $context);
41 41
 
42 42
 
43
-    /**
44
-     * Return whether the item can be created for the given context
45
-     * @param Context $context
46
-     * @return bool
47
-     */
48
-    public function canCreate(Context $context);
43
+	/**
44
+	 * Return whether the item can be created for the given context
45
+	 * @param Context $context
46
+	 * @return bool
47
+	 */
48
+	public function canCreate(Context $context);
49 49
 }
50 50
\ No newline at end of file
Please login to merge, or discard this patch.
payment_methods/Paypal_Express/EE_PMT_Paypal_Express.pm.php 2 patches
Indentation   +140 added lines, -140 removed lines patch added patch discarded remove patch
@@ -1,5 +1,5 @@  discard block
 block discarded – undo
1 1
 <?php if (! defined('EVENT_ESPRESSO_VERSION')) {
2
-    exit('NO direct script access allowed');
2
+	exit('NO direct script access allowed');
3 3
 }
4 4
 
5 5
 
@@ -17,153 +17,153 @@  discard block
 block discarded – undo
17 17
 class EE_PMT_Paypal_Express extends EE_PMT_Base
18 18
 {
19 19
 
20
-    /**
21
-     * EE_PMT_Paypal_Express constructor.
22
-     */
23
-    public function __construct($pm_instance = null)
24
-    {
25
-        require_once($this->file_folder() . 'EEG_Paypal_Express.gateway.php');
26
-        $this->_gateway = new EEG_Paypal_Express();
20
+	/**
21
+	 * EE_PMT_Paypal_Express constructor.
22
+	 */
23
+	public function __construct($pm_instance = null)
24
+	{
25
+		require_once($this->file_folder() . 'EEG_Paypal_Express.gateway.php');
26
+		$this->_gateway = new EEG_Paypal_Express();
27 27
 
28
-        $this->_pretty_name = esc_html__('PayPal Express', 'event_espresso');
29
-        $this->_template_path = $this->file_folder() . 'templates' . DS;
30
-        $this->_default_description = esc_html__(
31
-            // @codingStandardsIgnoreStart
32
-            'After clicking \'Finalize Registration\', you will be forwarded to PayPal website to Login and make your payment.',
33
-            // @codingStandardsIgnoreEnd
34
-            'event_espresso'
35
-        );
36
-        $this->_default_button_url = $this->file_url() . 'lib' . DS . 'paypal-express-checkout-logo-gold-160.png';
28
+		$this->_pretty_name = esc_html__('PayPal Express', 'event_espresso');
29
+		$this->_template_path = $this->file_folder() . 'templates' . DS;
30
+		$this->_default_description = esc_html__(
31
+			// @codingStandardsIgnoreStart
32
+			'After clicking \'Finalize Registration\', you will be forwarded to PayPal website to Login and make your payment.',
33
+			// @codingStandardsIgnoreEnd
34
+			'event_espresso'
35
+		);
36
+		$this->_default_button_url = $this->file_url() . 'lib' . DS . 'paypal-express-checkout-logo-gold-160.png';
37 37
 
38
-        parent::__construct($pm_instance);
39
-    }
38
+		parent::__construct($pm_instance);
39
+	}
40 40
 
41 41
 
42
-    /**
43
-     * Adds the help tab.
44
-     *
45
-     * @see EE_PMT_Base::help_tabs_config()
46
-     * @return array
47
-     */
48
-    public function help_tabs_config()
49
-    {
50
-        return array(
51
-            $this->get_help_tab_name() => array(
52
-                'title'    => esc_html__('PayPal Express Settings', 'event_espresso'),
53
-                'filename' => 'payment_methods_overview_paypal_express'
54
-            )
55
-        );
56
-    }
42
+	/**
43
+	 * Adds the help tab.
44
+	 *
45
+	 * @see EE_PMT_Base::help_tabs_config()
46
+	 * @return array
47
+	 */
48
+	public function help_tabs_config()
49
+	{
50
+		return array(
51
+			$this->get_help_tab_name() => array(
52
+				'title'    => esc_html__('PayPal Express Settings', 'event_espresso'),
53
+				'filename' => 'payment_methods_overview_paypal_express'
54
+			)
55
+		);
56
+	}
57 57
 
58 58
 
59
-    /**
60
-     * Gets the form for all the settings related to this payment method type.
61
-     *
62
-     * @return EE_Payment_Method_Form
63
-     */
64
-    public function generate_new_settings_form()
65
-    {
66
-        EE_Registry::instance()->load_helper('Template');
67
-        $form = new EE_Payment_Method_Form(
68
-            array(
69
-                'extra_meta_inputs' => array(
70
-                    'api_username' => new EE_Text_Input(
71
-                        array(
72
-                            'html_label_text' => sprintf(
73
-                                esc_html__('API Username %s', 'event_espresso'),
74
-                                $this->get_help_tab_link()
75
-                            ),
76
-                            'required'        => true,
77
-                        )
78
-                    ),
79
-                    'api_password' => new EE_Text_Input(
80
-                        array(
81
-                            'html_label_text' => sprintf(
82
-                                esc_html__('API Password %s', 'event_espresso'),
83
-                                $this->get_help_tab_link()
84
-                            ),
85
-                            'required'        => true,
86
-                        )
87
-                    ),
88
-                    'api_signature' => new EE_Text_Input(
89
-                        array(
90
-                            'html_label_text' => sprintf(
91
-                                esc_html__('API Signature %s', 'event_espresso'),
92
-                                $this->get_help_tab_link()
93
-                            ),
94
-                            'required'        => true,
95
-                        )
96
-                    ),
97
-                    'request_shipping_addr' => new EE_Yes_No_Input(
98
-                        array(
99
-                            'html_label_text' => sprintf(
100
-                                esc_html__('Request Shipping Address %s', 'event_espresso'),
101
-                                $this->get_help_tab_link()
102
-                            ),
103
-                            'html_help_text'  => esc_html__(
104
-                                // @codingStandardsIgnoreStart
105
-                                'If set to "Yes", then a shipping address will be requested on the PayPal checkout page.',
106
-                                // @codingStandardsIgnoreEnd
107
-                                'event_espresso'
108
-                            ),
109
-                            'required'        => true,
110
-                            'default'         => false,
111
-                        )
112
-                    ),
113
-                    'image_url' => new EE_Admin_File_Uploader_Input(
114
-                        array(
115
-                            'html_label_text' => sprintf(
116
-                                esc_html__('Image URL %s', 'event_espresso'),
117
-                                $this->get_help_tab_link()
118
-                            ),
119
-                            'html_help_text'  => esc_html__(
120
-                                'Used for your business/personal logo on the PayPal page',
121
-                                'event_espresso'
122
-                            ),
123
-                            'required'        => false,
124
-                        )
125
-                    ),
126
-                )
127
-            )
128
-        );
129
-        return $form;
130
-    }
59
+	/**
60
+	 * Gets the form for all the settings related to this payment method type.
61
+	 *
62
+	 * @return EE_Payment_Method_Form
63
+	 */
64
+	public function generate_new_settings_form()
65
+	{
66
+		EE_Registry::instance()->load_helper('Template');
67
+		$form = new EE_Payment_Method_Form(
68
+			array(
69
+				'extra_meta_inputs' => array(
70
+					'api_username' => new EE_Text_Input(
71
+						array(
72
+							'html_label_text' => sprintf(
73
+								esc_html__('API Username %s', 'event_espresso'),
74
+								$this->get_help_tab_link()
75
+							),
76
+							'required'        => true,
77
+						)
78
+					),
79
+					'api_password' => new EE_Text_Input(
80
+						array(
81
+							'html_label_text' => sprintf(
82
+								esc_html__('API Password %s', 'event_espresso'),
83
+								$this->get_help_tab_link()
84
+							),
85
+							'required'        => true,
86
+						)
87
+					),
88
+					'api_signature' => new EE_Text_Input(
89
+						array(
90
+							'html_label_text' => sprintf(
91
+								esc_html__('API Signature %s', 'event_espresso'),
92
+								$this->get_help_tab_link()
93
+							),
94
+							'required'        => true,
95
+						)
96
+					),
97
+					'request_shipping_addr' => new EE_Yes_No_Input(
98
+						array(
99
+							'html_label_text' => sprintf(
100
+								esc_html__('Request Shipping Address %s', 'event_espresso'),
101
+								$this->get_help_tab_link()
102
+							),
103
+							'html_help_text'  => esc_html__(
104
+								// @codingStandardsIgnoreStart
105
+								'If set to "Yes", then a shipping address will be requested on the PayPal checkout page.',
106
+								// @codingStandardsIgnoreEnd
107
+								'event_espresso'
108
+							),
109
+							'required'        => true,
110
+							'default'         => false,
111
+						)
112
+					),
113
+					'image_url' => new EE_Admin_File_Uploader_Input(
114
+						array(
115
+							'html_label_text' => sprintf(
116
+								esc_html__('Image URL %s', 'event_espresso'),
117
+								$this->get_help_tab_link()
118
+							),
119
+							'html_help_text'  => esc_html__(
120
+								'Used for your business/personal logo on the PayPal page',
121
+								'event_espresso'
122
+							),
123
+							'required'        => false,
124
+						)
125
+					),
126
+				)
127
+			)
128
+		);
129
+		return $form;
130
+	}
131 131
 
132 132
 
133
-    /**
134
-     * Creates a billing form for this payment method type.
135
-     *
136
-     * @param \EE_Transaction $transaction
137
-     * @return \EE_Billing_Info_Form
138
-     */
139
-    public function generate_new_billing_form(EE_Transaction $transaction = null)
140
-    {
141
-        if ($this->_pm_instance->debug_mode()) {
142
-            $form = new EE_Billing_Info_Form(
143
-                $this->_pm_instance,
144
-                array(
145
-                    'name' => 'paypal_express_Info_Form',
146
-                    'subsections' => array(
147
-                        'paypal_express_debug_info' => new EE_Form_Section_Proper(
148
-                            array(
149
-                                'layout_strategy' => new EE_Template_Layout(
150
-                                    array(
151
-                                        'layout_template_file' => $this->_template_path
152
-                                                                    . 'paypal_express_debug_info.template.php',
153
-                                        'template_args'        => array(
154
-                                            'debug_mode' => $this->_pm_instance->debug_mode()
155
-                                        )
156
-                                    )
157
-                                )
158
-                            )
159
-                        )
160
-                    )
161
-                )
162
-            );
163
-            return $form;
164
-        }
133
+	/**
134
+	 * Creates a billing form for this payment method type.
135
+	 *
136
+	 * @param \EE_Transaction $transaction
137
+	 * @return \EE_Billing_Info_Form
138
+	 */
139
+	public function generate_new_billing_form(EE_Transaction $transaction = null)
140
+	{
141
+		if ($this->_pm_instance->debug_mode()) {
142
+			$form = new EE_Billing_Info_Form(
143
+				$this->_pm_instance,
144
+				array(
145
+					'name' => 'paypal_express_Info_Form',
146
+					'subsections' => array(
147
+						'paypal_express_debug_info' => new EE_Form_Section_Proper(
148
+							array(
149
+								'layout_strategy' => new EE_Template_Layout(
150
+									array(
151
+										'layout_template_file' => $this->_template_path
152
+																	. 'paypal_express_debug_info.template.php',
153
+										'template_args'        => array(
154
+											'debug_mode' => $this->_pm_instance->debug_mode()
155
+										)
156
+									)
157
+								)
158
+							)
159
+						)
160
+					)
161
+				)
162
+			);
163
+			return $form;
164
+		}
165 165
 
166
-        return false;
167
-    }
166
+		return false;
167
+	}
168 168
 }
169 169
 // End of file EE_PMT_Paypal_Express.pm.php
Please login to merge, or discard this patch.
Spacing   +4 added lines, -4 removed lines patch added patch discarded remove patch
@@ -1,4 +1,4 @@  discard block
 block discarded – undo
1
-<?php if (! defined('EVENT_ESPRESSO_VERSION')) {
1
+<?php if ( ! defined('EVENT_ESPRESSO_VERSION')) {
2 2
     exit('NO direct script access allowed');
3 3
 }
4 4
 
@@ -22,18 +22,18 @@  discard block
 block discarded – undo
22 22
      */
23 23
     public function __construct($pm_instance = null)
24 24
     {
25
-        require_once($this->file_folder() . 'EEG_Paypal_Express.gateway.php');
25
+        require_once($this->file_folder().'EEG_Paypal_Express.gateway.php');
26 26
         $this->_gateway = new EEG_Paypal_Express();
27 27
 
28 28
         $this->_pretty_name = esc_html__('PayPal Express', 'event_espresso');
29
-        $this->_template_path = $this->file_folder() . 'templates' . DS;
29
+        $this->_template_path = $this->file_folder().'templates'.DS;
30 30
         $this->_default_description = esc_html__(
31 31
             // @codingStandardsIgnoreStart
32 32
             'After clicking \'Finalize Registration\', you will be forwarded to PayPal website to Login and make your payment.',
33 33
             // @codingStandardsIgnoreEnd
34 34
             'event_espresso'
35 35
         );
36
-        $this->_default_button_url = $this->file_url() . 'lib' . DS . 'paypal-express-checkout-logo-gold-160.png';
36
+        $this->_default_button_url = $this->file_url().'lib'.DS.'paypal-express-checkout-logo-gold-160.png';
37 37
 
38 38
         parent::__construct($pm_instance);
39 39
     }
Please login to merge, or discard this patch.
core/domain/services/event/EventSpacesCalculator.php 2 patches
Indentation   +669 added lines, -669 removed lines patch added patch discarded remove patch
@@ -30,675 +30,675 @@
 block discarded – undo
30 30
 class EventSpacesCalculator
31 31
 {
32 32
 
33
-    /**
34
-     * @var EE_Event $event
35
-     */
36
-    private $event;
37
-
38
-    /**
39
-     * @var array $datetime_query_params
40
-     */
41
-    private $datetime_query_params;
42
-
43
-    /**
44
-     * @var EE_Ticket[] $active_tickets
45
-     */
46
-    private $active_tickets = array();
47
-
48
-    /**
49
-     * @var EE_Datetime[] $datetimes
50
-     */
51
-    private $datetimes = array();
52
-
53
-    /**
54
-     * Array of Ticket IDs grouped by Datetime
55
-     *
56
-     * @var array $datetimes
57
-     */
58
-    private $datetime_tickets = array();
59
-
60
-    /**
61
-     * Max spaces for each Datetime (reg limit - previous sold)
62
-     *
63
-     * @var array $datetime_spaces
64
-     */
65
-    private $datetime_spaces = array();
66
-
67
-    /**
68
-     * Array of Datetime IDs grouped by Ticket
69
-     *
70
-     * @var array[] $ticket_datetimes
71
-     */
72
-    private $ticket_datetimes = array();
73
-
74
-    /**
75
-     * maximum ticket quantities for each ticket (adjusted for reg limit)
76
-     *
77
-     * @var array $ticket_quantities
78
-     */
79
-    private $ticket_quantities = array();
80
-
81
-    /**
82
-     * total quantity of sold and reserved for each ticket
83
-     *
84
-     * @var array $tickets_sold
85
-     */
86
-    private $tickets_sold = array();
87
-
88
-    /**
89
-     * total spaces available across all datetimes
90
-     *
91
-     * @var array $total_spaces
92
-     */
93
-    private $total_spaces = array();
94
-
95
-    /**
96
-     * @var boolean $debug
97
-     */
98
-    private $debug = false; // true false
99
-
100
-    /**
101
-     * @var null|int $spaces_remaining
102
-     */
103
-    private $spaces_remaining;
104
-
105
-    /**
106
-     * @var null|int $total_spaces_available
107
-     */
108
-    private $total_spaces_available;
109
-
110
-
111
-
112
-    /**
113
-     * EventSpacesCalculator constructor.
114
-     *
115
-     * @param EE_Event $event
116
-     * @param array    $datetime_query_params
117
-     * @throws EE_Error
118
-     */
119
-    public function __construct(EE_Event $event, array $datetime_query_params = array())
120
-    {
121
-        $this->event                 = $event;
122
-        $this->datetime_query_params = $datetime_query_params + array('order_by' => array('DTT_reg_limit' => 'ASC'));
123
-        $this->setHooks();
124
-    }
125
-
126
-
127
-
128
-    /**
129
-     * @return void
130
-     */
131
-    private function setHooks()
132
-    {
133
-        add_action( 'AHEE__EE_Ticket__increase_sold', array($this, 'clearResults'));
134
-        add_action( 'AHEE__EE_Ticket__decrease_sold', array($this, 'clearResults'));
135
-        add_action( 'AHEE__EE_Datetime__increase_sold', array($this, 'clearResults'));
136
-        add_action( 'AHEE__EE_Datetime__decrease_sold', array($this, 'clearResults'));
137
-        add_action( 'AHEE__EE_Ticket__increase_reserved', array($this, 'clearResults'));
138
-        add_action( 'AHEE__EE_Ticket__decrease_reserved', array($this, 'clearResults'));
139
-        add_action( 'AHEE__EE_Datetime__increase_reserved', array($this, 'clearResults'));
140
-        add_action( 'AHEE__EE_Datetime__decrease_reserved', array($this, 'clearResults'));
141
-    }
142
-
143
-
144
-
145
-    /**
146
-     * @return void
147
-     */
148
-    public function clearResults()
149
-    {
150
-        $this->spaces_remaining = null;
151
-        $this->total_spaces_available = null;
152
-    }
153
-
154
-
155
-
156
-    /**
157
-     * @return EE_Ticket[]
158
-     * @throws EE_Error
159
-     * @throws InvalidDataTypeException
160
-     * @throws InvalidInterfaceException
161
-     * @throws InvalidArgumentException
162
-     */
163
-    public function getActiveTickets()
164
-    {
165
-        if (empty($this->active_tickets)) {
166
-            $this->active_tickets = $this->event->tickets(
167
-                array(
168
-                    array('TKT_deleted'  => false),
169
-                    'order_by' => array('TKT_qty' => 'ASC'),
170
-                )
171
-            );
172
-        }
173
-        return $this->active_tickets;
174
-    }
175
-
176
-
177
-
178
-    /**
179
-     * @param EE_Ticket[] $active_tickets
180
-     * @throws EE_Error
181
-     * @throws DomainException
182
-     * @throws UnexpectedEntityException
183
-     */
184
-    public function setActiveTickets(array $active_tickets = array())
185
-    {
186
-        if ( ! empty($active_tickets)) {
187
-            foreach ($active_tickets as $active_ticket) {
188
-                $this->validateTicket($active_ticket);
189
-            }
190
-            // sort incoming array by ticket quantity (asc)
191
-            usort(
192
-                $active_tickets,
193
-                function (EE_Ticket $a, EE_Ticket $b) {
194
-                    if ($a->qty() === $b->qty()) {
195
-                        return 0;
196
-                    }
197
-                    return ($a->qty() < $b->qty())
198
-                        ? -1
199
-                        : 1;
200
-                }
201
-            );
202
-        }
203
-        $this->active_tickets = $active_tickets;
204
-    }
205
-
206
-
207
-
208
-    /**
209
-     * @param $ticket
210
-     * @throws DomainException
211
-     * @throws EE_Error
212
-     * @throws UnexpectedEntityException
213
-     */
214
-    private function validateTicket($ticket)
215
-    {
216
-        if ( ! $ticket instanceof EE_Ticket) {
217
-            throw new DomainException(
218
-                esc_html__(
219
-                    'Invalid Ticket. Only EE_Ticket objects can be used to calculate event space availability.',
220
-                    'event_espresso'
221
-                )
222
-            );
223
-        }
224
-        if ($ticket->get_event_ID() !== $this->event->ID()) {
225
-            throw new DomainException(
226
-                sprintf(
227
-                    esc_html__(
228
-                        'An EE_Ticket for Event %1$d was supplied while calculating event space availability for Event %2$d.',
229
-                        'event_espresso'
230
-                    ),
231
-                    $ticket->get_event_ID(),
232
-                    $this->event->ID()
233
-                )
234
-            );
235
-        }
236
-    }
237
-
238
-
239
-
240
-    /**
241
-     * @return EE_Datetime[]
242
-     */
243
-    public function getDatetimes()
244
-    {
245
-        return $this->datetimes;
246
-    }
247
-
248
-
249
-
250
-    /**
251
-     * @param EE_Datetime $datetime
252
-     * @throws EE_Error
253
-     * @throws DomainException
254
-     */
255
-    public function setDatetime(EE_Datetime $datetime)
256
-    {
257
-        if ($datetime->event()->ID() !== $this->event->ID()) {
258
-            throw new DomainException(
259
-                sprintf(
260
-                    esc_html__(
261
-                        'An EE_Datetime for Event %1$d was supplied while calculating event space availability for Event %2$d.',
262
-                        'event_espresso'
263
-                    ),
264
-                    $datetime->event()->ID(),
265
-                    $this->event->ID()
266
-                )
267
-            );
268
-        }
269
-        $this->datetimes[ $datetime->ID() ] = $datetime;
270
-    }
271
-
272
-
273
-
274
-    /**
275
-     * calculate spaces remaining based on "saleable" tickets
276
-     *
277
-     * @return float|int
278
-     * @throws EE_Error
279
-     * @throws DomainException
280
-     * @throws UnexpectedEntityException
281
-     * @throws InvalidDataTypeException
282
-     * @throws InvalidInterfaceException
283
-     * @throws InvalidArgumentException
284
-     */
285
-    public function spacesRemaining()
286
-    {
287
-        if ($this->spaces_remaining === null) {
288
-            $this->initialize();
289
-            $this->spaces_remaining = $this->calculate();
290
-        }
291
-        return $this->spaces_remaining;
292
-    }
293
-
294
-
295
-
296
-    /**
297
-     * calculates total available spaces for an event with no regard for sold tickets
298
-     *
299
-     * @return int|float
300
-     * @throws EE_Error
301
-     * @throws DomainException
302
-     * @throws UnexpectedEntityException
303
-     * @throws InvalidDataTypeException
304
-     * @throws InvalidInterfaceException
305
-     * @throws InvalidArgumentException
306
-     */
307
-    public function totalSpacesAvailable()
308
-    {
309
-        if($this->total_spaces_available === null) {
310
-            $this->initialize();
311
-            $this->total_spaces_available = $this->calculate(false);
312
-        }
313
-        return $this->total_spaces_available;
314
-    }
315
-
316
-
317
-
318
-    /**
319
-     * Loops through the active tickets for the event
320
-     * and builds a series of data arrays that will be used for calculating
321
-     * the total maximum available spaces, as well as the spaces remaining.
322
-     * Because ticket quantities affect datetime spaces and vice versa,
323
-     * we need to be constantly updating these data arrays as things change,
324
-     * which is the entire reason for their existence.
325
-     *
326
-     * @throws EE_Error
327
-     * @throws DomainException
328
-     * @throws UnexpectedEntityException
329
-     * @throws InvalidDataTypeException
330
-     * @throws InvalidInterfaceException
331
-     * @throws InvalidArgumentException
332
-     */
333
-    private function initialize()
334
-    {
335
-        if ($this->debug) {
336
-            \EEH_Debug_Tools::printr(__FUNCTION__, __CLASS__, __FILE__, __LINE__, 2);
337
-        }
338
-        $this->datetime_tickets  = array();
339
-        $this->datetime_spaces   = array();
340
-        $this->ticket_datetimes  = array();
341
-        $this->ticket_quantities = array();
342
-        $this->tickets_sold      = array();
343
-        $this->total_spaces      = array();
344
-        $active_tickets          = $this->getActiveTickets();
345
-        if ( ! empty($active_tickets)) {
346
-            foreach ($active_tickets as $ticket) {
347
-                $this->validateTicket($ticket);
348
-                // we need to index our data arrays using strings for the purpose of sorting,
349
-                // but we also need them to be unique, so  we'll just prepend a letter T to the ID
350
-                $ticket_identifier = "T{$ticket->ID()}";
351
-                // to start, we'll just consider the raw qty to be the maximum availability for this ticket,
352
-                // unless the ticket is past its "sell until" date, in which case the qty will be 0
353
-                $max_tickets = $ticket->is_expired() ? 0 : $ticket->qty();
354
-                // but we'll adjust that after looping over each datetime for the ticket and checking reg limits
355
-                $ticket_datetimes = $ticket->datetimes($this->datetime_query_params);
356
-                foreach ($ticket_datetimes as $datetime) {
357
-                    // save all datetimes
358
-                    $this->setDatetime($datetime);
359
-                    $datetime_identifier = "D{$datetime->ID()}";
360
-                    $reg_limit           = $datetime->reg_limit();
361
-                    // ticket quantity can not exceed datetime reg limit
362
-                    $max_tickets = min($max_tickets, $reg_limit);
363
-                    // as described earlier, because we need to be able to constantly adjust numbers for things,
364
-                    // we are going to move all of our data into the following arrays:
365
-                    // datetime spaces initially represents the reg limit for each datetime,
366
-                    // but this will get adjusted as tickets are accounted for
367
-                    $this->datetime_spaces[ $datetime_identifier ] = $reg_limit;
368
-                    // just an array of ticket IDs grouped by datetime
369
-                    $this->datetime_tickets[ $datetime_identifier ][] = $ticket_identifier;
370
-                    // and an array of datetime IDs grouped by ticket
371
-                    $this->ticket_datetimes[ $ticket_identifier ][] = $datetime_identifier;
372
-                }
373
-                // total quantity of sold and reserved for each ticket
374
-                $this->tickets_sold[ $ticket_identifier ] = $ticket->sold() + $ticket->reserved();
375
-                // and the maximum ticket quantities for each ticket (adjusted for reg limit)
376
-                $this->ticket_quantities[ $ticket_identifier ] = $max_tickets;
377
-            }
378
-        }
379
-        // sort datetime spaces by reg limit, but maintain our string indexes
380
-        asort($this->datetime_spaces, SORT_NUMERIC);
381
-        // datetime tickets need to be sorted in the SAME order as the above array...
382
-        // so we'll just use array_merge() to take the structure of datetime_spaces
383
-        // but overwrite all of the data with that from datetime_tickets
384
-        $this->datetime_tickets = array_merge(
385
-            $this->datetime_spaces,
386
-            $this->datetime_tickets
387
-        );
388
-        if ($this->debug) {
389
-            \EEH_Debug_Tools::printr($this->datetime_spaces, 'datetime_spaces', __FILE__, __LINE__);
390
-            \EEH_Debug_Tools::printr($this->datetime_tickets, 'datetime_tickets', __FILE__, __LINE__);
391
-            \EEH_Debug_Tools::printr($this->ticket_quantities, 'ticket_quantities', __FILE__, __LINE__);
392
-        }
393
-    }
394
-
395
-
396
-
397
-    /**
398
-     * performs calculations on initialized data
399
-     *
400
-     * @param bool $consider_sold
401
-     * @return int|float
402
-     */
403
-    private function calculate($consider_sold = true)
404
-    {
405
-        if ($this->debug) {
406
-            \EEH_Debug_Tools::printr(__FUNCTION__, __CLASS__, __FILE__, __LINE__, 2);
407
-            \EEH_Debug_Tools::printr($consider_sold, '$consider_sold', __FILE__, __LINE__);
408
-        }
409
-        if ($consider_sold) {
410
-            // subtract amounts sold from all ticket quantities and datetime spaces
411
-            $this->adjustTicketQuantitiesDueToSales();
412
-        }
413
-        foreach ($this->datetime_tickets as $datetime_identifier => $tickets) {
414
-            $this->trackAvailableSpacesForDatetimes($datetime_identifier, $tickets);
415
-        }
416
-        // total spaces available is just the sum of the spaces available for each datetime
417
-        $spaces_remaining = array_sum($this->total_spaces);
418
-        if ($this->debug) {
419
-            \EEH_Debug_Tools::printr($this->total_spaces, '$this->total_spaces', __FILE__, __LINE__);
420
-            \EEH_Debug_Tools::printr($this->tickets_sold, '$this->tickets_sold', __FILE__, __LINE__);
421
-            \EEH_Debug_Tools::printr($spaces_remaining, '$spaces_remaining', __FILE__, __LINE__);
422
-        }
423
-        return $spaces_remaining;
424
-    }
425
-
426
-
427
-    /**
428
-     * subtracts amount of  tickets sold from ticket quantities and datetime spaces
429
-     */
430
-    private function adjustTicketQuantitiesDueToSales()
431
-    {
432
-        if ($this->debug) {
433
-            \EEH_Debug_Tools::printr(__FUNCTION__, __CLASS__, __FILE__, __LINE__, 2);
434
-        }
435
-        foreach ($this->tickets_sold as $ticket_identifier => $tickets_sold) {
436
-            if (isset($this->ticket_quantities[ $ticket_identifier ])){
437
-                $this->ticket_quantities[ $ticket_identifier ] -= $tickets_sold;
438
-                // don't let values go below zero
439
-                $this->ticket_quantities[ $ticket_identifier ] = max(
440
-                    $this->ticket_quantities[ $ticket_identifier ],
441
-                    0
442
-                );
443
-                if ($this->debug) {
444
-                    \EEH_Debug_Tools::printr("{$tickets_sold} sales for ticket {$ticket_identifier} ", 'subtracting', __FILE__, __LINE__);
445
-                }
446
-            }
447
-            if (
448
-                isset($this->ticket_datetimes[ $ticket_identifier ])
449
-                && is_array($this->ticket_datetimes[ $ticket_identifier ])
450
-            ){
451
-                foreach ($this->ticket_datetimes[ $ticket_identifier ] as $ticket_datetime) {
452
-                    if (isset($this->ticket_quantities[ $ticket_identifier ])) {
453
-                        $this->datetime_spaces[ $ticket_datetime ] -= $tickets_sold;
454
-                        // don't let values go below zero
455
-                        $this->datetime_spaces[ $ticket_datetime ] = max(
456
-                            $this->datetime_spaces[ $ticket_datetime ],
457
-                            0
458
-                        );
459
-                        if ($this->debug) {
460
-                            \EEH_Debug_Tools::printr("{$tickets_sold} sales for datetime {$ticket_datetime} ",
461
-                                'subtracting', __FILE__, __LINE__);
462
-                        }
463
-                    }
464
-                }
465
-            }
466
-        }
467
-    }
468
-
469
-
470
-
471
-    /**
472
-     * @param string $datetime_identifier
473
-     * @param array  $tickets
474
-     */
475
-    private function trackAvailableSpacesForDatetimes($datetime_identifier, array $tickets)
476
-    {
477
-        // make sure a reg limit is set for the datetime
478
-        $reg_limit = isset($this->datetime_spaces[ $datetime_identifier ])
479
-            ? $this->datetime_spaces[ $datetime_identifier ]
480
-            : 0;
481
-        // and bail if it is not
482
-        if ( ! $reg_limit) {
483
-            if ($this->debug) {
484
-                \EEH_Debug_Tools::printr('AT CAPACITY', " . {$datetime_identifier}", __FILE__, __LINE__);
485
-            }
486
-            return;
487
-        }
488
-        if ($this->debug) {
489
-            \EEH_Debug_Tools::printr($datetime_identifier, '* $datetime_identifier', __FILE__, __LINE__, 1);
490
-            \EEH_Debug_Tools::printr("{$reg_limit}", 'REG LIMIT', __FILE__, __LINE__);
491
-        }
492
-        // number of allocated spaces always starts at zero
493
-        $spaces_allocated                           = 0;
494
-        $this->total_spaces[ $datetime_identifier ] = 0;
495
-        foreach ($tickets as $ticket_identifier) {
496
-            $spaces_allocated = $this->calculateAvailableSpacesForTicket(
497
-                $datetime_identifier,
498
-                $reg_limit,
499
-                $ticket_identifier,
500
-                $spaces_allocated
501
-            );
502
-        }
503
-        // spaces can't be negative
504
-        $spaces_allocated = max($spaces_allocated, 0);
505
-        if ($spaces_allocated) {
506
-            // track any non-zero values
507
-            $this->total_spaces[ $datetime_identifier ] += $spaces_allocated;
508
-            if ($this->debug) {
509
-                \EEH_Debug_Tools::printr((string)$spaces_allocated, ' . $spaces_allocated: ', __FILE__, __LINE__);
510
-            }
511
-        } else {
512
-            if ($this->debug) {
513
-                \EEH_Debug_Tools::printr(' ', ' . NO TICKETS AVAILABLE FOR DATETIME', __FILE__, __LINE__);
514
-            }
515
-        }
516
-        if ($this->debug) {
517
-            \EEH_Debug_Tools::printr($this->total_spaces[ $datetime_identifier ], '$total_spaces', __FILE__,
518
-                __LINE__);
519
-            \EEH_Debug_Tools::printr($this->ticket_quantities, '$ticket_quantities', __FILE__, __LINE__);
520
-            \EEH_Debug_Tools::printr($this->datetime_spaces, 'datetime_spaces', __FILE__, __LINE__);
521
-        }
522
-    }
523
-
524
-
525
-
526
-    /**
527
-     * @param string $datetime_identifier
528
-     * @param int    $reg_limit
529
-     * @param string $ticket_identifier
530
-     * @param int    $spaces_allocated
531
-     * @return int
532
-     */
533
-    private function calculateAvailableSpacesForTicket(
534
-        $datetime_identifier,
535
-        $reg_limit,
536
-        $ticket_identifier,
537
-        $spaces_allocated
538
-    ) {
539
-        // make sure ticket quantity is set
540
-        $ticket_quantity = isset($this->ticket_quantities[ $ticket_identifier ])
541
-            ? $this->ticket_quantities[ $ticket_identifier ]
542
-            : 0;
543
-        if ($this->debug) {
544
-            \EEH_Debug_Tools::printr("{$spaces_allocated}", '$spaces_allocated', __FILE__, __LINE__);
545
-            \EEH_Debug_Tools::printr("{$ticket_quantity}", "ticket $ticket_identifier quantity: ",
546
-                __FILE__, __LINE__, 2);
547
-        }
548
-        if ($ticket_quantity) {
549
-            if ($this->debug) {
550
-                \EEH_Debug_Tools::printr(
551
-                    ($spaces_allocated <= $reg_limit)
552
-                        ? 'true'
553
-                        : 'false',
554
-                    ' . spaces_allocated <= reg_limit = ',
555
-                    __FILE__, __LINE__
556
-                );
557
-            }
558
-            // if the datetime is NOT at full capacity yet
559
-            if ($spaces_allocated <= $reg_limit) {
560
-                // then the maximum ticket quantity we can allocate is the lowest value of either:
561
-                //  the number of remaining spaces for the datetime, which is the limit - spaces already taken
562
-                //  or the maximum ticket quantity
563
-                $ticket_quantity = min($reg_limit - $spaces_allocated, $ticket_quantity);
564
-                // adjust the available quantity in our tracking array
565
-                $this->ticket_quantities[ $ticket_identifier ] -= $ticket_quantity;
566
-                // and increment spaces allocated for this datetime
567
-                $spaces_allocated += $ticket_quantity;
568
-                $at_capacity = $spaces_allocated >= $reg_limit;
569
-                if ($this->debug) {
570
-                    \EEH_Debug_Tools::printr("{$ticket_quantity} {$ticket_identifier} tickets", ' > > allocate ',
571
-                        __FILE__, __LINE__,   3);
572
-                    if ($at_capacity) {
573
-                        \EEH_Debug_Tools::printr('AT CAPACITY', " . {$datetime_identifier}", __FILE__, __LINE__, 3);
574
-                    }
575
-                }
576
-                // now adjust all other datetimes that allow access to this ticket
577
-                $this->adjustDatetimes(
578
-                    $datetime_identifier,
579
-                    $ticket_identifier,
580
-                    $ticket_quantity,
581
-                    $at_capacity
582
-                );
583
-            }
584
-        }
585
-        return $spaces_allocated;
586
-    }
587
-
588
-
589
-
590
-    /**
591
-     * subtracts ticket amounts from all datetime reg limits
592
-     * that allow access to the ticket specified,
593
-     * because that ticket could be used
594
-     * to attend any of the datetimes it has access to
595
-     *
596
-     * @param string $datetime_identifier
597
-     * @param string $ticket_identifier
598
-     * @param bool   $at_capacity
599
-     * @param int    $ticket_quantity
600
-     */
601
-    private function adjustDatetimes(
602
-        $datetime_identifier,
603
-        $ticket_identifier,
604
-        $ticket_quantity,
605
-        $at_capacity
606
-    ) {
607
-        /** @var array $datetime_tickets */
608
-        foreach ($this->datetime_tickets as $datetime_ID => $datetime_tickets) {
609
-            if ($datetime_ID !== $datetime_identifier || ! is_array($datetime_tickets)) {
610
-                continue;
611
-            }
612
-            $adjusted = $this->adjustDatetimeSpaces(
613
-                $datetime_ID,
614
-                $ticket_identifier,
615
-                $ticket_quantity
616
-            );
617
-            // skip to next ticket if nothing changed
618
-            if (! ($adjusted || $at_capacity)) {
619
-                continue;
620
-            }
621
-            // then all of it's tickets are now unavailable
622
-            foreach ($datetime_tickets as $datetime_ticket) {
623
-                if (
624
-                    ($ticket_identifier === $datetime_ticket || $at_capacity)
625
-                    && isset($this->ticket_quantities[ $datetime_ticket ])
626
-                    && $this->ticket_quantities[ $datetime_ticket ] > 0
627
-                ) {
628
-                    if ($this->debug) {
629
-                        \EEH_Debug_Tools::printr($datetime_ticket, ' . . . adjust ticket quantities for', __FILE__,
630
-                            __LINE__);
631
-                    }
632
-                    // if this datetime is at full capacity, set any tracked available quantities to zero
633
-                    // otherwise just subtract the ticket quantity
634
-                    $new_quantity = $at_capacity
635
-                        ? 0
636
-                        : $this->ticket_quantities[ $datetime_ticket ] - $ticket_quantity;
637
-                    // don't let ticket quantity go below zero
638
-                    $this->ticket_quantities[ $datetime_ticket ] = max($new_quantity, 0);
639
-                    if ($this->debug) {
640
-                        \EEH_Debug_Tools::printr(
641
-                            $at_capacity
642
-                                ? "0 because Datetime {$datetime_identifier} is at capacity"
643
-                                : "{$this->ticket_quantities[ $datetime_ticket ]}",
644
-                            " . . . . {$datetime_ticket} quantity set to ",
645
-                            __FILE__, __LINE__
646
-                        );
647
-                    }
648
-                }
649
-                // but we also need to adjust spaces for any other datetimes this ticket has access to
650
-                if ($datetime_ticket === $ticket_identifier) {
651
-                    if (isset($this->ticket_datetimes[ $datetime_ticket ])
652
-                        && is_array($this->ticket_datetimes[ $datetime_ticket ])
653
-                    ) {
654
-                        if ($this->debug) {
655
-                            \EEH_Debug_Tools::printr($datetime_ticket, ' . . adjust other Datetimes for', __FILE__,
656
-                                __LINE__);
657
-                        }
658
-                        foreach ($this->ticket_datetimes[ $datetime_ticket ] as $datetime) {
659
-                            // don't adjust the current datetime twice
660
-                            if ($datetime !== $datetime_identifier) {
661
-                                $this->adjustDatetimeSpaces(
662
-                                    $datetime,
663
-                                    $datetime_ticket,
664
-                                    $ticket_quantity
665
-                                );
666
-                            }
667
-                        }
668
-                    }
669
-                }
670
-            }
671
-        }
672
-    }
673
-
674
-    private function adjustDatetimeSpaces($datetime_identifier, $ticket_identifier, $ticket_quantity = 0)
675
-    {
676
-        // does datetime have spaces available?
677
-        // and does the supplied ticket have access to this datetime ?
678
-        if (
679
-            $this->datetime_spaces[ $datetime_identifier ] > 0
680
-            && isset($this->datetime_spaces[ $datetime_identifier ], $this->datetime_tickets[ $datetime_identifier ])
681
-            && in_array($ticket_identifier, $this->datetime_tickets[ $datetime_identifier ], true)
682
-            ) {
683
-            if ($this->debug) {
684
-                \EEH_Debug_Tools::printr($datetime_identifier, ' . . adjust Datetime Spaces for', __FILE__, __LINE__);
685
-                \EEH_Debug_Tools::printr("{$this->datetime_spaces[ $datetime_identifier ]}", " . . current  {$datetime_identifier} spaces available", __FILE__, __LINE__);
686
-            }
687
-            // then decrement the available spaces for the datetime
688
-            $this->datetime_spaces[ $datetime_identifier ] -= $ticket_quantity;
689
-            // but don't let quantities go below zero
690
-            $this->datetime_spaces[ $datetime_identifier ] = max(
691
-                $this->datetime_spaces[ $datetime_identifier ],
692
-                0
693
-            );
694
-            if ($this->debug) {
695
-                \EEH_Debug_Tools::printr("{$ticket_quantity}",
696
-                    " . . . {$datetime_identifier} capacity reduced by", __FILE__, __LINE__);
697
-            }
698
-            return true;
699
-        }
700
-        return false;
701
-    }
33
+	/**
34
+	 * @var EE_Event $event
35
+	 */
36
+	private $event;
37
+
38
+	/**
39
+	 * @var array $datetime_query_params
40
+	 */
41
+	private $datetime_query_params;
42
+
43
+	/**
44
+	 * @var EE_Ticket[] $active_tickets
45
+	 */
46
+	private $active_tickets = array();
47
+
48
+	/**
49
+	 * @var EE_Datetime[] $datetimes
50
+	 */
51
+	private $datetimes = array();
52
+
53
+	/**
54
+	 * Array of Ticket IDs grouped by Datetime
55
+	 *
56
+	 * @var array $datetimes
57
+	 */
58
+	private $datetime_tickets = array();
59
+
60
+	/**
61
+	 * Max spaces for each Datetime (reg limit - previous sold)
62
+	 *
63
+	 * @var array $datetime_spaces
64
+	 */
65
+	private $datetime_spaces = array();
66
+
67
+	/**
68
+	 * Array of Datetime IDs grouped by Ticket
69
+	 *
70
+	 * @var array[] $ticket_datetimes
71
+	 */
72
+	private $ticket_datetimes = array();
73
+
74
+	/**
75
+	 * maximum ticket quantities for each ticket (adjusted for reg limit)
76
+	 *
77
+	 * @var array $ticket_quantities
78
+	 */
79
+	private $ticket_quantities = array();
80
+
81
+	/**
82
+	 * total quantity of sold and reserved for each ticket
83
+	 *
84
+	 * @var array $tickets_sold
85
+	 */
86
+	private $tickets_sold = array();
87
+
88
+	/**
89
+	 * total spaces available across all datetimes
90
+	 *
91
+	 * @var array $total_spaces
92
+	 */
93
+	private $total_spaces = array();
94
+
95
+	/**
96
+	 * @var boolean $debug
97
+	 */
98
+	private $debug = false; // true false
99
+
100
+	/**
101
+	 * @var null|int $spaces_remaining
102
+	 */
103
+	private $spaces_remaining;
104
+
105
+	/**
106
+	 * @var null|int $total_spaces_available
107
+	 */
108
+	private $total_spaces_available;
109
+
110
+
111
+
112
+	/**
113
+	 * EventSpacesCalculator constructor.
114
+	 *
115
+	 * @param EE_Event $event
116
+	 * @param array    $datetime_query_params
117
+	 * @throws EE_Error
118
+	 */
119
+	public function __construct(EE_Event $event, array $datetime_query_params = array())
120
+	{
121
+		$this->event                 = $event;
122
+		$this->datetime_query_params = $datetime_query_params + array('order_by' => array('DTT_reg_limit' => 'ASC'));
123
+		$this->setHooks();
124
+	}
125
+
126
+
127
+
128
+	/**
129
+	 * @return void
130
+	 */
131
+	private function setHooks()
132
+	{
133
+		add_action( 'AHEE__EE_Ticket__increase_sold', array($this, 'clearResults'));
134
+		add_action( 'AHEE__EE_Ticket__decrease_sold', array($this, 'clearResults'));
135
+		add_action( 'AHEE__EE_Datetime__increase_sold', array($this, 'clearResults'));
136
+		add_action( 'AHEE__EE_Datetime__decrease_sold', array($this, 'clearResults'));
137
+		add_action( 'AHEE__EE_Ticket__increase_reserved', array($this, 'clearResults'));
138
+		add_action( 'AHEE__EE_Ticket__decrease_reserved', array($this, 'clearResults'));
139
+		add_action( 'AHEE__EE_Datetime__increase_reserved', array($this, 'clearResults'));
140
+		add_action( 'AHEE__EE_Datetime__decrease_reserved', array($this, 'clearResults'));
141
+	}
142
+
143
+
144
+
145
+	/**
146
+	 * @return void
147
+	 */
148
+	public function clearResults()
149
+	{
150
+		$this->spaces_remaining = null;
151
+		$this->total_spaces_available = null;
152
+	}
153
+
154
+
155
+
156
+	/**
157
+	 * @return EE_Ticket[]
158
+	 * @throws EE_Error
159
+	 * @throws InvalidDataTypeException
160
+	 * @throws InvalidInterfaceException
161
+	 * @throws InvalidArgumentException
162
+	 */
163
+	public function getActiveTickets()
164
+	{
165
+		if (empty($this->active_tickets)) {
166
+			$this->active_tickets = $this->event->tickets(
167
+				array(
168
+					array('TKT_deleted'  => false),
169
+					'order_by' => array('TKT_qty' => 'ASC'),
170
+				)
171
+			);
172
+		}
173
+		return $this->active_tickets;
174
+	}
175
+
176
+
177
+
178
+	/**
179
+	 * @param EE_Ticket[] $active_tickets
180
+	 * @throws EE_Error
181
+	 * @throws DomainException
182
+	 * @throws UnexpectedEntityException
183
+	 */
184
+	public function setActiveTickets(array $active_tickets = array())
185
+	{
186
+		if ( ! empty($active_tickets)) {
187
+			foreach ($active_tickets as $active_ticket) {
188
+				$this->validateTicket($active_ticket);
189
+			}
190
+			// sort incoming array by ticket quantity (asc)
191
+			usort(
192
+				$active_tickets,
193
+				function (EE_Ticket $a, EE_Ticket $b) {
194
+					if ($a->qty() === $b->qty()) {
195
+						return 0;
196
+					}
197
+					return ($a->qty() < $b->qty())
198
+						? -1
199
+						: 1;
200
+				}
201
+			);
202
+		}
203
+		$this->active_tickets = $active_tickets;
204
+	}
205
+
206
+
207
+
208
+	/**
209
+	 * @param $ticket
210
+	 * @throws DomainException
211
+	 * @throws EE_Error
212
+	 * @throws UnexpectedEntityException
213
+	 */
214
+	private function validateTicket($ticket)
215
+	{
216
+		if ( ! $ticket instanceof EE_Ticket) {
217
+			throw new DomainException(
218
+				esc_html__(
219
+					'Invalid Ticket. Only EE_Ticket objects can be used to calculate event space availability.',
220
+					'event_espresso'
221
+				)
222
+			);
223
+		}
224
+		if ($ticket->get_event_ID() !== $this->event->ID()) {
225
+			throw new DomainException(
226
+				sprintf(
227
+					esc_html__(
228
+						'An EE_Ticket for Event %1$d was supplied while calculating event space availability for Event %2$d.',
229
+						'event_espresso'
230
+					),
231
+					$ticket->get_event_ID(),
232
+					$this->event->ID()
233
+				)
234
+			);
235
+		}
236
+	}
237
+
238
+
239
+
240
+	/**
241
+	 * @return EE_Datetime[]
242
+	 */
243
+	public function getDatetimes()
244
+	{
245
+		return $this->datetimes;
246
+	}
247
+
248
+
249
+
250
+	/**
251
+	 * @param EE_Datetime $datetime
252
+	 * @throws EE_Error
253
+	 * @throws DomainException
254
+	 */
255
+	public function setDatetime(EE_Datetime $datetime)
256
+	{
257
+		if ($datetime->event()->ID() !== $this->event->ID()) {
258
+			throw new DomainException(
259
+				sprintf(
260
+					esc_html__(
261
+						'An EE_Datetime for Event %1$d was supplied while calculating event space availability for Event %2$d.',
262
+						'event_espresso'
263
+					),
264
+					$datetime->event()->ID(),
265
+					$this->event->ID()
266
+				)
267
+			);
268
+		}
269
+		$this->datetimes[ $datetime->ID() ] = $datetime;
270
+	}
271
+
272
+
273
+
274
+	/**
275
+	 * calculate spaces remaining based on "saleable" tickets
276
+	 *
277
+	 * @return float|int
278
+	 * @throws EE_Error
279
+	 * @throws DomainException
280
+	 * @throws UnexpectedEntityException
281
+	 * @throws InvalidDataTypeException
282
+	 * @throws InvalidInterfaceException
283
+	 * @throws InvalidArgumentException
284
+	 */
285
+	public function spacesRemaining()
286
+	{
287
+		if ($this->spaces_remaining === null) {
288
+			$this->initialize();
289
+			$this->spaces_remaining = $this->calculate();
290
+		}
291
+		return $this->spaces_remaining;
292
+	}
293
+
294
+
295
+
296
+	/**
297
+	 * calculates total available spaces for an event with no regard for sold tickets
298
+	 *
299
+	 * @return int|float
300
+	 * @throws EE_Error
301
+	 * @throws DomainException
302
+	 * @throws UnexpectedEntityException
303
+	 * @throws InvalidDataTypeException
304
+	 * @throws InvalidInterfaceException
305
+	 * @throws InvalidArgumentException
306
+	 */
307
+	public function totalSpacesAvailable()
308
+	{
309
+		if($this->total_spaces_available === null) {
310
+			$this->initialize();
311
+			$this->total_spaces_available = $this->calculate(false);
312
+		}
313
+		return $this->total_spaces_available;
314
+	}
315
+
316
+
317
+
318
+	/**
319
+	 * Loops through the active tickets for the event
320
+	 * and builds a series of data arrays that will be used for calculating
321
+	 * the total maximum available spaces, as well as the spaces remaining.
322
+	 * Because ticket quantities affect datetime spaces and vice versa,
323
+	 * we need to be constantly updating these data arrays as things change,
324
+	 * which is the entire reason for their existence.
325
+	 *
326
+	 * @throws EE_Error
327
+	 * @throws DomainException
328
+	 * @throws UnexpectedEntityException
329
+	 * @throws InvalidDataTypeException
330
+	 * @throws InvalidInterfaceException
331
+	 * @throws InvalidArgumentException
332
+	 */
333
+	private function initialize()
334
+	{
335
+		if ($this->debug) {
336
+			\EEH_Debug_Tools::printr(__FUNCTION__, __CLASS__, __FILE__, __LINE__, 2);
337
+		}
338
+		$this->datetime_tickets  = array();
339
+		$this->datetime_spaces   = array();
340
+		$this->ticket_datetimes  = array();
341
+		$this->ticket_quantities = array();
342
+		$this->tickets_sold      = array();
343
+		$this->total_spaces      = array();
344
+		$active_tickets          = $this->getActiveTickets();
345
+		if ( ! empty($active_tickets)) {
346
+			foreach ($active_tickets as $ticket) {
347
+				$this->validateTicket($ticket);
348
+				// we need to index our data arrays using strings for the purpose of sorting,
349
+				// but we also need them to be unique, so  we'll just prepend a letter T to the ID
350
+				$ticket_identifier = "T{$ticket->ID()}";
351
+				// to start, we'll just consider the raw qty to be the maximum availability for this ticket,
352
+				// unless the ticket is past its "sell until" date, in which case the qty will be 0
353
+				$max_tickets = $ticket->is_expired() ? 0 : $ticket->qty();
354
+				// but we'll adjust that after looping over each datetime for the ticket and checking reg limits
355
+				$ticket_datetimes = $ticket->datetimes($this->datetime_query_params);
356
+				foreach ($ticket_datetimes as $datetime) {
357
+					// save all datetimes
358
+					$this->setDatetime($datetime);
359
+					$datetime_identifier = "D{$datetime->ID()}";
360
+					$reg_limit           = $datetime->reg_limit();
361
+					// ticket quantity can not exceed datetime reg limit
362
+					$max_tickets = min($max_tickets, $reg_limit);
363
+					// as described earlier, because we need to be able to constantly adjust numbers for things,
364
+					// we are going to move all of our data into the following arrays:
365
+					// datetime spaces initially represents the reg limit for each datetime,
366
+					// but this will get adjusted as tickets are accounted for
367
+					$this->datetime_spaces[ $datetime_identifier ] = $reg_limit;
368
+					// just an array of ticket IDs grouped by datetime
369
+					$this->datetime_tickets[ $datetime_identifier ][] = $ticket_identifier;
370
+					// and an array of datetime IDs grouped by ticket
371
+					$this->ticket_datetimes[ $ticket_identifier ][] = $datetime_identifier;
372
+				}
373
+				// total quantity of sold and reserved for each ticket
374
+				$this->tickets_sold[ $ticket_identifier ] = $ticket->sold() + $ticket->reserved();
375
+				// and the maximum ticket quantities for each ticket (adjusted for reg limit)
376
+				$this->ticket_quantities[ $ticket_identifier ] = $max_tickets;
377
+			}
378
+		}
379
+		// sort datetime spaces by reg limit, but maintain our string indexes
380
+		asort($this->datetime_spaces, SORT_NUMERIC);
381
+		// datetime tickets need to be sorted in the SAME order as the above array...
382
+		// so we'll just use array_merge() to take the structure of datetime_spaces
383
+		// but overwrite all of the data with that from datetime_tickets
384
+		$this->datetime_tickets = array_merge(
385
+			$this->datetime_spaces,
386
+			$this->datetime_tickets
387
+		);
388
+		if ($this->debug) {
389
+			\EEH_Debug_Tools::printr($this->datetime_spaces, 'datetime_spaces', __FILE__, __LINE__);
390
+			\EEH_Debug_Tools::printr($this->datetime_tickets, 'datetime_tickets', __FILE__, __LINE__);
391
+			\EEH_Debug_Tools::printr($this->ticket_quantities, 'ticket_quantities', __FILE__, __LINE__);
392
+		}
393
+	}
394
+
395
+
396
+
397
+	/**
398
+	 * performs calculations on initialized data
399
+	 *
400
+	 * @param bool $consider_sold
401
+	 * @return int|float
402
+	 */
403
+	private function calculate($consider_sold = true)
404
+	{
405
+		if ($this->debug) {
406
+			\EEH_Debug_Tools::printr(__FUNCTION__, __CLASS__, __FILE__, __LINE__, 2);
407
+			\EEH_Debug_Tools::printr($consider_sold, '$consider_sold', __FILE__, __LINE__);
408
+		}
409
+		if ($consider_sold) {
410
+			// subtract amounts sold from all ticket quantities and datetime spaces
411
+			$this->adjustTicketQuantitiesDueToSales();
412
+		}
413
+		foreach ($this->datetime_tickets as $datetime_identifier => $tickets) {
414
+			$this->trackAvailableSpacesForDatetimes($datetime_identifier, $tickets);
415
+		}
416
+		// total spaces available is just the sum of the spaces available for each datetime
417
+		$spaces_remaining = array_sum($this->total_spaces);
418
+		if ($this->debug) {
419
+			\EEH_Debug_Tools::printr($this->total_spaces, '$this->total_spaces', __FILE__, __LINE__);
420
+			\EEH_Debug_Tools::printr($this->tickets_sold, '$this->tickets_sold', __FILE__, __LINE__);
421
+			\EEH_Debug_Tools::printr($spaces_remaining, '$spaces_remaining', __FILE__, __LINE__);
422
+		}
423
+		return $spaces_remaining;
424
+	}
425
+
426
+
427
+	/**
428
+	 * subtracts amount of  tickets sold from ticket quantities and datetime spaces
429
+	 */
430
+	private function adjustTicketQuantitiesDueToSales()
431
+	{
432
+		if ($this->debug) {
433
+			\EEH_Debug_Tools::printr(__FUNCTION__, __CLASS__, __FILE__, __LINE__, 2);
434
+		}
435
+		foreach ($this->tickets_sold as $ticket_identifier => $tickets_sold) {
436
+			if (isset($this->ticket_quantities[ $ticket_identifier ])){
437
+				$this->ticket_quantities[ $ticket_identifier ] -= $tickets_sold;
438
+				// don't let values go below zero
439
+				$this->ticket_quantities[ $ticket_identifier ] = max(
440
+					$this->ticket_quantities[ $ticket_identifier ],
441
+					0
442
+				);
443
+				if ($this->debug) {
444
+					\EEH_Debug_Tools::printr("{$tickets_sold} sales for ticket {$ticket_identifier} ", 'subtracting', __FILE__, __LINE__);
445
+				}
446
+			}
447
+			if (
448
+				isset($this->ticket_datetimes[ $ticket_identifier ])
449
+				&& is_array($this->ticket_datetimes[ $ticket_identifier ])
450
+			){
451
+				foreach ($this->ticket_datetimes[ $ticket_identifier ] as $ticket_datetime) {
452
+					if (isset($this->ticket_quantities[ $ticket_identifier ])) {
453
+						$this->datetime_spaces[ $ticket_datetime ] -= $tickets_sold;
454
+						// don't let values go below zero
455
+						$this->datetime_spaces[ $ticket_datetime ] = max(
456
+							$this->datetime_spaces[ $ticket_datetime ],
457
+							0
458
+						);
459
+						if ($this->debug) {
460
+							\EEH_Debug_Tools::printr("{$tickets_sold} sales for datetime {$ticket_datetime} ",
461
+								'subtracting', __FILE__, __LINE__);
462
+						}
463
+					}
464
+				}
465
+			}
466
+		}
467
+	}
468
+
469
+
470
+
471
+	/**
472
+	 * @param string $datetime_identifier
473
+	 * @param array  $tickets
474
+	 */
475
+	private function trackAvailableSpacesForDatetimes($datetime_identifier, array $tickets)
476
+	{
477
+		// make sure a reg limit is set for the datetime
478
+		$reg_limit = isset($this->datetime_spaces[ $datetime_identifier ])
479
+			? $this->datetime_spaces[ $datetime_identifier ]
480
+			: 0;
481
+		// and bail if it is not
482
+		if ( ! $reg_limit) {
483
+			if ($this->debug) {
484
+				\EEH_Debug_Tools::printr('AT CAPACITY', " . {$datetime_identifier}", __FILE__, __LINE__);
485
+			}
486
+			return;
487
+		}
488
+		if ($this->debug) {
489
+			\EEH_Debug_Tools::printr($datetime_identifier, '* $datetime_identifier', __FILE__, __LINE__, 1);
490
+			\EEH_Debug_Tools::printr("{$reg_limit}", 'REG LIMIT', __FILE__, __LINE__);
491
+		}
492
+		// number of allocated spaces always starts at zero
493
+		$spaces_allocated                           = 0;
494
+		$this->total_spaces[ $datetime_identifier ] = 0;
495
+		foreach ($tickets as $ticket_identifier) {
496
+			$spaces_allocated = $this->calculateAvailableSpacesForTicket(
497
+				$datetime_identifier,
498
+				$reg_limit,
499
+				$ticket_identifier,
500
+				$spaces_allocated
501
+			);
502
+		}
503
+		// spaces can't be negative
504
+		$spaces_allocated = max($spaces_allocated, 0);
505
+		if ($spaces_allocated) {
506
+			// track any non-zero values
507
+			$this->total_spaces[ $datetime_identifier ] += $spaces_allocated;
508
+			if ($this->debug) {
509
+				\EEH_Debug_Tools::printr((string)$spaces_allocated, ' . $spaces_allocated: ', __FILE__, __LINE__);
510
+			}
511
+		} else {
512
+			if ($this->debug) {
513
+				\EEH_Debug_Tools::printr(' ', ' . NO TICKETS AVAILABLE FOR DATETIME', __FILE__, __LINE__);
514
+			}
515
+		}
516
+		if ($this->debug) {
517
+			\EEH_Debug_Tools::printr($this->total_spaces[ $datetime_identifier ], '$total_spaces', __FILE__,
518
+				__LINE__);
519
+			\EEH_Debug_Tools::printr($this->ticket_quantities, '$ticket_quantities', __FILE__, __LINE__);
520
+			\EEH_Debug_Tools::printr($this->datetime_spaces, 'datetime_spaces', __FILE__, __LINE__);
521
+		}
522
+	}
523
+
524
+
525
+
526
+	/**
527
+	 * @param string $datetime_identifier
528
+	 * @param int    $reg_limit
529
+	 * @param string $ticket_identifier
530
+	 * @param int    $spaces_allocated
531
+	 * @return int
532
+	 */
533
+	private function calculateAvailableSpacesForTicket(
534
+		$datetime_identifier,
535
+		$reg_limit,
536
+		$ticket_identifier,
537
+		$spaces_allocated
538
+	) {
539
+		// make sure ticket quantity is set
540
+		$ticket_quantity = isset($this->ticket_quantities[ $ticket_identifier ])
541
+			? $this->ticket_quantities[ $ticket_identifier ]
542
+			: 0;
543
+		if ($this->debug) {
544
+			\EEH_Debug_Tools::printr("{$spaces_allocated}", '$spaces_allocated', __FILE__, __LINE__);
545
+			\EEH_Debug_Tools::printr("{$ticket_quantity}", "ticket $ticket_identifier quantity: ",
546
+				__FILE__, __LINE__, 2);
547
+		}
548
+		if ($ticket_quantity) {
549
+			if ($this->debug) {
550
+				\EEH_Debug_Tools::printr(
551
+					($spaces_allocated <= $reg_limit)
552
+						? 'true'
553
+						: 'false',
554
+					' . spaces_allocated <= reg_limit = ',
555
+					__FILE__, __LINE__
556
+				);
557
+			}
558
+			// if the datetime is NOT at full capacity yet
559
+			if ($spaces_allocated <= $reg_limit) {
560
+				// then the maximum ticket quantity we can allocate is the lowest value of either:
561
+				//  the number of remaining spaces for the datetime, which is the limit - spaces already taken
562
+				//  or the maximum ticket quantity
563
+				$ticket_quantity = min($reg_limit - $spaces_allocated, $ticket_quantity);
564
+				// adjust the available quantity in our tracking array
565
+				$this->ticket_quantities[ $ticket_identifier ] -= $ticket_quantity;
566
+				// and increment spaces allocated for this datetime
567
+				$spaces_allocated += $ticket_quantity;
568
+				$at_capacity = $spaces_allocated >= $reg_limit;
569
+				if ($this->debug) {
570
+					\EEH_Debug_Tools::printr("{$ticket_quantity} {$ticket_identifier} tickets", ' > > allocate ',
571
+						__FILE__, __LINE__,   3);
572
+					if ($at_capacity) {
573
+						\EEH_Debug_Tools::printr('AT CAPACITY', " . {$datetime_identifier}", __FILE__, __LINE__, 3);
574
+					}
575
+				}
576
+				// now adjust all other datetimes that allow access to this ticket
577
+				$this->adjustDatetimes(
578
+					$datetime_identifier,
579
+					$ticket_identifier,
580
+					$ticket_quantity,
581
+					$at_capacity
582
+				);
583
+			}
584
+		}
585
+		return $spaces_allocated;
586
+	}
587
+
588
+
589
+
590
+	/**
591
+	 * subtracts ticket amounts from all datetime reg limits
592
+	 * that allow access to the ticket specified,
593
+	 * because that ticket could be used
594
+	 * to attend any of the datetimes it has access to
595
+	 *
596
+	 * @param string $datetime_identifier
597
+	 * @param string $ticket_identifier
598
+	 * @param bool   $at_capacity
599
+	 * @param int    $ticket_quantity
600
+	 */
601
+	private function adjustDatetimes(
602
+		$datetime_identifier,
603
+		$ticket_identifier,
604
+		$ticket_quantity,
605
+		$at_capacity
606
+	) {
607
+		/** @var array $datetime_tickets */
608
+		foreach ($this->datetime_tickets as $datetime_ID => $datetime_tickets) {
609
+			if ($datetime_ID !== $datetime_identifier || ! is_array($datetime_tickets)) {
610
+				continue;
611
+			}
612
+			$adjusted = $this->adjustDatetimeSpaces(
613
+				$datetime_ID,
614
+				$ticket_identifier,
615
+				$ticket_quantity
616
+			);
617
+			// skip to next ticket if nothing changed
618
+			if (! ($adjusted || $at_capacity)) {
619
+				continue;
620
+			}
621
+			// then all of it's tickets are now unavailable
622
+			foreach ($datetime_tickets as $datetime_ticket) {
623
+				if (
624
+					($ticket_identifier === $datetime_ticket || $at_capacity)
625
+					&& isset($this->ticket_quantities[ $datetime_ticket ])
626
+					&& $this->ticket_quantities[ $datetime_ticket ] > 0
627
+				) {
628
+					if ($this->debug) {
629
+						\EEH_Debug_Tools::printr($datetime_ticket, ' . . . adjust ticket quantities for', __FILE__,
630
+							__LINE__);
631
+					}
632
+					// if this datetime is at full capacity, set any tracked available quantities to zero
633
+					// otherwise just subtract the ticket quantity
634
+					$new_quantity = $at_capacity
635
+						? 0
636
+						: $this->ticket_quantities[ $datetime_ticket ] - $ticket_quantity;
637
+					// don't let ticket quantity go below zero
638
+					$this->ticket_quantities[ $datetime_ticket ] = max($new_quantity, 0);
639
+					if ($this->debug) {
640
+						\EEH_Debug_Tools::printr(
641
+							$at_capacity
642
+								? "0 because Datetime {$datetime_identifier} is at capacity"
643
+								: "{$this->ticket_quantities[ $datetime_ticket ]}",
644
+							" . . . . {$datetime_ticket} quantity set to ",
645
+							__FILE__, __LINE__
646
+						);
647
+					}
648
+				}
649
+				// but we also need to adjust spaces for any other datetimes this ticket has access to
650
+				if ($datetime_ticket === $ticket_identifier) {
651
+					if (isset($this->ticket_datetimes[ $datetime_ticket ])
652
+						&& is_array($this->ticket_datetimes[ $datetime_ticket ])
653
+					) {
654
+						if ($this->debug) {
655
+							\EEH_Debug_Tools::printr($datetime_ticket, ' . . adjust other Datetimes for', __FILE__,
656
+								__LINE__);
657
+						}
658
+						foreach ($this->ticket_datetimes[ $datetime_ticket ] as $datetime) {
659
+							// don't adjust the current datetime twice
660
+							if ($datetime !== $datetime_identifier) {
661
+								$this->adjustDatetimeSpaces(
662
+									$datetime,
663
+									$datetime_ticket,
664
+									$ticket_quantity
665
+								);
666
+							}
667
+						}
668
+					}
669
+				}
670
+			}
671
+		}
672
+	}
673
+
674
+	private function adjustDatetimeSpaces($datetime_identifier, $ticket_identifier, $ticket_quantity = 0)
675
+	{
676
+		// does datetime have spaces available?
677
+		// and does the supplied ticket have access to this datetime ?
678
+		if (
679
+			$this->datetime_spaces[ $datetime_identifier ] > 0
680
+			&& isset($this->datetime_spaces[ $datetime_identifier ], $this->datetime_tickets[ $datetime_identifier ])
681
+			&& in_array($ticket_identifier, $this->datetime_tickets[ $datetime_identifier ], true)
682
+			) {
683
+			if ($this->debug) {
684
+				\EEH_Debug_Tools::printr($datetime_identifier, ' . . adjust Datetime Spaces for', __FILE__, __LINE__);
685
+				\EEH_Debug_Tools::printr("{$this->datetime_spaces[ $datetime_identifier ]}", " . . current  {$datetime_identifier} spaces available", __FILE__, __LINE__);
686
+			}
687
+			// then decrement the available spaces for the datetime
688
+			$this->datetime_spaces[ $datetime_identifier ] -= $ticket_quantity;
689
+			// but don't let quantities go below zero
690
+			$this->datetime_spaces[ $datetime_identifier ] = max(
691
+				$this->datetime_spaces[ $datetime_identifier ],
692
+				0
693
+			);
694
+			if ($this->debug) {
695
+				\EEH_Debug_Tools::printr("{$ticket_quantity}",
696
+					" . . . {$datetime_identifier} capacity reduced by", __FILE__, __LINE__);
697
+			}
698
+			return true;
699
+		}
700
+		return false;
701
+	}
702 702
 
703 703
 }
704 704
 // Location: EventSpacesCalculator.php
Please login to merge, or discard this patch.
Spacing   +54 added lines, -54 removed lines patch added patch discarded remove patch
@@ -130,14 +130,14 @@  discard block
 block discarded – undo
130 130
      */
131 131
     private function setHooks()
132 132
     {
133
-        add_action( 'AHEE__EE_Ticket__increase_sold', array($this, 'clearResults'));
134
-        add_action( 'AHEE__EE_Ticket__decrease_sold', array($this, 'clearResults'));
135
-        add_action( 'AHEE__EE_Datetime__increase_sold', array($this, 'clearResults'));
136
-        add_action( 'AHEE__EE_Datetime__decrease_sold', array($this, 'clearResults'));
137
-        add_action( 'AHEE__EE_Ticket__increase_reserved', array($this, 'clearResults'));
138
-        add_action( 'AHEE__EE_Ticket__decrease_reserved', array($this, 'clearResults'));
139
-        add_action( 'AHEE__EE_Datetime__increase_reserved', array($this, 'clearResults'));
140
-        add_action( 'AHEE__EE_Datetime__decrease_reserved', array($this, 'clearResults'));
133
+        add_action('AHEE__EE_Ticket__increase_sold', array($this, 'clearResults'));
134
+        add_action('AHEE__EE_Ticket__decrease_sold', array($this, 'clearResults'));
135
+        add_action('AHEE__EE_Datetime__increase_sold', array($this, 'clearResults'));
136
+        add_action('AHEE__EE_Datetime__decrease_sold', array($this, 'clearResults'));
137
+        add_action('AHEE__EE_Ticket__increase_reserved', array($this, 'clearResults'));
138
+        add_action('AHEE__EE_Ticket__decrease_reserved', array($this, 'clearResults'));
139
+        add_action('AHEE__EE_Datetime__increase_reserved', array($this, 'clearResults'));
140
+        add_action('AHEE__EE_Datetime__decrease_reserved', array($this, 'clearResults'));
141 141
     }
142 142
 
143 143
 
@@ -190,7 +190,7 @@  discard block
 block discarded – undo
190 190
             // sort incoming array by ticket quantity (asc)
191 191
             usort(
192 192
                 $active_tickets,
193
-                function (EE_Ticket $a, EE_Ticket $b) {
193
+                function(EE_Ticket $a, EE_Ticket $b) {
194 194
                     if ($a->qty() === $b->qty()) {
195 195
                         return 0;
196 196
                     }
@@ -266,7 +266,7 @@  discard block
 block discarded – undo
266 266
                 )
267 267
             );
268 268
         }
269
-        $this->datetimes[ $datetime->ID() ] = $datetime;
269
+        $this->datetimes[$datetime->ID()] = $datetime;
270 270
     }
271 271
 
272 272
 
@@ -306,7 +306,7 @@  discard block
 block discarded – undo
306 306
      */
307 307
     public function totalSpacesAvailable()
308 308
     {
309
-        if($this->total_spaces_available === null) {
309
+        if ($this->total_spaces_available === null) {
310 310
             $this->initialize();
311 311
             $this->total_spaces_available = $this->calculate(false);
312 312
         }
@@ -364,16 +364,16 @@  discard block
 block discarded – undo
364 364
                     // we are going to move all of our data into the following arrays:
365 365
                     // datetime spaces initially represents the reg limit for each datetime,
366 366
                     // but this will get adjusted as tickets are accounted for
367
-                    $this->datetime_spaces[ $datetime_identifier ] = $reg_limit;
367
+                    $this->datetime_spaces[$datetime_identifier] = $reg_limit;
368 368
                     // just an array of ticket IDs grouped by datetime
369
-                    $this->datetime_tickets[ $datetime_identifier ][] = $ticket_identifier;
369
+                    $this->datetime_tickets[$datetime_identifier][] = $ticket_identifier;
370 370
                     // and an array of datetime IDs grouped by ticket
371
-                    $this->ticket_datetimes[ $ticket_identifier ][] = $datetime_identifier;
371
+                    $this->ticket_datetimes[$ticket_identifier][] = $datetime_identifier;
372 372
                 }
373 373
                 // total quantity of sold and reserved for each ticket
374
-                $this->tickets_sold[ $ticket_identifier ] = $ticket->sold() + $ticket->reserved();
374
+                $this->tickets_sold[$ticket_identifier] = $ticket->sold() + $ticket->reserved();
375 375
                 // and the maximum ticket quantities for each ticket (adjusted for reg limit)
376
-                $this->ticket_quantities[ $ticket_identifier ] = $max_tickets;
376
+                $this->ticket_quantities[$ticket_identifier] = $max_tickets;
377 377
             }
378 378
         }
379 379
         // sort datetime spaces by reg limit, but maintain our string indexes
@@ -433,11 +433,11 @@  discard block
 block discarded – undo
433 433
             \EEH_Debug_Tools::printr(__FUNCTION__, __CLASS__, __FILE__, __LINE__, 2);
434 434
         }
435 435
         foreach ($this->tickets_sold as $ticket_identifier => $tickets_sold) {
436
-            if (isset($this->ticket_quantities[ $ticket_identifier ])){
437
-                $this->ticket_quantities[ $ticket_identifier ] -= $tickets_sold;
436
+            if (isset($this->ticket_quantities[$ticket_identifier])) {
437
+                $this->ticket_quantities[$ticket_identifier] -= $tickets_sold;
438 438
                 // don't let values go below zero
439
-                $this->ticket_quantities[ $ticket_identifier ] = max(
440
-                    $this->ticket_quantities[ $ticket_identifier ],
439
+                $this->ticket_quantities[$ticket_identifier] = max(
440
+                    $this->ticket_quantities[$ticket_identifier],
441 441
                     0
442 442
                 );
443 443
                 if ($this->debug) {
@@ -445,15 +445,15 @@  discard block
 block discarded – undo
445 445
                 }
446 446
             }
447 447
             if (
448
-                isset($this->ticket_datetimes[ $ticket_identifier ])
449
-                && is_array($this->ticket_datetimes[ $ticket_identifier ])
450
-            ){
451
-                foreach ($this->ticket_datetimes[ $ticket_identifier ] as $ticket_datetime) {
452
-                    if (isset($this->ticket_quantities[ $ticket_identifier ])) {
453
-                        $this->datetime_spaces[ $ticket_datetime ] -= $tickets_sold;
448
+                isset($this->ticket_datetimes[$ticket_identifier])
449
+                && is_array($this->ticket_datetimes[$ticket_identifier])
450
+            ) {
451
+                foreach ($this->ticket_datetimes[$ticket_identifier] as $ticket_datetime) {
452
+                    if (isset($this->ticket_quantities[$ticket_identifier])) {
453
+                        $this->datetime_spaces[$ticket_datetime] -= $tickets_sold;
454 454
                         // don't let values go below zero
455
-                        $this->datetime_spaces[ $ticket_datetime ] = max(
456
-                            $this->datetime_spaces[ $ticket_datetime ],
455
+                        $this->datetime_spaces[$ticket_datetime] = max(
456
+                            $this->datetime_spaces[$ticket_datetime],
457 457
                             0
458 458
                         );
459 459
                         if ($this->debug) {
@@ -475,8 +475,8 @@  discard block
 block discarded – undo
475 475
     private function trackAvailableSpacesForDatetimes($datetime_identifier, array $tickets)
476 476
     {
477 477
         // make sure a reg limit is set for the datetime
478
-        $reg_limit = isset($this->datetime_spaces[ $datetime_identifier ])
479
-            ? $this->datetime_spaces[ $datetime_identifier ]
478
+        $reg_limit = isset($this->datetime_spaces[$datetime_identifier])
479
+            ? $this->datetime_spaces[$datetime_identifier]
480 480
             : 0;
481 481
         // and bail if it is not
482 482
         if ( ! $reg_limit) {
@@ -491,7 +491,7 @@  discard block
 block discarded – undo
491 491
         }
492 492
         // number of allocated spaces always starts at zero
493 493
         $spaces_allocated                           = 0;
494
-        $this->total_spaces[ $datetime_identifier ] = 0;
494
+        $this->total_spaces[$datetime_identifier] = 0;
495 495
         foreach ($tickets as $ticket_identifier) {
496 496
             $spaces_allocated = $this->calculateAvailableSpacesForTicket(
497 497
                 $datetime_identifier,
@@ -504,9 +504,9 @@  discard block
 block discarded – undo
504 504
         $spaces_allocated = max($spaces_allocated, 0);
505 505
         if ($spaces_allocated) {
506 506
             // track any non-zero values
507
-            $this->total_spaces[ $datetime_identifier ] += $spaces_allocated;
507
+            $this->total_spaces[$datetime_identifier] += $spaces_allocated;
508 508
             if ($this->debug) {
509
-                \EEH_Debug_Tools::printr((string)$spaces_allocated, ' . $spaces_allocated: ', __FILE__, __LINE__);
509
+                \EEH_Debug_Tools::printr((string) $spaces_allocated, ' . $spaces_allocated: ', __FILE__, __LINE__);
510 510
             }
511 511
         } else {
512 512
             if ($this->debug) {
@@ -514,7 +514,7 @@  discard block
 block discarded – undo
514 514
             }
515 515
         }
516 516
         if ($this->debug) {
517
-            \EEH_Debug_Tools::printr($this->total_spaces[ $datetime_identifier ], '$total_spaces', __FILE__,
517
+            \EEH_Debug_Tools::printr($this->total_spaces[$datetime_identifier], '$total_spaces', __FILE__,
518 518
                 __LINE__);
519 519
             \EEH_Debug_Tools::printr($this->ticket_quantities, '$ticket_quantities', __FILE__, __LINE__);
520 520
             \EEH_Debug_Tools::printr($this->datetime_spaces, 'datetime_spaces', __FILE__, __LINE__);
@@ -537,8 +537,8 @@  discard block
 block discarded – undo
537 537
         $spaces_allocated
538 538
     ) {
539 539
         // make sure ticket quantity is set
540
-        $ticket_quantity = isset($this->ticket_quantities[ $ticket_identifier ])
541
-            ? $this->ticket_quantities[ $ticket_identifier ]
540
+        $ticket_quantity = isset($this->ticket_quantities[$ticket_identifier])
541
+            ? $this->ticket_quantities[$ticket_identifier]
542 542
             : 0;
543 543
         if ($this->debug) {
544 544
             \EEH_Debug_Tools::printr("{$spaces_allocated}", '$spaces_allocated', __FILE__, __LINE__);
@@ -562,13 +562,13 @@  discard block
 block discarded – undo
562 562
                 //  or the maximum ticket quantity
563 563
                 $ticket_quantity = min($reg_limit - $spaces_allocated, $ticket_quantity);
564 564
                 // adjust the available quantity in our tracking array
565
-                $this->ticket_quantities[ $ticket_identifier ] -= $ticket_quantity;
565
+                $this->ticket_quantities[$ticket_identifier] -= $ticket_quantity;
566 566
                 // and increment spaces allocated for this datetime
567 567
                 $spaces_allocated += $ticket_quantity;
568 568
                 $at_capacity = $spaces_allocated >= $reg_limit;
569 569
                 if ($this->debug) {
570 570
                     \EEH_Debug_Tools::printr("{$ticket_quantity} {$ticket_identifier} tickets", ' > > allocate ',
571
-                        __FILE__, __LINE__,   3);
571
+                        __FILE__, __LINE__, 3);
572 572
                     if ($at_capacity) {
573 573
                         \EEH_Debug_Tools::printr('AT CAPACITY', " . {$datetime_identifier}", __FILE__, __LINE__, 3);
574 574
                     }
@@ -615,15 +615,15 @@  discard block
 block discarded – undo
615 615
                 $ticket_quantity
616 616
             );
617 617
             // skip to next ticket if nothing changed
618
-            if (! ($adjusted || $at_capacity)) {
618
+            if ( ! ($adjusted || $at_capacity)) {
619 619
                 continue;
620 620
             }
621 621
             // then all of it's tickets are now unavailable
622 622
             foreach ($datetime_tickets as $datetime_ticket) {
623 623
                 if (
624 624
                     ($ticket_identifier === $datetime_ticket || $at_capacity)
625
-                    && isset($this->ticket_quantities[ $datetime_ticket ])
626
-                    && $this->ticket_quantities[ $datetime_ticket ] > 0
625
+                    && isset($this->ticket_quantities[$datetime_ticket])
626
+                    && $this->ticket_quantities[$datetime_ticket] > 0
627 627
                 ) {
628 628
                     if ($this->debug) {
629 629
                         \EEH_Debug_Tools::printr($datetime_ticket, ' . . . adjust ticket quantities for', __FILE__,
@@ -633,14 +633,14 @@  discard block
 block discarded – undo
633 633
                     // otherwise just subtract the ticket quantity
634 634
                     $new_quantity = $at_capacity
635 635
                         ? 0
636
-                        : $this->ticket_quantities[ $datetime_ticket ] - $ticket_quantity;
636
+                        : $this->ticket_quantities[$datetime_ticket] - $ticket_quantity;
637 637
                     // don't let ticket quantity go below zero
638
-                    $this->ticket_quantities[ $datetime_ticket ] = max($new_quantity, 0);
638
+                    $this->ticket_quantities[$datetime_ticket] = max($new_quantity, 0);
639 639
                     if ($this->debug) {
640 640
                         \EEH_Debug_Tools::printr(
641 641
                             $at_capacity
642 642
                                 ? "0 because Datetime {$datetime_identifier} is at capacity"
643
-                                : "{$this->ticket_quantities[ $datetime_ticket ]}",
643
+                                : "{$this->ticket_quantities[$datetime_ticket]}",
644 644
                             " . . . . {$datetime_ticket} quantity set to ",
645 645
                             __FILE__, __LINE__
646 646
                         );
@@ -648,14 +648,14 @@  discard block
 block discarded – undo
648 648
                 }
649 649
                 // but we also need to adjust spaces for any other datetimes this ticket has access to
650 650
                 if ($datetime_ticket === $ticket_identifier) {
651
-                    if (isset($this->ticket_datetimes[ $datetime_ticket ])
652
-                        && is_array($this->ticket_datetimes[ $datetime_ticket ])
651
+                    if (isset($this->ticket_datetimes[$datetime_ticket])
652
+                        && is_array($this->ticket_datetimes[$datetime_ticket])
653 653
                     ) {
654 654
                         if ($this->debug) {
655 655
                             \EEH_Debug_Tools::printr($datetime_ticket, ' . . adjust other Datetimes for', __FILE__,
656 656
                                 __LINE__);
657 657
                         }
658
-                        foreach ($this->ticket_datetimes[ $datetime_ticket ] as $datetime) {
658
+                        foreach ($this->ticket_datetimes[$datetime_ticket] as $datetime) {
659 659
                             // don't adjust the current datetime twice
660 660
                             if ($datetime !== $datetime_identifier) {
661 661
                                 $this->adjustDatetimeSpaces(
@@ -676,19 +676,19 @@  discard block
 block discarded – undo
676 676
         // does datetime have spaces available?
677 677
         // and does the supplied ticket have access to this datetime ?
678 678
         if (
679
-            $this->datetime_spaces[ $datetime_identifier ] > 0
680
-            && isset($this->datetime_spaces[ $datetime_identifier ], $this->datetime_tickets[ $datetime_identifier ])
681
-            && in_array($ticket_identifier, $this->datetime_tickets[ $datetime_identifier ], true)
679
+            $this->datetime_spaces[$datetime_identifier] > 0
680
+            && isset($this->datetime_spaces[$datetime_identifier], $this->datetime_tickets[$datetime_identifier])
681
+            && in_array($ticket_identifier, $this->datetime_tickets[$datetime_identifier], true)
682 682
             ) {
683 683
             if ($this->debug) {
684 684
                 \EEH_Debug_Tools::printr($datetime_identifier, ' . . adjust Datetime Spaces for', __FILE__, __LINE__);
685
-                \EEH_Debug_Tools::printr("{$this->datetime_spaces[ $datetime_identifier ]}", " . . current  {$datetime_identifier} spaces available", __FILE__, __LINE__);
685
+                \EEH_Debug_Tools::printr("{$this->datetime_spaces[$datetime_identifier]}", " . . current  {$datetime_identifier} spaces available", __FILE__, __LINE__);
686 686
             }
687 687
             // then decrement the available spaces for the datetime
688
-            $this->datetime_spaces[ $datetime_identifier ] -= $ticket_quantity;
688
+            $this->datetime_spaces[$datetime_identifier] -= $ticket_quantity;
689 689
             // but don't let quantities go below zero
690
-            $this->datetime_spaces[ $datetime_identifier ] = max(
691
-                $this->datetime_spaces[ $datetime_identifier ],
690
+            $this->datetime_spaces[$datetime_identifier] = max(
691
+                $this->datetime_spaces[$datetime_identifier],
692 692
                 0
693 693
             );
694 694
             if ($this->debug) {
Please login to merge, or discard this patch.
core/db_classes/EE_Event.class.php 2 patches
Indentation   +1299 added lines, -1299 removed lines patch added patch discarded remove patch
@@ -4,7 +4,7 @@  discard block
 block discarded – undo
4 4
 use EventEspresso\core\exceptions\UnexpectedEntityException;
5 5
 
6 6
 if (!defined('EVENT_ESPRESSO_VERSION')) {
7
-    exit('No direct script access allowed');
7
+	exit('No direct script access allowed');
8 8
 }
9 9
 
10 10
 
@@ -18,1303 +18,1303 @@  discard block
 block discarded – undo
18 18
 class EE_Event extends EE_CPT_Base implements EEI_Line_Item_Object, EEI_Admin_Links, EEI_Has_Icon, EEI_Event
19 19
 {
20 20
 
21
-    /**
22
-     * cached value for the the logical active status for the event
23
-     *
24
-     * @see get_active_status()
25
-     * @var string
26
-     */
27
-    protected $_active_status = '';
28
-
29
-    /**
30
-     * This is just used for caching the Primary Datetime for the Event on initial retrieval
31
-     *
32
-     * @var EE_Datetime
33
-     */
34
-    protected $_Primary_Datetime;
35
-
36
-    /**
37
-     * @var EventSpacesCalculator $available_spaces_calculator
38
-     */
39
-    protected $available_spaces_calculator;
40
-
41
-
42
-    /**
43
-     * @param array $props_n_values incoming values
44
-     * @param string $timezone incoming timezone (if not set the timezone set for the website will be
45
-     *                                        used.)
46
-     * @param array $date_formats incoming date_formats in an array where the first value is the
47
-     *                                        date_format and the second value is the time format
48
-     * @return EE_Event
49
-     * @throws EE_Error
50
-     */
51
-    public static function new_instance($props_n_values = array(), $timezone = null, $date_formats = array())
52
-    {
53
-        $has_object = parent::_check_for_object($props_n_values, __CLASS__, $timezone, $date_formats);
54
-        return $has_object ? $has_object : new self($props_n_values, false, $timezone, $date_formats);
55
-    }
56
-
57
-
58
-    /**
59
-     * @param array $props_n_values incoming values from the database
60
-     * @param string $timezone incoming timezone as set by the model.  If not set the timezone for
61
-     *                                the website will be used.
62
-     * @return EE_Event
63
-     * @throws EE_Error
64
-     */
65
-    public static function new_instance_from_db($props_n_values = array(), $timezone = null)
66
-    {
67
-        return new self($props_n_values, true, $timezone);
68
-    }
69
-
70
-
71
-
72
-    /**
73
-     * @return EventSpacesCalculator
74
-     * @throws \EE_Error
75
-     */
76
-    public function getAvailableSpacesCalculator()
77
-    {
78
-        if(! $this->available_spaces_calculator instanceof EventSpacesCalculator){
79
-            $this->available_spaces_calculator = new EventSpacesCalculator($this);
80
-        }
81
-        return $this->available_spaces_calculator;
82
-    }
83
-
84
-
85
-
86
-    /**
87
-     * Overrides parent set() method so that all calls to set( 'status', $status ) can be routed to internal methods
88
-     *
89
-     * @param string $field_name
90
-     * @param mixed $field_value
91
-     * @param bool $use_default
92
-     * @throws EE_Error
93
-     */
94
-    public function set($field_name, $field_value, $use_default = false)
95
-    {
96
-        switch ($field_name) {
97
-            case 'status' :
98
-                $this->set_status($field_value, $use_default);
99
-                break;
100
-            default :
101
-                parent::set($field_name, $field_value, $use_default);
102
-        }
103
-    }
104
-
105
-
106
-    /**
107
-     *    set_status
108
-     * Checks if event status is being changed to SOLD OUT
109
-     * and updates event meta data with previous event status
110
-     * so that we can revert things if/when the event is no longer sold out
111
-     *
112
-     * @access public
113
-     * @param string $new_status
114
-     * @param bool $use_default
115
-     * @return void
116
-     * @throws EE_Error
117
-     */
118
-    public function set_status($new_status = null, $use_default = false)
119
-    {
120
-        // if nothing is set, and we aren't explicitly wanting to reset the status, then just leave
121
-        if (empty($new_status) && !$use_default) {
122
-            return;
123
-        }
124
-        // get current Event status
125
-        $old_status = $this->status();
126
-        // if status has changed
127
-        if ($old_status !== $new_status) {
128
-            // TO sold_out
129
-            if ($new_status === EEM_Event::sold_out) {
130
-                // save the previous event status so that we can revert if the event is no longer sold out
131
-                $this->add_post_meta('_previous_event_status', $old_status);
132
-                do_action('AHEE__EE_Event__set_status__to_sold_out', $this, $old_status, $new_status);
133
-                // OR FROM  sold_out
134
-            } else if ($old_status === EEM_Event::sold_out) {
135
-                $this->delete_post_meta('_previous_event_status');
136
-                do_action('AHEE__EE_Event__set_status__from_sold_out', $this, $old_status, $new_status);
137
-            }
138
-            //clear out the active status so that it gets reset the next time it is requested
139
-            $this->_active_status = null;
140
-            // update status
141
-            parent::set('status', $new_status, $use_default);
142
-            do_action('AHEE__EE_Event__set_status__after_update', $this);
143
-            return;
144
-        }
145
-        // even though the old value matches the new value, it's still good to
146
-        // allow the parent set method to have a say
147
-        parent::set('status', $new_status, $use_default);
148
-    }
149
-
150
-
151
-    /**
152
-     * Gets all the datetimes for this event
153
-     *
154
-     * @param array $query_params like EEM_Base::get_all
155
-     * @return EE_Base_Class[]|EE_Datetime[]
156
-     * @throws EE_Error
157
-     */
158
-    public function datetimes($query_params = array())
159
-    {
160
-        return $this->get_many_related('Datetime', $query_params);
161
-    }
162
-
163
-
164
-    /**
165
-     * Gets all the datetimes for this event, ordered by DTT_EVT_start in ascending order
166
-     *
167
-     * @return EE_Base_Class[]|EE_Datetime[]
168
-     * @throws EE_Error
169
-     */
170
-    public function datetimes_in_chronological_order()
171
-    {
172
-        return $this->get_many_related('Datetime', array('order_by' => array('DTT_EVT_start' => 'ASC')));
173
-    }
174
-
175
-
176
-    /**
177
-     * Gets all the datetimes for this event, ordered by the DTT_order on the datetime.
178
-     * @darren, we should probably UNSET timezone on the EEM_Datetime model
179
-     * after running our query, so that this timezone isn't set for EVERY query
180
-     * on EEM_Datetime for the rest of the request, no?
181
-     *
182
-     * @param boolean $show_expired whether or not to include expired events
183
-     * @param boolean $show_deleted whether or not to include deleted events
184
-     * @param null $limit
185
-     * @return EE_Datetime[]
186
-     * @throws EE_Error
187
-     */
188
-    public function datetimes_ordered($show_expired = true, $show_deleted = false, $limit = null)
189
-    {
190
-        return EEM_Datetime::instance($this->_timezone)->get_datetimes_for_event_ordered_by_DTT_order(
191
-            $this->ID(),
192
-            $show_expired,
193
-            $show_deleted,
194
-            $limit
195
-        );
196
-    }
197
-
198
-
199
-    /**
200
-     * Returns one related datetime. Mostly only used by some legacy code.
201
-     *
202
-     * @return EE_Base_Class|EE_Datetime
203
-     * @throws EE_Error
204
-     */
205
-    public function first_datetime()
206
-    {
207
-        return $this->get_first_related('Datetime');
208
-    }
209
-
210
-
211
-    /**
212
-     * Returns the 'primary' datetime for the event
213
-     *
214
-     * @param bool $try_to_exclude_expired
215
-     * @param bool $try_to_exclude_deleted
216
-     * @return EE_Datetime
217
-     * @throws EE_Error
218
-     */
219
-    public function primary_datetime($try_to_exclude_expired = true, $try_to_exclude_deleted = true)
220
-    {
221
-        if (!empty ($this->_Primary_Datetime)) {
222
-            return $this->_Primary_Datetime;
223
-        }
224
-        $this->_Primary_Datetime = EEM_Datetime::instance($this->_timezone)->get_primary_datetime_for_event(
225
-            $this->ID(),
226
-            $try_to_exclude_expired,
227
-            $try_to_exclude_deleted
228
-        );
229
-        return $this->_Primary_Datetime;
230
-    }
231
-
232
-
233
-    /**
234
-     * Gets all the tickets available for purchase of this event
235
-     *
236
-     * @param array $query_params like EEM_Base::get_all
237
-     * @return EE_Base_Class[]|EE_Ticket[]
238
-     * @throws EE_Error
239
-     */
240
-    public function tickets($query_params = array())
241
-    {
242
-        //first get all datetimes
243
-        $datetimes = $this->datetimes_ordered();
244
-        if (!$datetimes) {
245
-            return array();
246
-        }
247
-        $datetime_ids = array();
248
-        foreach ($datetimes as $datetime) {
249
-            $datetime_ids[] = $datetime->ID();
250
-        }
251
-        $where_params = array('Datetime.DTT_ID' => array('IN', $datetime_ids));
252
-        //if incoming $query_params has where conditions let's merge but not override existing.
253
-        if (is_array($query_params) && isset($query_params[0])) {
254
-            $where_params = array_merge($query_params[0], $where_params);
255
-            unset($query_params[0]);
256
-        }
257
-        //now add $where_params to $query_params
258
-        $query_params[0] = $where_params;
259
-        return EEM_Ticket::instance()->get_all($query_params);
260
-    }
261
-
262
-
263
-    /**
264
-     * get all unexpired untrashed tickets
265
-     *
266
-     * @return EE_Ticket[]
267
-     * @throws EE_Error
268
-     */
269
-    public function active_tickets()
270
-    {
271
-        return $this->tickets(array(
272
-            array(
273
-                'TKT_end_date' => array('>=', EEM_Ticket::instance()->current_time_for_query('TKT_end_date')),
274
-                'TKT_deleted' => false,
275
-            ),
276
-        ));
277
-    }
278
-
279
-
280
-    /**
281
-     * @return bool
282
-     * @throws EE_Error
283
-     */
284
-    public function additional_limit()
285
-    {
286
-        return $this->get('EVT_additional_limit');
287
-    }
288
-
289
-
290
-    /**
291
-     * @return bool
292
-     * @throws EE_Error
293
-     */
294
-    public function allow_overflow()
295
-    {
296
-        return $this->get('EVT_allow_overflow');
297
-    }
298
-
299
-
300
-    /**
301
-     * @return bool
302
-     * @throws EE_Error
303
-     */
304
-    public function created()
305
-    {
306
-        return $this->get('EVT_created');
307
-    }
308
-
309
-
310
-    /**
311
-     * @return bool
312
-     * @throws EE_Error
313
-     */
314
-    public function description()
315
-    {
316
-        return $this->get('EVT_desc');
317
-    }
318
-
319
-
320
-    /**
321
-     * Runs do_shortcode and wpautop on the description
322
-     *
323
-     * @return string of html
324
-     * @throws EE_Error
325
-     */
326
-    public function description_filtered()
327
-    {
328
-        return $this->get_pretty('EVT_desc');
329
-    }
330
-
331
-
332
-    /**
333
-     * @return bool
334
-     * @throws EE_Error
335
-     */
336
-    public function display_description()
337
-    {
338
-        return $this->get('EVT_display_desc');
339
-    }
340
-
341
-
342
-    /**
343
-     * @return bool
344
-     * @throws EE_Error
345
-     */
346
-    public function display_ticket_selector()
347
-    {
348
-        return (bool)$this->get('EVT_display_ticket_selector');
349
-    }
350
-
351
-
352
-    /**
353
-     * @return bool
354
-     * @throws EE_Error
355
-     */
356
-    public function external_url()
357
-    {
358
-        return $this->get('EVT_external_URL');
359
-    }
360
-
361
-
362
-    /**
363
-     * @return bool
364
-     * @throws EE_Error
365
-     */
366
-    public function member_only()
367
-    {
368
-        return $this->get('EVT_member_only');
369
-    }
370
-
371
-
372
-    /**
373
-     * @return bool
374
-     * @throws EE_Error
375
-     */
376
-    public function phone()
377
-    {
378
-        return $this->get('EVT_phone');
379
-    }
380
-
381
-
382
-    /**
383
-     * @return bool
384
-     * @throws EE_Error
385
-     */
386
-    public function modified()
387
-    {
388
-        return $this->get('EVT_modified');
389
-    }
390
-
391
-
392
-    /**
393
-     * @return bool
394
-     * @throws EE_Error
395
-     */
396
-    public function name()
397
-    {
398
-        return $this->get('EVT_name');
399
-    }
400
-
401
-
402
-    /**
403
-     * @return bool
404
-     * @throws EE_Error
405
-     */
406
-    public function order()
407
-    {
408
-        return $this->get('EVT_order');
409
-    }
410
-
411
-
412
-    /**
413
-     * @return bool|string
414
-     * @throws EE_Error
415
-     */
416
-    public function default_registration_status()
417
-    {
418
-        $event_default_registration_status = $this->get('EVT_default_registration_status');
419
-        return !empty($event_default_registration_status)
420
-            ? $event_default_registration_status
421
-            : EE_Registry::instance()->CFG->registration->default_STS_ID;
422
-    }
423
-
424
-
425
-    /**
426
-     * @param int $num_words
427
-     * @param null $more
428
-     * @param bool $not_full_desc
429
-     * @return bool|string
430
-     * @throws EE_Error
431
-     */
432
-    public function short_description($num_words = 55, $more = null, $not_full_desc = false)
433
-    {
434
-        $short_desc = $this->get('EVT_short_desc');
435
-        if (!empty($short_desc) || $not_full_desc) {
436
-            return $short_desc;
437
-        }
438
-        $full_desc = $this->get('EVT_desc');
439
-        return wp_trim_words($full_desc, $num_words, $more);
440
-    }
441
-
442
-
443
-    /**
444
-     * @return bool
445
-     * @throws EE_Error
446
-     */
447
-    public function slug()
448
-    {
449
-        return $this->get('EVT_slug');
450
-    }
451
-
452
-
453
-    /**
454
-     * @return bool
455
-     * @throws EE_Error
456
-     */
457
-    public function timezone_string()
458
-    {
459
-        return $this->get('EVT_timezone_string');
460
-    }
461
-
462
-
463
-    /**
464
-     * @return bool
465
-     * @throws EE_Error
466
-     */
467
-    public function visible_on()
468
-    {
469
-        return $this->get('EVT_visible_on');
470
-    }
471
-
472
-
473
-    /**
474
-     * @return int
475
-     * @throws EE_Error
476
-     */
477
-    public function wp_user()
478
-    {
479
-        return $this->get('EVT_wp_user');
480
-    }
481
-
482
-
483
-    /**
484
-     * @return bool
485
-     * @throws EE_Error
486
-     */
487
-    public function donations()
488
-    {
489
-        return $this->get('EVT_donations');
490
-    }
491
-
492
-
493
-    /**
494
-     * @param $limit
495
-     * @throws EE_Error
496
-     */
497
-    public function set_additional_limit($limit)
498
-    {
499
-        $this->set('EVT_additional_limit', $limit);
500
-    }
501
-
502
-
503
-    /**
504
-     * @param $created
505
-     * @throws EE_Error
506
-     */
507
-    public function set_created($created)
508
-    {
509
-        $this->set('EVT_created', $created);
510
-    }
511
-
512
-
513
-    /**
514
-     * @param $desc
515
-     * @throws EE_Error
516
-     */
517
-    public function set_description($desc)
518
-    {
519
-        $this->set('EVT_desc', $desc);
520
-    }
521
-
522
-
523
-    /**
524
-     * @param $display_desc
525
-     * @throws EE_Error
526
-     */
527
-    public function set_display_description($display_desc)
528
-    {
529
-        $this->set('EVT_display_desc', $display_desc);
530
-    }
531
-
532
-
533
-    /**
534
-     * @param $display_ticket_selector
535
-     * @throws EE_Error
536
-     */
537
-    public function set_display_ticket_selector($display_ticket_selector)
538
-    {
539
-        $this->set('EVT_display_ticket_selector', $display_ticket_selector);
540
-    }
541
-
542
-
543
-    /**
544
-     * @param $external_url
545
-     * @throws EE_Error
546
-     */
547
-    public function set_external_url($external_url)
548
-    {
549
-        $this->set('EVT_external_URL', $external_url);
550
-    }
551
-
552
-
553
-    /**
554
-     * @param $member_only
555
-     * @throws EE_Error
556
-     */
557
-    public function set_member_only($member_only)
558
-    {
559
-        $this->set('EVT_member_only', $member_only);
560
-    }
561
-
562
-
563
-    /**
564
-     * @param $event_phone
565
-     * @throws EE_Error
566
-     */
567
-    public function set_event_phone($event_phone)
568
-    {
569
-        $this->set('EVT_phone', $event_phone);
570
-    }
571
-
572
-
573
-    /**
574
-     * @param $modified
575
-     * @throws EE_Error
576
-     */
577
-    public function set_modified($modified)
578
-    {
579
-        $this->set('EVT_modified', $modified);
580
-    }
581
-
582
-
583
-    /**
584
-     * @param $name
585
-     * @throws EE_Error
586
-     */
587
-    public function set_name($name)
588
-    {
589
-        $this->set('EVT_name', $name);
590
-    }
591
-
592
-
593
-    /**
594
-     * @param $order
595
-     * @throws EE_Error
596
-     */
597
-    public function set_order($order)
598
-    {
599
-        $this->set('EVT_order', $order);
600
-    }
601
-
602
-
603
-    /**
604
-     * @param $short_desc
605
-     * @throws EE_Error
606
-     */
607
-    public function set_short_description($short_desc)
608
-    {
609
-        $this->set('EVT_short_desc', $short_desc);
610
-    }
611
-
612
-
613
-    /**
614
-     * @param $slug
615
-     * @throws EE_Error
616
-     */
617
-    public function set_slug($slug)
618
-    {
619
-        $this->set('EVT_slug', $slug);
620
-    }
621
-
622
-
623
-    /**
624
-     * @param $timezone_string
625
-     * @throws EE_Error
626
-     */
627
-    public function set_timezone_string($timezone_string)
628
-    {
629
-        $this->set('EVT_timezone_string', $timezone_string);
630
-    }
631
-
632
-
633
-    /**
634
-     * @param $visible_on
635
-     * @throws EE_Error
636
-     */
637
-    public function set_visible_on($visible_on)
638
-    {
639
-        $this->set('EVT_visible_on', $visible_on);
640
-    }
641
-
642
-
643
-    /**
644
-     * @param $wp_user
645
-     * @throws EE_Error
646
-     */
647
-    public function set_wp_user($wp_user)
648
-    {
649
-        $this->set('EVT_wp_user', $wp_user);
650
-    }
651
-
652
-
653
-    /**
654
-     * @param $default_registration_status
655
-     * @throws EE_Error
656
-     */
657
-    public function set_default_registration_status($default_registration_status)
658
-    {
659
-        $this->set('EVT_default_registration_status', $default_registration_status);
660
-    }
661
-
662
-
663
-    /**
664
-     * @param $donations
665
-     * @throws EE_Error
666
-     */
667
-    public function set_donations($donations)
668
-    {
669
-        $this->set('EVT_donations', $donations);
670
-    }
671
-
672
-
673
-    /**
674
-     * Adds a venue to this event
675
-     *
676
-     * @param EE_Venue /int $venue_id_or_obj
677
-     * @return EE_Base_Class|EE_Venue
678
-     * @throws EE_Error
679
-     */
680
-    public function add_venue($venue_id_or_obj)
681
-    {
682
-        return $this->_add_relation_to($venue_id_or_obj, 'Venue');
683
-    }
684
-
685
-
686
-    /**
687
-     * Removes a venue from the event
688
-     *
689
-     * @param EE_Venue /int $venue_id_or_obj
690
-     * @return EE_Base_Class|EE_Venue
691
-     * @throws EE_Error
692
-     */
693
-    public function remove_venue($venue_id_or_obj)
694
-    {
695
-        return $this->_remove_relation_to($venue_id_or_obj, 'Venue');
696
-    }
697
-
698
-
699
-    /**
700
-     * Gets all the venues related ot the event. May provide additional $query_params if desired
701
-     *
702
-     * @param array $query_params like EEM_Base::get_all's $query_params
703
-     * @return EE_Base_Class[]|EE_Venue[]
704
-     * @throws EE_Error
705
-     */
706
-    public function venues($query_params = array())
707
-    {
708
-        return $this->get_many_related('Venue', $query_params);
709
-    }
710
-
711
-
712
-    /**
713
-     * check if event id is present and if event is published
714
-     *
715
-     * @access public
716
-     * @return boolean true yes, false no
717
-     * @throws EE_Error
718
-     */
719
-    private function _has_ID_and_is_published()
720
-    {
721
-        // first check if event id is present and not NULL,
722
-        // then check if this event is published (or any of the equivalent "published" statuses)
723
-        return
724
-            $this->ID() && $this->ID() !== null
725
-            && (
726
-                $this->status() === 'publish'
727
-                || $this->status() === EEM_Event::sold_out
728
-                || $this->status() === EEM_Event::postponed
729
-                || $this->status() === EEM_Event::cancelled
730
-            );
731
-    }
732
-
733
-
734
-    /**
735
-     * This simply compares the internal dates with NOW and determines if the event is upcoming or not.
736
-     *
737
-     * @access public
738
-     * @return boolean true yes, false no
739
-     * @throws EE_Error
740
-     */
741
-    public function is_upcoming()
742
-    {
743
-        // check if event id is present and if this event is published
744
-        if ($this->is_inactive()) {
745
-            return false;
746
-        }
747
-        // set initial value
748
-        $upcoming = false;
749
-        //next let's get all datetimes and loop through them
750
-        $datetimes = $this->datetimes_in_chronological_order();
751
-        foreach ($datetimes as $datetime) {
752
-            if ($datetime instanceof EE_Datetime) {
753
-                //if this dtt is expired then we continue cause one of the other datetimes might be upcoming.
754
-                if ($datetime->is_expired()) {
755
-                    continue;
756
-                }
757
-                //if this dtt is active then we return false.
758
-                if ($datetime->is_active()) {
759
-                    return false;
760
-                }
761
-                //otherwise let's check upcoming status
762
-                $upcoming = $datetime->is_upcoming();
763
-            }
764
-        }
765
-        return $upcoming;
766
-    }
767
-
768
-
769
-    /**
770
-     * @return bool
771
-     * @throws EE_Error
772
-     */
773
-    public function is_active()
774
-    {
775
-        // check if event id is present and if this event is published
776
-        if ($this->is_inactive()) {
777
-            return false;
778
-        }
779
-        // set initial value
780
-        $active = false;
781
-        //next let's get all datetimes and loop through them
782
-        $datetimes = $this->datetimes_in_chronological_order();
783
-        foreach ($datetimes as $datetime) {
784
-            if ($datetime instanceof EE_Datetime) {
785
-                //if this dtt is expired then we continue cause one of the other datetimes might be active.
786
-                if ($datetime->is_expired()) {
787
-                    continue;
788
-                }
789
-                //if this dtt is upcoming then we return false.
790
-                if ($datetime->is_upcoming()) {
791
-                    return false;
792
-                }
793
-                //otherwise let's check active status
794
-                $active = $datetime->is_active();
795
-            }
796
-        }
797
-        return $active;
798
-    }
799
-
800
-
801
-    /**
802
-     * @return bool
803
-     * @throws EE_Error
804
-     */
805
-    public function is_expired()
806
-    {
807
-        // check if event id is present and if this event is published
808
-        if ($this->is_inactive()) {
809
-            return false;
810
-        }
811
-        // set initial value
812
-        $expired = false;
813
-        //first let's get all datetimes and loop through them
814
-        $datetimes = $this->datetimes_in_chronological_order();
815
-        foreach ($datetimes as $datetime) {
816
-            if ($datetime instanceof EE_Datetime) {
817
-                //if this dtt is upcoming or active then we return false.
818
-                if ($datetime->is_upcoming() || $datetime->is_active()) {
819
-                    return false;
820
-                }
821
-                //otherwise let's check active status
822
-                $expired = $datetime->is_expired();
823
-            }
824
-        }
825
-        return $expired;
826
-    }
827
-
828
-
829
-    /**
830
-     * @return bool
831
-     * @throws EE_Error
832
-     */
833
-    public function is_inactive()
834
-    {
835
-        // check if event id is present and if this event is published
836
-        if ($this->_has_ID_and_is_published()) {
837
-            return false;
838
-        }
839
-        return true;
840
-    }
841
-
842
-
843
-    /**
844
-     * calculate spaces remaining based on "saleable" tickets
845
-     *
846
-     * @param array $tickets
847
-     * @param bool $filtered
848
-     * @return int|float
849
-     * @throws EE_Error
850
-     * @throws DomainException
851
-     * @throws UnexpectedEntityException
852
-     */
853
-    public function spaces_remaining($tickets = array(), $filtered = true)
854
-    {
855
-        $this->getAvailableSpacesCalculator()->setActiveTickets($tickets);
856
-        $spaces_remaining = $this->getAvailableSpacesCalculator()->spacesRemaining();
857
-        return $filtered
858
-            ? apply_filters(
859
-                'FHEE_EE_Event__spaces_remaining',
860
-                $spaces_remaining,
861
-                $this,
862
-                $tickets
863
-            )
864
-            : $spaces_remaining;
865
-    }
866
-
867
-
868
-    /**
869
-     *    perform_sold_out_status_check
870
-     *    checks all of this events's datetime  reg_limit - sold values to determine if ANY datetimes have spaces available...
871
-     *    if NOT, then the event status will get toggled to 'sold_out'
872
-     *
873
-     * @return bool    return the ACTUAL sold out state.
874
-     * @throws EE_Error
875
-     * @throws DomainException
876
-     * @throws UnexpectedEntityException
877
-     */
878
-    public function perform_sold_out_status_check()
879
-    {
880
-        // get all unexpired untrashed tickets
881
-        $tickets = $this->tickets(
882
-            array(
883
-                array('TKT_deleted' => false),
884
-                'order_by' => array('TKT_qty' => 'ASC'),
885
-            )
886
-        );
887
-        $all_expired = true;
888
-        foreach ($tickets as $ticket) {
889
-            if(!$ticket->is_expired()){
890
-                $all_expired = false;
891
-                break;
892
-            }
893
-        }
894
-        // if all the tickets are just expired, then don't update the event status to sold out
895
-        if ($all_expired) {
896
-            return true;
897
-        }
898
-        $spaces_remaining = $this->spaces_remaining($tickets);
899
-        if ($spaces_remaining < 1) {
900
-            $this->set_status(EEM_Event::sold_out);
901
-            $this->save();
902
-            $sold_out = true;
903
-        } else {
904
-            $sold_out = false;
905
-            // was event previously marked as sold out ?
906
-            if ($this->status() === EEM_Event::sold_out) {
907
-                // revert status to previous value, if it was set
908
-                $previous_event_status = $this->get_post_meta('_previous_event_status', true);
909
-                if ($previous_event_status) {
910
-                    $this->set_status($previous_event_status);
911
-                    $this->save();
912
-                }
913
-            }
914
-        }
915
-        do_action('AHEE__EE_Event__perform_sold_out_status_check__end', $this, $sold_out, $spaces_remaining, $tickets);
916
-        return $sold_out;
917
-    }
918
-
919
-
920
-
921
-    /**
922
-     * This returns the total remaining spaces for sale on this event.
923
-     *
924
-     * @uses EE_Event::total_available_spaces()
925
-     * @return float|int
926
-     * @throws EE_Error
927
-     * @throws DomainException
928
-     * @throws UnexpectedEntityException
929
-     */
930
-    public function spaces_remaining_for_sale()
931
-    {
932
-        return $this->total_available_spaces(true);
933
-    }
934
-
935
-
936
-
937
-    /**
938
-     * This returns the total spaces available for an event
939
-     * while considering all the qtys on the tickets and the reg limits
940
-     * on the datetimes attached to this event.
941
-     *
942
-     * @param   bool $consider_sold Whether to consider any tickets that have already sold in our calculation.
943
-     *                              If this is false, then we return the most tickets that could ever be sold
944
-     *                              for this event with the datetime and tickets setup on the event under optimal
945
-     *                              selling conditions.  Otherwise we return a live calculation of spaces available
946
-     *                              based on tickets sold.  Depending on setup and stage of sales, this
947
-     *                              may appear to equal remaining tickets.  However, the more tickets are
948
-     *                              sold out, the more accurate the "live" total is.
949
-     * @return float|int
950
-     * @throws EE_Error
951
-     * @throws DomainException
952
-     * @throws UnexpectedEntityException
953
-     */
954
-    public function total_available_spaces($consider_sold = false)
955
-    {
956
-        $spaces_available = $consider_sold
957
-            ? $this->getAvailableSpacesCalculator()->spacesRemaining()
958
-            : $this->getAvailableSpacesCalculator()->totalSpacesAvailable();
959
-        return apply_filters(
960
-            'FHEE_EE_Event__total_available_spaces__spaces_available',
961
-            $spaces_available,
962
-            $this,
963
-            $this->getAvailableSpacesCalculator()->getDatetimes(),
964
-            $this->getAvailableSpacesCalculator()->getActiveTickets()
965
-        );
966
-    }
967
-
968
-
969
-    /**
970
-     * Checks if the event is set to sold out
971
-     *
972
-     * @param  bool $actual whether or not to perform calculations to not only figure the
973
-     *                      actual status but also to flip the status if necessary to sold
974
-     *                      out If false, we just check the existing status of the event
975
-     * @return boolean
976
-     * @throws EE_Error
977
-     */
978
-    public function is_sold_out($actual = false)
979
-    {
980
-        if (!$actual) {
981
-            return $this->status() === EEM_Event::sold_out;
982
-        }
983
-        return $this->perform_sold_out_status_check();
984
-    }
985
-
986
-
987
-    /**
988
-     * Checks if the event is marked as postponed
989
-     *
990
-     * @return boolean
991
-     */
992
-    public function is_postponed()
993
-    {
994
-        return $this->status() === EEM_Event::postponed;
995
-    }
996
-
997
-
998
-    /**
999
-     * Checks if the event is marked as cancelled
1000
-     *
1001
-     * @return boolean
1002
-     */
1003
-    public function is_cancelled()
1004
-    {
1005
-        return $this->status() === EEM_Event::cancelled;
1006
-    }
1007
-
1008
-
1009
-    /**
1010
-     * Get the logical active status in a hierarchical order for all the datetimes.  Note
1011
-     * Basically, we order the datetimes by EVT_start_date.  Then first test on whether the event is published.  If its
1012
-     * NOT published then we test for whether its expired or not.  IF it IS published then we test first on whether an
1013
-     * event has any active dates.  If no active dates then we check for any upcoming dates.  If no upcoming dates then
1014
-     * the event is considered expired.
1015
-     * NOTE: this method does NOT calculate whether the datetimes are sold out when event is published.  Sold Out is a status
1016
-     * set on the EVENT when it is not published and thus is done
1017
-     *
1018
-     * @param bool $reset
1019
-     * @return bool | string - based on EE_Datetime active constants or FALSE if error.
1020
-     * @throws EE_Error
1021
-     */
1022
-    public function get_active_status($reset = false)
1023
-    {
1024
-        // if the active status has already been set, then just use that value (unless we are resetting it)
1025
-        if (!empty($this->_active_status) && !$reset) {
1026
-            return $this->_active_status;
1027
-        }
1028
-        //first check if event id is present on this object
1029
-        if (!$this->ID()) {
1030
-            return false;
1031
-        }
1032
-        $where_params_for_event = array(array('EVT_ID' => $this->ID()));
1033
-        //if event is published:
1034
-        if ($this->status() === 'publish') {
1035
-            //active?
1036
-            if (EEM_Datetime::instance()->get_datetime_count_for_status(EE_Datetime::active, $where_params_for_event) > 0) {
1037
-                $this->_active_status = EE_Datetime::active;
1038
-            } else {
1039
-                //upcoming?
1040
-                if (EEM_Datetime::instance()->get_datetime_count_for_status(EE_Datetime::upcoming, $where_params_for_event) > 0) {
1041
-                    $this->_active_status = EE_Datetime::upcoming;
1042
-                } else {
1043
-                    //expired?
1044
-                    if (
1045
-                        EEM_Datetime::instance()->get_datetime_count_for_status(EE_Datetime::expired, $where_params_for_event) > 0
1046
-                    ) {
1047
-                        $this->_active_status = EE_Datetime::expired;
1048
-                    } else {
1049
-                        //it would be odd if things make it this far because it basically means there are no datetime's
1050
-                        //attached to the event.  So in this case it will just be considered inactive.
1051
-                        $this->_active_status = EE_Datetime::inactive;
1052
-                    }
1053
-                }
1054
-            }
1055
-        } else {
1056
-            //the event is not published, so let's just set it's active status according to its' post status
1057
-            switch ($this->status()) {
1058
-                case EEM_Event::sold_out :
1059
-                    $this->_active_status = EE_Datetime::sold_out;
1060
-                    break;
1061
-                case EEM_Event::cancelled :
1062
-                    $this->_active_status = EE_Datetime::cancelled;
1063
-                    break;
1064
-                case EEM_Event::postponed :
1065
-                    $this->_active_status = EE_Datetime::postponed;
1066
-                    break;
1067
-                default :
1068
-                    $this->_active_status = EE_Datetime::inactive;
1069
-            }
1070
-        }
1071
-        return $this->_active_status;
1072
-    }
1073
-
1074
-
1075
-    /**
1076
-     *    pretty_active_status
1077
-     *
1078
-     * @access public
1079
-     * @param boolean $echo whether to return (FALSE), or echo out the result (TRUE)
1080
-     * @return mixed void|string
1081
-     * @throws EE_Error
1082
-     */
1083
-    public function pretty_active_status($echo = true)
1084
-    {
1085
-        $active_status = $this->get_active_status();
1086
-        $status = '<span class="ee-status event-active-status-'
1087
-            . $active_status
1088
-            . '">'
1089
-            . EEH_Template::pretty_status($active_status, false, 'sentence')
1090
-            . '</span>';
1091
-        if ($echo) {
1092
-            echo $status;
1093
-            return '';
1094
-        }
1095
-        return $status;
1096
-    }
1097
-
1098
-
1099
-    /**
1100
-     * @return bool|int
1101
-     * @throws EE_Error
1102
-     */
1103
-    public function get_number_of_tickets_sold()
1104
-    {
1105
-        $tkt_sold = 0;
1106
-        if (!$this->ID()) {
1107
-            return 0;
1108
-        }
1109
-        $datetimes = $this->datetimes();
1110
-        foreach ($datetimes as $datetime) {
1111
-            if ($datetime instanceof EE_Datetime) {
1112
-                $tkt_sold += $datetime->sold();
1113
-            }
1114
-        }
1115
-        return $tkt_sold;
1116
-    }
1117
-
1118
-
1119
-    /**
1120
-     * This just returns a count of all the registrations for this event
1121
-     *
1122
-     * @access  public
1123
-     * @return int
1124
-     * @throws EE_Error
1125
-     */
1126
-    public function get_count_of_all_registrations()
1127
-    {
1128
-        return EEM_Event::instance()->count_related($this, 'Registration');
1129
-    }
1130
-
1131
-
1132
-    /**
1133
-     * This returns the ticket with the earliest start time that is
1134
-     * available for this event (across all datetimes attached to the event)
1135
-     *
1136
-     * @return EE_Base_Class|EE_Ticket|null
1137
-     * @throws EE_Error
1138
-     */
1139
-    public function get_ticket_with_earliest_start_time()
1140
-    {
1141
-        $where['Datetime.EVT_ID'] = $this->ID();
1142
-        $query_params = array($where, 'order_by' => array('TKT_start_date' => 'ASC'));
1143
-        return EE_Registry::instance()->load_model('Ticket')->get_one($query_params);
1144
-    }
1145
-
1146
-
1147
-    /**
1148
-     * This returns the ticket with the latest end time that is available
1149
-     * for this event (across all datetimes attached to the event)
1150
-     *
1151
-     * @return EE_Base_Class|EE_Ticket|null
1152
-     * @throws EE_Error
1153
-     */
1154
-    public function get_ticket_with_latest_end_time()
1155
-    {
1156
-        $where['Datetime.EVT_ID'] = $this->ID();
1157
-        $query_params = array($where, 'order_by' => array('TKT_end_date' => 'DESC'));
1158
-        return EE_Registry::instance()->load_model('Ticket')->get_one($query_params);
1159
-    }
1160
-
1161
-
1162
-    /**
1163
-     * This returns whether there are any tickets on sale for this event.
1164
-     *
1165
-     * @return bool true = YES tickets on sale.
1166
-     * @throws EE_Error
1167
-     */
1168
-    public function tickets_on_sale()
1169
-    {
1170
-        $earliest_ticket = $this->get_ticket_with_earliest_start_time();
1171
-        $latest_ticket = $this->get_ticket_with_latest_end_time();
1172
-        if (!$latest_ticket instanceof EE_Ticket && !$earliest_ticket instanceof EE_Ticket) {
1173
-            return false;
1174
-        }
1175
-        //check on sale for these two tickets.
1176
-        if ($latest_ticket->is_on_sale() || $earliest_ticket->is_on_sale()) {
1177
-            return true;
1178
-        }
1179
-        return false;
1180
-    }
1181
-
1182
-
1183
-    /**
1184
-     * Gets the URL for viewing this event on the front-end. Overrides parent
1185
-     * to check for an external URL first
1186
-     *
1187
-     * @return string
1188
-     * @throws EE_Error
1189
-     */
1190
-    public function get_permalink()
1191
-    {
1192
-        if ($this->external_url()) {
1193
-            return $this->external_url();
1194
-        }
1195
-        return parent::get_permalink();
1196
-    }
1197
-
1198
-
1199
-    /**
1200
-     * Gets the first term for 'espresso_event_categories' we can find
1201
-     *
1202
-     * @param array $query_params like EEM_Base::get_all
1203
-     * @return EE_Base_Class|EE_Term|null
1204
-     * @throws EE_Error
1205
-     */
1206
-    public function first_event_category($query_params = array())
1207
-    {
1208
-        $query_params[0]['Term_Taxonomy.taxonomy'] = 'espresso_event_categories';
1209
-        $query_params[0]['Term_Taxonomy.Event.EVT_ID'] = $this->ID();
1210
-        return EEM_Term::instance()->get_one($query_params);
1211
-    }
1212
-
1213
-
1214
-    /**
1215
-     * Gets all terms for 'espresso_event_categories' we can find
1216
-     *
1217
-     * @param array $query_params
1218
-     * @return EE_Base_Class[]|EE_Term[]
1219
-     * @throws EE_Error
1220
-     */
1221
-    public function get_all_event_categories($query_params = array())
1222
-    {
1223
-        $query_params[0]['Term_Taxonomy.taxonomy'] = 'espresso_event_categories';
1224
-        $query_params[0]['Term_Taxonomy.Event.EVT_ID'] = $this->ID();
1225
-        return EEM_Term::instance()->get_all($query_params);
1226
-    }
1227
-
1228
-
1229
-    /**
1230
-     * Gets all the question groups, ordering them by QSG_order ascending
1231
-     *
1232
-     * @param array $query_params @see EEM_Base::get_all
1233
-     * @return EE_Base_Class[]|EE_Question_Group[]
1234
-     * @throws EE_Error
1235
-     */
1236
-    public function question_groups($query_params = array())
1237
-    {
1238
-        $query_params = !empty($query_params) ? $query_params : array('order_by' => array('QSG_order' => 'ASC'));
1239
-        return $this->get_many_related('Question_Group', $query_params);
1240
-    }
1241
-
1242
-
1243
-    /**
1244
-     * Implementation for EEI_Has_Icon interface method.
1245
-     *
1246
-     * @see EEI_Visual_Representation for comments
1247
-     * @return string
1248
-     */
1249
-    public function get_icon()
1250
-    {
1251
-        return '<span class="dashicons dashicons-flag"></span>';
1252
-    }
1253
-
1254
-
1255
-    /**
1256
-     * Implementation for EEI_Admin_Links interface method.
1257
-     *
1258
-     * @see EEI_Admin_Links for comments
1259
-     * @return string
1260
-     * @throws EE_Error
1261
-     */
1262
-    public function get_admin_details_link()
1263
-    {
1264
-        return $this->get_admin_edit_link();
1265
-    }
1266
-
1267
-
1268
-    /**
1269
-     * Implementation for EEI_Admin_Links interface method.
1270
-     *
1271
-     * @see EEI_Admin_Links for comments
1272
-     * @return string
1273
-     * @throws EE_Error
1274
-     */
1275
-    public function get_admin_edit_link()
1276
-    {
1277
-        return EEH_URL::add_query_args_and_nonce(array(
1278
-            'page' => 'espresso_events',
1279
-            'action' => 'edit',
1280
-            'post' => $this->ID(),
1281
-        ),
1282
-            admin_url('admin.php')
1283
-        );
1284
-    }
1285
-
1286
-
1287
-    /**
1288
-     * Implementation for EEI_Admin_Links interface method.
1289
-     *
1290
-     * @see EEI_Admin_Links for comments
1291
-     * @return string
1292
-     */
1293
-    public function get_admin_settings_link()
1294
-    {
1295
-        return EEH_URL::add_query_args_and_nonce(array(
1296
-            'page' => 'espresso_events',
1297
-            'action' => 'default_event_settings',
1298
-        ),
1299
-            admin_url('admin.php')
1300
-        );
1301
-    }
1302
-
1303
-
1304
-    /**
1305
-     * Implementation for EEI_Admin_Links interface method.
1306
-     *
1307
-     * @see EEI_Admin_Links for comments
1308
-     * @return string
1309
-     */
1310
-    public function get_admin_overview_link()
1311
-    {
1312
-        return EEH_URL::add_query_args_and_nonce(array(
1313
-            'page' => 'espresso_events',
1314
-            'action' => 'default',
1315
-        ),
1316
-            admin_url('admin.php')
1317
-        );
1318
-    }
21
+	/**
22
+	 * cached value for the the logical active status for the event
23
+	 *
24
+	 * @see get_active_status()
25
+	 * @var string
26
+	 */
27
+	protected $_active_status = '';
28
+
29
+	/**
30
+	 * This is just used for caching the Primary Datetime for the Event on initial retrieval
31
+	 *
32
+	 * @var EE_Datetime
33
+	 */
34
+	protected $_Primary_Datetime;
35
+
36
+	/**
37
+	 * @var EventSpacesCalculator $available_spaces_calculator
38
+	 */
39
+	protected $available_spaces_calculator;
40
+
41
+
42
+	/**
43
+	 * @param array $props_n_values incoming values
44
+	 * @param string $timezone incoming timezone (if not set the timezone set for the website will be
45
+	 *                                        used.)
46
+	 * @param array $date_formats incoming date_formats in an array where the first value is the
47
+	 *                                        date_format and the second value is the time format
48
+	 * @return EE_Event
49
+	 * @throws EE_Error
50
+	 */
51
+	public static function new_instance($props_n_values = array(), $timezone = null, $date_formats = array())
52
+	{
53
+		$has_object = parent::_check_for_object($props_n_values, __CLASS__, $timezone, $date_formats);
54
+		return $has_object ? $has_object : new self($props_n_values, false, $timezone, $date_formats);
55
+	}
56
+
57
+
58
+	/**
59
+	 * @param array $props_n_values incoming values from the database
60
+	 * @param string $timezone incoming timezone as set by the model.  If not set the timezone for
61
+	 *                                the website will be used.
62
+	 * @return EE_Event
63
+	 * @throws EE_Error
64
+	 */
65
+	public static function new_instance_from_db($props_n_values = array(), $timezone = null)
66
+	{
67
+		return new self($props_n_values, true, $timezone);
68
+	}
69
+
70
+
71
+
72
+	/**
73
+	 * @return EventSpacesCalculator
74
+	 * @throws \EE_Error
75
+	 */
76
+	public function getAvailableSpacesCalculator()
77
+	{
78
+		if(! $this->available_spaces_calculator instanceof EventSpacesCalculator){
79
+			$this->available_spaces_calculator = new EventSpacesCalculator($this);
80
+		}
81
+		return $this->available_spaces_calculator;
82
+	}
83
+
84
+
85
+
86
+	/**
87
+	 * Overrides parent set() method so that all calls to set( 'status', $status ) can be routed to internal methods
88
+	 *
89
+	 * @param string $field_name
90
+	 * @param mixed $field_value
91
+	 * @param bool $use_default
92
+	 * @throws EE_Error
93
+	 */
94
+	public function set($field_name, $field_value, $use_default = false)
95
+	{
96
+		switch ($field_name) {
97
+			case 'status' :
98
+				$this->set_status($field_value, $use_default);
99
+				break;
100
+			default :
101
+				parent::set($field_name, $field_value, $use_default);
102
+		}
103
+	}
104
+
105
+
106
+	/**
107
+	 *    set_status
108
+	 * Checks if event status is being changed to SOLD OUT
109
+	 * and updates event meta data with previous event status
110
+	 * so that we can revert things if/when the event is no longer sold out
111
+	 *
112
+	 * @access public
113
+	 * @param string $new_status
114
+	 * @param bool $use_default
115
+	 * @return void
116
+	 * @throws EE_Error
117
+	 */
118
+	public function set_status($new_status = null, $use_default = false)
119
+	{
120
+		// if nothing is set, and we aren't explicitly wanting to reset the status, then just leave
121
+		if (empty($new_status) && !$use_default) {
122
+			return;
123
+		}
124
+		// get current Event status
125
+		$old_status = $this->status();
126
+		// if status has changed
127
+		if ($old_status !== $new_status) {
128
+			// TO sold_out
129
+			if ($new_status === EEM_Event::sold_out) {
130
+				// save the previous event status so that we can revert if the event is no longer sold out
131
+				$this->add_post_meta('_previous_event_status', $old_status);
132
+				do_action('AHEE__EE_Event__set_status__to_sold_out', $this, $old_status, $new_status);
133
+				// OR FROM  sold_out
134
+			} else if ($old_status === EEM_Event::sold_out) {
135
+				$this->delete_post_meta('_previous_event_status');
136
+				do_action('AHEE__EE_Event__set_status__from_sold_out', $this, $old_status, $new_status);
137
+			}
138
+			//clear out the active status so that it gets reset the next time it is requested
139
+			$this->_active_status = null;
140
+			// update status
141
+			parent::set('status', $new_status, $use_default);
142
+			do_action('AHEE__EE_Event__set_status__after_update', $this);
143
+			return;
144
+		}
145
+		// even though the old value matches the new value, it's still good to
146
+		// allow the parent set method to have a say
147
+		parent::set('status', $new_status, $use_default);
148
+	}
149
+
150
+
151
+	/**
152
+	 * Gets all the datetimes for this event
153
+	 *
154
+	 * @param array $query_params like EEM_Base::get_all
155
+	 * @return EE_Base_Class[]|EE_Datetime[]
156
+	 * @throws EE_Error
157
+	 */
158
+	public function datetimes($query_params = array())
159
+	{
160
+		return $this->get_many_related('Datetime', $query_params);
161
+	}
162
+
163
+
164
+	/**
165
+	 * Gets all the datetimes for this event, ordered by DTT_EVT_start in ascending order
166
+	 *
167
+	 * @return EE_Base_Class[]|EE_Datetime[]
168
+	 * @throws EE_Error
169
+	 */
170
+	public function datetimes_in_chronological_order()
171
+	{
172
+		return $this->get_many_related('Datetime', array('order_by' => array('DTT_EVT_start' => 'ASC')));
173
+	}
174
+
175
+
176
+	/**
177
+	 * Gets all the datetimes for this event, ordered by the DTT_order on the datetime.
178
+	 * @darren, we should probably UNSET timezone on the EEM_Datetime model
179
+	 * after running our query, so that this timezone isn't set for EVERY query
180
+	 * on EEM_Datetime for the rest of the request, no?
181
+	 *
182
+	 * @param boolean $show_expired whether or not to include expired events
183
+	 * @param boolean $show_deleted whether or not to include deleted events
184
+	 * @param null $limit
185
+	 * @return EE_Datetime[]
186
+	 * @throws EE_Error
187
+	 */
188
+	public function datetimes_ordered($show_expired = true, $show_deleted = false, $limit = null)
189
+	{
190
+		return EEM_Datetime::instance($this->_timezone)->get_datetimes_for_event_ordered_by_DTT_order(
191
+			$this->ID(),
192
+			$show_expired,
193
+			$show_deleted,
194
+			$limit
195
+		);
196
+	}
197
+
198
+
199
+	/**
200
+	 * Returns one related datetime. Mostly only used by some legacy code.
201
+	 *
202
+	 * @return EE_Base_Class|EE_Datetime
203
+	 * @throws EE_Error
204
+	 */
205
+	public function first_datetime()
206
+	{
207
+		return $this->get_first_related('Datetime');
208
+	}
209
+
210
+
211
+	/**
212
+	 * Returns the 'primary' datetime for the event
213
+	 *
214
+	 * @param bool $try_to_exclude_expired
215
+	 * @param bool $try_to_exclude_deleted
216
+	 * @return EE_Datetime
217
+	 * @throws EE_Error
218
+	 */
219
+	public function primary_datetime($try_to_exclude_expired = true, $try_to_exclude_deleted = true)
220
+	{
221
+		if (!empty ($this->_Primary_Datetime)) {
222
+			return $this->_Primary_Datetime;
223
+		}
224
+		$this->_Primary_Datetime = EEM_Datetime::instance($this->_timezone)->get_primary_datetime_for_event(
225
+			$this->ID(),
226
+			$try_to_exclude_expired,
227
+			$try_to_exclude_deleted
228
+		);
229
+		return $this->_Primary_Datetime;
230
+	}
231
+
232
+
233
+	/**
234
+	 * Gets all the tickets available for purchase of this event
235
+	 *
236
+	 * @param array $query_params like EEM_Base::get_all
237
+	 * @return EE_Base_Class[]|EE_Ticket[]
238
+	 * @throws EE_Error
239
+	 */
240
+	public function tickets($query_params = array())
241
+	{
242
+		//first get all datetimes
243
+		$datetimes = $this->datetimes_ordered();
244
+		if (!$datetimes) {
245
+			return array();
246
+		}
247
+		$datetime_ids = array();
248
+		foreach ($datetimes as $datetime) {
249
+			$datetime_ids[] = $datetime->ID();
250
+		}
251
+		$where_params = array('Datetime.DTT_ID' => array('IN', $datetime_ids));
252
+		//if incoming $query_params has where conditions let's merge but not override existing.
253
+		if (is_array($query_params) && isset($query_params[0])) {
254
+			$where_params = array_merge($query_params[0], $where_params);
255
+			unset($query_params[0]);
256
+		}
257
+		//now add $where_params to $query_params
258
+		$query_params[0] = $where_params;
259
+		return EEM_Ticket::instance()->get_all($query_params);
260
+	}
261
+
262
+
263
+	/**
264
+	 * get all unexpired untrashed tickets
265
+	 *
266
+	 * @return EE_Ticket[]
267
+	 * @throws EE_Error
268
+	 */
269
+	public function active_tickets()
270
+	{
271
+		return $this->tickets(array(
272
+			array(
273
+				'TKT_end_date' => array('>=', EEM_Ticket::instance()->current_time_for_query('TKT_end_date')),
274
+				'TKT_deleted' => false,
275
+			),
276
+		));
277
+	}
278
+
279
+
280
+	/**
281
+	 * @return bool
282
+	 * @throws EE_Error
283
+	 */
284
+	public function additional_limit()
285
+	{
286
+		return $this->get('EVT_additional_limit');
287
+	}
288
+
289
+
290
+	/**
291
+	 * @return bool
292
+	 * @throws EE_Error
293
+	 */
294
+	public function allow_overflow()
295
+	{
296
+		return $this->get('EVT_allow_overflow');
297
+	}
298
+
299
+
300
+	/**
301
+	 * @return bool
302
+	 * @throws EE_Error
303
+	 */
304
+	public function created()
305
+	{
306
+		return $this->get('EVT_created');
307
+	}
308
+
309
+
310
+	/**
311
+	 * @return bool
312
+	 * @throws EE_Error
313
+	 */
314
+	public function description()
315
+	{
316
+		return $this->get('EVT_desc');
317
+	}
318
+
319
+
320
+	/**
321
+	 * Runs do_shortcode and wpautop on the description
322
+	 *
323
+	 * @return string of html
324
+	 * @throws EE_Error
325
+	 */
326
+	public function description_filtered()
327
+	{
328
+		return $this->get_pretty('EVT_desc');
329
+	}
330
+
331
+
332
+	/**
333
+	 * @return bool
334
+	 * @throws EE_Error
335
+	 */
336
+	public function display_description()
337
+	{
338
+		return $this->get('EVT_display_desc');
339
+	}
340
+
341
+
342
+	/**
343
+	 * @return bool
344
+	 * @throws EE_Error
345
+	 */
346
+	public function display_ticket_selector()
347
+	{
348
+		return (bool)$this->get('EVT_display_ticket_selector');
349
+	}
350
+
351
+
352
+	/**
353
+	 * @return bool
354
+	 * @throws EE_Error
355
+	 */
356
+	public function external_url()
357
+	{
358
+		return $this->get('EVT_external_URL');
359
+	}
360
+
361
+
362
+	/**
363
+	 * @return bool
364
+	 * @throws EE_Error
365
+	 */
366
+	public function member_only()
367
+	{
368
+		return $this->get('EVT_member_only');
369
+	}
370
+
371
+
372
+	/**
373
+	 * @return bool
374
+	 * @throws EE_Error
375
+	 */
376
+	public function phone()
377
+	{
378
+		return $this->get('EVT_phone');
379
+	}
380
+
381
+
382
+	/**
383
+	 * @return bool
384
+	 * @throws EE_Error
385
+	 */
386
+	public function modified()
387
+	{
388
+		return $this->get('EVT_modified');
389
+	}
390
+
391
+
392
+	/**
393
+	 * @return bool
394
+	 * @throws EE_Error
395
+	 */
396
+	public function name()
397
+	{
398
+		return $this->get('EVT_name');
399
+	}
400
+
401
+
402
+	/**
403
+	 * @return bool
404
+	 * @throws EE_Error
405
+	 */
406
+	public function order()
407
+	{
408
+		return $this->get('EVT_order');
409
+	}
410
+
411
+
412
+	/**
413
+	 * @return bool|string
414
+	 * @throws EE_Error
415
+	 */
416
+	public function default_registration_status()
417
+	{
418
+		$event_default_registration_status = $this->get('EVT_default_registration_status');
419
+		return !empty($event_default_registration_status)
420
+			? $event_default_registration_status
421
+			: EE_Registry::instance()->CFG->registration->default_STS_ID;
422
+	}
423
+
424
+
425
+	/**
426
+	 * @param int $num_words
427
+	 * @param null $more
428
+	 * @param bool $not_full_desc
429
+	 * @return bool|string
430
+	 * @throws EE_Error
431
+	 */
432
+	public function short_description($num_words = 55, $more = null, $not_full_desc = false)
433
+	{
434
+		$short_desc = $this->get('EVT_short_desc');
435
+		if (!empty($short_desc) || $not_full_desc) {
436
+			return $short_desc;
437
+		}
438
+		$full_desc = $this->get('EVT_desc');
439
+		return wp_trim_words($full_desc, $num_words, $more);
440
+	}
441
+
442
+
443
+	/**
444
+	 * @return bool
445
+	 * @throws EE_Error
446
+	 */
447
+	public function slug()
448
+	{
449
+		return $this->get('EVT_slug');
450
+	}
451
+
452
+
453
+	/**
454
+	 * @return bool
455
+	 * @throws EE_Error
456
+	 */
457
+	public function timezone_string()
458
+	{
459
+		return $this->get('EVT_timezone_string');
460
+	}
461
+
462
+
463
+	/**
464
+	 * @return bool
465
+	 * @throws EE_Error
466
+	 */
467
+	public function visible_on()
468
+	{
469
+		return $this->get('EVT_visible_on');
470
+	}
471
+
472
+
473
+	/**
474
+	 * @return int
475
+	 * @throws EE_Error
476
+	 */
477
+	public function wp_user()
478
+	{
479
+		return $this->get('EVT_wp_user');
480
+	}
481
+
482
+
483
+	/**
484
+	 * @return bool
485
+	 * @throws EE_Error
486
+	 */
487
+	public function donations()
488
+	{
489
+		return $this->get('EVT_donations');
490
+	}
491
+
492
+
493
+	/**
494
+	 * @param $limit
495
+	 * @throws EE_Error
496
+	 */
497
+	public function set_additional_limit($limit)
498
+	{
499
+		$this->set('EVT_additional_limit', $limit);
500
+	}
501
+
502
+
503
+	/**
504
+	 * @param $created
505
+	 * @throws EE_Error
506
+	 */
507
+	public function set_created($created)
508
+	{
509
+		$this->set('EVT_created', $created);
510
+	}
511
+
512
+
513
+	/**
514
+	 * @param $desc
515
+	 * @throws EE_Error
516
+	 */
517
+	public function set_description($desc)
518
+	{
519
+		$this->set('EVT_desc', $desc);
520
+	}
521
+
522
+
523
+	/**
524
+	 * @param $display_desc
525
+	 * @throws EE_Error
526
+	 */
527
+	public function set_display_description($display_desc)
528
+	{
529
+		$this->set('EVT_display_desc', $display_desc);
530
+	}
531
+
532
+
533
+	/**
534
+	 * @param $display_ticket_selector
535
+	 * @throws EE_Error
536
+	 */
537
+	public function set_display_ticket_selector($display_ticket_selector)
538
+	{
539
+		$this->set('EVT_display_ticket_selector', $display_ticket_selector);
540
+	}
541
+
542
+
543
+	/**
544
+	 * @param $external_url
545
+	 * @throws EE_Error
546
+	 */
547
+	public function set_external_url($external_url)
548
+	{
549
+		$this->set('EVT_external_URL', $external_url);
550
+	}
551
+
552
+
553
+	/**
554
+	 * @param $member_only
555
+	 * @throws EE_Error
556
+	 */
557
+	public function set_member_only($member_only)
558
+	{
559
+		$this->set('EVT_member_only', $member_only);
560
+	}
561
+
562
+
563
+	/**
564
+	 * @param $event_phone
565
+	 * @throws EE_Error
566
+	 */
567
+	public function set_event_phone($event_phone)
568
+	{
569
+		$this->set('EVT_phone', $event_phone);
570
+	}
571
+
572
+
573
+	/**
574
+	 * @param $modified
575
+	 * @throws EE_Error
576
+	 */
577
+	public function set_modified($modified)
578
+	{
579
+		$this->set('EVT_modified', $modified);
580
+	}
581
+
582
+
583
+	/**
584
+	 * @param $name
585
+	 * @throws EE_Error
586
+	 */
587
+	public function set_name($name)
588
+	{
589
+		$this->set('EVT_name', $name);
590
+	}
591
+
592
+
593
+	/**
594
+	 * @param $order
595
+	 * @throws EE_Error
596
+	 */
597
+	public function set_order($order)
598
+	{
599
+		$this->set('EVT_order', $order);
600
+	}
601
+
602
+
603
+	/**
604
+	 * @param $short_desc
605
+	 * @throws EE_Error
606
+	 */
607
+	public function set_short_description($short_desc)
608
+	{
609
+		$this->set('EVT_short_desc', $short_desc);
610
+	}
611
+
612
+
613
+	/**
614
+	 * @param $slug
615
+	 * @throws EE_Error
616
+	 */
617
+	public function set_slug($slug)
618
+	{
619
+		$this->set('EVT_slug', $slug);
620
+	}
621
+
622
+
623
+	/**
624
+	 * @param $timezone_string
625
+	 * @throws EE_Error
626
+	 */
627
+	public function set_timezone_string($timezone_string)
628
+	{
629
+		$this->set('EVT_timezone_string', $timezone_string);
630
+	}
631
+
632
+
633
+	/**
634
+	 * @param $visible_on
635
+	 * @throws EE_Error
636
+	 */
637
+	public function set_visible_on($visible_on)
638
+	{
639
+		$this->set('EVT_visible_on', $visible_on);
640
+	}
641
+
642
+
643
+	/**
644
+	 * @param $wp_user
645
+	 * @throws EE_Error
646
+	 */
647
+	public function set_wp_user($wp_user)
648
+	{
649
+		$this->set('EVT_wp_user', $wp_user);
650
+	}
651
+
652
+
653
+	/**
654
+	 * @param $default_registration_status
655
+	 * @throws EE_Error
656
+	 */
657
+	public function set_default_registration_status($default_registration_status)
658
+	{
659
+		$this->set('EVT_default_registration_status', $default_registration_status);
660
+	}
661
+
662
+
663
+	/**
664
+	 * @param $donations
665
+	 * @throws EE_Error
666
+	 */
667
+	public function set_donations($donations)
668
+	{
669
+		$this->set('EVT_donations', $donations);
670
+	}
671
+
672
+
673
+	/**
674
+	 * Adds a venue to this event
675
+	 *
676
+	 * @param EE_Venue /int $venue_id_or_obj
677
+	 * @return EE_Base_Class|EE_Venue
678
+	 * @throws EE_Error
679
+	 */
680
+	public function add_venue($venue_id_or_obj)
681
+	{
682
+		return $this->_add_relation_to($venue_id_or_obj, 'Venue');
683
+	}
684
+
685
+
686
+	/**
687
+	 * Removes a venue from the event
688
+	 *
689
+	 * @param EE_Venue /int $venue_id_or_obj
690
+	 * @return EE_Base_Class|EE_Venue
691
+	 * @throws EE_Error
692
+	 */
693
+	public function remove_venue($venue_id_or_obj)
694
+	{
695
+		return $this->_remove_relation_to($venue_id_or_obj, 'Venue');
696
+	}
697
+
698
+
699
+	/**
700
+	 * Gets all the venues related ot the event. May provide additional $query_params if desired
701
+	 *
702
+	 * @param array $query_params like EEM_Base::get_all's $query_params
703
+	 * @return EE_Base_Class[]|EE_Venue[]
704
+	 * @throws EE_Error
705
+	 */
706
+	public function venues($query_params = array())
707
+	{
708
+		return $this->get_many_related('Venue', $query_params);
709
+	}
710
+
711
+
712
+	/**
713
+	 * check if event id is present and if event is published
714
+	 *
715
+	 * @access public
716
+	 * @return boolean true yes, false no
717
+	 * @throws EE_Error
718
+	 */
719
+	private function _has_ID_and_is_published()
720
+	{
721
+		// first check if event id is present and not NULL,
722
+		// then check if this event is published (or any of the equivalent "published" statuses)
723
+		return
724
+			$this->ID() && $this->ID() !== null
725
+			&& (
726
+				$this->status() === 'publish'
727
+				|| $this->status() === EEM_Event::sold_out
728
+				|| $this->status() === EEM_Event::postponed
729
+				|| $this->status() === EEM_Event::cancelled
730
+			);
731
+	}
732
+
733
+
734
+	/**
735
+	 * This simply compares the internal dates with NOW and determines if the event is upcoming or not.
736
+	 *
737
+	 * @access public
738
+	 * @return boolean true yes, false no
739
+	 * @throws EE_Error
740
+	 */
741
+	public function is_upcoming()
742
+	{
743
+		// check if event id is present and if this event is published
744
+		if ($this->is_inactive()) {
745
+			return false;
746
+		}
747
+		// set initial value
748
+		$upcoming = false;
749
+		//next let's get all datetimes and loop through them
750
+		$datetimes = $this->datetimes_in_chronological_order();
751
+		foreach ($datetimes as $datetime) {
752
+			if ($datetime instanceof EE_Datetime) {
753
+				//if this dtt is expired then we continue cause one of the other datetimes might be upcoming.
754
+				if ($datetime->is_expired()) {
755
+					continue;
756
+				}
757
+				//if this dtt is active then we return false.
758
+				if ($datetime->is_active()) {
759
+					return false;
760
+				}
761
+				//otherwise let's check upcoming status
762
+				$upcoming = $datetime->is_upcoming();
763
+			}
764
+		}
765
+		return $upcoming;
766
+	}
767
+
768
+
769
+	/**
770
+	 * @return bool
771
+	 * @throws EE_Error
772
+	 */
773
+	public function is_active()
774
+	{
775
+		// check if event id is present and if this event is published
776
+		if ($this->is_inactive()) {
777
+			return false;
778
+		}
779
+		// set initial value
780
+		$active = false;
781
+		//next let's get all datetimes and loop through them
782
+		$datetimes = $this->datetimes_in_chronological_order();
783
+		foreach ($datetimes as $datetime) {
784
+			if ($datetime instanceof EE_Datetime) {
785
+				//if this dtt is expired then we continue cause one of the other datetimes might be active.
786
+				if ($datetime->is_expired()) {
787
+					continue;
788
+				}
789
+				//if this dtt is upcoming then we return false.
790
+				if ($datetime->is_upcoming()) {
791
+					return false;
792
+				}
793
+				//otherwise let's check active status
794
+				$active = $datetime->is_active();
795
+			}
796
+		}
797
+		return $active;
798
+	}
799
+
800
+
801
+	/**
802
+	 * @return bool
803
+	 * @throws EE_Error
804
+	 */
805
+	public function is_expired()
806
+	{
807
+		// check if event id is present and if this event is published
808
+		if ($this->is_inactive()) {
809
+			return false;
810
+		}
811
+		// set initial value
812
+		$expired = false;
813
+		//first let's get all datetimes and loop through them
814
+		$datetimes = $this->datetimes_in_chronological_order();
815
+		foreach ($datetimes as $datetime) {
816
+			if ($datetime instanceof EE_Datetime) {
817
+				//if this dtt is upcoming or active then we return false.
818
+				if ($datetime->is_upcoming() || $datetime->is_active()) {
819
+					return false;
820
+				}
821
+				//otherwise let's check active status
822
+				$expired = $datetime->is_expired();
823
+			}
824
+		}
825
+		return $expired;
826
+	}
827
+
828
+
829
+	/**
830
+	 * @return bool
831
+	 * @throws EE_Error
832
+	 */
833
+	public function is_inactive()
834
+	{
835
+		// check if event id is present and if this event is published
836
+		if ($this->_has_ID_and_is_published()) {
837
+			return false;
838
+		}
839
+		return true;
840
+	}
841
+
842
+
843
+	/**
844
+	 * calculate spaces remaining based on "saleable" tickets
845
+	 *
846
+	 * @param array $tickets
847
+	 * @param bool $filtered
848
+	 * @return int|float
849
+	 * @throws EE_Error
850
+	 * @throws DomainException
851
+	 * @throws UnexpectedEntityException
852
+	 */
853
+	public function spaces_remaining($tickets = array(), $filtered = true)
854
+	{
855
+		$this->getAvailableSpacesCalculator()->setActiveTickets($tickets);
856
+		$spaces_remaining = $this->getAvailableSpacesCalculator()->spacesRemaining();
857
+		return $filtered
858
+			? apply_filters(
859
+				'FHEE_EE_Event__spaces_remaining',
860
+				$spaces_remaining,
861
+				$this,
862
+				$tickets
863
+			)
864
+			: $spaces_remaining;
865
+	}
866
+
867
+
868
+	/**
869
+	 *    perform_sold_out_status_check
870
+	 *    checks all of this events's datetime  reg_limit - sold values to determine if ANY datetimes have spaces available...
871
+	 *    if NOT, then the event status will get toggled to 'sold_out'
872
+	 *
873
+	 * @return bool    return the ACTUAL sold out state.
874
+	 * @throws EE_Error
875
+	 * @throws DomainException
876
+	 * @throws UnexpectedEntityException
877
+	 */
878
+	public function perform_sold_out_status_check()
879
+	{
880
+		// get all unexpired untrashed tickets
881
+		$tickets = $this->tickets(
882
+			array(
883
+				array('TKT_deleted' => false),
884
+				'order_by' => array('TKT_qty' => 'ASC'),
885
+			)
886
+		);
887
+		$all_expired = true;
888
+		foreach ($tickets as $ticket) {
889
+			if(!$ticket->is_expired()){
890
+				$all_expired = false;
891
+				break;
892
+			}
893
+		}
894
+		// if all the tickets are just expired, then don't update the event status to sold out
895
+		if ($all_expired) {
896
+			return true;
897
+		}
898
+		$spaces_remaining = $this->spaces_remaining($tickets);
899
+		if ($spaces_remaining < 1) {
900
+			$this->set_status(EEM_Event::sold_out);
901
+			$this->save();
902
+			$sold_out = true;
903
+		} else {
904
+			$sold_out = false;
905
+			// was event previously marked as sold out ?
906
+			if ($this->status() === EEM_Event::sold_out) {
907
+				// revert status to previous value, if it was set
908
+				$previous_event_status = $this->get_post_meta('_previous_event_status', true);
909
+				if ($previous_event_status) {
910
+					$this->set_status($previous_event_status);
911
+					$this->save();
912
+				}
913
+			}
914
+		}
915
+		do_action('AHEE__EE_Event__perform_sold_out_status_check__end', $this, $sold_out, $spaces_remaining, $tickets);
916
+		return $sold_out;
917
+	}
918
+
919
+
920
+
921
+	/**
922
+	 * This returns the total remaining spaces for sale on this event.
923
+	 *
924
+	 * @uses EE_Event::total_available_spaces()
925
+	 * @return float|int
926
+	 * @throws EE_Error
927
+	 * @throws DomainException
928
+	 * @throws UnexpectedEntityException
929
+	 */
930
+	public function spaces_remaining_for_sale()
931
+	{
932
+		return $this->total_available_spaces(true);
933
+	}
934
+
935
+
936
+
937
+	/**
938
+	 * This returns the total spaces available for an event
939
+	 * while considering all the qtys on the tickets and the reg limits
940
+	 * on the datetimes attached to this event.
941
+	 *
942
+	 * @param   bool $consider_sold Whether to consider any tickets that have already sold in our calculation.
943
+	 *                              If this is false, then we return the most tickets that could ever be sold
944
+	 *                              for this event with the datetime and tickets setup on the event under optimal
945
+	 *                              selling conditions.  Otherwise we return a live calculation of spaces available
946
+	 *                              based on tickets sold.  Depending on setup and stage of sales, this
947
+	 *                              may appear to equal remaining tickets.  However, the more tickets are
948
+	 *                              sold out, the more accurate the "live" total is.
949
+	 * @return float|int
950
+	 * @throws EE_Error
951
+	 * @throws DomainException
952
+	 * @throws UnexpectedEntityException
953
+	 */
954
+	public function total_available_spaces($consider_sold = false)
955
+	{
956
+		$spaces_available = $consider_sold
957
+			? $this->getAvailableSpacesCalculator()->spacesRemaining()
958
+			: $this->getAvailableSpacesCalculator()->totalSpacesAvailable();
959
+		return apply_filters(
960
+			'FHEE_EE_Event__total_available_spaces__spaces_available',
961
+			$spaces_available,
962
+			$this,
963
+			$this->getAvailableSpacesCalculator()->getDatetimes(),
964
+			$this->getAvailableSpacesCalculator()->getActiveTickets()
965
+		);
966
+	}
967
+
968
+
969
+	/**
970
+	 * Checks if the event is set to sold out
971
+	 *
972
+	 * @param  bool $actual whether or not to perform calculations to not only figure the
973
+	 *                      actual status but also to flip the status if necessary to sold
974
+	 *                      out If false, we just check the existing status of the event
975
+	 * @return boolean
976
+	 * @throws EE_Error
977
+	 */
978
+	public function is_sold_out($actual = false)
979
+	{
980
+		if (!$actual) {
981
+			return $this->status() === EEM_Event::sold_out;
982
+		}
983
+		return $this->perform_sold_out_status_check();
984
+	}
985
+
986
+
987
+	/**
988
+	 * Checks if the event is marked as postponed
989
+	 *
990
+	 * @return boolean
991
+	 */
992
+	public function is_postponed()
993
+	{
994
+		return $this->status() === EEM_Event::postponed;
995
+	}
996
+
997
+
998
+	/**
999
+	 * Checks if the event is marked as cancelled
1000
+	 *
1001
+	 * @return boolean
1002
+	 */
1003
+	public function is_cancelled()
1004
+	{
1005
+		return $this->status() === EEM_Event::cancelled;
1006
+	}
1007
+
1008
+
1009
+	/**
1010
+	 * Get the logical active status in a hierarchical order for all the datetimes.  Note
1011
+	 * Basically, we order the datetimes by EVT_start_date.  Then first test on whether the event is published.  If its
1012
+	 * NOT published then we test for whether its expired or not.  IF it IS published then we test first on whether an
1013
+	 * event has any active dates.  If no active dates then we check for any upcoming dates.  If no upcoming dates then
1014
+	 * the event is considered expired.
1015
+	 * NOTE: this method does NOT calculate whether the datetimes are sold out when event is published.  Sold Out is a status
1016
+	 * set on the EVENT when it is not published and thus is done
1017
+	 *
1018
+	 * @param bool $reset
1019
+	 * @return bool | string - based on EE_Datetime active constants or FALSE if error.
1020
+	 * @throws EE_Error
1021
+	 */
1022
+	public function get_active_status($reset = false)
1023
+	{
1024
+		// if the active status has already been set, then just use that value (unless we are resetting it)
1025
+		if (!empty($this->_active_status) && !$reset) {
1026
+			return $this->_active_status;
1027
+		}
1028
+		//first check if event id is present on this object
1029
+		if (!$this->ID()) {
1030
+			return false;
1031
+		}
1032
+		$where_params_for_event = array(array('EVT_ID' => $this->ID()));
1033
+		//if event is published:
1034
+		if ($this->status() === 'publish') {
1035
+			//active?
1036
+			if (EEM_Datetime::instance()->get_datetime_count_for_status(EE_Datetime::active, $where_params_for_event) > 0) {
1037
+				$this->_active_status = EE_Datetime::active;
1038
+			} else {
1039
+				//upcoming?
1040
+				if (EEM_Datetime::instance()->get_datetime_count_for_status(EE_Datetime::upcoming, $where_params_for_event) > 0) {
1041
+					$this->_active_status = EE_Datetime::upcoming;
1042
+				} else {
1043
+					//expired?
1044
+					if (
1045
+						EEM_Datetime::instance()->get_datetime_count_for_status(EE_Datetime::expired, $where_params_for_event) > 0
1046
+					) {
1047
+						$this->_active_status = EE_Datetime::expired;
1048
+					} else {
1049
+						//it would be odd if things make it this far because it basically means there are no datetime's
1050
+						//attached to the event.  So in this case it will just be considered inactive.
1051
+						$this->_active_status = EE_Datetime::inactive;
1052
+					}
1053
+				}
1054
+			}
1055
+		} else {
1056
+			//the event is not published, so let's just set it's active status according to its' post status
1057
+			switch ($this->status()) {
1058
+				case EEM_Event::sold_out :
1059
+					$this->_active_status = EE_Datetime::sold_out;
1060
+					break;
1061
+				case EEM_Event::cancelled :
1062
+					$this->_active_status = EE_Datetime::cancelled;
1063
+					break;
1064
+				case EEM_Event::postponed :
1065
+					$this->_active_status = EE_Datetime::postponed;
1066
+					break;
1067
+				default :
1068
+					$this->_active_status = EE_Datetime::inactive;
1069
+			}
1070
+		}
1071
+		return $this->_active_status;
1072
+	}
1073
+
1074
+
1075
+	/**
1076
+	 *    pretty_active_status
1077
+	 *
1078
+	 * @access public
1079
+	 * @param boolean $echo whether to return (FALSE), or echo out the result (TRUE)
1080
+	 * @return mixed void|string
1081
+	 * @throws EE_Error
1082
+	 */
1083
+	public function pretty_active_status($echo = true)
1084
+	{
1085
+		$active_status = $this->get_active_status();
1086
+		$status = '<span class="ee-status event-active-status-'
1087
+			. $active_status
1088
+			. '">'
1089
+			. EEH_Template::pretty_status($active_status, false, 'sentence')
1090
+			. '</span>';
1091
+		if ($echo) {
1092
+			echo $status;
1093
+			return '';
1094
+		}
1095
+		return $status;
1096
+	}
1097
+
1098
+
1099
+	/**
1100
+	 * @return bool|int
1101
+	 * @throws EE_Error
1102
+	 */
1103
+	public function get_number_of_tickets_sold()
1104
+	{
1105
+		$tkt_sold = 0;
1106
+		if (!$this->ID()) {
1107
+			return 0;
1108
+		}
1109
+		$datetimes = $this->datetimes();
1110
+		foreach ($datetimes as $datetime) {
1111
+			if ($datetime instanceof EE_Datetime) {
1112
+				$tkt_sold += $datetime->sold();
1113
+			}
1114
+		}
1115
+		return $tkt_sold;
1116
+	}
1117
+
1118
+
1119
+	/**
1120
+	 * This just returns a count of all the registrations for this event
1121
+	 *
1122
+	 * @access  public
1123
+	 * @return int
1124
+	 * @throws EE_Error
1125
+	 */
1126
+	public function get_count_of_all_registrations()
1127
+	{
1128
+		return EEM_Event::instance()->count_related($this, 'Registration');
1129
+	}
1130
+
1131
+
1132
+	/**
1133
+	 * This returns the ticket with the earliest start time that is
1134
+	 * available for this event (across all datetimes attached to the event)
1135
+	 *
1136
+	 * @return EE_Base_Class|EE_Ticket|null
1137
+	 * @throws EE_Error
1138
+	 */
1139
+	public function get_ticket_with_earliest_start_time()
1140
+	{
1141
+		$where['Datetime.EVT_ID'] = $this->ID();
1142
+		$query_params = array($where, 'order_by' => array('TKT_start_date' => 'ASC'));
1143
+		return EE_Registry::instance()->load_model('Ticket')->get_one($query_params);
1144
+	}
1145
+
1146
+
1147
+	/**
1148
+	 * This returns the ticket with the latest end time that is available
1149
+	 * for this event (across all datetimes attached to the event)
1150
+	 *
1151
+	 * @return EE_Base_Class|EE_Ticket|null
1152
+	 * @throws EE_Error
1153
+	 */
1154
+	public function get_ticket_with_latest_end_time()
1155
+	{
1156
+		$where['Datetime.EVT_ID'] = $this->ID();
1157
+		$query_params = array($where, 'order_by' => array('TKT_end_date' => 'DESC'));
1158
+		return EE_Registry::instance()->load_model('Ticket')->get_one($query_params);
1159
+	}
1160
+
1161
+
1162
+	/**
1163
+	 * This returns whether there are any tickets on sale for this event.
1164
+	 *
1165
+	 * @return bool true = YES tickets on sale.
1166
+	 * @throws EE_Error
1167
+	 */
1168
+	public function tickets_on_sale()
1169
+	{
1170
+		$earliest_ticket = $this->get_ticket_with_earliest_start_time();
1171
+		$latest_ticket = $this->get_ticket_with_latest_end_time();
1172
+		if (!$latest_ticket instanceof EE_Ticket && !$earliest_ticket instanceof EE_Ticket) {
1173
+			return false;
1174
+		}
1175
+		//check on sale for these two tickets.
1176
+		if ($latest_ticket->is_on_sale() || $earliest_ticket->is_on_sale()) {
1177
+			return true;
1178
+		}
1179
+		return false;
1180
+	}
1181
+
1182
+
1183
+	/**
1184
+	 * Gets the URL for viewing this event on the front-end. Overrides parent
1185
+	 * to check for an external URL first
1186
+	 *
1187
+	 * @return string
1188
+	 * @throws EE_Error
1189
+	 */
1190
+	public function get_permalink()
1191
+	{
1192
+		if ($this->external_url()) {
1193
+			return $this->external_url();
1194
+		}
1195
+		return parent::get_permalink();
1196
+	}
1197
+
1198
+
1199
+	/**
1200
+	 * Gets the first term for 'espresso_event_categories' we can find
1201
+	 *
1202
+	 * @param array $query_params like EEM_Base::get_all
1203
+	 * @return EE_Base_Class|EE_Term|null
1204
+	 * @throws EE_Error
1205
+	 */
1206
+	public function first_event_category($query_params = array())
1207
+	{
1208
+		$query_params[0]['Term_Taxonomy.taxonomy'] = 'espresso_event_categories';
1209
+		$query_params[0]['Term_Taxonomy.Event.EVT_ID'] = $this->ID();
1210
+		return EEM_Term::instance()->get_one($query_params);
1211
+	}
1212
+
1213
+
1214
+	/**
1215
+	 * Gets all terms for 'espresso_event_categories' we can find
1216
+	 *
1217
+	 * @param array $query_params
1218
+	 * @return EE_Base_Class[]|EE_Term[]
1219
+	 * @throws EE_Error
1220
+	 */
1221
+	public function get_all_event_categories($query_params = array())
1222
+	{
1223
+		$query_params[0]['Term_Taxonomy.taxonomy'] = 'espresso_event_categories';
1224
+		$query_params[0]['Term_Taxonomy.Event.EVT_ID'] = $this->ID();
1225
+		return EEM_Term::instance()->get_all($query_params);
1226
+	}
1227
+
1228
+
1229
+	/**
1230
+	 * Gets all the question groups, ordering them by QSG_order ascending
1231
+	 *
1232
+	 * @param array $query_params @see EEM_Base::get_all
1233
+	 * @return EE_Base_Class[]|EE_Question_Group[]
1234
+	 * @throws EE_Error
1235
+	 */
1236
+	public function question_groups($query_params = array())
1237
+	{
1238
+		$query_params = !empty($query_params) ? $query_params : array('order_by' => array('QSG_order' => 'ASC'));
1239
+		return $this->get_many_related('Question_Group', $query_params);
1240
+	}
1241
+
1242
+
1243
+	/**
1244
+	 * Implementation for EEI_Has_Icon interface method.
1245
+	 *
1246
+	 * @see EEI_Visual_Representation for comments
1247
+	 * @return string
1248
+	 */
1249
+	public function get_icon()
1250
+	{
1251
+		return '<span class="dashicons dashicons-flag"></span>';
1252
+	}
1253
+
1254
+
1255
+	/**
1256
+	 * Implementation for EEI_Admin_Links interface method.
1257
+	 *
1258
+	 * @see EEI_Admin_Links for comments
1259
+	 * @return string
1260
+	 * @throws EE_Error
1261
+	 */
1262
+	public function get_admin_details_link()
1263
+	{
1264
+		return $this->get_admin_edit_link();
1265
+	}
1266
+
1267
+
1268
+	/**
1269
+	 * Implementation for EEI_Admin_Links interface method.
1270
+	 *
1271
+	 * @see EEI_Admin_Links for comments
1272
+	 * @return string
1273
+	 * @throws EE_Error
1274
+	 */
1275
+	public function get_admin_edit_link()
1276
+	{
1277
+		return EEH_URL::add_query_args_and_nonce(array(
1278
+			'page' => 'espresso_events',
1279
+			'action' => 'edit',
1280
+			'post' => $this->ID(),
1281
+		),
1282
+			admin_url('admin.php')
1283
+		);
1284
+	}
1285
+
1286
+
1287
+	/**
1288
+	 * Implementation for EEI_Admin_Links interface method.
1289
+	 *
1290
+	 * @see EEI_Admin_Links for comments
1291
+	 * @return string
1292
+	 */
1293
+	public function get_admin_settings_link()
1294
+	{
1295
+		return EEH_URL::add_query_args_and_nonce(array(
1296
+			'page' => 'espresso_events',
1297
+			'action' => 'default_event_settings',
1298
+		),
1299
+			admin_url('admin.php')
1300
+		);
1301
+	}
1302
+
1303
+
1304
+	/**
1305
+	 * Implementation for EEI_Admin_Links interface method.
1306
+	 *
1307
+	 * @see EEI_Admin_Links for comments
1308
+	 * @return string
1309
+	 */
1310
+	public function get_admin_overview_link()
1311
+	{
1312
+		return EEH_URL::add_query_args_and_nonce(array(
1313
+			'page' => 'espresso_events',
1314
+			'action' => 'default',
1315
+		),
1316
+			admin_url('admin.php')
1317
+		);
1318
+	}
1319 1319
 
1320 1320
 }
Please login to merge, or discard this patch.
Spacing   +15 added lines, -15 removed lines patch added patch discarded remove patch
@@ -3,7 +3,7 @@  discard block
 block discarded – undo
3 3
 use EventEspresso\core\domain\services\event\EventSpacesCalculator;
4 4
 use EventEspresso\core\exceptions\UnexpectedEntityException;
5 5
 
6
-if (!defined('EVENT_ESPRESSO_VERSION')) {
6
+if ( ! defined('EVENT_ESPRESSO_VERSION')) {
7 7
     exit('No direct script access allowed');
8 8
 }
9 9
 
@@ -75,7 +75,7 @@  discard block
 block discarded – undo
75 75
      */
76 76
     public function getAvailableSpacesCalculator()
77 77
     {
78
-        if(! $this->available_spaces_calculator instanceof EventSpacesCalculator){
78
+        if ( ! $this->available_spaces_calculator instanceof EventSpacesCalculator) {
79 79
             $this->available_spaces_calculator = new EventSpacesCalculator($this);
80 80
         }
81 81
         return $this->available_spaces_calculator;
@@ -118,7 +118,7 @@  discard block
 block discarded – undo
118 118
     public function set_status($new_status = null, $use_default = false)
119 119
     {
120 120
         // if nothing is set, and we aren't explicitly wanting to reset the status, then just leave
121
-        if (empty($new_status) && !$use_default) {
121
+        if (empty($new_status) && ! $use_default) {
122 122
             return;
123 123
         }
124 124
         // get current Event status
@@ -218,7 +218,7 @@  discard block
 block discarded – undo
218 218
      */
219 219
     public function primary_datetime($try_to_exclude_expired = true, $try_to_exclude_deleted = true)
220 220
     {
221
-        if (!empty ($this->_Primary_Datetime)) {
221
+        if ( ! empty ($this->_Primary_Datetime)) {
222 222
             return $this->_Primary_Datetime;
223 223
         }
224 224
         $this->_Primary_Datetime = EEM_Datetime::instance($this->_timezone)->get_primary_datetime_for_event(
@@ -241,7 +241,7 @@  discard block
 block discarded – undo
241 241
     {
242 242
         //first get all datetimes
243 243
         $datetimes = $this->datetimes_ordered();
244
-        if (!$datetimes) {
244
+        if ( ! $datetimes) {
245 245
             return array();
246 246
         }
247 247
         $datetime_ids = array();
@@ -345,7 +345,7 @@  discard block
 block discarded – undo
345 345
      */
346 346
     public function display_ticket_selector()
347 347
     {
348
-        return (bool)$this->get('EVT_display_ticket_selector');
348
+        return (bool) $this->get('EVT_display_ticket_selector');
349 349
     }
350 350
 
351 351
 
@@ -416,7 +416,7 @@  discard block
 block discarded – undo
416 416
     public function default_registration_status()
417 417
     {
418 418
         $event_default_registration_status = $this->get('EVT_default_registration_status');
419
-        return !empty($event_default_registration_status)
419
+        return ! empty($event_default_registration_status)
420 420
             ? $event_default_registration_status
421 421
             : EE_Registry::instance()->CFG->registration->default_STS_ID;
422 422
     }
@@ -432,7 +432,7 @@  discard block
 block discarded – undo
432 432
     public function short_description($num_words = 55, $more = null, $not_full_desc = false)
433 433
     {
434 434
         $short_desc = $this->get('EVT_short_desc');
435
-        if (!empty($short_desc) || $not_full_desc) {
435
+        if ( ! empty($short_desc) || $not_full_desc) {
436 436
             return $short_desc;
437 437
         }
438 438
         $full_desc = $this->get('EVT_desc');
@@ -886,7 +886,7 @@  discard block
 block discarded – undo
886 886
         );
887 887
         $all_expired = true;
888 888
         foreach ($tickets as $ticket) {
889
-            if(!$ticket->is_expired()){
889
+            if ( ! $ticket->is_expired()) {
890 890
                 $all_expired = false;
891 891
                 break;
892 892
             }
@@ -977,7 +977,7 @@  discard block
 block discarded – undo
977 977
      */
978 978
     public function is_sold_out($actual = false)
979 979
     {
980
-        if (!$actual) {
980
+        if ( ! $actual) {
981 981
             return $this->status() === EEM_Event::sold_out;
982 982
         }
983 983
         return $this->perform_sold_out_status_check();
@@ -1022,11 +1022,11 @@  discard block
 block discarded – undo
1022 1022
     public function get_active_status($reset = false)
1023 1023
     {
1024 1024
         // if the active status has already been set, then just use that value (unless we are resetting it)
1025
-        if (!empty($this->_active_status) && !$reset) {
1025
+        if ( ! empty($this->_active_status) && ! $reset) {
1026 1026
             return $this->_active_status;
1027 1027
         }
1028 1028
         //first check if event id is present on this object
1029
-        if (!$this->ID()) {
1029
+        if ( ! $this->ID()) {
1030 1030
             return false;
1031 1031
         }
1032 1032
         $where_params_for_event = array(array('EVT_ID' => $this->ID()));
@@ -1103,7 +1103,7 @@  discard block
 block discarded – undo
1103 1103
     public function get_number_of_tickets_sold()
1104 1104
     {
1105 1105
         $tkt_sold = 0;
1106
-        if (!$this->ID()) {
1106
+        if ( ! $this->ID()) {
1107 1107
             return 0;
1108 1108
         }
1109 1109
         $datetimes = $this->datetimes();
@@ -1169,7 +1169,7 @@  discard block
 block discarded – undo
1169 1169
     {
1170 1170
         $earliest_ticket = $this->get_ticket_with_earliest_start_time();
1171 1171
         $latest_ticket = $this->get_ticket_with_latest_end_time();
1172
-        if (!$latest_ticket instanceof EE_Ticket && !$earliest_ticket instanceof EE_Ticket) {
1172
+        if ( ! $latest_ticket instanceof EE_Ticket && ! $earliest_ticket instanceof EE_Ticket) {
1173 1173
             return false;
1174 1174
         }
1175 1175
         //check on sale for these two tickets.
@@ -1235,7 +1235,7 @@  discard block
 block discarded – undo
1235 1235
      */
1236 1236
     public function question_groups($query_params = array())
1237 1237
     {
1238
-        $query_params = !empty($query_params) ? $query_params : array('order_by' => array('QSG_order' => 'ASC'));
1238
+        $query_params = ! empty($query_params) ? $query_params : array('order_by' => array('QSG_order' => 'ASC'));
1239 1239
         return $this->get_many_related('Question_Group', $query_params);
1240 1240
     }
1241 1241
 
Please login to merge, or discard this patch.
core/db_models/EEM_Question.model.php 3 patches
Doc Comments   +2 added lines, -2 removed lines patch added patch discarded remove patch
@@ -364,7 +364,7 @@  discard block
 block discarded – undo
364 364
      * Gets an array for converting between QST_system and QST_IDs for system questions. Eg, if you want to know
365 365
      * which system question QST_ID corresponds to the QST_system 'city', use EEM_Question::instance()->get_Question_ID_from_system_string('city');
366 366
      * @param $QST_system
367
-     * @return int of QST_ID for the question that corresponds to that QST_system
367
+     * @return string of QST_ID for the question that corresponds to that QST_system
368 368
      */
369 369
     public function get_Question_ID_from_system_string($QST_system)
370 370
     {
@@ -425,7 +425,7 @@  discard block
 block discarded – undo
425 425
 
426 426
 
427 427
     /**
428
-     * @return array
428
+     * @return EEM_Question
429 429
      */
430 430
     public function question_descriptions()
431 431
     {
Please login to merge, or discard this patch.
Indentation   +401 added lines, -401 removed lines patch added patch discarded remove patch
@@ -1,5 +1,5 @@  discard block
 block discarded – undo
1 1
 <?php if (!defined('EVENT_ESPRESSO_VERSION')) {
2
-    exit('No direct script access allowed');
2
+	exit('No direct script access allowed');
3 3
 }
4 4
 require_once(EE_MODELS . 'EEM_Soft_Delete_Base.model.php');
5 5
 require_once(EE_CLASSES . 'EE_Question.class.php');
@@ -16,406 +16,406 @@  discard block
 block discarded – undo
16 16
 class EEM_Question extends EEM_Soft_Delete_Base
17 17
 {
18 18
 
19
-    // constant used to indicate that the question type is COUNTRY
20
-    const QST_type_country = 'COUNTRY';
21
-
22
-    // constant used to indicate that the question type is DATE
23
-    const QST_type_date = 'DATE';
24
-
25
-    // constant used to indicate that the question type is DROPDOWN
26
-    const QST_type_dropdown = 'DROPDOWN';
27
-
28
-    // constant used to indicate that the question type is CHECKBOX
29
-    const QST_type_checkbox = 'CHECKBOX';
30
-
31
-    // constant used to indicate that the question type is RADIO_BTN
32
-    const QST_type_radio = 'RADIO_BTN';
33
-
34
-    // constant used to indicate that the question type is STATE
35
-    const QST_type_state = 'STATE';
36
-
37
-    // constant used to indicate that the question type is TEXT
38
-    const QST_type_text = 'TEXT';
39
-
40
-    // constant used to indicate that the question type is TEXTAREA
41
-    const QST_type_textarea = 'TEXTAREA';
42
-
43
-    // constant used to indicate that the question type is a TEXTAREA that allows simple html
44
-    const QST_type_html_textarea = 'HTML_TEXTAREA';
45
-
46
-    // constant used to indicate that the question type is an email input
47
-    const QST_type_email = 'EMAIL';
48
-
49
-    // constant used to indicate that the question type is a US-formatted phone number
50
-    const QST_type_us_phone = 'US_PHONE';
51
-
52
-    // constant used to indicate that the question type is an integer (whole number)
53
-    const QST_type_int = 'INTEGER';
54
-
55
-    // constant used to indicate that the question type is a decimal (float)
56
-    const QST_type_decimal = 'DECIMAL';
57
-
58
-    // constant used to indicate that the question type is a valid URL
59
-    const QST_type_url = 'URL';
60
-
61
-    // constant used to indicate that the question type is a YEAR
62
-    const QST_type_year = 'YEAR';
63
-
64
-    // constant used to indicate that the question type is a multi-select
65
-    const QST_type_multi_select = 'MULTI_SELECT';
66
-
67
-    /**
68
-     * Question types that are interchangeable, even after answers have been provided for them.
69
-     * Top-level keys are category slugs, next level is an array of question types. If question types
70
-     * aren't in this array, it is assumed they AREN'T interchangeable with any other question types.
71
-     *
72
-     * @access protected
73
-     * @var array $_question_type_categories {
74
-     * @type string $text
75
-     * @type string $single -answer-enum
76
-     * @type string $multi -answer-enum
77
-     *                    }
78
-     */
79
-    protected $_question_type_categories = array();
80
-
81
-    /**
82
-     * lists all the question types which should be allowed. Ideally, this will be extensible.
83
-     *
84
-     * @access protected
85
-     * @var array $_allowed_question_types
86
-     */
87
-    protected $_allowed_question_types = array();
88
-
89
-    /**
90
-     * brief descriptions for all the question types
91
-     *
92
-     * @access protected
93
-     * @var EEM_Question $_instance
94
-     */
95
-    protected $_question_descriptions;
96
-
97
-
98
-    // private instance of the Attendee object
99
-    protected static $_instance = NULL;
100
-
101
-
102
-    /**
103
-     * EEM_Question constructor.
104
-     *
105
-     * @param null $timezone
106
-     */
107
-    protected function __construct($timezone = NULL)
108
-    {
109
-        $this->singular_item = __('Question', 'event_espresso');
110
-        $this->plural_item = __('Questions', 'event_espresso');
111
-        $this->_allowed_question_types = apply_filters(
112
-            'FHEE__EEM_Question__construct__allowed_question_types',
113
-            array(
114
-                EEM_Question::QST_type_text => __('Text', 'event_espresso'),
115
-                EEM_Question::QST_type_textarea => __('Textarea', 'event_espresso'),
116
-                EEM_Question::QST_type_checkbox => __('Checkboxes', 'event_espresso'),
117
-                EEM_Question::QST_type_radio => __('Radio Buttons', 'event_espresso'),
118
-                EEM_Question::QST_type_dropdown => __('Dropdown', 'event_espresso'),
119
-                EEM_Question::QST_type_state => __('State/Province Dropdown', 'event_espresso'),
120
-                EEM_Question::QST_type_country => __('Country Dropdown', 'event_espresso'),
121
-                EEM_Question::QST_type_date => __('Date Picker', 'event_espresso'),
122
-                EEM_Question::QST_type_html_textarea => __('HTML Textarea', 'event_espresso'),
123
-                EEM_Question::QST_type_email => __('Email', 'event_espresso'),
124
-                EEM_Question::QST_type_us_phone => __('USA - Format Phone', 'event_espresso'),
125
-                EEM_Question::QST_type_decimal => __('Number', 'event_espresso'),
126
-                EEM_Question::QST_type_int => __('Whole Number', 'event_espresso'),
127
-                EEM_Question::QST_type_url => __('URL', 'event_espresso'),
128
-                EEM_Question::QST_type_year => __('Year', 'event_espresso'),
129
-                EEM_Question::QST_type_multi_select => __('Multi Select', 'event_espresso')
130
-            )
131
-        );
132
-        $this->_question_descriptions = apply_filters(
133
-            'FHEE__EEM_Question__construct__allowed_question_types',
134
-            array(
135
-                EEM_Question::QST_type_text => __('A single line text input field', 'event_espresso'),
136
-                EEM_Question::QST_type_textarea => __('A multi line text input field', 'event_espresso'),
137
-                EEM_Question::QST_type_checkbox => __('Allows multiple preset options to be selected', 'event_espresso'),
138
-                EEM_Question::QST_type_radio => __('Allows a single preset option to be selected', 'event_espresso'),
139
-                EEM_Question::QST_type_dropdown => __('A dropdown that allows a single selection', 'event_espresso'),
140
-                EEM_Question::QST_type_state => __('A dropdown that lists states/provinces', 'event_espresso'),
141
-                EEM_Question::QST_type_country => __('A dropdown that lists countries', 'event_espresso'),
142
-                EEM_Question::QST_type_date => __('A popup calendar that allows date selections', 'event_espresso'),
143
-                EEM_Question::QST_type_html_textarea => __('A multi line text input field that allows HTML', 'event_espresso'),
144
-                EEM_Question::QST_type_email => __('A text field that must contain a valid Email address', 'event_espresso'),
145
-                EEM_Question::QST_type_us_phone => __('A text field that must contain a valid US phone number', 'event_espresso'),
146
-                EEM_Question::QST_type_decimal => __('A text field that allows number values with decimals', 'event_espresso'),
147
-                EEM_Question::QST_type_int => __('A text field that only allows whole numbers (no decimals)', 'event_espresso'),
148
-                EEM_Question::QST_type_url => __('A text field that must contain a valid URL', 'event_espresso'),
149
-                EEM_Question::QST_type_year => __('A dropdown that lists the last 100 years', 'event_espresso'),
150
-                EEM_Question::QST_type_multi_select => __('A dropdown that allows multiple selections', 'event_espresso')
151
-            )
152
-        );
153
-        $this->_question_type_categories = (array)apply_filters(
154
-            'FHEE__EEM_Question__construct__question_type_categories',
155
-            array(
156
-                'text' => array(
157
-                    EEM_Question::QST_type_text,
158
-                    EEM_Question::QST_type_textarea,
159
-                    EEM_Question::QST_type_date,
160
-                    EEM_Question::QST_type_html_textarea,
161
-                    EEM_Question::QST_type_email,
162
-                    EEM_Question::QST_type_us_phone,
163
-                    EEM_Question::QST_type_decimal,
164
-                    EEM_Question::QST_type_int,
165
-                    EEM_Question::QST_type_url,
166
-                    EEM_Question::QST_type_year
167
-                ),
168
-                'single-answer-enum' => array(
169
-                    EEM_Question::QST_type_radio,
170
-                    EEM_Question::QST_type_dropdown
171
-                ),
172
-                'multi-answer-enum' => array(
173
-                    EEM_Question::QST_type_checkbox,
174
-                    EEM_Question::QST_type_multi_select
175
-                )
176
-            )
177
-        );
178
-
179
-        $this->_tables = array(
180
-            'Question' => new EE_Primary_Table('esp_question', 'QST_ID')
181
-        );
182
-        $this->_fields = array(
183
-            'Question' => array(
184
-                'QST_ID' => new EE_Primary_Key_Int_Field('QST_ID', __('Question ID', 'event_espresso')),
185
-                'QST_display_text' => new EE_Post_Content_Field('QST_display_text', __('Question Text', 'event_espresso'), true, ''),
186
-                'QST_admin_label' => new EE_Plain_Text_Field('QST_admin_label', __('Question Label (admin-only)', 'event_espresso'), true, ''),
187
-                'QST_system' => new EE_Plain_Text_Field('QST_system', __('Internal string ID for question', 'event_espresso'), false, ''),
188
-                'QST_type' => new EE_Enum_Text_Field('QST_type', __('Question Type', 'event_espresso'), false, 'TEXT', $this->_allowed_question_types),
189
-                'QST_required' => new EE_Boolean_Field('QST_required', __('Required Question?', 'event_espresso'), false, false),
190
-                'QST_required_text' => new EE_Simple_HTML_Field('QST_required_text', __('Text to Display if Not Provided', 'event_espresso'), true, ''),
191
-                'QST_order' => new EE_Integer_Field('QST_order', __('Question Order', 'event_espresso'), false, 0),
192
-                'QST_admin_only' => new EE_Boolean_Field('QST_admin_only', __('Admin-Only Question?', 'event_espresso'), false, false),
193
-                'QST_max' => new EE_Infinite_Integer_Field('QST_max', __('Max Size', 'event_espresso'), false, EE_INF),
194
-                'QST_wp_user' => new EE_WP_User_Field('QST_wp_user', __('Question Creator ID', 'event_espresso'), false),
195
-                'QST_deleted' => new EE_Trashed_Flag_Field('QST_deleted', __('Flag Indicating question was deleted', 'event_espresso'), false, false)
196
-            )
197
-        );
198
-        $this->_model_relations = array(
199
-            'Question_Group' => new EE_HABTM_Relation('Question_Group_Question'),
200
-            'Question_Option' => new EE_Has_Many_Relation(),
201
-            'Answer' => new EE_Has_Many_Relation(),
202
-            'WP_User' => new EE_Belongs_To_Relation(),
203
-            //for QST_order column
204
-            'Question_Group_Question' => new EE_Has_Many_Relation()
205
-        );
206
-        //this model is generally available for reading
207
-        $this->_cap_restriction_generators[EEM_Base::caps_read] = new EE_Restriction_Generator_Public();
208
-        $this->_cap_restriction_generators[EEM_Base::caps_read_admin] = new EE_Restriction_Generator_Reg_Form('QST_system');
209
-        $this->_cap_restriction_generators[EEM_Base::caps_edit] = new EE_Restriction_Generator_Reg_Form('QST_system');
210
-        $this->_cap_restriction_generators[EEM_Base::caps_delete] = new EE_Restriction_Generator_Reg_Form('QST_system');
211
-        parent::__construct($timezone);
212
-    }
213
-
214
-    /**
215
-     * Returns the list of allowed question types, which are normally: 'TEXT','TEXTAREA','RADIO_BTN','DROPDOWN','CHECKBOX','DATE'
216
-     * but they can be extended
217
-     * @return string[]
218
-     */
219
-    public function allowed_question_types()
220
-    {
221
-        return $this->_allowed_question_types;
222
-    }
223
-
224
-    /**
225
-     * Gets all the question types in the same category
226
-     * @param string $question_type one of EEM_Question::allowed_question_types(
227
-     * @return string[] like EEM_Question::allowed_question_types()
228
-     */
229
-    public function question_types_in_same_category($question_type)
230
-    {
231
-        $question_types = array($question_type);
232
-        foreach ($this->_question_type_categories as $category => $question_types_in_category) {
233
-            if (in_array($question_type, $question_types_in_category)) {
234
-                $question_types = $question_types_in_category;
235
-                break;
236
-            }
237
-        }
238
-
239
-        return array_intersect_key($this->allowed_question_types(), array_flip($question_types));
240
-    }
241
-
242
-    /**
243
-     * Determines if the given question type is in the given question type category
244
-     * @param string $question_type one of EEM_Question::allowed_question_types()
245
-     * @param string $category one of the top-level keys of EEM_Question::question_type_categories()
246
-     * @return boolean
247
-     */
248
-    public function question_type_is_in_category($question_type, $category)
249
-    {
250
-        if (!isset($this->_question_type_categories[$category])) {
251
-            return false;
252
-        }
253
-        return in_array($question_type, $this->_question_type_categories[$category]);
254
-    }
255
-
256
-
257
-    /**
258
-     * Returns all the question types in the given category
259
-     * @param string $category
260
-     * @return array|mixed
261
-     */
262
-    public function question_types_in_category($category)
263
-    {
264
-        if (isset($this->_question_type_categories[$category])) {
265
-            return $this->_question_type_categories[$category];
266
-        }
267
-        return array();
268
-    }
269
-
270
-
271
-    /**
272
-     * Returns all the question types that should have question options
273
-     * @return array
274
-     */
275
-    public function question_types_with_options()
276
-    {
277
-        return array_merge(
278
-            $this->question_types_in_category('single-answer-enum'),
279
-            $this->question_types_in_category('multi-answer-enum')
280
-        );
281
-    }
282
-
283
-    /**
284
-     * Returns the question type categories 2d array
285
-     * @return array see EEM_Question::_question_type_categories
286
-     */
287
-    public function question_type_categories()
288
-    {
289
-        return $this->_question_type_categories;
290
-    }
291
-
292
-    /**
293
-     * Returns an array of all the QST_system values that can be allowed in the system question group
294
-     * identified by $system_question_group_id
295
-     * @param string $system_question_group_id QSG_system
296
-     * @return array of system question names (QST_system)
297
-     */
298
-    public function allowed_system_questions_in_system_question_group($system_question_group_id)
299
-    {
300
-        $question_system_ids = array();
301
-        switch ($system_question_group_id) {
302
-            case EEM_Question_Group::system_personal:
303
-                $question_system_ids = array(
304
-                    EEM_Attendee::system_question_fname,
305
-                    EEM_Attendee::system_question_lname,
306
-                    EEM_Attendee::system_question_email,
307
-                    EEM_Attendee::system_question_phone
308
-                );
309
-                break;
310
-            case EEM_Question_Group::system_address:
311
-                $question_system_ids = array(
312
-                    EEM_Attendee::system_question_address,
313
-                    EEM_Attendee::system_question_address2,
314
-                    EEM_Attendee::system_question_city,
315
-                    EEM_Attendee::system_question_state,
316
-                    EEM_Attendee::system_question_country,
317
-                    EEM_Attendee::system_question_zip,
318
-                    EEM_Attendee::system_question_phone
319
-                );
320
-                break;
321
-        }
322
-        return apply_filters('FHEE__EEM_Question__system_questions_allowed_in_system_question_group__return', $question_system_ids, $system_question_group_id);
323
-    }
324
-
325
-    /**
326
-     * Returns an array of all the QST_system values that are required in the system question group
327
-     * identified by $system_question_group_id
328
-     * @param string $system_question_group_id QSG_system
329
-     * @return array of system question names (QST_system)
330
-     */
331
-    public function required_system_questions_in_system_question_group($system_question_group_id)
332
-    {
333
-        $question_system_ids = null;
334
-        switch ($system_question_group_id) {
335
-            case EEM_Question_Group::system_personal:
336
-                $question_system_ids = array(
337
-                    EEM_Attendee::system_question_fname,
338
-                    EEM_Attendee::system_question_email,
339
-                );
340
-                break;
341
-            default:
342
-                $question_system_ids = array();
343
-        }
344
-        return apply_filters('FHEE__EEM_Question__system_questions_required_in_system_question_group', $question_system_ids, $system_question_group_id);
345
-    }
346
-
347
-
348
-    /**
349
-     * Gets an array for converting between QST_system and QST_IDs for system questions. Eg, if you want to know
350
-     * which system question QST_ID corresponds to the QST_system 'city', use EEM_Question::instance()->get_Question_ID_from_system_string('city');
351
-     * @param $QST_system
352
-     * @return int of QST_ID for the question that corresponds to that QST_system
353
-     */
354
-    public function get_Question_ID_from_system_string($QST_system)
355
-    {
356
-        return $this->get_var(array(array('QST_system' => $QST_system)));
357
-    }
358
-
359
-
360
-    /**
361
-     * searches the db for the question with the latest question order and returns that value.
362
-     * @access public
363
-     * @return int
364
-     */
365
-    public function get_latest_question_order()
366
-    {
367
-        $columns_to_select = array(
368
-            'max_order' => array("MAX(QST_order)", "%d")
369
-        );
370
-        $max = $this->_get_all_wpdb_results(array(), ARRAY_A, $columns_to_select);
371
-        return isset($max[0], $max[0]['max_order']) ? $max[0]['max_order'] : 0;
372
-    }
373
-
374
-    /**
375
-     * Returns an array where keys are system question QST_system values,
376
-     * and values are the highest question max the admin can set on the question
377
-     * (aka the "max max"; eg, a site admin can change the zip question to have a max
378
-     * of 5, but no larger than 12)
379
-     * @return array
380
-     */
381
-    public function system_question_maxes()
382
-    {
383
-        return array(
384
-            'fname' => 45,
385
-            'lname' => 45,
386
-            'address' => 255,
387
-            'address2' => 255,
388
-            'city' => 45,
389
-            'zip' => 12,
390
-            'email' => 255,
391
-            'phone' => 45,
392
-        );
393
-    }
394
-
395
-    /**
396
-     * Given a QST_system value, gets the question's largest allowable max input.
397
-     * @see Registration_Form_Admin_Page::system_question_maxes()
398
-     * @param string $system_question_value
399
-     * @return int|float
400
-     */
401
-    public function absolute_max_for_system_question($system_question_value)
402
-    {
403
-        $maxes = $this->system_question_maxes();
404
-        if (isset($maxes[$system_question_value])) {
405
-            return $maxes[$system_question_value];
406
-        } else {
407
-            return EE_INF;
408
-        }
409
-    }
410
-
411
-
412
-    /**
413
-     * @return array
414
-     */
415
-    public function question_descriptions()
416
-    {
417
-        return $this->_question_descriptions;
418
-    }
19
+	// constant used to indicate that the question type is COUNTRY
20
+	const QST_type_country = 'COUNTRY';
21
+
22
+	// constant used to indicate that the question type is DATE
23
+	const QST_type_date = 'DATE';
24
+
25
+	// constant used to indicate that the question type is DROPDOWN
26
+	const QST_type_dropdown = 'DROPDOWN';
27
+
28
+	// constant used to indicate that the question type is CHECKBOX
29
+	const QST_type_checkbox = 'CHECKBOX';
30
+
31
+	// constant used to indicate that the question type is RADIO_BTN
32
+	const QST_type_radio = 'RADIO_BTN';
33
+
34
+	// constant used to indicate that the question type is STATE
35
+	const QST_type_state = 'STATE';
36
+
37
+	// constant used to indicate that the question type is TEXT
38
+	const QST_type_text = 'TEXT';
39
+
40
+	// constant used to indicate that the question type is TEXTAREA
41
+	const QST_type_textarea = 'TEXTAREA';
42
+
43
+	// constant used to indicate that the question type is a TEXTAREA that allows simple html
44
+	const QST_type_html_textarea = 'HTML_TEXTAREA';
45
+
46
+	// constant used to indicate that the question type is an email input
47
+	const QST_type_email = 'EMAIL';
48
+
49
+	// constant used to indicate that the question type is a US-formatted phone number
50
+	const QST_type_us_phone = 'US_PHONE';
51
+
52
+	// constant used to indicate that the question type is an integer (whole number)
53
+	const QST_type_int = 'INTEGER';
54
+
55
+	// constant used to indicate that the question type is a decimal (float)
56
+	const QST_type_decimal = 'DECIMAL';
57
+
58
+	// constant used to indicate that the question type is a valid URL
59
+	const QST_type_url = 'URL';
60
+
61
+	// constant used to indicate that the question type is a YEAR
62
+	const QST_type_year = 'YEAR';
63
+
64
+	// constant used to indicate that the question type is a multi-select
65
+	const QST_type_multi_select = 'MULTI_SELECT';
66
+
67
+	/**
68
+	 * Question types that are interchangeable, even after answers have been provided for them.
69
+	 * Top-level keys are category slugs, next level is an array of question types. If question types
70
+	 * aren't in this array, it is assumed they AREN'T interchangeable with any other question types.
71
+	 *
72
+	 * @access protected
73
+	 * @var array $_question_type_categories {
74
+	 * @type string $text
75
+	 * @type string $single -answer-enum
76
+	 * @type string $multi -answer-enum
77
+	 *                    }
78
+	 */
79
+	protected $_question_type_categories = array();
80
+
81
+	/**
82
+	 * lists all the question types which should be allowed. Ideally, this will be extensible.
83
+	 *
84
+	 * @access protected
85
+	 * @var array $_allowed_question_types
86
+	 */
87
+	protected $_allowed_question_types = array();
88
+
89
+	/**
90
+	 * brief descriptions for all the question types
91
+	 *
92
+	 * @access protected
93
+	 * @var EEM_Question $_instance
94
+	 */
95
+	protected $_question_descriptions;
96
+
97
+
98
+	// private instance of the Attendee object
99
+	protected static $_instance = NULL;
100
+
101
+
102
+	/**
103
+	 * EEM_Question constructor.
104
+	 *
105
+	 * @param null $timezone
106
+	 */
107
+	protected function __construct($timezone = NULL)
108
+	{
109
+		$this->singular_item = __('Question', 'event_espresso');
110
+		$this->plural_item = __('Questions', 'event_espresso');
111
+		$this->_allowed_question_types = apply_filters(
112
+			'FHEE__EEM_Question__construct__allowed_question_types',
113
+			array(
114
+				EEM_Question::QST_type_text => __('Text', 'event_espresso'),
115
+				EEM_Question::QST_type_textarea => __('Textarea', 'event_espresso'),
116
+				EEM_Question::QST_type_checkbox => __('Checkboxes', 'event_espresso'),
117
+				EEM_Question::QST_type_radio => __('Radio Buttons', 'event_espresso'),
118
+				EEM_Question::QST_type_dropdown => __('Dropdown', 'event_espresso'),
119
+				EEM_Question::QST_type_state => __('State/Province Dropdown', 'event_espresso'),
120
+				EEM_Question::QST_type_country => __('Country Dropdown', 'event_espresso'),
121
+				EEM_Question::QST_type_date => __('Date Picker', 'event_espresso'),
122
+				EEM_Question::QST_type_html_textarea => __('HTML Textarea', 'event_espresso'),
123
+				EEM_Question::QST_type_email => __('Email', 'event_espresso'),
124
+				EEM_Question::QST_type_us_phone => __('USA - Format Phone', 'event_espresso'),
125
+				EEM_Question::QST_type_decimal => __('Number', 'event_espresso'),
126
+				EEM_Question::QST_type_int => __('Whole Number', 'event_espresso'),
127
+				EEM_Question::QST_type_url => __('URL', 'event_espresso'),
128
+				EEM_Question::QST_type_year => __('Year', 'event_espresso'),
129
+				EEM_Question::QST_type_multi_select => __('Multi Select', 'event_espresso')
130
+			)
131
+		);
132
+		$this->_question_descriptions = apply_filters(
133
+			'FHEE__EEM_Question__construct__allowed_question_types',
134
+			array(
135
+				EEM_Question::QST_type_text => __('A single line text input field', 'event_espresso'),
136
+				EEM_Question::QST_type_textarea => __('A multi line text input field', 'event_espresso'),
137
+				EEM_Question::QST_type_checkbox => __('Allows multiple preset options to be selected', 'event_espresso'),
138
+				EEM_Question::QST_type_radio => __('Allows a single preset option to be selected', 'event_espresso'),
139
+				EEM_Question::QST_type_dropdown => __('A dropdown that allows a single selection', 'event_espresso'),
140
+				EEM_Question::QST_type_state => __('A dropdown that lists states/provinces', 'event_espresso'),
141
+				EEM_Question::QST_type_country => __('A dropdown that lists countries', 'event_espresso'),
142
+				EEM_Question::QST_type_date => __('A popup calendar that allows date selections', 'event_espresso'),
143
+				EEM_Question::QST_type_html_textarea => __('A multi line text input field that allows HTML', 'event_espresso'),
144
+				EEM_Question::QST_type_email => __('A text field that must contain a valid Email address', 'event_espresso'),
145
+				EEM_Question::QST_type_us_phone => __('A text field that must contain a valid US phone number', 'event_espresso'),
146
+				EEM_Question::QST_type_decimal => __('A text field that allows number values with decimals', 'event_espresso'),
147
+				EEM_Question::QST_type_int => __('A text field that only allows whole numbers (no decimals)', 'event_espresso'),
148
+				EEM_Question::QST_type_url => __('A text field that must contain a valid URL', 'event_espresso'),
149
+				EEM_Question::QST_type_year => __('A dropdown that lists the last 100 years', 'event_espresso'),
150
+				EEM_Question::QST_type_multi_select => __('A dropdown that allows multiple selections', 'event_espresso')
151
+			)
152
+		);
153
+		$this->_question_type_categories = (array)apply_filters(
154
+			'FHEE__EEM_Question__construct__question_type_categories',
155
+			array(
156
+				'text' => array(
157
+					EEM_Question::QST_type_text,
158
+					EEM_Question::QST_type_textarea,
159
+					EEM_Question::QST_type_date,
160
+					EEM_Question::QST_type_html_textarea,
161
+					EEM_Question::QST_type_email,
162
+					EEM_Question::QST_type_us_phone,
163
+					EEM_Question::QST_type_decimal,
164
+					EEM_Question::QST_type_int,
165
+					EEM_Question::QST_type_url,
166
+					EEM_Question::QST_type_year
167
+				),
168
+				'single-answer-enum' => array(
169
+					EEM_Question::QST_type_radio,
170
+					EEM_Question::QST_type_dropdown
171
+				),
172
+				'multi-answer-enum' => array(
173
+					EEM_Question::QST_type_checkbox,
174
+					EEM_Question::QST_type_multi_select
175
+				)
176
+			)
177
+		);
178
+
179
+		$this->_tables = array(
180
+			'Question' => new EE_Primary_Table('esp_question', 'QST_ID')
181
+		);
182
+		$this->_fields = array(
183
+			'Question' => array(
184
+				'QST_ID' => new EE_Primary_Key_Int_Field('QST_ID', __('Question ID', 'event_espresso')),
185
+				'QST_display_text' => new EE_Post_Content_Field('QST_display_text', __('Question Text', 'event_espresso'), true, ''),
186
+				'QST_admin_label' => new EE_Plain_Text_Field('QST_admin_label', __('Question Label (admin-only)', 'event_espresso'), true, ''),
187
+				'QST_system' => new EE_Plain_Text_Field('QST_system', __('Internal string ID for question', 'event_espresso'), false, ''),
188
+				'QST_type' => new EE_Enum_Text_Field('QST_type', __('Question Type', 'event_espresso'), false, 'TEXT', $this->_allowed_question_types),
189
+				'QST_required' => new EE_Boolean_Field('QST_required', __('Required Question?', 'event_espresso'), false, false),
190
+				'QST_required_text' => new EE_Simple_HTML_Field('QST_required_text', __('Text to Display if Not Provided', 'event_espresso'), true, ''),
191
+				'QST_order' => new EE_Integer_Field('QST_order', __('Question Order', 'event_espresso'), false, 0),
192
+				'QST_admin_only' => new EE_Boolean_Field('QST_admin_only', __('Admin-Only Question?', 'event_espresso'), false, false),
193
+				'QST_max' => new EE_Infinite_Integer_Field('QST_max', __('Max Size', 'event_espresso'), false, EE_INF),
194
+				'QST_wp_user' => new EE_WP_User_Field('QST_wp_user', __('Question Creator ID', 'event_espresso'), false),
195
+				'QST_deleted' => new EE_Trashed_Flag_Field('QST_deleted', __('Flag Indicating question was deleted', 'event_espresso'), false, false)
196
+			)
197
+		);
198
+		$this->_model_relations = array(
199
+			'Question_Group' => new EE_HABTM_Relation('Question_Group_Question'),
200
+			'Question_Option' => new EE_Has_Many_Relation(),
201
+			'Answer' => new EE_Has_Many_Relation(),
202
+			'WP_User' => new EE_Belongs_To_Relation(),
203
+			//for QST_order column
204
+			'Question_Group_Question' => new EE_Has_Many_Relation()
205
+		);
206
+		//this model is generally available for reading
207
+		$this->_cap_restriction_generators[EEM_Base::caps_read] = new EE_Restriction_Generator_Public();
208
+		$this->_cap_restriction_generators[EEM_Base::caps_read_admin] = new EE_Restriction_Generator_Reg_Form('QST_system');
209
+		$this->_cap_restriction_generators[EEM_Base::caps_edit] = new EE_Restriction_Generator_Reg_Form('QST_system');
210
+		$this->_cap_restriction_generators[EEM_Base::caps_delete] = new EE_Restriction_Generator_Reg_Form('QST_system');
211
+		parent::__construct($timezone);
212
+	}
213
+
214
+	/**
215
+	 * Returns the list of allowed question types, which are normally: 'TEXT','TEXTAREA','RADIO_BTN','DROPDOWN','CHECKBOX','DATE'
216
+	 * but they can be extended
217
+	 * @return string[]
218
+	 */
219
+	public function allowed_question_types()
220
+	{
221
+		return $this->_allowed_question_types;
222
+	}
223
+
224
+	/**
225
+	 * Gets all the question types in the same category
226
+	 * @param string $question_type one of EEM_Question::allowed_question_types(
227
+	 * @return string[] like EEM_Question::allowed_question_types()
228
+	 */
229
+	public function question_types_in_same_category($question_type)
230
+	{
231
+		$question_types = array($question_type);
232
+		foreach ($this->_question_type_categories as $category => $question_types_in_category) {
233
+			if (in_array($question_type, $question_types_in_category)) {
234
+				$question_types = $question_types_in_category;
235
+				break;
236
+			}
237
+		}
238
+
239
+		return array_intersect_key($this->allowed_question_types(), array_flip($question_types));
240
+	}
241
+
242
+	/**
243
+	 * Determines if the given question type is in the given question type category
244
+	 * @param string $question_type one of EEM_Question::allowed_question_types()
245
+	 * @param string $category one of the top-level keys of EEM_Question::question_type_categories()
246
+	 * @return boolean
247
+	 */
248
+	public function question_type_is_in_category($question_type, $category)
249
+	{
250
+		if (!isset($this->_question_type_categories[$category])) {
251
+			return false;
252
+		}
253
+		return in_array($question_type, $this->_question_type_categories[$category]);
254
+	}
255
+
256
+
257
+	/**
258
+	 * Returns all the question types in the given category
259
+	 * @param string $category
260
+	 * @return array|mixed
261
+	 */
262
+	public function question_types_in_category($category)
263
+	{
264
+		if (isset($this->_question_type_categories[$category])) {
265
+			return $this->_question_type_categories[$category];
266
+		}
267
+		return array();
268
+	}
269
+
270
+
271
+	/**
272
+	 * Returns all the question types that should have question options
273
+	 * @return array
274
+	 */
275
+	public function question_types_with_options()
276
+	{
277
+		return array_merge(
278
+			$this->question_types_in_category('single-answer-enum'),
279
+			$this->question_types_in_category('multi-answer-enum')
280
+		);
281
+	}
282
+
283
+	/**
284
+	 * Returns the question type categories 2d array
285
+	 * @return array see EEM_Question::_question_type_categories
286
+	 */
287
+	public function question_type_categories()
288
+	{
289
+		return $this->_question_type_categories;
290
+	}
291
+
292
+	/**
293
+	 * Returns an array of all the QST_system values that can be allowed in the system question group
294
+	 * identified by $system_question_group_id
295
+	 * @param string $system_question_group_id QSG_system
296
+	 * @return array of system question names (QST_system)
297
+	 */
298
+	public function allowed_system_questions_in_system_question_group($system_question_group_id)
299
+	{
300
+		$question_system_ids = array();
301
+		switch ($system_question_group_id) {
302
+			case EEM_Question_Group::system_personal:
303
+				$question_system_ids = array(
304
+					EEM_Attendee::system_question_fname,
305
+					EEM_Attendee::system_question_lname,
306
+					EEM_Attendee::system_question_email,
307
+					EEM_Attendee::system_question_phone
308
+				);
309
+				break;
310
+			case EEM_Question_Group::system_address:
311
+				$question_system_ids = array(
312
+					EEM_Attendee::system_question_address,
313
+					EEM_Attendee::system_question_address2,
314
+					EEM_Attendee::system_question_city,
315
+					EEM_Attendee::system_question_state,
316
+					EEM_Attendee::system_question_country,
317
+					EEM_Attendee::system_question_zip,
318
+					EEM_Attendee::system_question_phone
319
+				);
320
+				break;
321
+		}
322
+		return apply_filters('FHEE__EEM_Question__system_questions_allowed_in_system_question_group__return', $question_system_ids, $system_question_group_id);
323
+	}
324
+
325
+	/**
326
+	 * Returns an array of all the QST_system values that are required in the system question group
327
+	 * identified by $system_question_group_id
328
+	 * @param string $system_question_group_id QSG_system
329
+	 * @return array of system question names (QST_system)
330
+	 */
331
+	public function required_system_questions_in_system_question_group($system_question_group_id)
332
+	{
333
+		$question_system_ids = null;
334
+		switch ($system_question_group_id) {
335
+			case EEM_Question_Group::system_personal:
336
+				$question_system_ids = array(
337
+					EEM_Attendee::system_question_fname,
338
+					EEM_Attendee::system_question_email,
339
+				);
340
+				break;
341
+			default:
342
+				$question_system_ids = array();
343
+		}
344
+		return apply_filters('FHEE__EEM_Question__system_questions_required_in_system_question_group', $question_system_ids, $system_question_group_id);
345
+	}
346
+
347
+
348
+	/**
349
+	 * Gets an array for converting between QST_system and QST_IDs for system questions. Eg, if you want to know
350
+	 * which system question QST_ID corresponds to the QST_system 'city', use EEM_Question::instance()->get_Question_ID_from_system_string('city');
351
+	 * @param $QST_system
352
+	 * @return int of QST_ID for the question that corresponds to that QST_system
353
+	 */
354
+	public function get_Question_ID_from_system_string($QST_system)
355
+	{
356
+		return $this->get_var(array(array('QST_system' => $QST_system)));
357
+	}
358
+
359
+
360
+	/**
361
+	 * searches the db for the question with the latest question order and returns that value.
362
+	 * @access public
363
+	 * @return int
364
+	 */
365
+	public function get_latest_question_order()
366
+	{
367
+		$columns_to_select = array(
368
+			'max_order' => array("MAX(QST_order)", "%d")
369
+		);
370
+		$max = $this->_get_all_wpdb_results(array(), ARRAY_A, $columns_to_select);
371
+		return isset($max[0], $max[0]['max_order']) ? $max[0]['max_order'] : 0;
372
+	}
373
+
374
+	/**
375
+	 * Returns an array where keys are system question QST_system values,
376
+	 * and values are the highest question max the admin can set on the question
377
+	 * (aka the "max max"; eg, a site admin can change the zip question to have a max
378
+	 * of 5, but no larger than 12)
379
+	 * @return array
380
+	 */
381
+	public function system_question_maxes()
382
+	{
383
+		return array(
384
+			'fname' => 45,
385
+			'lname' => 45,
386
+			'address' => 255,
387
+			'address2' => 255,
388
+			'city' => 45,
389
+			'zip' => 12,
390
+			'email' => 255,
391
+			'phone' => 45,
392
+		);
393
+	}
394
+
395
+	/**
396
+	 * Given a QST_system value, gets the question's largest allowable max input.
397
+	 * @see Registration_Form_Admin_Page::system_question_maxes()
398
+	 * @param string $system_question_value
399
+	 * @return int|float
400
+	 */
401
+	public function absolute_max_for_system_question($system_question_value)
402
+	{
403
+		$maxes = $this->system_question_maxes();
404
+		if (isset($maxes[$system_question_value])) {
405
+			return $maxes[$system_question_value];
406
+		} else {
407
+			return EE_INF;
408
+		}
409
+	}
410
+
411
+
412
+	/**
413
+	 * @return array
414
+	 */
415
+	public function question_descriptions()
416
+	{
417
+		return $this->_question_descriptions;
418
+	}
419 419
 
420 420
 
421 421
 }
Please login to merge, or discard this patch.
Spacing   +5 added lines, -5 removed lines patch added patch discarded remove patch
@@ -1,8 +1,8 @@  discard block
 block discarded – undo
1
-<?php if (!defined('EVENT_ESPRESSO_VERSION')) {
1
+<?php if ( ! defined('EVENT_ESPRESSO_VERSION')) {
2 2
     exit('No direct script access allowed');
3 3
 }
4
-require_once(EE_MODELS . 'EEM_Soft_Delete_Base.model.php');
5
-require_once(EE_CLASSES . 'EE_Question.class.php');
4
+require_once(EE_MODELS.'EEM_Soft_Delete_Base.model.php');
5
+require_once(EE_CLASSES.'EE_Question.class.php');
6 6
 
7 7
 
8 8
 /**
@@ -150,7 +150,7 @@  discard block
 block discarded – undo
150 150
                 EEM_Question::QST_type_multi_select => __('A dropdown that allows multiple selections', 'event_espresso')
151 151
             )
152 152
         );
153
-        $this->_question_type_categories = (array)apply_filters(
153
+        $this->_question_type_categories = (array) apply_filters(
154 154
             'FHEE__EEM_Question__construct__question_type_categories',
155 155
             array(
156 156
                 'text' => array(
@@ -247,7 +247,7 @@  discard block
 block discarded – undo
247 247
      */
248 248
     public function question_type_is_in_category($question_type, $category)
249 249
     {
250
-        if (!isset($this->_question_type_categories[$category])) {
250
+        if ( ! isset($this->_question_type_categories[$category])) {
251 251
             return false;
252 252
         }
253 253
         return in_array($question_type, $this->_question_type_categories[$category]);
Please login to merge, or discard this patch.
admin_pages/messages/Messages_Admin_Page.core.php 1 patch
Indentation   +4081 added lines, -4081 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,1863 +2583,1863 @@  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
-                $validates = $MTPG->validate($this->_req_data['MTP_template_fields'], $context_slug, $messenger_slug,
2712
-                    $message_type_slug);
2709
+			} else {
2710
+				//first validate all fields!
2711
+				$validates = $MTPG->validate($this->_req_data['MTP_template_fields'], $context_slug, $messenger_slug,
2712
+					$message_type_slug);
2713 2713
                 
2714
-                //if $validate returned error messages (i.e. is_array()) then we need to process them and setup an
2715
-                // appropriate response. HMM, dang this isn't correct, $validates will ALWAYS be an array.
2716
-                //  WE need to make sure there is no actual error messages in validates.
2717
-                if (is_array($validates) && ! empty($validates)) {
2718
-                    //add the transient so when the form loads we know which fields to highlight
2719
-                    $this->_add_transient('edit_message_template', $validates);
2714
+				//if $validate returned error messages (i.e. is_array()) then we need to process them and setup an
2715
+				// appropriate response. HMM, dang this isn't correct, $validates will ALWAYS be an array.
2716
+				//  WE need to make sure there is no actual error messages in validates.
2717
+				if (is_array($validates) && ! empty($validates)) {
2718
+					//add the transient so when the form loads we know which fields to highlight
2719
+					$this->_add_transient('edit_message_template', $validates);
2720 2720
                     
2721
-                    $success = 0;
2721
+					$success = 0;
2722 2722
                     
2723
-                    //setup notices
2724
-                    foreach ($validates as $field => $error) {
2725
-                        if (isset($error['msg'])) {
2726
-                            EE_Error::add_error($error['msg'], __FILE__, __FUNCTION__, __LINE__);
2727
-                        }
2728
-                    }
2723
+					//setup notices
2724
+					foreach ($validates as $field => $error) {
2725
+						if (isset($error['msg'])) {
2726
+							EE_Error::add_error($error['msg'], __FILE__, __FUNCTION__, __LINE__);
2727
+						}
2728
+					}
2729 2729
                     
2730
-                } else {
2731
-                    $set_column_values = array();
2732
-                    foreach ($this->_req_data['MTP_template_fields'] as $template_field => $content) {
2733
-                        $set_column_values = $this->_set_message_template_column_values($template_field);
2730
+				} else {
2731
+					$set_column_values = array();
2732
+					foreach ($this->_req_data['MTP_template_fields'] as $template_field => $content) {
2733
+						$set_column_values = $this->_set_message_template_column_values($template_field);
2734 2734
                         
2735
-                        $where_cols_n_values = array(
2736
-                            'MTP_ID' => $this->_req_data['MTP_template_fields'][$template_field]['MTP_ID']
2737
-                        );
2738
-                        //if they aren't allowed to use all JS, restrict them to just posty-y tags
2739
-                        if (! current_user_can('unfiltered_html')){
2740
-                            if (is_array($set_column_values['MTP_content'])){
2741
-                                 foreach($set_column_values['MTP_content'] as $key => $value) {
2742
-                                     //remove slashes so wp_kses works properly (its wp_kses_stripslashes() function
2743
-                                     //only removes slashes from double-quotes, so attributes using single quotes always
2744
-                                     //appear invalid.) But currently the models expect slashed data, so after wp_kses
2745
-                                     //runs we need to re-slash the data. Sheesh. See
2746
-                                     //https://events.codebasehq.com/projects/event-espresso/tickets/11211#update-47321587
2747
-                                     $set_column_values['MTP_content'][$key] = addslashes(
2748
-                                             wp_kses(
2749
-                                                 stripslashes($value),
2750
-                                                 wp_kses_allowed_html('post')
2751
-                                             )
2752
-                                     );
2753
-                                 }
2754
-                            } else {
2755
-                                $set_column_values['MTP_content'] = wp_kses(
2756
-                                    $set_column_values['MTP_content'],
2757
-                                    wp_kses_allowed_html('post')
2758
-                                );
2759
-                            }
2760
-                        }
2761
-                        $message_template_fields = array(
2762
-                            'GRP_ID'             => $set_column_values['GRP_ID'],
2763
-                            'MTP_template_field' => $set_column_values['MTP_template_field'],
2764
-                            'MTP_context'        => $set_column_values['MTP_context'],
2765
-                            'MTP_content'        => $set_column_values['MTP_content']
2766
-                        );
2767
-                        if ($updated = $MTP->update($message_template_fields, array($where_cols_n_values))) {
2768
-                            if ($updated === false) {
2769
-                                EE_Error::add_error(
2770
-                                    sprintf(
2771
-                                        esc_html__('%s field was NOT updated for some reason', 'event_espresso'),
2772
-                                        $template_field
2773
-                                    ),
2774
-                                    __FILE__,
2775
-                                    __FUNCTION__,
2776
-                                    __LINE__
2777
-                                );
2778
-                            } else {
2779
-                                $success = 1;
2780
-                            }
2781
-                        } else {
2782
-                            //only do this logic if we don't have a MTP_ID for this field
2783
-                            if (empty($this->_req_data['MTP_template_fields'][$template_field]['MTP_ID'])) {
2784
-                                //this has already been through the template field validator and sanitized, so it will be
2785
-                                //safe to insert this field.  Why insert?  This typically happens when we introduce a new
2786
-                                //message template field in a messenger/message type and existing users don't have the
2787
-                                //default setup for it.
2788
-                                //@link https://events.codebasehq.com/projects/event-espresso/tickets/9465
2789
-                                $updated = $MTP->insert($message_template_fields);
2790
-                                if (! $updated || is_wp_error($updated)) {
2791
-                                    EE_Error::add_error(
2792
-                                        sprintf(
2793
-                                            esc_html__('%s field could not be updated.', 'event_espresso'),
2794
-                                            $template_field
2795
-                                        ),
2796
-                                        __FILE__,
2797
-                                        __FUNCTION__,
2798
-                                        __LINE__
2799
-                                    );
2800
-                                    $success = 0;
2801
-                                } else {
2802
-                                    $success = 1;
2803
-                                }
2804
-                            }
2805
-                        }
2806
-                        $action_desc = 'updated';
2807
-                    }
2735
+						$where_cols_n_values = array(
2736
+							'MTP_ID' => $this->_req_data['MTP_template_fields'][$template_field]['MTP_ID']
2737
+						);
2738
+						//if they aren't allowed to use all JS, restrict them to just posty-y tags
2739
+						if (! current_user_can('unfiltered_html')){
2740
+							if (is_array($set_column_values['MTP_content'])){
2741
+								 foreach($set_column_values['MTP_content'] as $key => $value) {
2742
+									 //remove slashes so wp_kses works properly (its wp_kses_stripslashes() function
2743
+									 //only removes slashes from double-quotes, so attributes using single quotes always
2744
+									 //appear invalid.) But currently the models expect slashed data, so after wp_kses
2745
+									 //runs we need to re-slash the data. Sheesh. See
2746
+									 //https://events.codebasehq.com/projects/event-espresso/tickets/11211#update-47321587
2747
+									 $set_column_values['MTP_content'][$key] = addslashes(
2748
+											 wp_kses(
2749
+												 stripslashes($value),
2750
+												 wp_kses_allowed_html('post')
2751
+											 )
2752
+									 );
2753
+								 }
2754
+							} else {
2755
+								$set_column_values['MTP_content'] = wp_kses(
2756
+									$set_column_values['MTP_content'],
2757
+									wp_kses_allowed_html('post')
2758
+								);
2759
+							}
2760
+						}
2761
+						$message_template_fields = array(
2762
+							'GRP_ID'             => $set_column_values['GRP_ID'],
2763
+							'MTP_template_field' => $set_column_values['MTP_template_field'],
2764
+							'MTP_context'        => $set_column_values['MTP_context'],
2765
+							'MTP_content'        => $set_column_values['MTP_content']
2766
+						);
2767
+						if ($updated = $MTP->update($message_template_fields, array($where_cols_n_values))) {
2768
+							if ($updated === false) {
2769
+								EE_Error::add_error(
2770
+									sprintf(
2771
+										esc_html__('%s field was NOT updated for some reason', 'event_espresso'),
2772
+										$template_field
2773
+									),
2774
+									__FILE__,
2775
+									__FUNCTION__,
2776
+									__LINE__
2777
+								);
2778
+							} else {
2779
+								$success = 1;
2780
+							}
2781
+						} else {
2782
+							//only do this logic if we don't have a MTP_ID for this field
2783
+							if (empty($this->_req_data['MTP_template_fields'][$template_field]['MTP_ID'])) {
2784
+								//this has already been through the template field validator and sanitized, so it will be
2785
+								//safe to insert this field.  Why insert?  This typically happens when we introduce a new
2786
+								//message template field in a messenger/message type and existing users don't have the
2787
+								//default setup for it.
2788
+								//@link https://events.codebasehq.com/projects/event-espresso/tickets/9465
2789
+								$updated = $MTP->insert($message_template_fields);
2790
+								if (! $updated || is_wp_error($updated)) {
2791
+									EE_Error::add_error(
2792
+										sprintf(
2793
+											esc_html__('%s field could not be updated.', 'event_espresso'),
2794
+											$template_field
2795
+										),
2796
+										__FILE__,
2797
+										__FUNCTION__,
2798
+										__LINE__
2799
+									);
2800
+									$success = 0;
2801
+								} else {
2802
+									$success = 1;
2803
+								}
2804
+							}
2805
+						}
2806
+						$action_desc = 'updated';
2807
+					}
2808 2808
                     
2809
-                    //we can use the last set_column_values for the MTPG update (because its the same for all of these specific MTPs)
2810
-                    $mtpg_fields = array(
2811
-                        'MTP_user_id'      => $set_column_values['MTP_user_id'],
2812
-                        'MTP_messenger'    => $set_column_values['MTP_messenger'],
2813
-                        'MTP_message_type' => $set_column_values['MTP_message_type'],
2814
-                        'MTP_is_global'    => $set_column_values['MTP_is_global'],
2815
-                        'MTP_is_override'  => $set_column_values['MTP_is_override'],
2816
-                        'MTP_deleted'      => $set_column_values['MTP_deleted'],
2817
-                        'MTP_is_active'    => $set_column_values['MTP_is_active'],
2818
-                        'MTP_name'         => ! empty($this->_req_data['ee_msg_non_global_fields']['MTP_name'])
2819
-                            ? $this->_req_data['ee_msg_non_global_fields']['MTP_name']
2820
-                            : '',
2821
-                        'MTP_description'  => ! empty($this->_req_data['ee_msg_non_global_fields']['MTP_description'])
2822
-                            ? $this->_req_data['ee_msg_non_global_fields']['MTP_description']
2823
-                            : ''
2824
-                    );
2809
+					//we can use the last set_column_values for the MTPG update (because its the same for all of these specific MTPs)
2810
+					$mtpg_fields = array(
2811
+						'MTP_user_id'      => $set_column_values['MTP_user_id'],
2812
+						'MTP_messenger'    => $set_column_values['MTP_messenger'],
2813
+						'MTP_message_type' => $set_column_values['MTP_message_type'],
2814
+						'MTP_is_global'    => $set_column_values['MTP_is_global'],
2815
+						'MTP_is_override'  => $set_column_values['MTP_is_override'],
2816
+						'MTP_deleted'      => $set_column_values['MTP_deleted'],
2817
+						'MTP_is_active'    => $set_column_values['MTP_is_active'],
2818
+						'MTP_name'         => ! empty($this->_req_data['ee_msg_non_global_fields']['MTP_name'])
2819
+							? $this->_req_data['ee_msg_non_global_fields']['MTP_name']
2820
+							: '',
2821
+						'MTP_description'  => ! empty($this->_req_data['ee_msg_non_global_fields']['MTP_description'])
2822
+							? $this->_req_data['ee_msg_non_global_fields']['MTP_description']
2823
+							: ''
2824
+					);
2825 2825
                     
2826
-                    $mtpg_where = array('GRP_ID' => $set_column_values['GRP_ID']);
2827
-                    $updated    = $MTPG->update($mtpg_fields, array($mtpg_where));
2826
+					$mtpg_where = array('GRP_ID' => $set_column_values['GRP_ID']);
2827
+					$updated    = $MTPG->update($mtpg_fields, array($mtpg_where));
2828 2828
                     
2829
-                    if ($updated === false) {
2830
-                        EE_Error::add_error(
2831
-                            sprintf(
2832
-                                esc_html__(
2833
-                                    'The Message Template Group (%d) was NOT updated for some reason',
2834
-                                    'event_espresso'
2835
-                                ),
2836
-                                $set_column_values['GRP_ID']
2837
-                            ),
2838
-                            __FILE__,
2839
-                            __FUNCTION__,
2840
-                            __LINE__
2841
-                        );
2842
-                    } else {
2843
-                        //k now we need to ensure the template_pack and template_variation fields are set.
2844
-                        $template_pack = ! empty($this->_req_data['MTP_template_pack'])
2845
-                            ? $this->_req_data['MTP_template_pack']
2846
-                            : 'default';
2829
+					if ($updated === false) {
2830
+						EE_Error::add_error(
2831
+							sprintf(
2832
+								esc_html__(
2833
+									'The Message Template Group (%d) was NOT updated for some reason',
2834
+									'event_espresso'
2835
+								),
2836
+								$set_column_values['GRP_ID']
2837
+							),
2838
+							__FILE__,
2839
+							__FUNCTION__,
2840
+							__LINE__
2841
+						);
2842
+					} else {
2843
+						//k now we need to ensure the template_pack and template_variation fields are set.
2844
+						$template_pack = ! empty($this->_req_data['MTP_template_pack'])
2845
+							? $this->_req_data['MTP_template_pack']
2846
+							: 'default';
2847 2847
                         
2848
-                        $template_variation = ! empty($this->_req_data['MTP_template_variation'])
2849
-                            ? $this->_req_data['MTP_template_variation']
2850
-                            : 'default';
2848
+						$template_variation = ! empty($this->_req_data['MTP_template_variation'])
2849
+							? $this->_req_data['MTP_template_variation']
2850
+							: 'default';
2851 2851
                         
2852
-                        $mtpg_obj = $MTPG->get_one_by_ID($set_column_values['GRP_ID']);
2853
-                        if ($mtpg_obj instanceof EE_Message_Template_Group) {
2854
-                            $mtpg_obj->set_template_pack_name($template_pack);
2855
-                            $mtpg_obj->set_template_pack_variation($template_variation);
2856
-                        }
2857
-                        $success = 1;
2858
-                    }
2859
-                }
2860
-            }
2852
+						$mtpg_obj = $MTPG->get_one_by_ID($set_column_values['GRP_ID']);
2853
+						if ($mtpg_obj instanceof EE_Message_Template_Group) {
2854
+							$mtpg_obj->set_template_pack_name($template_pack);
2855
+							$mtpg_obj->set_template_pack_variation($template_variation);
2856
+						}
2857
+						$success = 1;
2858
+					}
2859
+				}
2860
+			}
2861 2861
             
2862
-        }
2863
-        
2864
-        //we return things differently if doing ajax
2865
-        if (defined('DOING_AJAX') && DOING_AJAX) {
2866
-            $this->_template_args['success'] = $success;
2867
-            $this->_template_args['error']   = ! $success ? true : false;
2868
-            $this->_template_args['content'] = '';
2869
-            $this->_template_args['data']    = array(
2870
-                'grpID'        => $edit_array['GRP_ID'],
2871
-                'templateName' => $edit_array['template_name']
2872
-            );
2873
-            if ($success) {
2874
-                EE_Error::overwrite_success();
2875
-                EE_Error::add_success(
2876
-                    esc_html__(
2877
-                        '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.',
2878
-                        'event_espresso'
2879
-                    )
2880
-                );
2881
-            }
2862
+		}
2863
+        
2864
+		//we return things differently if doing ajax
2865
+		if (defined('DOING_AJAX') && DOING_AJAX) {
2866
+			$this->_template_args['success'] = $success;
2867
+			$this->_template_args['error']   = ! $success ? true : false;
2868
+			$this->_template_args['content'] = '';
2869
+			$this->_template_args['data']    = array(
2870
+				'grpID'        => $edit_array['GRP_ID'],
2871
+				'templateName' => $edit_array['template_name']
2872
+			);
2873
+			if ($success) {
2874
+				EE_Error::overwrite_success();
2875
+				EE_Error::add_success(
2876
+					esc_html__(
2877
+						'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.',
2878
+						'event_espresso'
2879
+					)
2880
+				);
2881
+			}
2882 2882
             
2883
-            $this->_return_json();
2884
-        }
2885
-        
2886
-        
2887
-        //was a test send triggered?
2888
-        if (isset($this->_req_data['test_button'])) {
2889
-            EE_Error::overwrite_success();
2890
-            $this->_do_test_send($context_slug, $messenger_slug, $message_type_slug);
2891
-            $override = true;
2892
-        }
2893
-        
2894
-        if (empty($query_args)) {
2895
-            $query_args = array(
2896
-                'id'      => $this->_req_data['GRP_ID'],
2897
-                'context' => $context_slug,
2898
-                'action'  => 'edit_message_template'
2899
-            );
2900
-        }
2901
-        
2902
-        $this->_redirect_after_action($success, $item_desc, $action_desc, $query_args, $override);
2903
-    }
2883
+			$this->_return_json();
2884
+		}
2885
+        
2886
+        
2887
+		//was a test send triggered?
2888
+		if (isset($this->_req_data['test_button'])) {
2889
+			EE_Error::overwrite_success();
2890
+			$this->_do_test_send($context_slug, $messenger_slug, $message_type_slug);
2891
+			$override = true;
2892
+		}
2893
+        
2894
+		if (empty($query_args)) {
2895
+			$query_args = array(
2896
+				'id'      => $this->_req_data['GRP_ID'],
2897
+				'context' => $context_slug,
2898
+				'action'  => 'edit_message_template'
2899
+			);
2900
+		}
2901
+        
2902
+		$this->_redirect_after_action($success, $item_desc, $action_desc, $query_args, $override);
2903
+	}
2904 2904
 
2905 2905
 
2906
-    /**
2907
-     * processes a test send request to do an actual messenger delivery test for the given message template being tested
2908
-     *
2909
-     * @param  string $context      what context being tested
2910
-     * @param  string $messenger    messenger being tested
2911
-     * @param  string $message_type message type being tested
2912
-     * @throws EE_Error
2913
-     * @throws InvalidArgumentException
2914
-     * @throws InvalidDataTypeException
2915
-     * @throws InvalidInterfaceException
2916
-     */
2917
-    protected function _do_test_send($context, $messenger, $message_type)
2918
-    {
2919
-        //set things up for preview
2920
-        $this->_req_data['messenger']    = $messenger;
2921
-        $this->_req_data['message_type'] = $message_type;
2922
-        $this->_req_data['context']      = $context;
2923
-        $this->_req_data['GRP_ID']       = isset($this->_req_data['GRP_ID']) ? $this->_req_data['GRP_ID'] : '';
2924
-        $active_messenger                = $this->_message_resource_manager->get_active_messenger($messenger);
2925
-        
2926
-        //let's save any existing fields that might be required by the messenger
2927
-        if (
2928
-            isset($this->_req_data['test_settings_fld'])
2929
-            && $active_messenger instanceof EE_messenger
2930
-            && apply_filters(
2931
-                'FHEE__Messages_Admin_Page__do_test_send__set_existing_test_settings',
2932
-                true,
2933
-                $this->_req_data['test_settings_fld'],
2934
-                $active_messenger
2935
-            )
2936
-        ) {
2937
-            $active_messenger->set_existing_test_settings($this->_req_data['test_settings_fld']);
2938
-        }
2939
-        
2940
-        $success = $this->_preview_message(true);
2941
-        
2942
-        if ($success) {
2943
-            EE_Error::add_success(__('Test message sent', 'event_espresso'));
2944
-        } else {
2945
-            EE_Error::add_error(
2946
-                esc_html__('The test message was not sent', 'event_espresso'),
2947
-                __FILE__,
2948
-                __FUNCTION__,
2949
-                __LINE__
2950
-            );
2951
-        }
2952
-    }
2906
+	/**
2907
+	 * processes a test send request to do an actual messenger delivery test for the given message template being tested
2908
+	 *
2909
+	 * @param  string $context      what context being tested
2910
+	 * @param  string $messenger    messenger being tested
2911
+	 * @param  string $message_type message type being tested
2912
+	 * @throws EE_Error
2913
+	 * @throws InvalidArgumentException
2914
+	 * @throws InvalidDataTypeException
2915
+	 * @throws InvalidInterfaceException
2916
+	 */
2917
+	protected function _do_test_send($context, $messenger, $message_type)
2918
+	{
2919
+		//set things up for preview
2920
+		$this->_req_data['messenger']    = $messenger;
2921
+		$this->_req_data['message_type'] = $message_type;
2922
+		$this->_req_data['context']      = $context;
2923
+		$this->_req_data['GRP_ID']       = isset($this->_req_data['GRP_ID']) ? $this->_req_data['GRP_ID'] : '';
2924
+		$active_messenger                = $this->_message_resource_manager->get_active_messenger($messenger);
2925
+        
2926
+		//let's save any existing fields that might be required by the messenger
2927
+		if (
2928
+			isset($this->_req_data['test_settings_fld'])
2929
+			&& $active_messenger instanceof EE_messenger
2930
+			&& apply_filters(
2931
+				'FHEE__Messages_Admin_Page__do_test_send__set_existing_test_settings',
2932
+				true,
2933
+				$this->_req_data['test_settings_fld'],
2934
+				$active_messenger
2935
+			)
2936
+		) {
2937
+			$active_messenger->set_existing_test_settings($this->_req_data['test_settings_fld']);
2938
+		}
2939
+        
2940
+		$success = $this->_preview_message(true);
2941
+        
2942
+		if ($success) {
2943
+			EE_Error::add_success(__('Test message sent', 'event_espresso'));
2944
+		} else {
2945
+			EE_Error::add_error(
2946
+				esc_html__('The test message was not sent', 'event_espresso'),
2947
+				__FILE__,
2948
+				__FUNCTION__,
2949
+				__LINE__
2950
+			);
2951
+		}
2952
+	}
2953 2953
     
2954 2954
     
2955
-    /**
2956
-     * _generate_new_templates
2957
-     * This will handle the messenger, message_type selection when "adding a new custom template" for an event and will
2958
-     * automatically create the defaults for the event.  The user would then be redirected to edit the default context
2959
-     * for the event.
2960
-     *
2961
-     *
2962
-     * @param  string $messenger     the messenger we are generating templates for
2963
-     * @param array   $message_types array of message types that the templates are generated for.
2964
-     * @param int     $GRP_ID        If this is a custom template being generated then a GRP_ID needs to be included to
2965
-     *                               indicate the message_template_group being used as the base.
2966
-     *
2967
-     * @param bool    $global
2968
-     *
2969
-     * @return array|bool array of data required for the redirect to the correct edit page or bool if
2970
-     *                               encountering problems.
2971
-     * @throws EE_Error
2972
-     */
2973
-    protected function _generate_new_templates($messenger, $message_types, $GRP_ID = 0, $global = false)
2974
-    {
2975
-        
2976
-        //if no $message_types are given then that's okay... this may be a messenger that just adds shortcodes, so we
2977
-        // just don't generate any templates.
2978
-        if (empty($message_types)) {
2979
-            return true;
2980
-        }
2981
-        
2982
-        return EEH_MSG_Template::generate_new_templates($messenger, $message_types, $GRP_ID, $global);
2983
-    }
2955
+	/**
2956
+	 * _generate_new_templates
2957
+	 * This will handle the messenger, message_type selection when "adding a new custom template" for an event and will
2958
+	 * automatically create the defaults for the event.  The user would then be redirected to edit the default context
2959
+	 * for the event.
2960
+	 *
2961
+	 *
2962
+	 * @param  string $messenger     the messenger we are generating templates for
2963
+	 * @param array   $message_types array of message types that the templates are generated for.
2964
+	 * @param int     $GRP_ID        If this is a custom template being generated then a GRP_ID needs to be included to
2965
+	 *                               indicate the message_template_group being used as the base.
2966
+	 *
2967
+	 * @param bool    $global
2968
+	 *
2969
+	 * @return array|bool array of data required for the redirect to the correct edit page or bool if
2970
+	 *                               encountering problems.
2971
+	 * @throws EE_Error
2972
+	 */
2973
+	protected function _generate_new_templates($messenger, $message_types, $GRP_ID = 0, $global = false)
2974
+	{
2975
+        
2976
+		//if no $message_types are given then that's okay... this may be a messenger that just adds shortcodes, so we
2977
+		// just don't generate any templates.
2978
+		if (empty($message_types)) {
2979
+			return true;
2980
+		}
2981
+        
2982
+		return EEH_MSG_Template::generate_new_templates($messenger, $message_types, $GRP_ID, $global);
2983
+	}
2984 2984
 
2985 2985
 
2986
-    /**
2987
-     * [_trash_or_restore_message_template]
2988
-     *
2989
-     * @param  boolean $trash whether to move an item to trash/restore (TRUE) or restore it (FALSE)
2990
-     * @param boolean  $all   whether this is going to trash/restore all contexts within a template group (TRUE) OR just
2991
-     *                        an individual context (FALSE).
2992
-     * @return void
2993
-     * @throws EE_Error
2994
-     * @throws InvalidArgumentException
2995
-     * @throws InvalidDataTypeException
2996
-     * @throws InvalidInterfaceException
2997
-     */
2998
-    protected function _trash_or_restore_message_template($trash = true, $all = false)
2999
-    {
3000
-        do_action('AHEE_log', __FILE__, __FUNCTION__, '');
3001
-        $MTP = EEM_Message_Template_Group::instance();
3002
-        
3003
-        $success = 1;
3004
-        
3005
-        //incoming GRP_IDs
3006
-        if ($all) {
3007
-            //Checkboxes
3008
-            if ( ! empty($this->_req_data['checkbox']) && is_array($this->_req_data['checkbox'])) {
3009
-                //if array has more than one element then success message should be plural.
3010
-                //todo: what about nonce?
3011
-                $success = count($this->_req_data['checkbox']) > 1 ? 2 : 1;
2986
+	/**
2987
+	 * [_trash_or_restore_message_template]
2988
+	 *
2989
+	 * @param  boolean $trash whether to move an item to trash/restore (TRUE) or restore it (FALSE)
2990
+	 * @param boolean  $all   whether this is going to trash/restore all contexts within a template group (TRUE) OR just
2991
+	 *                        an individual context (FALSE).
2992
+	 * @return void
2993
+	 * @throws EE_Error
2994
+	 * @throws InvalidArgumentException
2995
+	 * @throws InvalidDataTypeException
2996
+	 * @throws InvalidInterfaceException
2997
+	 */
2998
+	protected function _trash_or_restore_message_template($trash = true, $all = false)
2999
+	{
3000
+		do_action('AHEE_log', __FILE__, __FUNCTION__, '');
3001
+		$MTP = EEM_Message_Template_Group::instance();
3002
+        
3003
+		$success = 1;
3004
+        
3005
+		//incoming GRP_IDs
3006
+		if ($all) {
3007
+			//Checkboxes
3008
+			if ( ! empty($this->_req_data['checkbox']) && is_array($this->_req_data['checkbox'])) {
3009
+				//if array has more than one element then success message should be plural.
3010
+				//todo: what about nonce?
3011
+				$success = count($this->_req_data['checkbox']) > 1 ? 2 : 1;
3012 3012
                 
3013
-                //cycle through checkboxes
3014
-                while (list($GRP_ID, $value) = each($this->_req_data['checkbox'])) {
3015
-                    $trashed_or_restored = $trash ? $MTP->delete_by_ID($GRP_ID) : $MTP->restore_by_ID($GRP_ID);
3016
-                    if ( ! $trashed_or_restored) {
3017
-                        $success = 0;
3018
-                    }
3019
-                }
3020
-            } else {
3021
-                //grab single GRP_ID and handle
3022
-                $GRP_ID = isset($this->_req_data['id']) ? absint($this->_req_data['id']) : 0;
3023
-                if ( ! empty($GRP_ID)) {
3024
-                    $trashed_or_restored = $trash ? $MTP->delete_by_ID($GRP_ID) : $MTP->restore_by_ID($GRP_ID);
3025
-                    if ( ! $trashed_or_restored) {
3026
-                        $success = 0;
3027
-                    }
3028
-                } else {
3029
-                    $success = 0;
3030
-                }
3031
-            }
3013
+				//cycle through checkboxes
3014
+				while (list($GRP_ID, $value) = each($this->_req_data['checkbox'])) {
3015
+					$trashed_or_restored = $trash ? $MTP->delete_by_ID($GRP_ID) : $MTP->restore_by_ID($GRP_ID);
3016
+					if ( ! $trashed_or_restored) {
3017
+						$success = 0;
3018
+					}
3019
+				}
3020
+			} else {
3021
+				//grab single GRP_ID and handle
3022
+				$GRP_ID = isset($this->_req_data['id']) ? absint($this->_req_data['id']) : 0;
3023
+				if ( ! empty($GRP_ID)) {
3024
+					$trashed_or_restored = $trash ? $MTP->delete_by_ID($GRP_ID) : $MTP->restore_by_ID($GRP_ID);
3025
+					if ( ! $trashed_or_restored) {
3026
+						$success = 0;
3027
+					}
3028
+				} else {
3029
+					$success = 0;
3030
+				}
3031
+			}
3032 3032
             
3033
-        }
3033
+		}
3034 3034
         
3035
-        $action_desc = $trash
3036
-            ? esc_html__('moved to the trash', 'event_espresso')
3037
-            : esc_html__('restored', 'event_espresso');
3035
+		$action_desc = $trash
3036
+			? esc_html__('moved to the trash', 'event_espresso')
3037
+			: esc_html__('restored', 'event_espresso');
3038 3038
         
3039
-        $action_desc = ! empty($this->_req_data['template_switch']) ? esc_html__('switched') : $action_desc;
3039
+		$action_desc = ! empty($this->_req_data['template_switch']) ? esc_html__('switched') : $action_desc;
3040 3040
         
3041
-        $item_desc = $all ? _n('Message Template Group', 'Message Template Groups', $success,
3042
-            'event_espresso') : _n('Message Template Context', 'Message Template Contexts', $success, 'event_espresso');
3041
+		$item_desc = $all ? _n('Message Template Group', 'Message Template Groups', $success,
3042
+			'event_espresso') : _n('Message Template Context', 'Message Template Contexts', $success, 'event_espresso');
3043 3043
         
3044
-        $item_desc = ! empty($this->_req_data['template_switch']) ? _n('template', 'templates', $success,
3045
-            'event_espresso') : $item_desc;
3044
+		$item_desc = ! empty($this->_req_data['template_switch']) ? _n('template', 'templates', $success,
3045
+			'event_espresso') : $item_desc;
3046 3046
         
3047
-        $this->_redirect_after_action($success, $item_desc, $action_desc, array());
3047
+		$this->_redirect_after_action($success, $item_desc, $action_desc, array());
3048 3048
         
3049
-    }
3049
+	}
3050 3050
 
3051 3051
 
3052
-    /**
3053
-     * [_delete_message_template]
3054
-     * NOTE: this handles not only the deletion of the groups but also all the templates belonging to that group.
3055
-     *
3056
-     * @return void
3057
-     * @throws EE_Error
3058
-     * @throws InvalidArgumentException
3059
-     * @throws InvalidDataTypeException
3060
-     * @throws InvalidInterfaceException
3061
-     */
3062
-    protected function _delete_message_template()
3063
-    {
3064
-        do_action('AHEE_log', __FILE__, __FUNCTION__, '');
3065
-        
3066
-        //checkboxes
3067
-        if ( ! empty($this->_req_data['checkbox']) && is_array($this->_req_data['checkbox'])) {
3068
-            //if array has more than one element then success message should be plural
3069
-            $success = count($this->_req_data['checkbox']) > 1 ? 2 : 1;
3052
+	/**
3053
+	 * [_delete_message_template]
3054
+	 * NOTE: this handles not only the deletion of the groups but also all the templates belonging to that group.
3055
+	 *
3056
+	 * @return void
3057
+	 * @throws EE_Error
3058
+	 * @throws InvalidArgumentException
3059
+	 * @throws InvalidDataTypeException
3060
+	 * @throws InvalidInterfaceException
3061
+	 */
3062
+	protected function _delete_message_template()
3063
+	{
3064
+		do_action('AHEE_log', __FILE__, __FUNCTION__, '');
3065
+        
3066
+		//checkboxes
3067
+		if ( ! empty($this->_req_data['checkbox']) && is_array($this->_req_data['checkbox'])) {
3068
+			//if array has more than one element then success message should be plural
3069
+			$success = count($this->_req_data['checkbox']) > 1 ? 2 : 1;
3070 3070
             
3071
-            //cycle through bulk action checkboxes
3072
-            while (list($GRP_ID, $value) = each($this->_req_data['checkbox'])) {
3073
-                $success = $this->_delete_mtp_permanently($GRP_ID);
3074
-            }
3075
-        } else {
3076
-            //grab single grp_id and delete
3077
-            $GRP_ID  = absint($this->_req_data['id']);
3078
-            $success = $this->_delete_mtp_permanently($GRP_ID);
3079
-        }
3080
-        
3081
-        $this->_redirect_after_action($success, 'Message Templates', 'deleted', array());
3082
-        
3083
-    }
3071
+			//cycle through bulk action checkboxes
3072
+			while (list($GRP_ID, $value) = each($this->_req_data['checkbox'])) {
3073
+				$success = $this->_delete_mtp_permanently($GRP_ID);
3074
+			}
3075
+		} else {
3076
+			//grab single grp_id and delete
3077
+			$GRP_ID  = absint($this->_req_data['id']);
3078
+			$success = $this->_delete_mtp_permanently($GRP_ID);
3079
+		}
3080
+        
3081
+		$this->_redirect_after_action($success, 'Message Templates', 'deleted', array());
3082
+        
3083
+	}
3084 3084
 
3085 3085
 
3086
-    /**
3087
-     * helper for permanently deleting a mtP group and all related message_templates
3088
-     *
3089
-     * @param  int  $GRP_ID        The group being deleted
3090
-     * @param  bool $include_group whether to delete the Message Template Group as well.
3091
-     * @return bool boolean to indicate the success of the deletes or not.
3092
-     * @throws EE_Error
3093
-     * @throws InvalidArgumentException
3094
-     * @throws InvalidDataTypeException
3095
-     * @throws InvalidInterfaceException
3096
-     */
3097
-    private function _delete_mtp_permanently($GRP_ID, $include_group = true)
3098
-    {
3099
-        $success = 1;
3100
-        $MTPG    = EEM_Message_Template_Group::instance();
3101
-        //first let's GET this group
3102
-        $MTG = $MTPG->get_one_by_ID($GRP_ID);
3103
-        //then delete permanently all the related Message Templates
3104
-        $deleted = $MTG->delete_related_permanently('Message_Template');
3105
-        
3106
-        if ($deleted === 0) {
3107
-            $success = 0;
3108
-        }
3109
-        
3110
-        //now delete permanently this particular group
3111
-        
3112
-        if ($include_group && ! $MTG->delete_permanently()) {
3113
-            $success = 0;
3114
-        }
3115
-        
3116
-        return $success;
3117
-    }
3086
+	/**
3087
+	 * helper for permanently deleting a mtP group and all related message_templates
3088
+	 *
3089
+	 * @param  int  $GRP_ID        The group being deleted
3090
+	 * @param  bool $include_group whether to delete the Message Template Group as well.
3091
+	 * @return bool boolean to indicate the success of the deletes or not.
3092
+	 * @throws EE_Error
3093
+	 * @throws InvalidArgumentException
3094
+	 * @throws InvalidDataTypeException
3095
+	 * @throws InvalidInterfaceException
3096
+	 */
3097
+	private function _delete_mtp_permanently($GRP_ID, $include_group = true)
3098
+	{
3099
+		$success = 1;
3100
+		$MTPG    = EEM_Message_Template_Group::instance();
3101
+		//first let's GET this group
3102
+		$MTG = $MTPG->get_one_by_ID($GRP_ID);
3103
+		//then delete permanently all the related Message Templates
3104
+		$deleted = $MTG->delete_related_permanently('Message_Template');
3105
+        
3106
+		if ($deleted === 0) {
3107
+			$success = 0;
3108
+		}
3109
+        
3110
+		//now delete permanently this particular group
3111
+        
3112
+		if ($include_group && ! $MTG->delete_permanently()) {
3113
+			$success = 0;
3114
+		}
3115
+        
3116
+		return $success;
3117
+	}
3118 3118
     
3119 3119
     
3120
-    /**
3121
-     *    _learn_more_about_message_templates_link
3122
-     * @access protected
3123
-     * @return string
3124
-     */
3125
-    protected function _learn_more_about_message_templates_link()
3126
-    {
3127
-        return '<a class="hidden" style="margin:0 20px; cursor:pointer; font-size:12px;" >'
3128
-               . esc_html__('learn more about how message templates works', 'event_espresso')
3129
-               . '</a>';
3130
-    }
3120
+	/**
3121
+	 *    _learn_more_about_message_templates_link
3122
+	 * @access protected
3123
+	 * @return string
3124
+	 */
3125
+	protected function _learn_more_about_message_templates_link()
3126
+	{
3127
+		return '<a class="hidden" style="margin:0 20px; cursor:pointer; font-size:12px;" >'
3128
+			   . esc_html__('learn more about how message templates works', 'event_espresso')
3129
+			   . '</a>';
3130
+	}
3131 3131
 
3132 3132
 
3133
-    /**
3134
-     * Used for setting up messenger/message type activation.  This loads up the initial view.  The rest is handled by
3135
-     * ajax and other routes.
3136
-     *
3137
-     * @return void
3138
-     * @throws DomainException
3139
-     */
3140
-    protected function _settings()
3141
-    {
3142
-        
3143
-        
3144
-        $this->_set_m_mt_settings();
3145
-        
3146
-        $selected_messenger = isset($this->_req_data['selected_messenger'])
3147
-            ? $this->_req_data['selected_messenger']
3148
-            : 'email';
3149
-        
3150
-        //let's setup the messenger tabs
3151
-        $this->_template_args['admin_page_header']         = EEH_Tabbed_Content::tab_text_links(
3152
-            $this->_m_mt_settings['messenger_tabs'],
3153
-            'messenger_links',
3154
-            '|',
3155
-            $selected_messenger
3156
-        );
3157
-        $this->_template_args['before_admin_page_content'] = '<div class="ui-widget ui-helper-clearfix">';
3158
-        $this->_template_args['after_admin_page_content']  = '</div><!-- end .ui-widget -->';
3159
-        
3160
-        $this->display_admin_page_with_sidebar();
3161
-        
3162
-    }
3133
+	/**
3134
+	 * Used for setting up messenger/message type activation.  This loads up the initial view.  The rest is handled by
3135
+	 * ajax and other routes.
3136
+	 *
3137
+	 * @return void
3138
+	 * @throws DomainException
3139
+	 */
3140
+	protected function _settings()
3141
+	{
3142
+        
3143
+        
3144
+		$this->_set_m_mt_settings();
3145
+        
3146
+		$selected_messenger = isset($this->_req_data['selected_messenger'])
3147
+			? $this->_req_data['selected_messenger']
3148
+			: 'email';
3149
+        
3150
+		//let's setup the messenger tabs
3151
+		$this->_template_args['admin_page_header']         = EEH_Tabbed_Content::tab_text_links(
3152
+			$this->_m_mt_settings['messenger_tabs'],
3153
+			'messenger_links',
3154
+			'|',
3155
+			$selected_messenger
3156
+		);
3157
+		$this->_template_args['before_admin_page_content'] = '<div class="ui-widget ui-helper-clearfix">';
3158
+		$this->_template_args['after_admin_page_content']  = '</div><!-- end .ui-widget -->';
3159
+        
3160
+		$this->display_admin_page_with_sidebar();
3161
+        
3162
+	}
3163 3163
 
3164 3164
 
3165
-    /**
3166
-     * This sets the $_m_mt_settings property for when needed (used on the Messages settings page)
3167
-     *
3168
-     * @access protected
3169
-     * @return void
3170
-     * @throws DomainException
3171
-     */
3172
-    protected function _set_m_mt_settings()
3173
-    {
3174
-        //first if this is already set then lets get out no need to regenerate data.
3175
-        if ( ! empty($this->_m_mt_settings)) {
3176
-            return;
3177
-        }
3178
-        
3179
-        //get all installed messengers and message_types
3180
-        /** @type EE_messenger[] $messengers */
3181
-        $messengers = $this->_message_resource_manager->installed_messengers();
3182
-        /** @type EE_message_type[] $message_types */
3183
-        $message_types = $this->_message_resource_manager->installed_message_types();
3184
-        
3185
-        
3186
-        //assemble the array for the _tab_text_links helper
3187
-        
3188
-        foreach ($messengers as $messenger) {
3189
-            $this->_m_mt_settings['messenger_tabs'][$messenger->name] = array(
3190
-                'label' => ucwords($messenger->label['singular']),
3191
-                'class' => $this->_message_resource_manager->is_messenger_active($messenger->name)
3192
-                    ? 'messenger-active'
3193
-                    : '',
3194
-                'href'  => $messenger->name,
3195
-                'title' => esc_html__('Modify this Messenger', 'event_espresso'),
3196
-                'slug'  => $messenger->name,
3197
-                'obj'   => $messenger
3198
-            );
3165
+	/**
3166
+	 * This sets the $_m_mt_settings property for when needed (used on the Messages settings page)
3167
+	 *
3168
+	 * @access protected
3169
+	 * @return void
3170
+	 * @throws DomainException
3171
+	 */
3172
+	protected function _set_m_mt_settings()
3173
+	{
3174
+		//first if this is already set then lets get out no need to regenerate data.
3175
+		if ( ! empty($this->_m_mt_settings)) {
3176
+			return;
3177
+		}
3178
+        
3179
+		//get all installed messengers and message_types
3180
+		/** @type EE_messenger[] $messengers */
3181
+		$messengers = $this->_message_resource_manager->installed_messengers();
3182
+		/** @type EE_message_type[] $message_types */
3183
+		$message_types = $this->_message_resource_manager->installed_message_types();
3184
+        
3185
+        
3186
+		//assemble the array for the _tab_text_links helper
3187
+        
3188
+		foreach ($messengers as $messenger) {
3189
+			$this->_m_mt_settings['messenger_tabs'][$messenger->name] = array(
3190
+				'label' => ucwords($messenger->label['singular']),
3191
+				'class' => $this->_message_resource_manager->is_messenger_active($messenger->name)
3192
+					? 'messenger-active'
3193
+					: '',
3194
+				'href'  => $messenger->name,
3195
+				'title' => esc_html__('Modify this Messenger', 'event_espresso'),
3196
+				'slug'  => $messenger->name,
3197
+				'obj'   => $messenger
3198
+			);
3199 3199
             
3200 3200
             
3201
-            $message_types_for_messenger = $messenger->get_valid_message_types();
3201
+			$message_types_for_messenger = $messenger->get_valid_message_types();
3202 3202
             
3203
-            foreach ($message_types as $message_type) {
3204
-                //first we need to verify that this message type is valid with this messenger. Cause if it isn't then
3205
-                // it shouldn't show in either the inactive OR active metabox.
3206
-                if ( ! in_array($message_type->name, $message_types_for_messenger, true)) {
3207
-                    continue;
3208
-                }
3203
+			foreach ($message_types as $message_type) {
3204
+				//first we need to verify that this message type is valid with this messenger. Cause if it isn't then
3205
+				// it shouldn't show in either the inactive OR active metabox.
3206
+				if ( ! in_array($message_type->name, $message_types_for_messenger, true)) {
3207
+					continue;
3208
+				}
3209 3209
                 
3210
-                $a_or_i = $this->_message_resource_manager->is_message_type_active_for_messenger(
3211
-                    $messenger->name,
3212
-                    $message_type->name
3213
-                )
3214
-                    ? 'active'
3215
-                    : 'inactive';
3210
+				$a_or_i = $this->_message_resource_manager->is_message_type_active_for_messenger(
3211
+					$messenger->name,
3212
+					$message_type->name
3213
+				)
3214
+					? 'active'
3215
+					: 'inactive';
3216 3216
                 
3217
-                $this->_m_mt_settings['message_type_tabs'][$messenger->name][$a_or_i][$message_type->name] = array(
3218
-                    'label'    => ucwords($message_type->label['singular']),
3219
-                    'class'    => 'message-type-' . $a_or_i,
3220
-                    'slug_id'  => $message_type->name . '-messagetype-' . $messenger->name,
3221
-                    'mt_nonce' => wp_create_nonce($message_type->name . '_nonce'),
3222
-                    'href'     => 'espresso_' . $message_type->name . '_message_type_settings',
3223
-                    'title'    => $a_or_i === 'active'
3224
-                        ? esc_html__('Drag this message type to the Inactive window to deactivate', 'event_espresso')
3225
-                        : esc_html__('Drag this message type to the messenger to activate', 'event_espresso'),
3226
-                    'content'  => $a_or_i === 'active'
3227
-                        ? $this->_message_type_settings_content($message_type, $messenger, true)
3228
-                        : $this->_message_type_settings_content($message_type, $messenger),
3229
-                    'slug'     => $message_type->name,
3230
-                    'active'   => $a_or_i === 'active',
3231
-                    'obj'      => $message_type
3232
-                );
3233
-            }
3234
-        }
3235
-    }
3217
+				$this->_m_mt_settings['message_type_tabs'][$messenger->name][$a_or_i][$message_type->name] = array(
3218
+					'label'    => ucwords($message_type->label['singular']),
3219
+					'class'    => 'message-type-' . $a_or_i,
3220
+					'slug_id'  => $message_type->name . '-messagetype-' . $messenger->name,
3221
+					'mt_nonce' => wp_create_nonce($message_type->name . '_nonce'),
3222
+					'href'     => 'espresso_' . $message_type->name . '_message_type_settings',
3223
+					'title'    => $a_or_i === 'active'
3224
+						? esc_html__('Drag this message type to the Inactive window to deactivate', 'event_espresso')
3225
+						: esc_html__('Drag this message type to the messenger to activate', 'event_espresso'),
3226
+					'content'  => $a_or_i === 'active'
3227
+						? $this->_message_type_settings_content($message_type, $messenger, true)
3228
+						: $this->_message_type_settings_content($message_type, $messenger),
3229
+					'slug'     => $message_type->name,
3230
+					'active'   => $a_or_i === 'active',
3231
+					'obj'      => $message_type
3232
+				);
3233
+			}
3234
+		}
3235
+	}
3236 3236
 
3237 3237
 
3238
-    /**
3239
-     * This just prepares the content for the message type settings
3240
-     *
3241
-     * @param  EE_message_type  $message_type The message type object
3242
-     * @param  EE_messenger  $messenger    The messenger object
3243
-     * @param  boolean $active       Whether the message type is active or not
3244
-     * @return string html output for the content
3245
-     * @throws DomainException
3246
-     */
3247
-    protected function _message_type_settings_content($message_type, $messenger, $active = false)
3248
-    {
3249
-        //get message type fields
3250
-        $fields                                         = $message_type->get_admin_settings_fields();
3251
-        $settings_template_args['template_form_fields'] = '';
3252
-        
3253
-        if ( ! empty($fields) && $active) {
3238
+	/**
3239
+	 * This just prepares the content for the message type settings
3240
+	 *
3241
+	 * @param  EE_message_type  $message_type The message type object
3242
+	 * @param  EE_messenger  $messenger    The messenger object
3243
+	 * @param  boolean $active       Whether the message type is active or not
3244
+	 * @return string html output for the content
3245
+	 * @throws DomainException
3246
+	 */
3247
+	protected function _message_type_settings_content($message_type, $messenger, $active = false)
3248
+	{
3249
+		//get message type fields
3250
+		$fields                                         = $message_type->get_admin_settings_fields();
3251
+		$settings_template_args['template_form_fields'] = '';
3252
+        
3253
+		if ( ! empty($fields) && $active) {
3254 3254
             
3255
-            $existing_settings = $message_type->get_existing_admin_settings($messenger->name);
3255
+			$existing_settings = $message_type->get_existing_admin_settings($messenger->name);
3256 3256
             
3257
-            foreach ($fields as $fldname => $fldprops) {
3258
-                $field_id                       = $messenger->name . '-' . $message_type->name . '-' . $fldname;
3259
-                $template_form_field[$field_id] = array(
3260
-                    'name'       => 'message_type_settings[' . $fldname . ']',
3261
-                    'label'      => $fldprops['label'],
3262
-                    'input'      => $fldprops['field_type'],
3263
-                    'type'       => $fldprops['value_type'],
3264
-                    'required'   => $fldprops['required'],
3265
-                    'validation' => $fldprops['validation'],
3266
-                    'value'      => isset($existing_settings[$fldname])
3267
-                        ? $existing_settings[$fldname]
3268
-                        : $fldprops['default'],
3269
-                    'options'    => isset($fldprops['options'])
3270
-                        ? $fldprops['options']
3271
-                        : array(),
3272
-                    'default'    => isset($existing_settings[$fldname])
3273
-                        ? $existing_settings[$fldname]
3274
-                        : $fldprops['default'],
3275
-                    'css_class'  => 'no-drag',
3276
-                    'format'     => $fldprops['format']
3277
-                );
3278
-            }
3257
+			foreach ($fields as $fldname => $fldprops) {
3258
+				$field_id                       = $messenger->name . '-' . $message_type->name . '-' . $fldname;
3259
+				$template_form_field[$field_id] = array(
3260
+					'name'       => 'message_type_settings[' . $fldname . ']',
3261
+					'label'      => $fldprops['label'],
3262
+					'input'      => $fldprops['field_type'],
3263
+					'type'       => $fldprops['value_type'],
3264
+					'required'   => $fldprops['required'],
3265
+					'validation' => $fldprops['validation'],
3266
+					'value'      => isset($existing_settings[$fldname])
3267
+						? $existing_settings[$fldname]
3268
+						: $fldprops['default'],
3269
+					'options'    => isset($fldprops['options'])
3270
+						? $fldprops['options']
3271
+						: array(),
3272
+					'default'    => isset($existing_settings[$fldname])
3273
+						? $existing_settings[$fldname]
3274
+						: $fldprops['default'],
3275
+					'css_class'  => 'no-drag',
3276
+					'format'     => $fldprops['format']
3277
+				);
3278
+			}
3279 3279
             
3280 3280
             
3281
-            $settings_template_args['template_form_fields'] = ! empty($template_form_field)
3282
-                ? $this->_generate_admin_form_fields(
3283
-                    $template_form_field,
3284
-                    'string',
3285
-                    'ee_mt_activate_form'
3286
-                )
3287
-                : '';
3288
-        }
3289
-        
3290
-        $settings_template_args['description'] = $message_type->description;
3291
-        //we also need some hidden fields
3292
-        $settings_template_args['hidden_fields'] = array(
3293
-            'message_type_settings[messenger]'    => array(
3294
-                'type'  => 'hidden',
3295
-                'value' => $messenger->name
3296
-            ),
3297
-            'message_type_settings[message_type]' => array(
3298
-                'type'  => 'hidden',
3299
-                'value' => $message_type->name
3300
-            ),
3301
-            'type'                                => array(
3302
-                'type'  => 'hidden',
3303
-                'value' => 'message_type'
3304
-            )
3305
-        );
3306
-        
3307
-        $settings_template_args['hidden_fields'] = $this->_generate_admin_form_fields(
3308
-            $settings_template_args['hidden_fields'],
3309
-            'array'
3310
-        );
3311
-        $settings_template_args['show_form']     = empty($settings_template_args['template_form_fields'])
3312
-            ? ' hidden'
3313
-            : '';
3314
-        
3315
-        
3316
-        $template = EE_MSG_TEMPLATE_PATH . 'ee_msg_mt_settings_content.template.php';
3317
-        $content  = EEH_Template::display_template($template, $settings_template_args, true);
3318
-        
3319
-        return $content;
3320
-    }
3281
+			$settings_template_args['template_form_fields'] = ! empty($template_form_field)
3282
+				? $this->_generate_admin_form_fields(
3283
+					$template_form_field,
3284
+					'string',
3285
+					'ee_mt_activate_form'
3286
+				)
3287
+				: '';
3288
+		}
3289
+        
3290
+		$settings_template_args['description'] = $message_type->description;
3291
+		//we also need some hidden fields
3292
+		$settings_template_args['hidden_fields'] = array(
3293
+			'message_type_settings[messenger]'    => array(
3294
+				'type'  => 'hidden',
3295
+				'value' => $messenger->name
3296
+			),
3297
+			'message_type_settings[message_type]' => array(
3298
+				'type'  => 'hidden',
3299
+				'value' => $message_type->name
3300
+			),
3301
+			'type'                                => array(
3302
+				'type'  => 'hidden',
3303
+				'value' => 'message_type'
3304
+			)
3305
+		);
3306
+        
3307
+		$settings_template_args['hidden_fields'] = $this->_generate_admin_form_fields(
3308
+			$settings_template_args['hidden_fields'],
3309
+			'array'
3310
+		);
3311
+		$settings_template_args['show_form']     = empty($settings_template_args['template_form_fields'])
3312
+			? ' hidden'
3313
+			: '';
3314
+        
3315
+        
3316
+		$template = EE_MSG_TEMPLATE_PATH . 'ee_msg_mt_settings_content.template.php';
3317
+		$content  = EEH_Template::display_template($template, $settings_template_args, true);
3318
+        
3319
+		return $content;
3320
+	}
3321 3321
 
3322 3322
 
3323
-    /**
3324
-     * Generate all the metaboxes for the message types and register them for the messages settings page.
3325
-     *
3326
-     * @access protected
3327
-     * @return void
3328
-     * @throws DomainException
3329
-     */
3330
-    protected function _messages_settings_metaboxes()
3331
-    {
3332
-        $this->_set_m_mt_settings();
3333
-        $m_boxes         = $mt_boxes = array();
3334
-        $m_template_args = $mt_template_args = array();
3335
-        
3336
-        $selected_messenger = isset($this->_req_data['selected_messenger'])
3337
-            ? $this->_req_data['selected_messenger']
3338
-            : 'email';
3339
-        
3340
-        if (isset($this->_m_mt_settings['messenger_tabs'])) {
3341
-            foreach ($this->_m_mt_settings['messenger_tabs'] as $messenger => $tab_array) {
3342
-                $hide_on_message  = $this->_message_resource_manager->is_messenger_active($messenger) ? '' : 'hidden';
3343
-                $hide_off_message = $this->_message_resource_manager->is_messenger_active($messenger) ? 'hidden' : '';
3344
-                //messenger meta boxes
3345
-                $active                                 = $selected_messenger === $messenger;
3346
-                $active_mt_tabs                         = isset(
3347
-                    $this->_m_mt_settings['message_type_tabs'][$messenger]['active']
3348
-                )
3349
-                    ? $this->_m_mt_settings['message_type_tabs'][$messenger]['active']
3350
-                    : '';
3351
-                $m_boxes[$messenger . '_a_box']         = sprintf(
3352
-                    esc_html__('%s Settings', 'event_espresso'),
3353
-                    $tab_array['label']
3354
-                );
3355
-                $m_template_args[$messenger . '_a_box'] = array(
3356
-                    'active_message_types'   => ! empty($active_mt_tabs) ? $this->_get_mt_tabs($active_mt_tabs) : '',
3357
-                    'inactive_message_types' => isset(
3358
-                        $this->_m_mt_settings['message_type_tabs'][$messenger]['inactive']
3359
-                    )
3360
-                        ? $this->_get_mt_tabs($this->_m_mt_settings['message_type_tabs'][$messenger]['inactive'])
3361
-                        : '',
3362
-                    'content'                => $this->_get_messenger_box_content($tab_array['obj']),
3363
-                    'hidden'                 => $active ? '' : ' hidden',
3364
-                    'hide_on_message'        => $hide_on_message,
3365
-                    'messenger'              => $messenger,
3366
-                    'active'                 => $active
3367
-                );
3368
-                // message type meta boxes
3369
-                // (which is really just the inactive container for each messenger
3370
-                // showing inactive message types for that messenger)
3371
-                $mt_boxes[$messenger . '_i_box']         = esc_html__('Inactive Message Types', 'event_espresso');
3372
-                $mt_template_args[$messenger . '_i_box'] = array(
3373
-                    'active_message_types'   => ! empty($active_mt_tabs) ? $this->_get_mt_tabs($active_mt_tabs) : '',
3374
-                    'inactive_message_types' => isset(
3375
-                        $this->_m_mt_settings['message_type_tabs'][$messenger]['inactive']
3376
-                    )
3377
-                        ? $this->_get_mt_tabs($this->_m_mt_settings['message_type_tabs'][$messenger]['inactive'])
3378
-                        : '',
3379
-                    'hidden'                 => $active ? '' : ' hidden',
3380
-                    'hide_on_message'        => $hide_on_message,
3381
-                    'hide_off_message'       => $hide_off_message,
3382
-                    'messenger'              => $messenger,
3383
-                    'active'                 => $active
3384
-                );
3385
-            }
3386
-        }
3387
-        
3388
-        
3389
-        //register messenger metaboxes
3390
-        $m_template_path = EE_MSG_TEMPLATE_PATH . 'ee_msg_details_messenger_mt_meta_box.template.php';
3391
-        foreach ($m_boxes as $box => $label) {
3392
-            $callback_args = array('template_path' => $m_template_path, 'template_args' => $m_template_args[$box]);
3393
-            $msgr          = str_replace('_a_box', '', $box);
3394
-            add_meta_box(
3395
-                'espresso_' . $msgr . '_settings',
3396
-                $label,
3397
-                function ($post, $metabox) {
3398
-                    echo EEH_Template::display_template(
3399
-                            $metabox["args"]["template_path"],
3400
-                            $metabox["args"]["template_args"],
3401
-                            true
3402
-                    );
3403
-                },
3404
-                $this->_current_screen->id,
3405
-                'normal',
3406
-                'high',
3407
-                $callback_args
3408
-            );
3409
-        }
3410
-        
3411
-        //register message type metaboxes
3412
-        $mt_template_path = EE_MSG_TEMPLATE_PATH . 'ee_msg_details_messenger_meta_box.template.php';
3413
-        foreach ($mt_boxes as $box => $label) {
3414
-            $callback_args = array(
3415
-                'template_path' => $mt_template_path,
3416
-                'template_args' => $mt_template_args[$box]
3417
-            );
3418
-            $mt            = str_replace('_i_box', '', $box);
3419
-            add_meta_box(
3420
-                'espresso_' . $mt . '_inactive_mts',
3421
-                $label,
3422
-                function ($post, $metabox) {
3423
-                    echo EEH_Template::display_template(
3424
-                            $metabox["args"]["template_path"],
3425
-                            $metabox["args"]["template_args"],
3426
-                            true
3427
-                    );
3428
-                },
3429
-                $this->_current_screen->id,
3430
-                'side',
3431
-                'high',
3432
-                $callback_args
3433
-            );
3434
-        }
3435
-        
3436
-        //register metabox for global messages settings but only when on the main site.  On single site installs this
3437
-        // will always result in the metabox showing, on multisite installs the metabox will only show on the main site.
3438
-        if (is_main_site()) {
3439
-            add_meta_box(
3440
-                'espresso_global_message_settings',
3441
-                esc_html__('Global Message Settings', 'event_espresso'),
3442
-                array($this, 'global_messages_settings_metabox_content'),
3443
-                $this->_current_screen->id,
3444
-                'normal',
3445
-                'low',
3446
-                array()
3447
-            );
3448
-        }
3449
-        
3450
-    }
3323
+	/**
3324
+	 * Generate all the metaboxes for the message types and register them for the messages settings page.
3325
+	 *
3326
+	 * @access protected
3327
+	 * @return void
3328
+	 * @throws DomainException
3329
+	 */
3330
+	protected function _messages_settings_metaboxes()
3331
+	{
3332
+		$this->_set_m_mt_settings();
3333
+		$m_boxes         = $mt_boxes = array();
3334
+		$m_template_args = $mt_template_args = array();
3335
+        
3336
+		$selected_messenger = isset($this->_req_data['selected_messenger'])
3337
+			? $this->_req_data['selected_messenger']
3338
+			: 'email';
3339
+        
3340
+		if (isset($this->_m_mt_settings['messenger_tabs'])) {
3341
+			foreach ($this->_m_mt_settings['messenger_tabs'] as $messenger => $tab_array) {
3342
+				$hide_on_message  = $this->_message_resource_manager->is_messenger_active($messenger) ? '' : 'hidden';
3343
+				$hide_off_message = $this->_message_resource_manager->is_messenger_active($messenger) ? 'hidden' : '';
3344
+				//messenger meta boxes
3345
+				$active                                 = $selected_messenger === $messenger;
3346
+				$active_mt_tabs                         = isset(
3347
+					$this->_m_mt_settings['message_type_tabs'][$messenger]['active']
3348
+				)
3349
+					? $this->_m_mt_settings['message_type_tabs'][$messenger]['active']
3350
+					: '';
3351
+				$m_boxes[$messenger . '_a_box']         = sprintf(
3352
+					esc_html__('%s Settings', 'event_espresso'),
3353
+					$tab_array['label']
3354
+				);
3355
+				$m_template_args[$messenger . '_a_box'] = array(
3356
+					'active_message_types'   => ! empty($active_mt_tabs) ? $this->_get_mt_tabs($active_mt_tabs) : '',
3357
+					'inactive_message_types' => isset(
3358
+						$this->_m_mt_settings['message_type_tabs'][$messenger]['inactive']
3359
+					)
3360
+						? $this->_get_mt_tabs($this->_m_mt_settings['message_type_tabs'][$messenger]['inactive'])
3361
+						: '',
3362
+					'content'                => $this->_get_messenger_box_content($tab_array['obj']),
3363
+					'hidden'                 => $active ? '' : ' hidden',
3364
+					'hide_on_message'        => $hide_on_message,
3365
+					'messenger'              => $messenger,
3366
+					'active'                 => $active
3367
+				);
3368
+				// message type meta boxes
3369
+				// (which is really just the inactive container for each messenger
3370
+				// showing inactive message types for that messenger)
3371
+				$mt_boxes[$messenger . '_i_box']         = esc_html__('Inactive Message Types', 'event_espresso');
3372
+				$mt_template_args[$messenger . '_i_box'] = array(
3373
+					'active_message_types'   => ! empty($active_mt_tabs) ? $this->_get_mt_tabs($active_mt_tabs) : '',
3374
+					'inactive_message_types' => isset(
3375
+						$this->_m_mt_settings['message_type_tabs'][$messenger]['inactive']
3376
+					)
3377
+						? $this->_get_mt_tabs($this->_m_mt_settings['message_type_tabs'][$messenger]['inactive'])
3378
+						: '',
3379
+					'hidden'                 => $active ? '' : ' hidden',
3380
+					'hide_on_message'        => $hide_on_message,
3381
+					'hide_off_message'       => $hide_off_message,
3382
+					'messenger'              => $messenger,
3383
+					'active'                 => $active
3384
+				);
3385
+			}
3386
+		}
3387
+        
3388
+        
3389
+		//register messenger metaboxes
3390
+		$m_template_path = EE_MSG_TEMPLATE_PATH . 'ee_msg_details_messenger_mt_meta_box.template.php';
3391
+		foreach ($m_boxes as $box => $label) {
3392
+			$callback_args = array('template_path' => $m_template_path, 'template_args' => $m_template_args[$box]);
3393
+			$msgr          = str_replace('_a_box', '', $box);
3394
+			add_meta_box(
3395
+				'espresso_' . $msgr . '_settings',
3396
+				$label,
3397
+				function ($post, $metabox) {
3398
+					echo EEH_Template::display_template(
3399
+							$metabox["args"]["template_path"],
3400
+							$metabox["args"]["template_args"],
3401
+							true
3402
+					);
3403
+				},
3404
+				$this->_current_screen->id,
3405
+				'normal',
3406
+				'high',
3407
+				$callback_args
3408
+			);
3409
+		}
3410
+        
3411
+		//register message type metaboxes
3412
+		$mt_template_path = EE_MSG_TEMPLATE_PATH . 'ee_msg_details_messenger_meta_box.template.php';
3413
+		foreach ($mt_boxes as $box => $label) {
3414
+			$callback_args = array(
3415
+				'template_path' => $mt_template_path,
3416
+				'template_args' => $mt_template_args[$box]
3417
+			);
3418
+			$mt            = str_replace('_i_box', '', $box);
3419
+			add_meta_box(
3420
+				'espresso_' . $mt . '_inactive_mts',
3421
+				$label,
3422
+				function ($post, $metabox) {
3423
+					echo EEH_Template::display_template(
3424
+							$metabox["args"]["template_path"],
3425
+							$metabox["args"]["template_args"],
3426
+							true
3427
+					);
3428
+				},
3429
+				$this->_current_screen->id,
3430
+				'side',
3431
+				'high',
3432
+				$callback_args
3433
+			);
3434
+		}
3435
+        
3436
+		//register metabox for global messages settings but only when on the main site.  On single site installs this
3437
+		// will always result in the metabox showing, on multisite installs the metabox will only show on the main site.
3438
+		if (is_main_site()) {
3439
+			add_meta_box(
3440
+				'espresso_global_message_settings',
3441
+				esc_html__('Global Message Settings', 'event_espresso'),
3442
+				array($this, 'global_messages_settings_metabox_content'),
3443
+				$this->_current_screen->id,
3444
+				'normal',
3445
+				'low',
3446
+				array()
3447
+			);
3448
+		}
3449
+        
3450
+	}
3451 3451
 
3452 3452
 
3453
-    /**
3454
-     *  This generates the content for the global messages settings metabox.
3455
-     *
3456
-     * @return string
3457
-     * @throws EE_Error
3458
-     * @throws InvalidArgumentException
3459
-     * @throws ReflectionException
3460
-     * @throws InvalidDataTypeException
3461
-     * @throws InvalidInterfaceException
3462
-     */
3463
-    public function global_messages_settings_metabox_content()
3464
-    {
3465
-        $form = $this->_generate_global_settings_form();
3466
-        echo $form->form_open(
3467
-                $this->add_query_args_and_nonce(array('action' => 'update_global_settings'), EE_MSG_ADMIN_URL),
3468
-                'POST'
3469
-            )
3470
-             . $form->get_html()
3471
-             . $form->form_close();
3472
-    }
3453
+	/**
3454
+	 *  This generates the content for the global messages settings metabox.
3455
+	 *
3456
+	 * @return string
3457
+	 * @throws EE_Error
3458
+	 * @throws InvalidArgumentException
3459
+	 * @throws ReflectionException
3460
+	 * @throws InvalidDataTypeException
3461
+	 * @throws InvalidInterfaceException
3462
+	 */
3463
+	public function global_messages_settings_metabox_content()
3464
+	{
3465
+		$form = $this->_generate_global_settings_form();
3466
+		echo $form->form_open(
3467
+				$this->add_query_args_and_nonce(array('action' => 'update_global_settings'), EE_MSG_ADMIN_URL),
3468
+				'POST'
3469
+			)
3470
+			 . $form->get_html()
3471
+			 . $form->form_close();
3472
+	}
3473 3473
 
3474 3474
 
3475
-    /**
3476
-     * This generates and returns the form object for the global messages settings.
3477
-     *
3478
-     * @return EE_Form_Section_Proper
3479
-     * @throws EE_Error
3480
-     * @throws InvalidArgumentException
3481
-     * @throws ReflectionException
3482
-     * @throws InvalidDataTypeException
3483
-     * @throws InvalidInterfaceException
3484
-     */
3485
-    protected function _generate_global_settings_form()
3486
-    {
3487
-        EE_Registry::instance()->load_helper('HTML');
3488
-        /** @var EE_Network_Core_Config $network_config */
3489
-        $network_config = EE_Registry::instance()->NET_CFG->core;
3490
-        
3491
-        return new EE_Form_Section_Proper(
3492
-            array(
3493
-                'name'            => 'global_messages_settings',
3494
-                'html_id'         => 'global_messages_settings',
3495
-                'html_class'      => 'form-table',
3496
-                'layout_strategy' => new EE_Admin_Two_Column_Layout(),
3497
-                'subsections'     => apply_filters(
3498
-                    'FHEE__Messages_Admin_Page__global_messages_settings_metabox_content__form_subsections',
3499
-                    array(
3500
-                        'do_messages_on_same_request' => new EE_Select_Input(
3501
-                            array(
3502
-                                true  => esc_html__("On the same request", "event_espresso"),
3503
-                                false => esc_html__("On a separate request", "event_espresso")
3504
-                            ),
3505
-                            array(
3506
-                                'default'         => $network_config->do_messages_on_same_request,
3507
-                                'html_label_text' => esc_html__(
3508
-                                    'Generate and send all messages:',
3509
-                                    'event_espresso'
3510
-                                ),
3511
-                                'html_help_text'  => esc_html__(
3512
-                                    '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.',
3513
-                                    'event_espresso'
3514
-                                ),
3515
-                            )
3516
-                        ),
3517
-                        'delete_threshold' => new EE_Select_Input(
3518
-                            array(
3519
-                                0 => esc_html__('Forever', 'event_espresso'),
3520
-                                3 => esc_html__('3 Months', 'event_espresso'),
3521
-                                6 => esc_html__('6 Months', 'event_espresso'),
3522
-                                9 => esc_html__('9 Months', 'event_espresso'),
3523
-                                12 => esc_html__('12 Months', 'event_espresso'),
3524
-                                24 => esc_html__('24 Months', 'event_espresso'),
3525
-                                36 => esc_html__('36 Months', 'event_espresso')
3526
-                            ),
3527
-                            array(
3528
-                                'default' => EE_Registry::instance()->CFG->messages->delete_threshold,
3529
-                                'html_label_text' => esc_html__('Cleanup of old messages:', 'event_espresso'),
3530
-                                'html_help_text' => esc_html__(
3531
-                                    'You can control how long a record of processed messages is kept via this option.',
3532
-                                    'event_espresso'
3533
-                                ),
3534
-                            )
3535
-                        ),
3536
-                        'update_settings'             => new EE_Submit_Input(
3537
-                            array(
3538
-                                'default'         => esc_html__('Update', 'event_espresso'),
3539
-                                'html_label_text' => '&nbsp'
3540
-                            )
3541
-                        )
3542
-                    )
3543
-                )
3544
-            )
3545
-        );
3546
-    }
3475
+	/**
3476
+	 * This generates and returns the form object for the global messages settings.
3477
+	 *
3478
+	 * @return EE_Form_Section_Proper
3479
+	 * @throws EE_Error
3480
+	 * @throws InvalidArgumentException
3481
+	 * @throws ReflectionException
3482
+	 * @throws InvalidDataTypeException
3483
+	 * @throws InvalidInterfaceException
3484
+	 */
3485
+	protected function _generate_global_settings_form()
3486
+	{
3487
+		EE_Registry::instance()->load_helper('HTML');
3488
+		/** @var EE_Network_Core_Config $network_config */
3489
+		$network_config = EE_Registry::instance()->NET_CFG->core;
3490
+        
3491
+		return new EE_Form_Section_Proper(
3492
+			array(
3493
+				'name'            => 'global_messages_settings',
3494
+				'html_id'         => 'global_messages_settings',
3495
+				'html_class'      => 'form-table',
3496
+				'layout_strategy' => new EE_Admin_Two_Column_Layout(),
3497
+				'subsections'     => apply_filters(
3498
+					'FHEE__Messages_Admin_Page__global_messages_settings_metabox_content__form_subsections',
3499
+					array(
3500
+						'do_messages_on_same_request' => new EE_Select_Input(
3501
+							array(
3502
+								true  => esc_html__("On the same request", "event_espresso"),
3503
+								false => esc_html__("On a separate request", "event_espresso")
3504
+							),
3505
+							array(
3506
+								'default'         => $network_config->do_messages_on_same_request,
3507
+								'html_label_text' => esc_html__(
3508
+									'Generate and send all messages:',
3509
+									'event_espresso'
3510
+								),
3511
+								'html_help_text'  => esc_html__(
3512
+									'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.',
3513
+									'event_espresso'
3514
+								),
3515
+							)
3516
+						),
3517
+						'delete_threshold' => new EE_Select_Input(
3518
+							array(
3519
+								0 => esc_html__('Forever', 'event_espresso'),
3520
+								3 => esc_html__('3 Months', 'event_espresso'),
3521
+								6 => esc_html__('6 Months', 'event_espresso'),
3522
+								9 => esc_html__('9 Months', 'event_espresso'),
3523
+								12 => esc_html__('12 Months', 'event_espresso'),
3524
+								24 => esc_html__('24 Months', 'event_espresso'),
3525
+								36 => esc_html__('36 Months', 'event_espresso')
3526
+							),
3527
+							array(
3528
+								'default' => EE_Registry::instance()->CFG->messages->delete_threshold,
3529
+								'html_label_text' => esc_html__('Cleanup of old messages:', 'event_espresso'),
3530
+								'html_help_text' => esc_html__(
3531
+									'You can control how long a record of processed messages is kept via this option.',
3532
+									'event_espresso'
3533
+								),
3534
+							)
3535
+						),
3536
+						'update_settings'             => new EE_Submit_Input(
3537
+							array(
3538
+								'default'         => esc_html__('Update', 'event_espresso'),
3539
+								'html_label_text' => '&nbsp'
3540
+							)
3541
+						)
3542
+					)
3543
+				)
3544
+			)
3545
+		);
3546
+	}
3547 3547
 
3548 3548
 
3549
-    /**
3550
-     * This handles updating the global settings set on the admin page.
3551
-     *
3552
-     * @throws EE_Error
3553
-     * @throws InvalidDataTypeException
3554
-     * @throws InvalidInterfaceException
3555
-     * @throws InvalidArgumentException
3556
-     * @throws ReflectionException
3557
-     */
3558
-    protected function _update_global_settings()
3559
-    {
3560
-        /** @var EE_Network_Core_Config $network_config */
3561
-        $network_config = EE_Registry::instance()->NET_CFG->core;
3562
-        $messages_config = EE_Registry::instance()->CFG->messages;
3563
-        $form           = $this->_generate_global_settings_form();
3564
-        if ($form->was_submitted()) {
3565
-            $form->receive_form_submission();
3566
-            if ($form->is_valid()) {
3567
-                $valid_data = $form->valid_data();
3568
-                foreach ($valid_data as $property => $value) {
3569
-                    $setter = 'set_' . $property;
3570
-                    if (method_exists($network_config, $setter)) {
3571
-                        $network_config->{$setter}($value);
3572
-                    } else if (
3573
-                        property_exists($network_config, $property)
3574
-                        && $network_config->{$property} !== $value
3575
-                    ) {
3576
-                        $network_config->{$property} = $value;
3577
-                    } else if (
3578
-                        property_exists($messages_config, $property)
3579
-                        && $messages_config->{$property} !== $value
3580
-                    ) {
3581
-                        $messages_config->{$property} = $value;
3582
-                    }
3583
-                }
3584
-                //only update if the form submission was valid!
3585
-                EE_Registry::instance()->NET_CFG->update_config(true, false);
3586
-                EE_Registry::instance()->CFG->update_espresso_config();
3587
-                EE_Error::overwrite_success();
3588
-                EE_Error::add_success(__('Global message settings were updated', 'event_espresso'));
3589
-            }
3590
-        }
3591
-        $this->_redirect_after_action(0, '', '', array('action' => 'settings'), true);
3592
-    }
3549
+	/**
3550
+	 * This handles updating the global settings set on the admin page.
3551
+	 *
3552
+	 * @throws EE_Error
3553
+	 * @throws InvalidDataTypeException
3554
+	 * @throws InvalidInterfaceException
3555
+	 * @throws InvalidArgumentException
3556
+	 * @throws ReflectionException
3557
+	 */
3558
+	protected function _update_global_settings()
3559
+	{
3560
+		/** @var EE_Network_Core_Config $network_config */
3561
+		$network_config = EE_Registry::instance()->NET_CFG->core;
3562
+		$messages_config = EE_Registry::instance()->CFG->messages;
3563
+		$form           = $this->_generate_global_settings_form();
3564
+		if ($form->was_submitted()) {
3565
+			$form->receive_form_submission();
3566
+			if ($form->is_valid()) {
3567
+				$valid_data = $form->valid_data();
3568
+				foreach ($valid_data as $property => $value) {
3569
+					$setter = 'set_' . $property;
3570
+					if (method_exists($network_config, $setter)) {
3571
+						$network_config->{$setter}($value);
3572
+					} else if (
3573
+						property_exists($network_config, $property)
3574
+						&& $network_config->{$property} !== $value
3575
+					) {
3576
+						$network_config->{$property} = $value;
3577
+					} else if (
3578
+						property_exists($messages_config, $property)
3579
+						&& $messages_config->{$property} !== $value
3580
+					) {
3581
+						$messages_config->{$property} = $value;
3582
+					}
3583
+				}
3584
+				//only update if the form submission was valid!
3585
+				EE_Registry::instance()->NET_CFG->update_config(true, false);
3586
+				EE_Registry::instance()->CFG->update_espresso_config();
3587
+				EE_Error::overwrite_success();
3588
+				EE_Error::add_success(__('Global message settings were updated', 'event_espresso'));
3589
+			}
3590
+		}
3591
+		$this->_redirect_after_action(0, '', '', array('action' => 'settings'), true);
3592
+	}
3593 3593
 
3594 3594
 
3595
-    /**
3596
-     * this prepares the messenger tabs that can be dragged in and out of messenger boxes to activate/deactivate
3597
-     *
3598
-     * @param  array $tab_array This is an array of message type tab details used to generate the tabs
3599
-     * @return string html formatted tabs
3600
-     * @throws DomainException
3601
-     */
3602
-    protected function _get_mt_tabs($tab_array)
3603
-    {
3604
-        $tab_array = (array)$tab_array;
3605
-        $template  = EE_MSG_TEMPLATE_PATH . 'ee_msg_details_mt_settings_tab_item.template.php';
3606
-        $tabs      = '';
3607
-        
3608
-        foreach ($tab_array as $tab) {
3609
-            $tabs .= EEH_Template::display_template($template, $tab, true);
3610
-        }
3611
-        
3612
-        return $tabs;
3613
-    }
3595
+	/**
3596
+	 * this prepares the messenger tabs that can be dragged in and out of messenger boxes to activate/deactivate
3597
+	 *
3598
+	 * @param  array $tab_array This is an array of message type tab details used to generate the tabs
3599
+	 * @return string html formatted tabs
3600
+	 * @throws DomainException
3601
+	 */
3602
+	protected function _get_mt_tabs($tab_array)
3603
+	{
3604
+		$tab_array = (array)$tab_array;
3605
+		$template  = EE_MSG_TEMPLATE_PATH . 'ee_msg_details_mt_settings_tab_item.template.php';
3606
+		$tabs      = '';
3607
+        
3608
+		foreach ($tab_array as $tab) {
3609
+			$tabs .= EEH_Template::display_template($template, $tab, true);
3610
+		}
3611
+        
3612
+		return $tabs;
3613
+	}
3614 3614
 
3615 3615
 
3616
-    /**
3617
-     * This prepares the content of the messenger meta box admin settings
3618
-     *
3619
-     * @param  EE_messenger $messenger The messenger we're setting up content for
3620
-     * @return string html formatted content
3621
-     * @throws DomainException
3622
-     */
3623
-    protected function _get_messenger_box_content(EE_messenger $messenger)
3624
-    {
3616
+	/**
3617
+	 * This prepares the content of the messenger meta box admin settings
3618
+	 *
3619
+	 * @param  EE_messenger $messenger The messenger we're setting up content for
3620
+	 * @return string html formatted content
3621
+	 * @throws DomainException
3622
+	 */
3623
+	protected function _get_messenger_box_content(EE_messenger $messenger)
3624
+	{
3625 3625
         
3626
-        $fields                                         = $messenger->get_admin_settings_fields();
3627
-        $settings_template_args['template_form_fields'] = '';
3626
+		$fields                                         = $messenger->get_admin_settings_fields();
3627
+		$settings_template_args['template_form_fields'] = '';
3628 3628
         
3629
-        //is $messenger active?
3630
-        $settings_template_args['active'] = $this->_message_resource_manager->is_messenger_active($messenger->name);
3629
+		//is $messenger active?
3630
+		$settings_template_args['active'] = $this->_message_resource_manager->is_messenger_active($messenger->name);
3631 3631
         
3632 3632
         
3633
-        if ( ! empty($fields)) {
3633
+		if ( ! empty($fields)) {
3634 3634
             
3635
-            $existing_settings = $messenger->get_existing_admin_settings();
3635
+			$existing_settings = $messenger->get_existing_admin_settings();
3636 3636
             
3637
-            foreach ($fields as $fldname => $fldprops) {
3638
-                $field_id                       = $messenger->name . '-' . $fldname;
3639
-                $template_form_field[$field_id] = array(
3640
-                    'name'       => 'messenger_settings[' . $field_id . ']',
3641
-                    'label'      => $fldprops['label'],
3642
-                    'input'      => $fldprops['field_type'],
3643
-                    'type'       => $fldprops['value_type'],
3644
-                    'required'   => $fldprops['required'],
3645
-                    'validation' => $fldprops['validation'],
3646
-                    'value'      => isset($existing_settings[$field_id])
3647
-                        ? $existing_settings[$field_id]
3648
-                        : $fldprops['default'],
3649
-                    'css_class'  => '',
3650
-                    'format'     => $fldprops['format']
3651
-                );
3652
-            }
3637
+			foreach ($fields as $fldname => $fldprops) {
3638
+				$field_id                       = $messenger->name . '-' . $fldname;
3639
+				$template_form_field[$field_id] = array(
3640
+					'name'       => 'messenger_settings[' . $field_id . ']',
3641
+					'label'      => $fldprops['label'],
3642
+					'input'      => $fldprops['field_type'],
3643
+					'type'       => $fldprops['value_type'],
3644
+					'required'   => $fldprops['required'],
3645
+					'validation' => $fldprops['validation'],
3646
+					'value'      => isset($existing_settings[$field_id])
3647
+						? $existing_settings[$field_id]
3648
+						: $fldprops['default'],
3649
+					'css_class'  => '',
3650
+					'format'     => $fldprops['format']
3651
+				);
3652
+			}
3653 3653
             
3654 3654
             
3655
-            $settings_template_args['template_form_fields'] = ! empty($template_form_field)
3656
-                ? $this->_generate_admin_form_fields($template_form_field, 'string', 'ee_m_activate_form')
3657
-                : '';
3658
-        }
3659
-        
3660
-        //we also need some hidden fields
3661
-        $settings_template_args['hidden_fields'] = array(
3662
-            'messenger_settings[messenger]' => array(
3663
-                'type'  => 'hidden',
3664
-                'value' => $messenger->name
3665
-            ),
3666
-            'type'                          => array(
3667
-                'type'  => 'hidden',
3668
-                'value' => 'messenger'
3669
-            )
3670
-        );
3671
-        
3672
-        //make sure any active message types that are existing are included in the hidden fields
3673
-        if (isset($this->_m_mt_settings['message_type_tabs'][$messenger->name]['active'])) {
3674
-            foreach ($this->_m_mt_settings['message_type_tabs'][$messenger->name]['active'] as $mt => $values) {
3675
-                $settings_template_args['hidden_fields']['messenger_settings[message_types][' . $mt . ']'] = array(
3676
-                    'type'  => 'hidden',
3677
-                    'value' => $mt
3678
-                );
3679
-            }
3680
-        }
3681
-        $settings_template_args['hidden_fields'] = $this->_generate_admin_form_fields(
3682
-            $settings_template_args['hidden_fields'],
3683
-            'array'
3684
-        );
3685
-        $active = $this->_message_resource_manager->is_messenger_active($messenger->name);
3686
-        
3687
-        $settings_template_args['messenger']           = $messenger->name;
3688
-        $settings_template_args['description']         = $messenger->description;
3689
-        $settings_template_args['show_hide_edit_form'] = $active ? '' : ' hidden';
3690
-        
3691
-        
3692
-        $settings_template_args['show_hide_edit_form'] = $this->_message_resource_manager->is_messenger_active(
3693
-            $messenger->name
3694
-        )
3695
-            ? $settings_template_args['show_hide_edit_form']
3696
-            : ' hidden';
3697
-        
3698
-        $settings_template_args['show_hide_edit_form'] = empty($settings_template_args['template_form_fields'])
3699
-            ? ' hidden'
3700
-            : $settings_template_args['show_hide_edit_form'];
3701
-        
3702
-        
3703
-        $settings_template_args['on_off_action'] = $active ? 'messenger-off' : 'messenger-on';
3704
-        $settings_template_args['nonce']         = wp_create_nonce('activate_' . $messenger->name . '_toggle_nonce');
3705
-        $settings_template_args['on_off_status'] = $active ? true : false;
3706
-        $template                                = EE_MSG_TEMPLATE_PATH . 'ee_msg_m_settings_content.template.php';
3707
-        $content                                 = EEH_Template::display_template(
3708
-            $template,
3709
-            $settings_template_args,
3710
-            true
3711
-        );
3712
-        
3713
-        return $content;
3714
-    }
3655
+			$settings_template_args['template_form_fields'] = ! empty($template_form_field)
3656
+				? $this->_generate_admin_form_fields($template_form_field, 'string', 'ee_m_activate_form')
3657
+				: '';
3658
+		}
3659
+        
3660
+		//we also need some hidden fields
3661
+		$settings_template_args['hidden_fields'] = array(
3662
+			'messenger_settings[messenger]' => array(
3663
+				'type'  => 'hidden',
3664
+				'value' => $messenger->name
3665
+			),
3666
+			'type'                          => array(
3667
+				'type'  => 'hidden',
3668
+				'value' => 'messenger'
3669
+			)
3670
+		);
3671
+        
3672
+		//make sure any active message types that are existing are included in the hidden fields
3673
+		if (isset($this->_m_mt_settings['message_type_tabs'][$messenger->name]['active'])) {
3674
+			foreach ($this->_m_mt_settings['message_type_tabs'][$messenger->name]['active'] as $mt => $values) {
3675
+				$settings_template_args['hidden_fields']['messenger_settings[message_types][' . $mt . ']'] = array(
3676
+					'type'  => 'hidden',
3677
+					'value' => $mt
3678
+				);
3679
+			}
3680
+		}
3681
+		$settings_template_args['hidden_fields'] = $this->_generate_admin_form_fields(
3682
+			$settings_template_args['hidden_fields'],
3683
+			'array'
3684
+		);
3685
+		$active = $this->_message_resource_manager->is_messenger_active($messenger->name);
3686
+        
3687
+		$settings_template_args['messenger']           = $messenger->name;
3688
+		$settings_template_args['description']         = $messenger->description;
3689
+		$settings_template_args['show_hide_edit_form'] = $active ? '' : ' hidden';
3690
+        
3691
+        
3692
+		$settings_template_args['show_hide_edit_form'] = $this->_message_resource_manager->is_messenger_active(
3693
+			$messenger->name
3694
+		)
3695
+			? $settings_template_args['show_hide_edit_form']
3696
+			: ' hidden';
3697
+        
3698
+		$settings_template_args['show_hide_edit_form'] = empty($settings_template_args['template_form_fields'])
3699
+			? ' hidden'
3700
+			: $settings_template_args['show_hide_edit_form'];
3701
+        
3702
+        
3703
+		$settings_template_args['on_off_action'] = $active ? 'messenger-off' : 'messenger-on';
3704
+		$settings_template_args['nonce']         = wp_create_nonce('activate_' . $messenger->name . '_toggle_nonce');
3705
+		$settings_template_args['on_off_status'] = $active ? true : false;
3706
+		$template                                = EE_MSG_TEMPLATE_PATH . 'ee_msg_m_settings_content.template.php';
3707
+		$content                                 = EEH_Template::display_template(
3708
+			$template,
3709
+			$settings_template_args,
3710
+			true
3711
+		);
3712
+        
3713
+		return $content;
3714
+	}
3715 3715
 
3716 3716
 
3717
-    /**
3718
-     * used by ajax on the messages settings page to activate|deactivate the messenger
3719
-     *
3720
-     * @throws DomainException
3721
-     * @throws EE_Error
3722
-     * @throws InvalidDataTypeException
3723
-     * @throws InvalidInterfaceException
3724
-     * @throws InvalidArgumentException
3725
-     * @throws ReflectionException
3726
-     */
3727
-    public function activate_messenger_toggle()
3728
-    {
3729
-        $success = true;
3730
-        $this->_prep_default_response_for_messenger_or_message_type_toggle();
3731
-        //let's check that we have required data
3732
-        if ( ! isset($this->_req_data['messenger'])) {
3733
-            EE_Error::add_error(
3734
-                esc_html__('Messenger name needed to toggle activation. None given', 'event_espresso'),
3735
-                __FILE__,
3736
-                __FUNCTION__,
3737
-                __LINE__
3738
-            );
3739
-            $success = false;
3740
-        }
3741
-        
3742
-        //do a nonce check here since we're not arriving via a normal route
3743
-        $nonce     = isset($this->_req_data['activate_nonce'])
3744
-            ? sanitize_text_field($this->_req_data['activate_nonce'])
3745
-            : '';
3746
-        $nonce_ref = 'activate_' . $this->_req_data['messenger'] . '_toggle_nonce';
3747
-        
3748
-        $this->_verify_nonce($nonce, $nonce_ref);
3749
-        
3750
-        
3751
-        if ( ! isset($this->_req_data['status'])) {
3752
-            EE_Error::add_error(
3753
-                esc_html__(
3754
-                    'Messenger status needed to know whether activation or deactivation is happening. No status is given',
3755
-                    'event_espresso'
3756
-                ),
3757
-                __FILE__,
3758
-                __FUNCTION__,
3759
-                __LINE__
3760
-            );
3761
-            $success = false;
3762
-        }
3763
-        
3764
-        //do check to verify we have a valid status.
3765
-        $status = $this->_req_data['status'];
3766
-        
3767
-        if ($status !== 'off' && $status !== 'on') {
3768
-            EE_Error::add_error(
3769
-                sprintf(
3770
-                    esc_html__('The given status (%s) is not valid. Must be "off" or "on"', 'event_espresso'),
3771
-                    $this->_req_data['status']
3772
-                ),
3773
-                __FILE__,
3774
-                __FUNCTION__,
3775
-                __LINE__
3776
-            );
3777
-            $success = false;
3778
-        }
3779
-        
3780
-        if ($success) {
3781
-            //made it here?  Stop dawdling then!!
3782
-            $success = $status === 'off'
3783
-                ? $this->_deactivate_messenger($this->_req_data['messenger'])
3784
-                : $this->_activate_messenger($this->_req_data['messenger']);
3785
-        }
3786
-        
3787
-        $this->_template_args['success'] = $success;
3788
-        
3789
-        //no special instructions so let's just do the json return (which should automatically do all the special stuff).
3790
-        $this->_return_json();
3791
-        
3792
-    }
3717
+	/**
3718
+	 * used by ajax on the messages settings page to activate|deactivate the messenger
3719
+	 *
3720
+	 * @throws DomainException
3721
+	 * @throws EE_Error
3722
+	 * @throws InvalidDataTypeException
3723
+	 * @throws InvalidInterfaceException
3724
+	 * @throws InvalidArgumentException
3725
+	 * @throws ReflectionException
3726
+	 */
3727
+	public function activate_messenger_toggle()
3728
+	{
3729
+		$success = true;
3730
+		$this->_prep_default_response_for_messenger_or_message_type_toggle();
3731
+		//let's check that we have required data
3732
+		if ( ! isset($this->_req_data['messenger'])) {
3733
+			EE_Error::add_error(
3734
+				esc_html__('Messenger name needed to toggle activation. None given', 'event_espresso'),
3735
+				__FILE__,
3736
+				__FUNCTION__,
3737
+				__LINE__
3738
+			);
3739
+			$success = false;
3740
+		}
3741
+        
3742
+		//do a nonce check here since we're not arriving via a normal route
3743
+		$nonce     = isset($this->_req_data['activate_nonce'])
3744
+			? sanitize_text_field($this->_req_data['activate_nonce'])
3745
+			: '';
3746
+		$nonce_ref = 'activate_' . $this->_req_data['messenger'] . '_toggle_nonce';
3747
+        
3748
+		$this->_verify_nonce($nonce, $nonce_ref);
3749
+        
3750
+        
3751
+		if ( ! isset($this->_req_data['status'])) {
3752
+			EE_Error::add_error(
3753
+				esc_html__(
3754
+					'Messenger status needed to know whether activation or deactivation is happening. No status is given',
3755
+					'event_espresso'
3756
+				),
3757
+				__FILE__,
3758
+				__FUNCTION__,
3759
+				__LINE__
3760
+			);
3761
+			$success = false;
3762
+		}
3763
+        
3764
+		//do check to verify we have a valid status.
3765
+		$status = $this->_req_data['status'];
3766
+        
3767
+		if ($status !== 'off' && $status !== 'on') {
3768
+			EE_Error::add_error(
3769
+				sprintf(
3770
+					esc_html__('The given status (%s) is not valid. Must be "off" or "on"', 'event_espresso'),
3771
+					$this->_req_data['status']
3772
+				),
3773
+				__FILE__,
3774
+				__FUNCTION__,
3775
+				__LINE__
3776
+			);
3777
+			$success = false;
3778
+		}
3779
+        
3780
+		if ($success) {
3781
+			//made it here?  Stop dawdling then!!
3782
+			$success = $status === 'off'
3783
+				? $this->_deactivate_messenger($this->_req_data['messenger'])
3784
+				: $this->_activate_messenger($this->_req_data['messenger']);
3785
+		}
3786
+        
3787
+		$this->_template_args['success'] = $success;
3788
+        
3789
+		//no special instructions so let's just do the json return (which should automatically do all the special stuff).
3790
+		$this->_return_json();
3791
+        
3792
+	}
3793 3793
 
3794 3794
 
3795
-    /**
3796
-     * used by ajax from the messages settings page to activate|deactivate a message type
3797
-     *
3798
-     * @throws DomainException
3799
-     * @throws EE_Error
3800
-     * @throws ReflectionException
3801
-     * @throws InvalidDataTypeException
3802
-     * @throws InvalidInterfaceException
3803
-     * @throws InvalidArgumentException
3804
-     */
3805
-    public function activate_mt_toggle()
3806
-    {
3807
-        $success = true;
3808
-        $this->_prep_default_response_for_messenger_or_message_type_toggle();
3809
-        
3810
-        //let's make sure we have the necessary data
3811
-        if ( ! isset($this->_req_data['message_type'])) {
3812
-            EE_Error::add_error(
3813
-                esc_html__('Message Type name needed to toggle activation. None given', 'event_espresso'),
3814
-                __FILE__,
3815
-                __FUNCTION__,
3816
-                __LINE__
3817
-            );
3818
-            $success = false;
3819
-        }
3820
-        
3821
-        if ( ! isset($this->_req_data['messenger'])) {
3822
-            EE_Error::add_error(
3823
-                esc_html__('Messenger name needed to toggle activation. None given', 'event_espresso'),
3824
-                __FILE__,
3825
-                __FUNCTION__,
3826
-                __LINE__
3827
-            );
3828
-            $success = false;
3829
-        }
3830
-        
3831
-        if ( ! isset($this->_req_data['status'])) {
3832
-            EE_Error::add_error(
3833
-                esc_html__('Messenger status needed to know whether activation or deactivation is happening. No status is given',
3834
-                    'event_espresso'),
3835
-                __FILE__,
3836
-                __FUNCTION__,
3837
-                __LINE__
3838
-            );
3839
-            $success = false;
3840
-        }
3841
-        
3842
-        
3843
-        //do check to verify we have a valid status.
3844
-        $status = $this->_req_data['status'];
3845
-        
3846
-        if ($status !== 'activate' && $status !== 'deactivate') {
3847
-            EE_Error::add_error(
3848
-                sprintf(
3849
-                    esc_html__('The given status (%s) is not valid. Must be "active" or "inactive"', 'event_espresso'),
3850
-                    $this->_req_data['status']
3851
-                ),
3852
-                __FILE__,
3853
-                __FUNCTION__,
3854
-                __LINE__
3855
-            );
3856
-            $success = false;
3857
-        }
3858
-        
3859
-        
3860
-        //do a nonce check here since we're not arriving via a normal route
3861
-        $nonce     = isset($this->_req_data['mt_nonce']) ? sanitize_text_field($this->_req_data['mt_nonce']) : '';
3862
-        $nonce_ref = $this->_req_data['message_type'] . '_nonce';
3863
-        
3864
-        $this->_verify_nonce($nonce, $nonce_ref);
3865
-        
3866
-        if ($success) {
3867
-            //made it here? um, what are you waiting for then?
3868
-            $success = $status === 'deactivate'
3869
-                ? $this->_deactivate_message_type_for_messenger(
3870
-                    $this->_req_data['messenger'],
3871
-                    $this->_req_data['message_type']
3872
-                )
3873
-                : $this->_activate_message_type_for_messenger(
3874
-                    $this->_req_data['messenger'],
3875
-                    $this->_req_data['message_type']
3876
-                );
3877
-        }
3878
-        
3879
-        $this->_template_args['success'] = $success;
3880
-        $this->_return_json();
3881
-    }
3795
+	/**
3796
+	 * used by ajax from the messages settings page to activate|deactivate a message type
3797
+	 *
3798
+	 * @throws DomainException
3799
+	 * @throws EE_Error
3800
+	 * @throws ReflectionException
3801
+	 * @throws InvalidDataTypeException
3802
+	 * @throws InvalidInterfaceException
3803
+	 * @throws InvalidArgumentException
3804
+	 */
3805
+	public function activate_mt_toggle()
3806
+	{
3807
+		$success = true;
3808
+		$this->_prep_default_response_for_messenger_or_message_type_toggle();
3809
+        
3810
+		//let's make sure we have the necessary data
3811
+		if ( ! isset($this->_req_data['message_type'])) {
3812
+			EE_Error::add_error(
3813
+				esc_html__('Message Type name needed to toggle activation. None given', 'event_espresso'),
3814
+				__FILE__,
3815
+				__FUNCTION__,
3816
+				__LINE__
3817
+			);
3818
+			$success = false;
3819
+		}
3820
+        
3821
+		if ( ! isset($this->_req_data['messenger'])) {
3822
+			EE_Error::add_error(
3823
+				esc_html__('Messenger name needed to toggle activation. None given', 'event_espresso'),
3824
+				__FILE__,
3825
+				__FUNCTION__,
3826
+				__LINE__
3827
+			);
3828
+			$success = false;
3829
+		}
3830
+        
3831
+		if ( ! isset($this->_req_data['status'])) {
3832
+			EE_Error::add_error(
3833
+				esc_html__('Messenger status needed to know whether activation or deactivation is happening. No status is given',
3834
+					'event_espresso'),
3835
+				__FILE__,
3836
+				__FUNCTION__,
3837
+				__LINE__
3838
+			);
3839
+			$success = false;
3840
+		}
3841
+        
3842
+        
3843
+		//do check to verify we have a valid status.
3844
+		$status = $this->_req_data['status'];
3845
+        
3846
+		if ($status !== 'activate' && $status !== 'deactivate') {
3847
+			EE_Error::add_error(
3848
+				sprintf(
3849
+					esc_html__('The given status (%s) is not valid. Must be "active" or "inactive"', 'event_espresso'),
3850
+					$this->_req_data['status']
3851
+				),
3852
+				__FILE__,
3853
+				__FUNCTION__,
3854
+				__LINE__
3855
+			);
3856
+			$success = false;
3857
+		}
3858
+        
3859
+        
3860
+		//do a nonce check here since we're not arriving via a normal route
3861
+		$nonce     = isset($this->_req_data['mt_nonce']) ? sanitize_text_field($this->_req_data['mt_nonce']) : '';
3862
+		$nonce_ref = $this->_req_data['message_type'] . '_nonce';
3863
+        
3864
+		$this->_verify_nonce($nonce, $nonce_ref);
3865
+        
3866
+		if ($success) {
3867
+			//made it here? um, what are you waiting for then?
3868
+			$success = $status === 'deactivate'
3869
+				? $this->_deactivate_message_type_for_messenger(
3870
+					$this->_req_data['messenger'],
3871
+					$this->_req_data['message_type']
3872
+				)
3873
+				: $this->_activate_message_type_for_messenger(
3874
+					$this->_req_data['messenger'],
3875
+					$this->_req_data['message_type']
3876
+				);
3877
+		}
3878
+        
3879
+		$this->_template_args['success'] = $success;
3880
+		$this->_return_json();
3881
+	}
3882 3882
 
3883 3883
 
3884
-    /**
3885
-     * Takes care of processing activating a messenger and preparing the appropriate response.
3886
-     *
3887
-     * @param string $messenger_name The name of the messenger being activated
3888
-     * @return bool
3889
-     * @throws DomainException
3890
-     * @throws EE_Error
3891
-     * @throws InvalidArgumentException
3892
-     * @throws ReflectionException
3893
-     * @throws InvalidDataTypeException
3894
-     * @throws InvalidInterfaceException
3895
-     */
3896
-    protected function _activate_messenger($messenger_name)
3897
-    {
3898
-        /** @var EE_messenger $active_messenger This will be present because it can't be toggled if it isn't */
3899
-        $active_messenger          = $this->_message_resource_manager->get_messenger($messenger_name);
3900
-        $message_types_to_activate = $active_messenger instanceof EE_Messenger
3901
-            ? $active_messenger->get_default_message_types()
3902
-            : array();
3903
-        
3904
-        //ensure is active
3905
-        $this->_message_resource_manager->activate_messenger($messenger_name, $message_types_to_activate);
3906
-        
3907
-        //set response_data for reload
3908
-        foreach ($message_types_to_activate as $message_type_name) {
3909
-            /** @var EE_message_type $message_type */
3910
-            $message_type = $this->_message_resource_manager->get_message_type($message_type_name);
3911
-            if ($this->_message_resource_manager->is_message_type_active_for_messenger(
3912
-                    $messenger_name,
3913
-                    $message_type_name
3914
-                )
3915
-                && $message_type instanceof EE_message_type
3916
-            ) {
3917
-                $this->_template_args['data']['active_mts'][] = $message_type_name;
3918
-                if ($message_type->get_admin_settings_fields()) {
3919
-                    $this->_template_args['data']['mt_reload'][] = $message_type_name;
3920
-                }
3921
-            }
3922
-        }
3923
-        
3924
-        //add success message for activating messenger
3925
-        return $this->_setup_response_message_for_activating_messenger_with_message_types($active_messenger);
3926
-        
3927
-    }
3884
+	/**
3885
+	 * Takes care of processing activating a messenger and preparing the appropriate response.
3886
+	 *
3887
+	 * @param string $messenger_name The name of the messenger being activated
3888
+	 * @return bool
3889
+	 * @throws DomainException
3890
+	 * @throws EE_Error
3891
+	 * @throws InvalidArgumentException
3892
+	 * @throws ReflectionException
3893
+	 * @throws InvalidDataTypeException
3894
+	 * @throws InvalidInterfaceException
3895
+	 */
3896
+	protected function _activate_messenger($messenger_name)
3897
+	{
3898
+		/** @var EE_messenger $active_messenger This will be present because it can't be toggled if it isn't */
3899
+		$active_messenger          = $this->_message_resource_manager->get_messenger($messenger_name);
3900
+		$message_types_to_activate = $active_messenger instanceof EE_Messenger
3901
+			? $active_messenger->get_default_message_types()
3902
+			: array();
3903
+        
3904
+		//ensure is active
3905
+		$this->_message_resource_manager->activate_messenger($messenger_name, $message_types_to_activate);
3906
+        
3907
+		//set response_data for reload
3908
+		foreach ($message_types_to_activate as $message_type_name) {
3909
+			/** @var EE_message_type $message_type */
3910
+			$message_type = $this->_message_resource_manager->get_message_type($message_type_name);
3911
+			if ($this->_message_resource_manager->is_message_type_active_for_messenger(
3912
+					$messenger_name,
3913
+					$message_type_name
3914
+				)
3915
+				&& $message_type instanceof EE_message_type
3916
+			) {
3917
+				$this->_template_args['data']['active_mts'][] = $message_type_name;
3918
+				if ($message_type->get_admin_settings_fields()) {
3919
+					$this->_template_args['data']['mt_reload'][] = $message_type_name;
3920
+				}
3921
+			}
3922
+		}
3923
+        
3924
+		//add success message for activating messenger
3925
+		return $this->_setup_response_message_for_activating_messenger_with_message_types($active_messenger);
3926
+        
3927
+	}
3928 3928
 
3929 3929
 
3930
-    /**
3931
-     * Takes care of processing deactivating a messenger and preparing the appropriate response.
3932
-     *
3933
-     * @param string $messenger_name The name of the messenger being activated
3934
-     * @return bool
3935
-     * @throws DomainException
3936
-     * @throws EE_Error
3937
-     * @throws InvalidArgumentException
3938
-     * @throws ReflectionException
3939
-     * @throws InvalidDataTypeException
3940
-     * @throws InvalidInterfaceException
3941
-     */
3942
-    protected function _deactivate_messenger($messenger_name)
3943
-    {
3944
-        /** @var EE_messenger $active_messenger This will be present because it can't be toggled if it isn't */
3945
-        $active_messenger = $this->_message_resource_manager->get_messenger($messenger_name);
3946
-        $this->_message_resource_manager->deactivate_messenger($messenger_name);
3947
-        
3948
-        return $this->_setup_response_message_for_deactivating_messenger_with_message_types($active_messenger);
3949
-    }
3930
+	/**
3931
+	 * Takes care of processing deactivating a messenger and preparing the appropriate response.
3932
+	 *
3933
+	 * @param string $messenger_name The name of the messenger being activated
3934
+	 * @return bool
3935
+	 * @throws DomainException
3936
+	 * @throws EE_Error
3937
+	 * @throws InvalidArgumentException
3938
+	 * @throws ReflectionException
3939
+	 * @throws InvalidDataTypeException
3940
+	 * @throws InvalidInterfaceException
3941
+	 */
3942
+	protected function _deactivate_messenger($messenger_name)
3943
+	{
3944
+		/** @var EE_messenger $active_messenger This will be present because it can't be toggled if it isn't */
3945
+		$active_messenger = $this->_message_resource_manager->get_messenger($messenger_name);
3946
+		$this->_message_resource_manager->deactivate_messenger($messenger_name);
3947
+        
3948
+		return $this->_setup_response_message_for_deactivating_messenger_with_message_types($active_messenger);
3949
+	}
3950 3950
 
3951 3951
 
3952
-    /**
3953
-     * Takes care of processing activating a message type for a messenger and preparing the appropriate response.
3954
-     *
3955
-     * @param string $messenger_name    The name of the messenger the message type is being activated for.
3956
-     * @param string $message_type_name The name of the message type being activated for the messenger
3957
-     * @return bool
3958
-     * @throws DomainException
3959
-     * @throws EE_Error
3960
-     * @throws InvalidArgumentException
3961
-     * @throws ReflectionException
3962
-     * @throws InvalidDataTypeException
3963
-     * @throws InvalidInterfaceException
3964
-     */
3965
-    protected function _activate_message_type_for_messenger($messenger_name, $message_type_name)
3966
-    {
3967
-        /** @var EE_messenger $active_messenger This will be present because it can't be toggled if it isn't */
3968
-        $active_messenger = $this->_message_resource_manager->get_messenger($messenger_name);
3969
-        /** @var EE_message_type $message_type_to_activate This will be present because it can't be toggled if it isn't */
3970
-        $message_type_to_activate = $this->_message_resource_manager->get_message_type($message_type_name);
3971
-        
3972
-        //ensure is active
3973
-        $this->_message_resource_manager->activate_messenger($messenger_name, $message_type_name);
3974
-        
3975
-        //set response for load
3976
-        if ($this->_message_resource_manager->is_message_type_active_for_messenger($messenger_name,
3977
-            $message_type_name)
3978
-        ) {
3979
-            $this->_template_args['data']['active_mts'][] = $message_type_name;
3980
-            if ($message_type_to_activate->get_admin_settings_fields()) {
3981
-                $this->_template_args['data']['mt_reload'][] = $message_type_name;
3982
-            }
3983
-        }
3984
-        
3985
-        return $this->_setup_response_message_for_activating_messenger_with_message_types($active_messenger,
3986
-            $message_type_to_activate);
3987
-    }
3952
+	/**
3953
+	 * Takes care of processing activating a message type for a messenger and preparing the appropriate response.
3954
+	 *
3955
+	 * @param string $messenger_name    The name of the messenger the message type is being activated for.
3956
+	 * @param string $message_type_name The name of the message type being activated for the messenger
3957
+	 * @return bool
3958
+	 * @throws DomainException
3959
+	 * @throws EE_Error
3960
+	 * @throws InvalidArgumentException
3961
+	 * @throws ReflectionException
3962
+	 * @throws InvalidDataTypeException
3963
+	 * @throws InvalidInterfaceException
3964
+	 */
3965
+	protected function _activate_message_type_for_messenger($messenger_name, $message_type_name)
3966
+	{
3967
+		/** @var EE_messenger $active_messenger This will be present because it can't be toggled if it isn't */
3968
+		$active_messenger = $this->_message_resource_manager->get_messenger($messenger_name);
3969
+		/** @var EE_message_type $message_type_to_activate This will be present because it can't be toggled if it isn't */
3970
+		$message_type_to_activate = $this->_message_resource_manager->get_message_type($message_type_name);
3971
+        
3972
+		//ensure is active
3973
+		$this->_message_resource_manager->activate_messenger($messenger_name, $message_type_name);
3974
+        
3975
+		//set response for load
3976
+		if ($this->_message_resource_manager->is_message_type_active_for_messenger($messenger_name,
3977
+			$message_type_name)
3978
+		) {
3979
+			$this->_template_args['data']['active_mts'][] = $message_type_name;
3980
+			if ($message_type_to_activate->get_admin_settings_fields()) {
3981
+				$this->_template_args['data']['mt_reload'][] = $message_type_name;
3982
+			}
3983
+		}
3984
+        
3985
+		return $this->_setup_response_message_for_activating_messenger_with_message_types($active_messenger,
3986
+			$message_type_to_activate);
3987
+	}
3988 3988
 
3989 3989
 
3990
-    /**
3991
-     * Takes care of processing deactivating a message type for a messenger and preparing the appropriate response.
3992
-     *
3993
-     * @param string $messenger_name    The name of the messenger the message type is being deactivated for.
3994
-     * @param string $message_type_name The name of the message type being deactivated for the messenger
3995
-     * @return bool
3996
-     * @throws DomainException
3997
-     * @throws EE_Error
3998
-     * @throws InvalidArgumentException
3999
-     * @throws ReflectionException
4000
-     * @throws InvalidDataTypeException
4001
-     * @throws InvalidInterfaceException
4002
-     */
4003
-    protected function _deactivate_message_type_for_messenger($messenger_name, $message_type_name)
4004
-    {
4005
-        /** @var EE_messenger $active_messenger This will be present because it can't be toggled if it isn't */
4006
-        $active_messenger = $this->_message_resource_manager->get_messenger($messenger_name);
4007
-        /** @var EE_message_type $message_type_to_activate This will be present because it can't be toggled if it isn't */
4008
-        $message_type_to_deactivate = $this->_message_resource_manager->get_message_type($message_type_name);
4009
-        $this->_message_resource_manager->deactivate_message_type_for_messenger($message_type_name, $messenger_name);
4010
-        
4011
-        return $this->_setup_response_message_for_deactivating_messenger_with_message_types($active_messenger,
4012
-            $message_type_to_deactivate);
4013
-    }
3990
+	/**
3991
+	 * Takes care of processing deactivating a message type for a messenger and preparing the appropriate response.
3992
+	 *
3993
+	 * @param string $messenger_name    The name of the messenger the message type is being deactivated for.
3994
+	 * @param string $message_type_name The name of the message type being deactivated for the messenger
3995
+	 * @return bool
3996
+	 * @throws DomainException
3997
+	 * @throws EE_Error
3998
+	 * @throws InvalidArgumentException
3999
+	 * @throws ReflectionException
4000
+	 * @throws InvalidDataTypeException
4001
+	 * @throws InvalidInterfaceException
4002
+	 */
4003
+	protected function _deactivate_message_type_for_messenger($messenger_name, $message_type_name)
4004
+	{
4005
+		/** @var EE_messenger $active_messenger This will be present because it can't be toggled if it isn't */
4006
+		$active_messenger = $this->_message_resource_manager->get_messenger($messenger_name);
4007
+		/** @var EE_message_type $message_type_to_activate This will be present because it can't be toggled if it isn't */
4008
+		$message_type_to_deactivate = $this->_message_resource_manager->get_message_type($message_type_name);
4009
+		$this->_message_resource_manager->deactivate_message_type_for_messenger($message_type_name, $messenger_name);
4010
+        
4011
+		return $this->_setup_response_message_for_deactivating_messenger_with_message_types($active_messenger,
4012
+			$message_type_to_deactivate);
4013
+	}
4014 4014
     
4015 4015
     
4016
-    /**
4017
-     * This just initializes the defaults for activating messenger and message type responses.
4018
-     */
4019
-    protected function _prep_default_response_for_messenger_or_message_type_toggle()
4020
-    {
4021
-        $this->_template_args['data']['active_mts'] = array();
4022
-        $this->_template_args['data']['mt_reload']  = array();
4023
-    }
4016
+	/**
4017
+	 * This just initializes the defaults for activating messenger and message type responses.
4018
+	 */
4019
+	protected function _prep_default_response_for_messenger_or_message_type_toggle()
4020
+	{
4021
+		$this->_template_args['data']['active_mts'] = array();
4022
+		$this->_template_args['data']['mt_reload']  = array();
4023
+	}
4024 4024
 
4025 4025
 
4026
-    /**
4027
-     * Setup appropriate response for activating a messenger and/or message types
4028
-     *
4029
-     * @param EE_messenger         $messenger
4030
-     * @param EE_message_type|null $message_type
4031
-     * @return bool
4032
-     * @throws DomainException
4033
-     * @throws EE_Error
4034
-     * @throws InvalidArgumentException
4035
-     * @throws ReflectionException
4036
-     * @throws InvalidDataTypeException
4037
-     * @throws InvalidInterfaceException
4038
-     */
4039
-    protected function _setup_response_message_for_activating_messenger_with_message_types(
4040
-        $messenger,
4041
-        EE_Message_Type $message_type = null
4042
-    ) {
4043
-        //if $messenger isn't a valid messenger object then get out.
4044
-        if ( ! $messenger instanceof EE_Messenger) {
4045
-            EE_Error::add_error(
4046
-                esc_html__('The messenger being activated is not a valid messenger', 'event_espresso'),
4047
-                __FILE__,
4048
-                __FUNCTION__,
4049
-                __LINE__
4050
-            );
4026
+	/**
4027
+	 * Setup appropriate response for activating a messenger and/or message types
4028
+	 *
4029
+	 * @param EE_messenger         $messenger
4030
+	 * @param EE_message_type|null $message_type
4031
+	 * @return bool
4032
+	 * @throws DomainException
4033
+	 * @throws EE_Error
4034
+	 * @throws InvalidArgumentException
4035
+	 * @throws ReflectionException
4036
+	 * @throws InvalidDataTypeException
4037
+	 * @throws InvalidInterfaceException
4038
+	 */
4039
+	protected function _setup_response_message_for_activating_messenger_with_message_types(
4040
+		$messenger,
4041
+		EE_Message_Type $message_type = null
4042
+	) {
4043
+		//if $messenger isn't a valid messenger object then get out.
4044
+		if ( ! $messenger instanceof EE_Messenger) {
4045
+			EE_Error::add_error(
4046
+				esc_html__('The messenger being activated is not a valid messenger', 'event_espresso'),
4047
+				__FILE__,
4048
+				__FUNCTION__,
4049
+				__LINE__
4050
+			);
4051 4051
             
4052
-            return false;
4053
-        }
4054
-        //activated
4055
-        if ($this->_template_args['data']['active_mts']) {
4056
-            EE_Error::overwrite_success();
4057
-            //activated a message type with the messenger
4058
-            if ($message_type instanceof EE_message_type) {
4059
-                EE_Error::add_success(
4060
-                    sprintf(
4061
-                        esc_html__('%s message type has been successfully activated with the %s messenger', 'event_espresso'),
4062
-                        ucwords($message_type->label['singular']),
4063
-                        ucwords($messenger->label['singular'])
4064
-                    )
4065
-                );
4052
+			return false;
4053
+		}
4054
+		//activated
4055
+		if ($this->_template_args['data']['active_mts']) {
4056
+			EE_Error::overwrite_success();
4057
+			//activated a message type with the messenger
4058
+			if ($message_type instanceof EE_message_type) {
4059
+				EE_Error::add_success(
4060
+					sprintf(
4061
+						esc_html__('%s message type has been successfully activated with the %s messenger', 'event_espresso'),
4062
+						ucwords($message_type->label['singular']),
4063
+						ucwords($messenger->label['singular'])
4064
+					)
4065
+				);
4066 4066
                 
4067
-                //if message type was invoice then let's make sure we activate the invoice payment method.
4068
-                if ($message_type->name === 'invoice') {
4069
-                    EE_Registry::instance()->load_lib('Payment_Method_Manager');
4070
-                    $pm = EE_Payment_Method_Manager::instance()->activate_a_payment_method_of_type('Invoice');
4071
-                    if ($pm instanceof EE_Payment_Method) {
4072
-                        EE_Error::add_attention(
4073
-                            esc_html__(
4074
-                                '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.',
4075
-                                'event_espresso'
4076
-                            )
4077
-                        );
4078
-                    }
4079
-                }
4080
-                //just toggles the entire messenger
4081
-            } else {
4082
-                EE_Error::add_success(
4083
-                    sprintf(
4084
-                        esc_html__('%s messenger has been successfully activated', 'event_espresso'),
4085
-                        ucwords($messenger->label['singular'])
4086
-                    )
4087
-                );
4088
-            }
4067
+				//if message type was invoice then let's make sure we activate the invoice payment method.
4068
+				if ($message_type->name === 'invoice') {
4069
+					EE_Registry::instance()->load_lib('Payment_Method_Manager');
4070
+					$pm = EE_Payment_Method_Manager::instance()->activate_a_payment_method_of_type('Invoice');
4071
+					if ($pm instanceof EE_Payment_Method) {
4072
+						EE_Error::add_attention(
4073
+							esc_html__(
4074
+								'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.',
4075
+								'event_espresso'
4076
+							)
4077
+						);
4078
+					}
4079
+				}
4080
+				//just toggles the entire messenger
4081
+			} else {
4082
+				EE_Error::add_success(
4083
+					sprintf(
4084
+						esc_html__('%s messenger has been successfully activated', 'event_espresso'),
4085
+						ucwords($messenger->label['singular'])
4086
+					)
4087
+				);
4088
+			}
4089 4089
             
4090
-            return true;
4090
+			return true;
4091 4091
             
4092
-            //possible error condition. This will happen when our active_mts data is empty because it is validated for actual active
4093
-            //message types after the activation process.  However its possible some messengers don't HAVE any default_message_types
4094
-            //in which case we just give a success message for the messenger being successfully activated.
4095
-        } else {
4096
-            if ( ! $messenger->get_default_message_types()) {
4097
-                //messenger doesn't have any default message types so still a success.
4098
-                EE_Error::add_success(
4099
-                    sprintf(
4100
-                        esc_html__('%s messenger was successfully activated.', 'event_espresso'),
4101
-                        ucwords($messenger->label['singular'])
4102
-                    )
4103
-                );
4092
+			//possible error condition. This will happen when our active_mts data is empty because it is validated for actual active
4093
+			//message types after the activation process.  However its possible some messengers don't HAVE any default_message_types
4094
+			//in which case we just give a success message for the messenger being successfully activated.
4095
+		} else {
4096
+			if ( ! $messenger->get_default_message_types()) {
4097
+				//messenger doesn't have any default message types so still a success.
4098
+				EE_Error::add_success(
4099
+					sprintf(
4100
+						esc_html__('%s messenger was successfully activated.', 'event_espresso'),
4101
+						ucwords($messenger->label['singular'])
4102
+					)
4103
+				);
4104 4104
                 
4105
-                return true;
4106
-            } else {
4107
-                EE_Error::add_error(
4108
-                    $message_type instanceof EE_message_type
4109
-                        ? sprintf(
4110
-                        esc_html__('%s message type was not successfully activated with the %s messenger', 'event_espresso'),
4111
-                        ucwords($message_type->label['singular']),
4112
-                        ucwords($messenger->label['singular'])
4113
-                    )
4114
-                        : sprintf(
4115
-                        esc_html__('%s messenger was not successfully activated', 'event_espresso'),
4116
-                        ucwords($messenger->label['singular'])
4117
-                    ),
4118
-                    __FILE__,
4119
-                    __FUNCTION__,
4120
-                    __LINE__
4121
-                );
4105
+				return true;
4106
+			} else {
4107
+				EE_Error::add_error(
4108
+					$message_type instanceof EE_message_type
4109
+						? sprintf(
4110
+						esc_html__('%s message type was not successfully activated with the %s messenger', 'event_espresso'),
4111
+						ucwords($message_type->label['singular']),
4112
+						ucwords($messenger->label['singular'])
4113
+					)
4114
+						: sprintf(
4115
+						esc_html__('%s messenger was not successfully activated', 'event_espresso'),
4116
+						ucwords($messenger->label['singular'])
4117
+					),
4118
+					__FILE__,
4119
+					__FUNCTION__,
4120
+					__LINE__
4121
+				);
4122 4122
                 
4123
-                return false;
4124
-            }
4125
-        }
4126
-    }
4123
+				return false;
4124
+			}
4125
+		}
4126
+	}
4127 4127
 
4128 4128
 
4129
-    /**
4130
-     * This sets up the appropriate response for deactivating a messenger and/or message type.
4131
-     *
4132
-     * @param EE_messenger         $messenger
4133
-     * @param EE_message_type|null $message_type
4134
-     * @return bool
4135
-     * @throws DomainException
4136
-     * @throws EE_Error
4137
-     * @throws InvalidArgumentException
4138
-     * @throws ReflectionException
4139
-     * @throws InvalidDataTypeException
4140
-     * @throws InvalidInterfaceException
4141
-     */
4142
-    protected function _setup_response_message_for_deactivating_messenger_with_message_types(
4143
-        $messenger,
4144
-        EE_message_type $message_type = null
4145
-    ) {
4146
-        EE_Error::overwrite_success();
4147
-        
4148
-        //if $messenger isn't a valid messenger object then get out.
4149
-        if ( ! $messenger instanceof EE_Messenger) {
4150
-            EE_Error::add_error(
4151
-                esc_html__('The messenger being deactivated is not a valid messenger', 'event_espresso'),
4152
-                __FILE__,
4153
-                __FUNCTION__,
4154
-                __LINE__
4155
-            );
4129
+	/**
4130
+	 * This sets up the appropriate response for deactivating a messenger and/or message type.
4131
+	 *
4132
+	 * @param EE_messenger         $messenger
4133
+	 * @param EE_message_type|null $message_type
4134
+	 * @return bool
4135
+	 * @throws DomainException
4136
+	 * @throws EE_Error
4137
+	 * @throws InvalidArgumentException
4138
+	 * @throws ReflectionException
4139
+	 * @throws InvalidDataTypeException
4140
+	 * @throws InvalidInterfaceException
4141
+	 */
4142
+	protected function _setup_response_message_for_deactivating_messenger_with_message_types(
4143
+		$messenger,
4144
+		EE_message_type $message_type = null
4145
+	) {
4146
+		EE_Error::overwrite_success();
4147
+        
4148
+		//if $messenger isn't a valid messenger object then get out.
4149
+		if ( ! $messenger instanceof EE_Messenger) {
4150
+			EE_Error::add_error(
4151
+				esc_html__('The messenger being deactivated is not a valid messenger', 'event_espresso'),
4152
+				__FILE__,
4153
+				__FUNCTION__,
4154
+				__LINE__
4155
+			);
4156 4156
             
4157
-            return false;
4158
-        }
4159
-        
4160
-        if ($message_type instanceof EE_message_type) {
4161
-            $message_type_name = $message_type->name;
4162
-            EE_Error::add_success(
4163
-                sprintf(
4164
-                    esc_html__('%s message type has been successfully deactivated for the %s messenger.', 'event_espresso'),
4165
-                    ucwords($message_type->label['singular']),
4166
-                    ucwords($messenger->label['singular'])
4167
-                )
4168
-            );
4169
-        } else {
4170
-            $message_type_name = '';
4171
-            EE_Error::add_success(
4172
-                sprintf(
4173
-                    esc_html__('%s messenger has been successfully deactivated.', 'event_espresso'),
4174
-                    ucwords($messenger->label['singular'])
4175
-                )
4176
-            );
4177
-        }
4178
-        
4179
-        //if messenger was html or message type was invoice then let's make sure we deactivate invoice payment method.
4180
-        if ($messenger->name === 'html' || $message_type_name === 'invoice') {
4181
-            EE_Registry::instance()->load_lib('Payment_Method_Manager');
4182
-            $count_updated = EE_Payment_Method_Manager::instance()->deactivate_payment_method('invoice');
4183
-            if ($count_updated > 0) {
4184
-                $msg = $message_type_name === 'invoice'
4185
-                    ? esc_html__(
4186
-                        '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.',
4187
-                        'event_espresso'
4188
-                    )
4189
-                    : esc_html__(
4190
-                        '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.',
4191
-                        'event_espresso'
4192
-                    );
4193
-                EE_Error::add_attention($msg);
4194
-            }
4195
-        }
4196
-        
4197
-        return true;
4198
-    }
4157
+			return false;
4158
+		}
4159
+        
4160
+		if ($message_type instanceof EE_message_type) {
4161
+			$message_type_name = $message_type->name;
4162
+			EE_Error::add_success(
4163
+				sprintf(
4164
+					esc_html__('%s message type has been successfully deactivated for the %s messenger.', 'event_espresso'),
4165
+					ucwords($message_type->label['singular']),
4166
+					ucwords($messenger->label['singular'])
4167
+				)
4168
+			);
4169
+		} else {
4170
+			$message_type_name = '';
4171
+			EE_Error::add_success(
4172
+				sprintf(
4173
+					esc_html__('%s messenger has been successfully deactivated.', 'event_espresso'),
4174
+					ucwords($messenger->label['singular'])
4175
+				)
4176
+			);
4177
+		}
4178
+        
4179
+		//if messenger was html or message type was invoice then let's make sure we deactivate invoice payment method.
4180
+		if ($messenger->name === 'html' || $message_type_name === 'invoice') {
4181
+			EE_Registry::instance()->load_lib('Payment_Method_Manager');
4182
+			$count_updated = EE_Payment_Method_Manager::instance()->deactivate_payment_method('invoice');
4183
+			if ($count_updated > 0) {
4184
+				$msg = $message_type_name === 'invoice'
4185
+					? esc_html__(
4186
+						'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.',
4187
+						'event_espresso'
4188
+					)
4189
+					: esc_html__(
4190
+						'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.',
4191
+						'event_espresso'
4192
+					);
4193
+				EE_Error::add_attention($msg);
4194
+			}
4195
+		}
4196
+        
4197
+		return true;
4198
+	}
4199 4199
 
4200 4200
 
4201
-    /**
4202
-     * handles updating a message type form on messenger activation IF the message type has settings fields. (via ajax)
4203
-     *
4204
-     * @throws DomainException
4205
-     */
4206
-    public function update_mt_form()
4207
-    {
4208
-        if ( ! isset($this->_req_data['messenger']) || ! isset($this->_req_data['message_type'])) {
4209
-            EE_Error::add_error(
4210
-                esc_html__('Require message type or messenger to send an updated form', 'event_espresso'),
4211
-                __FILE__,
4212
-                __FUNCTION__,
4213
-                __LINE__
4214
-            );
4215
-            $this->_return_json();
4216
-        }
4217
-        
4218
-        $message_types = $this->get_installed_message_types();
4219
-        
4220
-        $message_type = $message_types[$this->_req_data['message_type']];
4221
-        $messenger    = $this->_message_resource_manager->get_active_messenger($this->_req_data['messenger']);
4222
-        
4223
-        $content                         = $this->_message_type_settings_content(
4224
-            $message_type,
4225
-            $messenger,
4226
-            true
4227
-        );
4228
-        $this->_template_args['success'] = true;
4229
-        $this->_template_args['content'] = $content;
4230
-        $this->_return_json();
4231
-    }
4201
+	/**
4202
+	 * handles updating a message type form on messenger activation IF the message type has settings fields. (via ajax)
4203
+	 *
4204
+	 * @throws DomainException
4205
+	 */
4206
+	public function update_mt_form()
4207
+	{
4208
+		if ( ! isset($this->_req_data['messenger']) || ! isset($this->_req_data['message_type'])) {
4209
+			EE_Error::add_error(
4210
+				esc_html__('Require message type or messenger to send an updated form', 'event_espresso'),
4211
+				__FILE__,
4212
+				__FUNCTION__,
4213
+				__LINE__
4214
+			);
4215
+			$this->_return_json();
4216
+		}
4217
+        
4218
+		$message_types = $this->get_installed_message_types();
4219
+        
4220
+		$message_type = $message_types[$this->_req_data['message_type']];
4221
+		$messenger    = $this->_message_resource_manager->get_active_messenger($this->_req_data['messenger']);
4222
+        
4223
+		$content                         = $this->_message_type_settings_content(
4224
+			$message_type,
4225
+			$messenger,
4226
+			true
4227
+		);
4228
+		$this->_template_args['success'] = true;
4229
+		$this->_template_args['content'] = $content;
4230
+		$this->_return_json();
4231
+	}
4232 4232
     
4233 4233
     
4234
-    /**
4235
-     * this handles saving the settings for a messenger or message type
4236
-     *
4237
-     */
4238
-    public function save_settings()
4239
-    {
4240
-        if ( ! isset($this->_req_data['type'])) {
4241
-            EE_Error::add_error(
4242
-                esc_html__(
4243
-                    'Cannot save settings because type is unknown (messenger settings or messsage type settings?)',
4244
-                    'event_espresso'
4245
-                ),
4246
-                __FILE__,
4247
-                __FUNCTION__,
4248
-                __LINE__
4249
-            );
4250
-            $this->_template_args['error'] = true;
4251
-            $this->_return_json();
4252
-        }
4253
-        
4254
-        
4255
-        if ($this->_req_data['type'] === 'messenger') {
4256
-            //this should be an array.
4257
-            $settings  = $this->_req_data['messenger_settings'];
4258
-            $messenger = $settings['messenger'];
4259
-            //let's setup the settings data
4260
-            foreach ($settings as $key => $value) {
4261
-                switch ($key) {
4262
-                    case 'messenger' :
4263
-                        unset($settings['messenger']);
4264
-                        break;
4265
-                    case 'message_types' :
4266
-                        unset($settings['message_types']);
4267
-                        break;
4268
-                    default :
4269
-                        $settings[$key] = $value;
4270
-                        break;
4271
-                }
4272
-            }
4273
-            $this->_message_resource_manager->add_settings_for_messenger($messenger, $settings);
4274
-        } elseif ($this->_req_data['type'] === 'message_type') {
4275
-            $settings     = $this->_req_data['message_type_settings'];
4276
-            $messenger    = $settings['messenger'];
4277
-            $message_type = $settings['message_type'];
4234
+	/**
4235
+	 * this handles saving the settings for a messenger or message type
4236
+	 *
4237
+	 */
4238
+	public function save_settings()
4239
+	{
4240
+		if ( ! isset($this->_req_data['type'])) {
4241
+			EE_Error::add_error(
4242
+				esc_html__(
4243
+					'Cannot save settings because type is unknown (messenger settings or messsage type settings?)',
4244
+					'event_espresso'
4245
+				),
4246
+				__FILE__,
4247
+				__FUNCTION__,
4248
+				__LINE__
4249
+			);
4250
+			$this->_template_args['error'] = true;
4251
+			$this->_return_json();
4252
+		}
4253
+        
4254
+        
4255
+		if ($this->_req_data['type'] === 'messenger') {
4256
+			//this should be an array.
4257
+			$settings  = $this->_req_data['messenger_settings'];
4258
+			$messenger = $settings['messenger'];
4259
+			//let's setup the settings data
4260
+			foreach ($settings as $key => $value) {
4261
+				switch ($key) {
4262
+					case 'messenger' :
4263
+						unset($settings['messenger']);
4264
+						break;
4265
+					case 'message_types' :
4266
+						unset($settings['message_types']);
4267
+						break;
4268
+					default :
4269
+						$settings[$key] = $value;
4270
+						break;
4271
+				}
4272
+			}
4273
+			$this->_message_resource_manager->add_settings_for_messenger($messenger, $settings);
4274
+		} elseif ($this->_req_data['type'] === 'message_type') {
4275
+			$settings     = $this->_req_data['message_type_settings'];
4276
+			$messenger    = $settings['messenger'];
4277
+			$message_type = $settings['message_type'];
4278 4278
             
4279
-            foreach ($settings as $key => $value) {
4280
-                switch ($key) {
4281
-                    case 'messenger' :
4282
-                        unset($settings['messenger']);
4283
-                        break;
4284
-                    case 'message_type' :
4285
-                        unset($settings['message_type']);
4286
-                        break;
4287
-                    default :
4288
-                        $settings[$key] = $value;
4289
-                        break;
4290
-                }
4291
-            }
4279
+			foreach ($settings as $key => $value) {
4280
+				switch ($key) {
4281
+					case 'messenger' :
4282
+						unset($settings['messenger']);
4283
+						break;
4284
+					case 'message_type' :
4285
+						unset($settings['message_type']);
4286
+						break;
4287
+					default :
4288
+						$settings[$key] = $value;
4289
+						break;
4290
+				}
4291
+			}
4292 4292
             
4293
-            $this->_message_resource_manager->add_settings_for_message_type($messenger, $message_type, $settings);
4294
-        }
4295
-        
4296
-        //okay we should have the data all setup.  Now we just update!
4297
-        $success = $this->_message_resource_manager->update_active_messengers_option();
4298
-        
4299
-        if ($success) {
4300
-            EE_Error::add_success(__('Settings updated', 'event_espresso'));
4301
-        } else {
4302
-            EE_Error::add_error(
4303
-                esc_html__(
4304
-                    'Settings did not get updated',
4305
-                    'event_espresso'
4306
-                ),
4307
-                __FILE__,
4308
-                __FUNCTION__,
4309
-                __LINE__
4310
-            );
4311
-        }
4312
-        
4313
-        $this->_template_args['success'] = $success;
4314
-        $this->_return_json();
4315
-    }
4293
+			$this->_message_resource_manager->add_settings_for_message_type($messenger, $message_type, $settings);
4294
+		}
4295
+        
4296
+		//okay we should have the data all setup.  Now we just update!
4297
+		$success = $this->_message_resource_manager->update_active_messengers_option();
4298
+        
4299
+		if ($success) {
4300
+			EE_Error::add_success(__('Settings updated', 'event_espresso'));
4301
+		} else {
4302
+			EE_Error::add_error(
4303
+				esc_html__(
4304
+					'Settings did not get updated',
4305
+					'event_espresso'
4306
+				),
4307
+				__FILE__,
4308
+				__FUNCTION__,
4309
+				__LINE__
4310
+			);
4311
+		}
4312
+        
4313
+		$this->_template_args['success'] = $success;
4314
+		$this->_return_json();
4315
+	}
4316 4316
     
4317 4317
     
4318 4318
     
4319 4319
     
4320
-    /**  EE MESSAGE PROCESSING ACTIONS **/
4320
+	/**  EE MESSAGE PROCESSING ACTIONS **/
4321 4321
 
4322 4322
 
4323
-    /**
4324
-     * This immediately generates any EE_Message ID's that are selected that are EEM_Message::status_incomplete
4325
-     * However, this does not send immediately, it just queues for sending.
4326
-     *
4327
-     * @since 4.9.0
4328
-     * @throws EE_Error
4329
-     * @throws InvalidDataTypeException
4330
-     * @throws InvalidInterfaceException
4331
-     * @throws InvalidArgumentException
4332
-     * @throws ReflectionException
4333
-     */
4334
-    protected function _generate_now()
4335
-    {
4336
-        EED_Messages::generate_now($this->_get_msg_ids_from_request());
4337
-        $this->_redirect_after_action(false, '', '', array(), true);
4338
-    }
4323
+	/**
4324
+	 * This immediately generates any EE_Message ID's that are selected that are EEM_Message::status_incomplete
4325
+	 * However, this does not send immediately, it just queues for sending.
4326
+	 *
4327
+	 * @since 4.9.0
4328
+	 * @throws EE_Error
4329
+	 * @throws InvalidDataTypeException
4330
+	 * @throws InvalidInterfaceException
4331
+	 * @throws InvalidArgumentException
4332
+	 * @throws ReflectionException
4333
+	 */
4334
+	protected function _generate_now()
4335
+	{
4336
+		EED_Messages::generate_now($this->_get_msg_ids_from_request());
4337
+		$this->_redirect_after_action(false, '', '', array(), true);
4338
+	}
4339 4339
 
4340 4340
 
4341
-    /**
4342
-     * This immediately generates AND sends any EE_Message's selected that are EEM_Message::status_incomplete or that
4343
-     * are EEM_Message::status_resend or EEM_Message::status_idle
4344
-     *
4345
-     * @since 4.9.0
4346
-     * @throws EE_Error
4347
-     * @throws InvalidDataTypeException
4348
-     * @throws InvalidInterfaceException
4349
-     * @throws InvalidArgumentException
4350
-     * @throws ReflectionException
4351
-     */
4352
-    protected function _generate_and_send_now()
4353
-    {
4354
-        EED_Messages::generate_and_send_now($this->_get_msg_ids_from_request());
4355
-        $this->_redirect_after_action(false, '', '', array(), true);
4356
-    }
4341
+	/**
4342
+	 * This immediately generates AND sends any EE_Message's selected that are EEM_Message::status_incomplete or that
4343
+	 * are EEM_Message::status_resend or EEM_Message::status_idle
4344
+	 *
4345
+	 * @since 4.9.0
4346
+	 * @throws EE_Error
4347
+	 * @throws InvalidDataTypeException
4348
+	 * @throws InvalidInterfaceException
4349
+	 * @throws InvalidArgumentException
4350
+	 * @throws ReflectionException
4351
+	 */
4352
+	protected function _generate_and_send_now()
4353
+	{
4354
+		EED_Messages::generate_and_send_now($this->_get_msg_ids_from_request());
4355
+		$this->_redirect_after_action(false, '', '', array(), true);
4356
+	}
4357 4357
 
4358 4358
 
4359
-    /**
4360
-     * This queues any EEM_Message::status_sent EE_Message ids in the request for resending.
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 _queue_for_resending()
4370
-    {
4371
-        EED_Messages::queue_for_resending($this->_get_msg_ids_from_request());
4372
-        $this->_redirect_after_action(false, '', '', array(), true);
4373
-    }
4359
+	/**
4360
+	 * This queues any EEM_Message::status_sent EE_Message ids in the request for resending.
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 _queue_for_resending()
4370
+	{
4371
+		EED_Messages::queue_for_resending($this->_get_msg_ids_from_request());
4372
+		$this->_redirect_after_action(false, '', '', array(), true);
4373
+	}
4374 4374
 
4375 4375
 
4376
-    /**
4377
-     *  This sends immediately any EEM_Message::status_idle or EEM_Message::status_resend messages in the queue
4378
-     *
4379
-     * @since 4.9.0
4380
-     * @throws EE_Error
4381
-     * @throws InvalidDataTypeException
4382
-     * @throws InvalidInterfaceException
4383
-     * @throws InvalidArgumentException
4384
-     * @throws ReflectionException
4385
-     */
4386
-    protected function _send_now()
4387
-    {
4388
-        EED_Messages::send_now($this->_get_msg_ids_from_request());
4389
-        $this->_redirect_after_action(false, '', '', array(), true);
4390
-    }
4376
+	/**
4377
+	 *  This sends immediately any EEM_Message::status_idle or EEM_Message::status_resend messages in the queue
4378
+	 *
4379
+	 * @since 4.9.0
4380
+	 * @throws EE_Error
4381
+	 * @throws InvalidDataTypeException
4382
+	 * @throws InvalidInterfaceException
4383
+	 * @throws InvalidArgumentException
4384
+	 * @throws ReflectionException
4385
+	 */
4386
+	protected function _send_now()
4387
+	{
4388
+		EED_Messages::send_now($this->_get_msg_ids_from_request());
4389
+		$this->_redirect_after_action(false, '', '', array(), true);
4390
+	}
4391 4391
 
4392 4392
 
4393
-    /**
4394
-     * Deletes EE_messages for IDs in the request.
4395
-     *
4396
-     * @since 4.9.0
4397
-     * @throws EE_Error
4398
-     * @throws InvalidDataTypeException
4399
-     * @throws InvalidInterfaceException
4400
-     * @throws InvalidArgumentException
4401
-     */
4402
-    protected function _delete_ee_messages()
4403
-    {
4404
-        $msg_ids       = $this->_get_msg_ids_from_request();
4405
-        $deleted_count = 0;
4406
-        foreach ($msg_ids as $msg_id) {
4407
-            if (EEM_Message::instance()->delete_by_ID($msg_id)) {
4408
-                $deleted_count++;
4409
-            }
4410
-        }
4411
-        if ($deleted_count) {
4412
-            EE_Error::add_success(esc_html(_n('Message successfully deleted', 'Messages successfully deleted', $deleted_count, 'event_espresso')));
4413
-            $this->_redirect_after_action(
4414
-                false,
4415
-                '',
4416
-                '',
4417
-                array(),
4418
-                true
4419
-            );
4420
-        } else {
4421
-            EE_Error::add_error(
4422
-                _n('The message was not deleted.', 'The messages were not deleted', count($msg_ids), 'event_espresso'),
4423
-                __FILE__, __FUNCTION__, __LINE__
4424
-            );
4425
-            $this->_redirect_after_action(false, '', '', array(), true);
4426
-        }
4427
-    }
4393
+	/**
4394
+	 * Deletes EE_messages for IDs in the request.
4395
+	 *
4396
+	 * @since 4.9.0
4397
+	 * @throws EE_Error
4398
+	 * @throws InvalidDataTypeException
4399
+	 * @throws InvalidInterfaceException
4400
+	 * @throws InvalidArgumentException
4401
+	 */
4402
+	protected function _delete_ee_messages()
4403
+	{
4404
+		$msg_ids       = $this->_get_msg_ids_from_request();
4405
+		$deleted_count = 0;
4406
+		foreach ($msg_ids as $msg_id) {
4407
+			if (EEM_Message::instance()->delete_by_ID($msg_id)) {
4408
+				$deleted_count++;
4409
+			}
4410
+		}
4411
+		if ($deleted_count) {
4412
+			EE_Error::add_success(esc_html(_n('Message successfully deleted', 'Messages successfully deleted', $deleted_count, 'event_espresso')));
4413
+			$this->_redirect_after_action(
4414
+				false,
4415
+				'',
4416
+				'',
4417
+				array(),
4418
+				true
4419
+			);
4420
+		} else {
4421
+			EE_Error::add_error(
4422
+				_n('The message was not deleted.', 'The messages were not deleted', count($msg_ids), 'event_espresso'),
4423
+				__FILE__, __FUNCTION__, __LINE__
4424
+			);
4425
+			$this->_redirect_after_action(false, '', '', array(), true);
4426
+		}
4427
+	}
4428 4428
     
4429 4429
     
4430
-    /**
4431
-     *  This looks for 'MSG_ID' key in the request and returns an array of MSG_ID's if present.
4432
-     * @since 4.9.0
4433
-     * @return array
4434
-     */
4435
-    protected function _get_msg_ids_from_request()
4436
-    {
4437
-        if ( ! isset($this->_req_data['MSG_ID'])) {
4438
-            return array();
4439
-        }
4440
-        
4441
-        return is_array($this->_req_data['MSG_ID'])
4442
-            ? array_keys($this->_req_data['MSG_ID'])
4443
-            : array($this->_req_data['MSG_ID']);
4444
-    }
4430
+	/**
4431
+	 *  This looks for 'MSG_ID' key in the request and returns an array of MSG_ID's if present.
4432
+	 * @since 4.9.0
4433
+	 * @return array
4434
+	 */
4435
+	protected function _get_msg_ids_from_request()
4436
+	{
4437
+		if ( ! isset($this->_req_data['MSG_ID'])) {
4438
+			return array();
4439
+		}
4440
+        
4441
+		return is_array($this->_req_data['MSG_ID'])
4442
+			? array_keys($this->_req_data['MSG_ID'])
4443
+			: array($this->_req_data['MSG_ID']);
4444
+	}
4445 4445
 }
Please login to merge, or discard this patch.
acceptance_tests/tests/b-TestRegistrationSummaryCept.php 1 patch
Indentation   +41 added lines, -41 removed lines patch added patch discarded remove patch
@@ -14,8 +14,8 @@  discard block
 block discarded – undo
14 14
 
15 15
 //need the MER plugin active for this test (we'll deactivate it after).
16 16
 $I->ensurePluginActive(
17
-    'event-espresso-mer-multi-event-registration',
18
-    'activated'
17
+	'event-espresso-mer-multi-event-registration',
18
+	'activated'
19 19
 );
20 20
 
21 21
 //k now we need to make sure the registration multi-status message type is active because it isn't by default
@@ -73,38 +73,38 @@  discard block
 block discarded – undo
73 73
 $I->loginAsAdmin();
74 74
 $I->amOnMessagesActivityListTablePage();
75 75
 $I->see(
76
-    '[email protected]',
77
-    MessagesAdmin::messagesActivityListTableCellSelectorFor(
78
-        'to',
79
-        'Registration Multi-status Summary',
80
-        MessagesAdmin::MESSAGE_STATUS_SENT,
81
-        '',
82
-        'Primary Registrant'
83
-    )
76
+	'[email protected]',
77
+	MessagesAdmin::messagesActivityListTableCellSelectorFor(
78
+		'to',
79
+		'Registration Multi-status Summary',
80
+		MessagesAdmin::MESSAGE_STATUS_SENT,
81
+		'',
82
+		'Primary Registrant'
83
+	)
84 84
 );
85 85
 $I->see(
86
-    '[email protected]',
87
-    MessagesAdmin::messagesActivityListTableCellSelectorFor(
88
-        'to',
89
-        'Registration Multi-status Summary',
90
-        MessagesAdmin::MESSAGE_STATUS_SENT
91
-    )
86
+	'[email protected]',
87
+	MessagesAdmin::messagesActivityListTableCellSelectorFor(
88
+		'to',
89
+		'Registration Multi-status Summary',
90
+		MessagesAdmin::MESSAGE_STATUS_SENT
91
+	)
92 92
 );
93 93
 //verify count
94 94
 $I->verifyMatchingCountofTextInMessageActivityListTableFor(
95
-    1,
96
-    '[email protected]',
97
-    'to',
98
-    'Registration Multi-status Summary',
99
-    MessagesAdmin::MESSAGE_STATUS_SENT,
100
-    'Email',
101
-    'Primary Registrant'
95
+	1,
96
+	'[email protected]',
97
+	'to',
98
+	'Registration Multi-status Summary',
99
+	MessagesAdmin::MESSAGE_STATUS_SENT,
100
+	'Email',
101
+	'Primary Registrant'
102 102
 );
103 103
 $I->verifyMatchingCountofTextInMessageActivityListTableFor(
104
-    1,
105
-    '[email protected]',
106
-    'to',
107
-    'Registration Multi-status Summary'
104
+	1,
105
+	'[email protected]',
106
+	'to',
107
+	'Registration Multi-status Summary'
108 108
 );
109 109
 
110 110
 //okay now let's do some registrations for just the first event and verify that registration multi-status summary is NOT
@@ -134,25 +134,25 @@  discard block
 block discarded – undo
134 134
 $I->loginAsAdmin();
135 135
 $I->amOnMessagesActivityListTablePage();
136 136
 $I->dontSee(
137
-    '[email protected]',
138
-    MessagesAdmin::messagesActivityListTableCellSelectorFor(
139
-        'to',
140
-        'Registration Multi-status Summary',
141
-        MessagesAdmin::MESSAGE_STATUS_SENT,
142
-        '',
143
-        'Primary Registrant'
144
-    )
137
+	'[email protected]',
138
+	MessagesAdmin::messagesActivityListTableCellSelectorFor(
139
+		'to',
140
+		'Registration Multi-status Summary',
141
+		MessagesAdmin::MESSAGE_STATUS_SENT,
142
+		'',
143
+		'Primary Registrant'
144
+	)
145 145
 );
146 146
 //there should still only be one admin multi-status summary thing.
147 147
 $I->verifyMatchingCountofTextInMessageActivityListTableFor(
148
-    1,
149
-    '[email protected]',
150
-    'to',
151
-    'Registration Multi-status Summary'
148
+	1,
149
+	'[email protected]',
150
+	'to',
151
+	'Registration Multi-status Summary'
152 152
 );
153 153
 
154 154
 //deactivate MER plugin so its not active for future tests
155 155
 $I->ensurePluginDeactivated(
156
-    'event-espresso-mer-multi-event-registration',
157
-    'plugins deactivated'
156
+	'event-espresso-mer-multi-event-registration',
157
+	'plugins deactivated'
158 158
 );
159 159
\ No newline at end of file
Please login to merge, or discard this patch.
acceptance_tests/tests/c-TestCustomMessageTemplateCept.php 1 patch
Indentation   +27 added lines, -27 removed lines patch added patch discarded remove patch
@@ -18,14 +18,14 @@  discard block
 block discarded – undo
18 18
 $event_one_link = $event_two_link = $event_three_link = '';
19 19
 
20 20
 $I->wantTo(
21
-    'Test that when registrations for multiple events are completed, and those events share the same custom'
22
-    . 'template, that that custom template will be used.'
21
+	'Test that when registrations for multiple events are completed, and those events share the same custom'
22
+	. 'template, that that custom template will be used.'
23 23
 );
24 24
 
25 25
 //need the MER plugin active for this test (we'll deactivate it after).
26 26
 $I->ensurePluginActive(
27
-    'event-espresso-mer-multi-event-registration',
28
-    'activated'
27
+	'event-espresso-mer-multi-event-registration',
28
+	'activated'
29 29
 );
30 30
 
31 31
 $I->loginAsAdmin();
@@ -80,9 +80,9 @@  discard block
 block discarded – undo
80 80
 
81 81
 
82 82
 $test_registration_details = array(
83
-    'fname' => 'CTGuy',
84
-    'lname' => 'Dude',
85
-    'email' => '[email protected]'
83
+	'fname' => 'CTGuy',
84
+	'lname' => 'Dude',
85
+	'email' => '[email protected]'
86 86
 );
87 87
 
88 88
 $I->amGoingTo('Register for Event One and Event Two and verify Custom Template A was used.');
@@ -108,23 +108,23 @@  discard block
 block discarded – undo
108 108
 $I->loginAsAdmin();
109 109
 $I->amOnMessagesActivityListTablePage();
110 110
 $I->viewMessageInMessagesListTableFor(
111
-    'Registration Approved',
112
-    MessagesAdmin::MESSAGE_STATUS_SENT,
113
-    'Email',
114
-    'Registrant'
111
+	'Registration Approved',
112
+	MessagesAdmin::MESSAGE_STATUS_SENT,
113
+	'Email',
114
+	'Registrant'
115 115
 );
116 116
 $I->seeTextInViewMessageModal($custom_template_a_label);
117 117
 $I->dismissMessageModal();
118 118
 $I->deleteMessageInMessagesListTableFor(
119
-    'Registration Approved',
120
-    MessagesAdmin::MESSAGE_STATUS_SENT,
121
-    'Email',
122
-    'Registrant'
119
+	'Registration Approved',
120
+	MessagesAdmin::MESSAGE_STATUS_SENT,
121
+	'Email',
122
+	'Registrant'
123 123
 );
124 124
 
125 125
 //verify admin context
126 126
 $I->viewMessageInMessagesListTableFor(
127
-    'Registration Approved'
127
+	'Registration Approved'
128 128
 );
129 129
 $I->seeTextInViewMessageModal($custom_template_a_label);
130 130
 $I->dismissMessageModal();
@@ -153,25 +153,25 @@  discard block
 block discarded – undo
153 153
 $I->loginAsAdmin();
154 154
 $I->amOnMessagesActivityListTablePage();
155 155
 $I->viewMessageInMessagesListTableFor(
156
-    'Registration Approved',
157
-    MessagesAdmin::MESSAGE_STATUS_SENT,
158
-    'Email',
159
-    'Registrant'
156
+	'Registration Approved',
157
+	MessagesAdmin::MESSAGE_STATUS_SENT,
158
+	'Email',
159
+	'Registrant'
160 160
 );
161 161
 $I->waitForElementVisible(MessagesAdmin::MESSAGES_LIST_TABLE_VIEW_MESSAGE_DIALOG_CONTAINER_SELECTOR);
162 162
 $I->dontSeeTextInViewMessageModal($custom_template_a_label);
163 163
 $I->dontSeeTextInViewMessageModal($custom_template_b_label);
164 164
 $I->dismissMessageModal();
165 165
 $I->deleteMessageInMessagesListTableFor(
166
-    'Registration Approved',
167
-    MessagesAdmin::MESSAGE_STATUS_SENT,
168
-    'Email',
169
-    'Registrant'
166
+	'Registration Approved',
167
+	MessagesAdmin::MESSAGE_STATUS_SENT,
168
+	'Email',
169
+	'Registrant'
170 170
 );
171 171
 
172 172
 //verify admin context
173 173
 $I->viewMessageInMessagesListTableFor(
174
-    'Registration Approved'
174
+	'Registration Approved'
175 175
 );
176 176
 $I->waitForElementVisible(MessagesAdmin::MESSAGES_LIST_TABLE_VIEW_MESSAGE_DIALOG_CONTAINER_SELECTOR);
177 177
 $I->dontSee($custom_template_a_label);
@@ -183,6 +183,6 @@  discard block
 block discarded – undo
183 183
 
184 184
 //deactivate MER plugin so its not active for future tests
185 185
 $I->ensurePluginDeactivated(
186
-    'event-espresso-mer-multi-event-registration',
187
-    'plugins deactivated'
186
+	'event-espresso-mer-multi-event-registration',
187
+	'plugins deactivated'
188 188
 );
189 189
\ No newline at end of file
Please login to merge, or discard this patch.
acceptance_tests/Page/EventsAdmin.php 1 patch
Indentation   +263 added lines, -263 removed lines patch added patch discarded remove patch
@@ -14,267 +14,267 @@
 block discarded – undo
14 14
 class EventsAdmin extends CoreAdmin
15 15
 {
16 16
 
17
-    /**
18
-     * Selector for the Add new Event button in the admin.
19
-     * @var string
20
-     */
21
-    const ADD_NEW_EVENT_BUTTON_SELECTOR = '#add-new-event';
22
-
23
-
24
-    /**
25
-     * Selector for the Event Title field in the event editor
26
-     * @var string
27
-     */
28
-    const EVENT_EDITOR_TITLE_FIELD_SELECTOR = ['xpath' => "//input[@id='title']"];
29
-
30
-    /**
31
-     * Selector for the publish submit button in the event editor.
32
-     * @var string
33
-     */
34
-    const EVENT_EDITOR_PUBLISH_BUTTON_SELECTOR = ['xpath'=>"//div[@id='major-publishing-actions']//input[@id='publish']"];
35
-
36
-
37
-    /**
38
-     * Selector for the save button in the event editor
39
-     */
40
-    const EVENT_EDITOR_SAVE_BUTTON_SELECTOR = ['xpath' => "//div[@id='minor-publishing-actions']//input[@id='save-post']"];
41
-
42
-
43
-    /**
44
-     * @var string
45
-     */
46
-    const EVENT_EDITOR_DEFAULT_REGISTRATION_STATUS_FIELD_SELECTOR = '#EVT_default_registration_status';
47
-
48
-    /**
49
-     * Selector for the view link after publishing an event.
50
-     * @var string
51
-     */
52
-    const EVENT_EDITOR_VIEW_LINK_AFTER_PUBLISH_SELECTOR = "//span[@id='sample-permalink']/a";
53
-
54
-
55
-    /**
56
-     * Selector for the ID of the event in the event editor
57
-     * @var string
58
-     */
59
-    const EVENT_EDITOR_EVT_ID_SELECTOR = "//input[@id='post_ID']";
60
-
61
-
62
-    /**
63
-     * Selector for the search input on the event list table page.
64
-     * @var string
65
-     */
66
-    const EVENT_LIST_TABLE_SEARCH_INPUT_SELECTOR = '#toplevel_page_espresso_events-search-input';
67
-
68
-
69
-
70
-
71
-    /**
72
-     * @param string $additional_params
73
-     * @return string
74
-     */
75
-    public static function defaultEventsListTableUrl($additional_params = '')
76
-    {
77
-        return self::adminUrl('espresso_events', 'default', $additional_params);
78
-    }
79
-
80
-
81
-    /**
82
-     * The selector for the DTTname field for the given row in the event editor.
83
-     * @param int $row_number
84
-     * @return string
85
-     */
86
-    public static function eventEditorDatetimeNameFieldSelector($row_number = 1)
87
-    {
88
-        return self::eventEditorDatetimeFieldSelectorForField('DTT_name', $row_number);
89
-    }
90
-
91
-
92
-    /**
93
-     * The selector for the DTT_EVT_start field for the given row in the event editor.d
94
-     * @param int $row_number
95
-     * @return string
96
-     */
97
-    public static function eventEditorDatetimeStartDateFieldSelector($row_number = 1)
98
-    {
99
-        return self::eventEditorDatetimeFieldSelectorForField('DTT_EVT_start', $row_number);
100
-    }
101
-
102
-
103
-    /**
104
-     * Wrapper for getting the selector for a given field and given row of a datetime in the event editor.
105
-     *
106
-     * @param string $field_name
107
-     * @param int    $row_number
108
-     * @return string
109
-     */
110
-    public static function eventEditorDatetimeFieldSelectorForField($field_name, $row_number = 1)
111
-    {
112
-        return "//input[@id='event-datetime-$field_name-$row_number']";
113
-    }
114
-
115
-
116
-    /**
117
-     * The selector for the TKT_name field for the given display row in the event editor.
118
-     * @param int $row_number
119
-     * @return string
120
-     */
121
-    public static function eventEditorTicketNameFieldSelector($row_number = 1)
122
-    {
123
-        return self::eventEditorTicketFieldSelectorForFieldInDisplayRow('TKT_name', $row_number);
124
-    }
125
-
126
-
127
-    /**
128
-     * Selector for the TKT_base_price field for the given display row in the event editor.
129
-     * @param int $row_number
130
-     * @return string
131
-     */
132
-    public static function eventEditorTicketPriceFieldSelector($row_number = 1)
133
-    {
134
-        return self::eventEditorTicketFieldSelectorForFieldInDisplayRow('TKT_base_price', $row_number);
135
-    }
136
-
137
-
138
-    /**
139
-     * Selector for the TKT_qty field for the given display row in the event editor.
140
-     * @param int $row_number
141
-     * @return string
142
-     */
143
-    public static function eventEditorTicketQuantityFieldSelector($row_number = 1)
144
-    {
145
-        return self::eventEditorTicketFieldSelectorForFieldInDisplayRow('TKT_qty', $row_number);
146
-    }
147
-
148
-
149
-    /**
150
-     * Selector for the advanced details toggle for the ticket for the given display row in the event editor.
151
-     * @param int $row_number
152
-     * @return string
153
-     */
154
-    public static function eventEditorTicketAdvancedDetailsSelector($row_number = 1)
155
-    {
156
-        return "//tr[@id='display-ticketrow-$row_number']//span[contains(@class, 'gear-icon')]";
157
-    }
158
-
159
-
160
-    /**
161
-     * Selector for the subtotal amount for the given display row of the ticket in the event editor.
162
-     * @param int $row_number
163
-     * @return string
164
-     */
165
-    public static function eventEditorTicketAdvancedDetailsSubtotalSelector($row_number = 1)
166
-    {
167
-        return "//span[@id='price-total-amount-$row_number']";
168
-    }
169
-
170
-
171
-    /**
172
-     * Selector for the Total element for the given display row of the ticket in the event editor.
173
-     * @param int $row_number
174
-     * @return string
175
-     */
176
-    public static function eventEditorTicketAdvancedDetailsTotalSelector($row_number = 1)
177
-    {
178
-        return "//span[@id='price-total-amount-$row_number']";
179
-    }
180
-
181
-
182
-    /**
183
-     * Selector for the taxable selector for the ticket for the given display row in the event editor.
184
-     * @param int $row_number
185
-     * @return string
186
-     */
187
-    public static function eventEditorTicketTaxableCheckboxSelector($row_number = 1)
188
-    {
189
-        return "//input[@id='edit-ticket-TKT_taxable-$row_number']";
190
-    }
191
-
192
-
193
-    /**
194
-     * This returns the xpath locater for the Tax amount display container within the advanced settings view for the
195
-     * given ticket (row) and the given tax id (PRC_ID).
196
-     *
197
-     * @param int $tax_id     The PRC_ID for the tax you want the locater for.  Note, this defaults to the default tax
198
-     *                        setup on a fresh install.
199
-     * @param int $row_number What row representing the ticket you want the locator for.
200
-     * @return string
201
-     */
202
-    public static function eventEditorTicketTaxAmountDisplayForTaxIdAndTicketRowSelector($tax_id = 2, $row_number = 1)
203
-    {
204
-        return "//span[@id='TKT-tax-amount-display-$tax_id-$row_number']";
205
-    }
206
-
207
-
208
-    /**
209
-     * Wrapper for getting the selector for a given field and given display row of a ticket in the event editor.
210
-     * @param     $field_name
211
-     * @param int $row_number
212
-     * @return string
213
-     */
214
-    public static function eventEditorTicketFieldSelectorForFieldInDisplayRow($field_name, $row_number = 1)
215
-    {
216
-        return "//tr[@id='display-ticketrow-$row_number']//input[contains(@class, 'edit-ticket-$field_name')]";
217
-    }
218
-
219
-
220
-    /**
221
-     * Returns the selector for the event title edit link in the events list table for the given Event Title.
222
-     * @param string $event_title
223
-     * @return string
224
-     */
225
-    public static function eventListTableEventTitleEditLinkSelectorForTitle($event_title)
226
-    {
227
-        return "//td[contains(@class, 'column-name')]/strong/a[text()='$event_title']";
228
-    }
229
-
230
-
231
-    /**
232
-     * Locator for for the ID column in the event list table for a given event title.
233
-     * @param string $event_title
234
-     * @return string
235
-     */
236
-    public static function eventListTableEventIdSelectorForTitle($event_title)
237
-    {
238
-        return "//td[contains(@class, 'column-name')]/strong/a[text()='$event_title']"
239
-               . "//ancestor::tr/th[contains(@class, 'check-column')]/input";
240
-    }
241
-
242
-
243
-    /**
244
-     * Locator for the view link in the row of an event list table for the given event title.
245
-     * @param string $event_title
246
-     * @return string
247
-     */
248
-    public static function eventListTableEventTitleViewLinkSelectorForTitle($event_title)
249
-    {
250
-        return "//td[contains(@class, 'column-name')]/strong/a[text()='$event_title']"
251
-               . "//ancestor::td//span[@class='view']/a";
252
-    }
253
-
254
-
255
-    /**
256
-     * Locator for the messenger tab in the Notifications metabox in the event editor.
257
-     * @param string $messenger_slug  The slug for the messenger (it's reference slug).
258
-     * @return string
259
-     */
260
-    public static function eventEditorNotificationsMetaBoxMessengerTabSelector($messenger_slug)
261
-    {
262
-        return "//div[@id='espresso_events_Messages_Hooks_Extend_messages_metabox_metabox']"
263
-               . "//a[@rel='ee-tab-$messenger_slug']";
264
-    }
265
-
266
-
267
-    /**
268
-     * Locator for the select input within the notifications metabox.
269
-     * Note, this assumes the tab content for the related messenger is already visible.
270
-     * @param string $message_type_label The message type label (visible string in the table) you want the selector for.
271
-     * @return string
272
-     */
273
-    public static function eventEditorNotificationsMetaBoxSelectSelectorForMessageType($message_type_label)
274
-    {
275
-        return "//div[@id='espresso_events_Messages_Hooks_Extend_messages_metabox_metabox']"
276
-               . "//table[@class='messages-custom-template-switcher']"
277
-               . "//tr/td[contains(.,'Registration Approved')]"
278
-               . "//ancestor::tr//select[contains(@class,'message-template-selector')]";
279
-    }
17
+	/**
18
+	 * Selector for the Add new Event button in the admin.
19
+	 * @var string
20
+	 */
21
+	const ADD_NEW_EVENT_BUTTON_SELECTOR = '#add-new-event';
22
+
23
+
24
+	/**
25
+	 * Selector for the Event Title field in the event editor
26
+	 * @var string
27
+	 */
28
+	const EVENT_EDITOR_TITLE_FIELD_SELECTOR = ['xpath' => "//input[@id='title']"];
29
+
30
+	/**
31
+	 * Selector for the publish submit button in the event editor.
32
+	 * @var string
33
+	 */
34
+	const EVENT_EDITOR_PUBLISH_BUTTON_SELECTOR = ['xpath'=>"//div[@id='major-publishing-actions']//input[@id='publish']"];
35
+
36
+
37
+	/**
38
+	 * Selector for the save button in the event editor
39
+	 */
40
+	const EVENT_EDITOR_SAVE_BUTTON_SELECTOR = ['xpath' => "//div[@id='minor-publishing-actions']//input[@id='save-post']"];
41
+
42
+
43
+	/**
44
+	 * @var string
45
+	 */
46
+	const EVENT_EDITOR_DEFAULT_REGISTRATION_STATUS_FIELD_SELECTOR = '#EVT_default_registration_status';
47
+
48
+	/**
49
+	 * Selector for the view link after publishing an event.
50
+	 * @var string
51
+	 */
52
+	const EVENT_EDITOR_VIEW_LINK_AFTER_PUBLISH_SELECTOR = "//span[@id='sample-permalink']/a";
53
+
54
+
55
+	/**
56
+	 * Selector for the ID of the event in the event editor
57
+	 * @var string
58
+	 */
59
+	const EVENT_EDITOR_EVT_ID_SELECTOR = "//input[@id='post_ID']";
60
+
61
+
62
+	/**
63
+	 * Selector for the search input on the event list table page.
64
+	 * @var string
65
+	 */
66
+	const EVENT_LIST_TABLE_SEARCH_INPUT_SELECTOR = '#toplevel_page_espresso_events-search-input';
67
+
68
+
69
+
70
+
71
+	/**
72
+	 * @param string $additional_params
73
+	 * @return string
74
+	 */
75
+	public static function defaultEventsListTableUrl($additional_params = '')
76
+	{
77
+		return self::adminUrl('espresso_events', 'default', $additional_params);
78
+	}
79
+
80
+
81
+	/**
82
+	 * The selector for the DTTname field for the given row in the event editor.
83
+	 * @param int $row_number
84
+	 * @return string
85
+	 */
86
+	public static function eventEditorDatetimeNameFieldSelector($row_number = 1)
87
+	{
88
+		return self::eventEditorDatetimeFieldSelectorForField('DTT_name', $row_number);
89
+	}
90
+
91
+
92
+	/**
93
+	 * The selector for the DTT_EVT_start field for the given row in the event editor.d
94
+	 * @param int $row_number
95
+	 * @return string
96
+	 */
97
+	public static function eventEditorDatetimeStartDateFieldSelector($row_number = 1)
98
+	{
99
+		return self::eventEditorDatetimeFieldSelectorForField('DTT_EVT_start', $row_number);
100
+	}
101
+
102
+
103
+	/**
104
+	 * Wrapper for getting the selector for a given field and given row of a datetime in the event editor.
105
+	 *
106
+	 * @param string $field_name
107
+	 * @param int    $row_number
108
+	 * @return string
109
+	 */
110
+	public static function eventEditorDatetimeFieldSelectorForField($field_name, $row_number = 1)
111
+	{
112
+		return "//input[@id='event-datetime-$field_name-$row_number']";
113
+	}
114
+
115
+
116
+	/**
117
+	 * The selector for the TKT_name field for the given display row in the event editor.
118
+	 * @param int $row_number
119
+	 * @return string
120
+	 */
121
+	public static function eventEditorTicketNameFieldSelector($row_number = 1)
122
+	{
123
+		return self::eventEditorTicketFieldSelectorForFieldInDisplayRow('TKT_name', $row_number);
124
+	}
125
+
126
+
127
+	/**
128
+	 * Selector for the TKT_base_price field for the given display row in the event editor.
129
+	 * @param int $row_number
130
+	 * @return string
131
+	 */
132
+	public static function eventEditorTicketPriceFieldSelector($row_number = 1)
133
+	{
134
+		return self::eventEditorTicketFieldSelectorForFieldInDisplayRow('TKT_base_price', $row_number);
135
+	}
136
+
137
+
138
+	/**
139
+	 * Selector for the TKT_qty field for the given display row in the event editor.
140
+	 * @param int $row_number
141
+	 * @return string
142
+	 */
143
+	public static function eventEditorTicketQuantityFieldSelector($row_number = 1)
144
+	{
145
+		return self::eventEditorTicketFieldSelectorForFieldInDisplayRow('TKT_qty', $row_number);
146
+	}
147
+
148
+
149
+	/**
150
+	 * Selector for the advanced details toggle for the ticket for the given display row in the event editor.
151
+	 * @param int $row_number
152
+	 * @return string
153
+	 */
154
+	public static function eventEditorTicketAdvancedDetailsSelector($row_number = 1)
155
+	{
156
+		return "//tr[@id='display-ticketrow-$row_number']//span[contains(@class, 'gear-icon')]";
157
+	}
158
+
159
+
160
+	/**
161
+	 * Selector for the subtotal amount for the given display row of the ticket in the event editor.
162
+	 * @param int $row_number
163
+	 * @return string
164
+	 */
165
+	public static function eventEditorTicketAdvancedDetailsSubtotalSelector($row_number = 1)
166
+	{
167
+		return "//span[@id='price-total-amount-$row_number']";
168
+	}
169
+
170
+
171
+	/**
172
+	 * Selector for the Total element for the given display row of the ticket in the event editor.
173
+	 * @param int $row_number
174
+	 * @return string
175
+	 */
176
+	public static function eventEditorTicketAdvancedDetailsTotalSelector($row_number = 1)
177
+	{
178
+		return "//span[@id='price-total-amount-$row_number']";
179
+	}
180
+
181
+
182
+	/**
183
+	 * Selector for the taxable selector for the ticket for the given display row in the event editor.
184
+	 * @param int $row_number
185
+	 * @return string
186
+	 */
187
+	public static function eventEditorTicketTaxableCheckboxSelector($row_number = 1)
188
+	{
189
+		return "//input[@id='edit-ticket-TKT_taxable-$row_number']";
190
+	}
191
+
192
+
193
+	/**
194
+	 * This returns the xpath locater for the Tax amount display container within the advanced settings view for the
195
+	 * given ticket (row) and the given tax id (PRC_ID).
196
+	 *
197
+	 * @param int $tax_id     The PRC_ID for the tax you want the locater for.  Note, this defaults to the default tax
198
+	 *                        setup on a fresh install.
199
+	 * @param int $row_number What row representing the ticket you want the locator for.
200
+	 * @return string
201
+	 */
202
+	public static function eventEditorTicketTaxAmountDisplayForTaxIdAndTicketRowSelector($tax_id = 2, $row_number = 1)
203
+	{
204
+		return "//span[@id='TKT-tax-amount-display-$tax_id-$row_number']";
205
+	}
206
+
207
+
208
+	/**
209
+	 * Wrapper for getting the selector for a given field and given display row of a ticket in the event editor.
210
+	 * @param     $field_name
211
+	 * @param int $row_number
212
+	 * @return string
213
+	 */
214
+	public static function eventEditorTicketFieldSelectorForFieldInDisplayRow($field_name, $row_number = 1)
215
+	{
216
+		return "//tr[@id='display-ticketrow-$row_number']//input[contains(@class, 'edit-ticket-$field_name')]";
217
+	}
218
+
219
+
220
+	/**
221
+	 * Returns the selector for the event title edit link in the events list table for the given Event Title.
222
+	 * @param string $event_title
223
+	 * @return string
224
+	 */
225
+	public static function eventListTableEventTitleEditLinkSelectorForTitle($event_title)
226
+	{
227
+		return "//td[contains(@class, 'column-name')]/strong/a[text()='$event_title']";
228
+	}
229
+
230
+
231
+	/**
232
+	 * Locator for for the ID column in the event list table for a given event title.
233
+	 * @param string $event_title
234
+	 * @return string
235
+	 */
236
+	public static function eventListTableEventIdSelectorForTitle($event_title)
237
+	{
238
+		return "//td[contains(@class, 'column-name')]/strong/a[text()='$event_title']"
239
+			   . "//ancestor::tr/th[contains(@class, 'check-column')]/input";
240
+	}
241
+
242
+
243
+	/**
244
+	 * Locator for the view link in the row of an event list table for the given event title.
245
+	 * @param string $event_title
246
+	 * @return string
247
+	 */
248
+	public static function eventListTableEventTitleViewLinkSelectorForTitle($event_title)
249
+	{
250
+		return "//td[contains(@class, 'column-name')]/strong/a[text()='$event_title']"
251
+			   . "//ancestor::td//span[@class='view']/a";
252
+	}
253
+
254
+
255
+	/**
256
+	 * Locator for the messenger tab in the Notifications metabox in the event editor.
257
+	 * @param string $messenger_slug  The slug for the messenger (it's reference slug).
258
+	 * @return string
259
+	 */
260
+	public static function eventEditorNotificationsMetaBoxMessengerTabSelector($messenger_slug)
261
+	{
262
+		return "//div[@id='espresso_events_Messages_Hooks_Extend_messages_metabox_metabox']"
263
+			   . "//a[@rel='ee-tab-$messenger_slug']";
264
+	}
265
+
266
+
267
+	/**
268
+	 * Locator for the select input within the notifications metabox.
269
+	 * Note, this assumes the tab content for the related messenger is already visible.
270
+	 * @param string $message_type_label The message type label (visible string in the table) you want the selector for.
271
+	 * @return string
272
+	 */
273
+	public static function eventEditorNotificationsMetaBoxSelectSelectorForMessageType($message_type_label)
274
+	{
275
+		return "//div[@id='espresso_events_Messages_Hooks_Extend_messages_metabox_metabox']"
276
+			   . "//table[@class='messages-custom-template-switcher']"
277
+			   . "//tr/td[contains(.,'Registration Approved')]"
278
+			   . "//ancestor::tr//select[contains(@class,'message-template-selector')]";
279
+	}
280 280
 }
Please login to merge, or discard this patch.