Completed
Branch models-cleanup/main (0d2dda)
by
unknown
09:34
created
modules/messages/EED_Messages.module.php 3 patches
Doc Comments   +1 added lines, -1 removed lines patch added patch discarded remove patch
@@ -632,7 +632,7 @@
 block discarded – undo
632 632
      * @deprecated 4.9.0 Use EEH_MSG_Template::payment_status_to_message_type_array
633 633
      *                   or EEH_MSG_Template::convert_payment_status_to_message_type
634 634
      * @param string $payment_status The payment status being matched.
635
-     * @return bool|string The payment message type slug matching the status or false if no match.
635
+     * @return string|false The payment message type slug matching the status or false if no match.
636 636
      * @throws EE_Error
637 637
      * @throws InvalidArgumentException
638 638
      * @throws ReflectionException
Please login to merge, or discard this patch.
Indentation   +1328 added lines, -1328 removed lines patch added patch discarded remove patch
@@ -16,1341 +16,1341 @@
 block discarded – undo
16 16
 class EED_Messages extends EED_Module
17 17
 {
18 18
 
19
-    /**
20
-     * This holds the EE_messages controller
21
-     *
22
-     * @deprecated 4.9.0
23
-     * @var EE_messages $_EEMSG
24
-     */
25
-    protected static $_EEMSG;
26
-
27
-    /**
28
-     * @type EE_Message_Resource_Manager $_message_resource_manager
29
-     */
30
-    protected static $_message_resource_manager;
31
-
32
-    /**
33
-     * This holds the EE_Messages_Processor business class.
34
-     *
35
-     * @type EE_Messages_Processor
36
-     */
37
-    protected static $_MSG_PROCESSOR;
38
-
39
-    /**
40
-     * holds all the paths for various messages components.
41
-     * Utilized by autoloader registry
42
-     *
43
-     * @var array
44
-     */
45
-    protected static $_MSG_PATHS;
46
-
47
-
48
-    /**
49
-     * This will hold an array of messages template packs that are registered in the messages system.
50
-     * Format is:
51
-     * array(
52
-     *    'template_pack_dbref' => EE_Messages_Template_Pack (instance)
53
-     * )
54
-     *
55
-     * @var EE_Messages_Template_Pack[]
56
-     */
57
-    protected static $_TMP_PACKS = array();
58
-
59
-
60
-    /**
61
-     * @return EED_Messages
62
-     */
63
-    public static function instance()
64
-    {
65
-        return parent::get_instance(__CLASS__);
66
-    }
67
-
68
-
69
-    /**
70
-     *  set_hooks - for hooking into EE Core, other modules, etc
71
-     *
72
-     * @since 4.5.0
73
-     * @return    void
74
-     */
75
-    public static function set_hooks()
76
-    {
77
-        // actions
78
-        add_action('AHEE__EE_Payment_Processor__update_txn_based_on_payment', array('EED_Messages', 'payment'), 10, 2);
79
-        add_action(
80
-            'AHEE__EE_Registration_Processor__trigger_registration_update_notifications',
81
-            array('EED_Messages', 'maybe_registration'),
82
-            10,
83
-            2
84
-        );
85
-        // filters
86
-        add_filter(
87
-            'FHEE__EE_Registration__receipt_url__receipt_url',
88
-            array('EED_Messages', 'registration_message_trigger_url'),
89
-            10,
90
-            4
91
-        );
92
-        add_filter(
93
-            'FHEE__EE_Registration__invoice_url__invoice_url',
94
-            array('EED_Messages', 'registration_message_trigger_url'),
95
-            10,
96
-            4
97
-        );
98
-        // register routes
99
-        self::_register_routes();
100
-    }
101
-
102
-    /**
103
-     *    set_hooks_admin - for hooking into EE Admin Core, other modules, etc
104
-     *
105
-     * @access    public
106
-     * @return    void
107
-     */
108
-    public static function set_hooks_admin()
109
-    {
110
-        // actions
111
-        add_action('AHEE__EE_Payment_Processor__update_txn_based_on_payment', array('EED_Messages', 'payment'), 10, 2);
112
-        add_action(
113
-            'AHEE__Transactions_Admin_Page___send_payment_reminder__process_admin_payment_reminder',
114
-            array('EED_Messages', 'payment_reminder'),
115
-            10
116
-        );
117
-        add_action(
118
-            'AHEE__EE_Registration_Processor__trigger_registration_update_notifications',
119
-            array('EED_Messages', 'maybe_registration'),
120
-            10,
121
-            3
122
-        );
123
-        add_action(
124
-            'AHEE__Extend_Registrations_Admin_Page___newsletter_selected_send__with_registrations',
125
-            array('EED_Messages', 'send_newsletter_message'),
126
-            10,
127
-            2
128
-        );
129
-        add_action(
130
-            'AHEE__EES_Espresso_Cancelled__process_shortcode__transaction',
131
-            array('EED_Messages', 'cancelled_registration'),
132
-            10
133
-        );
134
-        add_action(
135
-            'AHEE__EE_Admin_Page___process_admin_payment_notification',
136
-            array('EED_Messages', 'process_admin_payment'),
137
-            10,
138
-            1
139
-        );
140
-        // filters
141
-        add_filter(
142
-            'FHEE__EE_Admin_Page___process_resend_registration__success',
143
-            array('EED_Messages', 'process_resend'),
144
-            10,
145
-            2
146
-        );
147
-        add_filter(
148
-            'FHEE__EE_Registration__receipt_url__receipt_url',
149
-            array('EED_Messages', 'registration_message_trigger_url'),
150
-            10,
151
-            4
152
-        );
153
-        add_filter(
154
-            'FHEE__EE_Registration__invoice_url__invoice_url',
155
-            array('EED_Messages', 'registration_message_trigger_url'),
156
-            10,
157
-            4
158
-        );
159
-    }
160
-
161
-
162
-    /**
163
-     * All the message triggers done by route go in here.
164
-     *
165
-     * @since 4.5.0
166
-     * @return void
167
-     */
168
-    protected static function _register_routes()
169
-    {
170
-        EE_Config::register_route('msg_url_trigger', 'Messages', 'run');
171
-        EE_Config::register_route('msg_cron_trigger', 'Messages', 'execute_batch_request');
172
-        EE_Config::register_route('msg_browser_trigger', 'Messages', 'browser_trigger');
173
-        EE_Config::register_route('msg_browser_error_trigger', 'Messages', 'browser_error_trigger');
174
-        do_action('AHEE__EED_Messages___register_routes');
175
-    }
176
-
177
-
178
-    /**
179
-     * This is called when a browser display trigger is executed.
180
-     * The browser display trigger is typically used when a already generated message is displayed directly in the
181
-     * browser.
182
-     *
183
-     * @since 4.9.0
184
-     * @param WP $WP
185
-     * @throws EE_Error
186
-     * @throws InvalidArgumentException
187
-     * @throws ReflectionException
188
-     * @throws InvalidDataTypeException
189
-     * @throws InvalidInterfaceException
190
-     */
191
-    public function browser_trigger($WP)
192
-    {
193
-        // ensure controller is loaded
194
-        self::_load_controller();
195
-        $token = EE_Registry::instance()->REQ->get('token');
196
-        try {
197
-            $mtg = new EE_Message_Generated_From_Token($token, 'html', self::$_message_resource_manager);
198
-            self::$_MSG_PROCESSOR->generate_and_send_now($mtg);
199
-        } catch (EE_Error $e) {
200
-            $error_msg = __(
201
-                'Please note that a system message failed to send due to a technical issue.',
202
-                'event_espresso'
203
-            );
204
-            // add specific message for developers if WP_DEBUG in on
205
-            $error_msg .= '||' . $e->getMessage();
206
-            EE_Error::add_error($error_msg, __FILE__, __FUNCTION__, __LINE__);
207
-        }
208
-    }
209
-
210
-
211
-    /**
212
-     * This is called when a browser error trigger is executed.
213
-     * When triggered this will grab the EE_Message matching the token in the request and use that to get the error
214
-     * message and display it.
215
-     *
216
-     * @since 4.9.0
217
-     * @param $WP
218
-     * @throws EE_Error
219
-     * @throws InvalidArgumentException
220
-     * @throws InvalidDataTypeException
221
-     * @throws InvalidInterfaceException
222
-     */
223
-    public function browser_error_trigger($WP)
224
-    {
225
-        $token = EE_Registry::instance()->REQ->get('token');
226
-        if ($token) {
227
-            $message = EEM_Message::instance()->get_one_by_token($token);
228
-            if ($message instanceof EE_Message) {
229
-                header('HTTP/1.1 200 OK');
230
-                $error_msg = nl2br($message->error_message());
231
-                ?>
19
+	/**
20
+	 * This holds the EE_messages controller
21
+	 *
22
+	 * @deprecated 4.9.0
23
+	 * @var EE_messages $_EEMSG
24
+	 */
25
+	protected static $_EEMSG;
26
+
27
+	/**
28
+	 * @type EE_Message_Resource_Manager $_message_resource_manager
29
+	 */
30
+	protected static $_message_resource_manager;
31
+
32
+	/**
33
+	 * This holds the EE_Messages_Processor business class.
34
+	 *
35
+	 * @type EE_Messages_Processor
36
+	 */
37
+	protected static $_MSG_PROCESSOR;
38
+
39
+	/**
40
+	 * holds all the paths for various messages components.
41
+	 * Utilized by autoloader registry
42
+	 *
43
+	 * @var array
44
+	 */
45
+	protected static $_MSG_PATHS;
46
+
47
+
48
+	/**
49
+	 * This will hold an array of messages template packs that are registered in the messages system.
50
+	 * Format is:
51
+	 * array(
52
+	 *    'template_pack_dbref' => EE_Messages_Template_Pack (instance)
53
+	 * )
54
+	 *
55
+	 * @var EE_Messages_Template_Pack[]
56
+	 */
57
+	protected static $_TMP_PACKS = array();
58
+
59
+
60
+	/**
61
+	 * @return EED_Messages
62
+	 */
63
+	public static function instance()
64
+	{
65
+		return parent::get_instance(__CLASS__);
66
+	}
67
+
68
+
69
+	/**
70
+	 *  set_hooks - for hooking into EE Core, other modules, etc
71
+	 *
72
+	 * @since 4.5.0
73
+	 * @return    void
74
+	 */
75
+	public static function set_hooks()
76
+	{
77
+		// actions
78
+		add_action('AHEE__EE_Payment_Processor__update_txn_based_on_payment', array('EED_Messages', 'payment'), 10, 2);
79
+		add_action(
80
+			'AHEE__EE_Registration_Processor__trigger_registration_update_notifications',
81
+			array('EED_Messages', 'maybe_registration'),
82
+			10,
83
+			2
84
+		);
85
+		// filters
86
+		add_filter(
87
+			'FHEE__EE_Registration__receipt_url__receipt_url',
88
+			array('EED_Messages', 'registration_message_trigger_url'),
89
+			10,
90
+			4
91
+		);
92
+		add_filter(
93
+			'FHEE__EE_Registration__invoice_url__invoice_url',
94
+			array('EED_Messages', 'registration_message_trigger_url'),
95
+			10,
96
+			4
97
+		);
98
+		// register routes
99
+		self::_register_routes();
100
+	}
101
+
102
+	/**
103
+	 *    set_hooks_admin - for hooking into EE Admin Core, other modules, etc
104
+	 *
105
+	 * @access    public
106
+	 * @return    void
107
+	 */
108
+	public static function set_hooks_admin()
109
+	{
110
+		// actions
111
+		add_action('AHEE__EE_Payment_Processor__update_txn_based_on_payment', array('EED_Messages', 'payment'), 10, 2);
112
+		add_action(
113
+			'AHEE__Transactions_Admin_Page___send_payment_reminder__process_admin_payment_reminder',
114
+			array('EED_Messages', 'payment_reminder'),
115
+			10
116
+		);
117
+		add_action(
118
+			'AHEE__EE_Registration_Processor__trigger_registration_update_notifications',
119
+			array('EED_Messages', 'maybe_registration'),
120
+			10,
121
+			3
122
+		);
123
+		add_action(
124
+			'AHEE__Extend_Registrations_Admin_Page___newsletter_selected_send__with_registrations',
125
+			array('EED_Messages', 'send_newsletter_message'),
126
+			10,
127
+			2
128
+		);
129
+		add_action(
130
+			'AHEE__EES_Espresso_Cancelled__process_shortcode__transaction',
131
+			array('EED_Messages', 'cancelled_registration'),
132
+			10
133
+		);
134
+		add_action(
135
+			'AHEE__EE_Admin_Page___process_admin_payment_notification',
136
+			array('EED_Messages', 'process_admin_payment'),
137
+			10,
138
+			1
139
+		);
140
+		// filters
141
+		add_filter(
142
+			'FHEE__EE_Admin_Page___process_resend_registration__success',
143
+			array('EED_Messages', 'process_resend'),
144
+			10,
145
+			2
146
+		);
147
+		add_filter(
148
+			'FHEE__EE_Registration__receipt_url__receipt_url',
149
+			array('EED_Messages', 'registration_message_trigger_url'),
150
+			10,
151
+			4
152
+		);
153
+		add_filter(
154
+			'FHEE__EE_Registration__invoice_url__invoice_url',
155
+			array('EED_Messages', 'registration_message_trigger_url'),
156
+			10,
157
+			4
158
+		);
159
+	}
160
+
161
+
162
+	/**
163
+	 * All the message triggers done by route go in here.
164
+	 *
165
+	 * @since 4.5.0
166
+	 * @return void
167
+	 */
168
+	protected static function _register_routes()
169
+	{
170
+		EE_Config::register_route('msg_url_trigger', 'Messages', 'run');
171
+		EE_Config::register_route('msg_cron_trigger', 'Messages', 'execute_batch_request');
172
+		EE_Config::register_route('msg_browser_trigger', 'Messages', 'browser_trigger');
173
+		EE_Config::register_route('msg_browser_error_trigger', 'Messages', 'browser_error_trigger');
174
+		do_action('AHEE__EED_Messages___register_routes');
175
+	}
176
+
177
+
178
+	/**
179
+	 * This is called when a browser display trigger is executed.
180
+	 * The browser display trigger is typically used when a already generated message is displayed directly in the
181
+	 * browser.
182
+	 *
183
+	 * @since 4.9.0
184
+	 * @param WP $WP
185
+	 * @throws EE_Error
186
+	 * @throws InvalidArgumentException
187
+	 * @throws ReflectionException
188
+	 * @throws InvalidDataTypeException
189
+	 * @throws InvalidInterfaceException
190
+	 */
191
+	public function browser_trigger($WP)
192
+	{
193
+		// ensure controller is loaded
194
+		self::_load_controller();
195
+		$token = EE_Registry::instance()->REQ->get('token');
196
+		try {
197
+			$mtg = new EE_Message_Generated_From_Token($token, 'html', self::$_message_resource_manager);
198
+			self::$_MSG_PROCESSOR->generate_and_send_now($mtg);
199
+		} catch (EE_Error $e) {
200
+			$error_msg = __(
201
+				'Please note that a system message failed to send due to a technical issue.',
202
+				'event_espresso'
203
+			);
204
+			// add specific message for developers if WP_DEBUG in on
205
+			$error_msg .= '||' . $e->getMessage();
206
+			EE_Error::add_error($error_msg, __FILE__, __FUNCTION__, __LINE__);
207
+		}
208
+	}
209
+
210
+
211
+	/**
212
+	 * This is called when a browser error trigger is executed.
213
+	 * When triggered this will grab the EE_Message matching the token in the request and use that to get the error
214
+	 * message and display it.
215
+	 *
216
+	 * @since 4.9.0
217
+	 * @param $WP
218
+	 * @throws EE_Error
219
+	 * @throws InvalidArgumentException
220
+	 * @throws InvalidDataTypeException
221
+	 * @throws InvalidInterfaceException
222
+	 */
223
+	public function browser_error_trigger($WP)
224
+	{
225
+		$token = EE_Registry::instance()->REQ->get('token');
226
+		if ($token) {
227
+			$message = EEM_Message::instance()->get_one_by_token($token);
228
+			if ($message instanceof EE_Message) {
229
+				header('HTTP/1.1 200 OK');
230
+				$error_msg = nl2br($message->error_message());
231
+				?>
232 232
                 <!DOCTYPE html>
233 233
                 <html>
234 234
                 <head></head>
235 235
                 <body>
236 236
                 <?php echo empty($error_msg)
237
-                    ? esc_html__(
238
-                        'Unfortunately, we were unable to capture the error message for this message.',
239
-                        'event_espresso'
240
-                    )
241
-                    : wp_kses(
242
-                        $error_msg,
243
-                        array(
244
-                            'a'      => array(
245
-                                'href'  => array(),
246
-                                'title' => array(),
247
-                            ),
248
-                            'span'   => array(),
249
-                            'div'    => array(),
250
-                            'p'      => array(),
251
-                            'strong' => array(),
252
-                            'em'     => array(),
253
-                            'br'     => array(),
254
-                        )
255
-                    ); ?>
237
+					? esc_html__(
238
+						'Unfortunately, we were unable to capture the error message for this message.',
239
+						'event_espresso'
240
+					)
241
+					: wp_kses(
242
+						$error_msg,
243
+						array(
244
+							'a'      => array(
245
+								'href'  => array(),
246
+								'title' => array(),
247
+							),
248
+							'span'   => array(),
249
+							'div'    => array(),
250
+							'p'      => array(),
251
+							'strong' => array(),
252
+							'em'     => array(),
253
+							'br'     => array(),
254
+						)
255
+					); ?>
256 256
                 </body>
257 257
                 </html>
258 258
                 <?php
259
-                exit;
260
-            }
261
-        }
262
-        return;
263
-    }
264
-
265
-
266
-    /**
267
-     *  This runs when the msg_url_trigger route has initiated.
268
-     *
269
-     * @since 4.5.0
270
-     * @param WP $WP
271
-     * @throws EE_Error
272
-     * @throws InvalidArgumentException
273
-     * @throws ReflectionException
274
-     * @throws InvalidDataTypeException
275
-     * @throws InvalidInterfaceException
276
-     */
277
-    public function run($WP)
278
-    {
279
-        // ensure controller is loaded
280
-        self::_load_controller();
281
-        // attempt to process message
282
-        try {
283
-            /** @type EE_Message_To_Generate_From_Request $message_to_generate */
284
-            $message_to_generate = EE_Registry::instance()->load_lib('Message_To_Generate_From_Request');
285
-            self::$_MSG_PROCESSOR->generate_and_send_now($message_to_generate);
286
-        } catch (EE_Error $e) {
287
-            $error_msg = __(
288
-                'Please note that a system message failed to send due to a technical issue.',
289
-                'event_espresso'
290
-            );
291
-            // add specific message for developers if WP_DEBUG in on
292
-            $error_msg .= '||' . $e->getMessage();
293
-            EE_Error::add_error($error_msg, __FILE__, __FUNCTION__, __LINE__);
294
-        }
295
-    }
296
-
297
-
298
-    /**
299
-     * This is triggered by the 'msg_cron_trigger' route.
300
-     *
301
-     * @param WP $WP
302
-     */
303
-    public function execute_batch_request($WP)
304
-    {
305
-        $this->run_cron();
306
-        header('HTTP/1.1 200 OK');
307
-        exit();
308
-    }
309
-
310
-
311
-    /**
312
-     * This gets executed on wp_cron jobs or when a batch request is initiated on its own separate non regular wp
313
-     * request.
314
-     */
315
-    public function run_cron()
316
-    {
317
-        self::_load_controller();
318
-        // get required vars
319
-        $cron_type = EE_Registry::instance()->REQ->get('type');
320
-        $transient_key = EE_Registry::instance()->REQ->get('key');
321
-
322
-        // now let's verify transient, if not valid exit immediately
323
-        if (! get_transient($transient_key)) {
324
-            /**
325
-             * trigger error so this gets in the error logs.  This is important because it happens on a non-user
326
-             * request.
327
-             */
328
-            trigger_error(esc_attr__('Invalid Request (Transient does not exist)', 'event_espresso'));
329
-        }
330
-
331
-        // if made it here, lets' delete the transient to keep the db clean
332
-        delete_transient($transient_key);
333
-
334
-        if (apply_filters('FHEE__EED_Messages__run_cron__use_wp_cron', true)) {
335
-            $method = 'batch_' . $cron_type . '_from_queue';
336
-            if (method_exists(self::$_MSG_PROCESSOR, $method)) {
337
-                self::$_MSG_PROCESSOR->$method();
338
-            } else {
339
-                // no matching task
340
-                /**
341
-                 * trigger error so this gets in the error logs.  This is important because it happens on a non user
342
-                 * request.
343
-                 */
344
-                trigger_error(
345
-                    esc_attr(
346
-                        sprintf(
347
-                            __('There is no task corresponding to this route %s', 'event_espresso'),
348
-                            $cron_type
349
-                        )
350
-                    )
351
-                );
352
-            }
353
-        }
354
-
355
-        do_action('FHEE__EED_Messages__run_cron__end');
356
-    }
357
-
358
-
359
-    /**
360
-     * This is used to retrieve the template pack for the given name.
361
-     * Retrieved packs are cached on the static $_TMP_PACKS array.  If there is no class matching the given name then
362
-     * the default template pack is returned.
363
-     *
364
-     * @deprecated 4.9.0  @see EEH_MSG_Template::get_template_pack()
365
-     * @param string $template_pack_name This should correspond to the dbref of the template pack (which is also used
366
-     *                                   in generating the Pack class name).
367
-     * @return EE_Messages_Template_Pack
368
-     * @throws EE_Error
369
-     * @throws InvalidArgumentException
370
-     * @throws ReflectionException
371
-     * @throws InvalidDataTypeException
372
-     * @throws InvalidInterfaceException
373
-     */
374
-    public static function get_template_pack($template_pack_name)
375
-    {
376
-        EE_Registry::instance()->load_helper('MSG_Template');
377
-        return EEH_MSG_Template::get_template_pack($template_pack_name);
378
-    }
379
-
380
-
381
-    /**
382
-     * Retrieves an array of all template packs.
383
-     * Array is in the format array( 'dbref' => EE_Messages_Template_Pack )
384
-     *
385
-     * @deprecated 4.9.0  @see EEH_MSG_Template_Pack::get_template_pack_collection
386
-     * @return EE_Messages_Template_Pack[]
387
-     * @throws EE_Error
388
-     * @throws InvalidArgumentException
389
-     * @throws ReflectionException
390
-     * @throws InvalidDataTypeException
391
-     * @throws InvalidInterfaceException
392
-     */
393
-    public static function get_template_packs()
394
-    {
395
-        EE_Registry::instance()->load_helper('MSG_Template');
396
-
397
-        // for backward compat, let's make sure this returns in the same format as originally.
398
-        $template_pack_collection = EEH_MSG_Template::get_template_pack_collection();
399
-        $template_pack_collection->rewind();
400
-        $template_packs = array();
401
-        while ($template_pack_collection->valid()) {
402
-            $template_packs[ $template_pack_collection->current()->dbref ] = $template_pack_collection->current();
403
-            $template_pack_collection->next();
404
-        }
405
-        return $template_packs;
406
-    }
407
-
408
-
409
-    /**
410
-     * This simply makes sure the autoloaders are registered for the EE_messages system.
411
-     *
412
-     * @since 4.5.0
413
-     * @return void
414
-     * @throws EE_Error
415
-     */
416
-    public static function set_autoloaders()
417
-    {
418
-        if (empty(self::$_MSG_PATHS)) {
419
-            self::_set_messages_paths();
420
-            foreach (self::$_MSG_PATHS as $path) {
421
-                EEH_Autoloader::register_autoloaders_for_each_file_in_folder($path);
422
-            }
423
-            // add aliases
424
-            EEH_Autoloader::add_alias('EE_messages', 'EE_messages');
425
-            EEH_Autoloader::add_alias('EE_messenger', 'EE_messenger');
426
-        }
427
-    }
428
-
429
-
430
-    /**
431
-     * Take care of adding all the paths for the messages components to the $_MSG_PATHS property
432
-     * for use by the Messages Autoloaders
433
-     *
434
-     * @since 4.5.0
435
-     * @return void.
436
-     */
437
-    protected static function _set_messages_paths()
438
-    {
439
-        self::$_MSG_PATHS = apply_filters(
440
-            'FHEE__EED_Messages___set_messages_paths___MSG_PATHS',
441
-            [
442
-                EE_LIBRARIES . 'messages/message_type',
443
-                EE_LIBRARIES . 'messages/messenger',
444
-                EE_LIBRARIES . 'messages/defaults',
445
-                EE_LIBRARIES . 'messages/defaults/email',
446
-                EE_LIBRARIES . 'messages/data_class',
447
-                EE_LIBRARIES . 'messages/validators',
448
-                EE_LIBRARIES . 'messages/validators/email',
449
-                EE_LIBRARIES . 'messages/validators/html',
450
-                EE_LIBRARIES . 'shortcodes',
451
-            ]
452
-        );
453
-    }
454
-
455
-
456
-    /**
457
-     * Takes care of loading dependencies
458
-     *
459
-     * @since 4.5.0
460
-     * @return void
461
-     * @throws EE_Error
462
-     * @throws InvalidArgumentException
463
-     * @throws ReflectionException
464
-     * @throws InvalidDataTypeException
465
-     * @throws InvalidInterfaceException
466
-     */
467
-    protected static function _load_controller()
468
-    {
469
-        if (! self::$_MSG_PROCESSOR instanceof EE_Messages_Processor) {
470
-            EE_Registry::instance()->load_core('Request_Handler');
471
-            self::set_autoloaders();
472
-            self::$_EEMSG = EE_Registry::instance()->load_lib('messages');
473
-            self::$_MSG_PROCESSOR = EE_Registry::instance()->load_lib('Messages_Processor');
474
-            self::$_message_resource_manager = EE_Registry::instance()->load_lib('Message_Resource_Manager');
475
-        }
476
-    }
477
-
478
-
479
-    /**
480
-     * @param EE_Transaction $transaction
481
-     * @throws EE_Error
482
-     * @throws InvalidArgumentException
483
-     * @throws InvalidDataTypeException
484
-     * @throws InvalidInterfaceException
485
-     * @throws ReflectionException
486
-     */
487
-    public static function payment_reminder(EE_Transaction $transaction)
488
-    {
489
-        self::_load_controller();
490
-        $data = array($transaction, null);
491
-        self::$_MSG_PROCESSOR->generate_for_all_active_messengers('payment_reminder', $data);
492
-    }
493
-
494
-
495
-    /**
496
-     * Any messages triggers for after successful gateway payments should go in here.
497
-     *
498
-     * @param EE_Transaction  $transaction object
499
-     * @param EE_Payment|null $payment     object
500
-     * @return void
501
-     * @throws EE_Error
502
-     * @throws InvalidArgumentException
503
-     * @throws ReflectionException
504
-     * @throws InvalidDataTypeException
505
-     * @throws InvalidInterfaceException
506
-     */
507
-    public static function payment(EE_Transaction $transaction, EE_Payment $payment = null)
508
-    {
509
-        // if there's no payment object, then we cannot do a payment type message!
510
-        if (! $payment instanceof EE_Payment) {
511
-            return;
512
-        }
513
-        self::_load_controller();
514
-        $data = array($transaction, $payment);
515
-        EE_Registry::instance()->load_helper('MSG_Template');
516
-        $message_type = EEH_MSG_Template::convert_payment_status_to_message_type($payment->STS_ID());
517
-        // if payment amount is less than 0 then switch to payment_refund message type.
518
-        $message_type = $payment->amount() < 0 ? 'payment_refund' : $message_type;
519
-        self::$_MSG_PROCESSOR->generate_for_all_active_messengers($message_type, $data);
520
-    }
521
-
522
-
523
-    /**
524
-     * @param EE_Transaction $transaction
525
-     * @throws EE_Error
526
-     * @throws InvalidArgumentException
527
-     * @throws InvalidDataTypeException
528
-     * @throws InvalidInterfaceException
529
-     * @throws ReflectionException
530
-     */
531
-    public static function cancelled_registration(EE_Transaction $transaction)
532
-    {
533
-        self::_load_controller();
534
-        $data = array($transaction, null);
535
-        self::$_MSG_PROCESSOR->generate_for_all_active_messengers('cancelled_registration', $data);
536
-    }
537
-
538
-
539
-    /**
540
-     * Trigger for Registration messages
541
-     * Note that what registration message type is sent depends on what the reg status is for the registrations on the
542
-     * incoming transaction.
543
-     *
544
-     * @param EE_Registration $registration
545
-     * @param array           $extra_details
546
-     * @return void
547
-     * @throws EE_Error
548
-     * @throws InvalidArgumentException
549
-     * @throws InvalidDataTypeException
550
-     * @throws InvalidInterfaceException
551
-     * @throws ReflectionException
552
-     * @throws EntityNotFoundException
553
-     */
554
-    public static function maybe_registration(EE_Registration $registration, $extra_details = array())
555
-    {
556
-
557
-        if (! self::_verify_registration_notification_send($registration, $extra_details)) {
558
-            // no messages please
559
-            return;
560
-        }
561
-
562
-        // get all non-trashed registrations so we make sure we send messages for the right status.
563
-        $all_registrations = $registration->transaction()->registrations(
564
-            array(
565
-                array('REG_deleted' => false),
566
-                'order_by' => array(
567
-                    'Event.EVT_name'     => 'ASC',
568
-                    'Attendee.ATT_lname' => 'ASC',
569
-                    'Attendee.ATT_fname' => 'ASC',
570
-                ),
571
-            )
572
-        );
573
-        // cached array of statuses so we only trigger messages once per status.
574
-        $statuses_sent = array();
575
-        self::_load_controller();
576
-        $mtgs = array();
577
-
578
-        // loop through registrations and trigger messages once per status.
579
-        foreach ($all_registrations as $reg) {
580
-            // already triggered?
581
-            if (in_array($reg->status_ID(), $statuses_sent)) {
582
-                continue;
583
-            }
584
-
585
-            $message_type = EEH_MSG_Template::convert_reg_status_to_message_type($reg->status_ID());
586
-            $mtgs = array_merge(
587
-                $mtgs,
588
-                self::$_MSG_PROCESSOR->setup_mtgs_for_all_active_messengers(
589
-                    $message_type,
590
-                    array($registration->transaction(), null, $reg->status_ID())
591
-                )
592
-            );
593
-            $statuses_sent[] = $reg->status_ID();
594
-        }
595
-
596
-        if (count($statuses_sent) > 1) {
597
-            $mtgs = array_merge(
598
-                $mtgs,
599
-                self::$_MSG_PROCESSOR->setup_mtgs_for_all_active_messengers(
600
-                    'registration_summary',
601
-                    array($registration->transaction(), null)
602
-                )
603
-            );
604
-        }
605
-
606
-        // batch queue and initiate request
607
-        self::$_MSG_PROCESSOR->batch_queue_for_generation_and_persist($mtgs);
608
-        self::$_MSG_PROCESSOR->get_queue()->initiate_request_by_priority();
609
-    }
610
-
611
-
612
-    /**
613
-     * This is a helper method used to very whether a registration notification should be sent or
614
-     * not.  Prevents duplicate notifications going out for registration context notifications.
615
-     *
616
-     * @param EE_Registration $registration  [description]
617
-     * @param array           $extra_details [description]
618
-     * @return bool          true = send away, false = nope halt the presses.
619
-     */
620
-    protected static function _verify_registration_notification_send(
621
-        EE_Registration $registration,
622
-        $extra_details = array()
623
-    ) {
624
-        if (! $registration->is_primary_registrant()) {
625
-            return false;
626
-        }
627
-        // first we check if we're in admin and not doing front ajax
628
-        if (is_admin() && ! EE_FRONT_AJAX) {
629
-            // make sure appropriate admin params are set for sending messages
630
-            if (
631
-                empty($_REQUEST['txn_reg_status_change']['send_notifications'])
632
-                || ! absint($_REQUEST['txn_reg_status_change']['send_notifications'])
633
-            ) {
634
-                // no messages sent please.
635
-                return false;
636
-            }
637
-        } else {
638
-            // frontend request (either regular or via AJAX)
639
-            // TXN is NOT finalized ?
640
-            if (! isset($extra_details['finalized']) || $extra_details['finalized'] === false) {
641
-                return false;
642
-            }
643
-            // return visit but nothing changed ???
644
-            if (
645
-                isset($extra_details['revisit'], $extra_details['status_updates']) &&
646
-                $extra_details['revisit'] && ! $extra_details['status_updates']
647
-            ) {
648
-                return false;
649
-            }
650
-            // NOT sending messages && reg status is something other than "Not-Approved"
651
-            if (
652
-                ! apply_filters('FHEE__EED_Messages___maybe_registration__deliver_notifications', false) &&
653
-                $registration->status_ID() !== EEM_Registration::status_id_not_approved
654
-            ) {
655
-                return false;
656
-            }
657
-        }
658
-        // release the kraken
659
-        return true;
660
-    }
661
-
662
-
663
-    /**
664
-     * Simply returns an array indexed by Registration Status ID and the related message_type name associated with that
665
-     * status id.
666
-     *
667
-     * @deprecated 4.9.0  Use EEH_MSG_Template::reg_status_to_message_type_array()
668
-     *                    or EEH_MSG_Template::convert_reg_status_to_message_type
669
-     * @param string $reg_status
670
-     * @return array
671
-     * @throws EE_Error
672
-     * @throws InvalidArgumentException
673
-     * @throws ReflectionException
674
-     * @throws InvalidDataTypeException
675
-     * @throws InvalidInterfaceException
676
-     */
677
-    protected static function _get_reg_status_array($reg_status = '')
678
-    {
679
-        EE_Registry::instance()->load_helper('MSG_Template');
680
-        return EEH_MSG_Template::convert_reg_status_to_message_type($reg_status)
681
-            ? EEH_MSG_Template::convert_reg_status_to_message_type($reg_status)
682
-            : EEH_MSG_Template::reg_status_to_message_type_array();
683
-    }
684
-
685
-
686
-    /**
687
-     * Simply returns the payment message type for the given payment status.
688
-     *
689
-     * @deprecated 4.9.0 Use EEH_MSG_Template::payment_status_to_message_type_array
690
-     *                   or EEH_MSG_Template::convert_payment_status_to_message_type
691
-     * @param string $payment_status The payment status being matched.
692
-     * @return bool|string The payment message type slug matching the status or false if no match.
693
-     * @throws EE_Error
694
-     * @throws InvalidArgumentException
695
-     * @throws ReflectionException
696
-     * @throws InvalidDataTypeException
697
-     * @throws InvalidInterfaceException
698
-     */
699
-    protected static function _get_payment_message_type($payment_status)
700
-    {
701
-        EE_Registry::instance()->load_helper('MSG_Template');
702
-        return EEH_MSG_Template::convert_payment_status_to_message_type($payment_status)
703
-            ? EEH_MSG_Template::convert_payment_status_to_message_type($payment_status)
704
-            : false;
705
-    }
706
-
707
-
708
-    /**
709
-     * Message triggers for a resending already sent message(s) (via EE_Message list table)
710
-     *
711
-     * @access public
712
-     * @param array $req_data This is the $_POST & $_GET data sent from EE_Admin Pages
713
-     * @return bool success/fail
714
-     * @throws EE_Error
715
-     * @throws InvalidArgumentException
716
-     * @throws InvalidDataTypeException
717
-     * @throws InvalidInterfaceException
718
-     * @throws ReflectionException
719
-     */
720
-    public static function process_resend($req_data)
721
-    {
722
-        self::_load_controller();
723
-
724
-        // if $msgID in this request then skip to the new resend_message
725
-        if (EE_Registry::instance()->REQ->get('MSG_ID')) {
726
-            return self::resend_message();
727
-        }
728
-
729
-        // make sure any incoming request data is set on the REQ so that it gets picked up later.
730
-        $req_data = (array) $req_data;
731
-        foreach ($req_data as $request_key => $request_value) {
732
-            EE_Registry::instance()->REQ->set($request_key, $request_value);
733
-        }
734
-
735
-        if (
736
-            ! $messages_to_send = self::$_MSG_PROCESSOR->setup_messages_to_generate_from_registration_ids_in_request(
737
-            )
738
-        ) {
739
-            return false;
740
-        }
741
-
742
-        try {
743
-            self::$_MSG_PROCESSOR->batch_queue_for_generation_and_persist($messages_to_send);
744
-            self::$_MSG_PROCESSOR->get_queue()->initiate_request_by_priority();
745
-        } catch (EE_Error $e) {
746
-            EE_Error::add_error($e->getMessage(), __FILE__, __FUNCTION__, __LINE__);
747
-            return false;
748
-        }
749
-        EE_Error::add_success(
750
-            __('Messages have been successfully queued for generation and sending.', 'event_espresso')
751
-        );
752
-        return true; // everything got queued.
753
-    }
754
-
755
-
756
-    /**
757
-     * Message triggers for a resending already sent message(s) (via EE_Message list table)
758
-     *
759
-     * @return bool
760
-     * @throws EE_Error
761
-     * @throws InvalidArgumentException
762
-     * @throws InvalidDataTypeException
763
-     * @throws InvalidInterfaceException
764
-     * @throws ReflectionException
765
-     */
766
-    public static function resend_message()
767
-    {
768
-        self::_load_controller();
769
-
770
-        $msgID = EE_Registry::instance()->REQ->get('MSG_ID');
771
-        if (! $msgID) {
772
-            EE_Error::add_error(
773
-                __(
774
-                    'Something went wrong because there is no "MSG_ID" value in the request',
775
-                    'event_espresso'
776
-                ),
777
-                __FILE__,
778
-                __FUNCTION__,
779
-                __LINE__
780
-            );
781
-            return false;
782
-        }
783
-
784
-        self::$_MSG_PROCESSOR->setup_messages_from_ids_and_send((array) $msgID);
785
-
786
-        // setup success message.
787
-        $count_ready_for_resend = self::$_MSG_PROCESSOR->get_queue()->count_STS_in_queue(EEM_Message::status_resend);
788
-        EE_Error::add_success(
789
-            sprintf(
790
-                _n(
791
-                    'There was %d message queued for resending.',
792
-                    'There were %d messages queued for resending.',
793
-                    $count_ready_for_resend,
794
-                    'event_espresso'
795
-                ),
796
-                $count_ready_for_resend
797
-            )
798
-        );
799
-        return true;
800
-    }
801
-
802
-
803
-    /**
804
-     * Message triggers for manual payment applied by admin
805
-     *
806
-     * @param  EE_Payment $payment EE_payment object
807
-     * @return bool success/fail
808
-     * @throws EE_Error
809
-     * @throws InvalidArgumentException
810
-     * @throws ReflectionException
811
-     * @throws InvalidDataTypeException
812
-     * @throws InvalidInterfaceException
813
-     */
814
-    public static function process_admin_payment(EE_Payment $payment)
815
-    {
816
-        EE_Registry::instance()->load_helper('MSG_Template');
817
-        // we need to get the transaction object
818
-        $transaction = $payment->transaction();
819
-        if ($transaction instanceof EE_Transaction) {
820
-            $data = array($transaction, $payment);
821
-            $message_type = EEH_MSG_Template::convert_payment_status_to_message_type($payment->STS_ID());
822
-
823
-            // if payment amount is less than 0 then switch to payment_refund message type.
824
-            $message_type = $payment->amount() < 0 ? 'payment_refund' : $message_type;
825
-
826
-            // if payment_refund is selected, but the status is NOT accepted.  Then change message type to false so NO message notification goes out.
827
-            $message_type = $message_type == 'payment_refund' && $payment->STS_ID() != EEM_Payment::status_id_approved
828
-                ? false : $message_type;
829
-
830
-            self::_load_controller();
831
-
832
-            self::$_MSG_PROCESSOR->generate_for_all_active_messengers($message_type, $data);
833
-
834
-            // get count of queued for generation
835
-            $count_to_generate = self::$_MSG_PROCESSOR->get_queue()->count_STS_in_queue(
836
-                array(
837
-                    EEM_Message::status_incomplete,
838
-                    EEM_Message::status_idle,
839
-                )
840
-            );
841
-
842
-            if ($count_to_generate > 0 && self::$_MSG_PROCESSOR->get_queue()->get_message_repository()->count() !== 0) {
843
-                add_filter('FHEE__EE_Admin_Page___process_admin_payment_notification__success', '__return_true');
844
-                return true;
845
-            } else {
846
-                $count_failed = self::$_MSG_PROCESSOR->get_queue()->count_STS_in_queue(
847
-                    EEM_Message::instance()->stati_indicating_failed_sending()
848
-                );
849
-                /**
850
-                 * Verify that there are actually errors.  If not then we return a success message because the queue might have been emptied due to successful
851
-                 * IMMEDIATE generation.
852
-                 */
853
-                if ($count_failed > 0) {
854
-                    EE_Error::add_error(
855
-                        sprintf(
856
-                            _n(
857
-                                'The payment notification generation failed.',
858
-                                '%d payment notifications failed being sent.',
859
-                                $count_failed,
860
-                                'event_espresso'
861
-                            ),
862
-                            $count_failed
863
-                        ),
864
-                        __FILE__,
865
-                        __FUNCTION__,
866
-                        __LINE__
867
-                    );
868
-
869
-                    return false;
870
-                } else {
871
-                    add_filter('FHEE__EE_Admin_Page___process_admin_payment_notification__success', '__return_true');
872
-                    return true;
873
-                }
874
-            }
875
-        } else {
876
-            EE_Error::add_error(
877
-                'Unable to generate the payment notification because the given value for the transaction is invalid.',
878
-                'event_espresso'
879
-            );
880
-            return false;
881
-        }
882
-    }
883
-
884
-
885
-    /**
886
-     * Callback for AHEE__Extend_Registrations_Admin_Page___newsletter_selected_send_with_registrations trigger
887
-     *
888
-     * @since   4.3.0
889
-     * @param  EE_Registration[] $registrations an array of EE_Registration objects
890
-     * @param  int               $grp_id        a specific message template group id.
891
-     * @return void
892
-     * @throws EE_Error
893
-     * @throws InvalidArgumentException
894
-     * @throws InvalidDataTypeException
895
-     * @throws InvalidInterfaceException
896
-     * @throws ReflectionException
897
-     */
898
-    public static function send_newsletter_message($registrations, $grp_id)
899
-    {
900
-        // make sure mtp is id and set it in the EE_Request Handler later messages setup.
901
-        EE_Registry::instance()->REQ->set('GRP_ID', (int) $grp_id);
902
-        self::_load_controller();
903
-        self::$_MSG_PROCESSOR->generate_for_all_active_messengers('newsletter', $registrations);
904
-    }
905
-
906
-
907
-    /**
908
-     * Callback for FHEE__EE_Registration__invoice_url__invoice_url or FHEE__EE_Registration__receipt_url__receipt_url
909
-     *
910
-     * @since   4.3.0
911
-     * @param    string          $registration_message_trigger_url
912
-     * @param    EE_Registration $registration
913
-     * @param string             $messenger
914
-     * @param string             $message_type
915
-     * @return string
916
-     * @throws EE_Error
917
-     * @throws InvalidArgumentException
918
-     * @throws InvalidDataTypeException
919
-     * @throws InvalidInterfaceException
920
-     */
921
-    public static function registration_message_trigger_url(
922
-        $registration_message_trigger_url,
923
-        EE_Registration $registration,
924
-        $messenger = 'html',
925
-        $message_type = 'invoice'
926
-    ) {
927
-        // whitelist $messenger
928
-        switch ($messenger) {
929
-            case 'pdf':
930
-                $sending_messenger = 'pdf';
931
-                $generating_messenger = 'html';
932
-                break;
933
-            case 'html':
934
-            default:
935
-                $sending_messenger = 'html';
936
-                $generating_messenger = 'html';
937
-                break;
938
-        }
939
-        // whitelist $message_type
940
-        switch ($message_type) {
941
-            case 'receipt':
942
-                $message_type = 'receipt';
943
-                break;
944
-            case 'invoice':
945
-            default:
946
-                $message_type = 'invoice';
947
-                break;
948
-        }
949
-        // verify that both the messenger AND the message type are active
950
-        if (
951
-            EEH_MSG_Template::is_messenger_active($sending_messenger)
952
-            && EEH_MSG_Template::is_mt_active($message_type)
953
-        ) {
954
-            // need to get the correct message template group for this (i.e. is there a custom invoice for the event this registration is registered for?)
955
-            $template_query_params = array(
956
-                'MTP_is_active'    => true,
957
-                'MTP_messenger'    => $generating_messenger,
958
-                'MTP_message_type' => $message_type,
959
-                'Event.EVT_ID'     => $registration->event_ID(),
960
-            );
961
-            // get the message template group.
962
-            $msg_template_group = EEM_Message_Template_Group::instance()->get_one(array($template_query_params));
963
-            // if we don't have an EE_Message_Template_Group then return
964
-            if (! $msg_template_group instanceof EE_Message_Template_Group) {
965
-                // remove EVT_ID from query params so that global templates get picked up
966
-                unset($template_query_params['Event.EVT_ID']);
967
-                // get global template as the fallback
968
-                $msg_template_group = EEM_Message_Template_Group::instance()->get_one(array($template_query_params));
969
-            }
970
-            // if we don't have an EE_Message_Template_Group then return
971
-            if (! $msg_template_group instanceof EE_Message_Template_Group) {
972
-                return '';
973
-            }
974
-            // generate the URL
975
-            $registration_message_trigger_url = EEH_MSG_Template::generate_url_trigger(
976
-                $sending_messenger,
977
-                $generating_messenger,
978
-                'purchaser',
979
-                $message_type,
980
-                $registration,
981
-                $msg_template_group->ID(),
982
-                $registration->transaction_ID()
983
-            );
984
-        }
985
-        return $registration_message_trigger_url;
986
-    }
987
-
988
-
989
-    /**
990
-     * Use to generate and return a message preview!
991
-     *
992
-     * @param  string $type      This should correspond with a valid message type
993
-     * @param  string $context   This should correspond with a valid context for the message type
994
-     * @param  string $messenger This should correspond with a valid messenger.
995
-     * @param bool    $send      true we will do a test send using the messenger delivery, false we just do a regular
996
-     *                           preview
997
-     * @return bool|string The body of the message or if send is requested, sends.
998
-     * @throws EE_Error
999
-     * @throws InvalidArgumentException
1000
-     * @throws InvalidDataTypeException
1001
-     * @throws InvalidInterfaceException
1002
-     * @throws ReflectionException
1003
-     */
1004
-    public static function preview_message($type, $context, $messenger, $send = false)
1005
-    {
1006
-        self::_load_controller();
1007
-        $mtg = new EE_Message_To_Generate(
1008
-            $messenger,
1009
-            $type,
1010
-            array(),
1011
-            $context,
1012
-            true
1013
-        );
1014
-        $generated_preview_queue = self::$_MSG_PROCESSOR->generate_for_preview($mtg, $send);
1015
-        if ($generated_preview_queue instanceof EE_Messages_Queue) {
1016
-            // loop through all content for the preview and remove any persisted records.
1017
-            $content = '';
1018
-            foreach ($generated_preview_queue->get_message_repository() as $message) {
1019
-                $content = $message->content();
1020
-                if ($message->ID() > 0 && $message->STS_ID() !== EEM_Message::status_failed) {
1021
-                    $message->delete();
1022
-                }
1023
-            }
1024
-            return $content;
1025
-        } else {
1026
-            return $generated_preview_queue;
1027
-        }
1028
-    }
1029
-
1030
-
1031
-    /**
1032
-     * This is a method that allows for sending a message using a messenger matching the string given and the provided
1033
-     * EE_Message_Queue object.  The EE_Message_Queue object is used to create a single aggregate EE_Message via the
1034
-     * content found in the EE_Message objects in the queue.
1035
-     *
1036
-     * @since 4.9.0
1037
-     * @param string            $messenger            a string matching a valid active messenger in the system
1038
-     * @param string            $message_type         Although it seems contrary to the name of the method, a message
1039
-     *                                                type name is still required to send along the message type to the
1040
-     *                                                messenger because this is used for determining what specific
1041
-     *                                                variations might be loaded for the generated message.
1042
-     * @param EE_Messages_Queue $queue
1043
-     * @param string            $custom_subject       Can be used to set what the custom subject string will be on the
1044
-     *                                                aggregate EE_Message object.
1045
-     * @return bool success or fail.
1046
-     * @throws EE_Error
1047
-     * @throws InvalidArgumentException
1048
-     * @throws ReflectionException
1049
-     * @throws InvalidDataTypeException
1050
-     * @throws InvalidInterfaceException
1051
-     */
1052
-    public static function send_message_with_messenger_only(
1053
-        $messenger,
1054
-        $message_type,
1055
-        EE_Messages_Queue $queue,
1056
-        $custom_subject = ''
1057
-    ) {
1058
-        self::_load_controller();
1059
-        /** @type EE_Message_To_Generate_From_Queue $message_to_generate */
1060
-        $message_to_generate = EE_Registry::instance()->load_lib(
1061
-            'Message_To_Generate_From_Queue',
1062
-            array(
1063
-                $messenger,
1064
-                $message_type,
1065
-                $queue,
1066
-                $custom_subject,
1067
-            )
1068
-        );
1069
-        return self::$_MSG_PROCESSOR->queue_for_sending($message_to_generate);
1070
-    }
1071
-
1072
-
1073
-    /**
1074
-     * Generates Messages immediately for EE_Message IDs (but only for the correct status for generation)
1075
-     *
1076
-     * @since 4.9.0
1077
-     * @param array $message_ids An array of message ids
1078
-     * @return bool|EE_Messages_Queue false if nothing was generated, EE_Messages_Queue containing generated
1079
-     *                           messages.
1080
-     * @throws EE_Error
1081
-     * @throws InvalidArgumentException
1082
-     * @throws InvalidDataTypeException
1083
-     * @throws InvalidInterfaceException
1084
-     * @throws ReflectionException
1085
-     */
1086
-    public static function generate_now($message_ids)
1087
-    {
1088
-        self::_load_controller();
1089
-        $messages = EEM_Message::instance()->get_all(
1090
-            array(
1091
-                0 => array(
1092
-                    'MSG_ID' => array('IN', $message_ids),
1093
-                    'STS_ID' => EEM_Message::status_incomplete,
1094
-                ),
1095
-            )
1096
-        );
1097
-        $generated_queue = false;
1098
-        if ($messages) {
1099
-            $generated_queue = self::$_MSG_PROCESSOR->batch_generate_from_queue($messages);
1100
-        }
1101
-
1102
-        if (! $generated_queue instanceof EE_Messages_Queue) {
1103
-            EE_Error::add_error(
1104
-                __(
1105
-                    'The messages were not generated. This could mean there is already a batch being generated on a separate request, or because the selected messages are not ready for generation. Please wait a minute or two and try again.',
1106
-                    'event_espresso'
1107
-                ),
1108
-                __FILE__,
1109
-                __FUNCTION__,
1110
-                __LINE__
1111
-            );
1112
-        }
1113
-        return $generated_queue;
1114
-    }
1115
-
1116
-
1117
-    /**
1118
-     * Sends messages immediately for the incoming message_ids that have the status of EEM_Message::status_resend or,
1119
-     * EEM_Message::status_idle
1120
-     *
1121
-     * @since 4.9.0
1122
-     * @param $message_ids
1123
-     * @return bool|EE_Messages_Queue false if no messages sent.
1124
-     * @throws EE_Error
1125
-     * @throws InvalidArgumentException
1126
-     * @throws InvalidDataTypeException
1127
-     * @throws InvalidInterfaceException
1128
-     * @throws ReflectionException
1129
-     */
1130
-    public static function send_now($message_ids)
1131
-    {
1132
-        self::_load_controller();
1133
-        $messages = EEM_Message::instance()->get_all(
1134
-            array(
1135
-                0 => array(
1136
-                    'MSG_ID' => array('IN', $message_ids),
1137
-                    'STS_ID' => array(
1138
-                        'IN',
1139
-                        array(EEM_Message::status_idle, EEM_Message::status_resend, EEM_Message::status_retry),
1140
-                    ),
1141
-                ),
1142
-            )
1143
-        );
1144
-        $sent_queue = false;
1145
-        if ($messages) {
1146
-            $sent_queue = self::$_MSG_PROCESSOR->batch_send_from_queue($messages);
1147
-        }
1148
-
1149
-        if (! $sent_queue instanceof EE_Messages_Queue) {
1150
-            EE_Error::add_error(
1151
-                __(
1152
-                    'The messages were not sent. This could mean there is already a batch being sent on a separate request, or because the selected messages are not sendable. Please wait a minute or two and try again.',
1153
-                    'event_espresso'
1154
-                ),
1155
-                __FILE__,
1156
-                __FUNCTION__,
1157
-                __LINE__
1158
-            );
1159
-        } else {
1160
-            // can count how many sent by using the messages in the queue
1161
-            $sent_count = $sent_queue->count_STS_in_queue(EEM_Message::instance()->stati_indicating_sent());
1162
-            if ($sent_count > 0) {
1163
-                EE_Error::add_success(
1164
-                    sprintf(
1165
-                        _n(
1166
-                            'There was %d message successfully sent.',
1167
-                            'There were %d messages successfully sent.',
1168
-                            $sent_count,
1169
-                            'event_espresso'
1170
-                        ),
1171
-                        $sent_count
1172
-                    )
1173
-                );
1174
-            } else {
1175
-                EE_Error::overwrite_errors();
1176
-                EE_Error::add_error(
1177
-                    __(
1178
-                        'No message was sent because of problems with sending. Either all the messages you selected were not a sendable message, they were ALREADY sent on a different scheduled task, or there was an error.
259
+				exit;
260
+			}
261
+		}
262
+		return;
263
+	}
264
+
265
+
266
+	/**
267
+	 *  This runs when the msg_url_trigger route has initiated.
268
+	 *
269
+	 * @since 4.5.0
270
+	 * @param WP $WP
271
+	 * @throws EE_Error
272
+	 * @throws InvalidArgumentException
273
+	 * @throws ReflectionException
274
+	 * @throws InvalidDataTypeException
275
+	 * @throws InvalidInterfaceException
276
+	 */
277
+	public function run($WP)
278
+	{
279
+		// ensure controller is loaded
280
+		self::_load_controller();
281
+		// attempt to process message
282
+		try {
283
+			/** @type EE_Message_To_Generate_From_Request $message_to_generate */
284
+			$message_to_generate = EE_Registry::instance()->load_lib('Message_To_Generate_From_Request');
285
+			self::$_MSG_PROCESSOR->generate_and_send_now($message_to_generate);
286
+		} catch (EE_Error $e) {
287
+			$error_msg = __(
288
+				'Please note that a system message failed to send due to a technical issue.',
289
+				'event_espresso'
290
+			);
291
+			// add specific message for developers if WP_DEBUG in on
292
+			$error_msg .= '||' . $e->getMessage();
293
+			EE_Error::add_error($error_msg, __FILE__, __FUNCTION__, __LINE__);
294
+		}
295
+	}
296
+
297
+
298
+	/**
299
+	 * This is triggered by the 'msg_cron_trigger' route.
300
+	 *
301
+	 * @param WP $WP
302
+	 */
303
+	public function execute_batch_request($WP)
304
+	{
305
+		$this->run_cron();
306
+		header('HTTP/1.1 200 OK');
307
+		exit();
308
+	}
309
+
310
+
311
+	/**
312
+	 * This gets executed on wp_cron jobs or when a batch request is initiated on its own separate non regular wp
313
+	 * request.
314
+	 */
315
+	public function run_cron()
316
+	{
317
+		self::_load_controller();
318
+		// get required vars
319
+		$cron_type = EE_Registry::instance()->REQ->get('type');
320
+		$transient_key = EE_Registry::instance()->REQ->get('key');
321
+
322
+		// now let's verify transient, if not valid exit immediately
323
+		if (! get_transient($transient_key)) {
324
+			/**
325
+			 * trigger error so this gets in the error logs.  This is important because it happens on a non-user
326
+			 * request.
327
+			 */
328
+			trigger_error(esc_attr__('Invalid Request (Transient does not exist)', 'event_espresso'));
329
+		}
330
+
331
+		// if made it here, lets' delete the transient to keep the db clean
332
+		delete_transient($transient_key);
333
+
334
+		if (apply_filters('FHEE__EED_Messages__run_cron__use_wp_cron', true)) {
335
+			$method = 'batch_' . $cron_type . '_from_queue';
336
+			if (method_exists(self::$_MSG_PROCESSOR, $method)) {
337
+				self::$_MSG_PROCESSOR->$method();
338
+			} else {
339
+				// no matching task
340
+				/**
341
+				 * trigger error so this gets in the error logs.  This is important because it happens on a non user
342
+				 * request.
343
+				 */
344
+				trigger_error(
345
+					esc_attr(
346
+						sprintf(
347
+							__('There is no task corresponding to this route %s', 'event_espresso'),
348
+							$cron_type
349
+						)
350
+					)
351
+				);
352
+			}
353
+		}
354
+
355
+		do_action('FHEE__EED_Messages__run_cron__end');
356
+	}
357
+
358
+
359
+	/**
360
+	 * This is used to retrieve the template pack for the given name.
361
+	 * Retrieved packs are cached on the static $_TMP_PACKS array.  If there is no class matching the given name then
362
+	 * the default template pack is returned.
363
+	 *
364
+	 * @deprecated 4.9.0  @see EEH_MSG_Template::get_template_pack()
365
+	 * @param string $template_pack_name This should correspond to the dbref of the template pack (which is also used
366
+	 *                                   in generating the Pack class name).
367
+	 * @return EE_Messages_Template_Pack
368
+	 * @throws EE_Error
369
+	 * @throws InvalidArgumentException
370
+	 * @throws ReflectionException
371
+	 * @throws InvalidDataTypeException
372
+	 * @throws InvalidInterfaceException
373
+	 */
374
+	public static function get_template_pack($template_pack_name)
375
+	{
376
+		EE_Registry::instance()->load_helper('MSG_Template');
377
+		return EEH_MSG_Template::get_template_pack($template_pack_name);
378
+	}
379
+
380
+
381
+	/**
382
+	 * Retrieves an array of all template packs.
383
+	 * Array is in the format array( 'dbref' => EE_Messages_Template_Pack )
384
+	 *
385
+	 * @deprecated 4.9.0  @see EEH_MSG_Template_Pack::get_template_pack_collection
386
+	 * @return EE_Messages_Template_Pack[]
387
+	 * @throws EE_Error
388
+	 * @throws InvalidArgumentException
389
+	 * @throws ReflectionException
390
+	 * @throws InvalidDataTypeException
391
+	 * @throws InvalidInterfaceException
392
+	 */
393
+	public static function get_template_packs()
394
+	{
395
+		EE_Registry::instance()->load_helper('MSG_Template');
396
+
397
+		// for backward compat, let's make sure this returns in the same format as originally.
398
+		$template_pack_collection = EEH_MSG_Template::get_template_pack_collection();
399
+		$template_pack_collection->rewind();
400
+		$template_packs = array();
401
+		while ($template_pack_collection->valid()) {
402
+			$template_packs[ $template_pack_collection->current()->dbref ] = $template_pack_collection->current();
403
+			$template_pack_collection->next();
404
+		}
405
+		return $template_packs;
406
+	}
407
+
408
+
409
+	/**
410
+	 * This simply makes sure the autoloaders are registered for the EE_messages system.
411
+	 *
412
+	 * @since 4.5.0
413
+	 * @return void
414
+	 * @throws EE_Error
415
+	 */
416
+	public static function set_autoloaders()
417
+	{
418
+		if (empty(self::$_MSG_PATHS)) {
419
+			self::_set_messages_paths();
420
+			foreach (self::$_MSG_PATHS as $path) {
421
+				EEH_Autoloader::register_autoloaders_for_each_file_in_folder($path);
422
+			}
423
+			// add aliases
424
+			EEH_Autoloader::add_alias('EE_messages', 'EE_messages');
425
+			EEH_Autoloader::add_alias('EE_messenger', 'EE_messenger');
426
+		}
427
+	}
428
+
429
+
430
+	/**
431
+	 * Take care of adding all the paths for the messages components to the $_MSG_PATHS property
432
+	 * for use by the Messages Autoloaders
433
+	 *
434
+	 * @since 4.5.0
435
+	 * @return void.
436
+	 */
437
+	protected static function _set_messages_paths()
438
+	{
439
+		self::$_MSG_PATHS = apply_filters(
440
+			'FHEE__EED_Messages___set_messages_paths___MSG_PATHS',
441
+			[
442
+				EE_LIBRARIES . 'messages/message_type',
443
+				EE_LIBRARIES . 'messages/messenger',
444
+				EE_LIBRARIES . 'messages/defaults',
445
+				EE_LIBRARIES . 'messages/defaults/email',
446
+				EE_LIBRARIES . 'messages/data_class',
447
+				EE_LIBRARIES . 'messages/validators',
448
+				EE_LIBRARIES . 'messages/validators/email',
449
+				EE_LIBRARIES . 'messages/validators/html',
450
+				EE_LIBRARIES . 'shortcodes',
451
+			]
452
+		);
453
+	}
454
+
455
+
456
+	/**
457
+	 * Takes care of loading dependencies
458
+	 *
459
+	 * @since 4.5.0
460
+	 * @return void
461
+	 * @throws EE_Error
462
+	 * @throws InvalidArgumentException
463
+	 * @throws ReflectionException
464
+	 * @throws InvalidDataTypeException
465
+	 * @throws InvalidInterfaceException
466
+	 */
467
+	protected static function _load_controller()
468
+	{
469
+		if (! self::$_MSG_PROCESSOR instanceof EE_Messages_Processor) {
470
+			EE_Registry::instance()->load_core('Request_Handler');
471
+			self::set_autoloaders();
472
+			self::$_EEMSG = EE_Registry::instance()->load_lib('messages');
473
+			self::$_MSG_PROCESSOR = EE_Registry::instance()->load_lib('Messages_Processor');
474
+			self::$_message_resource_manager = EE_Registry::instance()->load_lib('Message_Resource_Manager');
475
+		}
476
+	}
477
+
478
+
479
+	/**
480
+	 * @param EE_Transaction $transaction
481
+	 * @throws EE_Error
482
+	 * @throws InvalidArgumentException
483
+	 * @throws InvalidDataTypeException
484
+	 * @throws InvalidInterfaceException
485
+	 * @throws ReflectionException
486
+	 */
487
+	public static function payment_reminder(EE_Transaction $transaction)
488
+	{
489
+		self::_load_controller();
490
+		$data = array($transaction, null);
491
+		self::$_MSG_PROCESSOR->generate_for_all_active_messengers('payment_reminder', $data);
492
+	}
493
+
494
+
495
+	/**
496
+	 * Any messages triggers for after successful gateway payments should go in here.
497
+	 *
498
+	 * @param EE_Transaction  $transaction object
499
+	 * @param EE_Payment|null $payment     object
500
+	 * @return void
501
+	 * @throws EE_Error
502
+	 * @throws InvalidArgumentException
503
+	 * @throws ReflectionException
504
+	 * @throws InvalidDataTypeException
505
+	 * @throws InvalidInterfaceException
506
+	 */
507
+	public static function payment(EE_Transaction $transaction, EE_Payment $payment = null)
508
+	{
509
+		// if there's no payment object, then we cannot do a payment type message!
510
+		if (! $payment instanceof EE_Payment) {
511
+			return;
512
+		}
513
+		self::_load_controller();
514
+		$data = array($transaction, $payment);
515
+		EE_Registry::instance()->load_helper('MSG_Template');
516
+		$message_type = EEH_MSG_Template::convert_payment_status_to_message_type($payment->STS_ID());
517
+		// if payment amount is less than 0 then switch to payment_refund message type.
518
+		$message_type = $payment->amount() < 0 ? 'payment_refund' : $message_type;
519
+		self::$_MSG_PROCESSOR->generate_for_all_active_messengers($message_type, $data);
520
+	}
521
+
522
+
523
+	/**
524
+	 * @param EE_Transaction $transaction
525
+	 * @throws EE_Error
526
+	 * @throws InvalidArgumentException
527
+	 * @throws InvalidDataTypeException
528
+	 * @throws InvalidInterfaceException
529
+	 * @throws ReflectionException
530
+	 */
531
+	public static function cancelled_registration(EE_Transaction $transaction)
532
+	{
533
+		self::_load_controller();
534
+		$data = array($transaction, null);
535
+		self::$_MSG_PROCESSOR->generate_for_all_active_messengers('cancelled_registration', $data);
536
+	}
537
+
538
+
539
+	/**
540
+	 * Trigger for Registration messages
541
+	 * Note that what registration message type is sent depends on what the reg status is for the registrations on the
542
+	 * incoming transaction.
543
+	 *
544
+	 * @param EE_Registration $registration
545
+	 * @param array           $extra_details
546
+	 * @return void
547
+	 * @throws EE_Error
548
+	 * @throws InvalidArgumentException
549
+	 * @throws InvalidDataTypeException
550
+	 * @throws InvalidInterfaceException
551
+	 * @throws ReflectionException
552
+	 * @throws EntityNotFoundException
553
+	 */
554
+	public static function maybe_registration(EE_Registration $registration, $extra_details = array())
555
+	{
556
+
557
+		if (! self::_verify_registration_notification_send($registration, $extra_details)) {
558
+			// no messages please
559
+			return;
560
+		}
561
+
562
+		// get all non-trashed registrations so we make sure we send messages for the right status.
563
+		$all_registrations = $registration->transaction()->registrations(
564
+			array(
565
+				array('REG_deleted' => false),
566
+				'order_by' => array(
567
+					'Event.EVT_name'     => 'ASC',
568
+					'Attendee.ATT_lname' => 'ASC',
569
+					'Attendee.ATT_fname' => 'ASC',
570
+				),
571
+			)
572
+		);
573
+		// cached array of statuses so we only trigger messages once per status.
574
+		$statuses_sent = array();
575
+		self::_load_controller();
576
+		$mtgs = array();
577
+
578
+		// loop through registrations and trigger messages once per status.
579
+		foreach ($all_registrations as $reg) {
580
+			// already triggered?
581
+			if (in_array($reg->status_ID(), $statuses_sent)) {
582
+				continue;
583
+			}
584
+
585
+			$message_type = EEH_MSG_Template::convert_reg_status_to_message_type($reg->status_ID());
586
+			$mtgs = array_merge(
587
+				$mtgs,
588
+				self::$_MSG_PROCESSOR->setup_mtgs_for_all_active_messengers(
589
+					$message_type,
590
+					array($registration->transaction(), null, $reg->status_ID())
591
+				)
592
+			);
593
+			$statuses_sent[] = $reg->status_ID();
594
+		}
595
+
596
+		if (count($statuses_sent) > 1) {
597
+			$mtgs = array_merge(
598
+				$mtgs,
599
+				self::$_MSG_PROCESSOR->setup_mtgs_for_all_active_messengers(
600
+					'registration_summary',
601
+					array($registration->transaction(), null)
602
+				)
603
+			);
604
+		}
605
+
606
+		// batch queue and initiate request
607
+		self::$_MSG_PROCESSOR->batch_queue_for_generation_and_persist($mtgs);
608
+		self::$_MSG_PROCESSOR->get_queue()->initiate_request_by_priority();
609
+	}
610
+
611
+
612
+	/**
613
+	 * This is a helper method used to very whether a registration notification should be sent or
614
+	 * not.  Prevents duplicate notifications going out for registration context notifications.
615
+	 *
616
+	 * @param EE_Registration $registration  [description]
617
+	 * @param array           $extra_details [description]
618
+	 * @return bool          true = send away, false = nope halt the presses.
619
+	 */
620
+	protected static function _verify_registration_notification_send(
621
+		EE_Registration $registration,
622
+		$extra_details = array()
623
+	) {
624
+		if (! $registration->is_primary_registrant()) {
625
+			return false;
626
+		}
627
+		// first we check if we're in admin and not doing front ajax
628
+		if (is_admin() && ! EE_FRONT_AJAX) {
629
+			// make sure appropriate admin params are set for sending messages
630
+			if (
631
+				empty($_REQUEST['txn_reg_status_change']['send_notifications'])
632
+				|| ! absint($_REQUEST['txn_reg_status_change']['send_notifications'])
633
+			) {
634
+				// no messages sent please.
635
+				return false;
636
+			}
637
+		} else {
638
+			// frontend request (either regular or via AJAX)
639
+			// TXN is NOT finalized ?
640
+			if (! isset($extra_details['finalized']) || $extra_details['finalized'] === false) {
641
+				return false;
642
+			}
643
+			// return visit but nothing changed ???
644
+			if (
645
+				isset($extra_details['revisit'], $extra_details['status_updates']) &&
646
+				$extra_details['revisit'] && ! $extra_details['status_updates']
647
+			) {
648
+				return false;
649
+			}
650
+			// NOT sending messages && reg status is something other than "Not-Approved"
651
+			if (
652
+				! apply_filters('FHEE__EED_Messages___maybe_registration__deliver_notifications', false) &&
653
+				$registration->status_ID() !== EEM_Registration::status_id_not_approved
654
+			) {
655
+				return false;
656
+			}
657
+		}
658
+		// release the kraken
659
+		return true;
660
+	}
661
+
662
+
663
+	/**
664
+	 * Simply returns an array indexed by Registration Status ID and the related message_type name associated with that
665
+	 * status id.
666
+	 *
667
+	 * @deprecated 4.9.0  Use EEH_MSG_Template::reg_status_to_message_type_array()
668
+	 *                    or EEH_MSG_Template::convert_reg_status_to_message_type
669
+	 * @param string $reg_status
670
+	 * @return array
671
+	 * @throws EE_Error
672
+	 * @throws InvalidArgumentException
673
+	 * @throws ReflectionException
674
+	 * @throws InvalidDataTypeException
675
+	 * @throws InvalidInterfaceException
676
+	 */
677
+	protected static function _get_reg_status_array($reg_status = '')
678
+	{
679
+		EE_Registry::instance()->load_helper('MSG_Template');
680
+		return EEH_MSG_Template::convert_reg_status_to_message_type($reg_status)
681
+			? EEH_MSG_Template::convert_reg_status_to_message_type($reg_status)
682
+			: EEH_MSG_Template::reg_status_to_message_type_array();
683
+	}
684
+
685
+
686
+	/**
687
+	 * Simply returns the payment message type for the given payment status.
688
+	 *
689
+	 * @deprecated 4.9.0 Use EEH_MSG_Template::payment_status_to_message_type_array
690
+	 *                   or EEH_MSG_Template::convert_payment_status_to_message_type
691
+	 * @param string $payment_status The payment status being matched.
692
+	 * @return bool|string The payment message type slug matching the status or false if no match.
693
+	 * @throws EE_Error
694
+	 * @throws InvalidArgumentException
695
+	 * @throws ReflectionException
696
+	 * @throws InvalidDataTypeException
697
+	 * @throws InvalidInterfaceException
698
+	 */
699
+	protected static function _get_payment_message_type($payment_status)
700
+	{
701
+		EE_Registry::instance()->load_helper('MSG_Template');
702
+		return EEH_MSG_Template::convert_payment_status_to_message_type($payment_status)
703
+			? EEH_MSG_Template::convert_payment_status_to_message_type($payment_status)
704
+			: false;
705
+	}
706
+
707
+
708
+	/**
709
+	 * Message triggers for a resending already sent message(s) (via EE_Message list table)
710
+	 *
711
+	 * @access public
712
+	 * @param array $req_data This is the $_POST & $_GET data sent from EE_Admin Pages
713
+	 * @return bool success/fail
714
+	 * @throws EE_Error
715
+	 * @throws InvalidArgumentException
716
+	 * @throws InvalidDataTypeException
717
+	 * @throws InvalidInterfaceException
718
+	 * @throws ReflectionException
719
+	 */
720
+	public static function process_resend($req_data)
721
+	{
722
+		self::_load_controller();
723
+
724
+		// if $msgID in this request then skip to the new resend_message
725
+		if (EE_Registry::instance()->REQ->get('MSG_ID')) {
726
+			return self::resend_message();
727
+		}
728
+
729
+		// make sure any incoming request data is set on the REQ so that it gets picked up later.
730
+		$req_data = (array) $req_data;
731
+		foreach ($req_data as $request_key => $request_value) {
732
+			EE_Registry::instance()->REQ->set($request_key, $request_value);
733
+		}
734
+
735
+		if (
736
+			! $messages_to_send = self::$_MSG_PROCESSOR->setup_messages_to_generate_from_registration_ids_in_request(
737
+			)
738
+		) {
739
+			return false;
740
+		}
741
+
742
+		try {
743
+			self::$_MSG_PROCESSOR->batch_queue_for_generation_and_persist($messages_to_send);
744
+			self::$_MSG_PROCESSOR->get_queue()->initiate_request_by_priority();
745
+		} catch (EE_Error $e) {
746
+			EE_Error::add_error($e->getMessage(), __FILE__, __FUNCTION__, __LINE__);
747
+			return false;
748
+		}
749
+		EE_Error::add_success(
750
+			__('Messages have been successfully queued for generation and sending.', 'event_espresso')
751
+		);
752
+		return true; // everything got queued.
753
+	}
754
+
755
+
756
+	/**
757
+	 * Message triggers for a resending already sent message(s) (via EE_Message list table)
758
+	 *
759
+	 * @return bool
760
+	 * @throws EE_Error
761
+	 * @throws InvalidArgumentException
762
+	 * @throws InvalidDataTypeException
763
+	 * @throws InvalidInterfaceException
764
+	 * @throws ReflectionException
765
+	 */
766
+	public static function resend_message()
767
+	{
768
+		self::_load_controller();
769
+
770
+		$msgID = EE_Registry::instance()->REQ->get('MSG_ID');
771
+		if (! $msgID) {
772
+			EE_Error::add_error(
773
+				__(
774
+					'Something went wrong because there is no "MSG_ID" value in the request',
775
+					'event_espresso'
776
+				),
777
+				__FILE__,
778
+				__FUNCTION__,
779
+				__LINE__
780
+			);
781
+			return false;
782
+		}
783
+
784
+		self::$_MSG_PROCESSOR->setup_messages_from_ids_and_send((array) $msgID);
785
+
786
+		// setup success message.
787
+		$count_ready_for_resend = self::$_MSG_PROCESSOR->get_queue()->count_STS_in_queue(EEM_Message::status_resend);
788
+		EE_Error::add_success(
789
+			sprintf(
790
+				_n(
791
+					'There was %d message queued for resending.',
792
+					'There were %d messages queued for resending.',
793
+					$count_ready_for_resend,
794
+					'event_espresso'
795
+				),
796
+				$count_ready_for_resend
797
+			)
798
+		);
799
+		return true;
800
+	}
801
+
802
+
803
+	/**
804
+	 * Message triggers for manual payment applied by admin
805
+	 *
806
+	 * @param  EE_Payment $payment EE_payment object
807
+	 * @return bool success/fail
808
+	 * @throws EE_Error
809
+	 * @throws InvalidArgumentException
810
+	 * @throws ReflectionException
811
+	 * @throws InvalidDataTypeException
812
+	 * @throws InvalidInterfaceException
813
+	 */
814
+	public static function process_admin_payment(EE_Payment $payment)
815
+	{
816
+		EE_Registry::instance()->load_helper('MSG_Template');
817
+		// we need to get the transaction object
818
+		$transaction = $payment->transaction();
819
+		if ($transaction instanceof EE_Transaction) {
820
+			$data = array($transaction, $payment);
821
+			$message_type = EEH_MSG_Template::convert_payment_status_to_message_type($payment->STS_ID());
822
+
823
+			// if payment amount is less than 0 then switch to payment_refund message type.
824
+			$message_type = $payment->amount() < 0 ? 'payment_refund' : $message_type;
825
+
826
+			// if payment_refund is selected, but the status is NOT accepted.  Then change message type to false so NO message notification goes out.
827
+			$message_type = $message_type == 'payment_refund' && $payment->STS_ID() != EEM_Payment::status_id_approved
828
+				? false : $message_type;
829
+
830
+			self::_load_controller();
831
+
832
+			self::$_MSG_PROCESSOR->generate_for_all_active_messengers($message_type, $data);
833
+
834
+			// get count of queued for generation
835
+			$count_to_generate = self::$_MSG_PROCESSOR->get_queue()->count_STS_in_queue(
836
+				array(
837
+					EEM_Message::status_incomplete,
838
+					EEM_Message::status_idle,
839
+				)
840
+			);
841
+
842
+			if ($count_to_generate > 0 && self::$_MSG_PROCESSOR->get_queue()->get_message_repository()->count() !== 0) {
843
+				add_filter('FHEE__EE_Admin_Page___process_admin_payment_notification__success', '__return_true');
844
+				return true;
845
+			} else {
846
+				$count_failed = self::$_MSG_PROCESSOR->get_queue()->count_STS_in_queue(
847
+					EEM_Message::instance()->stati_indicating_failed_sending()
848
+				);
849
+				/**
850
+				 * Verify that there are actually errors.  If not then we return a success message because the queue might have been emptied due to successful
851
+				 * IMMEDIATE generation.
852
+				 */
853
+				if ($count_failed > 0) {
854
+					EE_Error::add_error(
855
+						sprintf(
856
+							_n(
857
+								'The payment notification generation failed.',
858
+								'%d payment notifications failed being sent.',
859
+								$count_failed,
860
+								'event_espresso'
861
+							),
862
+							$count_failed
863
+						),
864
+						__FILE__,
865
+						__FUNCTION__,
866
+						__LINE__
867
+					);
868
+
869
+					return false;
870
+				} else {
871
+					add_filter('FHEE__EE_Admin_Page___process_admin_payment_notification__success', '__return_true');
872
+					return true;
873
+				}
874
+			}
875
+		} else {
876
+			EE_Error::add_error(
877
+				'Unable to generate the payment notification because the given value for the transaction is invalid.',
878
+				'event_espresso'
879
+			);
880
+			return false;
881
+		}
882
+	}
883
+
884
+
885
+	/**
886
+	 * Callback for AHEE__Extend_Registrations_Admin_Page___newsletter_selected_send_with_registrations trigger
887
+	 *
888
+	 * @since   4.3.0
889
+	 * @param  EE_Registration[] $registrations an array of EE_Registration objects
890
+	 * @param  int               $grp_id        a specific message template group id.
891
+	 * @return void
892
+	 * @throws EE_Error
893
+	 * @throws InvalidArgumentException
894
+	 * @throws InvalidDataTypeException
895
+	 * @throws InvalidInterfaceException
896
+	 * @throws ReflectionException
897
+	 */
898
+	public static function send_newsletter_message($registrations, $grp_id)
899
+	{
900
+		// make sure mtp is id and set it in the EE_Request Handler later messages setup.
901
+		EE_Registry::instance()->REQ->set('GRP_ID', (int) $grp_id);
902
+		self::_load_controller();
903
+		self::$_MSG_PROCESSOR->generate_for_all_active_messengers('newsletter', $registrations);
904
+	}
905
+
906
+
907
+	/**
908
+	 * Callback for FHEE__EE_Registration__invoice_url__invoice_url or FHEE__EE_Registration__receipt_url__receipt_url
909
+	 *
910
+	 * @since   4.3.0
911
+	 * @param    string          $registration_message_trigger_url
912
+	 * @param    EE_Registration $registration
913
+	 * @param string             $messenger
914
+	 * @param string             $message_type
915
+	 * @return string
916
+	 * @throws EE_Error
917
+	 * @throws InvalidArgumentException
918
+	 * @throws InvalidDataTypeException
919
+	 * @throws InvalidInterfaceException
920
+	 */
921
+	public static function registration_message_trigger_url(
922
+		$registration_message_trigger_url,
923
+		EE_Registration $registration,
924
+		$messenger = 'html',
925
+		$message_type = 'invoice'
926
+	) {
927
+		// whitelist $messenger
928
+		switch ($messenger) {
929
+			case 'pdf':
930
+				$sending_messenger = 'pdf';
931
+				$generating_messenger = 'html';
932
+				break;
933
+			case 'html':
934
+			default:
935
+				$sending_messenger = 'html';
936
+				$generating_messenger = 'html';
937
+				break;
938
+		}
939
+		// whitelist $message_type
940
+		switch ($message_type) {
941
+			case 'receipt':
942
+				$message_type = 'receipt';
943
+				break;
944
+			case 'invoice':
945
+			default:
946
+				$message_type = 'invoice';
947
+				break;
948
+		}
949
+		// verify that both the messenger AND the message type are active
950
+		if (
951
+			EEH_MSG_Template::is_messenger_active($sending_messenger)
952
+			&& EEH_MSG_Template::is_mt_active($message_type)
953
+		) {
954
+			// need to get the correct message template group for this (i.e. is there a custom invoice for the event this registration is registered for?)
955
+			$template_query_params = array(
956
+				'MTP_is_active'    => true,
957
+				'MTP_messenger'    => $generating_messenger,
958
+				'MTP_message_type' => $message_type,
959
+				'Event.EVT_ID'     => $registration->event_ID(),
960
+			);
961
+			// get the message template group.
962
+			$msg_template_group = EEM_Message_Template_Group::instance()->get_one(array($template_query_params));
963
+			// if we don't have an EE_Message_Template_Group then return
964
+			if (! $msg_template_group instanceof EE_Message_Template_Group) {
965
+				// remove EVT_ID from query params so that global templates get picked up
966
+				unset($template_query_params['Event.EVT_ID']);
967
+				// get global template as the fallback
968
+				$msg_template_group = EEM_Message_Template_Group::instance()->get_one(array($template_query_params));
969
+			}
970
+			// if we don't have an EE_Message_Template_Group then return
971
+			if (! $msg_template_group instanceof EE_Message_Template_Group) {
972
+				return '';
973
+			}
974
+			// generate the URL
975
+			$registration_message_trigger_url = EEH_MSG_Template::generate_url_trigger(
976
+				$sending_messenger,
977
+				$generating_messenger,
978
+				'purchaser',
979
+				$message_type,
980
+				$registration,
981
+				$msg_template_group->ID(),
982
+				$registration->transaction_ID()
983
+			);
984
+		}
985
+		return $registration_message_trigger_url;
986
+	}
987
+
988
+
989
+	/**
990
+	 * Use to generate and return a message preview!
991
+	 *
992
+	 * @param  string $type      This should correspond with a valid message type
993
+	 * @param  string $context   This should correspond with a valid context for the message type
994
+	 * @param  string $messenger This should correspond with a valid messenger.
995
+	 * @param bool    $send      true we will do a test send using the messenger delivery, false we just do a regular
996
+	 *                           preview
997
+	 * @return bool|string The body of the message or if send is requested, sends.
998
+	 * @throws EE_Error
999
+	 * @throws InvalidArgumentException
1000
+	 * @throws InvalidDataTypeException
1001
+	 * @throws InvalidInterfaceException
1002
+	 * @throws ReflectionException
1003
+	 */
1004
+	public static function preview_message($type, $context, $messenger, $send = false)
1005
+	{
1006
+		self::_load_controller();
1007
+		$mtg = new EE_Message_To_Generate(
1008
+			$messenger,
1009
+			$type,
1010
+			array(),
1011
+			$context,
1012
+			true
1013
+		);
1014
+		$generated_preview_queue = self::$_MSG_PROCESSOR->generate_for_preview($mtg, $send);
1015
+		if ($generated_preview_queue instanceof EE_Messages_Queue) {
1016
+			// loop through all content for the preview and remove any persisted records.
1017
+			$content = '';
1018
+			foreach ($generated_preview_queue->get_message_repository() as $message) {
1019
+				$content = $message->content();
1020
+				if ($message->ID() > 0 && $message->STS_ID() !== EEM_Message::status_failed) {
1021
+					$message->delete();
1022
+				}
1023
+			}
1024
+			return $content;
1025
+		} else {
1026
+			return $generated_preview_queue;
1027
+		}
1028
+	}
1029
+
1030
+
1031
+	/**
1032
+	 * This is a method that allows for sending a message using a messenger matching the string given and the provided
1033
+	 * EE_Message_Queue object.  The EE_Message_Queue object is used to create a single aggregate EE_Message via the
1034
+	 * content found in the EE_Message objects in the queue.
1035
+	 *
1036
+	 * @since 4.9.0
1037
+	 * @param string            $messenger            a string matching a valid active messenger in the system
1038
+	 * @param string            $message_type         Although it seems contrary to the name of the method, a message
1039
+	 *                                                type name is still required to send along the message type to the
1040
+	 *                                                messenger because this is used for determining what specific
1041
+	 *                                                variations might be loaded for the generated message.
1042
+	 * @param EE_Messages_Queue $queue
1043
+	 * @param string            $custom_subject       Can be used to set what the custom subject string will be on the
1044
+	 *                                                aggregate EE_Message object.
1045
+	 * @return bool success or fail.
1046
+	 * @throws EE_Error
1047
+	 * @throws InvalidArgumentException
1048
+	 * @throws ReflectionException
1049
+	 * @throws InvalidDataTypeException
1050
+	 * @throws InvalidInterfaceException
1051
+	 */
1052
+	public static function send_message_with_messenger_only(
1053
+		$messenger,
1054
+		$message_type,
1055
+		EE_Messages_Queue $queue,
1056
+		$custom_subject = ''
1057
+	) {
1058
+		self::_load_controller();
1059
+		/** @type EE_Message_To_Generate_From_Queue $message_to_generate */
1060
+		$message_to_generate = EE_Registry::instance()->load_lib(
1061
+			'Message_To_Generate_From_Queue',
1062
+			array(
1063
+				$messenger,
1064
+				$message_type,
1065
+				$queue,
1066
+				$custom_subject,
1067
+			)
1068
+		);
1069
+		return self::$_MSG_PROCESSOR->queue_for_sending($message_to_generate);
1070
+	}
1071
+
1072
+
1073
+	/**
1074
+	 * Generates Messages immediately for EE_Message IDs (but only for the correct status for generation)
1075
+	 *
1076
+	 * @since 4.9.0
1077
+	 * @param array $message_ids An array of message ids
1078
+	 * @return bool|EE_Messages_Queue false if nothing was generated, EE_Messages_Queue containing generated
1079
+	 *                           messages.
1080
+	 * @throws EE_Error
1081
+	 * @throws InvalidArgumentException
1082
+	 * @throws InvalidDataTypeException
1083
+	 * @throws InvalidInterfaceException
1084
+	 * @throws ReflectionException
1085
+	 */
1086
+	public static function generate_now($message_ids)
1087
+	{
1088
+		self::_load_controller();
1089
+		$messages = EEM_Message::instance()->get_all(
1090
+			array(
1091
+				0 => array(
1092
+					'MSG_ID' => array('IN', $message_ids),
1093
+					'STS_ID' => EEM_Message::status_incomplete,
1094
+				),
1095
+			)
1096
+		);
1097
+		$generated_queue = false;
1098
+		if ($messages) {
1099
+			$generated_queue = self::$_MSG_PROCESSOR->batch_generate_from_queue($messages);
1100
+		}
1101
+
1102
+		if (! $generated_queue instanceof EE_Messages_Queue) {
1103
+			EE_Error::add_error(
1104
+				__(
1105
+					'The messages were not generated. This could mean there is already a batch being generated on a separate request, or because the selected messages are not ready for generation. Please wait a minute or two and try again.',
1106
+					'event_espresso'
1107
+				),
1108
+				__FILE__,
1109
+				__FUNCTION__,
1110
+				__LINE__
1111
+			);
1112
+		}
1113
+		return $generated_queue;
1114
+	}
1115
+
1116
+
1117
+	/**
1118
+	 * Sends messages immediately for the incoming message_ids that have the status of EEM_Message::status_resend or,
1119
+	 * EEM_Message::status_idle
1120
+	 *
1121
+	 * @since 4.9.0
1122
+	 * @param $message_ids
1123
+	 * @return bool|EE_Messages_Queue false if no messages sent.
1124
+	 * @throws EE_Error
1125
+	 * @throws InvalidArgumentException
1126
+	 * @throws InvalidDataTypeException
1127
+	 * @throws InvalidInterfaceException
1128
+	 * @throws ReflectionException
1129
+	 */
1130
+	public static function send_now($message_ids)
1131
+	{
1132
+		self::_load_controller();
1133
+		$messages = EEM_Message::instance()->get_all(
1134
+			array(
1135
+				0 => array(
1136
+					'MSG_ID' => array('IN', $message_ids),
1137
+					'STS_ID' => array(
1138
+						'IN',
1139
+						array(EEM_Message::status_idle, EEM_Message::status_resend, EEM_Message::status_retry),
1140
+					),
1141
+				),
1142
+			)
1143
+		);
1144
+		$sent_queue = false;
1145
+		if ($messages) {
1146
+			$sent_queue = self::$_MSG_PROCESSOR->batch_send_from_queue($messages);
1147
+		}
1148
+
1149
+		if (! $sent_queue instanceof EE_Messages_Queue) {
1150
+			EE_Error::add_error(
1151
+				__(
1152
+					'The messages were not sent. This could mean there is already a batch being sent on a separate request, or because the selected messages are not sendable. Please wait a minute or two and try again.',
1153
+					'event_espresso'
1154
+				),
1155
+				__FILE__,
1156
+				__FUNCTION__,
1157
+				__LINE__
1158
+			);
1159
+		} else {
1160
+			// can count how many sent by using the messages in the queue
1161
+			$sent_count = $sent_queue->count_STS_in_queue(EEM_Message::instance()->stati_indicating_sent());
1162
+			if ($sent_count > 0) {
1163
+				EE_Error::add_success(
1164
+					sprintf(
1165
+						_n(
1166
+							'There was %d message successfully sent.',
1167
+							'There were %d messages successfully sent.',
1168
+							$sent_count,
1169
+							'event_espresso'
1170
+						),
1171
+						$sent_count
1172
+					)
1173
+				);
1174
+			} else {
1175
+				EE_Error::overwrite_errors();
1176
+				EE_Error::add_error(
1177
+					__(
1178
+						'No message was sent because of problems with sending. Either all the messages you selected were not a sendable message, they were ALREADY sent on a different scheduled task, or there was an error.
1179 1179
 					If there was an error, you can look at the messages in the message activity list table for any error messages.',
1180
-                        'event_espresso'
1181
-                    ),
1182
-                    __FILE__,
1183
-                    __FUNCTION__,
1184
-                    __LINE__
1185
-                );
1186
-            }
1187
-        }
1188
-        return $sent_queue;
1189
-    }
1190
-
1191
-
1192
-    /**
1193
-     * Generate and send immediately from the given $message_ids
1194
-     *
1195
-     * @param array $message_ids EE_Message entity ids.
1196
-     * @throws EE_Error
1197
-     * @throws InvalidArgumentException
1198
-     * @throws InvalidDataTypeException
1199
-     * @throws InvalidInterfaceException
1200
-     * @throws ReflectionException
1201
-     */
1202
-    public static function generate_and_send_now(array $message_ids)
1203
-    {
1204
-        $generated_queue = self::generate_now($message_ids);
1205
-        // now let's just trigger sending immediately from this queue.
1206
-        $messages_sent = $generated_queue instanceof EE_Messages_Queue
1207
-            ? $generated_queue->execute()
1208
-            : 0;
1209
-        if ($messages_sent) {
1210
-            EE_Error::add_success(
1211
-                esc_html(
1212
-                    sprintf(
1213
-                        _n(
1214
-                            'There was %d message successfully generated and sent.',
1215
-                            'There were %d messages successfully generated and sent.',
1216
-                            $messages_sent,
1217
-                            'event_espresso'
1218
-                        ),
1219
-                        $messages_sent
1220
-                    )
1221
-                )
1222
-            );
1223
-            // errors would be added via the generate_now method.
1224
-        }
1225
-    }
1226
-
1227
-
1228
-    /**
1229
-     * This will queue the incoming message ids for resending.
1230
-     * Note, only message_ids corresponding to messages with the status of EEM_Message::sent will be queued.
1231
-     *
1232
-     * @since 4.9.0
1233
-     * @param array $message_ids An array of EE_Message IDs
1234
-     * @return bool true means messages were successfully queued for resending, false means none were queued for
1235
-     *                           resending.
1236
-     * @throws EE_Error
1237
-     * @throws InvalidArgumentException
1238
-     * @throws InvalidDataTypeException
1239
-     * @throws InvalidInterfaceException
1240
-     * @throws ReflectionException
1241
-     */
1242
-    public static function queue_for_resending($message_ids)
1243
-    {
1244
-        self::_load_controller();
1245
-        self::$_MSG_PROCESSOR->setup_messages_from_ids_and_send($message_ids);
1246
-
1247
-        // get queue and count
1248
-        $queue_count = self::$_MSG_PROCESSOR->get_queue()->count_STS_in_queue(EEM_Message::status_resend);
1249
-
1250
-        if (
1251
-            $queue_count > 0
1252
-        ) {
1253
-            EE_Error::add_success(
1254
-                sprintf(
1255
-                    _n(
1256
-                        '%d message successfully queued for resending.',
1257
-                        '%d messages successfully queued for resending.',
1258
-                        $queue_count,
1259
-                        'event_espresso'
1260
-                    ),
1261
-                    $queue_count
1262
-                )
1263
-            );
1264
-            /**
1265
-             * @see filter usage in EE_Messages_Queue::initiate_request_by_priority
1266
-             */
1267
-        } elseif (
1268
-            apply_filters('FHEE__EE_Messages_Processor__initiate_request_by_priority__do_immediate_processing', true)
1269
-            || EE_Registry::instance()->NET_CFG->core->do_messages_on_same_request
1270
-        ) {
1271
-            $queue_count = self::$_MSG_PROCESSOR->get_queue()->count_STS_in_queue(EEM_Message::status_sent);
1272
-            if ($queue_count > 0) {
1273
-                EE_Error::add_success(
1274
-                    sprintf(
1275
-                        _n(
1276
-                            '%d message successfully sent.',
1277
-                            '%d messages successfully sent.',
1278
-                            $queue_count,
1279
-                            'event_espresso'
1280
-                        ),
1281
-                        $queue_count
1282
-                    )
1283
-                );
1284
-            } else {
1285
-                EE_Error::add_error(
1286
-                    __(
1287
-                        'No messages were queued for resending. This usually only happens when all the messages flagged for resending are not a status that can be resent.',
1288
-                        'event_espresso'
1289
-                    ),
1290
-                    __FILE__,
1291
-                    __FUNCTION__,
1292
-                    __LINE__
1293
-                );
1294
-            }
1295
-        } else {
1296
-            EE_Error::add_error(
1297
-                __(
1298
-                    'No messages were queued for resending. This usually only happens when all the messages flagged for resending are not a status that can be resent.',
1299
-                    'event_espresso'
1300
-                ),
1301
-                __FILE__,
1302
-                __FUNCTION__,
1303
-                __LINE__
1304
-            );
1305
-        }
1306
-        return (bool) $queue_count;
1307
-    }
1308
-
1309
-
1310
-    /**
1311
-     * debug
1312
-     *
1313
-     * @param string          $class
1314
-     * @param string          $func
1315
-     * @param string          $line
1316
-     * @param \EE_Transaction $transaction
1317
-     * @param array           $info
1318
-     * @param bool            $display_request
1319
-     * @throws EE_Error
1320
-     * @throws \EventEspresso\core\exceptions\InvalidSessionDataException
1321
-     */
1322
-    protected static function log(
1323
-        $class = '',
1324
-        $func = '',
1325
-        $line = '',
1326
-        EE_Transaction $transaction,
1327
-        $info = array(),
1328
-        $display_request = false
1329
-    ) {
1330
-        if (defined('EE_DEBUG') && EE_DEBUG) {
1331
-            if ($transaction instanceof EE_Transaction) {
1332
-                // don't serialize objects
1333
-                $info = EEH_Debug_Tools::strip_objects($info);
1334
-                $info['TXN_status'] = $transaction->status_ID();
1335
-                $info['TXN_reg_steps'] = $transaction->reg_steps();
1336
-                if ($transaction->ID()) {
1337
-                    $index = 'EE_Transaction: ' . $transaction->ID();
1338
-                    EEH_Debug_Tools::log($class, $func, $line, $info, $display_request, $index);
1339
-                }
1340
-            }
1341
-        }
1342
-    }
1343
-
1344
-
1345
-    /**
1346
-     *  Resets all the static properties in this class when called.
1347
-     */
1348
-    public static function reset()
1349
-    {
1350
-        self::$_EEMSG = null;
1351
-        self::$_message_resource_manager = null;
1352
-        self::$_MSG_PROCESSOR = null;
1353
-        self::$_MSG_PATHS = null;
1354
-        self::$_TMP_PACKS = array();
1355
-    }
1180
+						'event_espresso'
1181
+					),
1182
+					__FILE__,
1183
+					__FUNCTION__,
1184
+					__LINE__
1185
+				);
1186
+			}
1187
+		}
1188
+		return $sent_queue;
1189
+	}
1190
+
1191
+
1192
+	/**
1193
+	 * Generate and send immediately from the given $message_ids
1194
+	 *
1195
+	 * @param array $message_ids EE_Message entity ids.
1196
+	 * @throws EE_Error
1197
+	 * @throws InvalidArgumentException
1198
+	 * @throws InvalidDataTypeException
1199
+	 * @throws InvalidInterfaceException
1200
+	 * @throws ReflectionException
1201
+	 */
1202
+	public static function generate_and_send_now(array $message_ids)
1203
+	{
1204
+		$generated_queue = self::generate_now($message_ids);
1205
+		// now let's just trigger sending immediately from this queue.
1206
+		$messages_sent = $generated_queue instanceof EE_Messages_Queue
1207
+			? $generated_queue->execute()
1208
+			: 0;
1209
+		if ($messages_sent) {
1210
+			EE_Error::add_success(
1211
+				esc_html(
1212
+					sprintf(
1213
+						_n(
1214
+							'There was %d message successfully generated and sent.',
1215
+							'There were %d messages successfully generated and sent.',
1216
+							$messages_sent,
1217
+							'event_espresso'
1218
+						),
1219
+						$messages_sent
1220
+					)
1221
+				)
1222
+			);
1223
+			// errors would be added via the generate_now method.
1224
+		}
1225
+	}
1226
+
1227
+
1228
+	/**
1229
+	 * This will queue the incoming message ids for resending.
1230
+	 * Note, only message_ids corresponding to messages with the status of EEM_Message::sent will be queued.
1231
+	 *
1232
+	 * @since 4.9.0
1233
+	 * @param array $message_ids An array of EE_Message IDs
1234
+	 * @return bool true means messages were successfully queued for resending, false means none were queued for
1235
+	 *                           resending.
1236
+	 * @throws EE_Error
1237
+	 * @throws InvalidArgumentException
1238
+	 * @throws InvalidDataTypeException
1239
+	 * @throws InvalidInterfaceException
1240
+	 * @throws ReflectionException
1241
+	 */
1242
+	public static function queue_for_resending($message_ids)
1243
+	{
1244
+		self::_load_controller();
1245
+		self::$_MSG_PROCESSOR->setup_messages_from_ids_and_send($message_ids);
1246
+
1247
+		// get queue and count
1248
+		$queue_count = self::$_MSG_PROCESSOR->get_queue()->count_STS_in_queue(EEM_Message::status_resend);
1249
+
1250
+		if (
1251
+			$queue_count > 0
1252
+		) {
1253
+			EE_Error::add_success(
1254
+				sprintf(
1255
+					_n(
1256
+						'%d message successfully queued for resending.',
1257
+						'%d messages successfully queued for resending.',
1258
+						$queue_count,
1259
+						'event_espresso'
1260
+					),
1261
+					$queue_count
1262
+				)
1263
+			);
1264
+			/**
1265
+			 * @see filter usage in EE_Messages_Queue::initiate_request_by_priority
1266
+			 */
1267
+		} elseif (
1268
+			apply_filters('FHEE__EE_Messages_Processor__initiate_request_by_priority__do_immediate_processing', true)
1269
+			|| EE_Registry::instance()->NET_CFG->core->do_messages_on_same_request
1270
+		) {
1271
+			$queue_count = self::$_MSG_PROCESSOR->get_queue()->count_STS_in_queue(EEM_Message::status_sent);
1272
+			if ($queue_count > 0) {
1273
+				EE_Error::add_success(
1274
+					sprintf(
1275
+						_n(
1276
+							'%d message successfully sent.',
1277
+							'%d messages successfully sent.',
1278
+							$queue_count,
1279
+							'event_espresso'
1280
+						),
1281
+						$queue_count
1282
+					)
1283
+				);
1284
+			} else {
1285
+				EE_Error::add_error(
1286
+					__(
1287
+						'No messages were queued for resending. This usually only happens when all the messages flagged for resending are not a status that can be resent.',
1288
+						'event_espresso'
1289
+					),
1290
+					__FILE__,
1291
+					__FUNCTION__,
1292
+					__LINE__
1293
+				);
1294
+			}
1295
+		} else {
1296
+			EE_Error::add_error(
1297
+				__(
1298
+					'No messages were queued for resending. This usually only happens when all the messages flagged for resending are not a status that can be resent.',
1299
+					'event_espresso'
1300
+				),
1301
+				__FILE__,
1302
+				__FUNCTION__,
1303
+				__LINE__
1304
+			);
1305
+		}
1306
+		return (bool) $queue_count;
1307
+	}
1308
+
1309
+
1310
+	/**
1311
+	 * debug
1312
+	 *
1313
+	 * @param string          $class
1314
+	 * @param string          $func
1315
+	 * @param string          $line
1316
+	 * @param \EE_Transaction $transaction
1317
+	 * @param array           $info
1318
+	 * @param bool            $display_request
1319
+	 * @throws EE_Error
1320
+	 * @throws \EventEspresso\core\exceptions\InvalidSessionDataException
1321
+	 */
1322
+	protected static function log(
1323
+		$class = '',
1324
+		$func = '',
1325
+		$line = '',
1326
+		EE_Transaction $transaction,
1327
+		$info = array(),
1328
+		$display_request = false
1329
+	) {
1330
+		if (defined('EE_DEBUG') && EE_DEBUG) {
1331
+			if ($transaction instanceof EE_Transaction) {
1332
+				// don't serialize objects
1333
+				$info = EEH_Debug_Tools::strip_objects($info);
1334
+				$info['TXN_status'] = $transaction->status_ID();
1335
+				$info['TXN_reg_steps'] = $transaction->reg_steps();
1336
+				if ($transaction->ID()) {
1337
+					$index = 'EE_Transaction: ' . $transaction->ID();
1338
+					EEH_Debug_Tools::log($class, $func, $line, $info, $display_request, $index);
1339
+				}
1340
+			}
1341
+		}
1342
+	}
1343
+
1344
+
1345
+	/**
1346
+	 *  Resets all the static properties in this class when called.
1347
+	 */
1348
+	public static function reset()
1349
+	{
1350
+		self::$_EEMSG = null;
1351
+		self::$_message_resource_manager = null;
1352
+		self::$_MSG_PROCESSOR = null;
1353
+		self::$_MSG_PATHS = null;
1354
+		self::$_TMP_PACKS = array();
1355
+	}
1356 1356
 }
Please login to merge, or discard this patch.
Spacing   +25 added lines, -25 removed lines patch added patch discarded remove patch
@@ -202,7 +202,7 @@  discard block
 block discarded – undo
202 202
                 'event_espresso'
203 203
             );
204 204
             // add specific message for developers if WP_DEBUG in on
205
-            $error_msg .= '||' . $e->getMessage();
205
+            $error_msg .= '||'.$e->getMessage();
206 206
             EE_Error::add_error($error_msg, __FILE__, __FUNCTION__, __LINE__);
207 207
         }
208 208
     }
@@ -289,7 +289,7 @@  discard block
 block discarded – undo
289 289
                 'event_espresso'
290 290
             );
291 291
             // add specific message for developers if WP_DEBUG in on
292
-            $error_msg .= '||' . $e->getMessage();
292
+            $error_msg .= '||'.$e->getMessage();
293 293
             EE_Error::add_error($error_msg, __FILE__, __FUNCTION__, __LINE__);
294 294
         }
295 295
     }
@@ -320,7 +320,7 @@  discard block
 block discarded – undo
320 320
         $transient_key = EE_Registry::instance()->REQ->get('key');
321 321
 
322 322
         // now let's verify transient, if not valid exit immediately
323
-        if (! get_transient($transient_key)) {
323
+        if ( ! get_transient($transient_key)) {
324 324
             /**
325 325
              * trigger error so this gets in the error logs.  This is important because it happens on a non-user
326 326
              * request.
@@ -332,7 +332,7 @@  discard block
 block discarded – undo
332 332
         delete_transient($transient_key);
333 333
 
334 334
         if (apply_filters('FHEE__EED_Messages__run_cron__use_wp_cron', true)) {
335
-            $method = 'batch_' . $cron_type . '_from_queue';
335
+            $method = 'batch_'.$cron_type.'_from_queue';
336 336
             if (method_exists(self::$_MSG_PROCESSOR, $method)) {
337 337
                 self::$_MSG_PROCESSOR->$method();
338 338
             } else {
@@ -399,7 +399,7 @@  discard block
 block discarded – undo
399 399
         $template_pack_collection->rewind();
400 400
         $template_packs = array();
401 401
         while ($template_pack_collection->valid()) {
402
-            $template_packs[ $template_pack_collection->current()->dbref ] = $template_pack_collection->current();
402
+            $template_packs[$template_pack_collection->current()->dbref] = $template_pack_collection->current();
403 403
             $template_pack_collection->next();
404 404
         }
405 405
         return $template_packs;
@@ -439,15 +439,15 @@  discard block
 block discarded – undo
439 439
         self::$_MSG_PATHS = apply_filters(
440 440
             'FHEE__EED_Messages___set_messages_paths___MSG_PATHS',
441 441
             [
442
-                EE_LIBRARIES . 'messages/message_type',
443
-                EE_LIBRARIES . 'messages/messenger',
444
-                EE_LIBRARIES . 'messages/defaults',
445
-                EE_LIBRARIES . 'messages/defaults/email',
446
-                EE_LIBRARIES . 'messages/data_class',
447
-                EE_LIBRARIES . 'messages/validators',
448
-                EE_LIBRARIES . 'messages/validators/email',
449
-                EE_LIBRARIES . 'messages/validators/html',
450
-                EE_LIBRARIES . 'shortcodes',
442
+                EE_LIBRARIES.'messages/message_type',
443
+                EE_LIBRARIES.'messages/messenger',
444
+                EE_LIBRARIES.'messages/defaults',
445
+                EE_LIBRARIES.'messages/defaults/email',
446
+                EE_LIBRARIES.'messages/data_class',
447
+                EE_LIBRARIES.'messages/validators',
448
+                EE_LIBRARIES.'messages/validators/email',
449
+                EE_LIBRARIES.'messages/validators/html',
450
+                EE_LIBRARIES.'shortcodes',
451 451
             ]
452 452
         );
453 453
     }
@@ -466,7 +466,7 @@  discard block
 block discarded – undo
466 466
      */
467 467
     protected static function _load_controller()
468 468
     {
469
-        if (! self::$_MSG_PROCESSOR instanceof EE_Messages_Processor) {
469
+        if ( ! self::$_MSG_PROCESSOR instanceof EE_Messages_Processor) {
470 470
             EE_Registry::instance()->load_core('Request_Handler');
471 471
             self::set_autoloaders();
472 472
             self::$_EEMSG = EE_Registry::instance()->load_lib('messages');
@@ -507,7 +507,7 @@  discard block
 block discarded – undo
507 507
     public static function payment(EE_Transaction $transaction, EE_Payment $payment = null)
508 508
     {
509 509
         // if there's no payment object, then we cannot do a payment type message!
510
-        if (! $payment instanceof EE_Payment) {
510
+        if ( ! $payment instanceof EE_Payment) {
511 511
             return;
512 512
         }
513 513
         self::_load_controller();
@@ -554,7 +554,7 @@  discard block
 block discarded – undo
554 554
     public static function maybe_registration(EE_Registration $registration, $extra_details = array())
555 555
     {
556 556
 
557
-        if (! self::_verify_registration_notification_send($registration, $extra_details)) {
557
+        if ( ! self::_verify_registration_notification_send($registration, $extra_details)) {
558 558
             // no messages please
559 559
             return;
560 560
         }
@@ -621,7 +621,7 @@  discard block
 block discarded – undo
621 621
         EE_Registration $registration,
622 622
         $extra_details = array()
623 623
     ) {
624
-        if (! $registration->is_primary_registrant()) {
624
+        if ( ! $registration->is_primary_registrant()) {
625 625
             return false;
626 626
         }
627 627
         // first we check if we're in admin and not doing front ajax
@@ -637,7 +637,7 @@  discard block
 block discarded – undo
637 637
         } else {
638 638
             // frontend request (either regular or via AJAX)
639 639
             // TXN is NOT finalized ?
640
-            if (! isset($extra_details['finalized']) || $extra_details['finalized'] === false) {
640
+            if ( ! isset($extra_details['finalized']) || $extra_details['finalized'] === false) {
641 641
                 return false;
642 642
             }
643 643
             // return visit but nothing changed ???
@@ -768,7 +768,7 @@  discard block
 block discarded – undo
768 768
         self::_load_controller();
769 769
 
770 770
         $msgID = EE_Registry::instance()->REQ->get('MSG_ID');
771
-        if (! $msgID) {
771
+        if ( ! $msgID) {
772 772
             EE_Error::add_error(
773 773
                 __(
774 774
                     'Something went wrong because there is no "MSG_ID" value in the request',
@@ -961,14 +961,14 @@  discard block
 block discarded – undo
961 961
             // get the message template group.
962 962
             $msg_template_group = EEM_Message_Template_Group::instance()->get_one(array($template_query_params));
963 963
             // if we don't have an EE_Message_Template_Group then return
964
-            if (! $msg_template_group instanceof EE_Message_Template_Group) {
964
+            if ( ! $msg_template_group instanceof EE_Message_Template_Group) {
965 965
                 // remove EVT_ID from query params so that global templates get picked up
966 966
                 unset($template_query_params['Event.EVT_ID']);
967 967
                 // get global template as the fallback
968 968
                 $msg_template_group = EEM_Message_Template_Group::instance()->get_one(array($template_query_params));
969 969
             }
970 970
             // if we don't have an EE_Message_Template_Group then return
971
-            if (! $msg_template_group instanceof EE_Message_Template_Group) {
971
+            if ( ! $msg_template_group instanceof EE_Message_Template_Group) {
972 972
                 return '';
973 973
             }
974 974
             // generate the URL
@@ -1099,7 +1099,7 @@  discard block
 block discarded – undo
1099 1099
             $generated_queue = self::$_MSG_PROCESSOR->batch_generate_from_queue($messages);
1100 1100
         }
1101 1101
 
1102
-        if (! $generated_queue instanceof EE_Messages_Queue) {
1102
+        if ( ! $generated_queue instanceof EE_Messages_Queue) {
1103 1103
             EE_Error::add_error(
1104 1104
                 __(
1105 1105
                     'The messages were not generated. This could mean there is already a batch being generated on a separate request, or because the selected messages are not ready for generation. Please wait a minute or two and try again.',
@@ -1146,7 +1146,7 @@  discard block
 block discarded – undo
1146 1146
             $sent_queue = self::$_MSG_PROCESSOR->batch_send_from_queue($messages);
1147 1147
         }
1148 1148
 
1149
-        if (! $sent_queue instanceof EE_Messages_Queue) {
1149
+        if ( ! $sent_queue instanceof EE_Messages_Queue) {
1150 1150
             EE_Error::add_error(
1151 1151
                 __(
1152 1152
                     'The messages were not sent. This could mean there is already a batch being sent on a separate request, or because the selected messages are not sendable. Please wait a minute or two and try again.',
@@ -1334,7 +1334,7 @@  discard block
 block discarded – undo
1334 1334
                 $info['TXN_status'] = $transaction->status_ID();
1335 1335
                 $info['TXN_reg_steps'] = $transaction->reg_steps();
1336 1336
                 if ($transaction->ID()) {
1337
-                    $index = 'EE_Transaction: ' . $transaction->ID();
1337
+                    $index = 'EE_Transaction: '.$transaction->ID();
1338 1338
                     EEH_Debug_Tools::log($class, $func, $line, $info, $display_request, $index);
1339 1339
                 }
1340 1340
             }
Please login to merge, or discard this patch.
core/services/notices/NoticesContainerInterface.php 1 patch
Indentation   +81 added lines, -81 removed lines patch added patch discarded remove patch
@@ -16,129 +16,129 @@
 block discarded – undo
16 16
 interface NoticesContainerInterface
17 17
 {
18 18
 
19
-    /**
20
-     * @param string $notice
21
-     * @param bool   $dismissible
22
-     * @param string $file
23
-     * @param string $func
24
-     * @param string $line
25
-     */
26
-    public function addInformation($notice, $dismissible = true, $file = '', $func = '', $line = '');
19
+	/**
20
+	 * @param string $notice
21
+	 * @param bool   $dismissible
22
+	 * @param string $file
23
+	 * @param string $func
24
+	 * @param string $line
25
+	 */
26
+	public function addInformation($notice, $dismissible = true, $file = '', $func = '', $line = '');
27 27
 
28 28
 
29
-    /**
30
-     * @param string $notice
31
-     * @param bool   $dismissible
32
-     * @param string $file
33
-     * @param string $func
34
-     * @param string $line
35
-     * @return
36
-     */
37
-    public function addAttention($notice, $dismissible = true, $file = '', $func = '', $line = '');
29
+	/**
30
+	 * @param string $notice
31
+	 * @param bool   $dismissible
32
+	 * @param string $file
33
+	 * @param string $func
34
+	 * @param string $line
35
+	 * @return
36
+	 */
37
+	public function addAttention($notice, $dismissible = true, $file = '', $func = '', $line = '');
38 38
 
39 39
 
40 40
 
41
-    /**
42
-     * @param string $notice
43
-     * @param bool   $dismissible
44
-     * @param string $file
45
-     * @param string $func
46
-     * @param string $line
47
-     */
48
-    public function addError($notice, $dismissible = true, $file, $func, $line);
41
+	/**
42
+	 * @param string $notice
43
+	 * @param bool   $dismissible
44
+	 * @param string $file
45
+	 * @param string $func
46
+	 * @param string $line
47
+	 */
48
+	public function addError($notice, $dismissible = true, $file, $func, $line);
49 49
 
50 50
 
51 51
 
52
-    /**
53
-     * @param string $notice
54
-     * @param bool   $dismissible
55
-     * @param string $file
56
-     * @param string $func
57
-     * @param string $line
58
-     */
59
-    public function addSuccess($notice, $dismissible = true, $file = '', $func = '', $line = '');
52
+	/**
53
+	 * @param string $notice
54
+	 * @param bool   $dismissible
55
+	 * @param string $file
56
+	 * @param string $func
57
+	 * @param string $line
58
+	 */
59
+	public function addSuccess($notice, $dismissible = true, $file = '', $func = '', $line = '');
60 60
 
61 61
 
62 62
 
63
-    /**
64
-     * @return boolean
65
-     */
66
-    public function hasInformation();
63
+	/**
64
+	 * @return boolean
65
+	 */
66
+	public function hasInformation();
67 67
 
68 68
 
69 69
 
70
-    /**
71
-     * @return boolean
72
-     */
73
-    public function hasAttention();
70
+	/**
71
+	 * @return boolean
72
+	 */
73
+	public function hasAttention();
74 74
 
75 75
 
76 76
 
77
-    /**
78
-     * @return boolean
79
-     */
80
-    public function hasError();
77
+	/**
78
+	 * @return boolean
79
+	 */
80
+	public function hasError();
81 81
 
82 82
 
83 83
 
84
-    /**
85
-     * @return boolean
86
-     */
87
-    public function hasSuccess();
84
+	/**
85
+	 * @return boolean
86
+	 */
87
+	public function hasSuccess();
88 88
 
89 89
 
90 90
 
91
-    /**
92
-     * @return int
93
-     */
94
-    public function countInformation();
91
+	/**
92
+	 * @return int
93
+	 */
94
+	public function countInformation();
95 95
 
96 96
 
97 97
 
98
-    /**
99
-     * @return int
100
-     */
101
-    public function countAttention();
98
+	/**
99
+	 * @return int
100
+	 */
101
+	public function countAttention();
102 102
 
103 103
 
104 104
 
105
-    /**
106
-     * @return int
107
-     */
108
-    public function countError();
105
+	/**
106
+	 * @return int
107
+	 */
108
+	public function countError();
109 109
 
110 110
 
111 111
 
112
-    /**
113
-     * @return int
114
-     */
115
-    public function countSuccess();
112
+	/**
113
+	 * @return int
114
+	 */
115
+	public function countSuccess();
116 116
 
117 117
 
118 118
 
119
-    /**
120
-     * @return NoticeInterface[]
121
-     */
122
-    public function getInformation();
119
+	/**
120
+	 * @return NoticeInterface[]
121
+	 */
122
+	public function getInformation();
123 123
 
124 124
 
125 125
 
126
-    /**
127
-     * @return NoticeInterface[]
128
-     */
129
-    public function getAttention();
126
+	/**
127
+	 * @return NoticeInterface[]
128
+	 */
129
+	public function getAttention();
130 130
 
131 131
 
132 132
 
133
-    /**
134
-     * @return NoticeInterface[]
135
-     */
136
-    public function getError();
133
+	/**
134
+	 * @return NoticeInterface[]
135
+	 */
136
+	public function getError();
137 137
 
138 138
 
139 139
 
140
-    /**
141
-     * @return NoticeInterface[]
142
-     */
143
-    public function getSuccess();
140
+	/**
141
+	 * @return NoticeInterface[]
142
+	 */
143
+	public function getSuccess();
144 144
 }
Please login to merge, or discard this patch.
core/services/notices/ConvertNoticesToAdminNotices.php 2 patches
Spacing   +1 added lines, -1 removed lines patch added patch discarded remove patch
@@ -36,7 +36,7 @@
 block discarded – undo
36 36
             $error_string = esc_html__('The following errors occurred:', 'event_espresso');
37 37
             foreach ($notices->getError() as $notice) {
38 38
                 if ($this->getThrowExceptions()) {
39
-                    $error_string .= '<br />' . $notice->message();
39
+                    $error_string .= '<br />'.$notice->message();
40 40
                 } else {
41 41
                     new AdminNotice($notice);
42 42
                 }
Please login to merge, or discard this patch.
Indentation   +38 added lines, -38 removed lines patch added patch discarded remove patch
@@ -14,42 +14,42 @@
 block discarded – undo
14 14
 class ConvertNoticesToAdminNotices extends NoticeConverter
15 15
 {
16 16
 
17
-    /**
18
-     * Converts Notice objects into AdminNotice notifications
19
-     *
20
-     * @param NoticesContainerInterface $notices
21
-     * @throws DomainException
22
-     */
23
-    public function process(NoticesContainerInterface $notices)
24
-    {
25
-        if ($notices->hasAttention()) {
26
-            foreach ($notices->getAttention() as $notice) {
27
-                new AdminNotice($notice);
28
-            }
29
-        }
30
-        if ($notices->hasError()) {
31
-            $error_string = esc_html__('The following errors occurred:', 'event_espresso');
32
-            foreach ($notices->getError() as $notice) {
33
-                if ($this->getThrowExceptions()) {
34
-                    $error_string .= '<br />' . $notice->message();
35
-                } else {
36
-                    new AdminNotice($notice);
37
-                }
38
-            }
39
-            if ($this->getThrowExceptions()) {
40
-                throw new DomainException($error_string);
41
-            }
42
-        }
43
-        if ($notices->hasSuccess()) {
44
-            foreach ($notices->getSuccess() as $notice) {
45
-                new AdminNotice($notice);
46
-            }
47
-        }
48
-        if ($notices->hasInformation()) {
49
-            foreach ($notices->getInformation() as $notice) {
50
-                new AdminNotice($notice);
51
-            }
52
-        }
53
-        $this->clearNotices();
54
-    }
17
+	/**
18
+	 * Converts Notice objects into AdminNotice notifications
19
+	 *
20
+	 * @param NoticesContainerInterface $notices
21
+	 * @throws DomainException
22
+	 */
23
+	public function process(NoticesContainerInterface $notices)
24
+	{
25
+		if ($notices->hasAttention()) {
26
+			foreach ($notices->getAttention() as $notice) {
27
+				new AdminNotice($notice);
28
+			}
29
+		}
30
+		if ($notices->hasError()) {
31
+			$error_string = esc_html__('The following errors occurred:', 'event_espresso');
32
+			foreach ($notices->getError() as $notice) {
33
+				if ($this->getThrowExceptions()) {
34
+					$error_string .= '<br />' . $notice->message();
35
+				} else {
36
+					new AdminNotice($notice);
37
+				}
38
+			}
39
+			if ($this->getThrowExceptions()) {
40
+				throw new DomainException($error_string);
41
+			}
42
+		}
43
+		if ($notices->hasSuccess()) {
44
+			foreach ($notices->getSuccess() as $notice) {
45
+				new AdminNotice($notice);
46
+			}
47
+		}
48
+		if ($notices->hasInformation()) {
49
+			foreach ($notices->getInformation() as $notice) {
50
+				new AdminNotice($notice);
51
+			}
52
+		}
53
+		$this->clearNotices();
54
+	}
55 55
 }
Please login to merge, or discard this patch.
modules/events_archive/EED_Events_Archive.module.php 3 patches
Doc Comments   +2 added lines, -2 removed lines patch added patch discarded remove patch
@@ -274,7 +274,7 @@  discard block
 block discarded – undo
274 274
 
275 275
     /**
276 276
      * @access public
277
-     * @return string
277
+     * @return boolean
278 278
      */
279 279
     public static function is_iframe()
280 280
     {
@@ -892,7 +892,7 @@  discard block
 block discarded – undo
892 892
      *    display_description
893 893
      *
894 894
      * @access    public
895
-     * @param $value
895
+     * @param integer $value
896 896
      * @return    bool
897 897
      */
898 898
     public static function display_description($value)
Please login to merge, or discard this patch.
Indentation   +1113 added lines, -1113 removed lines patch added patch discarded remove patch
@@ -16,1108 +16,1108 @@  discard block
 block discarded – undo
16 16
 class EED_Events_Archive extends EED_Module
17 17
 {
18 18
 
19
-    const EVENT_DETAILS_PRIORITY = 100;
20
-
21
-    const EVENT_DATETIMES_PRIORITY = 110;
22
-
23
-    const EVENT_TICKETS_PRIORITY = 120;
24
-
25
-    const EVENT_VENUES_PRIORITY = 130;
26
-
27
-
28
-    public static $espresso_event_list_ID = 0;
29
-
30
-    public static $espresso_grid_event_lists = array();
31
-
32
-    /**
33
-     * @type bool $using_get_the_excerpt
34
-     */
35
-    protected static $using_get_the_excerpt = false;
36
-
37
-    /**
38
-     * Used to flag when the event list is being called from an external iframe.
39
-     *
40
-     * @var bool $iframe
41
-     */
42
-    protected static $iframe = false;
43
-
44
-    /**
45
-     * @var EventListIframeEmbedButton $_iframe_embed_button
46
-     */
47
-    private static $_iframe_embed_button;
48
-
49
-    /**
50
-     * @type EE_Template_Part_Manager $template_parts
51
-     */
52
-    protected $template_parts;
53
-
54
-
55
-    /**
56
-     * @return EED_Events_Archive
57
-     */
58
-    public static function instance()
59
-    {
60
-        return parent::get_instance(__CLASS__);
61
-    }
62
-
63
-
64
-    /**
65
-     * set_hooks - for hooking into EE Core, other modules, etc
66
-     *
67
-     * @return void
68
-     * @throws InvalidArgumentException
69
-     * @throws InvalidDataTypeException
70
-     * @throws InvalidInterfaceException
71
-     */
72
-    public static function set_hooks()
73
-    {
74
-        /** @var EventEspresso\core\domain\entities\custom_post_types\CustomPostTypeDefinitions $custom_post_type_definitions */
75
-        $custom_post_type_definitions = LoaderFactory::getLoader()->getShared(
76
-            'EventEspresso\core\domain\entities\custom_post_types\CustomPostTypeDefinitions'
77
-        );
78
-        $custom_post_types = $custom_post_type_definitions->getDefinitions();
79
-        EE_Config::register_route(
80
-            $custom_post_types['espresso_events']['plural_slug'],
81
-            'Events_Archive',
82
-            'run'
83
-        );
84
-        EE_Config::register_route(
85
-            'event_list',
86
-            'Events_Archive',
87
-            'event_list'
88
-        );
89
-        EE_Config::register_route(
90
-            'iframe',
91
-            'Events_Archive',
92
-            'event_list_iframe',
93
-            'event_list'
94
-        );
95
-        add_action('wp_loaded', array('EED_Events_Archive', 'set_definitions'), 2);
96
-    }
97
-
98
-
99
-    /**
100
-     *    set_hooks_admin - for hooking into EE Admin Core, other modules, etc
101
-     *
102
-     * @access    public
103
-     * @return    void
104
-     */
105
-    public static function set_hooks_admin()
106
-    {
107
-        add_action('wp_loaded', array('EED_Events_Archive', 'set_definitions'), 2);
108
-        // hook into the end of the \EE_Admin_Page::_load_page_dependencies()
109
-        // to load assets for "espresso_events" page on the "default" route (action)
110
-        add_action(
111
-            'FHEE__EE_Admin_Page___load_page_dependencies__after_load__espresso_events__default',
112
-            array('EED_Events_Archive', 'event_list_iframe_embed_button'),
113
-            10
114
-        );
115
-    }
116
-
117
-
118
-    /**
119
-     *    set_definitions
120
-     *
121
-     * @access    public
122
-     * @return    void
123
-     */
124
-    public static function set_definitions()
125
-    {
126
-        define('EVENTS_ARCHIVE_ASSETS_URL', plugin_dir_url(__FILE__) . 'assets/');
127
-        define('EVENTS_ARCHIVE_TEMPLATES_PATH', str_replace('\\', '/', plugin_dir_path(__FILE__)) . 'templates/');
128
-    }
129
-
130
-
131
-    /**
132
-     * set up EE_Events_Archive_Config
133
-     */
134
-    protected function set_config()
135
-    {
136
-        $this->set_config_section('template_settings');
137
-        $this->set_config_class('EE_Events_Archive_Config');
138
-        $this->set_config_name('EED_Events_Archive');
139
-    }
140
-
141
-
142
-    /**
143
-     * @return EventListIframeEmbedButton
144
-     */
145
-    public static function get_iframe_embed_button()
146
-    {
147
-        if (! self::$_iframe_embed_button instanceof EventListIframeEmbedButton) {
148
-            self::$_iframe_embed_button = new EventListIframeEmbedButton();
149
-        }
150
-        return self::$_iframe_embed_button;
151
-    }
152
-
153
-
154
-    /**
155
-     * event_list_iframe_embed_button
156
-     *
157
-     * @return    void
158
-     * @throws EE_Error
159
-     */
160
-    public static function event_list_iframe_embed_button()
161
-    {
162
-        $iframe_embed_button = EED_Events_Archive::get_iframe_embed_button();
163
-        $iframe_embed_button->addEmbedButton();
164
-    }
165
-
166
-
167
-    /**
168
-     *    initialize_template_parts
169
-     *
170
-     * @access    public
171
-     * @param EE_Events_Archive_Config $config
172
-     * @return EE_Template_Part_Manager
173
-     * @throws EE_Error
174
-     */
175
-    public function initialize_template_parts(EE_Events_Archive_Config $config = null)
176
-    {
177
-        $config = $config instanceof EE_Events_Archive_Config ? $config : $this->config();
178
-        EEH_Autoloader::register_template_part_autoloaders();
179
-        $template_parts = new EE_Template_Part_Manager();
180
-        $template_parts->add_template_part(
181
-            'tickets',
182
-            __('Ticket Selector', 'event_espresso'),
183
-            'content-espresso_events-tickets.php',
184
-            $config->display_order_tickets
185
-        );
186
-        $template_parts->add_template_part(
187
-            'datetimes',
188
-            __('Dates and Times', 'event_espresso'),
189
-            'content-espresso_events-datetimes.php',
190
-            $config->display_order_datetimes
191
-        );
192
-        $template_parts->add_template_part(
193
-            'event',
194
-            __('Event Description', 'event_espresso'),
195
-            'content-espresso_events-details.php',
196
-            $config->display_order_event
197
-        );
198
-        $template_parts->add_template_part(
199
-            'venue',
200
-            __('Venue Information', 'event_espresso'),
201
-            'content-espresso_events-venues.php',
202
-            $config->display_order_venue
203
-        );
204
-        do_action('AHEE__EED_Event_Archive__initialize_template_parts', $template_parts);
205
-        return $template_parts;
206
-    }
207
-
208
-
209
-    /**
210
-     *    run - initial module setup - this gets called by the EE_Front_Controller if the module route is found in the
211
-     *    incoming request
212
-     *
213
-     * @access    public
214
-     * @param WP $WP
215
-     * @return    void
216
-     */
217
-    public function run($WP)
218
-    {
219
-        do_action('AHEE__EED_Events_Archive__before_run');
220
-        // ensure valid EE_Events_Archive_Config() object exists
221
-        $this->set_config();
222
-        /** @type EE_Events_Archive_Config $config */
223
-        $config = $this->config();
224
-        // load other required components
225
-        $this->load_event_list_assets();
226
-        // filter the WP posts_join, posts_where, and posts_orderby SQL clauses
227
-        // add query filters
228
-        EEH_Event_Query::add_query_filters();
229
-        // set params that will get used by the filters
230
-        EEH_Event_Query::set_query_params(
231
-            '',    // month
232
-            '',    // category
233
-            $config->display_expired_events,    // show_expired
234
-            'start_date',    // orderby
235
-            'ASC'    // sort
236
-        );
237
-        // check what template is loaded
238
-        add_filter('template_include', array($this, 'template_include'), 999, 1);
239
-    }
240
-
241
-
242
-    /**
243
-     * most likely called by the ESPRESSO_EVENTS shortcode which uses this module to do some of it's lifting
244
-     *
245
-     * @return    void
246
-     */
247
-    public function event_list()
248
-    {
249
-        // ensure valid EE_Events_Archive_Config() object exists
250
-        $this->set_config();
251
-        // load other required components
252
-        $this->load_event_list_assets();
253
-    }
254
-
255
-
256
-    /**
257
-     * @access    public
258
-     * @return    void
259
-     * @throws EE_Error
260
-     * @throws DomainException
261
-     */
262
-    public function event_list_iframe()
263
-    {
264
-        EED_Events_Archive::$iframe = true;
265
-        $event_list_iframe = new EventsArchiveIframe($this);
266
-        $event_list_iframe->display();
267
-    }
268
-
269
-
270
-    /**
271
-     * @access public
272
-     * @return string
273
-     */
274
-    public static function is_iframe()
275
-    {
276
-        return EED_Events_Archive::$iframe;
277
-    }
278
-
279
-
280
-    /**
281
-     * @access public
282
-     * @return string
283
-     */
284
-    public static function link_target()
285
-    {
286
-        return EED_Events_Archive::$iframe ? ' target="_blank"' : '';
287
-    }
288
-
289
-
290
-    /**
291
-     *    template_include
292
-     *
293
-     * @access    public
294
-     * @param string $template
295
-     * @return    string
296
-     */
297
-    public function template_include($template = '')
298
-    {
299
-        // don't add content filter for dedicated EE child themes or private posts
300
-        if (! EEH_Template::is_espresso_theme()) {
301
-            /** @type EE_Events_Archive_Config $config */
302
-            $config = $this->config();
303
-            // add status banner ?
304
-            if ($config->display_status_banner) {
305
-                add_filter('the_title', array('EED_Events_Archive', 'the_title'), 100, 2);
306
-            }
307
-            // if NOT a custom template
308
-            if (
309
-                apply_filters('FHEE__EED_Event_Archive__template_include__allow_custom_selected_template', false)
310
-                || EE_Registry::instance()
311
-                              ->load_core('Front_Controller')
312
-                              ->get_selected_template() !== 'archive-espresso_events.php'
313
-            ) {
314
-                // don't display entry meta because the existing theme will take care of that
315
-                add_filter('FHEE__EED_Events_Archive__template_include__events_list_active', '__return_true');
316
-                // load functions.php file for the theme (loaded by WP if using child theme)
317
-                EEH_Template::load_espresso_theme_functions();
318
-                // because we don't know if the theme is using the_excerpt()
319
-                add_filter(
320
-                    'the_excerpt',
321
-                    array('EED_Events_Archive', 'event_details'),
322
-                    EED_Events_Archive::EVENT_DETAILS_PRIORITY
323
-                );
324
-                // or the_content
325
-                add_filter(
326
-                    'the_content',
327
-                    array('EED_Events_Archive', 'event_details'),
328
-                    EED_Events_Archive::EVENT_DETAILS_PRIORITY
329
-                );
330
-                // and just in case they are running get_the_excerpt() which DESTROYS things
331
-                add_filter('get_the_excerpt', array('EED_Events_Archive', 'get_the_excerpt'), 1, 1);
332
-                // don't display entry meta because the existing theme will take care of that
333
-                add_filter('FHEE__content_espresso_events_details_template__display_entry_meta', '__return_false');
334
-            }
335
-        }
336
-        return $template;
337
-    }
338
-
339
-
340
-    /**
341
-     *    get_the_excerpt - kinda hacky, but if a theme is using get_the_excerpt(), then we need to remove our filters
342
-     *    on the_content()
343
-     *
344
-     * @access    public
345
-     * @param        string $excerpt
346
-     * @return        string
347
-     */
348
-    public static function get_the_excerpt($excerpt = '')
349
-    {
350
-        if (post_password_required()) {
351
-            return $excerpt;
352
-        }
353
-        if (apply_filters('FHEE__EED_Events_Archive__get_the_excerpt__theme_uses_get_the_excerpt', false)) {
354
-            remove_filter(
355
-                'the_excerpt',
356
-                array('EED_Events_Archive', 'event_details'),
357
-                EED_Events_Archive::EVENT_DETAILS_PRIORITY
358
-            );
359
-            remove_filter(
360
-                'the_content',
361
-                array('EED_Events_Archive', 'event_details'),
362
-                EED_Events_Archive::EVENT_DETAILS_PRIORITY
363
-            );
364
-            $excerpt = EED_Events_Archive::event_details($excerpt);
365
-        } else {
366
-            EED_Events_Archive::$using_get_the_excerpt = true;
367
-            add_filter('wp_trim_excerpt', array('EED_Events_Archive', 'end_get_the_excerpt'), 999, 1);
368
-        }
369
-        return $excerpt;
370
-    }
371
-
372
-
373
-    /**
374
-     * end_get_the_excerpt
375
-     *
376
-     * @access public
377
-     * @param  string $text
378
-     * @return string
379
-     */
380
-    public static function end_get_the_excerpt($text = '')
381
-    {
382
-        EED_Events_Archive::$using_get_the_excerpt = false;
383
-        return $text;
384
-    }
385
-
386
-
387
-    /**
388
-     *    the_title
389
-     *
390
-     * @access        public
391
-     * @param        string $title
392
-     * @param        string $id
393
-     * @return        string
394
-     */
395
-    public static function the_title($title = '', $id = '')
396
-    {
397
-        global $post;
398
-        if ($post instanceof WP_Post) {
399
-            return in_the_loop() && $post->ID == $id ? espresso_event_status_banner($post->ID) . $title : $title;
400
-        }
401
-        return $title;
402
-    }
403
-
404
-
405
-    /**
406
-     *    event_details
407
-     *
408
-     * @access    public
409
-     * @param        string $content
410
-     * @return        string
411
-     */
412
-    public static function event_details($content)
413
-    {
414
-        global $post;
415
-        static $current_post_ID = 0;
416
-        if (
417
-            $current_post_ID !== $post->ID
418
-            && $post->post_type === 'espresso_events'
419
-            && ! EED_Events_Archive::$using_get_the_excerpt
420
-            && ! post_password_required()
421
-            && (
422
-                apply_filters('FHEE__EES_Espresso_Events__process_shortcode__true', false)
423
-                || ! apply_filters('FHEE__content_espresso_events__template_loaded', false)
424
-            )
425
-        ) {
426
-            // Set current post ID to prevent showing content twice, but only if headers have definitely been sent.
427
-            // Reason being is that some plugins, like Yoast, need to run through a copy of the loop early
428
-            // BEFORE headers are sent in order to examine the post content and generate content for the HTML header.
429
-            // We want to allow those plugins to still do their thing and have access to our content, but depending on
430
-            // how your event content is being displayed (shortcode, CPT route, etc), this filter can get applied twice,
431
-            // so the following allows this filter to be applied multiple times, but only once for real
432
-            $current_post_ID = did_action('loop_start') ? $post->ID : 0;
433
-            if (EE_Registry::instance()->CFG->template_settings->EED_Events_Archive->use_sortable_display_order) {
434
-                $content = EED_Events_Archive::use_sortable_display_order();
435
-            } else {
436
-                $content = EED_Events_Archive::use_filterable_display_order();
437
-            }
438
-        }
439
-        return $content;
440
-    }
441
-
442
-
443
-    /**
444
-     *    use_sortable_display_order
445
-     *
446
-     * @access    protected
447
-     * @return string
448
-     */
449
-    protected static function use_sortable_display_order()
450
-    {
451
-        // no further password checks required atm
452
-        add_filter('FHEE__EED_Events_Archive__event_details__no_post_password_required', '__return_true');
453
-        // we need to first remove this callback from being applied to the_content() or the_excerpt()
454
-        // (otherwise it will recurse and blow up the interweb)
455
-        remove_filter(
456
-            'the_excerpt',
457
-            array('EED_Events_Archive', 'event_details'),
458
-            EED_Events_Archive::EVENT_DETAILS_PRIORITY
459
-        );
460
-        remove_filter(
461
-            'the_content',
462
-            array('EED_Events_Archive', 'event_details'),
463
-            EED_Events_Archive::EVENT_DETAILS_PRIORITY
464
-        );
465
-        remove_filter('get_the_excerpt', array('EED_Events_Archive', 'get_the_excerpt'), 1);
466
-        // now add additional content depending on whether event is using the_excerpt() or the_content()
467
-        EED_Events_Archive::instance()->template_parts = EED_Events_Archive::instance()->initialize_template_parts();
468
-        $content = EEH_Template::locate_template('content-espresso_events-details.php');
469
-        $content = EED_Events_Archive::instance()->template_parts->apply_template_part_filters($content);
470
-        // re-add our main filters (or else the next event won't have them)
471
-        add_filter(
472
-            'the_excerpt',
473
-            array('EED_Events_Archive', 'event_details'),
474
-            EED_Events_Archive::EVENT_DETAILS_PRIORITY
475
-        );
476
-        add_filter(
477
-            'the_content',
478
-            array('EED_Events_Archive', 'event_details'),
479
-            EED_Events_Archive::EVENT_DETAILS_PRIORITY
480
-        );
481
-        add_filter('get_the_excerpt', array('EED_Events_Archive', 'get_the_excerpt'), 1, 1);
482
-        remove_filter(
483
-            'FHEE__EED_Events_Archive__event_details__no_post_password_required',
484
-            '__return_true'
485
-        );
486
-        return $content;
487
-    }
488
-
489
-
490
-    /**
491
-     *    use_filterable_display_order
492
-     *
493
-     * @access    protected
494
-     * @return    string
495
-     */
496
-    protected static function use_filterable_display_order()
497
-    {
498
-        // we need to first remove this callback from being applied to the_content()
499
-        // (otherwise it will recurse and blow up the interweb)
500
-        remove_filter(
501
-            'the_excerpt',
502
-            array('EED_Events_Archive', 'event_details'),
503
-            EED_Events_Archive::EVENT_DETAILS_PRIORITY
504
-        );
505
-        remove_filter(
506
-            'the_content',
507
-            array('EED_Events_Archive', 'event_details'),
508
-            EED_Events_Archive::EVENT_DETAILS_PRIORITY
509
-        );
510
-        remove_filter('get_the_excerpt', array('EED_Events_Archive', 'get_the_excerpt'), 1);
511
-        // now add additional content depending on whether event is using the_excerpt() or the_content()
512
-        EED_Events_Archive::_add_additional_excerpt_filters();
513
-        EED_Events_Archive::_add_additional_content_filters();
514
-        do_action('AHEE__EED_Events_Archive__use_filterable_display_order__after_add_filters');
515
-        // now load our template
516
-        $content = EEH_Template::locate_template('content-espresso_events-details.php');
517
-        // re-add our main filters (or else the next event won't have them)
518
-        add_filter(
519
-            'the_excerpt',
520
-            array('EED_Events_Archive', 'event_details'),
521
-            EED_Events_Archive::EVENT_DETAILS_PRIORITY
522
-        );
523
-        add_filter(
524
-            'the_content',
525
-            array('EED_Events_Archive', 'event_details'),
526
-            EED_Events_Archive::EVENT_DETAILS_PRIORITY
527
-        );
528
-        add_filter('get_the_excerpt', array('EED_Events_Archive', 'get_the_excerpt'), 1, 1);
529
-        // but remove the other filters so that they don't get applied to the next post
530
-        EED_Events_Archive::_remove_additional_events_archive_filters();
531
-        do_action('AHEE__EED_Events_Archive__use_filterable_display_order__after_remove_filters');
532
-        // we're not returning the $content directly because the template we are loading uses the_content (or the_excerpt)
533
-        // return ! empty( $template ) ? $template : $content;
534
-        return $content;
535
-    }
536
-
537
-
538
-    /**
539
-     *    event_datetimes - adds datetimes ABOVE content
540
-     *
541
-     * @access    public
542
-     * @param        string $content
543
-     * @return        string
544
-     */
545
-    public static function event_datetimes($content)
546
-    {
547
-        if (post_password_required()) {
548
-            return $content;
549
-        }
550
-        return EEH_Template::locate_template('content-espresso_events-datetimes.php') . $content;
551
-    }
552
-
553
-
554
-    /**
555
-     *    event_tickets - adds tickets ABOVE content (which includes datetimes)
556
-     *
557
-     * @access    public
558
-     * @param        string $content
559
-     * @return        string
560
-     */
561
-    public static function event_tickets($content)
562
-    {
563
-        if (post_password_required()) {
564
-            return $content;
565
-        }
566
-        return EEH_Template::locate_template('content-espresso_events-tickets.php') . $content;
567
-    }
568
-
569
-
570
-    /**
571
-     *    event_venues - adds venues BELOW content
572
-     *
573
-     * @access    public
574
-     * @param    string $content
575
-     * @return    string
576
-     */
577
-    public static function event_venue($content)
578
-    {
579
-        return EED_Events_Archive::event_venues($content);
580
-    }
581
-
582
-
583
-    /**
584
-     *    event_venues - adds venues BELOW content
585
-     *
586
-     * @access    public
587
-     * @param        string $content
588
-     * @return        string
589
-     */
590
-    public static function event_venues($content)
591
-    {
592
-        if (post_password_required()) {
593
-            return $content;
594
-        }
595
-        return $content . EEH_Template::locate_template('content-espresso_events-venues.php');
596
-    }
597
-
598
-
599
-    /**
600
-     *    _add_additional_content_filters
601
-     *
602
-     * @access    private
603
-     * @return        void
604
-     */
605
-    private static function _add_additional_excerpt_filters()
606
-    {
607
-        add_filter(
608
-            'the_excerpt',
609
-            array('EED_Events_Archive', 'event_datetimes'),
610
-            EED_Events_Archive::EVENT_DATETIMES_PRIORITY
611
-        );
612
-        add_filter(
613
-            'the_excerpt',
614
-            array('EED_Events_Archive', 'event_tickets'),
615
-            EED_Events_Archive::EVENT_TICKETS_PRIORITY
616
-        );
617
-        add_filter(
618
-            'the_excerpt',
619
-            array('EED_Events_Archive', 'event_venues'),
620
-            EED_Events_Archive::EVENT_VENUES_PRIORITY
621
-        );
622
-    }
623
-
624
-
625
-    /**
626
-     *    _add_additional_content_filters
627
-     *
628
-     * @access    private
629
-     * @return        void
630
-     */
631
-    private static function _add_additional_content_filters()
632
-    {
633
-        add_filter(
634
-            'the_content',
635
-            array('EED_Events_Archive', 'event_datetimes'),
636
-            EED_Events_Archive::EVENT_DATETIMES_PRIORITY
637
-        );
638
-        add_filter(
639
-            'the_content',
640
-            array('EED_Events_Archive', 'event_tickets'),
641
-            EED_Events_Archive::EVENT_TICKETS_PRIORITY
642
-        );
643
-        add_filter(
644
-            'the_content',
645
-            array('EED_Events_Archive', 'event_venues'),
646
-            EED_Events_Archive::EVENT_VENUES_PRIORITY
647
-        );
648
-    }
649
-
650
-
651
-    /**
652
-     *    _remove_additional_events_archive_filters
653
-     *
654
-     * @access    private
655
-     * @return        void
656
-     */
657
-    private static function _remove_additional_events_archive_filters()
658
-    {
659
-        remove_filter(
660
-            'the_excerpt',
661
-            array('EED_Events_Archive', 'event_datetimes'),
662
-            EED_Events_Archive::EVENT_DATETIMES_PRIORITY
663
-        );
664
-        remove_filter(
665
-            'the_excerpt',
666
-            array('EED_Events_Archive', 'event_tickets'),
667
-            EED_Events_Archive::EVENT_TICKETS_PRIORITY
668
-        );
669
-        remove_filter(
670
-            'the_excerpt',
671
-            array('EED_Events_Archive', 'event_venues'),
672
-            EED_Events_Archive::EVENT_VENUES_PRIORITY
673
-        );
674
-        remove_filter(
675
-            'the_content',
676
-            array('EED_Events_Archive', 'event_datetimes'),
677
-            EED_Events_Archive::EVENT_DATETIMES_PRIORITY
678
-        );
679
-        remove_filter(
680
-            'the_content',
681
-            array('EED_Events_Archive', 'event_tickets'),
682
-            EED_Events_Archive::EVENT_TICKETS_PRIORITY
683
-        );
684
-        remove_filter(
685
-            'the_content',
686
-            array('EED_Events_Archive', 'event_venues'),
687
-            EED_Events_Archive::EVENT_VENUES_PRIORITY
688
-        );
689
-    }
690
-
691
-
692
-    /**
693
-     *    remove_all_events_archive_filters
694
-     *
695
-     * @access    public
696
-     * @return        void
697
-     */
698
-    public static function remove_all_events_archive_filters()
699
-    {
700
-        // remove_filter( 'get_the_excerpt', array( 'EED_Events_Archive', 'get_the_excerpt' ), 1 );
701
-        remove_filter('the_title', array('EED_Events_Archive', 'the_title'), 1);
702
-        remove_filter(
703
-            'the_excerpt',
704
-            array('EED_Events_Archive', 'event_details'),
705
-            EED_Events_Archive::EVENT_DETAILS_PRIORITY
706
-        );
707
-        remove_filter(
708
-            'the_excerpt',
709
-            array('EED_Events_Archive', 'event_datetimes'),
710
-            EED_Events_Archive::EVENT_DATETIMES_PRIORITY
711
-        );
712
-        remove_filter(
713
-            'the_excerpt',
714
-            array('EED_Events_Archive', 'event_tickets'),
715
-            EED_Events_Archive::EVENT_TICKETS_PRIORITY
716
-        );
717
-        remove_filter(
718
-            'the_excerpt',
719
-            array('EED_Events_Archive', 'event_venues'),
720
-            EED_Events_Archive::EVENT_VENUES_PRIORITY
721
-        );
722
-        remove_filter(
723
-            'the_content',
724
-            array('EED_Events_Archive', 'event_details'),
725
-            EED_Events_Archive::EVENT_DETAILS_PRIORITY
726
-        );
727
-        remove_filter(
728
-            'the_content',
729
-            array('EED_Events_Archive', 'event_datetimes'),
730
-            EED_Events_Archive::EVENT_DATETIMES_PRIORITY
731
-        );
732
-        remove_filter(
733
-            'the_content',
734
-            array('EED_Events_Archive', 'event_tickets'),
735
-            EED_Events_Archive::EVENT_TICKETS_PRIORITY
736
-        );
737
-        remove_filter(
738
-            'the_content',
739
-            array('EED_Events_Archive', 'event_venues'),
740
-            EED_Events_Archive::EVENT_VENUES_PRIORITY
741
-        );
742
-        // don't display entry meta because the existing theme will take care of that
743
-        remove_filter(
744
-            'FHEE__content_espresso_events_details_template__display_entry_meta',
745
-            '__return_false'
746
-        );
747
-    }
748
-
749
-
750
-    /**
751
-     *    load_event_list_assets
752
-     *
753
-     * @access    public
754
-     * @return    void
755
-     */
756
-    public function load_event_list_assets()
757
-    {
758
-        do_action('AHEE__EED_Events_Archive__before_load_assets');
759
-        add_filter('FHEE_load_EE_Session', '__return_true');
760
-        add_filter('FHEE__EED_Ticket_Selector__load_tckt_slctr_assets', '__return_true');
761
-        add_action('wp_enqueue_scripts', array($this, 'wp_enqueue_scripts'), 10);
762
-        if (EE_Registry::instance()->CFG->map_settings->use_google_maps) {
763
-            add_action('wp_enqueue_scripts', array('EEH_Maps', 'espresso_google_map_js'), 11);
764
-        }
765
-    }
766
-
767
-
768
-    /**
769
-     *    wp_enqueue_scripts
770
-     *
771
-     * @access    public
772
-     * @return    void
773
-     * @throws EE_Error
774
-     */
775
-    public function wp_enqueue_scripts()
776
-    {
777
-        // get some style
778
-        if (apply_filters('FHEE_enable_default_espresso_css', false)) {
779
-            // first check uploads folder
780
-            if (EEH_File::is_readable(get_stylesheet_directory() . $this->theme . '/style.css')) {
781
-                wp_register_style(
782
-                    $this->theme,
783
-                    get_stylesheet_directory_uri() . $this->theme . '/style.css',
784
-                    array('dashicons', 'espresso_default')
785
-                );
786
-            } else {
787
-            }
788
-            wp_enqueue_style($this->theme);
789
-        }
790
-    }
791
-
792
-
793
-    /**
794
-     *    template_settings_form
795
-     *
796
-     * @access    public
797
-     * @static
798
-     * @return    string
799
-     */
800
-    public static function template_settings_form()
801
-    {
802
-        $template_settings = EE_Registry::instance()->CFG->template_settings;
803
-        $template_settings->EED_Events_Archive = isset($template_settings->EED_Events_Archive)
804
-            ? $template_settings->EED_Events_Archive : new EE_Events_Archive_Config();
805
-        $template_settings->EED_Events_Archive = apply_filters(
806
-            'FHEE__EED_Events_Archive__template_settings_form__event_list_config',
807
-            $template_settings->EED_Events_Archive
808
-        );
809
-        $events_archive_settings = array(
810
-            'display_status_banner' => 0,
811
-            'display_description' => 1,
812
-            'display_ticket_selector' => 0,
813
-            'display_datetimes' => 1,
814
-            'display_venue' => 0,
815
-            'display_expired_events' => 0,
816
-        );
817
-        $events_archive_settings = array_merge(
818
-            $events_archive_settings,
819
-            (array) $template_settings->EED_Events_Archive
820
-        );
821
-        EEH_Template::display_template(
822
-            EVENTS_ARCHIVE_TEMPLATES_PATH . 'admin-event-list-settings.template.php',
823
-            $events_archive_settings
824
-        );
825
-    }
826
-
827
-
828
-    /**
829
-     *    update_template_settings
830
-     *
831
-     * @access    public
832
-     * @param    EE_Template_Config $CFG
833
-     * @param    EE_Request_Handler $REQ
834
-     * @return    EE_Template_Config
835
-     */
836
-    public static function update_template_settings($CFG, $REQ)
837
-    {
838
-        $CFG->EED_Events_Archive = new EE_Events_Archive_Config();
839
-        // unless we are resetting the config...
840
-        if (
841
-            ! isset($REQ['EED_Events_Archive_reset_event_list_settings'])
842
-            || absint($REQ['EED_Events_Archive_reset_event_list_settings']) !== 1
843
-        ) {
844
-            $CFG->EED_Events_Archive->display_status_banner = isset($REQ['EED_Events_Archive_display_status_banner'])
845
-                ? absint($REQ['EED_Events_Archive_display_status_banner']) : 0;
846
-            $CFG->EED_Events_Archive->display_description = isset($REQ['EED_Events_Archive_display_description'])
847
-                ? absint($REQ['EED_Events_Archive_display_description']) : 1;
848
-            $CFG->EED_Events_Archive->display_ticket_selector = isset($REQ['EED_Events_Archive_display_ticket_selector'])
849
-                ? absint($REQ['EED_Events_Archive_display_ticket_selector']) : 0;
850
-            $CFG->EED_Events_Archive->display_datetimes = isset($REQ['EED_Events_Archive_display_datetimes']) ? absint(
851
-                $REQ['EED_Events_Archive_display_datetimes']
852
-            ) : 1;
853
-            $CFG->EED_Events_Archive->display_venue = isset($REQ['EED_Events_Archive_display_venue']) ? absint(
854
-                $REQ['EED_Events_Archive_display_venue']
855
-            ) : 0;
856
-            $CFG->EED_Events_Archive->display_expired_events = isset($REQ['EED_Events_Archive_display_expired_events'])
857
-                ? absint($REQ['EED_Events_Archive_display_expired_events']) : 0;
858
-        }
859
-        return $CFG;
860
-    }
861
-
862
-
863
-    /**
864
-     *    event_list_css
865
-     *
866
-     * @access    public
867
-     * @param string $extra_class
868
-     * @return    string
869
-     */
870
-    public static function event_list_css($extra_class = '')
871
-    {
872
-        $event_list_css = ! empty($extra_class) ? array($extra_class) : array();
873
-        $event_list_css[] = 'espresso-event-list-event';
874
-        return implode(' ', $event_list_css);
875
-    }
876
-
877
-
878
-    /**
879
-     *    event_categories
880
-     *
881
-     * @access    public
882
-     * @return    array
883
-     */
884
-    public static function event_categories()
885
-    {
886
-        return EE_Registry::instance()->load_model('Term')->get_all_ee_categories();
887
-    }
888
-
889
-
890
-    /**
891
-     *    display_description
892
-     *
893
-     * @access    public
894
-     * @param $value
895
-     * @return    bool
896
-     */
897
-    public static function display_description($value)
898
-    {
899
-        $config = EE_Registry::instance()->CFG->template_settings->EED_Events_Archive;
900
-        $display_description = isset($config->display_description) ? $config->display_description : 1;
901
-        return $display_description === $value ? true : false;
902
-    }
903
-
904
-
905
-    /**
906
-     *    display_ticket_selector
907
-     *
908
-     * @access    public
909
-     * @return    bool
910
-     */
911
-    public static function display_ticket_selector()
912
-    {
913
-        $config = EE_Registry::instance()->CFG->template_settings->EED_Events_Archive;
914
-        return isset($config->display_ticket_selector) && $config->display_ticket_selector ? true : false;
915
-    }
916
-
917
-
918
-    /**
919
-     *    display_venue
920
-     *
921
-     * @access    public
922
-     * @return    bool
923
-     */
924
-    public static function display_venue()
925
-    {
926
-        $config = EE_Registry::instance()->CFG->template_settings->EED_Events_Archive;
927
-        return isset($config->display_venue) && $config->display_venue && EEH_Venue_View::venue_name() ? true : false;
928
-    }
929
-
930
-
931
-    /**
932
-     *    display_datetimes
933
-     *
934
-     * @access    public
935
-     * @return    bool
936
-     */
937
-    public static function display_datetimes()
938
-    {
939
-        $config = EE_Registry::instance()->CFG->template_settings->EED_Events_Archive;
940
-        return isset($config->display_datetimes) && $config->display_datetimes ? true : false;
941
-    }
942
-
943
-
944
-    /**
945
-     *    event_list_title
946
-     *
947
-     * @access    public
948
-     * @return    string
949
-     */
950
-    public static function event_list_title()
951
-    {
952
-        return apply_filters(
953
-            'FHEE__archive_espresso_events_template__upcoming_events_h1',
954
-            __('Upcoming Events', 'event_espresso')
955
-        );
956
-    }
957
-
958
-
959
-    // GRAVEYARD
960
-
961
-
962
-    /**
963
-     * @since 4.4.0
964
-     */
965
-    public static function _doing_it_wrong_notice($function = '')
966
-    {
967
-        EE_Error::doing_it_wrong(
968
-            __FUNCTION__,
969
-            sprintf(
970
-                __(
971
-                    'EED_Events_Archive::%1$s was moved to EEH_Event_Query::%1$s:%2$sPlease update your existing code because the method it calls will be removed in version %3$s',
972
-                    'event_espresso'
973
-                ),
974
-                $function,
975
-                '<br />',
976
-                '4.6.0'
977
-            ),
978
-            '4.4.0'
979
-        );
980
-    }
981
-
982
-
983
-    /**
984
-     * @deprecated
985
-     * @since 4.4.0
986
-     */
987
-    public function get_post_data()
988
-    {
989
-        EEH_Event_Query::set_query_params();
990
-    }
991
-
992
-
993
-    /**
994
-     * @throws EE_Error
995
-     * @since 4.4.0
996
-     * @deprecated
997
-     */
998
-    public function posts_fields($SQL, WP_Query $wp_query)
999
-    {
1000
-        EED_Events_Archive::_doing_it_wrong_notice(__FUNCTION__);
1001
-        return EEH_Event_Query::posts_fields($SQL, $wp_query);
1002
-    }
1003
-
1004
-
1005
-    /**
1006
-     * @throws EE_Error
1007
-     * @since 4.4.0
1008
-     * @deprecated
1009
-     */
1010
-    public static function posts_fields_sql_for_orderby($orderby_params = array())
1011
-    {
1012
-        EED_Events_Archive::_doing_it_wrong_notice(__FUNCTION__);
1013
-        return EEH_Event_Query::posts_fields_sql_for_orderby($orderby_params);
1014
-    }
1015
-
1016
-
1017
-    /**
1018
-     * @throws EE_Error
1019
-     * @since 4.4.0
1020
-     * @deprecated
1021
-     */
1022
-    public function posts_join($SQL, WP_Query $wp_query)
1023
-    {
1024
-        EED_Events_Archive::_doing_it_wrong_notice(__FUNCTION__);
1025
-        return EEH_Event_Query::posts_join($SQL, $wp_query);
1026
-    }
1027
-
1028
-
1029
-    /**
1030
-     * @deprecated
1031
-     * @since 4.4.0
1032
-     */
1033
-    public static function posts_join_sql_for_terms($join_terms = null)
1034
-    {
1035
-        EED_Events_Archive::_doing_it_wrong_notice(__FUNCTION__);
1036
-        return EEH_Event_Query::posts_join_sql_for_terms($join_terms);
1037
-    }
1038
-
1039
-
1040
-    /**
1041
-     * @throws EE_Error
1042
-     * @since 4.4.0
1043
-     * @deprecated
1044
-     */
1045
-    public static function posts_join_for_orderby($orderby_params = array())
1046
-    {
1047
-        EED_Events_Archive::_doing_it_wrong_notice(__FUNCTION__);
1048
-        return EEH_Event_Query::posts_join_for_orderby($orderby_params);
1049
-    }
1050
-
1051
-
1052
-    /**
1053
-     * @throws EE_Error
1054
-     * @since 4.4.0
1055
-     * @deprecated
1056
-     */
1057
-    public function posts_where($SQL, WP_Query $wp_query)
1058
-    {
1059
-        EED_Events_Archive::_doing_it_wrong_notice(__FUNCTION__);
1060
-        return EEH_Event_Query::posts_where($SQL, $wp_query);
1061
-    }
1062
-
1063
-
1064
-    /**
1065
-     * @throws EE_Error
1066
-     * @since 4.4.0
1067
-     * @deprecated
1068
-     */
1069
-    public static function posts_where_sql_for_show_expired($show_expired = false)
1070
-    {
1071
-        EED_Events_Archive::_doing_it_wrong_notice(__FUNCTION__);
1072
-        return EEH_Event_Query::posts_where_sql_for_show_expired($show_expired);
1073
-    }
1074
-
1075
-
1076
-    /**
1077
-     * @deprecated
1078
-     * @since 4.4.0
1079
-     */
1080
-    public static function posts_where_sql_for_event_category_slug($event_category_slug = null)
1081
-    {
1082
-        EED_Events_Archive::_doing_it_wrong_notice(__FUNCTION__);
1083
-        return EEH_Event_Query::posts_where_sql_for_event_category_slug($event_category_slug);
1084
-    }
1085
-
1086
-
1087
-    /**
1088
-     * @throws EE_Error
1089
-     * @since 4.4.0
1090
-     * @deprecated
1091
-     */
1092
-    public static function posts_where_sql_for_event_list_month($month = null)
1093
-    {
1094
-        EED_Events_Archive::_doing_it_wrong_notice(__FUNCTION__);
1095
-        return EEH_Event_Query::posts_where_sql_for_event_list_month($month);
1096
-    }
1097
-
1098
-
1099
-    /**
1100
-     * @throws EE_Error
1101
-     * @since 4.4.0
1102
-     * @deprecated
1103
-     */
1104
-    public function posts_orderby($SQL, WP_Query $wp_query)
1105
-    {
1106
-        EED_Events_Archive::_doing_it_wrong_notice(__FUNCTION__);
1107
-        return EEH_Event_Query::posts_orderby($SQL, $wp_query);
1108
-    }
1109
-
1110
-
1111
-    /**
1112
-     * @throws EE_Error
1113
-     * @since 4.4.0
1114
-     * @deprecated
1115
-     */
1116
-    public static function posts_orderby_sql($orderby_params = array(), $sort = 'ASC')
1117
-    {
1118
-        EED_Events_Archive::_doing_it_wrong_notice(__FUNCTION__);
1119
-        return EEH_Event_Query::posts_orderby_sql($orderby_params, $sort);
1120
-    }
19
+	const EVENT_DETAILS_PRIORITY = 100;
20
+
21
+	const EVENT_DATETIMES_PRIORITY = 110;
22
+
23
+	const EVENT_TICKETS_PRIORITY = 120;
24
+
25
+	const EVENT_VENUES_PRIORITY = 130;
26
+
27
+
28
+	public static $espresso_event_list_ID = 0;
29
+
30
+	public static $espresso_grid_event_lists = array();
31
+
32
+	/**
33
+	 * @type bool $using_get_the_excerpt
34
+	 */
35
+	protected static $using_get_the_excerpt = false;
36
+
37
+	/**
38
+	 * Used to flag when the event list is being called from an external iframe.
39
+	 *
40
+	 * @var bool $iframe
41
+	 */
42
+	protected static $iframe = false;
43
+
44
+	/**
45
+	 * @var EventListIframeEmbedButton $_iframe_embed_button
46
+	 */
47
+	private static $_iframe_embed_button;
48
+
49
+	/**
50
+	 * @type EE_Template_Part_Manager $template_parts
51
+	 */
52
+	protected $template_parts;
53
+
54
+
55
+	/**
56
+	 * @return EED_Events_Archive
57
+	 */
58
+	public static function instance()
59
+	{
60
+		return parent::get_instance(__CLASS__);
61
+	}
62
+
63
+
64
+	/**
65
+	 * set_hooks - for hooking into EE Core, other modules, etc
66
+	 *
67
+	 * @return void
68
+	 * @throws InvalidArgumentException
69
+	 * @throws InvalidDataTypeException
70
+	 * @throws InvalidInterfaceException
71
+	 */
72
+	public static function set_hooks()
73
+	{
74
+		/** @var EventEspresso\core\domain\entities\custom_post_types\CustomPostTypeDefinitions $custom_post_type_definitions */
75
+		$custom_post_type_definitions = LoaderFactory::getLoader()->getShared(
76
+			'EventEspresso\core\domain\entities\custom_post_types\CustomPostTypeDefinitions'
77
+		);
78
+		$custom_post_types = $custom_post_type_definitions->getDefinitions();
79
+		EE_Config::register_route(
80
+			$custom_post_types['espresso_events']['plural_slug'],
81
+			'Events_Archive',
82
+			'run'
83
+		);
84
+		EE_Config::register_route(
85
+			'event_list',
86
+			'Events_Archive',
87
+			'event_list'
88
+		);
89
+		EE_Config::register_route(
90
+			'iframe',
91
+			'Events_Archive',
92
+			'event_list_iframe',
93
+			'event_list'
94
+		);
95
+		add_action('wp_loaded', array('EED_Events_Archive', 'set_definitions'), 2);
96
+	}
97
+
98
+
99
+	/**
100
+	 *    set_hooks_admin - for hooking into EE Admin Core, other modules, etc
101
+	 *
102
+	 * @access    public
103
+	 * @return    void
104
+	 */
105
+	public static function set_hooks_admin()
106
+	{
107
+		add_action('wp_loaded', array('EED_Events_Archive', 'set_definitions'), 2);
108
+		// hook into the end of the \EE_Admin_Page::_load_page_dependencies()
109
+		// to load assets for "espresso_events" page on the "default" route (action)
110
+		add_action(
111
+			'FHEE__EE_Admin_Page___load_page_dependencies__after_load__espresso_events__default',
112
+			array('EED_Events_Archive', 'event_list_iframe_embed_button'),
113
+			10
114
+		);
115
+	}
116
+
117
+
118
+	/**
119
+	 *    set_definitions
120
+	 *
121
+	 * @access    public
122
+	 * @return    void
123
+	 */
124
+	public static function set_definitions()
125
+	{
126
+		define('EVENTS_ARCHIVE_ASSETS_URL', plugin_dir_url(__FILE__) . 'assets/');
127
+		define('EVENTS_ARCHIVE_TEMPLATES_PATH', str_replace('\\', '/', plugin_dir_path(__FILE__)) . 'templates/');
128
+	}
129
+
130
+
131
+	/**
132
+	 * set up EE_Events_Archive_Config
133
+	 */
134
+	protected function set_config()
135
+	{
136
+		$this->set_config_section('template_settings');
137
+		$this->set_config_class('EE_Events_Archive_Config');
138
+		$this->set_config_name('EED_Events_Archive');
139
+	}
140
+
141
+
142
+	/**
143
+	 * @return EventListIframeEmbedButton
144
+	 */
145
+	public static function get_iframe_embed_button()
146
+	{
147
+		if (! self::$_iframe_embed_button instanceof EventListIframeEmbedButton) {
148
+			self::$_iframe_embed_button = new EventListIframeEmbedButton();
149
+		}
150
+		return self::$_iframe_embed_button;
151
+	}
152
+
153
+
154
+	/**
155
+	 * event_list_iframe_embed_button
156
+	 *
157
+	 * @return    void
158
+	 * @throws EE_Error
159
+	 */
160
+	public static function event_list_iframe_embed_button()
161
+	{
162
+		$iframe_embed_button = EED_Events_Archive::get_iframe_embed_button();
163
+		$iframe_embed_button->addEmbedButton();
164
+	}
165
+
166
+
167
+	/**
168
+	 *    initialize_template_parts
169
+	 *
170
+	 * @access    public
171
+	 * @param EE_Events_Archive_Config $config
172
+	 * @return EE_Template_Part_Manager
173
+	 * @throws EE_Error
174
+	 */
175
+	public function initialize_template_parts(EE_Events_Archive_Config $config = null)
176
+	{
177
+		$config = $config instanceof EE_Events_Archive_Config ? $config : $this->config();
178
+		EEH_Autoloader::register_template_part_autoloaders();
179
+		$template_parts = new EE_Template_Part_Manager();
180
+		$template_parts->add_template_part(
181
+			'tickets',
182
+			__('Ticket Selector', 'event_espresso'),
183
+			'content-espresso_events-tickets.php',
184
+			$config->display_order_tickets
185
+		);
186
+		$template_parts->add_template_part(
187
+			'datetimes',
188
+			__('Dates and Times', 'event_espresso'),
189
+			'content-espresso_events-datetimes.php',
190
+			$config->display_order_datetimes
191
+		);
192
+		$template_parts->add_template_part(
193
+			'event',
194
+			__('Event Description', 'event_espresso'),
195
+			'content-espresso_events-details.php',
196
+			$config->display_order_event
197
+		);
198
+		$template_parts->add_template_part(
199
+			'venue',
200
+			__('Venue Information', 'event_espresso'),
201
+			'content-espresso_events-venues.php',
202
+			$config->display_order_venue
203
+		);
204
+		do_action('AHEE__EED_Event_Archive__initialize_template_parts', $template_parts);
205
+		return $template_parts;
206
+	}
207
+
208
+
209
+	/**
210
+	 *    run - initial module setup - this gets called by the EE_Front_Controller if the module route is found in the
211
+	 *    incoming request
212
+	 *
213
+	 * @access    public
214
+	 * @param WP $WP
215
+	 * @return    void
216
+	 */
217
+	public function run($WP)
218
+	{
219
+		do_action('AHEE__EED_Events_Archive__before_run');
220
+		// ensure valid EE_Events_Archive_Config() object exists
221
+		$this->set_config();
222
+		/** @type EE_Events_Archive_Config $config */
223
+		$config = $this->config();
224
+		// load other required components
225
+		$this->load_event_list_assets();
226
+		// filter the WP posts_join, posts_where, and posts_orderby SQL clauses
227
+		// add query filters
228
+		EEH_Event_Query::add_query_filters();
229
+		// set params that will get used by the filters
230
+		EEH_Event_Query::set_query_params(
231
+			'',    // month
232
+			'',    // category
233
+			$config->display_expired_events,    // show_expired
234
+			'start_date',    // orderby
235
+			'ASC'    // sort
236
+		);
237
+		// check what template is loaded
238
+		add_filter('template_include', array($this, 'template_include'), 999, 1);
239
+	}
240
+
241
+
242
+	/**
243
+	 * most likely called by the ESPRESSO_EVENTS shortcode which uses this module to do some of it's lifting
244
+	 *
245
+	 * @return    void
246
+	 */
247
+	public function event_list()
248
+	{
249
+		// ensure valid EE_Events_Archive_Config() object exists
250
+		$this->set_config();
251
+		// load other required components
252
+		$this->load_event_list_assets();
253
+	}
254
+
255
+
256
+	/**
257
+	 * @access    public
258
+	 * @return    void
259
+	 * @throws EE_Error
260
+	 * @throws DomainException
261
+	 */
262
+	public function event_list_iframe()
263
+	{
264
+		EED_Events_Archive::$iframe = true;
265
+		$event_list_iframe = new EventsArchiveIframe($this);
266
+		$event_list_iframe->display();
267
+	}
268
+
269
+
270
+	/**
271
+	 * @access public
272
+	 * @return string
273
+	 */
274
+	public static function is_iframe()
275
+	{
276
+		return EED_Events_Archive::$iframe;
277
+	}
278
+
279
+
280
+	/**
281
+	 * @access public
282
+	 * @return string
283
+	 */
284
+	public static function link_target()
285
+	{
286
+		return EED_Events_Archive::$iframe ? ' target="_blank"' : '';
287
+	}
288
+
289
+
290
+	/**
291
+	 *    template_include
292
+	 *
293
+	 * @access    public
294
+	 * @param string $template
295
+	 * @return    string
296
+	 */
297
+	public function template_include($template = '')
298
+	{
299
+		// don't add content filter for dedicated EE child themes or private posts
300
+		if (! EEH_Template::is_espresso_theme()) {
301
+			/** @type EE_Events_Archive_Config $config */
302
+			$config = $this->config();
303
+			// add status banner ?
304
+			if ($config->display_status_banner) {
305
+				add_filter('the_title', array('EED_Events_Archive', 'the_title'), 100, 2);
306
+			}
307
+			// if NOT a custom template
308
+			if (
309
+				apply_filters('FHEE__EED_Event_Archive__template_include__allow_custom_selected_template', false)
310
+				|| EE_Registry::instance()
311
+							  ->load_core('Front_Controller')
312
+							  ->get_selected_template() !== 'archive-espresso_events.php'
313
+			) {
314
+				// don't display entry meta because the existing theme will take care of that
315
+				add_filter('FHEE__EED_Events_Archive__template_include__events_list_active', '__return_true');
316
+				// load functions.php file for the theme (loaded by WP if using child theme)
317
+				EEH_Template::load_espresso_theme_functions();
318
+				// because we don't know if the theme is using the_excerpt()
319
+				add_filter(
320
+					'the_excerpt',
321
+					array('EED_Events_Archive', 'event_details'),
322
+					EED_Events_Archive::EVENT_DETAILS_PRIORITY
323
+				);
324
+				// or the_content
325
+				add_filter(
326
+					'the_content',
327
+					array('EED_Events_Archive', 'event_details'),
328
+					EED_Events_Archive::EVENT_DETAILS_PRIORITY
329
+				);
330
+				// and just in case they are running get_the_excerpt() which DESTROYS things
331
+				add_filter('get_the_excerpt', array('EED_Events_Archive', 'get_the_excerpt'), 1, 1);
332
+				// don't display entry meta because the existing theme will take care of that
333
+				add_filter('FHEE__content_espresso_events_details_template__display_entry_meta', '__return_false');
334
+			}
335
+		}
336
+		return $template;
337
+	}
338
+
339
+
340
+	/**
341
+	 *    get_the_excerpt - kinda hacky, but if a theme is using get_the_excerpt(), then we need to remove our filters
342
+	 *    on the_content()
343
+	 *
344
+	 * @access    public
345
+	 * @param        string $excerpt
346
+	 * @return        string
347
+	 */
348
+	public static function get_the_excerpt($excerpt = '')
349
+	{
350
+		if (post_password_required()) {
351
+			return $excerpt;
352
+		}
353
+		if (apply_filters('FHEE__EED_Events_Archive__get_the_excerpt__theme_uses_get_the_excerpt', false)) {
354
+			remove_filter(
355
+				'the_excerpt',
356
+				array('EED_Events_Archive', 'event_details'),
357
+				EED_Events_Archive::EVENT_DETAILS_PRIORITY
358
+			);
359
+			remove_filter(
360
+				'the_content',
361
+				array('EED_Events_Archive', 'event_details'),
362
+				EED_Events_Archive::EVENT_DETAILS_PRIORITY
363
+			);
364
+			$excerpt = EED_Events_Archive::event_details($excerpt);
365
+		} else {
366
+			EED_Events_Archive::$using_get_the_excerpt = true;
367
+			add_filter('wp_trim_excerpt', array('EED_Events_Archive', 'end_get_the_excerpt'), 999, 1);
368
+		}
369
+		return $excerpt;
370
+	}
371
+
372
+
373
+	/**
374
+	 * end_get_the_excerpt
375
+	 *
376
+	 * @access public
377
+	 * @param  string $text
378
+	 * @return string
379
+	 */
380
+	public static function end_get_the_excerpt($text = '')
381
+	{
382
+		EED_Events_Archive::$using_get_the_excerpt = false;
383
+		return $text;
384
+	}
385
+
386
+
387
+	/**
388
+	 *    the_title
389
+	 *
390
+	 * @access        public
391
+	 * @param        string $title
392
+	 * @param        string $id
393
+	 * @return        string
394
+	 */
395
+	public static function the_title($title = '', $id = '')
396
+	{
397
+		global $post;
398
+		if ($post instanceof WP_Post) {
399
+			return in_the_loop() && $post->ID == $id ? espresso_event_status_banner($post->ID) . $title : $title;
400
+		}
401
+		return $title;
402
+	}
403
+
404
+
405
+	/**
406
+	 *    event_details
407
+	 *
408
+	 * @access    public
409
+	 * @param        string $content
410
+	 * @return        string
411
+	 */
412
+	public static function event_details($content)
413
+	{
414
+		global $post;
415
+		static $current_post_ID = 0;
416
+		if (
417
+			$current_post_ID !== $post->ID
418
+			&& $post->post_type === 'espresso_events'
419
+			&& ! EED_Events_Archive::$using_get_the_excerpt
420
+			&& ! post_password_required()
421
+			&& (
422
+				apply_filters('FHEE__EES_Espresso_Events__process_shortcode__true', false)
423
+				|| ! apply_filters('FHEE__content_espresso_events__template_loaded', false)
424
+			)
425
+		) {
426
+			// Set current post ID to prevent showing content twice, but only if headers have definitely been sent.
427
+			// Reason being is that some plugins, like Yoast, need to run through a copy of the loop early
428
+			// BEFORE headers are sent in order to examine the post content and generate content for the HTML header.
429
+			// We want to allow those plugins to still do their thing and have access to our content, but depending on
430
+			// how your event content is being displayed (shortcode, CPT route, etc), this filter can get applied twice,
431
+			// so the following allows this filter to be applied multiple times, but only once for real
432
+			$current_post_ID = did_action('loop_start') ? $post->ID : 0;
433
+			if (EE_Registry::instance()->CFG->template_settings->EED_Events_Archive->use_sortable_display_order) {
434
+				$content = EED_Events_Archive::use_sortable_display_order();
435
+			} else {
436
+				$content = EED_Events_Archive::use_filterable_display_order();
437
+			}
438
+		}
439
+		return $content;
440
+	}
441
+
442
+
443
+	/**
444
+	 *    use_sortable_display_order
445
+	 *
446
+	 * @access    protected
447
+	 * @return string
448
+	 */
449
+	protected static function use_sortable_display_order()
450
+	{
451
+		// no further password checks required atm
452
+		add_filter('FHEE__EED_Events_Archive__event_details__no_post_password_required', '__return_true');
453
+		// we need to first remove this callback from being applied to the_content() or the_excerpt()
454
+		// (otherwise it will recurse and blow up the interweb)
455
+		remove_filter(
456
+			'the_excerpt',
457
+			array('EED_Events_Archive', 'event_details'),
458
+			EED_Events_Archive::EVENT_DETAILS_PRIORITY
459
+		);
460
+		remove_filter(
461
+			'the_content',
462
+			array('EED_Events_Archive', 'event_details'),
463
+			EED_Events_Archive::EVENT_DETAILS_PRIORITY
464
+		);
465
+		remove_filter('get_the_excerpt', array('EED_Events_Archive', 'get_the_excerpt'), 1);
466
+		// now add additional content depending on whether event is using the_excerpt() or the_content()
467
+		EED_Events_Archive::instance()->template_parts = EED_Events_Archive::instance()->initialize_template_parts();
468
+		$content = EEH_Template::locate_template('content-espresso_events-details.php');
469
+		$content = EED_Events_Archive::instance()->template_parts->apply_template_part_filters($content);
470
+		// re-add our main filters (or else the next event won't have them)
471
+		add_filter(
472
+			'the_excerpt',
473
+			array('EED_Events_Archive', 'event_details'),
474
+			EED_Events_Archive::EVENT_DETAILS_PRIORITY
475
+		);
476
+		add_filter(
477
+			'the_content',
478
+			array('EED_Events_Archive', 'event_details'),
479
+			EED_Events_Archive::EVENT_DETAILS_PRIORITY
480
+		);
481
+		add_filter('get_the_excerpt', array('EED_Events_Archive', 'get_the_excerpt'), 1, 1);
482
+		remove_filter(
483
+			'FHEE__EED_Events_Archive__event_details__no_post_password_required',
484
+			'__return_true'
485
+		);
486
+		return $content;
487
+	}
488
+
489
+
490
+	/**
491
+	 *    use_filterable_display_order
492
+	 *
493
+	 * @access    protected
494
+	 * @return    string
495
+	 */
496
+	protected static function use_filterable_display_order()
497
+	{
498
+		// we need to first remove this callback from being applied to the_content()
499
+		// (otherwise it will recurse and blow up the interweb)
500
+		remove_filter(
501
+			'the_excerpt',
502
+			array('EED_Events_Archive', 'event_details'),
503
+			EED_Events_Archive::EVENT_DETAILS_PRIORITY
504
+		);
505
+		remove_filter(
506
+			'the_content',
507
+			array('EED_Events_Archive', 'event_details'),
508
+			EED_Events_Archive::EVENT_DETAILS_PRIORITY
509
+		);
510
+		remove_filter('get_the_excerpt', array('EED_Events_Archive', 'get_the_excerpt'), 1);
511
+		// now add additional content depending on whether event is using the_excerpt() or the_content()
512
+		EED_Events_Archive::_add_additional_excerpt_filters();
513
+		EED_Events_Archive::_add_additional_content_filters();
514
+		do_action('AHEE__EED_Events_Archive__use_filterable_display_order__after_add_filters');
515
+		// now load our template
516
+		$content = EEH_Template::locate_template('content-espresso_events-details.php');
517
+		// re-add our main filters (or else the next event won't have them)
518
+		add_filter(
519
+			'the_excerpt',
520
+			array('EED_Events_Archive', 'event_details'),
521
+			EED_Events_Archive::EVENT_DETAILS_PRIORITY
522
+		);
523
+		add_filter(
524
+			'the_content',
525
+			array('EED_Events_Archive', 'event_details'),
526
+			EED_Events_Archive::EVENT_DETAILS_PRIORITY
527
+		);
528
+		add_filter('get_the_excerpt', array('EED_Events_Archive', 'get_the_excerpt'), 1, 1);
529
+		// but remove the other filters so that they don't get applied to the next post
530
+		EED_Events_Archive::_remove_additional_events_archive_filters();
531
+		do_action('AHEE__EED_Events_Archive__use_filterable_display_order__after_remove_filters');
532
+		// we're not returning the $content directly because the template we are loading uses the_content (or the_excerpt)
533
+		// return ! empty( $template ) ? $template : $content;
534
+		return $content;
535
+	}
536
+
537
+
538
+	/**
539
+	 *    event_datetimes - adds datetimes ABOVE content
540
+	 *
541
+	 * @access    public
542
+	 * @param        string $content
543
+	 * @return        string
544
+	 */
545
+	public static function event_datetimes($content)
546
+	{
547
+		if (post_password_required()) {
548
+			return $content;
549
+		}
550
+		return EEH_Template::locate_template('content-espresso_events-datetimes.php') . $content;
551
+	}
552
+
553
+
554
+	/**
555
+	 *    event_tickets - adds tickets ABOVE content (which includes datetimes)
556
+	 *
557
+	 * @access    public
558
+	 * @param        string $content
559
+	 * @return        string
560
+	 */
561
+	public static function event_tickets($content)
562
+	{
563
+		if (post_password_required()) {
564
+			return $content;
565
+		}
566
+		return EEH_Template::locate_template('content-espresso_events-tickets.php') . $content;
567
+	}
568
+
569
+
570
+	/**
571
+	 *    event_venues - adds venues BELOW content
572
+	 *
573
+	 * @access    public
574
+	 * @param    string $content
575
+	 * @return    string
576
+	 */
577
+	public static function event_venue($content)
578
+	{
579
+		return EED_Events_Archive::event_venues($content);
580
+	}
581
+
582
+
583
+	/**
584
+	 *    event_venues - adds venues BELOW content
585
+	 *
586
+	 * @access    public
587
+	 * @param        string $content
588
+	 * @return        string
589
+	 */
590
+	public static function event_venues($content)
591
+	{
592
+		if (post_password_required()) {
593
+			return $content;
594
+		}
595
+		return $content . EEH_Template::locate_template('content-espresso_events-venues.php');
596
+	}
597
+
598
+
599
+	/**
600
+	 *    _add_additional_content_filters
601
+	 *
602
+	 * @access    private
603
+	 * @return        void
604
+	 */
605
+	private static function _add_additional_excerpt_filters()
606
+	{
607
+		add_filter(
608
+			'the_excerpt',
609
+			array('EED_Events_Archive', 'event_datetimes'),
610
+			EED_Events_Archive::EVENT_DATETIMES_PRIORITY
611
+		);
612
+		add_filter(
613
+			'the_excerpt',
614
+			array('EED_Events_Archive', 'event_tickets'),
615
+			EED_Events_Archive::EVENT_TICKETS_PRIORITY
616
+		);
617
+		add_filter(
618
+			'the_excerpt',
619
+			array('EED_Events_Archive', 'event_venues'),
620
+			EED_Events_Archive::EVENT_VENUES_PRIORITY
621
+		);
622
+	}
623
+
624
+
625
+	/**
626
+	 *    _add_additional_content_filters
627
+	 *
628
+	 * @access    private
629
+	 * @return        void
630
+	 */
631
+	private static function _add_additional_content_filters()
632
+	{
633
+		add_filter(
634
+			'the_content',
635
+			array('EED_Events_Archive', 'event_datetimes'),
636
+			EED_Events_Archive::EVENT_DATETIMES_PRIORITY
637
+		);
638
+		add_filter(
639
+			'the_content',
640
+			array('EED_Events_Archive', 'event_tickets'),
641
+			EED_Events_Archive::EVENT_TICKETS_PRIORITY
642
+		);
643
+		add_filter(
644
+			'the_content',
645
+			array('EED_Events_Archive', 'event_venues'),
646
+			EED_Events_Archive::EVENT_VENUES_PRIORITY
647
+		);
648
+	}
649
+
650
+
651
+	/**
652
+	 *    _remove_additional_events_archive_filters
653
+	 *
654
+	 * @access    private
655
+	 * @return        void
656
+	 */
657
+	private static function _remove_additional_events_archive_filters()
658
+	{
659
+		remove_filter(
660
+			'the_excerpt',
661
+			array('EED_Events_Archive', 'event_datetimes'),
662
+			EED_Events_Archive::EVENT_DATETIMES_PRIORITY
663
+		);
664
+		remove_filter(
665
+			'the_excerpt',
666
+			array('EED_Events_Archive', 'event_tickets'),
667
+			EED_Events_Archive::EVENT_TICKETS_PRIORITY
668
+		);
669
+		remove_filter(
670
+			'the_excerpt',
671
+			array('EED_Events_Archive', 'event_venues'),
672
+			EED_Events_Archive::EVENT_VENUES_PRIORITY
673
+		);
674
+		remove_filter(
675
+			'the_content',
676
+			array('EED_Events_Archive', 'event_datetimes'),
677
+			EED_Events_Archive::EVENT_DATETIMES_PRIORITY
678
+		);
679
+		remove_filter(
680
+			'the_content',
681
+			array('EED_Events_Archive', 'event_tickets'),
682
+			EED_Events_Archive::EVENT_TICKETS_PRIORITY
683
+		);
684
+		remove_filter(
685
+			'the_content',
686
+			array('EED_Events_Archive', 'event_venues'),
687
+			EED_Events_Archive::EVENT_VENUES_PRIORITY
688
+		);
689
+	}
690
+
691
+
692
+	/**
693
+	 *    remove_all_events_archive_filters
694
+	 *
695
+	 * @access    public
696
+	 * @return        void
697
+	 */
698
+	public static function remove_all_events_archive_filters()
699
+	{
700
+		// remove_filter( 'get_the_excerpt', array( 'EED_Events_Archive', 'get_the_excerpt' ), 1 );
701
+		remove_filter('the_title', array('EED_Events_Archive', 'the_title'), 1);
702
+		remove_filter(
703
+			'the_excerpt',
704
+			array('EED_Events_Archive', 'event_details'),
705
+			EED_Events_Archive::EVENT_DETAILS_PRIORITY
706
+		);
707
+		remove_filter(
708
+			'the_excerpt',
709
+			array('EED_Events_Archive', 'event_datetimes'),
710
+			EED_Events_Archive::EVENT_DATETIMES_PRIORITY
711
+		);
712
+		remove_filter(
713
+			'the_excerpt',
714
+			array('EED_Events_Archive', 'event_tickets'),
715
+			EED_Events_Archive::EVENT_TICKETS_PRIORITY
716
+		);
717
+		remove_filter(
718
+			'the_excerpt',
719
+			array('EED_Events_Archive', 'event_venues'),
720
+			EED_Events_Archive::EVENT_VENUES_PRIORITY
721
+		);
722
+		remove_filter(
723
+			'the_content',
724
+			array('EED_Events_Archive', 'event_details'),
725
+			EED_Events_Archive::EVENT_DETAILS_PRIORITY
726
+		);
727
+		remove_filter(
728
+			'the_content',
729
+			array('EED_Events_Archive', 'event_datetimes'),
730
+			EED_Events_Archive::EVENT_DATETIMES_PRIORITY
731
+		);
732
+		remove_filter(
733
+			'the_content',
734
+			array('EED_Events_Archive', 'event_tickets'),
735
+			EED_Events_Archive::EVENT_TICKETS_PRIORITY
736
+		);
737
+		remove_filter(
738
+			'the_content',
739
+			array('EED_Events_Archive', 'event_venues'),
740
+			EED_Events_Archive::EVENT_VENUES_PRIORITY
741
+		);
742
+		// don't display entry meta because the existing theme will take care of that
743
+		remove_filter(
744
+			'FHEE__content_espresso_events_details_template__display_entry_meta',
745
+			'__return_false'
746
+		);
747
+	}
748
+
749
+
750
+	/**
751
+	 *    load_event_list_assets
752
+	 *
753
+	 * @access    public
754
+	 * @return    void
755
+	 */
756
+	public function load_event_list_assets()
757
+	{
758
+		do_action('AHEE__EED_Events_Archive__before_load_assets');
759
+		add_filter('FHEE_load_EE_Session', '__return_true');
760
+		add_filter('FHEE__EED_Ticket_Selector__load_tckt_slctr_assets', '__return_true');
761
+		add_action('wp_enqueue_scripts', array($this, 'wp_enqueue_scripts'), 10);
762
+		if (EE_Registry::instance()->CFG->map_settings->use_google_maps) {
763
+			add_action('wp_enqueue_scripts', array('EEH_Maps', 'espresso_google_map_js'), 11);
764
+		}
765
+	}
766
+
767
+
768
+	/**
769
+	 *    wp_enqueue_scripts
770
+	 *
771
+	 * @access    public
772
+	 * @return    void
773
+	 * @throws EE_Error
774
+	 */
775
+	public function wp_enqueue_scripts()
776
+	{
777
+		// get some style
778
+		if (apply_filters('FHEE_enable_default_espresso_css', false)) {
779
+			// first check uploads folder
780
+			if (EEH_File::is_readable(get_stylesheet_directory() . $this->theme . '/style.css')) {
781
+				wp_register_style(
782
+					$this->theme,
783
+					get_stylesheet_directory_uri() . $this->theme . '/style.css',
784
+					array('dashicons', 'espresso_default')
785
+				);
786
+			} else {
787
+			}
788
+			wp_enqueue_style($this->theme);
789
+		}
790
+	}
791
+
792
+
793
+	/**
794
+	 *    template_settings_form
795
+	 *
796
+	 * @access    public
797
+	 * @static
798
+	 * @return    string
799
+	 */
800
+	public static function template_settings_form()
801
+	{
802
+		$template_settings = EE_Registry::instance()->CFG->template_settings;
803
+		$template_settings->EED_Events_Archive = isset($template_settings->EED_Events_Archive)
804
+			? $template_settings->EED_Events_Archive : new EE_Events_Archive_Config();
805
+		$template_settings->EED_Events_Archive = apply_filters(
806
+			'FHEE__EED_Events_Archive__template_settings_form__event_list_config',
807
+			$template_settings->EED_Events_Archive
808
+		);
809
+		$events_archive_settings = array(
810
+			'display_status_banner' => 0,
811
+			'display_description' => 1,
812
+			'display_ticket_selector' => 0,
813
+			'display_datetimes' => 1,
814
+			'display_venue' => 0,
815
+			'display_expired_events' => 0,
816
+		);
817
+		$events_archive_settings = array_merge(
818
+			$events_archive_settings,
819
+			(array) $template_settings->EED_Events_Archive
820
+		);
821
+		EEH_Template::display_template(
822
+			EVENTS_ARCHIVE_TEMPLATES_PATH . 'admin-event-list-settings.template.php',
823
+			$events_archive_settings
824
+		);
825
+	}
826
+
827
+
828
+	/**
829
+	 *    update_template_settings
830
+	 *
831
+	 * @access    public
832
+	 * @param    EE_Template_Config $CFG
833
+	 * @param    EE_Request_Handler $REQ
834
+	 * @return    EE_Template_Config
835
+	 */
836
+	public static function update_template_settings($CFG, $REQ)
837
+	{
838
+		$CFG->EED_Events_Archive = new EE_Events_Archive_Config();
839
+		// unless we are resetting the config...
840
+		if (
841
+			! isset($REQ['EED_Events_Archive_reset_event_list_settings'])
842
+			|| absint($REQ['EED_Events_Archive_reset_event_list_settings']) !== 1
843
+		) {
844
+			$CFG->EED_Events_Archive->display_status_banner = isset($REQ['EED_Events_Archive_display_status_banner'])
845
+				? absint($REQ['EED_Events_Archive_display_status_banner']) : 0;
846
+			$CFG->EED_Events_Archive->display_description = isset($REQ['EED_Events_Archive_display_description'])
847
+				? absint($REQ['EED_Events_Archive_display_description']) : 1;
848
+			$CFG->EED_Events_Archive->display_ticket_selector = isset($REQ['EED_Events_Archive_display_ticket_selector'])
849
+				? absint($REQ['EED_Events_Archive_display_ticket_selector']) : 0;
850
+			$CFG->EED_Events_Archive->display_datetimes = isset($REQ['EED_Events_Archive_display_datetimes']) ? absint(
851
+				$REQ['EED_Events_Archive_display_datetimes']
852
+			) : 1;
853
+			$CFG->EED_Events_Archive->display_venue = isset($REQ['EED_Events_Archive_display_venue']) ? absint(
854
+				$REQ['EED_Events_Archive_display_venue']
855
+			) : 0;
856
+			$CFG->EED_Events_Archive->display_expired_events = isset($REQ['EED_Events_Archive_display_expired_events'])
857
+				? absint($REQ['EED_Events_Archive_display_expired_events']) : 0;
858
+		}
859
+		return $CFG;
860
+	}
861
+
862
+
863
+	/**
864
+	 *    event_list_css
865
+	 *
866
+	 * @access    public
867
+	 * @param string $extra_class
868
+	 * @return    string
869
+	 */
870
+	public static function event_list_css($extra_class = '')
871
+	{
872
+		$event_list_css = ! empty($extra_class) ? array($extra_class) : array();
873
+		$event_list_css[] = 'espresso-event-list-event';
874
+		return implode(' ', $event_list_css);
875
+	}
876
+
877
+
878
+	/**
879
+	 *    event_categories
880
+	 *
881
+	 * @access    public
882
+	 * @return    array
883
+	 */
884
+	public static function event_categories()
885
+	{
886
+		return EE_Registry::instance()->load_model('Term')->get_all_ee_categories();
887
+	}
888
+
889
+
890
+	/**
891
+	 *    display_description
892
+	 *
893
+	 * @access    public
894
+	 * @param $value
895
+	 * @return    bool
896
+	 */
897
+	public static function display_description($value)
898
+	{
899
+		$config = EE_Registry::instance()->CFG->template_settings->EED_Events_Archive;
900
+		$display_description = isset($config->display_description) ? $config->display_description : 1;
901
+		return $display_description === $value ? true : false;
902
+	}
903
+
904
+
905
+	/**
906
+	 *    display_ticket_selector
907
+	 *
908
+	 * @access    public
909
+	 * @return    bool
910
+	 */
911
+	public static function display_ticket_selector()
912
+	{
913
+		$config = EE_Registry::instance()->CFG->template_settings->EED_Events_Archive;
914
+		return isset($config->display_ticket_selector) && $config->display_ticket_selector ? true : false;
915
+	}
916
+
917
+
918
+	/**
919
+	 *    display_venue
920
+	 *
921
+	 * @access    public
922
+	 * @return    bool
923
+	 */
924
+	public static function display_venue()
925
+	{
926
+		$config = EE_Registry::instance()->CFG->template_settings->EED_Events_Archive;
927
+		return isset($config->display_venue) && $config->display_venue && EEH_Venue_View::venue_name() ? true : false;
928
+	}
929
+
930
+
931
+	/**
932
+	 *    display_datetimes
933
+	 *
934
+	 * @access    public
935
+	 * @return    bool
936
+	 */
937
+	public static function display_datetimes()
938
+	{
939
+		$config = EE_Registry::instance()->CFG->template_settings->EED_Events_Archive;
940
+		return isset($config->display_datetimes) && $config->display_datetimes ? true : false;
941
+	}
942
+
943
+
944
+	/**
945
+	 *    event_list_title
946
+	 *
947
+	 * @access    public
948
+	 * @return    string
949
+	 */
950
+	public static function event_list_title()
951
+	{
952
+		return apply_filters(
953
+			'FHEE__archive_espresso_events_template__upcoming_events_h1',
954
+			__('Upcoming Events', 'event_espresso')
955
+		);
956
+	}
957
+
958
+
959
+	// GRAVEYARD
960
+
961
+
962
+	/**
963
+	 * @since 4.4.0
964
+	 */
965
+	public static function _doing_it_wrong_notice($function = '')
966
+	{
967
+		EE_Error::doing_it_wrong(
968
+			__FUNCTION__,
969
+			sprintf(
970
+				__(
971
+					'EED_Events_Archive::%1$s was moved to EEH_Event_Query::%1$s:%2$sPlease update your existing code because the method it calls will be removed in version %3$s',
972
+					'event_espresso'
973
+				),
974
+				$function,
975
+				'<br />',
976
+				'4.6.0'
977
+			),
978
+			'4.4.0'
979
+		);
980
+	}
981
+
982
+
983
+	/**
984
+	 * @deprecated
985
+	 * @since 4.4.0
986
+	 */
987
+	public function get_post_data()
988
+	{
989
+		EEH_Event_Query::set_query_params();
990
+	}
991
+
992
+
993
+	/**
994
+	 * @throws EE_Error
995
+	 * @since 4.4.0
996
+	 * @deprecated
997
+	 */
998
+	public function posts_fields($SQL, WP_Query $wp_query)
999
+	{
1000
+		EED_Events_Archive::_doing_it_wrong_notice(__FUNCTION__);
1001
+		return EEH_Event_Query::posts_fields($SQL, $wp_query);
1002
+	}
1003
+
1004
+
1005
+	/**
1006
+	 * @throws EE_Error
1007
+	 * @since 4.4.0
1008
+	 * @deprecated
1009
+	 */
1010
+	public static function posts_fields_sql_for_orderby($orderby_params = array())
1011
+	{
1012
+		EED_Events_Archive::_doing_it_wrong_notice(__FUNCTION__);
1013
+		return EEH_Event_Query::posts_fields_sql_for_orderby($orderby_params);
1014
+	}
1015
+
1016
+
1017
+	/**
1018
+	 * @throws EE_Error
1019
+	 * @since 4.4.0
1020
+	 * @deprecated
1021
+	 */
1022
+	public function posts_join($SQL, WP_Query $wp_query)
1023
+	{
1024
+		EED_Events_Archive::_doing_it_wrong_notice(__FUNCTION__);
1025
+		return EEH_Event_Query::posts_join($SQL, $wp_query);
1026
+	}
1027
+
1028
+
1029
+	/**
1030
+	 * @deprecated
1031
+	 * @since 4.4.0
1032
+	 */
1033
+	public static function posts_join_sql_for_terms($join_terms = null)
1034
+	{
1035
+		EED_Events_Archive::_doing_it_wrong_notice(__FUNCTION__);
1036
+		return EEH_Event_Query::posts_join_sql_for_terms($join_terms);
1037
+	}
1038
+
1039
+
1040
+	/**
1041
+	 * @throws EE_Error
1042
+	 * @since 4.4.0
1043
+	 * @deprecated
1044
+	 */
1045
+	public static function posts_join_for_orderby($orderby_params = array())
1046
+	{
1047
+		EED_Events_Archive::_doing_it_wrong_notice(__FUNCTION__);
1048
+		return EEH_Event_Query::posts_join_for_orderby($orderby_params);
1049
+	}
1050
+
1051
+
1052
+	/**
1053
+	 * @throws EE_Error
1054
+	 * @since 4.4.0
1055
+	 * @deprecated
1056
+	 */
1057
+	public function posts_where($SQL, WP_Query $wp_query)
1058
+	{
1059
+		EED_Events_Archive::_doing_it_wrong_notice(__FUNCTION__);
1060
+		return EEH_Event_Query::posts_where($SQL, $wp_query);
1061
+	}
1062
+
1063
+
1064
+	/**
1065
+	 * @throws EE_Error
1066
+	 * @since 4.4.0
1067
+	 * @deprecated
1068
+	 */
1069
+	public static function posts_where_sql_for_show_expired($show_expired = false)
1070
+	{
1071
+		EED_Events_Archive::_doing_it_wrong_notice(__FUNCTION__);
1072
+		return EEH_Event_Query::posts_where_sql_for_show_expired($show_expired);
1073
+	}
1074
+
1075
+
1076
+	/**
1077
+	 * @deprecated
1078
+	 * @since 4.4.0
1079
+	 */
1080
+	public static function posts_where_sql_for_event_category_slug($event_category_slug = null)
1081
+	{
1082
+		EED_Events_Archive::_doing_it_wrong_notice(__FUNCTION__);
1083
+		return EEH_Event_Query::posts_where_sql_for_event_category_slug($event_category_slug);
1084
+	}
1085
+
1086
+
1087
+	/**
1088
+	 * @throws EE_Error
1089
+	 * @since 4.4.0
1090
+	 * @deprecated
1091
+	 */
1092
+	public static function posts_where_sql_for_event_list_month($month = null)
1093
+	{
1094
+		EED_Events_Archive::_doing_it_wrong_notice(__FUNCTION__);
1095
+		return EEH_Event_Query::posts_where_sql_for_event_list_month($month);
1096
+	}
1097
+
1098
+
1099
+	/**
1100
+	 * @throws EE_Error
1101
+	 * @since 4.4.0
1102
+	 * @deprecated
1103
+	 */
1104
+	public function posts_orderby($SQL, WP_Query $wp_query)
1105
+	{
1106
+		EED_Events_Archive::_doing_it_wrong_notice(__FUNCTION__);
1107
+		return EEH_Event_Query::posts_orderby($SQL, $wp_query);
1108
+	}
1109
+
1110
+
1111
+	/**
1112
+	 * @throws EE_Error
1113
+	 * @since 4.4.0
1114
+	 * @deprecated
1115
+	 */
1116
+	public static function posts_orderby_sql($orderby_params = array(), $sort = 'ASC')
1117
+	{
1118
+		EED_Events_Archive::_doing_it_wrong_notice(__FUNCTION__);
1119
+		return EEH_Event_Query::posts_orderby_sql($orderby_params, $sort);
1120
+	}
1121 1121
 }
1122 1122
 
1123 1123
 
@@ -1126,9 +1126,9 @@  discard block
 block discarded – undo
1126 1126
  */
1127 1127
 function espresso_get_event_list_ID()
1128 1128
 {
1129
-    EED_Events_Archive::$espresso_event_list_ID++;
1130
-    EED_Events_Archive::$espresso_grid_event_lists[] = EED_Events_Archive::$espresso_event_list_ID;
1131
-    return EED_Events_Archive::$espresso_event_list_ID;
1129
+	EED_Events_Archive::$espresso_event_list_ID++;
1130
+	EED_Events_Archive::$espresso_grid_event_lists[] = EED_Events_Archive::$espresso_event_list_ID;
1131
+	return EED_Events_Archive::$espresso_event_list_ID;
1132 1132
 }
1133 1133
 
1134 1134
 /**
@@ -1136,7 +1136,7 @@  discard block
 block discarded – undo
1136 1136
  */
1137 1137
 function espresso_event_list_title()
1138 1138
 {
1139
-    return EED_Events_Archive::event_list_title();
1139
+	return EED_Events_Archive::event_list_title();
1140 1140
 }
1141 1141
 
1142 1142
 /**
@@ -1145,7 +1145,7 @@  discard block
 block discarded – undo
1145 1145
  */
1146 1146
 function espresso_event_list_css($extra_class = '')
1147 1147
 {
1148
-    return EED_Events_Archive::event_list_css($extra_class);
1148
+	return EED_Events_Archive::event_list_css($extra_class);
1149 1149
 }
1150 1150
 
1151 1151
 /**
@@ -1153,7 +1153,7 @@  discard block
 block discarded – undo
1153 1153
  */
1154 1154
 function espresso_get_event_categories()
1155 1155
 {
1156
-    return EED_Events_Archive::event_categories();
1156
+	return EED_Events_Archive::event_categories();
1157 1157
 }
1158 1158
 
1159 1159
 /**
@@ -1161,7 +1161,7 @@  discard block
 block discarded – undo
1161 1161
  */
1162 1162
 function espresso_display_full_description_in_event_list()
1163 1163
 {
1164
-    return EED_Events_Archive::display_description(2);
1164
+	return EED_Events_Archive::display_description(2);
1165 1165
 }
1166 1166
 
1167 1167
 /**
@@ -1169,7 +1169,7 @@  discard block
 block discarded – undo
1169 1169
  */
1170 1170
 function espresso_display_excerpt_in_event_list()
1171 1171
 {
1172
-    return EED_Events_Archive::display_description(1);
1172
+	return EED_Events_Archive::display_description(1);
1173 1173
 }
1174 1174
 
1175 1175
 /**
@@ -1177,7 +1177,7 @@  discard block
 block discarded – undo
1177 1177
  */
1178 1178
 function espresso_display_ticket_selector_in_event_list()
1179 1179
 {
1180
-    return EED_Events_Archive::display_ticket_selector();
1180
+	return EED_Events_Archive::display_ticket_selector();
1181 1181
 }
1182 1182
 
1183 1183
 /**
@@ -1185,7 +1185,7 @@  discard block
 block discarded – undo
1185 1185
  */
1186 1186
 function espresso_display_venue_in_event_list()
1187 1187
 {
1188
-    return EED_Events_Archive::display_venue();
1188
+	return EED_Events_Archive::display_venue();
1189 1189
 }
1190 1190
 
1191 1191
 /**
@@ -1193,5 +1193,5 @@  discard block
 block discarded – undo
1193 1193
  */
1194 1194
 function espresso_display_datetimes_in_event_list()
1195 1195
 {
1196
-    return EED_Events_Archive::display_datetimes();
1196
+	return EED_Events_Archive::display_datetimes();
1197 1197
 }
Please login to merge, or discard this patch.
Spacing   +15 added lines, -15 removed lines patch added patch discarded remove patch
@@ -123,8 +123,8 @@  discard block
 block discarded – undo
123 123
      */
124 124
     public static function set_definitions()
125 125
     {
126
-        define('EVENTS_ARCHIVE_ASSETS_URL', plugin_dir_url(__FILE__) . 'assets/');
127
-        define('EVENTS_ARCHIVE_TEMPLATES_PATH', str_replace('\\', '/', plugin_dir_path(__FILE__)) . 'templates/');
126
+        define('EVENTS_ARCHIVE_ASSETS_URL', plugin_dir_url(__FILE__).'assets/');
127
+        define('EVENTS_ARCHIVE_TEMPLATES_PATH', str_replace('\\', '/', plugin_dir_path(__FILE__)).'templates/');
128 128
     }
129 129
 
130 130
 
@@ -144,7 +144,7 @@  discard block
 block discarded – undo
144 144
      */
145 145
     public static function get_iframe_embed_button()
146 146
     {
147
-        if (! self::$_iframe_embed_button instanceof EventListIframeEmbedButton) {
147
+        if ( ! self::$_iframe_embed_button instanceof EventListIframeEmbedButton) {
148 148
             self::$_iframe_embed_button = new EventListIframeEmbedButton();
149 149
         }
150 150
         return self::$_iframe_embed_button;
@@ -228,10 +228,10 @@  discard block
 block discarded – undo
228 228
         EEH_Event_Query::add_query_filters();
229 229
         // set params that will get used by the filters
230 230
         EEH_Event_Query::set_query_params(
231
-            '',    // month
232
-            '',    // category
233
-            $config->display_expired_events,    // show_expired
234
-            'start_date',    // orderby
231
+            '', // month
232
+            '', // category
233
+            $config->display_expired_events, // show_expired
234
+            'start_date', // orderby
235 235
             'ASC'    // sort
236 236
         );
237 237
         // check what template is loaded
@@ -297,7 +297,7 @@  discard block
 block discarded – undo
297 297
     public function template_include($template = '')
298 298
     {
299 299
         // don't add content filter for dedicated EE child themes or private posts
300
-        if (! EEH_Template::is_espresso_theme()) {
300
+        if ( ! EEH_Template::is_espresso_theme()) {
301 301
             /** @type EE_Events_Archive_Config $config */
302 302
             $config = $this->config();
303 303
             // add status banner ?
@@ -396,7 +396,7 @@  discard block
 block discarded – undo
396 396
     {
397 397
         global $post;
398 398
         if ($post instanceof WP_Post) {
399
-            return in_the_loop() && $post->ID == $id ? espresso_event_status_banner($post->ID) . $title : $title;
399
+            return in_the_loop() && $post->ID == $id ? espresso_event_status_banner($post->ID).$title : $title;
400 400
         }
401 401
         return $title;
402 402
     }
@@ -547,7 +547,7 @@  discard block
 block discarded – undo
547 547
         if (post_password_required()) {
548 548
             return $content;
549 549
         }
550
-        return EEH_Template::locate_template('content-espresso_events-datetimes.php') . $content;
550
+        return EEH_Template::locate_template('content-espresso_events-datetimes.php').$content;
551 551
     }
552 552
 
553 553
 
@@ -563,7 +563,7 @@  discard block
 block discarded – undo
563 563
         if (post_password_required()) {
564 564
             return $content;
565 565
         }
566
-        return EEH_Template::locate_template('content-espresso_events-tickets.php') . $content;
566
+        return EEH_Template::locate_template('content-espresso_events-tickets.php').$content;
567 567
     }
568 568
 
569 569
 
@@ -592,7 +592,7 @@  discard block
 block discarded – undo
592 592
         if (post_password_required()) {
593 593
             return $content;
594 594
         }
595
-        return $content . EEH_Template::locate_template('content-espresso_events-venues.php');
595
+        return $content.EEH_Template::locate_template('content-espresso_events-venues.php');
596 596
     }
597 597
 
598 598
 
@@ -777,10 +777,10 @@  discard block
 block discarded – undo
777 777
         // get some style
778 778
         if (apply_filters('FHEE_enable_default_espresso_css', false)) {
779 779
             // first check uploads folder
780
-            if (EEH_File::is_readable(get_stylesheet_directory() . $this->theme . '/style.css')) {
780
+            if (EEH_File::is_readable(get_stylesheet_directory().$this->theme.'/style.css')) {
781 781
                 wp_register_style(
782 782
                     $this->theme,
783
-                    get_stylesheet_directory_uri() . $this->theme . '/style.css',
783
+                    get_stylesheet_directory_uri().$this->theme.'/style.css',
784 784
                     array('dashicons', 'espresso_default')
785 785
                 );
786 786
             } else {
@@ -819,7 +819,7 @@  discard block
 block discarded – undo
819 819
             (array) $template_settings->EED_Events_Archive
820 820
         );
821 821
         EEH_Template::display_template(
822
-            EVENTS_ARCHIVE_TEMPLATES_PATH . 'admin-event-list-settings.template.php',
822
+            EVENTS_ARCHIVE_TEMPLATES_PATH.'admin-event-list-settings.template.php',
823 823
             $events_archive_settings
824 824
         );
825 825
     }
Please login to merge, or discard this patch.
payment_methods/Paypal_Express/EEG_Paypal_Express.gateway.php 3 patches
Doc Comments   +2 added lines, -2 removed lines patch added patch discarded remove patch
@@ -20,8 +20,8 @@
 block discarded – undo
20 20
      * Very simple mimic of mb_substr (which WP ensures exists in wp-includes/compat.php). Still has all the problems of mb_substr
21 21
      * (namely, that we might send too many characters to PayPal; however in this case they just issue a warning but nothing breaks)
22 22
      * @param $string
23
-     * @param $start
24
-     * @param $length
23
+     * @param integer $start
24
+     * @param integer $length
25 25
      * @return bool|string
26 26
      */
27 27
     function mb_strcut($string, $start, $length = null)
Please login to merge, or discard this patch.
Indentation   +669 added lines, -669 removed lines patch added patch discarded remove patch
@@ -13,677 +13,677 @@
 block discarded – undo
13 13
 
14 14
 // Quickfix to address https://events.codebasehq.com/projects/event-espresso/tickets/11089 ASAP
15 15
 if (! function_exists('mb_strcut')) {
16
-    /**
17
-     * Very simple mimic of mb_substr (which WP ensures exists in wp-includes/compat.php). Still has all the problems of mb_substr
18
-     * (namely, that we might send too many characters to PayPal; however in this case they just issue a warning but nothing breaks)
19
-     * @param $string
20
-     * @param $start
21
-     * @param $length
22
-     * @return bool|string
23
-     */
24
-    function mb_strcut($string, $start, $length = null)
25
-    {
26
-        return mb_substr($string, $start, $length);
27
-    }
16
+	/**
17
+	 * Very simple mimic of mb_substr (which WP ensures exists in wp-includes/compat.php). Still has all the problems of mb_substr
18
+	 * (namely, that we might send too many characters to PayPal; however in this case they just issue a warning but nothing breaks)
19
+	 * @param $string
20
+	 * @param $start
21
+	 * @param $length
22
+	 * @return bool|string
23
+	 */
24
+	function mb_strcut($string, $start, $length = null)
25
+	{
26
+		return mb_substr($string, $start, $length);
27
+	}
28 28
 }
29 29
 class EEG_Paypal_Express extends EE_Offsite_Gateway
30 30
 {
31 31
 
32
-    /**
33
-     * Merchant API Username.
34
-     *
35
-     * @var string
36
-     */
37
-    protected $_api_username;
38
-
39
-    /**
40
-     * Merchant API Password.
41
-     *
42
-     * @var string
43
-     */
44
-    protected $_api_password;
45
-
46
-    /**
47
-     * API Signature.
48
-     *
49
-     * @var string
50
-     */
51
-    protected $_api_signature;
52
-
53
-    /**
54
-     * Request Shipping address on PP checkout page.
55
-     *
56
-     * @var string
57
-     */
58
-    protected $_request_shipping_addr;
59
-
60
-    /**
61
-     * Business/personal logo.
62
-     *
63
-     * @var string
64
-     */
65
-    protected $_image_url;
66
-
67
-    /**
68
-     * gateway URL variable
69
-     *
70
-     * @var string
71
-     */
72
-    protected $_base_gateway_url = '';
73
-
74
-
75
-
76
-    /**
77
-     * EEG_Paypal_Express constructor.
78
-     */
79
-    public function __construct()
80
-    {
81
-        $this->_currencies_supported = array(
82
-            'USD',
83
-            'AUD',
84
-            'BRL',
85
-            'CAD',
86
-            'CZK',
87
-            'DKK',
88
-            'EUR',
89
-            'HKD',
90
-            'HUF',
91
-            'ILS',
92
-            'JPY',
93
-            'MYR',
94
-            'MXN',
95
-            'NOK',
96
-            'NZD',
97
-            'PHP',
98
-            'PLN',
99
-            'GBP',
100
-            'RUB',
101
-            'SGD',
102
-            'SEK',
103
-            'CHF',
104
-            'TWD',
105
-            'THB',
106
-            'TRY',
107
-            'INR',
108
-        );
109
-        parent::__construct();
110
-    }
111
-
112
-
113
-
114
-    /**
115
-     * Sets the gateway URL variable based on whether debug mode is enabled or not.
116
-     *
117
-     * @param array $settings_array
118
-     */
119
-    public function set_settings($settings_array)
120
-    {
121
-        parent::set_settings($settings_array);
122
-        // Redirect URL.
123
-        $this->_base_gateway_url = $this->_debug_mode
124
-            ? 'https://api-3t.sandbox.paypal.com/nvp'
125
-            : 'https://api-3t.paypal.com/nvp';
126
-    }
127
-
128
-
129
-
130
-    /**
131
-     * @param EEI_Payment $payment
132
-     * @param array       $billing_info
133
-     * @param string      $return_url
134
-     * @param string      $notify_url
135
-     * @param string      $cancel_url
136
-     * @return \EE_Payment|\EEI_Payment
137
-     * @throws \EE_Error
138
-     */
139
-    public function set_redirection_info(
140
-        $payment,
141
-        $billing_info = array(),
142
-        $return_url = null,
143
-        $notify_url = null,
144
-        $cancel_url = null
145
-    ) {
146
-        if (! $payment instanceof EEI_Payment) {
147
-            $payment->set_gateway_response(
148
-                esc_html__(
149
-                    'Error. No associated payment was found.',
150
-                    'event_espresso'
151
-                )
152
-            );
153
-            $payment->set_status($this->_pay_model->failed_status());
154
-            return $payment;
155
-        }
156
-        $transaction = $payment->transaction();
157
-        if (! $transaction instanceof EEI_Transaction) {
158
-            $payment->set_gateway_response(
159
-                esc_html__(
160
-                    'Could not process this payment because it has no associated transaction.',
161
-                    'event_espresso'
162
-                )
163
-            );
164
-            $payment->set_status($this->_pay_model->failed_status());
165
-            return $payment;
166
-        }
167
-        $gateway_formatter = $this->_get_gateway_formatter();
168
-        $order_description = mb_strcut($gateway_formatter->formatOrderDescription($payment), 0, 127);
169
-        $primary_registration = $transaction->primary_registration();
170
-        $primary_attendee = $primary_registration instanceof EE_Registration
171
-            ? $primary_registration->attendee()
172
-            : false;
173
-        $locale = explode('-', get_bloginfo('language'));
174
-        // Gather request parameters.
175
-        $token_request_dtls = array(
176
-            'METHOD'                         => 'SetExpressCheckout',
177
-            'PAYMENTREQUEST_0_AMT'           => $payment->amount(),
178
-            'PAYMENTREQUEST_0_CURRENCYCODE'  => $payment->currency_code(),
179
-            'PAYMENTREQUEST_0_DESC'          => $order_description,
180
-            'RETURNURL'                      => $return_url,
181
-            'CANCELURL'                      => $cancel_url,
182
-            'PAYMENTREQUEST_0_PAYMENTACTION' => 'Sale',
183
-            // Buyer does not need to create a PayPal account to check out.
184
-            // This is referred to as PayPal Account Optional.
185
-            'SOLUTIONTYPE'                   => 'Sole',
186
-            // Locale of the pages displayed by PayPal during Express Checkout.
187
-            'LOCALECODE'                     => $locale[1]
188
-        );
189
-        // Show itemized list.
190
-        $itemized_list = $this->itemize_list($payment, $transaction);
191
-        $token_request_dtls = array_merge($token_request_dtls, $itemized_list);
192
-        // Automatically filling out shipping and contact information.
193
-        if ($this->_request_shipping_addr && $primary_attendee instanceof EEI_Attendee) {
194
-            // If you do not pass the shipping address, PayPal obtains it from the buyer's account profile.
195
-            $token_request_dtls['NOSHIPPING'] = '2';
196
-            $token_request_dtls['PAYMENTREQUEST_0_SHIPTOSTREET'] = $primary_attendee->address();
197
-            $token_request_dtls['PAYMENTREQUEST_0_SHIPTOSTREET2'] = $primary_attendee->address2();
198
-            $token_request_dtls['PAYMENTREQUEST_0_SHIPTOCITY'] = $primary_attendee->city();
199
-            $token_request_dtls['PAYMENTREQUEST_0_SHIPTOSTATE'] = $primary_attendee->state_abbrev();
200
-            $token_request_dtls['PAYMENTREQUEST_0_SHIPTOCOUNTRYCODE'] = $primary_attendee->country_ID();
201
-            $token_request_dtls['PAYMENTREQUEST_0_SHIPTOZIP'] = $primary_attendee->zip();
202
-            $token_request_dtls['PAYMENTREQUEST_0_EMAIL'] = $primary_attendee->email();
203
-            $token_request_dtls['PAYMENTREQUEST_0_SHIPTOPHONENUM'] = $primary_attendee->phone();
204
-        } elseif (! $this->_request_shipping_addr) {
205
-            // Do not request shipping details on the PP Checkout page.
206
-            $token_request_dtls['NOSHIPPING'] = '1';
207
-            $token_request_dtls['REQCONFIRMSHIPPING'] = '0';
208
-        }
209
-        // Used a business/personal logo on the PayPal page.
210
-        if (! empty($this->_image_url)) {
211
-            $token_request_dtls['LOGOIMG'] = $this->_image_url;
212
-        }
213
-        $token_request_dtls = apply_filters(
214
-            'FHEE__EEG_Paypal_Express__set_redirection_info__arguments',
215
-            $token_request_dtls,
216
-            $this
217
-        );
218
-        // Request PayPal token.
219
-        $token_request_response = $this->_ppExpress_request($token_request_dtls, 'Payment Token', $payment);
220
-        $token_rstatus = $this->_ppExpress_check_response($token_request_response);
221
-        $response_args = (isset($token_rstatus['args']) && is_array($token_rstatus['args']))
222
-            ? $token_rstatus['args']
223
-            : array();
224
-        if ($token_rstatus['status']) {
225
-            // We got the Token so we may continue with the payment and redirect the client.
226
-            $payment->set_details($response_args);
227
-            $gateway_url = $this->_debug_mode ? 'https://www.sandbox.paypal.com' : 'https://www.paypal.com';
228
-            $payment->set_redirect_url(
229
-                $gateway_url
230
-                . '/checkoutnow?useraction=commit&cmd=_express-checkout&token='
231
-                . $response_args['TOKEN']
232
-            );
233
-        } else {
234
-            if (isset($response_args['L_ERRORCODE'])) {
235
-                $payment->set_gateway_response($response_args['L_ERRORCODE'] . '; ' . $response_args['L_SHORTMESSAGE']);
236
-            } else {
237
-                $payment->set_gateway_response(
238
-                    esc_html__(
239
-                        'Error occurred while trying to setup the Express Checkout.',
240
-                        'event_espresso'
241
-                    )
242
-                );
243
-            }
244
-            $payment->set_details($response_args);
245
-            $payment->set_status($this->_pay_model->failed_status());
246
-        }
247
-        return $payment;
248
-    }
249
-
250
-
251
-
252
-    /**
253
-     * @param array           $update_info {
254
-     * @type string           $gateway_txn_id
255
-     * @type string status an EEMI_Payment status
256
-     *                                     }
257
-     * @param EEI_Transaction $transaction
258
-     * @return EEI_Payment
259
-     */
260
-    public function handle_payment_update($update_info, $transaction)
261
-    {
262
-        $payment = $transaction instanceof EEI_Transaction ? $transaction->last_payment() : null;
263
-        if ($payment instanceof EEI_Payment) {
264
-            $this->log(array('Return from Authorization' => $update_info), $payment);
265
-            $transaction = $payment->transaction();
266
-            if (! $transaction instanceof EEI_Transaction) {
267
-                $payment->set_gateway_response(
268
-                    esc_html__(
269
-                        'Could not process this payment because it has no associated transaction.',
270
-                        'event_espresso'
271
-                    )
272
-                );
273
-                $payment->set_status($this->_pay_model->failed_status());
274
-                return $payment;
275
-            }
276
-            $primary_registrant = $transaction->primary_registration();
277
-            $payment_details = $payment->details();
278
-            // Check if we still have the token.
279
-            if (! isset($payment_details['TOKEN']) || empty($payment_details['TOKEN'])) {
280
-                $payment->set_status($this->_pay_model->failed_status());
281
-                return $payment;
282
-            }
283
-            $cdetails_request_dtls = array(
284
-                'METHOD' => 'GetExpressCheckoutDetails',
285
-                'TOKEN'  => $payment_details['TOKEN'],
286
-            );
287
-            // Request Customer Details.
288
-            $cdetails_request_response = $this->_ppExpress_request(
289
-                $cdetails_request_dtls,
290
-                'Customer Details',
291
-                $payment
292
-            );
293
-            $cdetails_rstatus = $this->_ppExpress_check_response($cdetails_request_response);
294
-            $cdata_response_args = (isset($cdetails_rstatus['args']) && is_array($cdetails_rstatus['args']))
295
-                ? $cdetails_rstatus['args']
296
-                : array();
297
-            if ($cdetails_rstatus['status']) {
298
-                // We got the PayerID so now we can Complete the transaction.
299
-                $docheckout_request_dtls = array(
300
-                    'METHOD'                         => 'DoExpressCheckoutPayment',
301
-                    'PAYERID'                        => $cdata_response_args['PAYERID'],
302
-                    'TOKEN'                          => $payment_details['TOKEN'],
303
-                    'PAYMENTREQUEST_0_PAYMENTACTION' => 'Sale',
304
-                    'PAYMENTREQUEST_0_AMT'           => $payment->amount(),
305
-                    'PAYMENTREQUEST_0_CURRENCYCODE'  => $payment->currency_code(),
306
-                );
307
-                 // Include itemized list.
308
-                $itemized_list = $this->itemize_list(
309
-                    $payment,
310
-                    $transaction,
311
-                    $cdata_response_args
312
-                );
313
-                $docheckout_request_dtls = array_merge($docheckout_request_dtls, $itemized_list);
314
-                // Payment Checkout/Capture.
315
-                $docheckout_request_response = $this->_ppExpress_request(
316
-                    $docheckout_request_dtls,
317
-                    'Do Payment',
318
-                    $payment
319
-                );
320
-                $docheckout_rstatus = $this->_ppExpress_check_response($docheckout_request_response);
321
-                $docheckout_response_args = (isset($docheckout_rstatus['args']) && is_array($docheckout_rstatus['args']))
322
-                    ? $docheckout_rstatus['args']
323
-                    : array();
324
-                if ($docheckout_rstatus['status']) {
325
-                    // All is well, payment approved.
326
-                    $primary_registration_code = $primary_registrant instanceof EE_Registration ?
327
-                        $primary_registrant->reg_code()
328
-                        : '';
329
-                    $payment->set_extra_accntng($primary_registration_code);
330
-                    $payment->set_amount(isset($docheckout_response_args['PAYMENTINFO_0_AMT'])
331
-                        ? (float) $docheckout_response_args['PAYMENTINFO_0_AMT']
332
-                        : 0);
333
-                    $payment->set_txn_id_chq_nmbr(isset($docheckout_response_args['PAYMENTINFO_0_TRANSACTIONID'])
334
-                        ? $docheckout_response_args['PAYMENTINFO_0_TRANSACTIONID']
335
-                        : null);
336
-                    $payment->set_details($cdata_response_args);
337
-                    $payment->set_gateway_response(isset($docheckout_response_args['PAYMENTINFO_0_ACK'])
338
-                        ? $docheckout_response_args['PAYMENTINFO_0_ACK']
339
-                        : '');
340
-                    $payment->set_status($this->_pay_model->approved_status());
341
-                } else {
342
-                    if (isset($docheckout_response_args['L_ERRORCODE'])) {
343
-                        $payment->set_gateway_response(
344
-                            $docheckout_response_args['L_ERRORCODE']
345
-                            . '; '
346
-                            . $docheckout_response_args['L_SHORTMESSAGE']
347
-                        );
348
-                    } else {
349
-                        $payment->set_gateway_response(
350
-                            esc_html__(
351
-                                'Error occurred while trying to Capture the funds.',
352
-                                'event_espresso'
353
-                            )
354
-                        );
355
-                    }
356
-                    $payment->set_details($docheckout_response_args);
357
-                    $payment->set_status($this->_pay_model->declined_status());
358
-                }
359
-            } else {
360
-                if (isset($cdata_response_args['L_ERRORCODE'])) {
361
-                    $payment->set_gateway_response(
362
-                        $cdata_response_args['L_ERRORCODE']
363
-                        . '; '
364
-                        . $cdata_response_args['L_SHORTMESSAGE']
365
-                    );
366
-                } else {
367
-                    $payment->set_gateway_response(
368
-                        esc_html__(
369
-                            'Error occurred while trying to get payment Details from PayPal.',
370
-                            'event_espresso'
371
-                        )
372
-                    );
373
-                }
374
-                $payment->set_details($cdata_response_args);
375
-                $payment->set_status($this->_pay_model->failed_status());
376
-            }
377
-        } else {
378
-            $payment->set_gateway_response(
379
-                esc_html__(
380
-                    'Error occurred while trying to process the payment.',
381
-                    'event_espresso'
382
-                )
383
-            );
384
-            $payment->set_status($this->_pay_model->failed_status());
385
-        }
386
-        return $payment;
387
-    }
388
-
389
-
390
-
391
-    /**
392
-     *  Make a list of items that are in the giver transaction.
393
-     *
394
-     * @param EEI_Payment     $payment
395
-     * @param EEI_Transaction $transaction
396
-     * @param array           $request_response_args Data from a previous communication with PP.
397
-     * @return array
398
-     */
399
-    public function itemize_list(EEI_Payment $payment, EEI_Transaction $transaction, $request_response_args = array())
400
-    {
401
-        $itemized_list = array();
402
-        $gateway_formatter = $this->_get_gateway_formatter();
403
-        // If we have data from a previous communication with PP (on this transaction) we may use that for our list...
404
-        if (
405
-            ! empty($request_response_args)
406
-            && array_key_exists('L_PAYMENTREQUEST_0_AMT0', $request_response_args)
407
-            && array_key_exists('PAYMENTREQUEST_0_ITEMAMT', $request_response_args)
408
-        ) {
409
-            foreach ($request_response_args as $arg_key => $arg_val) {
410
-                if (
411
-                    strpos($arg_key, 'PAYMENTREQUEST_') !== false
412
-                    && strpos($arg_key, 'NOTIFYURL') === false
413
-                ) {
414
-                    $itemized_list[ $arg_key ] = $arg_val;
415
-                }
416
-            }
417
-            // If we got only a few Items then something is not right.
418
-            if (count($itemized_list) > 2) {
419
-                return $itemized_list;
420
-            } else {
421
-                if (WP_DEBUG) {
422
-                    throw new EE_Error(
423
-                        sprintf(
424
-                            esc_html__(
425
-                                // @codingStandardsIgnoreStart
426
-                                'Unable to continue with the checkout because a proper purchase list could not be generated. The purchased list we could have sent was %1$s',
427
-                                // @codingStandardsIgnoreEnd
428
-                                'event_espresso'
429
-                            ),
430
-                            wp_json_encode($itemized_list)
431
-                        )
432
-                    );
433
-                }
434
-                // Reset the list and log an error, maybe allow to try and generate a new list (below).
435
-                $itemized_list = array();
436
-                $this->log(
437
-                    array(
438
-                        (string) esc_html__(
439
-                            'Could not generate a proper item list with:',
440
-                            'event_espresso'
441
-                        ) => $request_response_args
442
-                    ),
443
-                    $payment
444
-                );
445
-            }
446
-        }
447
-        // ...otherwise we generate a new list for this transaction.
448
-        if ($this->_money->compare_floats($payment->amount(), $transaction->total(), '==')) {
449
-            $item_num = 0;
450
-            $itemized_sum = 0;
451
-            $total_line_items = $transaction->total_line_item();
452
-            // Go through each item in the list.
453
-            foreach ($total_line_items->get_items() as $line_item) {
454
-                if ($line_item instanceof EE_Line_Item) {
455
-                    // PayPal doesn't like line items with 0.00 amount, so we may skip those.
456
-                    if (EEH_Money::compare_floats($line_item->total(), '0.00', '==')) {
457
-                        continue;
458
-                    }
459
-                    $unit_price = $line_item->unit_price();
460
-                    $line_item_quantity = $line_item->quantity();
461
-                    // This is a discount.
462
-                    if ($line_item->is_percent()) {
463
-                        $unit_price = $line_item->total();
464
-                        $line_item_quantity = 1;
465
-                    }
466
-                    // Item Name.
467
-                    $itemized_list[ 'L_PAYMENTREQUEST_0_NAME' . $item_num ] = mb_strcut(
468
-                        $gateway_formatter->formatLineItemName($line_item, $payment),
469
-                        0,
470
-                        127
471
-                    );
472
-                    // Item description.
473
-                    $itemized_list[ 'L_PAYMENTREQUEST_0_DESC' . $item_num ] = mb_strcut(
474
-                        $gateway_formatter->formatLineItemDesc($line_item, $payment),
475
-                        0,
476
-                        127
477
-                    );
478
-                    // Cost of individual item.
479
-                    $itemized_list[ 'L_PAYMENTREQUEST_0_AMT' . $item_num ] = $gateway_formatter->formatCurrency($unit_price);
480
-                    // Item Number.
481
-                    $itemized_list[ 'L_PAYMENTREQUEST_0_NUMBER' . $item_num ] = $item_num + 1;
482
-                    // Item quantity.
483
-                    $itemized_list[ 'L_PAYMENTREQUEST_0_QTY' . $item_num ] = $line_item_quantity;
484
-                    // Digital item is sold.
485
-                    $itemized_list[ 'L_PAYMENTREQUEST_0_ITEMCATEGORY' . $item_num ] = 'Physical';
486
-                    $itemized_sum += $line_item->total();
487
-                    ++$item_num;
488
-                }
489
-            }
490
-            // Item's sales S/H and tax amount.
491
-            $itemized_list['PAYMENTREQUEST_0_ITEMAMT'] = $total_line_items->get_items_total();
492
-            $itemized_list['PAYMENTREQUEST_0_TAXAMT'] = $total_line_items->get_total_tax();
493
-            $itemized_list['PAYMENTREQUEST_0_SHIPPINGAMT'] = '0';
494
-            $itemized_list['PAYMENTREQUEST_0_HANDLINGAMT'] = '0';
495
-            $itemized_sum_diff_from_txn_total = round(
496
-                $transaction->total() - $itemized_sum - $total_line_items->get_total_tax(),
497
-                2
498
-            );
499
-            // If we were not able to recognize some item like promotion, surcharge or cancellation,
500
-            // add the difference as an extra line item.
501
-            if ($this->_money->compare_floats($itemized_sum_diff_from_txn_total, 0, '!=')) {
502
-                // Item Name.
503
-                $itemized_list[ 'L_PAYMENTREQUEST_0_NAME' . $item_num ] = mb_strcut(
504
-                    esc_html__(
505
-                        'Other (promotion/surcharge/cancellation)',
506
-                        'event_espresso'
507
-                    ),
508
-                    0,
509
-                    127
510
-                );
511
-                // Item description.
512
-                $itemized_list[ 'L_PAYMENTREQUEST_0_DESC' . $item_num ] = '';
513
-                // Cost of individual item.
514
-                $itemized_list[ 'L_PAYMENTREQUEST_0_AMT' . $item_num ] = $gateway_formatter->formatCurrency(
515
-                    $itemized_sum_diff_from_txn_total
516
-                );
517
-                // Item Number.
518
-                $itemized_list[ 'L_PAYMENTREQUEST_0_NUMBER' . $item_num ] = $item_num + 1;
519
-                // Item quantity.
520
-                $itemized_list[ 'L_PAYMENTREQUEST_0_QTY' . $item_num ] = 1;
521
-                // Digital item is sold.
522
-                $itemized_list[ 'L_PAYMENTREQUEST_0_ITEMCATEGORY' . $item_num ] = 'Physical';
523
-                $item_num++;
524
-            }
525
-        } else {
526
-            // Just one Item.
527
-            // Item Name.
528
-            $itemized_list['L_PAYMENTREQUEST_0_NAME0'] = mb_strcut(
529
-                $gateway_formatter->formatPartialPaymentLineItemName($payment),
530
-                0,
531
-                127
532
-            );
533
-            // Item description.
534
-            $itemized_list['L_PAYMENTREQUEST_0_DESC0'] = mb_strcut(
535
-                $gateway_formatter->formatPartialPaymentLineItemDesc($payment),
536
-                0,
537
-                127
538
-            );
539
-            // Cost of individual item.
540
-            $itemized_list['L_PAYMENTREQUEST_0_AMT0'] = $gateway_formatter->formatCurrency($payment->amount());
541
-            // Item Number.
542
-            $itemized_list['L_PAYMENTREQUEST_0_NUMBER0'] = 1;
543
-            // Item quantity.
544
-            $itemized_list['L_PAYMENTREQUEST_0_QTY0'] = 1;
545
-            // Digital item is sold.
546
-            $itemized_list['L_PAYMENTREQUEST_0_ITEMCATEGORY0'] = 'Physical';
547
-            // Item's sales S/H and tax amount.
548
-            $itemized_list['PAYMENTREQUEST_0_ITEMAMT'] = $gateway_formatter->formatCurrency($payment->amount());
549
-            $itemized_list['PAYMENTREQUEST_0_TAXAMT'] = '0';
550
-            $itemized_list['PAYMENTREQUEST_0_SHIPPINGAMT'] = '0';
551
-            $itemized_list['PAYMENTREQUEST_0_HANDLINGAMT'] = '0';
552
-        }
553
-        return $itemized_list;
554
-    }
555
-
556
-
557
-
558
-    /**
559
-     *  Make the Express checkout request.
560
-     *
561
-     * @param array       $request_params
562
-     * @param string      $request_text
563
-     * @param EEI_Payment $payment
564
-     * @return mixed
565
-     */
566
-    public function _ppExpress_request($request_params, $request_text, $payment)
567
-    {
568
-        $request_dtls = array(
569
-            'VERSION' => '204.0',
570
-            'USER' => $this->_api_username,
571
-            'PWD' => $this->_api_password,
572
-            'SIGNATURE' => $this->_api_signature,
573
-            // EE will blow up if you change this
574
-            'BUTTONSOURCE' => 'EventEspresso_SP',
575
-        );
576
-        $dtls = array_merge($request_dtls, $request_params);
577
-        $this->_log_clean_request($dtls, $payment, $request_text . ' Request');
578
-        // Request Customer Details.
579
-        $request_response = wp_remote_post(
580
-            $this->_base_gateway_url,
581
-            array(
582
-                'method'      => 'POST',
583
-                'timeout'     => 45,
584
-                'httpversion' => '1.1',
585
-                'cookies'     => array(),
586
-                'headers'     => array(),
587
-                'body'        => http_build_query($dtls, '', '&'),
588
-            )
589
-        );
590
-        // Log the response.
591
-        $this->log(array($request_text . ' Response' => $request_response), $payment);
592
-        return $request_response;
593
-    }
594
-
595
-
596
-
597
-    /**
598
-     *  Check the response status.
599
-     *
600
-     * @param mixed $request_response
601
-     * @return array
602
-     */
603
-    public function _ppExpress_check_response($request_response)
604
-    {
605
-        if (is_wp_error($request_response) || empty($request_response['body'])) {
606
-            // If we got here then there was an error in this request.
607
-            return array('status' => false, 'args' => $request_response);
608
-        }
609
-        $response_args = array();
610
-        parse_str(urldecode($request_response['body']), $response_args);
611
-        if (! isset($response_args['ACK'])) {
612
-            return array('status' => false, 'args' => $request_response);
613
-        }
614
-        if (
615
-            (
616
-                isset($response_args['PAYERID'])
617
-                || isset($response_args['TOKEN'])
618
-                || isset($response_args['PAYMENTINFO_0_TRANSACTIONID'])
619
-                || (isset($response_args['PAYMENTSTATUS']) && $response_args['PAYMENTSTATUS'] === 'Completed')
620
-            )
621
-            && in_array($response_args['ACK'], array('Success', 'SuccessWithWarning'), true)
622
-        ) {
623
-            // Response status OK, return response parameters for further processing.
624
-            return array('status' => true, 'args' => $response_args);
625
-        }
626
-        $errors = $this->_get_errors($response_args);
627
-        return array('status' => false, 'args' => $errors);
628
-    }
629
-
630
-
631
-
632
-    /**
633
-     *  Log a "Cleared" request.
634
-     *
635
-     * @param array       $request
636
-     * @param EEI_Payment $payment
637
-     * @param string      $info
638
-     * @return void
639
-     */
640
-    private function _log_clean_request($request, $payment, $info)
641
-    {
642
-        $cleaned_request_data = $request;
643
-        unset($cleaned_request_data['PWD'], $cleaned_request_data['USER'], $cleaned_request_data['SIGNATURE']);
644
-        $this->log(array($info => $cleaned_request_data), $payment);
645
-    }
646
-
647
-
648
-
649
-    /**
650
-     *  Get error from the response data.
651
-     *
652
-     * @param array $data_array
653
-     * @return array
654
-     */
655
-    private function _get_errors($data_array)
656
-    {
657
-        $errors = array();
658
-        $n = 0;
659
-        while (isset($data_array[ "L_ERRORCODE{$n}" ])) {
660
-            $l_error_code = isset($data_array[ "L_ERRORCODE{$n}" ])
661
-                ? $data_array[ "L_ERRORCODE{$n}" ]
662
-                : '';
663
-            $l_severity_code = isset($data_array[ "L_SEVERITYCODE{$n}" ])
664
-                ? $data_array[ "L_SEVERITYCODE{$n}" ]
665
-                : '';
666
-            $l_short_message = isset($data_array[ "L_SHORTMESSAGE{$n}" ])
667
-                ? $data_array[ "L_SHORTMESSAGE{$n}" ]
668
-                : '';
669
-            $l_long_message = isset($data_array[ "L_LONGMESSAGE{$n}" ])
670
-                ? $data_array[ "L_LONGMESSAGE{$n}" ]
671
-                : '';
672
-            if ($n === 0) {
673
-                $errors = array(
674
-                    'L_ERRORCODE'    => $l_error_code,
675
-                    'L_SHORTMESSAGE' => $l_short_message,
676
-                    'L_LONGMESSAGE'  => $l_long_message,
677
-                    'L_SEVERITYCODE' => $l_severity_code,
678
-                );
679
-            } else {
680
-                $errors['L_ERRORCODE'] .= ', ' . $l_error_code;
681
-                $errors['L_SHORTMESSAGE'] .= ', ' . $l_short_message;
682
-                $errors['L_LONGMESSAGE'] .= ', ' . $l_long_message;
683
-                $errors['L_SEVERITYCODE'] .= ', ' . $l_severity_code;
684
-            }
685
-            $n++;
686
-        }
687
-        return $errors;
688
-    }
32
+	/**
33
+	 * Merchant API Username.
34
+	 *
35
+	 * @var string
36
+	 */
37
+	protected $_api_username;
38
+
39
+	/**
40
+	 * Merchant API Password.
41
+	 *
42
+	 * @var string
43
+	 */
44
+	protected $_api_password;
45
+
46
+	/**
47
+	 * API Signature.
48
+	 *
49
+	 * @var string
50
+	 */
51
+	protected $_api_signature;
52
+
53
+	/**
54
+	 * Request Shipping address on PP checkout page.
55
+	 *
56
+	 * @var string
57
+	 */
58
+	protected $_request_shipping_addr;
59
+
60
+	/**
61
+	 * Business/personal logo.
62
+	 *
63
+	 * @var string
64
+	 */
65
+	protected $_image_url;
66
+
67
+	/**
68
+	 * gateway URL variable
69
+	 *
70
+	 * @var string
71
+	 */
72
+	protected $_base_gateway_url = '';
73
+
74
+
75
+
76
+	/**
77
+	 * EEG_Paypal_Express constructor.
78
+	 */
79
+	public function __construct()
80
+	{
81
+		$this->_currencies_supported = array(
82
+			'USD',
83
+			'AUD',
84
+			'BRL',
85
+			'CAD',
86
+			'CZK',
87
+			'DKK',
88
+			'EUR',
89
+			'HKD',
90
+			'HUF',
91
+			'ILS',
92
+			'JPY',
93
+			'MYR',
94
+			'MXN',
95
+			'NOK',
96
+			'NZD',
97
+			'PHP',
98
+			'PLN',
99
+			'GBP',
100
+			'RUB',
101
+			'SGD',
102
+			'SEK',
103
+			'CHF',
104
+			'TWD',
105
+			'THB',
106
+			'TRY',
107
+			'INR',
108
+		);
109
+		parent::__construct();
110
+	}
111
+
112
+
113
+
114
+	/**
115
+	 * Sets the gateway URL variable based on whether debug mode is enabled or not.
116
+	 *
117
+	 * @param array $settings_array
118
+	 */
119
+	public function set_settings($settings_array)
120
+	{
121
+		parent::set_settings($settings_array);
122
+		// Redirect URL.
123
+		$this->_base_gateway_url = $this->_debug_mode
124
+			? 'https://api-3t.sandbox.paypal.com/nvp'
125
+			: 'https://api-3t.paypal.com/nvp';
126
+	}
127
+
128
+
129
+
130
+	/**
131
+	 * @param EEI_Payment $payment
132
+	 * @param array       $billing_info
133
+	 * @param string      $return_url
134
+	 * @param string      $notify_url
135
+	 * @param string      $cancel_url
136
+	 * @return \EE_Payment|\EEI_Payment
137
+	 * @throws \EE_Error
138
+	 */
139
+	public function set_redirection_info(
140
+		$payment,
141
+		$billing_info = array(),
142
+		$return_url = null,
143
+		$notify_url = null,
144
+		$cancel_url = null
145
+	) {
146
+		if (! $payment instanceof EEI_Payment) {
147
+			$payment->set_gateway_response(
148
+				esc_html__(
149
+					'Error. No associated payment was found.',
150
+					'event_espresso'
151
+				)
152
+			);
153
+			$payment->set_status($this->_pay_model->failed_status());
154
+			return $payment;
155
+		}
156
+		$transaction = $payment->transaction();
157
+		if (! $transaction instanceof EEI_Transaction) {
158
+			$payment->set_gateway_response(
159
+				esc_html__(
160
+					'Could not process this payment because it has no associated transaction.',
161
+					'event_espresso'
162
+				)
163
+			);
164
+			$payment->set_status($this->_pay_model->failed_status());
165
+			return $payment;
166
+		}
167
+		$gateway_formatter = $this->_get_gateway_formatter();
168
+		$order_description = mb_strcut($gateway_formatter->formatOrderDescription($payment), 0, 127);
169
+		$primary_registration = $transaction->primary_registration();
170
+		$primary_attendee = $primary_registration instanceof EE_Registration
171
+			? $primary_registration->attendee()
172
+			: false;
173
+		$locale = explode('-', get_bloginfo('language'));
174
+		// Gather request parameters.
175
+		$token_request_dtls = array(
176
+			'METHOD'                         => 'SetExpressCheckout',
177
+			'PAYMENTREQUEST_0_AMT'           => $payment->amount(),
178
+			'PAYMENTREQUEST_0_CURRENCYCODE'  => $payment->currency_code(),
179
+			'PAYMENTREQUEST_0_DESC'          => $order_description,
180
+			'RETURNURL'                      => $return_url,
181
+			'CANCELURL'                      => $cancel_url,
182
+			'PAYMENTREQUEST_0_PAYMENTACTION' => 'Sale',
183
+			// Buyer does not need to create a PayPal account to check out.
184
+			// This is referred to as PayPal Account Optional.
185
+			'SOLUTIONTYPE'                   => 'Sole',
186
+			// Locale of the pages displayed by PayPal during Express Checkout.
187
+			'LOCALECODE'                     => $locale[1]
188
+		);
189
+		// Show itemized list.
190
+		$itemized_list = $this->itemize_list($payment, $transaction);
191
+		$token_request_dtls = array_merge($token_request_dtls, $itemized_list);
192
+		// Automatically filling out shipping and contact information.
193
+		if ($this->_request_shipping_addr && $primary_attendee instanceof EEI_Attendee) {
194
+			// If you do not pass the shipping address, PayPal obtains it from the buyer's account profile.
195
+			$token_request_dtls['NOSHIPPING'] = '2';
196
+			$token_request_dtls['PAYMENTREQUEST_0_SHIPTOSTREET'] = $primary_attendee->address();
197
+			$token_request_dtls['PAYMENTREQUEST_0_SHIPTOSTREET2'] = $primary_attendee->address2();
198
+			$token_request_dtls['PAYMENTREQUEST_0_SHIPTOCITY'] = $primary_attendee->city();
199
+			$token_request_dtls['PAYMENTREQUEST_0_SHIPTOSTATE'] = $primary_attendee->state_abbrev();
200
+			$token_request_dtls['PAYMENTREQUEST_0_SHIPTOCOUNTRYCODE'] = $primary_attendee->country_ID();
201
+			$token_request_dtls['PAYMENTREQUEST_0_SHIPTOZIP'] = $primary_attendee->zip();
202
+			$token_request_dtls['PAYMENTREQUEST_0_EMAIL'] = $primary_attendee->email();
203
+			$token_request_dtls['PAYMENTREQUEST_0_SHIPTOPHONENUM'] = $primary_attendee->phone();
204
+		} elseif (! $this->_request_shipping_addr) {
205
+			// Do not request shipping details on the PP Checkout page.
206
+			$token_request_dtls['NOSHIPPING'] = '1';
207
+			$token_request_dtls['REQCONFIRMSHIPPING'] = '0';
208
+		}
209
+		// Used a business/personal logo on the PayPal page.
210
+		if (! empty($this->_image_url)) {
211
+			$token_request_dtls['LOGOIMG'] = $this->_image_url;
212
+		}
213
+		$token_request_dtls = apply_filters(
214
+			'FHEE__EEG_Paypal_Express__set_redirection_info__arguments',
215
+			$token_request_dtls,
216
+			$this
217
+		);
218
+		// Request PayPal token.
219
+		$token_request_response = $this->_ppExpress_request($token_request_dtls, 'Payment Token', $payment);
220
+		$token_rstatus = $this->_ppExpress_check_response($token_request_response);
221
+		$response_args = (isset($token_rstatus['args']) && is_array($token_rstatus['args']))
222
+			? $token_rstatus['args']
223
+			: array();
224
+		if ($token_rstatus['status']) {
225
+			// We got the Token so we may continue with the payment and redirect the client.
226
+			$payment->set_details($response_args);
227
+			$gateway_url = $this->_debug_mode ? 'https://www.sandbox.paypal.com' : 'https://www.paypal.com';
228
+			$payment->set_redirect_url(
229
+				$gateway_url
230
+				. '/checkoutnow?useraction=commit&cmd=_express-checkout&token='
231
+				. $response_args['TOKEN']
232
+			);
233
+		} else {
234
+			if (isset($response_args['L_ERRORCODE'])) {
235
+				$payment->set_gateway_response($response_args['L_ERRORCODE'] . '; ' . $response_args['L_SHORTMESSAGE']);
236
+			} else {
237
+				$payment->set_gateway_response(
238
+					esc_html__(
239
+						'Error occurred while trying to setup the Express Checkout.',
240
+						'event_espresso'
241
+					)
242
+				);
243
+			}
244
+			$payment->set_details($response_args);
245
+			$payment->set_status($this->_pay_model->failed_status());
246
+		}
247
+		return $payment;
248
+	}
249
+
250
+
251
+
252
+	/**
253
+	 * @param array           $update_info {
254
+	 * @type string           $gateway_txn_id
255
+	 * @type string status an EEMI_Payment status
256
+	 *                                     }
257
+	 * @param EEI_Transaction $transaction
258
+	 * @return EEI_Payment
259
+	 */
260
+	public function handle_payment_update($update_info, $transaction)
261
+	{
262
+		$payment = $transaction instanceof EEI_Transaction ? $transaction->last_payment() : null;
263
+		if ($payment instanceof EEI_Payment) {
264
+			$this->log(array('Return from Authorization' => $update_info), $payment);
265
+			$transaction = $payment->transaction();
266
+			if (! $transaction instanceof EEI_Transaction) {
267
+				$payment->set_gateway_response(
268
+					esc_html__(
269
+						'Could not process this payment because it has no associated transaction.',
270
+						'event_espresso'
271
+					)
272
+				);
273
+				$payment->set_status($this->_pay_model->failed_status());
274
+				return $payment;
275
+			}
276
+			$primary_registrant = $transaction->primary_registration();
277
+			$payment_details = $payment->details();
278
+			// Check if we still have the token.
279
+			if (! isset($payment_details['TOKEN']) || empty($payment_details['TOKEN'])) {
280
+				$payment->set_status($this->_pay_model->failed_status());
281
+				return $payment;
282
+			}
283
+			$cdetails_request_dtls = array(
284
+				'METHOD' => 'GetExpressCheckoutDetails',
285
+				'TOKEN'  => $payment_details['TOKEN'],
286
+			);
287
+			// Request Customer Details.
288
+			$cdetails_request_response = $this->_ppExpress_request(
289
+				$cdetails_request_dtls,
290
+				'Customer Details',
291
+				$payment
292
+			);
293
+			$cdetails_rstatus = $this->_ppExpress_check_response($cdetails_request_response);
294
+			$cdata_response_args = (isset($cdetails_rstatus['args']) && is_array($cdetails_rstatus['args']))
295
+				? $cdetails_rstatus['args']
296
+				: array();
297
+			if ($cdetails_rstatus['status']) {
298
+				// We got the PayerID so now we can Complete the transaction.
299
+				$docheckout_request_dtls = array(
300
+					'METHOD'                         => 'DoExpressCheckoutPayment',
301
+					'PAYERID'                        => $cdata_response_args['PAYERID'],
302
+					'TOKEN'                          => $payment_details['TOKEN'],
303
+					'PAYMENTREQUEST_0_PAYMENTACTION' => 'Sale',
304
+					'PAYMENTREQUEST_0_AMT'           => $payment->amount(),
305
+					'PAYMENTREQUEST_0_CURRENCYCODE'  => $payment->currency_code(),
306
+				);
307
+				 // Include itemized list.
308
+				$itemized_list = $this->itemize_list(
309
+					$payment,
310
+					$transaction,
311
+					$cdata_response_args
312
+				);
313
+				$docheckout_request_dtls = array_merge($docheckout_request_dtls, $itemized_list);
314
+				// Payment Checkout/Capture.
315
+				$docheckout_request_response = $this->_ppExpress_request(
316
+					$docheckout_request_dtls,
317
+					'Do Payment',
318
+					$payment
319
+				);
320
+				$docheckout_rstatus = $this->_ppExpress_check_response($docheckout_request_response);
321
+				$docheckout_response_args = (isset($docheckout_rstatus['args']) && is_array($docheckout_rstatus['args']))
322
+					? $docheckout_rstatus['args']
323
+					: array();
324
+				if ($docheckout_rstatus['status']) {
325
+					// All is well, payment approved.
326
+					$primary_registration_code = $primary_registrant instanceof EE_Registration ?
327
+						$primary_registrant->reg_code()
328
+						: '';
329
+					$payment->set_extra_accntng($primary_registration_code);
330
+					$payment->set_amount(isset($docheckout_response_args['PAYMENTINFO_0_AMT'])
331
+						? (float) $docheckout_response_args['PAYMENTINFO_0_AMT']
332
+						: 0);
333
+					$payment->set_txn_id_chq_nmbr(isset($docheckout_response_args['PAYMENTINFO_0_TRANSACTIONID'])
334
+						? $docheckout_response_args['PAYMENTINFO_0_TRANSACTIONID']
335
+						: null);
336
+					$payment->set_details($cdata_response_args);
337
+					$payment->set_gateway_response(isset($docheckout_response_args['PAYMENTINFO_0_ACK'])
338
+						? $docheckout_response_args['PAYMENTINFO_0_ACK']
339
+						: '');
340
+					$payment->set_status($this->_pay_model->approved_status());
341
+				} else {
342
+					if (isset($docheckout_response_args['L_ERRORCODE'])) {
343
+						$payment->set_gateway_response(
344
+							$docheckout_response_args['L_ERRORCODE']
345
+							. '; '
346
+							. $docheckout_response_args['L_SHORTMESSAGE']
347
+						);
348
+					} else {
349
+						$payment->set_gateway_response(
350
+							esc_html__(
351
+								'Error occurred while trying to Capture the funds.',
352
+								'event_espresso'
353
+							)
354
+						);
355
+					}
356
+					$payment->set_details($docheckout_response_args);
357
+					$payment->set_status($this->_pay_model->declined_status());
358
+				}
359
+			} else {
360
+				if (isset($cdata_response_args['L_ERRORCODE'])) {
361
+					$payment->set_gateway_response(
362
+						$cdata_response_args['L_ERRORCODE']
363
+						. '; '
364
+						. $cdata_response_args['L_SHORTMESSAGE']
365
+					);
366
+				} else {
367
+					$payment->set_gateway_response(
368
+						esc_html__(
369
+							'Error occurred while trying to get payment Details from PayPal.',
370
+							'event_espresso'
371
+						)
372
+					);
373
+				}
374
+				$payment->set_details($cdata_response_args);
375
+				$payment->set_status($this->_pay_model->failed_status());
376
+			}
377
+		} else {
378
+			$payment->set_gateway_response(
379
+				esc_html__(
380
+					'Error occurred while trying to process the payment.',
381
+					'event_espresso'
382
+				)
383
+			);
384
+			$payment->set_status($this->_pay_model->failed_status());
385
+		}
386
+		return $payment;
387
+	}
388
+
389
+
390
+
391
+	/**
392
+	 *  Make a list of items that are in the giver transaction.
393
+	 *
394
+	 * @param EEI_Payment     $payment
395
+	 * @param EEI_Transaction $transaction
396
+	 * @param array           $request_response_args Data from a previous communication with PP.
397
+	 * @return array
398
+	 */
399
+	public function itemize_list(EEI_Payment $payment, EEI_Transaction $transaction, $request_response_args = array())
400
+	{
401
+		$itemized_list = array();
402
+		$gateway_formatter = $this->_get_gateway_formatter();
403
+		// If we have data from a previous communication with PP (on this transaction) we may use that for our list...
404
+		if (
405
+			! empty($request_response_args)
406
+			&& array_key_exists('L_PAYMENTREQUEST_0_AMT0', $request_response_args)
407
+			&& array_key_exists('PAYMENTREQUEST_0_ITEMAMT', $request_response_args)
408
+		) {
409
+			foreach ($request_response_args as $arg_key => $arg_val) {
410
+				if (
411
+					strpos($arg_key, 'PAYMENTREQUEST_') !== false
412
+					&& strpos($arg_key, 'NOTIFYURL') === false
413
+				) {
414
+					$itemized_list[ $arg_key ] = $arg_val;
415
+				}
416
+			}
417
+			// If we got only a few Items then something is not right.
418
+			if (count($itemized_list) > 2) {
419
+				return $itemized_list;
420
+			} else {
421
+				if (WP_DEBUG) {
422
+					throw new EE_Error(
423
+						sprintf(
424
+							esc_html__(
425
+								// @codingStandardsIgnoreStart
426
+								'Unable to continue with the checkout because a proper purchase list could not be generated. The purchased list we could have sent was %1$s',
427
+								// @codingStandardsIgnoreEnd
428
+								'event_espresso'
429
+							),
430
+							wp_json_encode($itemized_list)
431
+						)
432
+					);
433
+				}
434
+				// Reset the list and log an error, maybe allow to try and generate a new list (below).
435
+				$itemized_list = array();
436
+				$this->log(
437
+					array(
438
+						(string) esc_html__(
439
+							'Could not generate a proper item list with:',
440
+							'event_espresso'
441
+						) => $request_response_args
442
+					),
443
+					$payment
444
+				);
445
+			}
446
+		}
447
+		// ...otherwise we generate a new list for this transaction.
448
+		if ($this->_money->compare_floats($payment->amount(), $transaction->total(), '==')) {
449
+			$item_num = 0;
450
+			$itemized_sum = 0;
451
+			$total_line_items = $transaction->total_line_item();
452
+			// Go through each item in the list.
453
+			foreach ($total_line_items->get_items() as $line_item) {
454
+				if ($line_item instanceof EE_Line_Item) {
455
+					// PayPal doesn't like line items with 0.00 amount, so we may skip those.
456
+					if (EEH_Money::compare_floats($line_item->total(), '0.00', '==')) {
457
+						continue;
458
+					}
459
+					$unit_price = $line_item->unit_price();
460
+					$line_item_quantity = $line_item->quantity();
461
+					// This is a discount.
462
+					if ($line_item->is_percent()) {
463
+						$unit_price = $line_item->total();
464
+						$line_item_quantity = 1;
465
+					}
466
+					// Item Name.
467
+					$itemized_list[ 'L_PAYMENTREQUEST_0_NAME' . $item_num ] = mb_strcut(
468
+						$gateway_formatter->formatLineItemName($line_item, $payment),
469
+						0,
470
+						127
471
+					);
472
+					// Item description.
473
+					$itemized_list[ 'L_PAYMENTREQUEST_0_DESC' . $item_num ] = mb_strcut(
474
+						$gateway_formatter->formatLineItemDesc($line_item, $payment),
475
+						0,
476
+						127
477
+					);
478
+					// Cost of individual item.
479
+					$itemized_list[ 'L_PAYMENTREQUEST_0_AMT' . $item_num ] = $gateway_formatter->formatCurrency($unit_price);
480
+					// Item Number.
481
+					$itemized_list[ 'L_PAYMENTREQUEST_0_NUMBER' . $item_num ] = $item_num + 1;
482
+					// Item quantity.
483
+					$itemized_list[ 'L_PAYMENTREQUEST_0_QTY' . $item_num ] = $line_item_quantity;
484
+					// Digital item is sold.
485
+					$itemized_list[ 'L_PAYMENTREQUEST_0_ITEMCATEGORY' . $item_num ] = 'Physical';
486
+					$itemized_sum += $line_item->total();
487
+					++$item_num;
488
+				}
489
+			}
490
+			// Item's sales S/H and tax amount.
491
+			$itemized_list['PAYMENTREQUEST_0_ITEMAMT'] = $total_line_items->get_items_total();
492
+			$itemized_list['PAYMENTREQUEST_0_TAXAMT'] = $total_line_items->get_total_tax();
493
+			$itemized_list['PAYMENTREQUEST_0_SHIPPINGAMT'] = '0';
494
+			$itemized_list['PAYMENTREQUEST_0_HANDLINGAMT'] = '0';
495
+			$itemized_sum_diff_from_txn_total = round(
496
+				$transaction->total() - $itemized_sum - $total_line_items->get_total_tax(),
497
+				2
498
+			);
499
+			// If we were not able to recognize some item like promotion, surcharge or cancellation,
500
+			// add the difference as an extra line item.
501
+			if ($this->_money->compare_floats($itemized_sum_diff_from_txn_total, 0, '!=')) {
502
+				// Item Name.
503
+				$itemized_list[ 'L_PAYMENTREQUEST_0_NAME' . $item_num ] = mb_strcut(
504
+					esc_html__(
505
+						'Other (promotion/surcharge/cancellation)',
506
+						'event_espresso'
507
+					),
508
+					0,
509
+					127
510
+				);
511
+				// Item description.
512
+				$itemized_list[ 'L_PAYMENTREQUEST_0_DESC' . $item_num ] = '';
513
+				// Cost of individual item.
514
+				$itemized_list[ 'L_PAYMENTREQUEST_0_AMT' . $item_num ] = $gateway_formatter->formatCurrency(
515
+					$itemized_sum_diff_from_txn_total
516
+				);
517
+				// Item Number.
518
+				$itemized_list[ 'L_PAYMENTREQUEST_0_NUMBER' . $item_num ] = $item_num + 1;
519
+				// Item quantity.
520
+				$itemized_list[ 'L_PAYMENTREQUEST_0_QTY' . $item_num ] = 1;
521
+				// Digital item is sold.
522
+				$itemized_list[ 'L_PAYMENTREQUEST_0_ITEMCATEGORY' . $item_num ] = 'Physical';
523
+				$item_num++;
524
+			}
525
+		} else {
526
+			// Just one Item.
527
+			// Item Name.
528
+			$itemized_list['L_PAYMENTREQUEST_0_NAME0'] = mb_strcut(
529
+				$gateway_formatter->formatPartialPaymentLineItemName($payment),
530
+				0,
531
+				127
532
+			);
533
+			// Item description.
534
+			$itemized_list['L_PAYMENTREQUEST_0_DESC0'] = mb_strcut(
535
+				$gateway_formatter->formatPartialPaymentLineItemDesc($payment),
536
+				0,
537
+				127
538
+			);
539
+			// Cost of individual item.
540
+			$itemized_list['L_PAYMENTREQUEST_0_AMT0'] = $gateway_formatter->formatCurrency($payment->amount());
541
+			// Item Number.
542
+			$itemized_list['L_PAYMENTREQUEST_0_NUMBER0'] = 1;
543
+			// Item quantity.
544
+			$itemized_list['L_PAYMENTREQUEST_0_QTY0'] = 1;
545
+			// Digital item is sold.
546
+			$itemized_list['L_PAYMENTREQUEST_0_ITEMCATEGORY0'] = 'Physical';
547
+			// Item's sales S/H and tax amount.
548
+			$itemized_list['PAYMENTREQUEST_0_ITEMAMT'] = $gateway_formatter->formatCurrency($payment->amount());
549
+			$itemized_list['PAYMENTREQUEST_0_TAXAMT'] = '0';
550
+			$itemized_list['PAYMENTREQUEST_0_SHIPPINGAMT'] = '0';
551
+			$itemized_list['PAYMENTREQUEST_0_HANDLINGAMT'] = '0';
552
+		}
553
+		return $itemized_list;
554
+	}
555
+
556
+
557
+
558
+	/**
559
+	 *  Make the Express checkout request.
560
+	 *
561
+	 * @param array       $request_params
562
+	 * @param string      $request_text
563
+	 * @param EEI_Payment $payment
564
+	 * @return mixed
565
+	 */
566
+	public function _ppExpress_request($request_params, $request_text, $payment)
567
+	{
568
+		$request_dtls = array(
569
+			'VERSION' => '204.0',
570
+			'USER' => $this->_api_username,
571
+			'PWD' => $this->_api_password,
572
+			'SIGNATURE' => $this->_api_signature,
573
+			// EE will blow up if you change this
574
+			'BUTTONSOURCE' => 'EventEspresso_SP',
575
+		);
576
+		$dtls = array_merge($request_dtls, $request_params);
577
+		$this->_log_clean_request($dtls, $payment, $request_text . ' Request');
578
+		// Request Customer Details.
579
+		$request_response = wp_remote_post(
580
+			$this->_base_gateway_url,
581
+			array(
582
+				'method'      => 'POST',
583
+				'timeout'     => 45,
584
+				'httpversion' => '1.1',
585
+				'cookies'     => array(),
586
+				'headers'     => array(),
587
+				'body'        => http_build_query($dtls, '', '&'),
588
+			)
589
+		);
590
+		// Log the response.
591
+		$this->log(array($request_text . ' Response' => $request_response), $payment);
592
+		return $request_response;
593
+	}
594
+
595
+
596
+
597
+	/**
598
+	 *  Check the response status.
599
+	 *
600
+	 * @param mixed $request_response
601
+	 * @return array
602
+	 */
603
+	public function _ppExpress_check_response($request_response)
604
+	{
605
+		if (is_wp_error($request_response) || empty($request_response['body'])) {
606
+			// If we got here then there was an error in this request.
607
+			return array('status' => false, 'args' => $request_response);
608
+		}
609
+		$response_args = array();
610
+		parse_str(urldecode($request_response['body']), $response_args);
611
+		if (! isset($response_args['ACK'])) {
612
+			return array('status' => false, 'args' => $request_response);
613
+		}
614
+		if (
615
+			(
616
+				isset($response_args['PAYERID'])
617
+				|| isset($response_args['TOKEN'])
618
+				|| isset($response_args['PAYMENTINFO_0_TRANSACTIONID'])
619
+				|| (isset($response_args['PAYMENTSTATUS']) && $response_args['PAYMENTSTATUS'] === 'Completed')
620
+			)
621
+			&& in_array($response_args['ACK'], array('Success', 'SuccessWithWarning'), true)
622
+		) {
623
+			// Response status OK, return response parameters for further processing.
624
+			return array('status' => true, 'args' => $response_args);
625
+		}
626
+		$errors = $this->_get_errors($response_args);
627
+		return array('status' => false, 'args' => $errors);
628
+	}
629
+
630
+
631
+
632
+	/**
633
+	 *  Log a "Cleared" request.
634
+	 *
635
+	 * @param array       $request
636
+	 * @param EEI_Payment $payment
637
+	 * @param string      $info
638
+	 * @return void
639
+	 */
640
+	private function _log_clean_request($request, $payment, $info)
641
+	{
642
+		$cleaned_request_data = $request;
643
+		unset($cleaned_request_data['PWD'], $cleaned_request_data['USER'], $cleaned_request_data['SIGNATURE']);
644
+		$this->log(array($info => $cleaned_request_data), $payment);
645
+	}
646
+
647
+
648
+
649
+	/**
650
+	 *  Get error from the response data.
651
+	 *
652
+	 * @param array $data_array
653
+	 * @return array
654
+	 */
655
+	private function _get_errors($data_array)
656
+	{
657
+		$errors = array();
658
+		$n = 0;
659
+		while (isset($data_array[ "L_ERRORCODE{$n}" ])) {
660
+			$l_error_code = isset($data_array[ "L_ERRORCODE{$n}" ])
661
+				? $data_array[ "L_ERRORCODE{$n}" ]
662
+				: '';
663
+			$l_severity_code = isset($data_array[ "L_SEVERITYCODE{$n}" ])
664
+				? $data_array[ "L_SEVERITYCODE{$n}" ]
665
+				: '';
666
+			$l_short_message = isset($data_array[ "L_SHORTMESSAGE{$n}" ])
667
+				? $data_array[ "L_SHORTMESSAGE{$n}" ]
668
+				: '';
669
+			$l_long_message = isset($data_array[ "L_LONGMESSAGE{$n}" ])
670
+				? $data_array[ "L_LONGMESSAGE{$n}" ]
671
+				: '';
672
+			if ($n === 0) {
673
+				$errors = array(
674
+					'L_ERRORCODE'    => $l_error_code,
675
+					'L_SHORTMESSAGE' => $l_short_message,
676
+					'L_LONGMESSAGE'  => $l_long_message,
677
+					'L_SEVERITYCODE' => $l_severity_code,
678
+				);
679
+			} else {
680
+				$errors['L_ERRORCODE'] .= ', ' . $l_error_code;
681
+				$errors['L_SHORTMESSAGE'] .= ', ' . $l_short_message;
682
+				$errors['L_LONGMESSAGE'] .= ', ' . $l_long_message;
683
+				$errors['L_SEVERITYCODE'] .= ', ' . $l_severity_code;
684
+			}
685
+			$n++;
686
+		}
687
+		return $errors;
688
+	}
689 689
 }
Please login to merge, or discard this patch.
Spacing   +37 added lines, -37 removed lines patch added patch discarded remove patch
@@ -12,7 +12,7 @@  discard block
 block discarded – undo
12 12
  */
13 13
 
14 14
 // Quickfix to address https://events.codebasehq.com/projects/event-espresso/tickets/11089 ASAP
15
-if (! function_exists('mb_strcut')) {
15
+if ( ! function_exists('mb_strcut')) {
16 16
     /**
17 17
      * Very simple mimic of mb_substr (which WP ensures exists in wp-includes/compat.php). Still has all the problems of mb_substr
18 18
      * (namely, that we might send too many characters to PayPal; however in this case they just issue a warning but nothing breaks)
@@ -143,7 +143,7 @@  discard block
 block discarded – undo
143 143
         $notify_url = null,
144 144
         $cancel_url = null
145 145
     ) {
146
-        if (! $payment instanceof EEI_Payment) {
146
+        if ( ! $payment instanceof EEI_Payment) {
147 147
             $payment->set_gateway_response(
148 148
                 esc_html__(
149 149
                     'Error. No associated payment was found.',
@@ -154,7 +154,7 @@  discard block
 block discarded – undo
154 154
             return $payment;
155 155
         }
156 156
         $transaction = $payment->transaction();
157
-        if (! $transaction instanceof EEI_Transaction) {
157
+        if ( ! $transaction instanceof EEI_Transaction) {
158 158
             $payment->set_gateway_response(
159 159
                 esc_html__(
160 160
                     'Could not process this payment because it has no associated transaction.',
@@ -201,13 +201,13 @@  discard block
 block discarded – undo
201 201
             $token_request_dtls['PAYMENTREQUEST_0_SHIPTOZIP'] = $primary_attendee->zip();
202 202
             $token_request_dtls['PAYMENTREQUEST_0_EMAIL'] = $primary_attendee->email();
203 203
             $token_request_dtls['PAYMENTREQUEST_0_SHIPTOPHONENUM'] = $primary_attendee->phone();
204
-        } elseif (! $this->_request_shipping_addr) {
204
+        } elseif ( ! $this->_request_shipping_addr) {
205 205
             // Do not request shipping details on the PP Checkout page.
206 206
             $token_request_dtls['NOSHIPPING'] = '1';
207 207
             $token_request_dtls['REQCONFIRMSHIPPING'] = '0';
208 208
         }
209 209
         // Used a business/personal logo on the PayPal page.
210
-        if (! empty($this->_image_url)) {
210
+        if ( ! empty($this->_image_url)) {
211 211
             $token_request_dtls['LOGOIMG'] = $this->_image_url;
212 212
         }
213 213
         $token_request_dtls = apply_filters(
@@ -232,7 +232,7 @@  discard block
 block discarded – undo
232 232
             );
233 233
         } else {
234 234
             if (isset($response_args['L_ERRORCODE'])) {
235
-                $payment->set_gateway_response($response_args['L_ERRORCODE'] . '; ' . $response_args['L_SHORTMESSAGE']);
235
+                $payment->set_gateway_response($response_args['L_ERRORCODE'].'; '.$response_args['L_SHORTMESSAGE']);
236 236
             } else {
237 237
                 $payment->set_gateway_response(
238 238
                     esc_html__(
@@ -263,7 +263,7 @@  discard block
 block discarded – undo
263 263
         if ($payment instanceof EEI_Payment) {
264 264
             $this->log(array('Return from Authorization' => $update_info), $payment);
265 265
             $transaction = $payment->transaction();
266
-            if (! $transaction instanceof EEI_Transaction) {
266
+            if ( ! $transaction instanceof EEI_Transaction) {
267 267
                 $payment->set_gateway_response(
268 268
                     esc_html__(
269 269
                         'Could not process this payment because it has no associated transaction.',
@@ -276,7 +276,7 @@  discard block
 block discarded – undo
276 276
             $primary_registrant = $transaction->primary_registration();
277 277
             $payment_details = $payment->details();
278 278
             // Check if we still have the token.
279
-            if (! isset($payment_details['TOKEN']) || empty($payment_details['TOKEN'])) {
279
+            if ( ! isset($payment_details['TOKEN']) || empty($payment_details['TOKEN'])) {
280 280
                 $payment->set_status($this->_pay_model->failed_status());
281 281
                 return $payment;
282 282
             }
@@ -411,7 +411,7 @@  discard block
 block discarded – undo
411 411
                     strpos($arg_key, 'PAYMENTREQUEST_') !== false
412 412
                     && strpos($arg_key, 'NOTIFYURL') === false
413 413
                 ) {
414
-                    $itemized_list[ $arg_key ] = $arg_val;
414
+                    $itemized_list[$arg_key] = $arg_val;
415 415
                 }
416 416
             }
417 417
             // If we got only a few Items then something is not right.
@@ -464,25 +464,25 @@  discard block
 block discarded – undo
464 464
                         $line_item_quantity = 1;
465 465
                     }
466 466
                     // Item Name.
467
-                    $itemized_list[ 'L_PAYMENTREQUEST_0_NAME' . $item_num ] = mb_strcut(
467
+                    $itemized_list['L_PAYMENTREQUEST_0_NAME'.$item_num] = mb_strcut(
468 468
                         $gateway_formatter->formatLineItemName($line_item, $payment),
469 469
                         0,
470 470
                         127
471 471
                     );
472 472
                     // Item description.
473
-                    $itemized_list[ 'L_PAYMENTREQUEST_0_DESC' . $item_num ] = mb_strcut(
473
+                    $itemized_list['L_PAYMENTREQUEST_0_DESC'.$item_num] = mb_strcut(
474 474
                         $gateway_formatter->formatLineItemDesc($line_item, $payment),
475 475
                         0,
476 476
                         127
477 477
                     );
478 478
                     // Cost of individual item.
479
-                    $itemized_list[ 'L_PAYMENTREQUEST_0_AMT' . $item_num ] = $gateway_formatter->formatCurrency($unit_price);
479
+                    $itemized_list['L_PAYMENTREQUEST_0_AMT'.$item_num] = $gateway_formatter->formatCurrency($unit_price);
480 480
                     // Item Number.
481
-                    $itemized_list[ 'L_PAYMENTREQUEST_0_NUMBER' . $item_num ] = $item_num + 1;
481
+                    $itemized_list['L_PAYMENTREQUEST_0_NUMBER'.$item_num] = $item_num + 1;
482 482
                     // Item quantity.
483
-                    $itemized_list[ 'L_PAYMENTREQUEST_0_QTY' . $item_num ] = $line_item_quantity;
483
+                    $itemized_list['L_PAYMENTREQUEST_0_QTY'.$item_num] = $line_item_quantity;
484 484
                     // Digital item is sold.
485
-                    $itemized_list[ 'L_PAYMENTREQUEST_0_ITEMCATEGORY' . $item_num ] = 'Physical';
485
+                    $itemized_list['L_PAYMENTREQUEST_0_ITEMCATEGORY'.$item_num] = 'Physical';
486 486
                     $itemized_sum += $line_item->total();
487 487
                     ++$item_num;
488 488
                 }
@@ -500,7 +500,7 @@  discard block
 block discarded – undo
500 500
             // add the difference as an extra line item.
501 501
             if ($this->_money->compare_floats($itemized_sum_diff_from_txn_total, 0, '!=')) {
502 502
                 // Item Name.
503
-                $itemized_list[ 'L_PAYMENTREQUEST_0_NAME' . $item_num ] = mb_strcut(
503
+                $itemized_list['L_PAYMENTREQUEST_0_NAME'.$item_num] = mb_strcut(
504 504
                     esc_html__(
505 505
                         'Other (promotion/surcharge/cancellation)',
506 506
                         'event_espresso'
@@ -509,17 +509,17 @@  discard block
 block discarded – undo
509 509
                     127
510 510
                 );
511 511
                 // Item description.
512
-                $itemized_list[ 'L_PAYMENTREQUEST_0_DESC' . $item_num ] = '';
512
+                $itemized_list['L_PAYMENTREQUEST_0_DESC'.$item_num] = '';
513 513
                 // Cost of individual item.
514
-                $itemized_list[ 'L_PAYMENTREQUEST_0_AMT' . $item_num ] = $gateway_formatter->formatCurrency(
514
+                $itemized_list['L_PAYMENTREQUEST_0_AMT'.$item_num] = $gateway_formatter->formatCurrency(
515 515
                     $itemized_sum_diff_from_txn_total
516 516
                 );
517 517
                 // Item Number.
518
-                $itemized_list[ 'L_PAYMENTREQUEST_0_NUMBER' . $item_num ] = $item_num + 1;
518
+                $itemized_list['L_PAYMENTREQUEST_0_NUMBER'.$item_num] = $item_num + 1;
519 519
                 // Item quantity.
520
-                $itemized_list[ 'L_PAYMENTREQUEST_0_QTY' . $item_num ] = 1;
520
+                $itemized_list['L_PAYMENTREQUEST_0_QTY'.$item_num] = 1;
521 521
                 // Digital item is sold.
522
-                $itemized_list[ 'L_PAYMENTREQUEST_0_ITEMCATEGORY' . $item_num ] = 'Physical';
522
+                $itemized_list['L_PAYMENTREQUEST_0_ITEMCATEGORY'.$item_num] = 'Physical';
523 523
                 $item_num++;
524 524
             }
525 525
         } else {
@@ -574,7 +574,7 @@  discard block
 block discarded – undo
574 574
             'BUTTONSOURCE' => 'EventEspresso_SP',
575 575
         );
576 576
         $dtls = array_merge($request_dtls, $request_params);
577
-        $this->_log_clean_request($dtls, $payment, $request_text . ' Request');
577
+        $this->_log_clean_request($dtls, $payment, $request_text.' Request');
578 578
         // Request Customer Details.
579 579
         $request_response = wp_remote_post(
580 580
             $this->_base_gateway_url,
@@ -588,7 +588,7 @@  discard block
 block discarded – undo
588 588
             )
589 589
         );
590 590
         // Log the response.
591
-        $this->log(array($request_text . ' Response' => $request_response), $payment);
591
+        $this->log(array($request_text.' Response' => $request_response), $payment);
592 592
         return $request_response;
593 593
     }
594 594
 
@@ -608,7 +608,7 @@  discard block
 block discarded – undo
608 608
         }
609 609
         $response_args = array();
610 610
         parse_str(urldecode($request_response['body']), $response_args);
611
-        if (! isset($response_args['ACK'])) {
611
+        if ( ! isset($response_args['ACK'])) {
612 612
             return array('status' => false, 'args' => $request_response);
613 613
         }
614 614
         if (
@@ -656,18 +656,18 @@  discard block
 block discarded – undo
656 656
     {
657 657
         $errors = array();
658 658
         $n = 0;
659
-        while (isset($data_array[ "L_ERRORCODE{$n}" ])) {
660
-            $l_error_code = isset($data_array[ "L_ERRORCODE{$n}" ])
661
-                ? $data_array[ "L_ERRORCODE{$n}" ]
659
+        while (isset($data_array["L_ERRORCODE{$n}"])) {
660
+            $l_error_code = isset($data_array["L_ERRORCODE{$n}"])
661
+                ? $data_array["L_ERRORCODE{$n}"]
662 662
                 : '';
663
-            $l_severity_code = isset($data_array[ "L_SEVERITYCODE{$n}" ])
664
-                ? $data_array[ "L_SEVERITYCODE{$n}" ]
663
+            $l_severity_code = isset($data_array["L_SEVERITYCODE{$n}"])
664
+                ? $data_array["L_SEVERITYCODE{$n}"]
665 665
                 : '';
666
-            $l_short_message = isset($data_array[ "L_SHORTMESSAGE{$n}" ])
667
-                ? $data_array[ "L_SHORTMESSAGE{$n}" ]
666
+            $l_short_message = isset($data_array["L_SHORTMESSAGE{$n}"])
667
+                ? $data_array["L_SHORTMESSAGE{$n}"]
668 668
                 : '';
669
-            $l_long_message = isset($data_array[ "L_LONGMESSAGE{$n}" ])
670
-                ? $data_array[ "L_LONGMESSAGE{$n}" ]
669
+            $l_long_message = isset($data_array["L_LONGMESSAGE{$n}"])
670
+                ? $data_array["L_LONGMESSAGE{$n}"]
671 671
                 : '';
672 672
             if ($n === 0) {
673 673
                 $errors = array(
@@ -677,10 +677,10 @@  discard block
 block discarded – undo
677 677
                     'L_SEVERITYCODE' => $l_severity_code,
678 678
                 );
679 679
             } else {
680
-                $errors['L_ERRORCODE'] .= ', ' . $l_error_code;
681
-                $errors['L_SHORTMESSAGE'] .= ', ' . $l_short_message;
682
-                $errors['L_LONGMESSAGE'] .= ', ' . $l_long_message;
683
-                $errors['L_SEVERITYCODE'] .= ', ' . $l_severity_code;
680
+                $errors['L_ERRORCODE'] .= ', '.$l_error_code;
681
+                $errors['L_SHORTMESSAGE'] .= ', '.$l_short_message;
682
+                $errors['L_LONGMESSAGE'] .= ', '.$l_long_message;
683
+                $errors['L_SEVERITYCODE'] .= ', '.$l_severity_code;
684 684
             }
685 685
             $n++;
686 686
         }
Please login to merge, or discard this patch.
admin/extend/registrations/Extend_Registrations_Admin_Page.core.php 3 patches
Doc Comments   +1 added lines, -1 removed lines patch added patch discarded remove patch
@@ -924,7 +924,7 @@
 block discarded – undo
924 924
      * handles toggling the checkin status for the registration,
925 925
      *
926 926
      * @access protected
927
-     * @return int|void
927
+     * @return integer
928 928
      * @throws EE_Error
929 929
      * @throws InvalidArgumentException
930 930
      * @throws InvalidDataTypeException
Please login to merge, or discard this patch.
Indentation   +1212 added lines, -1212 removed lines patch added patch discarded remove patch
@@ -16,1269 +16,1269 @@
 block discarded – undo
16 16
 {
17 17
 
18 18
 
19
-    /**
20
-     * This is used to hold the reports template data which is setup early in the request.
21
-     *
22
-     * @type array
23
-     */
24
-    protected $_reports_template_data = array();
19
+	/**
20
+	 * This is used to hold the reports template data which is setup early in the request.
21
+	 *
22
+	 * @type array
23
+	 */
24
+	protected $_reports_template_data = array();
25 25
 
26 26
 
27
-    /**
28
-     * Extend_Registrations_Admin_Page constructor.
29
-     *
30
-     * @param bool $routing
31
-     */
32
-    public function __construct($routing = true)
33
-    {
34
-        parent::__construct($routing);
35
-        if (! defined('REG_CAF_TEMPLATE_PATH')) {
36
-            define('REG_CAF_TEMPLATE_PATH', EE_CORE_CAF_ADMIN_EXTEND . 'registrations/templates/');
37
-            define('REG_CAF_ASSETS', EE_CORE_CAF_ADMIN_EXTEND . 'registrations/assets/');
38
-            define('REG_CAF_ASSETS_URL', EE_CORE_CAF_ADMIN_EXTEND_URL . 'registrations/assets/');
39
-        }
40
-    }
27
+	/**
28
+	 * Extend_Registrations_Admin_Page constructor.
29
+	 *
30
+	 * @param bool $routing
31
+	 */
32
+	public function __construct($routing = true)
33
+	{
34
+		parent::__construct($routing);
35
+		if (! defined('REG_CAF_TEMPLATE_PATH')) {
36
+			define('REG_CAF_TEMPLATE_PATH', EE_CORE_CAF_ADMIN_EXTEND . 'registrations/templates/');
37
+			define('REG_CAF_ASSETS', EE_CORE_CAF_ADMIN_EXTEND . 'registrations/assets/');
38
+			define('REG_CAF_ASSETS_URL', EE_CORE_CAF_ADMIN_EXTEND_URL . 'registrations/assets/');
39
+		}
40
+	}
41 41
 
42 42
 
43
-    /**
44
-     * Extending page configuration.
45
-     */
46
-    protected function _extend_page_config()
47
-    {
48
-        $this->_admin_base_path = EE_CORE_CAF_ADMIN_EXTEND . 'registrations';
49
-        $reg_id = ! empty($this->_req_data['_REG_ID']) && ! is_array($this->_req_data['_REG_ID'])
50
-            ? $this->_req_data['_REG_ID']
51
-            : 0;
52
-        $new_page_routes = array(
53
-            'reports'                      => array(
54
-                'func'       => '_registration_reports',
55
-                'capability' => 'ee_read_registrations',
56
-            ),
57
-            'registration_checkins'        => array(
58
-                'func'       => '_registration_checkin_list_table',
59
-                'capability' => 'ee_read_checkins',
60
-            ),
61
-            'newsletter_selected_send'     => array(
62
-                'func'       => '_newsletter_selected_send',
63
-                'noheader'   => true,
64
-                'capability' => 'ee_send_message',
65
-            ),
66
-            'delete_checkin_rows'          => array(
67
-                'func'       => '_delete_checkin_rows',
68
-                'noheader'   => true,
69
-                'capability' => 'ee_delete_checkins',
70
-            ),
71
-            'delete_checkin_row'           => array(
72
-                'func'       => '_delete_checkin_row',
73
-                'noheader'   => true,
74
-                'capability' => 'ee_delete_checkin',
75
-                'obj_id'     => $reg_id,
76
-            ),
77
-            'toggle_checkin_status'        => array(
78
-                'func'       => '_toggle_checkin_status',
79
-                'noheader'   => true,
80
-                'capability' => 'ee_edit_checkin',
81
-                'obj_id'     => $reg_id,
82
-            ),
83
-            'toggle_checkin_status_bulk'   => array(
84
-                'func'       => '_toggle_checkin_status',
85
-                'noheader'   => true,
86
-                'capability' => 'ee_edit_checkins',
87
-            ),
88
-            'event_registrations'          => array(
89
-                'func'       => '_event_registrations_list_table',
90
-                'capability' => 'ee_read_checkins',
91
-            ),
92
-            'registrations_checkin_report' => array(
93
-                'func'       => '_registrations_checkin_report',
94
-                'noheader'   => true,
95
-                'capability' => 'ee_read_registrations',
96
-            ),
97
-        );
98
-        $this->_page_routes = array_merge($this->_page_routes, $new_page_routes);
99
-        $new_page_config = array(
100
-            'reports'               => array(
101
-                'nav'           => array(
102
-                    'label' => esc_html__('Reports', 'event_espresso'),
103
-                    'order' => 30,
104
-                ),
105
-                'help_tabs'     => array(
106
-                    'registrations_reports_help_tab' => array(
107
-                        'title'    => esc_html__('Registration Reports', 'event_espresso'),
108
-                        'filename' => 'registrations_reports',
109
-                    ),
110
-                ),
111
-                /*'help_tour' => array( 'Registration_Reports_Help_Tour' ),*/
112
-                'require_nonce' => false,
113
-            ),
114
-            'event_registrations'   => array(
115
-                'nav'           => array(
116
-                    'label'      => esc_html__('Event Check-In', 'event_espresso'),
117
-                    'order'      => 10,
118
-                    'persistent' => true,
119
-                ),
120
-                'help_tabs'     => array(
121
-                    'registrations_event_checkin_help_tab'                       => array(
122
-                        'title'    => esc_html__('Registrations Event Check-In', 'event_espresso'),
123
-                        'filename' => 'registrations_event_checkin',
124
-                    ),
125
-                    'registrations_event_checkin_table_column_headings_help_tab' => array(
126
-                        'title'    => esc_html__('Event Check-In Table Column Headings', 'event_espresso'),
127
-                        'filename' => 'registrations_event_checkin_table_column_headings',
128
-                    ),
129
-                    'registrations_event_checkin_filters_help_tab'               => array(
130
-                        'title'    => esc_html__('Event Check-In Filters', 'event_espresso'),
131
-                        'filename' => 'registrations_event_checkin_filters',
132
-                    ),
133
-                    'registrations_event_checkin_views_help_tab'                 => array(
134
-                        'title'    => esc_html__('Event Check-In Views', 'event_espresso'),
135
-                        'filename' => 'registrations_event_checkin_views',
136
-                    ),
137
-                    'registrations_event_checkin_other_help_tab'                 => array(
138
-                        'title'    => esc_html__('Event Check-In Other', 'event_espresso'),
139
-                        'filename' => 'registrations_event_checkin_other',
140
-                    ),
141
-                ),
142
-                'help_tour'     => array('Event_Checkin_Help_Tour'),
143
-                'qtips'         => array('Registration_List_Table_Tips'),
144
-                'list_table'    => 'EE_Event_Registrations_List_Table',
145
-                'metaboxes'     => array(),
146
-                'require_nonce' => false,
147
-            ),
148
-            'registration_checkins' => array(
149
-                'nav'           => array(
150
-                    'label'      => esc_html__('Check-In Records', 'event_espresso'),
151
-                    'order'      => 15,
152
-                    'persistent' => false,
153
-                    'url'        => '',
154
-                ),
155
-                'list_table'    => 'EE_Registration_CheckIn_List_Table',
156
-                // 'help_tour' => array( 'Checkin_Toggle_View_Help_Tour' ),
157
-                'metaboxes'     => array(),
158
-                'require_nonce' => false,
159
-            ),
160
-        );
161
-        $this->_page_config = array_merge($this->_page_config, $new_page_config);
162
-        $this->_page_config['contact_list']['list_table'] = 'Extend_EE_Attendee_Contact_List_Table';
163
-        $this->_page_config['default']['list_table'] = 'Extend_EE_Registrations_List_Table';
164
-    }
43
+	/**
44
+	 * Extending page configuration.
45
+	 */
46
+	protected function _extend_page_config()
47
+	{
48
+		$this->_admin_base_path = EE_CORE_CAF_ADMIN_EXTEND . 'registrations';
49
+		$reg_id = ! empty($this->_req_data['_REG_ID']) && ! is_array($this->_req_data['_REG_ID'])
50
+			? $this->_req_data['_REG_ID']
51
+			: 0;
52
+		$new_page_routes = array(
53
+			'reports'                      => array(
54
+				'func'       => '_registration_reports',
55
+				'capability' => 'ee_read_registrations',
56
+			),
57
+			'registration_checkins'        => array(
58
+				'func'       => '_registration_checkin_list_table',
59
+				'capability' => 'ee_read_checkins',
60
+			),
61
+			'newsletter_selected_send'     => array(
62
+				'func'       => '_newsletter_selected_send',
63
+				'noheader'   => true,
64
+				'capability' => 'ee_send_message',
65
+			),
66
+			'delete_checkin_rows'          => array(
67
+				'func'       => '_delete_checkin_rows',
68
+				'noheader'   => true,
69
+				'capability' => 'ee_delete_checkins',
70
+			),
71
+			'delete_checkin_row'           => array(
72
+				'func'       => '_delete_checkin_row',
73
+				'noheader'   => true,
74
+				'capability' => 'ee_delete_checkin',
75
+				'obj_id'     => $reg_id,
76
+			),
77
+			'toggle_checkin_status'        => array(
78
+				'func'       => '_toggle_checkin_status',
79
+				'noheader'   => true,
80
+				'capability' => 'ee_edit_checkin',
81
+				'obj_id'     => $reg_id,
82
+			),
83
+			'toggle_checkin_status_bulk'   => array(
84
+				'func'       => '_toggle_checkin_status',
85
+				'noheader'   => true,
86
+				'capability' => 'ee_edit_checkins',
87
+			),
88
+			'event_registrations'          => array(
89
+				'func'       => '_event_registrations_list_table',
90
+				'capability' => 'ee_read_checkins',
91
+			),
92
+			'registrations_checkin_report' => array(
93
+				'func'       => '_registrations_checkin_report',
94
+				'noheader'   => true,
95
+				'capability' => 'ee_read_registrations',
96
+			),
97
+		);
98
+		$this->_page_routes = array_merge($this->_page_routes, $new_page_routes);
99
+		$new_page_config = array(
100
+			'reports'               => array(
101
+				'nav'           => array(
102
+					'label' => esc_html__('Reports', 'event_espresso'),
103
+					'order' => 30,
104
+				),
105
+				'help_tabs'     => array(
106
+					'registrations_reports_help_tab' => array(
107
+						'title'    => esc_html__('Registration Reports', 'event_espresso'),
108
+						'filename' => 'registrations_reports',
109
+					),
110
+				),
111
+				/*'help_tour' => array( 'Registration_Reports_Help_Tour' ),*/
112
+				'require_nonce' => false,
113
+			),
114
+			'event_registrations'   => array(
115
+				'nav'           => array(
116
+					'label'      => esc_html__('Event Check-In', 'event_espresso'),
117
+					'order'      => 10,
118
+					'persistent' => true,
119
+				),
120
+				'help_tabs'     => array(
121
+					'registrations_event_checkin_help_tab'                       => array(
122
+						'title'    => esc_html__('Registrations Event Check-In', 'event_espresso'),
123
+						'filename' => 'registrations_event_checkin',
124
+					),
125
+					'registrations_event_checkin_table_column_headings_help_tab' => array(
126
+						'title'    => esc_html__('Event Check-In Table Column Headings', 'event_espresso'),
127
+						'filename' => 'registrations_event_checkin_table_column_headings',
128
+					),
129
+					'registrations_event_checkin_filters_help_tab'               => array(
130
+						'title'    => esc_html__('Event Check-In Filters', 'event_espresso'),
131
+						'filename' => 'registrations_event_checkin_filters',
132
+					),
133
+					'registrations_event_checkin_views_help_tab'                 => array(
134
+						'title'    => esc_html__('Event Check-In Views', 'event_espresso'),
135
+						'filename' => 'registrations_event_checkin_views',
136
+					),
137
+					'registrations_event_checkin_other_help_tab'                 => array(
138
+						'title'    => esc_html__('Event Check-In Other', 'event_espresso'),
139
+						'filename' => 'registrations_event_checkin_other',
140
+					),
141
+				),
142
+				'help_tour'     => array('Event_Checkin_Help_Tour'),
143
+				'qtips'         => array('Registration_List_Table_Tips'),
144
+				'list_table'    => 'EE_Event_Registrations_List_Table',
145
+				'metaboxes'     => array(),
146
+				'require_nonce' => false,
147
+			),
148
+			'registration_checkins' => array(
149
+				'nav'           => array(
150
+					'label'      => esc_html__('Check-In Records', 'event_espresso'),
151
+					'order'      => 15,
152
+					'persistent' => false,
153
+					'url'        => '',
154
+				),
155
+				'list_table'    => 'EE_Registration_CheckIn_List_Table',
156
+				// 'help_tour' => array( 'Checkin_Toggle_View_Help_Tour' ),
157
+				'metaboxes'     => array(),
158
+				'require_nonce' => false,
159
+			),
160
+		);
161
+		$this->_page_config = array_merge($this->_page_config, $new_page_config);
162
+		$this->_page_config['contact_list']['list_table'] = 'Extend_EE_Attendee_Contact_List_Table';
163
+		$this->_page_config['default']['list_table'] = 'Extend_EE_Registrations_List_Table';
164
+	}
165 165
 
166 166
 
167
-    /**
168
-     * Ajax hooks for all routes in this page.
169
-     */
170
-    protected function _ajax_hooks()
171
-    {
172
-        parent::_ajax_hooks();
173
-        add_action('wp_ajax_get_newsletter_form_content', array($this, 'get_newsletter_form_content'));
174
-    }
167
+	/**
168
+	 * Ajax hooks for all routes in this page.
169
+	 */
170
+	protected function _ajax_hooks()
171
+	{
172
+		parent::_ajax_hooks();
173
+		add_action('wp_ajax_get_newsletter_form_content', array($this, 'get_newsletter_form_content'));
174
+	}
175 175
 
176 176
 
177
-    /**
178
-     * Global scripts for all routes in this page.
179
-     */
180
-    public function load_scripts_styles()
181
-    {
182
-        parent::load_scripts_styles();
183
-        // if newsletter message type is active then let's add filter and load js for it.
184
-        if (EEH_MSG_Template::is_mt_active('newsletter')) {
185
-            // enqueue newsletter js
186
-            wp_enqueue_script(
187
-                'ee-newsletter-trigger',
188
-                REG_CAF_ASSETS_URL . 'ee-newsletter-trigger.js',
189
-                array('ee-dialog'),
190
-                EVENT_ESPRESSO_VERSION,
191
-                true
192
-            );
193
-            wp_enqueue_style(
194
-                'ee-newsletter-trigger-css',
195
-                REG_CAF_ASSETS_URL . 'ee-newsletter-trigger.css',
196
-                array(),
197
-                EVENT_ESPRESSO_VERSION
198
-            );
199
-            // hook in buttons for newsletter message type trigger.
200
-            add_action(
201
-                'AHEE__EE_Admin_List_Table__extra_tablenav__after_bottom_buttons',
202
-                array($this, 'add_newsletter_action_buttons'),
203
-                10
204
-            );
205
-        }
206
-    }
177
+	/**
178
+	 * Global scripts for all routes in this page.
179
+	 */
180
+	public function load_scripts_styles()
181
+	{
182
+		parent::load_scripts_styles();
183
+		// if newsletter message type is active then let's add filter and load js for it.
184
+		if (EEH_MSG_Template::is_mt_active('newsletter')) {
185
+			// enqueue newsletter js
186
+			wp_enqueue_script(
187
+				'ee-newsletter-trigger',
188
+				REG_CAF_ASSETS_URL . 'ee-newsletter-trigger.js',
189
+				array('ee-dialog'),
190
+				EVENT_ESPRESSO_VERSION,
191
+				true
192
+			);
193
+			wp_enqueue_style(
194
+				'ee-newsletter-trigger-css',
195
+				REG_CAF_ASSETS_URL . 'ee-newsletter-trigger.css',
196
+				array(),
197
+				EVENT_ESPRESSO_VERSION
198
+			);
199
+			// hook in buttons for newsletter message type trigger.
200
+			add_action(
201
+				'AHEE__EE_Admin_List_Table__extra_tablenav__after_bottom_buttons',
202
+				array($this, 'add_newsletter_action_buttons'),
203
+				10
204
+			);
205
+		}
206
+	}
207 207
 
208 208
 
209
-    /**
210
-     * Scripts and styles for just the reports route.
211
-     */
212
-    public function load_scripts_styles_reports()
213
-    {
214
-        wp_register_script(
215
-            'ee-reg-reports-js',
216
-            REG_CAF_ASSETS_URL . 'ee-registration-admin-reports.js',
217
-            array('google-charts'),
218
-            EVENT_ESPRESSO_VERSION,
219
-            true
220
-        );
221
-        wp_enqueue_script('ee-reg-reports-js');
222
-        $this->_registration_reports_js_setup();
223
-    }
209
+	/**
210
+	 * Scripts and styles for just the reports route.
211
+	 */
212
+	public function load_scripts_styles_reports()
213
+	{
214
+		wp_register_script(
215
+			'ee-reg-reports-js',
216
+			REG_CAF_ASSETS_URL . 'ee-registration-admin-reports.js',
217
+			array('google-charts'),
218
+			EVENT_ESPRESSO_VERSION,
219
+			true
220
+		);
221
+		wp_enqueue_script('ee-reg-reports-js');
222
+		$this->_registration_reports_js_setup();
223
+	}
224 224
 
225 225
 
226
-    /**
227
-     * Register screen options for event_registrations route.
228
-     */
229
-    protected function _add_screen_options_event_registrations()
230
-    {
231
-        $this->_per_page_screen_option();
232
-    }
226
+	/**
227
+	 * Register screen options for event_registrations route.
228
+	 */
229
+	protected function _add_screen_options_event_registrations()
230
+	{
231
+		$this->_per_page_screen_option();
232
+	}
233 233
 
234 234
 
235
-    /**
236
-     * Register screen options for registration_checkins route
237
-     */
238
-    protected function _add_screen_options_registration_checkins()
239
-    {
240
-        $page_title = $this->_admin_page_title;
241
-        $this->_admin_page_title = esc_html__('Check-In Records', 'event_espresso');
242
-        $this->_per_page_screen_option();
243
-        $this->_admin_page_title = $page_title;
244
-    }
235
+	/**
236
+	 * Register screen options for registration_checkins route
237
+	 */
238
+	protected function _add_screen_options_registration_checkins()
239
+	{
240
+		$page_title = $this->_admin_page_title;
241
+		$this->_admin_page_title = esc_html__('Check-In Records', 'event_espresso');
242
+		$this->_per_page_screen_option();
243
+		$this->_admin_page_title = $page_title;
244
+	}
245 245
 
246 246
 
247
-    /**
248
-     * Set views property for event_registrations route.
249
-     */
250
-    protected function _set_list_table_views_event_registrations()
251
-    {
252
-        $this->_views = array(
253
-            'all' => array(
254
-                'slug'        => 'all',
255
-                'label'       => esc_html__('All', 'event_espresso'),
256
-                'count'       => 0,
257
-                'bulk_action' => ! isset($this->_req_data['event_id'])
258
-                    ? array()
259
-                    : array(
260
-                        'toggle_checkin_status_bulk' => esc_html__('Toggle Check-In', 'event_espresso'),
261
-                    ),
262
-            ),
263
-        );
264
-    }
247
+	/**
248
+	 * Set views property for event_registrations route.
249
+	 */
250
+	protected function _set_list_table_views_event_registrations()
251
+	{
252
+		$this->_views = array(
253
+			'all' => array(
254
+				'slug'        => 'all',
255
+				'label'       => esc_html__('All', 'event_espresso'),
256
+				'count'       => 0,
257
+				'bulk_action' => ! isset($this->_req_data['event_id'])
258
+					? array()
259
+					: array(
260
+						'toggle_checkin_status_bulk' => esc_html__('Toggle Check-In', 'event_espresso'),
261
+					),
262
+			),
263
+		);
264
+	}
265 265
 
266 266
 
267
-    /**
268
-     * Set views property for registration_checkins route.
269
-     */
270
-    protected function _set_list_table_views_registration_checkins()
271
-    {
272
-        $this->_views = array(
273
-            'all' => array(
274
-                'slug'        => 'all',
275
-                'label'       => esc_html__('All', 'event_espresso'),
276
-                'count'       => 0,
277
-                'bulk_action' => array('delete_checkin_rows' => esc_html__('Delete Check-In Rows', 'event_espresso')),
278
-            ),
279
-        );
280
-    }
267
+	/**
268
+	 * Set views property for registration_checkins route.
269
+	 */
270
+	protected function _set_list_table_views_registration_checkins()
271
+	{
272
+		$this->_views = array(
273
+			'all' => array(
274
+				'slug'        => 'all',
275
+				'label'       => esc_html__('All', 'event_espresso'),
276
+				'count'       => 0,
277
+				'bulk_action' => array('delete_checkin_rows' => esc_html__('Delete Check-In Rows', 'event_espresso')),
278
+			),
279
+		);
280
+	}
281 281
 
282 282
 
283
-    /**
284
-     * callback for ajax action.
285
-     *
286
-     * @since 4.3.0
287
-     * @return void (JSON)
288
-     * @throws EE_Error
289
-     * @throws InvalidArgumentException
290
-     * @throws InvalidDataTypeException
291
-     * @throws InvalidInterfaceException
292
-     */
293
-    public function get_newsletter_form_content()
294
-    {
295
-        // do a nonce check cause we're not coming in from an normal route here.
296
-        $nonce = isset($this->_req_data['get_newsletter_form_content_nonce']) ? sanitize_text_field(
297
-            $this->_req_data['get_newsletter_form_content_nonce']
298
-        ) : '';
299
-        $nonce_ref = 'get_newsletter_form_content_nonce';
300
-        $this->_verify_nonce($nonce, $nonce_ref);
301
-        // let's get the mtp for the incoming MTP_ ID
302
-        if (! isset($this->_req_data['GRP_ID'])) {
303
-            EE_Error::add_error(
304
-                esc_html__(
305
-                    'There must be something broken with the js or html structure because the required data for getting a message template group is not present (need an GRP_ID).',
306
-                    'event_espresso'
307
-                ),
308
-                __FILE__,
309
-                __FUNCTION__,
310
-                __LINE__
311
-            );
312
-            $this->_template_args['success'] = false;
313
-            $this->_template_args['error'] = true;
314
-            $this->_return_json();
315
-        }
316
-        $MTPG = EEM_Message_Template_Group::instance()->get_one_by_ID($this->_req_data['GRP_ID']);
317
-        if (! $MTPG instanceof EE_Message_Template_Group) {
318
-            EE_Error::add_error(
319
-                sprintf(
320
-                    esc_html__(
321
-                        'The GRP_ID given (%d) does not appear to have a corresponding row in the database.',
322
-                        'event_espresso'
323
-                    ),
324
-                    $this->_req_data['GRP_ID']
325
-                ),
326
-                __FILE__,
327
-                __FUNCTION__,
328
-                __LINE__
329
-            );
330
-            $this->_template_args['success'] = false;
331
-            $this->_template_args['error'] = true;
332
-            $this->_return_json();
333
-        }
334
-        $MTPs = $MTPG->context_templates();
335
-        $MTPs = $MTPs['attendee'];
336
-        $template_fields = array();
337
-        /** @var EE_Message_Template $MTP */
338
-        foreach ($MTPs as $MTP) {
339
-            $field = $MTP->get('MTP_template_field');
340
-            if ($field === 'content') {
341
-                $content = $MTP->get('MTP_content');
342
-                if (! empty($content['newsletter_content'])) {
343
-                    $template_fields['newsletter_content'] = $content['newsletter_content'];
344
-                }
345
-                continue;
346
-            }
347
-            $template_fields[ $MTP->get('MTP_template_field') ] = $MTP->get('MTP_content');
348
-        }
349
-        $this->_template_args['success'] = true;
350
-        $this->_template_args['error'] = false;
351
-        $this->_template_args['data'] = array(
352
-            'batch_message_from'    => isset($template_fields['from'])
353
-                ? $template_fields['from']
354
-                : '',
355
-            'batch_message_subject' => isset($template_fields['subject'])
356
-                ? $template_fields['subject']
357
-                : '',
358
-            'batch_message_content' => isset($template_fields['newsletter_content'])
359
-                ? $template_fields['newsletter_content']
360
-                : '',
361
-        );
362
-        $this->_return_json();
363
-    }
283
+	/**
284
+	 * callback for ajax action.
285
+	 *
286
+	 * @since 4.3.0
287
+	 * @return void (JSON)
288
+	 * @throws EE_Error
289
+	 * @throws InvalidArgumentException
290
+	 * @throws InvalidDataTypeException
291
+	 * @throws InvalidInterfaceException
292
+	 */
293
+	public function get_newsletter_form_content()
294
+	{
295
+		// do a nonce check cause we're not coming in from an normal route here.
296
+		$nonce = isset($this->_req_data['get_newsletter_form_content_nonce']) ? sanitize_text_field(
297
+			$this->_req_data['get_newsletter_form_content_nonce']
298
+		) : '';
299
+		$nonce_ref = 'get_newsletter_form_content_nonce';
300
+		$this->_verify_nonce($nonce, $nonce_ref);
301
+		// let's get the mtp for the incoming MTP_ ID
302
+		if (! isset($this->_req_data['GRP_ID'])) {
303
+			EE_Error::add_error(
304
+				esc_html__(
305
+					'There must be something broken with the js or html structure because the required data for getting a message template group is not present (need an GRP_ID).',
306
+					'event_espresso'
307
+				),
308
+				__FILE__,
309
+				__FUNCTION__,
310
+				__LINE__
311
+			);
312
+			$this->_template_args['success'] = false;
313
+			$this->_template_args['error'] = true;
314
+			$this->_return_json();
315
+		}
316
+		$MTPG = EEM_Message_Template_Group::instance()->get_one_by_ID($this->_req_data['GRP_ID']);
317
+		if (! $MTPG instanceof EE_Message_Template_Group) {
318
+			EE_Error::add_error(
319
+				sprintf(
320
+					esc_html__(
321
+						'The GRP_ID given (%d) does not appear to have a corresponding row in the database.',
322
+						'event_espresso'
323
+					),
324
+					$this->_req_data['GRP_ID']
325
+				),
326
+				__FILE__,
327
+				__FUNCTION__,
328
+				__LINE__
329
+			);
330
+			$this->_template_args['success'] = false;
331
+			$this->_template_args['error'] = true;
332
+			$this->_return_json();
333
+		}
334
+		$MTPs = $MTPG->context_templates();
335
+		$MTPs = $MTPs['attendee'];
336
+		$template_fields = array();
337
+		/** @var EE_Message_Template $MTP */
338
+		foreach ($MTPs as $MTP) {
339
+			$field = $MTP->get('MTP_template_field');
340
+			if ($field === 'content') {
341
+				$content = $MTP->get('MTP_content');
342
+				if (! empty($content['newsletter_content'])) {
343
+					$template_fields['newsletter_content'] = $content['newsletter_content'];
344
+				}
345
+				continue;
346
+			}
347
+			$template_fields[ $MTP->get('MTP_template_field') ] = $MTP->get('MTP_content');
348
+		}
349
+		$this->_template_args['success'] = true;
350
+		$this->_template_args['error'] = false;
351
+		$this->_template_args['data'] = array(
352
+			'batch_message_from'    => isset($template_fields['from'])
353
+				? $template_fields['from']
354
+				: '',
355
+			'batch_message_subject' => isset($template_fields['subject'])
356
+				? $template_fields['subject']
357
+				: '',
358
+			'batch_message_content' => isset($template_fields['newsletter_content'])
359
+				? $template_fields['newsletter_content']
360
+				: '',
361
+		);
362
+		$this->_return_json();
363
+	}
364 364
 
365 365
 
366
-    /**
367
-     * callback for AHEE__EE_Admin_List_Table__extra_tablenav__after_bottom_buttons action
368
-     *
369
-     * @since 4.3.0
370
-     * @param EE_Admin_List_Table $list_table
371
-     * @return void
372
-     * @throws InvalidArgumentException
373
-     * @throws InvalidDataTypeException
374
-     * @throws InvalidInterfaceException
375
-     */
376
-    public function add_newsletter_action_buttons(EE_Admin_List_Table $list_table)
377
-    {
378
-        if (
379
-            ! EE_Registry::instance()->CAP->current_user_can(
380
-                'ee_send_message',
381
-                'espresso_registrations_newsletter_selected_send'
382
-            )
383
-        ) {
384
-            return;
385
-        }
386
-        $routes_to_add_to = array(
387
-            'contact_list',
388
-            'event_registrations',
389
-            'default',
390
-        );
391
-        if ($this->_current_page === 'espresso_registrations' && in_array($this->_req_action, $routes_to_add_to)) {
392
-            if (
393
-                ($this->_req_action === 'event_registrations' && empty($this->_req_data['event_id']))
394
-                || (isset($this->_req_data['status']) && $this->_req_data['status'] === 'trash')
395
-            ) {
396
-                echo '';
397
-            } else {
398
-                $button_text = sprintf(
399
-                    esc_html__('Send Batch Message (%s selected)', 'event_espresso'),
400
-                    '<span class="send-selected-newsletter-count">0</span>'
401
-                );
402
-                echo '<button id="selected-batch-send-trigger" class="button secondary-button">'
403
-                     . '<span class="dashicons dashicons-email "></span>'
404
-                     . $button_text
405
-                     . '</button>';
406
-                add_action('admin_footer', array($this, 'newsletter_send_form_skeleton'));
407
-            }
408
-        }
409
-    }
366
+	/**
367
+	 * callback for AHEE__EE_Admin_List_Table__extra_tablenav__after_bottom_buttons action
368
+	 *
369
+	 * @since 4.3.0
370
+	 * @param EE_Admin_List_Table $list_table
371
+	 * @return void
372
+	 * @throws InvalidArgumentException
373
+	 * @throws InvalidDataTypeException
374
+	 * @throws InvalidInterfaceException
375
+	 */
376
+	public function add_newsletter_action_buttons(EE_Admin_List_Table $list_table)
377
+	{
378
+		if (
379
+			! EE_Registry::instance()->CAP->current_user_can(
380
+				'ee_send_message',
381
+				'espresso_registrations_newsletter_selected_send'
382
+			)
383
+		) {
384
+			return;
385
+		}
386
+		$routes_to_add_to = array(
387
+			'contact_list',
388
+			'event_registrations',
389
+			'default',
390
+		);
391
+		if ($this->_current_page === 'espresso_registrations' && in_array($this->_req_action, $routes_to_add_to)) {
392
+			if (
393
+				($this->_req_action === 'event_registrations' && empty($this->_req_data['event_id']))
394
+				|| (isset($this->_req_data['status']) && $this->_req_data['status'] === 'trash')
395
+			) {
396
+				echo '';
397
+			} else {
398
+				$button_text = sprintf(
399
+					esc_html__('Send Batch Message (%s selected)', 'event_espresso'),
400
+					'<span class="send-selected-newsletter-count">0</span>'
401
+				);
402
+				echo '<button id="selected-batch-send-trigger" class="button secondary-button">'
403
+					 . '<span class="dashicons dashicons-email "></span>'
404
+					 . $button_text
405
+					 . '</button>';
406
+				add_action('admin_footer', array($this, 'newsletter_send_form_skeleton'));
407
+			}
408
+		}
409
+	}
410 410
 
411 411
 
412
-    /**
413
-     * @throws DomainException
414
-     * @throws EE_Error
415
-     * @throws InvalidArgumentException
416
-     * @throws InvalidDataTypeException
417
-     * @throws InvalidInterfaceException
418
-     */
419
-    public function newsletter_send_form_skeleton()
420
-    {
421
-        $list_table = $this->_list_table_object;
422
-        $codes = array();
423
-        // need to templates for the newsletter message type for the template selector.
424
-        $values[] = array('text' => esc_html__('Select Template to Use', 'event_espresso'), 'id' => 0);
425
-        $mtps = EEM_Message_Template_Group::instance()->get_all(
426
-            array(array('MTP_message_type' => 'newsletter', 'MTP_messenger' => 'email'))
427
-        );
428
-        foreach ($mtps as $mtp) {
429
-            $name = $mtp->name();
430
-            $values[] = array(
431
-                'text' => empty($name) ? esc_html__('Global', 'event_espresso') : $name,
432
-                'id'   => $mtp->ID(),
433
-            );
434
-        }
435
-        // need to get a list of shortcodes that are available for the newsletter message type.
436
-        $shortcodes = EEH_MSG_Template::get_shortcodes(
437
-            'newsletter',
438
-            'email',
439
-            array(),
440
-            'attendee',
441
-            false
442
-        );
443
-        foreach ($shortcodes as $field => $shortcode_array) {
444
-            $available_shortcodes = array();
445
-            foreach ($shortcode_array as $shortcode => $shortcode_details) {
446
-                $field_id = $field === '[NEWSLETTER_CONTENT]'
447
-                    ? 'content'
448
-                    : $field;
449
-                $field_id = 'batch-message-' . strtolower($field_id);
450
-                $available_shortcodes[] = '<span class="js-shortcode-selection" data-value="'
451
-                                          . $shortcode
452
-                                          . '" data-linked-input-id="' . $field_id . '">'
453
-                                          . $shortcode
454
-                                          . '</span>';
455
-            }
456
-            $codes[ $field ] = implode(', ', $available_shortcodes);
457
-        }
458
-        $shortcodes = $codes;
459
-        $form_template = REG_CAF_TEMPLATE_PATH . 'newsletter-send-form.template.php';
460
-        $form_template_args = array(
461
-            'form_action'       => admin_url('admin.php?page=espresso_registrations'),
462
-            'form_route'        => 'newsletter_selected_send',
463
-            'form_nonce_name'   => 'newsletter_selected_send_nonce',
464
-            'form_nonce'        => wp_create_nonce('newsletter_selected_send_nonce'),
465
-            'redirect_back_to'  => $this->_req_action,
466
-            'ajax_nonce'        => wp_create_nonce('get_newsletter_form_content_nonce'),
467
-            'template_selector' => EEH_Form_Fields::select_input('newsletter_mtp_selected', $values),
468
-            'shortcodes'        => $shortcodes,
469
-            'id_type'           => $list_table instanceof EE_Attendee_Contact_List_Table ? 'contact' : 'registration',
470
-        );
471
-        EEH_Template::display_template($form_template, $form_template_args);
472
-    }
412
+	/**
413
+	 * @throws DomainException
414
+	 * @throws EE_Error
415
+	 * @throws InvalidArgumentException
416
+	 * @throws InvalidDataTypeException
417
+	 * @throws InvalidInterfaceException
418
+	 */
419
+	public function newsletter_send_form_skeleton()
420
+	{
421
+		$list_table = $this->_list_table_object;
422
+		$codes = array();
423
+		// need to templates for the newsletter message type for the template selector.
424
+		$values[] = array('text' => esc_html__('Select Template to Use', 'event_espresso'), 'id' => 0);
425
+		$mtps = EEM_Message_Template_Group::instance()->get_all(
426
+			array(array('MTP_message_type' => 'newsletter', 'MTP_messenger' => 'email'))
427
+		);
428
+		foreach ($mtps as $mtp) {
429
+			$name = $mtp->name();
430
+			$values[] = array(
431
+				'text' => empty($name) ? esc_html__('Global', 'event_espresso') : $name,
432
+				'id'   => $mtp->ID(),
433
+			);
434
+		}
435
+		// need to get a list of shortcodes that are available for the newsletter message type.
436
+		$shortcodes = EEH_MSG_Template::get_shortcodes(
437
+			'newsletter',
438
+			'email',
439
+			array(),
440
+			'attendee',
441
+			false
442
+		);
443
+		foreach ($shortcodes as $field => $shortcode_array) {
444
+			$available_shortcodes = array();
445
+			foreach ($shortcode_array as $shortcode => $shortcode_details) {
446
+				$field_id = $field === '[NEWSLETTER_CONTENT]'
447
+					? 'content'
448
+					: $field;
449
+				$field_id = 'batch-message-' . strtolower($field_id);
450
+				$available_shortcodes[] = '<span class="js-shortcode-selection" data-value="'
451
+										  . $shortcode
452
+										  . '" data-linked-input-id="' . $field_id . '">'
453
+										  . $shortcode
454
+										  . '</span>';
455
+			}
456
+			$codes[ $field ] = implode(', ', $available_shortcodes);
457
+		}
458
+		$shortcodes = $codes;
459
+		$form_template = REG_CAF_TEMPLATE_PATH . 'newsletter-send-form.template.php';
460
+		$form_template_args = array(
461
+			'form_action'       => admin_url('admin.php?page=espresso_registrations'),
462
+			'form_route'        => 'newsletter_selected_send',
463
+			'form_nonce_name'   => 'newsletter_selected_send_nonce',
464
+			'form_nonce'        => wp_create_nonce('newsletter_selected_send_nonce'),
465
+			'redirect_back_to'  => $this->_req_action,
466
+			'ajax_nonce'        => wp_create_nonce('get_newsletter_form_content_nonce'),
467
+			'template_selector' => EEH_Form_Fields::select_input('newsletter_mtp_selected', $values),
468
+			'shortcodes'        => $shortcodes,
469
+			'id_type'           => $list_table instanceof EE_Attendee_Contact_List_Table ? 'contact' : 'registration',
470
+		);
471
+		EEH_Template::display_template($form_template, $form_template_args);
472
+	}
473 473
 
474 474
 
475
-    /**
476
-     * Handles sending selected registrations/contacts a newsletter.
477
-     *
478
-     * @since  4.3.0
479
-     * @return void
480
-     * @throws EE_Error
481
-     * @throws InvalidArgumentException
482
-     * @throws InvalidDataTypeException
483
-     * @throws InvalidInterfaceException
484
-     */
485
-    protected function _newsletter_selected_send()
486
-    {
487
-        $success = true;
488
-        // first we need to make sure we have a GRP_ID so we know what template we're sending and updating!
489
-        if (empty($this->_req_data['newsletter_mtp_selected'])) {
490
-            EE_Error::add_error(
491
-                esc_html__(
492
-                    'In order to send a message, a Message Template GRP_ID is needed. It was not provided so messages were not sent.',
493
-                    'event_espresso'
494
-                ),
495
-                __FILE__,
496
-                __FUNCTION__,
497
-                __LINE__
498
-            );
499
-            $success = false;
500
-        }
501
-        if ($success) {
502
-            // update Message template in case there are any changes
503
-            $Message_Template_Group = EEM_Message_Template_Group::instance()->get_one_by_ID(
504
-                $this->_req_data['newsletter_mtp_selected']
505
-            );
506
-            $Message_Templates = $Message_Template_Group instanceof EE_Message_Template_Group
507
-                ? $Message_Template_Group->context_templates()
508
-                : array();
509
-            if (empty($Message_Templates)) {
510
-                EE_Error::add_error(
511
-                    esc_html__(
512
-                        'Unable to retrieve message template fields from the db. Messages not sent.',
513
-                        'event_espresso'
514
-                    ),
515
-                    __FILE__,
516
-                    __FUNCTION__,
517
-                    __LINE__
518
-                );
519
-            }
520
-            // let's just update the specific fields
521
-            foreach ($Message_Templates['attendee'] as $Message_Template) {
522
-                if ($Message_Template instanceof EE_Message_Template) {
523
-                    $field = $Message_Template->get('MTP_template_field');
524
-                    $content = $Message_Template->get('MTP_content');
525
-                    $new_content = $content;
526
-                    switch ($field) {
527
-                        case 'from':
528
-                            $new_content = ! empty($this->_req_data['batch_message']['from'])
529
-                                ? $this->_req_data['batch_message']['from']
530
-                                : $content;
531
-                            break;
532
-                        case 'subject':
533
-                            $new_content = ! empty($this->_req_data['batch_message']['subject'])
534
-                                ? $this->_req_data['batch_message']['subject']
535
-                                : $content;
536
-                            break;
537
-                        case 'content':
538
-                            $new_content = $content;
539
-                            $new_content['newsletter_content'] = ! empty($this->_req_data['batch_message']['content'])
540
-                                ? $this->_req_data['batch_message']['content']
541
-                                : $content['newsletter_content'];
542
-                            break;
543
-                        default:
544
-                            // continue the foreach loop, we don't want to set $new_content nor save.
545
-                            continue 2;
546
-                    }
547
-                    $Message_Template->set('MTP_content', $new_content);
548
-                    $Message_Template->save();
549
-                }
550
-            }
551
-            // great fields are updated!  now let's make sure we just have contact objects (EE_Attendee).
552
-            $id_type = ! empty($this->_req_data['batch_message']['id_type'])
553
-                ? $this->_req_data['batch_message']['id_type']
554
-                : 'registration';
555
-            // id_type will affect how we assemble the ids.
556
-            $ids = ! empty($this->_req_data['batch_message']['ids'])
557
-                ? json_decode(stripslashes($this->_req_data['batch_message']['ids']))
558
-                : array();
559
-            $registrations_used_for_contact_data = array();
560
-            // using switch because eventually we'll have other contexts that will be used for generating messages.
561
-            switch ($id_type) {
562
-                case 'registration':
563
-                    $registrations_used_for_contact_data = EEM_Registration::instance()->get_all(
564
-                        array(
565
-                            array(
566
-                                'REG_ID' => array('IN', $ids),
567
-                            ),
568
-                        )
569
-                    );
570
-                    break;
571
-                case 'contact':
572
-                    $registrations_used_for_contact_data = EEM_Registration::instance()
573
-                                                                           ->get_latest_registration_for_each_of_given_contacts(
574
-                                                                               $ids
575
-                                                                           );
576
-                    break;
577
-            }
578
-            do_action_ref_array(
579
-                'AHEE__Extend_Registrations_Admin_Page___newsletter_selected_send__with_registrations',
580
-                array(
581
-                    $registrations_used_for_contact_data,
582
-                    $Message_Template_Group->ID(),
583
-                )
584
-            );
585
-            // kept for backward compat, internally we no longer use this action.
586
-            // @deprecated 4.8.36.rc.002
587
-            $contacts = $id_type === 'registration'
588
-                ? EEM_Attendee::instance()->get_array_of_contacts_from_reg_ids($ids)
589
-                : EEM_Attendee::instance()->get_all(array(array('ATT_ID' => array('in', $ids))));
590
-            do_action_ref_array(
591
-                'AHEE__Extend_Registrations_Admin_Page___newsletter_selected_send',
592
-                array(
593
-                    $contacts,
594
-                    $Message_Template_Group->ID(),
595
-                )
596
-            );
597
-        }
598
-        $query_args = array(
599
-            'action' => ! empty($this->_req_data['redirect_back_to'])
600
-                ? $this->_req_data['redirect_back_to']
601
-                : 'default',
602
-        );
603
-        $this->_redirect_after_action(false, '', '', $query_args, true);
604
-    }
475
+	/**
476
+	 * Handles sending selected registrations/contacts a newsletter.
477
+	 *
478
+	 * @since  4.3.0
479
+	 * @return void
480
+	 * @throws EE_Error
481
+	 * @throws InvalidArgumentException
482
+	 * @throws InvalidDataTypeException
483
+	 * @throws InvalidInterfaceException
484
+	 */
485
+	protected function _newsletter_selected_send()
486
+	{
487
+		$success = true;
488
+		// first we need to make sure we have a GRP_ID so we know what template we're sending and updating!
489
+		if (empty($this->_req_data['newsletter_mtp_selected'])) {
490
+			EE_Error::add_error(
491
+				esc_html__(
492
+					'In order to send a message, a Message Template GRP_ID is needed. It was not provided so messages were not sent.',
493
+					'event_espresso'
494
+				),
495
+				__FILE__,
496
+				__FUNCTION__,
497
+				__LINE__
498
+			);
499
+			$success = false;
500
+		}
501
+		if ($success) {
502
+			// update Message template in case there are any changes
503
+			$Message_Template_Group = EEM_Message_Template_Group::instance()->get_one_by_ID(
504
+				$this->_req_data['newsletter_mtp_selected']
505
+			);
506
+			$Message_Templates = $Message_Template_Group instanceof EE_Message_Template_Group
507
+				? $Message_Template_Group->context_templates()
508
+				: array();
509
+			if (empty($Message_Templates)) {
510
+				EE_Error::add_error(
511
+					esc_html__(
512
+						'Unable to retrieve message template fields from the db. Messages not sent.',
513
+						'event_espresso'
514
+					),
515
+					__FILE__,
516
+					__FUNCTION__,
517
+					__LINE__
518
+				);
519
+			}
520
+			// let's just update the specific fields
521
+			foreach ($Message_Templates['attendee'] as $Message_Template) {
522
+				if ($Message_Template instanceof EE_Message_Template) {
523
+					$field = $Message_Template->get('MTP_template_field');
524
+					$content = $Message_Template->get('MTP_content');
525
+					$new_content = $content;
526
+					switch ($field) {
527
+						case 'from':
528
+							$new_content = ! empty($this->_req_data['batch_message']['from'])
529
+								? $this->_req_data['batch_message']['from']
530
+								: $content;
531
+							break;
532
+						case 'subject':
533
+							$new_content = ! empty($this->_req_data['batch_message']['subject'])
534
+								? $this->_req_data['batch_message']['subject']
535
+								: $content;
536
+							break;
537
+						case 'content':
538
+							$new_content = $content;
539
+							$new_content['newsletter_content'] = ! empty($this->_req_data['batch_message']['content'])
540
+								? $this->_req_data['batch_message']['content']
541
+								: $content['newsletter_content'];
542
+							break;
543
+						default:
544
+							// continue the foreach loop, we don't want to set $new_content nor save.
545
+							continue 2;
546
+					}
547
+					$Message_Template->set('MTP_content', $new_content);
548
+					$Message_Template->save();
549
+				}
550
+			}
551
+			// great fields are updated!  now let's make sure we just have contact objects (EE_Attendee).
552
+			$id_type = ! empty($this->_req_data['batch_message']['id_type'])
553
+				? $this->_req_data['batch_message']['id_type']
554
+				: 'registration';
555
+			// id_type will affect how we assemble the ids.
556
+			$ids = ! empty($this->_req_data['batch_message']['ids'])
557
+				? json_decode(stripslashes($this->_req_data['batch_message']['ids']))
558
+				: array();
559
+			$registrations_used_for_contact_data = array();
560
+			// using switch because eventually we'll have other contexts that will be used for generating messages.
561
+			switch ($id_type) {
562
+				case 'registration':
563
+					$registrations_used_for_contact_data = EEM_Registration::instance()->get_all(
564
+						array(
565
+							array(
566
+								'REG_ID' => array('IN', $ids),
567
+							),
568
+						)
569
+					);
570
+					break;
571
+				case 'contact':
572
+					$registrations_used_for_contact_data = EEM_Registration::instance()
573
+																		   ->get_latest_registration_for_each_of_given_contacts(
574
+																			   $ids
575
+																		   );
576
+					break;
577
+			}
578
+			do_action_ref_array(
579
+				'AHEE__Extend_Registrations_Admin_Page___newsletter_selected_send__with_registrations',
580
+				array(
581
+					$registrations_used_for_contact_data,
582
+					$Message_Template_Group->ID(),
583
+				)
584
+			);
585
+			// kept for backward compat, internally we no longer use this action.
586
+			// @deprecated 4.8.36.rc.002
587
+			$contacts = $id_type === 'registration'
588
+				? EEM_Attendee::instance()->get_array_of_contacts_from_reg_ids($ids)
589
+				: EEM_Attendee::instance()->get_all(array(array('ATT_ID' => array('in', $ids))));
590
+			do_action_ref_array(
591
+				'AHEE__Extend_Registrations_Admin_Page___newsletter_selected_send',
592
+				array(
593
+					$contacts,
594
+					$Message_Template_Group->ID(),
595
+				)
596
+			);
597
+		}
598
+		$query_args = array(
599
+			'action' => ! empty($this->_req_data['redirect_back_to'])
600
+				? $this->_req_data['redirect_back_to']
601
+				: 'default',
602
+		);
603
+		$this->_redirect_after_action(false, '', '', $query_args, true);
604
+	}
605 605
 
606 606
 
607
-    /**
608
-     * This is called when javascript is being enqueued to setup the various data needed for the reports js.
609
-     * Also $this->{$_reports_template_data} property is set for later usage by the _registration_reports method.
610
-     */
611
-    protected function _registration_reports_js_setup()
612
-    {
613
-        $this->_reports_template_data['admin_reports'][] = $this->_registrations_per_day_report();
614
-        $this->_reports_template_data['admin_reports'][] = $this->_registrations_per_event_report();
615
-    }
607
+	/**
608
+	 * This is called when javascript is being enqueued to setup the various data needed for the reports js.
609
+	 * Also $this->{$_reports_template_data} property is set for later usage by the _registration_reports method.
610
+	 */
611
+	protected function _registration_reports_js_setup()
612
+	{
613
+		$this->_reports_template_data['admin_reports'][] = $this->_registrations_per_day_report();
614
+		$this->_reports_template_data['admin_reports'][] = $this->_registrations_per_event_report();
615
+	}
616 616
 
617 617
 
618
-    /**
619
-     *        generates Business Reports regarding Registrations
620
-     *
621
-     * @access protected
622
-     * @return void
623
-     * @throws DomainException
624
-     */
625
-    protected function _registration_reports()
626
-    {
627
-        $template_path = EE_ADMIN_TEMPLATE . 'admin_reports.template.php';
628
-        $this->_template_args['admin_page_content'] = EEH_Template::display_template(
629
-            $template_path,
630
-            $this->_reports_template_data,
631
-            true
632
-        );
633
-        // the final template wrapper
634
-        $this->display_admin_page_with_no_sidebar();
635
-    }
618
+	/**
619
+	 *        generates Business Reports regarding Registrations
620
+	 *
621
+	 * @access protected
622
+	 * @return void
623
+	 * @throws DomainException
624
+	 */
625
+	protected function _registration_reports()
626
+	{
627
+		$template_path = EE_ADMIN_TEMPLATE . 'admin_reports.template.php';
628
+		$this->_template_args['admin_page_content'] = EEH_Template::display_template(
629
+			$template_path,
630
+			$this->_reports_template_data,
631
+			true
632
+		);
633
+		// the final template wrapper
634
+		$this->display_admin_page_with_no_sidebar();
635
+	}
636 636
 
637 637
 
638
-    /**
639
-     * Generates Business Report showing total registrations per day.
640
-     *
641
-     * @param string $period The period (acceptable by PHP Datetime constructor) for which the report is generated.
642
-     * @return string
643
-     * @throws EE_Error
644
-     * @throws InvalidArgumentException
645
-     * @throws InvalidDataTypeException
646
-     * @throws InvalidInterfaceException
647
-     */
648
-    private function _registrations_per_day_report($period = '-1 month')
649
-    {
650
-        $report_ID = 'reg-admin-registrations-per-day-report-dv';
651
-        $results = EEM_Registration::instance()->get_registrations_per_day_and_per_status_report($period);
652
-        $results = (array) $results;
653
-        $regs = array();
654
-        $subtitle = '';
655
-        if ($results) {
656
-            $column_titles = array();
657
-            $tracker = 0;
658
-            foreach ($results as $result) {
659
-                $report_column_values = array();
660
-                foreach ($result as $property_name => $property_value) {
661
-                    $property_value = $property_name === 'Registration_REG_date' ? $property_value
662
-                        : (int) $property_value;
663
-                    $report_column_values[] = $property_value;
664
-                    if ($tracker === 0) {
665
-                        if ($property_name === 'Registration_REG_date') {
666
-                            $column_titles[] = esc_html__(
667
-                                'Date (only days with registrations are shown)',
668
-                                'event_espresso'
669
-                            );
670
-                        } else {
671
-                            $column_titles[] = EEH_Template::pretty_status($property_name, false, 'sentence');
672
-                        }
673
-                    }
674
-                }
675
-                $tracker++;
676
-                $regs[] = $report_column_values;
677
-            }
678
-            // make sure the column_titles is pushed to the beginning of the array
679
-            array_unshift($regs, $column_titles);
680
-            // setup the date range.
681
-            $DateTimeZone = new DateTimeZone(EEH_DTT_Helper::get_timezone());
682
-            $beginning_date = new DateTime("now " . $period, $DateTimeZone);
683
-            $ending_date = new DateTime("now", $DateTimeZone);
684
-            $subtitle = sprintf(
685
-                _x('For the period: %1$s to %2$s', 'Used to give date range', 'event_espresso'),
686
-                $beginning_date->format('Y-m-d'),
687
-                $ending_date->format('Y-m-d')
688
-            );
689
-        }
690
-        $report_title = esc_html__('Total Registrations per Day', 'event_espresso');
691
-        $report_params = array(
692
-            'title'     => $report_title,
693
-            'subtitle'  => $subtitle,
694
-            'id'        => $report_ID,
695
-            'regs'      => $regs,
696
-            'noResults' => empty($regs),
697
-            'noRegsMsg' => sprintf(
698
-                esc_html__(
699
-                    '%sThere are currently no registration records in the last month for this report.%s',
700
-                    'event_espresso'
701
-                ),
702
-                '<h2>' . $report_title . '</h2><p>',
703
-                '</p>'
704
-            ),
705
-        );
706
-        wp_localize_script('ee-reg-reports-js', 'regPerDay', $report_params);
707
-        return $report_ID;
708
-    }
638
+	/**
639
+	 * Generates Business Report showing total registrations per day.
640
+	 *
641
+	 * @param string $period The period (acceptable by PHP Datetime constructor) for which the report is generated.
642
+	 * @return string
643
+	 * @throws EE_Error
644
+	 * @throws InvalidArgumentException
645
+	 * @throws InvalidDataTypeException
646
+	 * @throws InvalidInterfaceException
647
+	 */
648
+	private function _registrations_per_day_report($period = '-1 month')
649
+	{
650
+		$report_ID = 'reg-admin-registrations-per-day-report-dv';
651
+		$results = EEM_Registration::instance()->get_registrations_per_day_and_per_status_report($period);
652
+		$results = (array) $results;
653
+		$regs = array();
654
+		$subtitle = '';
655
+		if ($results) {
656
+			$column_titles = array();
657
+			$tracker = 0;
658
+			foreach ($results as $result) {
659
+				$report_column_values = array();
660
+				foreach ($result as $property_name => $property_value) {
661
+					$property_value = $property_name === 'Registration_REG_date' ? $property_value
662
+						: (int) $property_value;
663
+					$report_column_values[] = $property_value;
664
+					if ($tracker === 0) {
665
+						if ($property_name === 'Registration_REG_date') {
666
+							$column_titles[] = esc_html__(
667
+								'Date (only days with registrations are shown)',
668
+								'event_espresso'
669
+							);
670
+						} else {
671
+							$column_titles[] = EEH_Template::pretty_status($property_name, false, 'sentence');
672
+						}
673
+					}
674
+				}
675
+				$tracker++;
676
+				$regs[] = $report_column_values;
677
+			}
678
+			// make sure the column_titles is pushed to the beginning of the array
679
+			array_unshift($regs, $column_titles);
680
+			// setup the date range.
681
+			$DateTimeZone = new DateTimeZone(EEH_DTT_Helper::get_timezone());
682
+			$beginning_date = new DateTime("now " . $period, $DateTimeZone);
683
+			$ending_date = new DateTime("now", $DateTimeZone);
684
+			$subtitle = sprintf(
685
+				_x('For the period: %1$s to %2$s', 'Used to give date range', 'event_espresso'),
686
+				$beginning_date->format('Y-m-d'),
687
+				$ending_date->format('Y-m-d')
688
+			);
689
+		}
690
+		$report_title = esc_html__('Total Registrations per Day', 'event_espresso');
691
+		$report_params = array(
692
+			'title'     => $report_title,
693
+			'subtitle'  => $subtitle,
694
+			'id'        => $report_ID,
695
+			'regs'      => $regs,
696
+			'noResults' => empty($regs),
697
+			'noRegsMsg' => sprintf(
698
+				esc_html__(
699
+					'%sThere are currently no registration records in the last month for this report.%s',
700
+					'event_espresso'
701
+				),
702
+				'<h2>' . $report_title . '</h2><p>',
703
+				'</p>'
704
+			),
705
+		);
706
+		wp_localize_script('ee-reg-reports-js', 'regPerDay', $report_params);
707
+		return $report_ID;
708
+	}
709 709
 
710 710
 
711
-    /**
712
-     * Generates Business Report showing total registrations per event.
713
-     *
714
-     * @param string $period The period (acceptable by PHP Datetime constructor) for which the report is generated.
715
-     * @return string
716
-     * @throws EE_Error
717
-     * @throws InvalidArgumentException
718
-     * @throws InvalidDataTypeException
719
-     * @throws InvalidInterfaceException
720
-     */
721
-    private function _registrations_per_event_report($period = '-1 month')
722
-    {
723
-        $report_ID = 'reg-admin-registrations-per-event-report-dv';
724
-        $results = EEM_Registration::instance()->get_registrations_per_event_and_per_status_report($period);
725
-        $results = (array) $results;
726
-        $regs = array();
727
-        $subtitle = '';
728
-        if ($results) {
729
-            $column_titles = array();
730
-            $tracker = 0;
731
-            foreach ($results as $result) {
732
-                $report_column_values = array();
733
-                foreach ($result as $property_name => $property_value) {
734
-                    $property_value = $property_name === 'Registration_Event' ? wp_trim_words(
735
-                        $property_value,
736
-                        4,
737
-                        '...'
738
-                    ) : (int) $property_value;
739
-                    $report_column_values[] = $property_value;
740
-                    if ($tracker === 0) {
741
-                        if ($property_name === 'Registration_Event') {
742
-                            $column_titles[] = esc_html__('Event', 'event_espresso');
743
-                        } else {
744
-                            $column_titles[] = EEH_Template::pretty_status($property_name, false, 'sentence');
745
-                        }
746
-                    }
747
-                }
748
-                $tracker++;
749
-                $regs[] = $report_column_values;
750
-            }
751
-            // make sure the column_titles is pushed to the beginning of the array
752
-            array_unshift($regs, $column_titles);
753
-            // setup the date range.
754
-            $DateTimeZone = new DateTimeZone(EEH_DTT_Helper::get_timezone());
755
-            $beginning_date = new DateTime("now " . $period, $DateTimeZone);
756
-            $ending_date = new DateTime("now", $DateTimeZone);
757
-            $subtitle = sprintf(
758
-                _x('For the period: %1$s to %2$s', 'Used to give date range', 'event_espresso'),
759
-                $beginning_date->format('Y-m-d'),
760
-                $ending_date->format('Y-m-d')
761
-            );
762
-        }
763
-        $report_title = esc_html__('Total Registrations per Event', 'event_espresso');
764
-        $report_params = array(
765
-            'title'     => $report_title,
766
-            'subtitle'  => $subtitle,
767
-            'id'        => $report_ID,
768
-            'regs'      => $regs,
769
-            'noResults' => empty($regs),
770
-            'noRegsMsg' => sprintf(
771
-                esc_html__(
772
-                    '%sThere are currently no registration records in the last month for this report.%s',
773
-                    'event_espresso'
774
-                ),
775
-                '<h2>' . $report_title . '</h2><p>',
776
-                '</p>'
777
-            ),
778
-        );
779
-        wp_localize_script('ee-reg-reports-js', 'regPerEvent', $report_params);
780
-        return $report_ID;
781
-    }
711
+	/**
712
+	 * Generates Business Report showing total registrations per event.
713
+	 *
714
+	 * @param string $period The period (acceptable by PHP Datetime constructor) for which the report is generated.
715
+	 * @return string
716
+	 * @throws EE_Error
717
+	 * @throws InvalidArgumentException
718
+	 * @throws InvalidDataTypeException
719
+	 * @throws InvalidInterfaceException
720
+	 */
721
+	private function _registrations_per_event_report($period = '-1 month')
722
+	{
723
+		$report_ID = 'reg-admin-registrations-per-event-report-dv';
724
+		$results = EEM_Registration::instance()->get_registrations_per_event_and_per_status_report($period);
725
+		$results = (array) $results;
726
+		$regs = array();
727
+		$subtitle = '';
728
+		if ($results) {
729
+			$column_titles = array();
730
+			$tracker = 0;
731
+			foreach ($results as $result) {
732
+				$report_column_values = array();
733
+				foreach ($result as $property_name => $property_value) {
734
+					$property_value = $property_name === 'Registration_Event' ? wp_trim_words(
735
+						$property_value,
736
+						4,
737
+						'...'
738
+					) : (int) $property_value;
739
+					$report_column_values[] = $property_value;
740
+					if ($tracker === 0) {
741
+						if ($property_name === 'Registration_Event') {
742
+							$column_titles[] = esc_html__('Event', 'event_espresso');
743
+						} else {
744
+							$column_titles[] = EEH_Template::pretty_status($property_name, false, 'sentence');
745
+						}
746
+					}
747
+				}
748
+				$tracker++;
749
+				$regs[] = $report_column_values;
750
+			}
751
+			// make sure the column_titles is pushed to the beginning of the array
752
+			array_unshift($regs, $column_titles);
753
+			// setup the date range.
754
+			$DateTimeZone = new DateTimeZone(EEH_DTT_Helper::get_timezone());
755
+			$beginning_date = new DateTime("now " . $period, $DateTimeZone);
756
+			$ending_date = new DateTime("now", $DateTimeZone);
757
+			$subtitle = sprintf(
758
+				_x('For the period: %1$s to %2$s', 'Used to give date range', 'event_espresso'),
759
+				$beginning_date->format('Y-m-d'),
760
+				$ending_date->format('Y-m-d')
761
+			);
762
+		}
763
+		$report_title = esc_html__('Total Registrations per Event', 'event_espresso');
764
+		$report_params = array(
765
+			'title'     => $report_title,
766
+			'subtitle'  => $subtitle,
767
+			'id'        => $report_ID,
768
+			'regs'      => $regs,
769
+			'noResults' => empty($regs),
770
+			'noRegsMsg' => sprintf(
771
+				esc_html__(
772
+					'%sThere are currently no registration records in the last month for this report.%s',
773
+					'event_espresso'
774
+				),
775
+				'<h2>' . $report_title . '</h2><p>',
776
+				'</p>'
777
+			),
778
+		);
779
+		wp_localize_script('ee-reg-reports-js', 'regPerEvent', $report_params);
780
+		return $report_ID;
781
+	}
782 782
 
783 783
 
784
-    /**
785
-     * generates HTML for the Registration Check-in list table (showing all Check-ins for a specific registration)
786
-     *
787
-     * @access protected
788
-     * @return void
789
-     * @throws EE_Error
790
-     * @throws InvalidArgumentException
791
-     * @throws InvalidDataTypeException
792
-     * @throws InvalidInterfaceException
793
-     * @throws \EventEspresso\core\exceptions\EntityNotFoundException
794
-     */
795
-    protected function _registration_checkin_list_table()
796
-    {
797
-        do_action('AHEE_log', __FILE__, __FUNCTION__, '');
798
-        $reg_id = isset($this->_req_data['_REG_ID']) ? $this->_req_data['_REG_ID'] : null;
799
-        /** @var EE_Registration $registration */
800
-        $registration = EEM_Registration::instance()->get_one_by_ID($reg_id);
801
-        if (! $registration instanceof EE_Registration) {
802
-            throw new EE_Error(
803
-                sprintf(
804
-                    esc_html__('An error occurred. There is no registration with ID (%d)', 'event_espresso'),
805
-                    $reg_id
806
-                )
807
-            );
808
-        }
809
-        $attendee = $registration->attendee();
810
-        $this->_admin_page_title .= $this->get_action_link_or_button(
811
-            'new_registration',
812
-            'add-registrant',
813
-            array('event_id' => $registration->event_ID()),
814
-            'add-new-h2'
815
-        );
816
-        $checked_in = new CheckinStatusDashicon(EE_Checkin::status_checked_in);
817
-        $checked_out = new CheckinStatusDashicon(EE_Checkin::status_checked_out);
818
-        $legend_items = array(
819
-            'checkin'  => array(
820
-                'class' => $checked_in->cssClasses(),
821
-                'desc'  => $checked_in->legendLabel(),
822
-            ),
823
-            'checkout' => array(
824
-                'class' => $checked_out->cssClasses(),
825
-                'desc'  => $checked_out->legendLabel(),
826
-            ),
827
-        );
828
-        $this->_template_args['after_list_table'] = $this->_display_legend($legend_items);
829
-        $dtt_id = isset($this->_req_data['DTT_ID']) ? $this->_req_data['DTT_ID'] : null;
830
-        /** @var EE_Datetime $datetime */
831
-        $datetime = EEM_Datetime::instance()->get_one_by_ID($dtt_id);
832
-        $datetime_label = '';
833
-        if ($datetime instanceof EE_Datetime) {
834
-            $datetime_label = $datetime->get_dtt_display_name(true);
835
-            $datetime_label .= ! empty($datetime_label)
836
-                ? ' (' . $datetime->get_dtt_display_name() . ')'
837
-                : $datetime->get_dtt_display_name();
838
-        }
839
-        $datetime_link = ! empty($dtt_id) && $registration instanceof EE_Registration
840
-            ? EE_Admin_Page::add_query_args_and_nonce(
841
-                array(
842
-                    'action'   => 'event_registrations',
843
-                    'event_id' => $registration->event_ID(),
844
-                    'DTT_ID'   => $dtt_id,
845
-                ),
846
-                $this->_admin_base_url
847
-            )
848
-            : '';
849
-        $datetime_link = ! empty($datetime_link)
850
-            ? '<a href="' . $datetime_link . '">'
851
-              . '<span id="checkin-dtt">'
852
-              . $datetime_label
853
-              . '</span></a>'
854
-            : $datetime_label;
855
-        $attendee_name = $attendee instanceof EE_Attendee
856
-            ? $attendee->full_name()
857
-            : '';
858
-        $attendee_link = $attendee instanceof EE_Attendee
859
-            ? $attendee->get_admin_details_link()
860
-            : '';
861
-        $attendee_link = ! empty($attendee_link)
862
-            ? '<a href="' . $attendee->get_admin_details_link() . '"'
863
-              . ' title="' . esc_html__('Click for attendee details', 'event_espresso') . '">'
864
-              . '<span id="checkin-attendee-name">'
865
-              . $attendee_name
866
-              . '</span></a>'
867
-            : '';
868
-        $event_link = $registration->event() instanceof EE_Event
869
-            ? $registration->event()->get_admin_details_link()
870
-            : '';
871
-        $event_link = ! empty($event_link)
872
-            ? '<a href="' . $event_link . '"'
873
-              . ' title="' . esc_html__('Click here to edit event.', 'event_espresso') . '">'
874
-              . '<span id="checkin-event-name">'
875
-              . $registration->event_name()
876
-              . '</span>'
877
-              . '</a>'
878
-            : '';
879
-        $this->_template_args['before_list_table'] = ! empty($reg_id) && ! empty($dtt_id)
880
-            ? '<h2>' . sprintf(
881
-                esc_html__('Displaying check in records for %1$s for %2$s at the event, %3$s', 'event_espresso'),
882
-                $attendee_link,
883
-                $datetime_link,
884
-                $event_link
885
-            ) . '</h2>'
886
-            : '';
887
-        $this->_template_args['list_table_hidden_fields'] = ! empty($reg_id)
888
-            ? '<input type="hidden" name="_REG_ID" value="' . $reg_id . '">' : '';
889
-        $this->_template_args['list_table_hidden_fields'] .= ! empty($dtt_id)
890
-            ? '<input type="hidden" name="DTT_ID" value="' . $dtt_id . '">' : '';
891
-        $this->display_admin_list_table_page_with_no_sidebar();
892
-    }
784
+	/**
785
+	 * generates HTML for the Registration Check-in list table (showing all Check-ins for a specific registration)
786
+	 *
787
+	 * @access protected
788
+	 * @return void
789
+	 * @throws EE_Error
790
+	 * @throws InvalidArgumentException
791
+	 * @throws InvalidDataTypeException
792
+	 * @throws InvalidInterfaceException
793
+	 * @throws \EventEspresso\core\exceptions\EntityNotFoundException
794
+	 */
795
+	protected function _registration_checkin_list_table()
796
+	{
797
+		do_action('AHEE_log', __FILE__, __FUNCTION__, '');
798
+		$reg_id = isset($this->_req_data['_REG_ID']) ? $this->_req_data['_REG_ID'] : null;
799
+		/** @var EE_Registration $registration */
800
+		$registration = EEM_Registration::instance()->get_one_by_ID($reg_id);
801
+		if (! $registration instanceof EE_Registration) {
802
+			throw new EE_Error(
803
+				sprintf(
804
+					esc_html__('An error occurred. There is no registration with ID (%d)', 'event_espresso'),
805
+					$reg_id
806
+				)
807
+			);
808
+		}
809
+		$attendee = $registration->attendee();
810
+		$this->_admin_page_title .= $this->get_action_link_or_button(
811
+			'new_registration',
812
+			'add-registrant',
813
+			array('event_id' => $registration->event_ID()),
814
+			'add-new-h2'
815
+		);
816
+		$checked_in = new CheckinStatusDashicon(EE_Checkin::status_checked_in);
817
+		$checked_out = new CheckinStatusDashicon(EE_Checkin::status_checked_out);
818
+		$legend_items = array(
819
+			'checkin'  => array(
820
+				'class' => $checked_in->cssClasses(),
821
+				'desc'  => $checked_in->legendLabel(),
822
+			),
823
+			'checkout' => array(
824
+				'class' => $checked_out->cssClasses(),
825
+				'desc'  => $checked_out->legendLabel(),
826
+			),
827
+		);
828
+		$this->_template_args['after_list_table'] = $this->_display_legend($legend_items);
829
+		$dtt_id = isset($this->_req_data['DTT_ID']) ? $this->_req_data['DTT_ID'] : null;
830
+		/** @var EE_Datetime $datetime */
831
+		$datetime = EEM_Datetime::instance()->get_one_by_ID($dtt_id);
832
+		$datetime_label = '';
833
+		if ($datetime instanceof EE_Datetime) {
834
+			$datetime_label = $datetime->get_dtt_display_name(true);
835
+			$datetime_label .= ! empty($datetime_label)
836
+				? ' (' . $datetime->get_dtt_display_name() . ')'
837
+				: $datetime->get_dtt_display_name();
838
+		}
839
+		$datetime_link = ! empty($dtt_id) && $registration instanceof EE_Registration
840
+			? EE_Admin_Page::add_query_args_and_nonce(
841
+				array(
842
+					'action'   => 'event_registrations',
843
+					'event_id' => $registration->event_ID(),
844
+					'DTT_ID'   => $dtt_id,
845
+				),
846
+				$this->_admin_base_url
847
+			)
848
+			: '';
849
+		$datetime_link = ! empty($datetime_link)
850
+			? '<a href="' . $datetime_link . '">'
851
+			  . '<span id="checkin-dtt">'
852
+			  . $datetime_label
853
+			  . '</span></a>'
854
+			: $datetime_label;
855
+		$attendee_name = $attendee instanceof EE_Attendee
856
+			? $attendee->full_name()
857
+			: '';
858
+		$attendee_link = $attendee instanceof EE_Attendee
859
+			? $attendee->get_admin_details_link()
860
+			: '';
861
+		$attendee_link = ! empty($attendee_link)
862
+			? '<a href="' . $attendee->get_admin_details_link() . '"'
863
+			  . ' title="' . esc_html__('Click for attendee details', 'event_espresso') . '">'
864
+			  . '<span id="checkin-attendee-name">'
865
+			  . $attendee_name
866
+			  . '</span></a>'
867
+			: '';
868
+		$event_link = $registration->event() instanceof EE_Event
869
+			? $registration->event()->get_admin_details_link()
870
+			: '';
871
+		$event_link = ! empty($event_link)
872
+			? '<a href="' . $event_link . '"'
873
+			  . ' title="' . esc_html__('Click here to edit event.', 'event_espresso') . '">'
874
+			  . '<span id="checkin-event-name">'
875
+			  . $registration->event_name()
876
+			  . '</span>'
877
+			  . '</a>'
878
+			: '';
879
+		$this->_template_args['before_list_table'] = ! empty($reg_id) && ! empty($dtt_id)
880
+			? '<h2>' . sprintf(
881
+				esc_html__('Displaying check in records for %1$s for %2$s at the event, %3$s', 'event_espresso'),
882
+				$attendee_link,
883
+				$datetime_link,
884
+				$event_link
885
+			) . '</h2>'
886
+			: '';
887
+		$this->_template_args['list_table_hidden_fields'] = ! empty($reg_id)
888
+			? '<input type="hidden" name="_REG_ID" value="' . $reg_id . '">' : '';
889
+		$this->_template_args['list_table_hidden_fields'] .= ! empty($dtt_id)
890
+			? '<input type="hidden" name="DTT_ID" value="' . $dtt_id . '">' : '';
891
+		$this->display_admin_list_table_page_with_no_sidebar();
892
+	}
893 893
 
894 894
 
895
-    /**
896
-     * toggle the Check-in status for the given registration (coming from ajax)
897
-     *
898
-     * @return void (JSON)
899
-     * @throws EE_Error
900
-     * @throws InvalidArgumentException
901
-     * @throws InvalidDataTypeException
902
-     * @throws InvalidInterfaceException
903
-     */
904
-    public function toggle_checkin_status()
905
-    {
906
-        // first make sure we have the necessary data
907
-        if (! isset($this->_req_data['_regid'])) {
908
-            EE_Error::add_error(
909
-                esc_html__(
910
-                    'There must be something broken with the html structure because the required data for toggling the Check-in status is not being sent via ajax',
911
-                    'event_espresso'
912
-                ),
913
-                __FILE__,
914
-                __FUNCTION__,
915
-                __LINE__
916
-            );
917
-            $this->_template_args['success'] = false;
918
-            $this->_template_args['error'] = true;
919
-            $this->_return_json();
920
-        };
921
-        // do a nonce check cause we're not coming in from an normal route here.
922
-        $nonce = isset($this->_req_data['checkinnonce']) ? sanitize_text_field($this->_req_data['checkinnonce'])
923
-            : '';
924
-        $nonce_ref = 'checkin_nonce';
925
-        $this->_verify_nonce($nonce, $nonce_ref);
926
-        // beautiful! Made it this far so let's get the status.
927
-        $new_status = new CheckinStatusDashicon($this->_toggle_checkin_status());
928
-        // setup new class to return via ajax
929
-        $this->_template_args['admin_page_content'] = 'clickable trigger-checkin ' . $new_status->cssClasses();
930
-        $this->_template_args['success'] = true;
931
-        $this->_return_json();
932
-    }
895
+	/**
896
+	 * toggle the Check-in status for the given registration (coming from ajax)
897
+	 *
898
+	 * @return void (JSON)
899
+	 * @throws EE_Error
900
+	 * @throws InvalidArgumentException
901
+	 * @throws InvalidDataTypeException
902
+	 * @throws InvalidInterfaceException
903
+	 */
904
+	public function toggle_checkin_status()
905
+	{
906
+		// first make sure we have the necessary data
907
+		if (! isset($this->_req_data['_regid'])) {
908
+			EE_Error::add_error(
909
+				esc_html__(
910
+					'There must be something broken with the html structure because the required data for toggling the Check-in status is not being sent via ajax',
911
+					'event_espresso'
912
+				),
913
+				__FILE__,
914
+				__FUNCTION__,
915
+				__LINE__
916
+			);
917
+			$this->_template_args['success'] = false;
918
+			$this->_template_args['error'] = true;
919
+			$this->_return_json();
920
+		};
921
+		// do a nonce check cause we're not coming in from an normal route here.
922
+		$nonce = isset($this->_req_data['checkinnonce']) ? sanitize_text_field($this->_req_data['checkinnonce'])
923
+			: '';
924
+		$nonce_ref = 'checkin_nonce';
925
+		$this->_verify_nonce($nonce, $nonce_ref);
926
+		// beautiful! Made it this far so let's get the status.
927
+		$new_status = new CheckinStatusDashicon($this->_toggle_checkin_status());
928
+		// setup new class to return via ajax
929
+		$this->_template_args['admin_page_content'] = 'clickable trigger-checkin ' . $new_status->cssClasses();
930
+		$this->_template_args['success'] = true;
931
+		$this->_return_json();
932
+	}
933 933
 
934 934
 
935
-    /**
936
-     * handles toggling the checkin status for the registration,
937
-     *
938
-     * @access protected
939
-     * @return int|void
940
-     * @throws EE_Error
941
-     * @throws InvalidArgumentException
942
-     * @throws InvalidDataTypeException
943
-     * @throws InvalidInterfaceException
944
-     */
945
-    protected function _toggle_checkin_status()
946
-    {
947
-        // first let's get the query args out of the way for the redirect
948
-        $query_args = array(
949
-            'action'   => 'event_registrations',
950
-            'event_id' => isset($this->_req_data['event_id']) ? $this->_req_data['event_id'] : null,
951
-            'DTT_ID'   => isset($this->_req_data['DTT_ID']) ? $this->_req_data['DTT_ID'] : null,
952
-        );
953
-        $new_status = false;
954
-        // bulk action check in toggle
955
-        if (! empty($this->_req_data['checkbox']) && is_array($this->_req_data['checkbox'])) {
956
-            // cycle thru checkboxes
957
-            while (list($REG_ID, $value) = each($this->_req_data['checkbox'])) {
958
-                $DTT_ID = isset($this->_req_data['DTT_ID']) ? $this->_req_data['DTT_ID'] : null;
959
-                $new_status = $this->_toggle_checkin($REG_ID, $DTT_ID);
960
-            }
961
-        } elseif (isset($this->_req_data['_regid'])) {
962
-            // coming from ajax request
963
-            $DTT_ID = isset($this->_req_data['dttid']) ? $this->_req_data['dttid'] : null;
964
-            $query_args['DTT_ID'] = $DTT_ID;
965
-            $new_status = $this->_toggle_checkin($this->_req_data['_regid'], $DTT_ID);
966
-        } else {
967
-            EE_Error::add_error(
968
-                esc_html__('Missing some required data to toggle the Check-in', 'event_espresso'),
969
-                __FILE__,
970
-                __FUNCTION__,
971
-                __LINE__
972
-            );
973
-        }
974
-        if (defined('DOING_AJAX')) {
975
-            return $new_status;
976
-        }
977
-        $this->_redirect_after_action(false, '', '', $query_args, true);
978
-    }
935
+	/**
936
+	 * handles toggling the checkin status for the registration,
937
+	 *
938
+	 * @access protected
939
+	 * @return int|void
940
+	 * @throws EE_Error
941
+	 * @throws InvalidArgumentException
942
+	 * @throws InvalidDataTypeException
943
+	 * @throws InvalidInterfaceException
944
+	 */
945
+	protected function _toggle_checkin_status()
946
+	{
947
+		// first let's get the query args out of the way for the redirect
948
+		$query_args = array(
949
+			'action'   => 'event_registrations',
950
+			'event_id' => isset($this->_req_data['event_id']) ? $this->_req_data['event_id'] : null,
951
+			'DTT_ID'   => isset($this->_req_data['DTT_ID']) ? $this->_req_data['DTT_ID'] : null,
952
+		);
953
+		$new_status = false;
954
+		// bulk action check in toggle
955
+		if (! empty($this->_req_data['checkbox']) && is_array($this->_req_data['checkbox'])) {
956
+			// cycle thru checkboxes
957
+			while (list($REG_ID, $value) = each($this->_req_data['checkbox'])) {
958
+				$DTT_ID = isset($this->_req_data['DTT_ID']) ? $this->_req_data['DTT_ID'] : null;
959
+				$new_status = $this->_toggle_checkin($REG_ID, $DTT_ID);
960
+			}
961
+		} elseif (isset($this->_req_data['_regid'])) {
962
+			// coming from ajax request
963
+			$DTT_ID = isset($this->_req_data['dttid']) ? $this->_req_data['dttid'] : null;
964
+			$query_args['DTT_ID'] = $DTT_ID;
965
+			$new_status = $this->_toggle_checkin($this->_req_data['_regid'], $DTT_ID);
966
+		} else {
967
+			EE_Error::add_error(
968
+				esc_html__('Missing some required data to toggle the Check-in', 'event_espresso'),
969
+				__FILE__,
970
+				__FUNCTION__,
971
+				__LINE__
972
+			);
973
+		}
974
+		if (defined('DOING_AJAX')) {
975
+			return $new_status;
976
+		}
977
+		$this->_redirect_after_action(false, '', '', $query_args, true);
978
+	}
979 979
 
980 980
 
981
-    /**
982
-     * This is toggles a single Check-in for the given registration and datetime.
983
-     *
984
-     * @param  int $REG_ID The registration we're toggling
985
-     * @param  int $DTT_ID The datetime we're toggling
986
-     * @return int The new status toggled to.
987
-     * @throws EE_Error
988
-     * @throws InvalidArgumentException
989
-     * @throws InvalidDataTypeException
990
-     * @throws InvalidInterfaceException
991
-     */
992
-    private function _toggle_checkin($REG_ID, $DTT_ID)
993
-    {
994
-        /** @var EE_Registration $REG */
995
-        $REG = EEM_Registration::instance()->get_one_by_ID($REG_ID);
996
-        $new_status = $REG->toggle_checkin_status($DTT_ID);
997
-        if ($new_status !== false) {
998
-            EE_Error::add_success($REG->get_checkin_msg($DTT_ID));
999
-        } else {
1000
-            EE_Error::add_error($REG->get_checkin_msg($DTT_ID, true), __FILE__, __FUNCTION__, __LINE__);
1001
-            $new_status = false;
1002
-        }
1003
-        return $new_status;
1004
-    }
981
+	/**
982
+	 * This is toggles a single Check-in for the given registration and datetime.
983
+	 *
984
+	 * @param  int $REG_ID The registration we're toggling
985
+	 * @param  int $DTT_ID The datetime we're toggling
986
+	 * @return int The new status toggled to.
987
+	 * @throws EE_Error
988
+	 * @throws InvalidArgumentException
989
+	 * @throws InvalidDataTypeException
990
+	 * @throws InvalidInterfaceException
991
+	 */
992
+	private function _toggle_checkin($REG_ID, $DTT_ID)
993
+	{
994
+		/** @var EE_Registration $REG */
995
+		$REG = EEM_Registration::instance()->get_one_by_ID($REG_ID);
996
+		$new_status = $REG->toggle_checkin_status($DTT_ID);
997
+		if ($new_status !== false) {
998
+			EE_Error::add_success($REG->get_checkin_msg($DTT_ID));
999
+		} else {
1000
+			EE_Error::add_error($REG->get_checkin_msg($DTT_ID, true), __FILE__, __FUNCTION__, __LINE__);
1001
+			$new_status = false;
1002
+		}
1003
+		return $new_status;
1004
+	}
1005 1005
 
1006 1006
 
1007
-    /**
1008
-     * Takes care of deleting multiple EE_Checkin table rows
1009
-     *
1010
-     * @access protected
1011
-     * @return void
1012
-     * @throws EE_Error
1013
-     * @throws InvalidArgumentException
1014
-     * @throws InvalidDataTypeException
1015
-     * @throws InvalidInterfaceException
1016
-     */
1017
-    protected function _delete_checkin_rows()
1018
-    {
1019
-        $query_args = array(
1020
-            'action'  => 'registration_checkins',
1021
-            'DTT_ID'  => isset($this->_req_data['DTT_ID']) ? $this->_req_data['DTT_ID'] : 0,
1022
-            '_REG_ID' => isset($this->_req_data['_REG_ID']) ? $this->_req_data['_REG_ID'] : 0,
1023
-        );
1024
-        $errors = 0;
1025
-        if (! empty($this->_req_data['checkbox']) && is_array($this->_req_data['checkbox'])) {
1026
-            while (list($CHK_ID, $value) = each($this->_req_data['checkbox'])) {
1027
-                if (! EEM_Checkin::instance()->delete_by_ID($CHK_ID)) {
1028
-                    $errors++;
1029
-                }
1030
-            }
1031
-        } else {
1032
-            EE_Error::add_error(
1033
-                esc_html__(
1034
-                    'So, something went wrong with the bulk delete because there was no data received for instructions on WHAT to delete!',
1035
-                    'event_espresso'
1036
-                ),
1037
-                __FILE__,
1038
-                __FUNCTION__,
1039
-                __LINE__
1040
-            );
1041
-            $this->_redirect_after_action(false, '', '', $query_args, true);
1042
-        }
1043
-        if ($errors > 0) {
1044
-            EE_Error::add_error(
1045
-                sprintf(__('There were %d records that did not delete successfully', 'event_espresso'), $errors),
1046
-                __FILE__,
1047
-                __FUNCTION__,
1048
-                __LINE__
1049
-            );
1050
-        } else {
1051
-            EE_Error::add_success(__('Records were successfully deleted', 'event_espresso'));
1052
-        }
1053
-        $this->_redirect_after_action(false, '', '', $query_args, true);
1054
-    }
1007
+	/**
1008
+	 * Takes care of deleting multiple EE_Checkin table rows
1009
+	 *
1010
+	 * @access protected
1011
+	 * @return void
1012
+	 * @throws EE_Error
1013
+	 * @throws InvalidArgumentException
1014
+	 * @throws InvalidDataTypeException
1015
+	 * @throws InvalidInterfaceException
1016
+	 */
1017
+	protected function _delete_checkin_rows()
1018
+	{
1019
+		$query_args = array(
1020
+			'action'  => 'registration_checkins',
1021
+			'DTT_ID'  => isset($this->_req_data['DTT_ID']) ? $this->_req_data['DTT_ID'] : 0,
1022
+			'_REG_ID' => isset($this->_req_data['_REG_ID']) ? $this->_req_data['_REG_ID'] : 0,
1023
+		);
1024
+		$errors = 0;
1025
+		if (! empty($this->_req_data['checkbox']) && is_array($this->_req_data['checkbox'])) {
1026
+			while (list($CHK_ID, $value) = each($this->_req_data['checkbox'])) {
1027
+				if (! EEM_Checkin::instance()->delete_by_ID($CHK_ID)) {
1028
+					$errors++;
1029
+				}
1030
+			}
1031
+		} else {
1032
+			EE_Error::add_error(
1033
+				esc_html__(
1034
+					'So, something went wrong with the bulk delete because there was no data received for instructions on WHAT to delete!',
1035
+					'event_espresso'
1036
+				),
1037
+				__FILE__,
1038
+				__FUNCTION__,
1039
+				__LINE__
1040
+			);
1041
+			$this->_redirect_after_action(false, '', '', $query_args, true);
1042
+		}
1043
+		if ($errors > 0) {
1044
+			EE_Error::add_error(
1045
+				sprintf(__('There were %d records that did not delete successfully', 'event_espresso'), $errors),
1046
+				__FILE__,
1047
+				__FUNCTION__,
1048
+				__LINE__
1049
+			);
1050
+		} else {
1051
+			EE_Error::add_success(__('Records were successfully deleted', 'event_espresso'));
1052
+		}
1053
+		$this->_redirect_after_action(false, '', '', $query_args, true);
1054
+	}
1055 1055
 
1056 1056
 
1057
-    /**
1058
-     * Deletes a single EE_Checkin row
1059
-     *
1060
-     * @return void
1061
-     * @throws EE_Error
1062
-     * @throws InvalidArgumentException
1063
-     * @throws InvalidDataTypeException
1064
-     * @throws InvalidInterfaceException
1065
-     */
1066
-    protected function _delete_checkin_row()
1067
-    {
1068
-        $query_args = array(
1069
-            'action'  => 'registration_checkins',
1070
-            'DTT_ID'  => isset($this->_req_data['DTT_ID']) ? $this->_req_data['DTT_ID'] : 0,
1071
-            '_REG_ID' => isset($this->_req_data['_REG_ID']) ? $this->_req_data['_REG_ID'] : 0,
1072
-        );
1073
-        if (! empty($this->_req_data['CHK_ID'])) {
1074
-            if (! EEM_Checkin::instance()->delete_by_ID($this->_req_data['CHK_ID'])) {
1075
-                EE_Error::add_error(
1076
-                    esc_html__('Something went wrong and this check-in record was not deleted', 'event_espresso'),
1077
-                    __FILE__,
1078
-                    __FUNCTION__,
1079
-                    __LINE__
1080
-                );
1081
-            } else {
1082
-                EE_Error::add_success(__('Check-In record successfully deleted', 'event_espresso'));
1083
-            }
1084
-        } else {
1085
-            EE_Error::add_error(
1086
-                esc_html__(
1087
-                    'In order to delete a Check-in record, there must be a Check-In ID available. There is not. It is not your fault, there is just a gremlin living in the code',
1088
-                    'event_espresso'
1089
-                ),
1090
-                __FILE__,
1091
-                __FUNCTION__,
1092
-                __LINE__
1093
-            );
1094
-        }
1095
-        $this->_redirect_after_action(false, '', '', $query_args, true);
1096
-    }
1057
+	/**
1058
+	 * Deletes a single EE_Checkin row
1059
+	 *
1060
+	 * @return void
1061
+	 * @throws EE_Error
1062
+	 * @throws InvalidArgumentException
1063
+	 * @throws InvalidDataTypeException
1064
+	 * @throws InvalidInterfaceException
1065
+	 */
1066
+	protected function _delete_checkin_row()
1067
+	{
1068
+		$query_args = array(
1069
+			'action'  => 'registration_checkins',
1070
+			'DTT_ID'  => isset($this->_req_data['DTT_ID']) ? $this->_req_data['DTT_ID'] : 0,
1071
+			'_REG_ID' => isset($this->_req_data['_REG_ID']) ? $this->_req_data['_REG_ID'] : 0,
1072
+		);
1073
+		if (! empty($this->_req_data['CHK_ID'])) {
1074
+			if (! EEM_Checkin::instance()->delete_by_ID($this->_req_data['CHK_ID'])) {
1075
+				EE_Error::add_error(
1076
+					esc_html__('Something went wrong and this check-in record was not deleted', 'event_espresso'),
1077
+					__FILE__,
1078
+					__FUNCTION__,
1079
+					__LINE__
1080
+				);
1081
+			} else {
1082
+				EE_Error::add_success(__('Check-In record successfully deleted', 'event_espresso'));
1083
+			}
1084
+		} else {
1085
+			EE_Error::add_error(
1086
+				esc_html__(
1087
+					'In order to delete a Check-in record, there must be a Check-In ID available. There is not. It is not your fault, there is just a gremlin living in the code',
1088
+					'event_espresso'
1089
+				),
1090
+				__FILE__,
1091
+				__FUNCTION__,
1092
+				__LINE__
1093
+			);
1094
+		}
1095
+		$this->_redirect_after_action(false, '', '', $query_args, true);
1096
+	}
1097 1097
 
1098 1098
 
1099
-    /**
1100
-     *        generates HTML for the Event Registrations List Table
1101
-     *
1102
-     * @access protected
1103
-     * @return void
1104
-     * @throws EE_Error
1105
-     * @throws InvalidArgumentException
1106
-     * @throws InvalidDataTypeException
1107
-     * @throws InvalidInterfaceException
1108
-     */
1109
-    protected function _event_registrations_list_table()
1110
-    {
1111
-        do_action('AHEE_log', __FILE__, __FUNCTION__, '');
1112
-        $this->_admin_page_title .= isset($this->_req_data['event_id'])
1113
-            ? $this->get_action_link_or_button(
1114
-                'new_registration',
1115
-                'add-registrant',
1116
-                array('event_id' => $this->_req_data['event_id']),
1117
-                'add-new-h2',
1118
-                '',
1119
-                false
1120
-            )
1121
-            : '';
1122
-        $checked_in = new CheckinStatusDashicon(EE_Checkin::status_checked_in);
1123
-        $checked_out = new CheckinStatusDashicon(EE_Checkin::status_checked_out);
1124
-        $checked_never = new CheckinStatusDashicon(EE_Checkin::status_checked_never);
1125
-        $legend_items = array(
1126
-            'star-icon'        => array(
1127
-                'class' => 'dashicons dashicons-star-filled yellow-icon ee-icon-size-8',
1128
-                'desc'  => esc_html__('This Registrant is the Primary Registrant', 'event_espresso'),
1129
-            ),
1130
-            'checkin'          => array(
1131
-                'class' => $checked_in->cssClasses(),
1132
-                'desc'  => $checked_in->legendLabel(),
1133
-            ),
1134
-            'checkout'         => array(
1135
-                'class' => $checked_out->cssClasses(),
1136
-                'desc'  => $checked_out->legendLabel(),
1137
-            ),
1138
-            'nocheckinrecord'  => array(
1139
-                'class' => $checked_never->cssClasses(),
1140
-                'desc'  => $checked_never->legendLabel(),
1141
-            ),
1142
-            'approved_status'  => array(
1143
-                'class' => 'ee-status-legend ee-status-legend-' . EEM_Registration::status_id_approved,
1144
-                'desc'  => EEH_Template::pretty_status(EEM_Registration::status_id_approved, false, 'sentence'),
1145
-            ),
1146
-            'cancelled_status' => array(
1147
-                'class' => 'ee-status-legend ee-status-legend-' . EEM_Registration::status_id_cancelled,
1148
-                'desc'  => EEH_Template::pretty_status(EEM_Registration::status_id_cancelled, false, 'sentence'),
1149
-            ),
1150
-            'declined_status'  => array(
1151
-                'class' => 'ee-status-legend ee-status-legend-' . EEM_Registration::status_id_declined,
1152
-                'desc'  => EEH_Template::pretty_status(EEM_Registration::status_id_declined, false, 'sentence'),
1153
-            ),
1154
-            'not_approved'     => array(
1155
-                'class' => 'ee-status-legend ee-status-legend-' . EEM_Registration::status_id_not_approved,
1156
-                'desc'  => EEH_Template::pretty_status(EEM_Registration::status_id_not_approved, false, 'sentence'),
1157
-            ),
1158
-            'pending_status'   => array(
1159
-                'class' => 'ee-status-legend ee-status-legend-' . EEM_Registration::status_id_pending_payment,
1160
-                'desc'  => EEH_Template::pretty_status(EEM_Registration::status_id_pending_payment, false, 'sentence'),
1161
-            ),
1162
-            'wait_list'        => array(
1163
-                'class' => 'ee-status-legend ee-status-legend-' . EEM_Registration::status_id_wait_list,
1164
-                'desc'  => EEH_Template::pretty_status(EEM_Registration::status_id_wait_list, false, 'sentence'),
1165
-            ),
1166
-        );
1167
-        $this->_template_args['after_list_table'] = $this->_display_legend($legend_items);
1168
-        $event_id = isset($this->_req_data['event_id']) ? $this->_req_data['event_id'] : null;
1169
-        /** @var EE_Event $event */
1170
-        $event = EEM_Event::instance()->get_one_by_ID($event_id);
1171
-        $this->_template_args['before_list_table'] = $event instanceof EE_Event
1172
-            ? '<h2>' . sprintf(
1173
-                esc_html__('Viewing Registrations for Event: %s', 'event_espresso'),
1174
-                EEM_Event::instance()->get_one_by_ID($event_id)->get('EVT_name')
1175
-            ) . '</h2>'
1176
-            : '';
1177
-        // need to get the number of datetimes on the event and set default datetime_id if there is only one datetime on
1178
-        // the event.
1179
-        $DTT_ID = ! empty($this->_req_data['DTT_ID']) ? absint($this->_req_data['DTT_ID']) : 0;
1180
-        $datetime = null;
1181
-        if ($event instanceof EE_Event) {
1182
-            $datetimes_on_event = $event->datetimes();
1183
-            if (count($datetimes_on_event) === 1) {
1184
-                $datetime = reset($datetimes_on_event);
1185
-            }
1186
-        }
1187
-        $datetime = $datetime instanceof EE_Datetime ? $datetime : EEM_Datetime::instance()->get_one_by_ID($DTT_ID);
1188
-        if ($datetime instanceof EE_Datetime && $this->_template_args['before_list_table'] !== '') {
1189
-            $this->_template_args['before_list_table'] = substr($this->_template_args['before_list_table'], 0, -5);
1190
-            $this->_template_args['before_list_table'] .= ' &nbsp;<span class="drk-grey-text">';
1191
-            $this->_template_args['before_list_table'] .= '<span class="dashicons dashicons-calendar"></span>';
1192
-            $this->_template_args['before_list_table'] .= $datetime->name();
1193
-            $this->_template_args['before_list_table'] .= ' ( ' . $datetime->date_and_time_range() . ' )';
1194
-            $this->_template_args['before_list_table'] .= '</span></h2>';
1195
-        }
1196
-        // if no datetime, then we're on the initial view, so let's give some helpful instructions on what the status
1197
-        // column represents
1198
-        if (! $datetime instanceof EE_Datetime) {
1199
-            $this->_template_args['before_list_table'] .= '<br><p class="description">'
1200
-                                                          . esc_html__(
1201
-                                                              'In this view, the check-in status represents the latest check-in record for the registration in that row.',
1202
-                                                              'event_espresso'
1203
-                                                          )
1204
-                                                          . '</p>';
1205
-        }
1206
-        $this->display_admin_list_table_page_with_no_sidebar();
1207
-    }
1099
+	/**
1100
+	 *        generates HTML for the Event Registrations List Table
1101
+	 *
1102
+	 * @access protected
1103
+	 * @return void
1104
+	 * @throws EE_Error
1105
+	 * @throws InvalidArgumentException
1106
+	 * @throws InvalidDataTypeException
1107
+	 * @throws InvalidInterfaceException
1108
+	 */
1109
+	protected function _event_registrations_list_table()
1110
+	{
1111
+		do_action('AHEE_log', __FILE__, __FUNCTION__, '');
1112
+		$this->_admin_page_title .= isset($this->_req_data['event_id'])
1113
+			? $this->get_action_link_or_button(
1114
+				'new_registration',
1115
+				'add-registrant',
1116
+				array('event_id' => $this->_req_data['event_id']),
1117
+				'add-new-h2',
1118
+				'',
1119
+				false
1120
+			)
1121
+			: '';
1122
+		$checked_in = new CheckinStatusDashicon(EE_Checkin::status_checked_in);
1123
+		$checked_out = new CheckinStatusDashicon(EE_Checkin::status_checked_out);
1124
+		$checked_never = new CheckinStatusDashicon(EE_Checkin::status_checked_never);
1125
+		$legend_items = array(
1126
+			'star-icon'        => array(
1127
+				'class' => 'dashicons dashicons-star-filled yellow-icon ee-icon-size-8',
1128
+				'desc'  => esc_html__('This Registrant is the Primary Registrant', 'event_espresso'),
1129
+			),
1130
+			'checkin'          => array(
1131
+				'class' => $checked_in->cssClasses(),
1132
+				'desc'  => $checked_in->legendLabel(),
1133
+			),
1134
+			'checkout'         => array(
1135
+				'class' => $checked_out->cssClasses(),
1136
+				'desc'  => $checked_out->legendLabel(),
1137
+			),
1138
+			'nocheckinrecord'  => array(
1139
+				'class' => $checked_never->cssClasses(),
1140
+				'desc'  => $checked_never->legendLabel(),
1141
+			),
1142
+			'approved_status'  => array(
1143
+				'class' => 'ee-status-legend ee-status-legend-' . EEM_Registration::status_id_approved,
1144
+				'desc'  => EEH_Template::pretty_status(EEM_Registration::status_id_approved, false, 'sentence'),
1145
+			),
1146
+			'cancelled_status' => array(
1147
+				'class' => 'ee-status-legend ee-status-legend-' . EEM_Registration::status_id_cancelled,
1148
+				'desc'  => EEH_Template::pretty_status(EEM_Registration::status_id_cancelled, false, 'sentence'),
1149
+			),
1150
+			'declined_status'  => array(
1151
+				'class' => 'ee-status-legend ee-status-legend-' . EEM_Registration::status_id_declined,
1152
+				'desc'  => EEH_Template::pretty_status(EEM_Registration::status_id_declined, false, 'sentence'),
1153
+			),
1154
+			'not_approved'     => array(
1155
+				'class' => 'ee-status-legend ee-status-legend-' . EEM_Registration::status_id_not_approved,
1156
+				'desc'  => EEH_Template::pretty_status(EEM_Registration::status_id_not_approved, false, 'sentence'),
1157
+			),
1158
+			'pending_status'   => array(
1159
+				'class' => 'ee-status-legend ee-status-legend-' . EEM_Registration::status_id_pending_payment,
1160
+				'desc'  => EEH_Template::pretty_status(EEM_Registration::status_id_pending_payment, false, 'sentence'),
1161
+			),
1162
+			'wait_list'        => array(
1163
+				'class' => 'ee-status-legend ee-status-legend-' . EEM_Registration::status_id_wait_list,
1164
+				'desc'  => EEH_Template::pretty_status(EEM_Registration::status_id_wait_list, false, 'sentence'),
1165
+			),
1166
+		);
1167
+		$this->_template_args['after_list_table'] = $this->_display_legend($legend_items);
1168
+		$event_id = isset($this->_req_data['event_id']) ? $this->_req_data['event_id'] : null;
1169
+		/** @var EE_Event $event */
1170
+		$event = EEM_Event::instance()->get_one_by_ID($event_id);
1171
+		$this->_template_args['before_list_table'] = $event instanceof EE_Event
1172
+			? '<h2>' . sprintf(
1173
+				esc_html__('Viewing Registrations for Event: %s', 'event_espresso'),
1174
+				EEM_Event::instance()->get_one_by_ID($event_id)->get('EVT_name')
1175
+			) . '</h2>'
1176
+			: '';
1177
+		// need to get the number of datetimes on the event and set default datetime_id if there is only one datetime on
1178
+		// the event.
1179
+		$DTT_ID = ! empty($this->_req_data['DTT_ID']) ? absint($this->_req_data['DTT_ID']) : 0;
1180
+		$datetime = null;
1181
+		if ($event instanceof EE_Event) {
1182
+			$datetimes_on_event = $event->datetimes();
1183
+			if (count($datetimes_on_event) === 1) {
1184
+				$datetime = reset($datetimes_on_event);
1185
+			}
1186
+		}
1187
+		$datetime = $datetime instanceof EE_Datetime ? $datetime : EEM_Datetime::instance()->get_one_by_ID($DTT_ID);
1188
+		if ($datetime instanceof EE_Datetime && $this->_template_args['before_list_table'] !== '') {
1189
+			$this->_template_args['before_list_table'] = substr($this->_template_args['before_list_table'], 0, -5);
1190
+			$this->_template_args['before_list_table'] .= ' &nbsp;<span class="drk-grey-text">';
1191
+			$this->_template_args['before_list_table'] .= '<span class="dashicons dashicons-calendar"></span>';
1192
+			$this->_template_args['before_list_table'] .= $datetime->name();
1193
+			$this->_template_args['before_list_table'] .= ' ( ' . $datetime->date_and_time_range() . ' )';
1194
+			$this->_template_args['before_list_table'] .= '</span></h2>';
1195
+		}
1196
+		// if no datetime, then we're on the initial view, so let's give some helpful instructions on what the status
1197
+		// column represents
1198
+		if (! $datetime instanceof EE_Datetime) {
1199
+			$this->_template_args['before_list_table'] .= '<br><p class="description">'
1200
+														  . esc_html__(
1201
+															  'In this view, the check-in status represents the latest check-in record for the registration in that row.',
1202
+															  'event_espresso'
1203
+														  )
1204
+														  . '</p>';
1205
+		}
1206
+		$this->display_admin_list_table_page_with_no_sidebar();
1207
+	}
1208 1208
 
1209
-    /**
1210
-     * Download the registrations check-in report (same as the normal registration report, but with different where
1211
-     * conditions)
1212
-     *
1213
-     * @return void ends the request by a redirect or download
1214
-     */
1215
-    public function _registrations_checkin_report()
1216
-    {
1217
-        $this->_registrations_report_base('_get_checkin_query_params_from_request');
1218
-    }
1209
+	/**
1210
+	 * Download the registrations check-in report (same as the normal registration report, but with different where
1211
+	 * conditions)
1212
+	 *
1213
+	 * @return void ends the request by a redirect or download
1214
+	 */
1215
+	public function _registrations_checkin_report()
1216
+	{
1217
+		$this->_registrations_report_base('_get_checkin_query_params_from_request');
1218
+	}
1219 1219
 
1220
-    /**
1221
-     * Gets the query params from the request, plus adds a where condition for the registration status,
1222
-     * because on the checkin page we only ever want to see approved and pending-approval registrations
1223
-     *
1224
-     * @param array $request
1225
-     * @param int   $per_page
1226
-     * @param bool  $count
1227
-     * @return array
1228
-     * @throws EE_Error
1229
-     */
1230
-    protected function _get_checkin_query_params_from_request(
1231
-        $request,
1232
-        $per_page = 10,
1233
-        $count = false
1234
-    ) {
1235
-        $query_params = $this->_get_registration_query_parameters($request, $per_page, $count);
1236
-        // unlike the regular registrations list table,
1237
-        $status_ids_array = apply_filters(
1238
-            'FHEE__Extend_Registrations_Admin_Page__get_event_attendees__status_ids_array',
1239
-            array(EEM_Registration::status_id_pending_payment, EEM_Registration::status_id_approved)
1240
-        );
1241
-        $query_params[0]['STS_ID'] = array('IN', $status_ids_array);
1242
-        return $query_params;
1243
-    }
1220
+	/**
1221
+	 * Gets the query params from the request, plus adds a where condition for the registration status,
1222
+	 * because on the checkin page we only ever want to see approved and pending-approval registrations
1223
+	 *
1224
+	 * @param array $request
1225
+	 * @param int   $per_page
1226
+	 * @param bool  $count
1227
+	 * @return array
1228
+	 * @throws EE_Error
1229
+	 */
1230
+	protected function _get_checkin_query_params_from_request(
1231
+		$request,
1232
+		$per_page = 10,
1233
+		$count = false
1234
+	) {
1235
+		$query_params = $this->_get_registration_query_parameters($request, $per_page, $count);
1236
+		// unlike the regular registrations list table,
1237
+		$status_ids_array = apply_filters(
1238
+			'FHEE__Extend_Registrations_Admin_Page__get_event_attendees__status_ids_array',
1239
+			array(EEM_Registration::status_id_pending_payment, EEM_Registration::status_id_approved)
1240
+		);
1241
+		$query_params[0]['STS_ID'] = array('IN', $status_ids_array);
1242
+		return $query_params;
1243
+	}
1244 1244
 
1245 1245
 
1246
-    /**
1247
-     * Gets registrations for an event
1248
-     *
1249
-     * @param int    $per_page
1250
-     * @param bool   $count whether to return count or data.
1251
-     * @param bool   $trash
1252
-     * @param string $orderby
1253
-     * @return EE_Registration[]|int
1254
-     * @throws EE_Error
1255
-     * @throws InvalidArgumentException
1256
-     * @throws InvalidDataTypeException
1257
-     * @throws InvalidInterfaceException
1258
-     */
1259
-    public function get_event_attendees($per_page = 10, $count = false, $trash = false, $orderby = 'ATT_fname')
1260
-    {
1261
-        // normalize some request params that get setup by the parent `get_registrations` method.
1262
-        $request = $this->_req_data;
1263
-        $request['orderby'] = ! empty($this->_req_data['orderby']) ? $this->_req_data['orderby'] : $orderby;
1264
-        $request['order'] = ! empty($this->_req_data['order']) ? $this->_req_data['order'] : 'ASC';
1265
-        if ($trash) {
1266
-            $request['status'] = 'trash';
1267
-        }
1268
-        $query_params = $this->_get_checkin_query_params_from_request($request, $per_page, $count);
1269
-        /**
1270
-         * Override the default groupby added by EEM_Base so that sorts with multiple order bys work as expected
1271
-         *
1272
-         * @link https://events.codebasehq.com/projects/event-espresso/tickets/10093
1273
-         * @see https://github.com/eventespresso/event-espresso-core/tree/master/docs/G--Model-System/model-query-params.md
1274
-         *                             or if you have the development copy of EE you can view this at the path:
1275
-         *                             /docs/G--Model-System/model-query-params.md
1276
-         */
1277
-        $query_params['group_by'] = '';
1246
+	/**
1247
+	 * Gets registrations for an event
1248
+	 *
1249
+	 * @param int    $per_page
1250
+	 * @param bool   $count whether to return count or data.
1251
+	 * @param bool   $trash
1252
+	 * @param string $orderby
1253
+	 * @return EE_Registration[]|int
1254
+	 * @throws EE_Error
1255
+	 * @throws InvalidArgumentException
1256
+	 * @throws InvalidDataTypeException
1257
+	 * @throws InvalidInterfaceException
1258
+	 */
1259
+	public function get_event_attendees($per_page = 10, $count = false, $trash = false, $orderby = 'ATT_fname')
1260
+	{
1261
+		// normalize some request params that get setup by the parent `get_registrations` method.
1262
+		$request = $this->_req_data;
1263
+		$request['orderby'] = ! empty($this->_req_data['orderby']) ? $this->_req_data['orderby'] : $orderby;
1264
+		$request['order'] = ! empty($this->_req_data['order']) ? $this->_req_data['order'] : 'ASC';
1265
+		if ($trash) {
1266
+			$request['status'] = 'trash';
1267
+		}
1268
+		$query_params = $this->_get_checkin_query_params_from_request($request, $per_page, $count);
1269
+		/**
1270
+		 * Override the default groupby added by EEM_Base so that sorts with multiple order bys work as expected
1271
+		 *
1272
+		 * @link https://events.codebasehq.com/projects/event-espresso/tickets/10093
1273
+		 * @see https://github.com/eventespresso/event-espresso-core/tree/master/docs/G--Model-System/model-query-params.md
1274
+		 *                             or if you have the development copy of EE you can view this at the path:
1275
+		 *                             /docs/G--Model-System/model-query-params.md
1276
+		 */
1277
+		$query_params['group_by'] = '';
1278 1278
 
1279
-        return $count
1280
-            ? EEM_Registration::instance()->count($query_params)
1281
-            /** @type EE_Registration[] */
1282
-            : EEM_Registration::instance()->get_all($query_params);
1283
-    }
1279
+		return $count
1280
+			? EEM_Registration::instance()->count($query_params)
1281
+			/** @type EE_Registration[] */
1282
+			: EEM_Registration::instance()->get_all($query_params);
1283
+	}
1284 1284
 }
Please login to merge, or discard this patch.
Spacing   +49 added lines, -49 removed lines patch added patch discarded remove patch
@@ -32,10 +32,10 @@  discard block
 block discarded – undo
32 32
     public function __construct($routing = true)
33 33
     {
34 34
         parent::__construct($routing);
35
-        if (! defined('REG_CAF_TEMPLATE_PATH')) {
36
-            define('REG_CAF_TEMPLATE_PATH', EE_CORE_CAF_ADMIN_EXTEND . 'registrations/templates/');
37
-            define('REG_CAF_ASSETS', EE_CORE_CAF_ADMIN_EXTEND . 'registrations/assets/');
38
-            define('REG_CAF_ASSETS_URL', EE_CORE_CAF_ADMIN_EXTEND_URL . 'registrations/assets/');
35
+        if ( ! defined('REG_CAF_TEMPLATE_PATH')) {
36
+            define('REG_CAF_TEMPLATE_PATH', EE_CORE_CAF_ADMIN_EXTEND.'registrations/templates/');
37
+            define('REG_CAF_ASSETS', EE_CORE_CAF_ADMIN_EXTEND.'registrations/assets/');
38
+            define('REG_CAF_ASSETS_URL', EE_CORE_CAF_ADMIN_EXTEND_URL.'registrations/assets/');
39 39
         }
40 40
     }
41 41
 
@@ -45,7 +45,7 @@  discard block
 block discarded – undo
45 45
      */
46 46
     protected function _extend_page_config()
47 47
     {
48
-        $this->_admin_base_path = EE_CORE_CAF_ADMIN_EXTEND . 'registrations';
48
+        $this->_admin_base_path = EE_CORE_CAF_ADMIN_EXTEND.'registrations';
49 49
         $reg_id = ! empty($this->_req_data['_REG_ID']) && ! is_array($this->_req_data['_REG_ID'])
50 50
             ? $this->_req_data['_REG_ID']
51 51
             : 0;
@@ -185,14 +185,14 @@  discard block
 block discarded – undo
185 185
             // enqueue newsletter js
186 186
             wp_enqueue_script(
187 187
                 'ee-newsletter-trigger',
188
-                REG_CAF_ASSETS_URL . 'ee-newsletter-trigger.js',
188
+                REG_CAF_ASSETS_URL.'ee-newsletter-trigger.js',
189 189
                 array('ee-dialog'),
190 190
                 EVENT_ESPRESSO_VERSION,
191 191
                 true
192 192
             );
193 193
             wp_enqueue_style(
194 194
                 'ee-newsletter-trigger-css',
195
-                REG_CAF_ASSETS_URL . 'ee-newsletter-trigger.css',
195
+                REG_CAF_ASSETS_URL.'ee-newsletter-trigger.css',
196 196
                 array(),
197 197
                 EVENT_ESPRESSO_VERSION
198 198
             );
@@ -213,7 +213,7 @@  discard block
 block discarded – undo
213 213
     {
214 214
         wp_register_script(
215 215
             'ee-reg-reports-js',
216
-            REG_CAF_ASSETS_URL . 'ee-registration-admin-reports.js',
216
+            REG_CAF_ASSETS_URL.'ee-registration-admin-reports.js',
217 217
             array('google-charts'),
218 218
             EVENT_ESPRESSO_VERSION,
219 219
             true
@@ -299,7 +299,7 @@  discard block
 block discarded – undo
299 299
         $nonce_ref = 'get_newsletter_form_content_nonce';
300 300
         $this->_verify_nonce($nonce, $nonce_ref);
301 301
         // let's get the mtp for the incoming MTP_ ID
302
-        if (! isset($this->_req_data['GRP_ID'])) {
302
+        if ( ! isset($this->_req_data['GRP_ID'])) {
303 303
             EE_Error::add_error(
304 304
                 esc_html__(
305 305
                     'There must be something broken with the js or html structure because the required data for getting a message template group is not present (need an GRP_ID).',
@@ -314,7 +314,7 @@  discard block
 block discarded – undo
314 314
             $this->_return_json();
315 315
         }
316 316
         $MTPG = EEM_Message_Template_Group::instance()->get_one_by_ID($this->_req_data['GRP_ID']);
317
-        if (! $MTPG instanceof EE_Message_Template_Group) {
317
+        if ( ! $MTPG instanceof EE_Message_Template_Group) {
318 318
             EE_Error::add_error(
319 319
                 sprintf(
320 320
                     esc_html__(
@@ -339,12 +339,12 @@  discard block
 block discarded – undo
339 339
             $field = $MTP->get('MTP_template_field');
340 340
             if ($field === 'content') {
341 341
                 $content = $MTP->get('MTP_content');
342
-                if (! empty($content['newsletter_content'])) {
342
+                if ( ! empty($content['newsletter_content'])) {
343 343
                     $template_fields['newsletter_content'] = $content['newsletter_content'];
344 344
                 }
345 345
                 continue;
346 346
             }
347
-            $template_fields[ $MTP->get('MTP_template_field') ] = $MTP->get('MTP_content');
347
+            $template_fields[$MTP->get('MTP_template_field')] = $MTP->get('MTP_content');
348 348
         }
349 349
         $this->_template_args['success'] = true;
350 350
         $this->_template_args['error'] = false;
@@ -446,17 +446,17 @@  discard block
 block discarded – undo
446 446
                 $field_id = $field === '[NEWSLETTER_CONTENT]'
447 447
                     ? 'content'
448 448
                     : $field;
449
-                $field_id = 'batch-message-' . strtolower($field_id);
449
+                $field_id = 'batch-message-'.strtolower($field_id);
450 450
                 $available_shortcodes[] = '<span class="js-shortcode-selection" data-value="'
451 451
                                           . $shortcode
452
-                                          . '" data-linked-input-id="' . $field_id . '">'
452
+                                          . '" data-linked-input-id="'.$field_id.'">'
453 453
                                           . $shortcode
454 454
                                           . '</span>';
455 455
             }
456
-            $codes[ $field ] = implode(', ', $available_shortcodes);
456
+            $codes[$field] = implode(', ', $available_shortcodes);
457 457
         }
458 458
         $shortcodes = $codes;
459
-        $form_template = REG_CAF_TEMPLATE_PATH . 'newsletter-send-form.template.php';
459
+        $form_template = REG_CAF_TEMPLATE_PATH.'newsletter-send-form.template.php';
460 460
         $form_template_args = array(
461 461
             'form_action'       => admin_url('admin.php?page=espresso_registrations'),
462 462
             'form_route'        => 'newsletter_selected_send',
@@ -624,7 +624,7 @@  discard block
 block discarded – undo
624 624
      */
625 625
     protected function _registration_reports()
626 626
     {
627
-        $template_path = EE_ADMIN_TEMPLATE . 'admin_reports.template.php';
627
+        $template_path = EE_ADMIN_TEMPLATE.'admin_reports.template.php';
628 628
         $this->_template_args['admin_page_content'] = EEH_Template::display_template(
629 629
             $template_path,
630 630
             $this->_reports_template_data,
@@ -679,7 +679,7 @@  discard block
 block discarded – undo
679 679
             array_unshift($regs, $column_titles);
680 680
             // setup the date range.
681 681
             $DateTimeZone = new DateTimeZone(EEH_DTT_Helper::get_timezone());
682
-            $beginning_date = new DateTime("now " . $period, $DateTimeZone);
682
+            $beginning_date = new DateTime("now ".$period, $DateTimeZone);
683 683
             $ending_date = new DateTime("now", $DateTimeZone);
684 684
             $subtitle = sprintf(
685 685
                 _x('For the period: %1$s to %2$s', 'Used to give date range', 'event_espresso'),
@@ -699,7 +699,7 @@  discard block
 block discarded – undo
699 699
                     '%sThere are currently no registration records in the last month for this report.%s',
700 700
                     'event_espresso'
701 701
                 ),
702
-                '<h2>' . $report_title . '</h2><p>',
702
+                '<h2>'.$report_title.'</h2><p>',
703 703
                 '</p>'
704 704
             ),
705 705
         );
@@ -752,7 +752,7 @@  discard block
 block discarded – undo
752 752
             array_unshift($regs, $column_titles);
753 753
             // setup the date range.
754 754
             $DateTimeZone = new DateTimeZone(EEH_DTT_Helper::get_timezone());
755
-            $beginning_date = new DateTime("now " . $period, $DateTimeZone);
755
+            $beginning_date = new DateTime("now ".$period, $DateTimeZone);
756 756
             $ending_date = new DateTime("now", $DateTimeZone);
757 757
             $subtitle = sprintf(
758 758
                 _x('For the period: %1$s to %2$s', 'Used to give date range', 'event_espresso'),
@@ -772,7 +772,7 @@  discard block
 block discarded – undo
772 772
                     '%sThere are currently no registration records in the last month for this report.%s',
773 773
                     'event_espresso'
774 774
                 ),
775
-                '<h2>' . $report_title . '</h2><p>',
775
+                '<h2>'.$report_title.'</h2><p>',
776 776
                 '</p>'
777 777
             ),
778 778
         );
@@ -798,7 +798,7 @@  discard block
 block discarded – undo
798 798
         $reg_id = isset($this->_req_data['_REG_ID']) ? $this->_req_data['_REG_ID'] : null;
799 799
         /** @var EE_Registration $registration */
800 800
         $registration = EEM_Registration::instance()->get_one_by_ID($reg_id);
801
-        if (! $registration instanceof EE_Registration) {
801
+        if ( ! $registration instanceof EE_Registration) {
802 802
             throw new EE_Error(
803 803
                 sprintf(
804 804
                     esc_html__('An error occurred. There is no registration with ID (%d)', 'event_espresso'),
@@ -833,7 +833,7 @@  discard block
 block discarded – undo
833 833
         if ($datetime instanceof EE_Datetime) {
834 834
             $datetime_label = $datetime->get_dtt_display_name(true);
835 835
             $datetime_label .= ! empty($datetime_label)
836
-                ? ' (' . $datetime->get_dtt_display_name() . ')'
836
+                ? ' ('.$datetime->get_dtt_display_name().')'
837 837
                 : $datetime->get_dtt_display_name();
838 838
         }
839 839
         $datetime_link = ! empty($dtt_id) && $registration instanceof EE_Registration
@@ -847,7 +847,7 @@  discard block
 block discarded – undo
847 847
             )
848 848
             : '';
849 849
         $datetime_link = ! empty($datetime_link)
850
-            ? '<a href="' . $datetime_link . '">'
850
+            ? '<a href="'.$datetime_link.'">'
851 851
               . '<span id="checkin-dtt">'
852 852
               . $datetime_label
853 853
               . '</span></a>'
@@ -859,8 +859,8 @@  discard block
 block discarded – undo
859 859
             ? $attendee->get_admin_details_link()
860 860
             : '';
861 861
         $attendee_link = ! empty($attendee_link)
862
-            ? '<a href="' . $attendee->get_admin_details_link() . '"'
863
-              . ' title="' . esc_html__('Click for attendee details', 'event_espresso') . '">'
862
+            ? '<a href="'.$attendee->get_admin_details_link().'"'
863
+              . ' title="'.esc_html__('Click for attendee details', 'event_espresso').'">'
864 864
               . '<span id="checkin-attendee-name">'
865 865
               . $attendee_name
866 866
               . '</span></a>'
@@ -869,25 +869,25 @@  discard block
 block discarded – undo
869 869
             ? $registration->event()->get_admin_details_link()
870 870
             : '';
871 871
         $event_link = ! empty($event_link)
872
-            ? '<a href="' . $event_link . '"'
873
-              . ' title="' . esc_html__('Click here to edit event.', 'event_espresso') . '">'
872
+            ? '<a href="'.$event_link.'"'
873
+              . ' title="'.esc_html__('Click here to edit event.', 'event_espresso').'">'
874 874
               . '<span id="checkin-event-name">'
875 875
               . $registration->event_name()
876 876
               . '</span>'
877 877
               . '</a>'
878 878
             : '';
879 879
         $this->_template_args['before_list_table'] = ! empty($reg_id) && ! empty($dtt_id)
880
-            ? '<h2>' . sprintf(
880
+            ? '<h2>'.sprintf(
881 881
                 esc_html__('Displaying check in records for %1$s for %2$s at the event, %3$s', 'event_espresso'),
882 882
                 $attendee_link,
883 883
                 $datetime_link,
884 884
                 $event_link
885
-            ) . '</h2>'
885
+            ).'</h2>'
886 886
             : '';
887 887
         $this->_template_args['list_table_hidden_fields'] = ! empty($reg_id)
888
-            ? '<input type="hidden" name="_REG_ID" value="' . $reg_id . '">' : '';
888
+            ? '<input type="hidden" name="_REG_ID" value="'.$reg_id.'">' : '';
889 889
         $this->_template_args['list_table_hidden_fields'] .= ! empty($dtt_id)
890
-            ? '<input type="hidden" name="DTT_ID" value="' . $dtt_id . '">' : '';
890
+            ? '<input type="hidden" name="DTT_ID" value="'.$dtt_id.'">' : '';
891 891
         $this->display_admin_list_table_page_with_no_sidebar();
892 892
     }
893 893
 
@@ -904,7 +904,7 @@  discard block
 block discarded – undo
904 904
     public function toggle_checkin_status()
905 905
     {
906 906
         // first make sure we have the necessary data
907
-        if (! isset($this->_req_data['_regid'])) {
907
+        if ( ! isset($this->_req_data['_regid'])) {
908 908
             EE_Error::add_error(
909 909
                 esc_html__(
910 910
                     'There must be something broken with the html structure because the required data for toggling the Check-in status is not being sent via ajax',
@@ -926,7 +926,7 @@  discard block
 block discarded – undo
926 926
         // beautiful! Made it this far so let's get the status.
927 927
         $new_status = new CheckinStatusDashicon($this->_toggle_checkin_status());
928 928
         // setup new class to return via ajax
929
-        $this->_template_args['admin_page_content'] = 'clickable trigger-checkin ' . $new_status->cssClasses();
929
+        $this->_template_args['admin_page_content'] = 'clickable trigger-checkin '.$new_status->cssClasses();
930 930
         $this->_template_args['success'] = true;
931 931
         $this->_return_json();
932 932
     }
@@ -952,7 +952,7 @@  discard block
 block discarded – undo
952 952
         );
953 953
         $new_status = false;
954 954
         // bulk action check in toggle
955
-        if (! empty($this->_req_data['checkbox']) && is_array($this->_req_data['checkbox'])) {
955
+        if ( ! empty($this->_req_data['checkbox']) && is_array($this->_req_data['checkbox'])) {
956 956
             // cycle thru checkboxes
957 957
             while (list($REG_ID, $value) = each($this->_req_data['checkbox'])) {
958 958
                 $DTT_ID = isset($this->_req_data['DTT_ID']) ? $this->_req_data['DTT_ID'] : null;
@@ -1022,9 +1022,9 @@  discard block
 block discarded – undo
1022 1022
             '_REG_ID' => isset($this->_req_data['_REG_ID']) ? $this->_req_data['_REG_ID'] : 0,
1023 1023
         );
1024 1024
         $errors = 0;
1025
-        if (! empty($this->_req_data['checkbox']) && is_array($this->_req_data['checkbox'])) {
1025
+        if ( ! empty($this->_req_data['checkbox']) && is_array($this->_req_data['checkbox'])) {
1026 1026
             while (list($CHK_ID, $value) = each($this->_req_data['checkbox'])) {
1027
-                if (! EEM_Checkin::instance()->delete_by_ID($CHK_ID)) {
1027
+                if ( ! EEM_Checkin::instance()->delete_by_ID($CHK_ID)) {
1028 1028
                     $errors++;
1029 1029
                 }
1030 1030
             }
@@ -1070,8 +1070,8 @@  discard block
 block discarded – undo
1070 1070
             'DTT_ID'  => isset($this->_req_data['DTT_ID']) ? $this->_req_data['DTT_ID'] : 0,
1071 1071
             '_REG_ID' => isset($this->_req_data['_REG_ID']) ? $this->_req_data['_REG_ID'] : 0,
1072 1072
         );
1073
-        if (! empty($this->_req_data['CHK_ID'])) {
1074
-            if (! EEM_Checkin::instance()->delete_by_ID($this->_req_data['CHK_ID'])) {
1073
+        if ( ! empty($this->_req_data['CHK_ID'])) {
1074
+            if ( ! EEM_Checkin::instance()->delete_by_ID($this->_req_data['CHK_ID'])) {
1075 1075
                 EE_Error::add_error(
1076 1076
                     esc_html__('Something went wrong and this check-in record was not deleted', 'event_espresso'),
1077 1077
                     __FILE__,
@@ -1140,27 +1140,27 @@  discard block
 block discarded – undo
1140 1140
                 'desc'  => $checked_never->legendLabel(),
1141 1141
             ),
1142 1142
             'approved_status'  => array(
1143
-                'class' => 'ee-status-legend ee-status-legend-' . EEM_Registration::status_id_approved,
1143
+                'class' => 'ee-status-legend ee-status-legend-'.EEM_Registration::status_id_approved,
1144 1144
                 'desc'  => EEH_Template::pretty_status(EEM_Registration::status_id_approved, false, 'sentence'),
1145 1145
             ),
1146 1146
             'cancelled_status' => array(
1147
-                'class' => 'ee-status-legend ee-status-legend-' . EEM_Registration::status_id_cancelled,
1147
+                'class' => 'ee-status-legend ee-status-legend-'.EEM_Registration::status_id_cancelled,
1148 1148
                 'desc'  => EEH_Template::pretty_status(EEM_Registration::status_id_cancelled, false, 'sentence'),
1149 1149
             ),
1150 1150
             'declined_status'  => array(
1151
-                'class' => 'ee-status-legend ee-status-legend-' . EEM_Registration::status_id_declined,
1151
+                'class' => 'ee-status-legend ee-status-legend-'.EEM_Registration::status_id_declined,
1152 1152
                 'desc'  => EEH_Template::pretty_status(EEM_Registration::status_id_declined, false, 'sentence'),
1153 1153
             ),
1154 1154
             'not_approved'     => array(
1155
-                'class' => 'ee-status-legend ee-status-legend-' . EEM_Registration::status_id_not_approved,
1155
+                'class' => 'ee-status-legend ee-status-legend-'.EEM_Registration::status_id_not_approved,
1156 1156
                 'desc'  => EEH_Template::pretty_status(EEM_Registration::status_id_not_approved, false, 'sentence'),
1157 1157
             ),
1158 1158
             'pending_status'   => array(
1159
-                'class' => 'ee-status-legend ee-status-legend-' . EEM_Registration::status_id_pending_payment,
1159
+                'class' => 'ee-status-legend ee-status-legend-'.EEM_Registration::status_id_pending_payment,
1160 1160
                 'desc'  => EEH_Template::pretty_status(EEM_Registration::status_id_pending_payment, false, 'sentence'),
1161 1161
             ),
1162 1162
             'wait_list'        => array(
1163
-                'class' => 'ee-status-legend ee-status-legend-' . EEM_Registration::status_id_wait_list,
1163
+                'class' => 'ee-status-legend ee-status-legend-'.EEM_Registration::status_id_wait_list,
1164 1164
                 'desc'  => EEH_Template::pretty_status(EEM_Registration::status_id_wait_list, false, 'sentence'),
1165 1165
             ),
1166 1166
         );
@@ -1169,10 +1169,10 @@  discard block
 block discarded – undo
1169 1169
         /** @var EE_Event $event */
1170 1170
         $event = EEM_Event::instance()->get_one_by_ID($event_id);
1171 1171
         $this->_template_args['before_list_table'] = $event instanceof EE_Event
1172
-            ? '<h2>' . sprintf(
1172
+            ? '<h2>'.sprintf(
1173 1173
                 esc_html__('Viewing Registrations for Event: %s', 'event_espresso'),
1174 1174
                 EEM_Event::instance()->get_one_by_ID($event_id)->get('EVT_name')
1175
-            ) . '</h2>'
1175
+            ).'</h2>'
1176 1176
             : '';
1177 1177
         // need to get the number of datetimes on the event and set default datetime_id if there is only one datetime on
1178 1178
         // the event.
@@ -1190,12 +1190,12 @@  discard block
 block discarded – undo
1190 1190
             $this->_template_args['before_list_table'] .= ' &nbsp;<span class="drk-grey-text">';
1191 1191
             $this->_template_args['before_list_table'] .= '<span class="dashicons dashicons-calendar"></span>';
1192 1192
             $this->_template_args['before_list_table'] .= $datetime->name();
1193
-            $this->_template_args['before_list_table'] .= ' ( ' . $datetime->date_and_time_range() . ' )';
1193
+            $this->_template_args['before_list_table'] .= ' ( '.$datetime->date_and_time_range().' )';
1194 1194
             $this->_template_args['before_list_table'] .= '</span></h2>';
1195 1195
         }
1196 1196
         // if no datetime, then we're on the initial view, so let's give some helpful instructions on what the status
1197 1197
         // column represents
1198
-        if (! $datetime instanceof EE_Datetime) {
1198
+        if ( ! $datetime instanceof EE_Datetime) {
1199 1199
             $this->_template_args['before_list_table'] .= '<br><p class="description">'
1200 1200
                                                           . esc_html__(
1201 1201
                                                               'In this view, the check-in status represents the latest check-in record for the registration in that row.',
Please login to merge, or discard this patch.
form_sections/strategies/display/EE_Button_Display_Strategy.strategy.php 1 patch
Indentation   +28 added lines, -28 removed lines patch added patch discarded remove patch
@@ -12,32 +12,32 @@
 block discarded – undo
12 12
 class EE_Button_Display_Strategy extends EE_Display_Strategy_Base
13 13
 {
14 14
 
15
-    /**
16
-     * @return string of html to display the input
17
-     */
18
-    public function display()
19
-    {
20
-        $default_value = $this->_input->get_default();
21
-        if ($this->_input->get_normalization_strategy() instanceof EE_Normalization_Strategy_Base) {
22
-            $default_value = $this->_input->get_normalization_strategy()->unnormalize($default_value);
23
-        }
24
-        $html = $this->_opening_tag('button');
25
-        $html .= $this->_attributes_string(
26
-            array_merge(
27
-                $this->_standard_attributes_array(),
28
-                array(
29
-                    'value' => $default_value,
30
-                )
31
-            )
32
-        );
33
-        if ($this->_input instanceof EE_Button_Input) {
34
-            $button_content = $this->_input->button_content();
35
-        } else {
36
-            $button_content = $this->_input->get_default();
37
-        }
38
-        $html .= '>';
39
-        $html .= $button_content;
40
-        $html .= $this->_closing_tag();
41
-        return $html;
42
-    }
15
+	/**
16
+	 * @return string of html to display the input
17
+	 */
18
+	public function display()
19
+	{
20
+		$default_value = $this->_input->get_default();
21
+		if ($this->_input->get_normalization_strategy() instanceof EE_Normalization_Strategy_Base) {
22
+			$default_value = $this->_input->get_normalization_strategy()->unnormalize($default_value);
23
+		}
24
+		$html = $this->_opening_tag('button');
25
+		$html .= $this->_attributes_string(
26
+			array_merge(
27
+				$this->_standard_attributes_array(),
28
+				array(
29
+					'value' => $default_value,
30
+				)
31
+			)
32
+		);
33
+		if ($this->_input instanceof EE_Button_Input) {
34
+			$button_content = $this->_input->button_content();
35
+		} else {
36
+			$button_content = $this->_input->get_default();
37
+		}
38
+		$html .= '>';
39
+		$html .= $button_content;
40
+		$html .= $this->_closing_tag();
41
+		return $html;
42
+	}
43 43
 }
Please login to merge, or discard this patch.
core/domain/DomainBase.php 3 patches
Doc Comments   +1 added lines, -1 removed lines patch added patch discarded remove patch
@@ -121,7 +121,7 @@
 block discarded – undo
121 121
 
122 122
 
123 123
     /**
124
-     * @return Version
124
+     * @return string
125 125
      */
126 126
     public function versionValueObject()
127 127
     {
Please login to merge, or discard this patch.
Indentation   +227 added lines, -227 removed lines patch added patch discarded remove patch
@@ -17,231 +17,231 @@
 block discarded – undo
17 17
 abstract class DomainBase implements DomainInterface
18 18
 {
19 19
 
20
-    const ASSETS_FOLDER = 'assets/';
21
-
22
-    /**
23
-     * Equivalent to `__FILE__` for main plugin file.
24
-     *
25
-     * @var FilePath
26
-     */
27
-    private $plugin_file;
28
-
29
-    /**
30
-     * String indicating version for plugin
31
-     *
32
-     * @var string
33
-     */
34
-    private $version;
35
-
36
-    /**
37
-     * @var string $plugin_basename
38
-     */
39
-    private $plugin_basename;
40
-
41
-    /**
42
-     * @var string $plugin_path
43
-     */
44
-    private $plugin_path;
45
-
46
-    /**
47
-     * @var string $plugin_url
48
-     */
49
-    private $plugin_url;
50
-
51
-    /**
52
-     * @var string $asset_namespace
53
-     */
54
-    private $asset_namespace;
55
-
56
-    /**
57
-     * @var string $assets_path
58
-     */
59
-    private $assets_path;
60
-
61
-    /**
62
-     * @var bool
63
-     */
64
-    protected $initialized = false;
65
-
66
-
67
-    /**
68
-     * Initializes internal properties.
69
-     *
70
-     * @param FilePath $plugin_file
71
-     * @param Version  $version
72
-     * @param string $asset_namespace
73
-     */
74
-    public function __construct(
75
-        FilePath $plugin_file,
76
-        Version $version,
77
-        string $asset_namespace = Domain::ASSET_NAMESPACE
78
-    ) {
79
-        $this->plugin_file = $plugin_file;
80
-        $this->version     = $version;
81
-        $this->initialize($asset_namespace);
82
-    }
83
-
84
-
85
-    /**
86
-     * @param string $asset_namespace
87
-     * @return void
88
-     * @since $VID:$
89
-     */
90
-    public function initialize($asset_namespace = Domain::ASSET_NAMESPACE)
91
-    {
92
-        if (! $this->initialized) {
93
-            $this->plugin_basename = plugin_basename($this->pluginFile());
94
-            $this->plugin_path     = plugin_dir_path($this->pluginFile());
95
-            $this->plugin_url      = plugin_dir_url($this->pluginFile());
96
-            $this->setAssetNamespace($asset_namespace);
97
-            $this->setDistributionAssetsPath();
98
-            $this->initialized = true;
99
-        }
100
-    }
101
-
102
-
103
-    /**
104
-     * @param string $asset_namespace
105
-     * @return void
106
-     */
107
-    public function setAssetNamespace($asset_namespace = Domain::ASSET_NAMESPACE)
108
-    {
109
-        if (! $this->asset_namespace) {
110
-            $this->asset_namespace = sanitize_key(
111
-                // convert directory separators to dashes and remove file extension
112
-                str_replace(['/', '.php'], ['-', ''], $asset_namespace)
113
-            );
114
-        }
115
-    }
116
-
117
-
118
-    /**
119
-     * @throws DomainException
120
-     * @since $VID:$
121
-     */
122
-    private function setDistributionAssetsPath()
123
-    {
124
-        $assets_folder_paths = [
125
-            $this->plugin_path . DomainBase::ASSETS_FOLDER,
126
-            $this->plugin_path . 'src/' . DomainBase::ASSETS_FOLDER,
127
-        ];
128
-        foreach ($assets_folder_paths as $assets_folder_path) {
129
-            if (is_readable($assets_folder_path)) {
130
-                $this->assets_path = trailingslashit($assets_folder_path);
131
-                // once we find a valid path, just break out of loop
132
-                break;
133
-            }
134
-        }
135
-    }
136
-
137
-
138
-    /**
139
-     * @return string
140
-     */
141
-    public function pluginFile(): string
142
-    {
143
-        return (string) $this->plugin_file;
144
-    }
145
-
146
-
147
-    /**
148
-     * @return FilePath
149
-     */
150
-    public function pluginFileObject(): FilePath
151
-    {
152
-        return $this->plugin_file;
153
-    }
154
-
155
-
156
-    /**
157
-     * @return string
158
-     */
159
-    public function pluginBasename(): string
160
-    {
161
-        return $this->plugin_basename;
162
-    }
163
-
164
-
165
-    /**
166
-     * @param string $additional_path
167
-     * @return string
168
-     */
169
-    public function pluginPath($additional_path = ''): string
170
-    {
171
-        return is_string($additional_path) && $additional_path !== ''
172
-            ? $this->plugin_path . $additional_path
173
-            : $this->plugin_path;
174
-    }
175
-
176
-
177
-    /**
178
-     * @param string $additional_path
179
-     * @return string
180
-     */
181
-    public function pluginUrl($additional_path = ''): string
182
-    {
183
-        return is_string($additional_path) && $additional_path !== ''
184
-            ? $this->plugin_url . $additional_path
185
-            : $this->plugin_url;
186
-    }
187
-
188
-
189
-    /**
190
-     * @return string
191
-     */
192
-    public function version(): string
193
-    {
194
-        return (string) $this->version;
195
-    }
196
-
197
-
198
-    /**
199
-     * @return Version
200
-     */
201
-    public function versionValueObject()
202
-    {
203
-        return $this->version;
204
-    }
205
-
206
-
207
-    /**
208
-     * @return string
209
-     */
210
-    public function distributionAssetsFolder(): string
211
-    {
212
-        return DomainBase::ASSETS_FOLDER;
213
-    }
214
-
215
-
216
-    /**
217
-     * @param string $additional_path
218
-     * @return string
219
-     */
220
-    public function distributionAssetsPath($additional_path = ''): string
221
-    {
222
-        return is_string($additional_path) && $additional_path !== ''
223
-            ? $this->assets_path . $additional_path
224
-            : $this->assets_path;
225
-    }
226
-
227
-
228
-    /**
229
-     * @param string $additional_path
230
-     * @return string
231
-     */
232
-    public function distributionAssetsUrl($additional_path = ''): string
233
-    {
234
-        return is_string($additional_path) && $additional_path !== ''
235
-            ? $this->plugin_url . DomainBase::ASSETS_FOLDER . $additional_path
236
-            : $this->plugin_url . DomainBase::ASSETS_FOLDER;
237
-    }
238
-
239
-
240
-    /**
241
-     * @return string
242
-     */
243
-    public function assetNamespace(): string
244
-    {
245
-        return $this->asset_namespace;
246
-    }
20
+	const ASSETS_FOLDER = 'assets/';
21
+
22
+	/**
23
+	 * Equivalent to `__FILE__` for main plugin file.
24
+	 *
25
+	 * @var FilePath
26
+	 */
27
+	private $plugin_file;
28
+
29
+	/**
30
+	 * String indicating version for plugin
31
+	 *
32
+	 * @var string
33
+	 */
34
+	private $version;
35
+
36
+	/**
37
+	 * @var string $plugin_basename
38
+	 */
39
+	private $plugin_basename;
40
+
41
+	/**
42
+	 * @var string $plugin_path
43
+	 */
44
+	private $plugin_path;
45
+
46
+	/**
47
+	 * @var string $plugin_url
48
+	 */
49
+	private $plugin_url;
50
+
51
+	/**
52
+	 * @var string $asset_namespace
53
+	 */
54
+	private $asset_namespace;
55
+
56
+	/**
57
+	 * @var string $assets_path
58
+	 */
59
+	private $assets_path;
60
+
61
+	/**
62
+	 * @var bool
63
+	 */
64
+	protected $initialized = false;
65
+
66
+
67
+	/**
68
+	 * Initializes internal properties.
69
+	 *
70
+	 * @param FilePath $plugin_file
71
+	 * @param Version  $version
72
+	 * @param string $asset_namespace
73
+	 */
74
+	public function __construct(
75
+		FilePath $plugin_file,
76
+		Version $version,
77
+		string $asset_namespace = Domain::ASSET_NAMESPACE
78
+	) {
79
+		$this->plugin_file = $plugin_file;
80
+		$this->version     = $version;
81
+		$this->initialize($asset_namespace);
82
+	}
83
+
84
+
85
+	/**
86
+	 * @param string $asset_namespace
87
+	 * @return void
88
+	 * @since $VID:$
89
+	 */
90
+	public function initialize($asset_namespace = Domain::ASSET_NAMESPACE)
91
+	{
92
+		if (! $this->initialized) {
93
+			$this->plugin_basename = plugin_basename($this->pluginFile());
94
+			$this->plugin_path     = plugin_dir_path($this->pluginFile());
95
+			$this->plugin_url      = plugin_dir_url($this->pluginFile());
96
+			$this->setAssetNamespace($asset_namespace);
97
+			$this->setDistributionAssetsPath();
98
+			$this->initialized = true;
99
+		}
100
+	}
101
+
102
+
103
+	/**
104
+	 * @param string $asset_namespace
105
+	 * @return void
106
+	 */
107
+	public function setAssetNamespace($asset_namespace = Domain::ASSET_NAMESPACE)
108
+	{
109
+		if (! $this->asset_namespace) {
110
+			$this->asset_namespace = sanitize_key(
111
+				// convert directory separators to dashes and remove file extension
112
+				str_replace(['/', '.php'], ['-', ''], $asset_namespace)
113
+			);
114
+		}
115
+	}
116
+
117
+
118
+	/**
119
+	 * @throws DomainException
120
+	 * @since $VID:$
121
+	 */
122
+	private function setDistributionAssetsPath()
123
+	{
124
+		$assets_folder_paths = [
125
+			$this->plugin_path . DomainBase::ASSETS_FOLDER,
126
+			$this->plugin_path . 'src/' . DomainBase::ASSETS_FOLDER,
127
+		];
128
+		foreach ($assets_folder_paths as $assets_folder_path) {
129
+			if (is_readable($assets_folder_path)) {
130
+				$this->assets_path = trailingslashit($assets_folder_path);
131
+				// once we find a valid path, just break out of loop
132
+				break;
133
+			}
134
+		}
135
+	}
136
+
137
+
138
+	/**
139
+	 * @return string
140
+	 */
141
+	public function pluginFile(): string
142
+	{
143
+		return (string) $this->plugin_file;
144
+	}
145
+
146
+
147
+	/**
148
+	 * @return FilePath
149
+	 */
150
+	public function pluginFileObject(): FilePath
151
+	{
152
+		return $this->plugin_file;
153
+	}
154
+
155
+
156
+	/**
157
+	 * @return string
158
+	 */
159
+	public function pluginBasename(): string
160
+	{
161
+		return $this->plugin_basename;
162
+	}
163
+
164
+
165
+	/**
166
+	 * @param string $additional_path
167
+	 * @return string
168
+	 */
169
+	public function pluginPath($additional_path = ''): string
170
+	{
171
+		return is_string($additional_path) && $additional_path !== ''
172
+			? $this->plugin_path . $additional_path
173
+			: $this->plugin_path;
174
+	}
175
+
176
+
177
+	/**
178
+	 * @param string $additional_path
179
+	 * @return string
180
+	 */
181
+	public function pluginUrl($additional_path = ''): string
182
+	{
183
+		return is_string($additional_path) && $additional_path !== ''
184
+			? $this->plugin_url . $additional_path
185
+			: $this->plugin_url;
186
+	}
187
+
188
+
189
+	/**
190
+	 * @return string
191
+	 */
192
+	public function version(): string
193
+	{
194
+		return (string) $this->version;
195
+	}
196
+
197
+
198
+	/**
199
+	 * @return Version
200
+	 */
201
+	public function versionValueObject()
202
+	{
203
+		return $this->version;
204
+	}
205
+
206
+
207
+	/**
208
+	 * @return string
209
+	 */
210
+	public function distributionAssetsFolder(): string
211
+	{
212
+		return DomainBase::ASSETS_FOLDER;
213
+	}
214
+
215
+
216
+	/**
217
+	 * @param string $additional_path
218
+	 * @return string
219
+	 */
220
+	public function distributionAssetsPath($additional_path = ''): string
221
+	{
222
+		return is_string($additional_path) && $additional_path !== ''
223
+			? $this->assets_path . $additional_path
224
+			: $this->assets_path;
225
+	}
226
+
227
+
228
+	/**
229
+	 * @param string $additional_path
230
+	 * @return string
231
+	 */
232
+	public function distributionAssetsUrl($additional_path = ''): string
233
+	{
234
+		return is_string($additional_path) && $additional_path !== ''
235
+			? $this->plugin_url . DomainBase::ASSETS_FOLDER . $additional_path
236
+			: $this->plugin_url . DomainBase::ASSETS_FOLDER;
237
+	}
238
+
239
+
240
+	/**
241
+	 * @return string
242
+	 */
243
+	public function assetNamespace(): string
244
+	{
245
+		return $this->asset_namespace;
246
+	}
247 247
 }
Please login to merge, or discard this patch.
Spacing   +9 added lines, -9 removed lines patch added patch discarded remove patch
@@ -89,7 +89,7 @@  discard block
 block discarded – undo
89 89
      */
90 90
     public function initialize($asset_namespace = Domain::ASSET_NAMESPACE)
91 91
     {
92
-        if (! $this->initialized) {
92
+        if ( ! $this->initialized) {
93 93
             $this->plugin_basename = plugin_basename($this->pluginFile());
94 94
             $this->plugin_path     = plugin_dir_path($this->pluginFile());
95 95
             $this->plugin_url      = plugin_dir_url($this->pluginFile());
@@ -106,7 +106,7 @@  discard block
 block discarded – undo
106 106
      */
107 107
     public function setAssetNamespace($asset_namespace = Domain::ASSET_NAMESPACE)
108 108
     {
109
-        if (! $this->asset_namespace) {
109
+        if ( ! $this->asset_namespace) {
110 110
             $this->asset_namespace = sanitize_key(
111 111
                 // convert directory separators to dashes and remove file extension
112 112
                 str_replace(['/', '.php'], ['-', ''], $asset_namespace)
@@ -122,8 +122,8 @@  discard block
 block discarded – undo
122 122
     private function setDistributionAssetsPath()
123 123
     {
124 124
         $assets_folder_paths = [
125
-            $this->plugin_path . DomainBase::ASSETS_FOLDER,
126
-            $this->plugin_path . 'src/' . DomainBase::ASSETS_FOLDER,
125
+            $this->plugin_path.DomainBase::ASSETS_FOLDER,
126
+            $this->plugin_path.'src/'.DomainBase::ASSETS_FOLDER,
127 127
         ];
128 128
         foreach ($assets_folder_paths as $assets_folder_path) {
129 129
             if (is_readable($assets_folder_path)) {
@@ -169,7 +169,7 @@  discard block
 block discarded – undo
169 169
     public function pluginPath($additional_path = ''): string
170 170
     {
171 171
         return is_string($additional_path) && $additional_path !== ''
172
-            ? $this->plugin_path . $additional_path
172
+            ? $this->plugin_path.$additional_path
173 173
             : $this->plugin_path;
174 174
     }
175 175
 
@@ -181,7 +181,7 @@  discard block
 block discarded – undo
181 181
     public function pluginUrl($additional_path = ''): string
182 182
     {
183 183
         return is_string($additional_path) && $additional_path !== ''
184
-            ? $this->plugin_url . $additional_path
184
+            ? $this->plugin_url.$additional_path
185 185
             : $this->plugin_url;
186 186
     }
187 187
 
@@ -220,7 +220,7 @@  discard block
 block discarded – undo
220 220
     public function distributionAssetsPath($additional_path = ''): string
221 221
     {
222 222
         return is_string($additional_path) && $additional_path !== ''
223
-            ? $this->assets_path . $additional_path
223
+            ? $this->assets_path.$additional_path
224 224
             : $this->assets_path;
225 225
     }
226 226
 
@@ -232,8 +232,8 @@  discard block
 block discarded – undo
232 232
     public function distributionAssetsUrl($additional_path = ''): string
233 233
     {
234 234
         return is_string($additional_path) && $additional_path !== ''
235
-            ? $this->plugin_url . DomainBase::ASSETS_FOLDER . $additional_path
236
-            : $this->plugin_url . DomainBase::ASSETS_FOLDER;
235
+            ? $this->plugin_url.DomainBase::ASSETS_FOLDER.$additional_path
236
+            : $this->plugin_url.DomainBase::ASSETS_FOLDER;
237 237
     }
238 238
 
239 239
 
Please login to merge, or discard this patch.
core/domain/entities/contexts/RequestTypeContext.php 2 patches
Spacing   +1 added lines, -1 removed lines patch added patch discarded remove patch
@@ -91,7 +91,7 @@
 block discarded – undo
91 91
     public function __construct($slug, $description)
92 92
     {
93 93
         parent::__construct($slug, $description);
94
-        if (! in_array($this->slug(), $this->validRequestTypes(), true)) {
94
+        if ( ! in_array($this->slug(), $this->validRequestTypes(), true)) {
95 95
             throw new InvalidArgumentException(
96 96
                 sprintf(
97 97
                     esc_html__(
Please login to merge, or discard this patch.
Indentation   +181 added lines, -181 removed lines patch added patch discarded remove patch
@@ -16,185 +16,185 @@
 block discarded – undo
16 16
 class RequestTypeContext extends Context
17 17
 {
18 18
 
19
-    /**
20
-     * indicates that the current request involves some form of activation
21
-     */
22
-    const ACTIVATION = 'activation-request';
23
-
24
-    /**
25
-     * indicates that the current request is for the admin but is not being made via AJAX
26
-     */
27
-    const ADMIN = 'non-ajax-admin-request';
28
-
29
-    /**
30
-     * indicates that the current request is for the admin AND is being made via AJAX
31
-     */
32
-    const AJAX_ADMIN = 'admin-ajax-request';
33
-
34
-    /**
35
-     * indicates that the current request is for the frontend AND is being made via AJAX
36
-     */
37
-    const AJAX_FRONT = 'frontend-ajax-request';
38
-
39
-    /**
40
-     * indicates that the current request is for the WP Heartbeat
41
-     */
42
-    const AJAX_HEARTBEAT = 'admin-ajax-heartbeat';
43
-
44
-    /**
45
-     * indicates that the current request is being made via AJAX, but is NOT for EE
46
-     */
47
-    const AJAX_OTHER = 'other-ajax-request';
48
-
49
-    /**
50
-     * indicates that the current request is for the EE REST API
51
-     */
52
-    const API = 'rest-api';
53
-
54
-    /**
55
-     * indicates that the current request is from the command line
56
-     */
57
-    const CLI = 'command-line';
58
-
59
-    /**
60
-     * indicates that the current request is for a WP_Cron
61
-     */
62
-    const CRON = 'wp-cron';
63
-
64
-    /**
65
-     * indicates that the current request is for a feed (ie: RSS)
66
-     */
67
-    const FEED = 'feed-request';
68
-
69
-    /**
70
-     * indicates that the current request is for the frontend but is not being made via AJAX
71
-     */
72
-    const FRONTEND = 'non-ajax-frontend-request';
73
-
74
-    /**
75
-     * indicates that the current request is for content that is to be displayed within an iframe
76
-     */
77
-    const IFRAME = 'iframe-request';
78
-
79
-    /**
80
-     * indicates that the current request is for the EE GraphQL manager
81
-     */
82
-    const GQL = 'graphql';
83
-
84
-    /**
85
-     * indicates that the current request is for the WP REST API
86
-     */
87
-    const WP_API = 'wp-rest-api';
88
-
89
-    /**
90
-     * indicates that the current request is a loopback sent from WP core to test for errors
91
-     */
92
-    const WP_SCRAPE = 'wordpress-scrape';
93
-
94
-    /**
95
-     * @var boolean $is_activation
96
-     */
97
-    private $is_activation = false;
98
-
99
-    /**
100
-     * @var boolean $is_unit_testing
101
-     */
102
-    private $is_unit_testing = false;
103
-
104
-    /**
105
-     * @var array $valid_request_types
106
-     */
107
-    private $valid_request_types = array();
108
-
109
-
110
-    /**
111
-     * RequestTypeContext constructor.
112
-     *
113
-     * @param string $slug
114
-     * @param string $description
115
-     * @throws InvalidArgumentException
116
-     */
117
-    public function __construct($slug, $description)
118
-    {
119
-        parent::__construct($slug, $description);
120
-        if (! in_array($this->slug(), $this->validRequestTypes(), true)) {
121
-            throw new InvalidArgumentException(
122
-                sprintf(
123
-                    esc_html__(
124
-                        'The RequestTypeContext slug must be one of the following values: %1$s %2$s',
125
-                        'event_espresso'
126
-                    ),
127
-                    '<br />',
128
-                    var_export($this->validRequestTypes(), true)
129
-                )
130
-            );
131
-        }
132
-    }
133
-
134
-
135
-    /**
136
-     * @return array
137
-     */
138
-    public function validRequestTypes()
139
-    {
140
-        if (empty($this->valid_request_types)) {
141
-            $this->valid_request_types = apply_filters(
142
-                'FHEE__EventEspresso_core_domain_entities_contexts_RequestTypeContext__validRequestTypes',
143
-                array(
144
-                    RequestTypeContext::ACTIVATION,
145
-                    RequestTypeContext::ADMIN,
146
-                    RequestTypeContext::AJAX_ADMIN,
147
-                    RequestTypeContext::AJAX_FRONT,
148
-                    RequestTypeContext::AJAX_HEARTBEAT,
149
-                    RequestTypeContext::AJAX_OTHER,
150
-                    RequestTypeContext::API,
151
-                    RequestTypeContext::CLI,
152
-                    RequestTypeContext::CRON,
153
-                    RequestTypeContext::FEED,
154
-                    RequestTypeContext::FRONTEND,
155
-                    RequestTypeContext::GQL,
156
-                    RequestTypeContext::IFRAME,
157
-                    RequestTypeContext::WP_API,
158
-                    RequestTypeContext::WP_SCRAPE,
159
-                )
160
-            );
161
-        }
162
-        return $this->valid_request_types;
163
-    }
164
-
165
-
166
-    /**
167
-     * @return bool
168
-     */
169
-    public function isActivation()
170
-    {
171
-        return $this->is_activation;
172
-    }
173
-
174
-
175
-    /**
176
-     * @param bool $is_activation
177
-     */
178
-    public function setIsActivation($is_activation = false)
179
-    {
180
-        $this->is_activation = filter_var($is_activation, FILTER_VALIDATE_BOOLEAN);
181
-    }
182
-
183
-
184
-    /**
185
-     * @return bool
186
-     */
187
-    public function isUnitTesting()
188
-    {
189
-        return $this->is_unit_testing;
190
-    }
191
-
192
-
193
-    /**
194
-     * @param bool $is_unit_testing
195
-     */
196
-    public function setIsUnitTesting($is_unit_testing = false)
197
-    {
198
-        $this->is_unit_testing = filter_var($is_unit_testing, FILTER_VALIDATE_BOOLEAN);
199
-    }
19
+	/**
20
+	 * indicates that the current request involves some form of activation
21
+	 */
22
+	const ACTIVATION = 'activation-request';
23
+
24
+	/**
25
+	 * indicates that the current request is for the admin but is not being made via AJAX
26
+	 */
27
+	const ADMIN = 'non-ajax-admin-request';
28
+
29
+	/**
30
+	 * indicates that the current request is for the admin AND is being made via AJAX
31
+	 */
32
+	const AJAX_ADMIN = 'admin-ajax-request';
33
+
34
+	/**
35
+	 * indicates that the current request is for the frontend AND is being made via AJAX
36
+	 */
37
+	const AJAX_FRONT = 'frontend-ajax-request';
38
+
39
+	/**
40
+	 * indicates that the current request is for the WP Heartbeat
41
+	 */
42
+	const AJAX_HEARTBEAT = 'admin-ajax-heartbeat';
43
+
44
+	/**
45
+	 * indicates that the current request is being made via AJAX, but is NOT for EE
46
+	 */
47
+	const AJAX_OTHER = 'other-ajax-request';
48
+
49
+	/**
50
+	 * indicates that the current request is for the EE REST API
51
+	 */
52
+	const API = 'rest-api';
53
+
54
+	/**
55
+	 * indicates that the current request is from the command line
56
+	 */
57
+	const CLI = 'command-line';
58
+
59
+	/**
60
+	 * indicates that the current request is for a WP_Cron
61
+	 */
62
+	const CRON = 'wp-cron';
63
+
64
+	/**
65
+	 * indicates that the current request is for a feed (ie: RSS)
66
+	 */
67
+	const FEED = 'feed-request';
68
+
69
+	/**
70
+	 * indicates that the current request is for the frontend but is not being made via AJAX
71
+	 */
72
+	const FRONTEND = 'non-ajax-frontend-request';
73
+
74
+	/**
75
+	 * indicates that the current request is for content that is to be displayed within an iframe
76
+	 */
77
+	const IFRAME = 'iframe-request';
78
+
79
+	/**
80
+	 * indicates that the current request is for the EE GraphQL manager
81
+	 */
82
+	const GQL = 'graphql';
83
+
84
+	/**
85
+	 * indicates that the current request is for the WP REST API
86
+	 */
87
+	const WP_API = 'wp-rest-api';
88
+
89
+	/**
90
+	 * indicates that the current request is a loopback sent from WP core to test for errors
91
+	 */
92
+	const WP_SCRAPE = 'wordpress-scrape';
93
+
94
+	/**
95
+	 * @var boolean $is_activation
96
+	 */
97
+	private $is_activation = false;
98
+
99
+	/**
100
+	 * @var boolean $is_unit_testing
101
+	 */
102
+	private $is_unit_testing = false;
103
+
104
+	/**
105
+	 * @var array $valid_request_types
106
+	 */
107
+	private $valid_request_types = array();
108
+
109
+
110
+	/**
111
+	 * RequestTypeContext constructor.
112
+	 *
113
+	 * @param string $slug
114
+	 * @param string $description
115
+	 * @throws InvalidArgumentException
116
+	 */
117
+	public function __construct($slug, $description)
118
+	{
119
+		parent::__construct($slug, $description);
120
+		if (! in_array($this->slug(), $this->validRequestTypes(), true)) {
121
+			throw new InvalidArgumentException(
122
+				sprintf(
123
+					esc_html__(
124
+						'The RequestTypeContext slug must be one of the following values: %1$s %2$s',
125
+						'event_espresso'
126
+					),
127
+					'<br />',
128
+					var_export($this->validRequestTypes(), true)
129
+				)
130
+			);
131
+		}
132
+	}
133
+
134
+
135
+	/**
136
+	 * @return array
137
+	 */
138
+	public function validRequestTypes()
139
+	{
140
+		if (empty($this->valid_request_types)) {
141
+			$this->valid_request_types = apply_filters(
142
+				'FHEE__EventEspresso_core_domain_entities_contexts_RequestTypeContext__validRequestTypes',
143
+				array(
144
+					RequestTypeContext::ACTIVATION,
145
+					RequestTypeContext::ADMIN,
146
+					RequestTypeContext::AJAX_ADMIN,
147
+					RequestTypeContext::AJAX_FRONT,
148
+					RequestTypeContext::AJAX_HEARTBEAT,
149
+					RequestTypeContext::AJAX_OTHER,
150
+					RequestTypeContext::API,
151
+					RequestTypeContext::CLI,
152
+					RequestTypeContext::CRON,
153
+					RequestTypeContext::FEED,
154
+					RequestTypeContext::FRONTEND,
155
+					RequestTypeContext::GQL,
156
+					RequestTypeContext::IFRAME,
157
+					RequestTypeContext::WP_API,
158
+					RequestTypeContext::WP_SCRAPE,
159
+				)
160
+			);
161
+		}
162
+		return $this->valid_request_types;
163
+	}
164
+
165
+
166
+	/**
167
+	 * @return bool
168
+	 */
169
+	public function isActivation()
170
+	{
171
+		return $this->is_activation;
172
+	}
173
+
174
+
175
+	/**
176
+	 * @param bool $is_activation
177
+	 */
178
+	public function setIsActivation($is_activation = false)
179
+	{
180
+		$this->is_activation = filter_var($is_activation, FILTER_VALIDATE_BOOLEAN);
181
+	}
182
+
183
+
184
+	/**
185
+	 * @return bool
186
+	 */
187
+	public function isUnitTesting()
188
+	{
189
+		return $this->is_unit_testing;
190
+	}
191
+
192
+
193
+	/**
194
+	 * @param bool $is_unit_testing
195
+	 */
196
+	public function setIsUnitTesting($is_unit_testing = false)
197
+	{
198
+		$this->is_unit_testing = filter_var($is_unit_testing, FILTER_VALIDATE_BOOLEAN);
199
+	}
200 200
 }
Please login to merge, or discard this patch.