Completed
Branch FET-9586-add-search-input (524ff8)
by
unknown
436:51 queued 422:19
created

EED_Messages   F

Complexity

Total Complexity 88

Size/Duplication

Total Lines 974
Duplicated Lines 5.44 %

Coupling/Cohesion

Components 1
Dependencies 21

Importance

Changes 1
Bugs 0 Features 0
Metric Value
wmc 88
c 1
b 0
f 0
lcom 1
cbo 21
dl 53
loc 974
rs 1.263

31 Methods

Rating   Name   Duplication   Size   Complexity  
B run_cron() 0 30 3
A instance() 0 3 1
A set_hooks() 0 10 1
A set_hooks_admin() 0 13 1
A _register_routes() 0 7 1
A browser_trigger() 0 14 2
B browser_error_trigger() 0 37 4
A run() 0 15 2
A get_template_pack() 0 4 1
A get_template_packs() 0 13 2
A set_autoloaders() 0 11 3
A _set_messages_paths() 0 18 2
A _load_controller() 0 9 2
A payment_reminder() 0 5 1
A payment() 0 9 2
A cancelled_registration() 0 5 1
B maybe_registration() 0 35 4
C _verify_registration_notification_send() 0 41 13
A _get_reg_status_array() 0 6 2
A _get_payment_message_type() 0 6 2
B process_resend() 0 30 5
B resend_message() 0 24 2
B process_admin_payment() 0 45 6
A send_newsletter_message() 0 6 1
C registration_message_trigger_url() 0 59 9
A preview_message() 0 16 2
A send_message_with_messenger_only() 0 14 1
A generate_now() 0 21 2
B send_now() 20 44 3
B queue_for_resending() 18 26 2
B log() 15 15 5

How to fix   Duplicated Code    Complexity   

Duplicated Code

Duplicate code is one of the most pungent code smells. A rule that is often used is to re-structure code once it is duplicated in three or more places.

Common duplication problems, and corresponding solutions are:

Complex Class

 Tip:   Before tackling complexity, make sure that you eliminate any duplication first. This often can reduce the size of classes significantly.

Complex classes like EED_Messages often do a lot of different things. To break such a class down, we need to identify a cohesive component within that class. A common approach to find such a component is to look for fields/methods that share the same prefixes, or suffixes. You can also have a look at the cohesion graph to spot any un-connected, or weakly-connected components.

Once you have determined the fields that belong together, you can apply the Extract Class refactoring. If the component makes sense as a sub-class, Extract Subclass is also a candidate, and is often faster.

While breaking up the class, it is a good idea to analyze how other classes use EED_Messages, and based on these observations, apply Extract Interface, too.

1
<?php
2
/**
3
 * This file contains the module for the messages system
4
 *
5
 * @since 4.5.0
6
 * @package  Event Espresso
7
 * @subpackage modules, messages
8
 */
9
if ( ! defined('EVENT_ESPRESSO_VERSION')) exit('No direct script access allowed');
10
/**
11
 *
12
 * Messages module.  Takes care of registering all the triggers for messages.
13
 *
14
 * @since 4.5.0
15
 *
16
 * @package		Event Espresso
17
 * @subpackage	modules, messages
18
 * @author 		Darren Ethier
19
 *
20
 * ------------------------------------------------------------------------
21
 */
22
class EED_Messages  extends EED_Module {
23
24
	/**
25
	 * This holds the EE_messages controller
26
	 * @deprecated 4.9.0
27
	 * @var EE_messages $_EEMSG
28
	 */
29
	protected  static $_EEMSG;
30
31
	/**
32
	 * @type EE_Message_Resource_Manager $_message_resource_manager
33
	 */
34
	protected  static $_message_resource_manager;
35
36
	/**
37
	 * This holds the EE_Messages_Processor business class.
38
	 *
39
	 * @type EE_Messages_Processor
40
	 */
41
	protected static $_MSG_PROCESSOR;
42
43
	/**
44
	 * holds all the paths for various messages components.
45
	 * Utilized by autoloader registry
46
	 *
47
	 * @var array
48
	 */
49
	protected static $_MSG_PATHS;
50
51
52
53
	/**
54
	 * This will hold an array of messages template packs that are registered in the messages system.
55
	 * Format is:
56
	 * array(
57
	 * 	'template_pack_dbref' => EE_Messages_Template_Pack (instance)
58
	 * )
59
	 *
60
	 * @var EE_Messages_Template_Pack[]
61
	 */
62
	protected static $_TMP_PACKS = array();
63
64
65
66
67
68
	/**
69
	 * @return EED_Module
70
	 */
71
	public static function instance() {
72
		return parent::get_instance( __CLASS__ );
0 ignored issues
show
Comprehensibility Bug introduced by
It seems like you call parent on a different method (get_instance() instead of instance()). Are you sure this is correct? If so, you might want to change this to $this->get_instance().

This check looks for a call to a parent method whose name is different than the method from which it is called.

Consider the following code:

class Daddy
{
    protected function getFirstName()
    {
        return "Eidur";
    }

    protected function getSurName()
    {
        return "Gudjohnsen";
    }
}

class Son
{
    public function getFirstName()
    {
        return parent::getSurname();
    }
}

The getFirstName() method in the Son calls the wrong method in the parent class.

Loading history...
73
	}
74
75
76
77
78
	/**
79
	 *  set_hooks - for hooking into EE Core, other modules, etc
80
	 *
81
	 *  @since 4.5.0
82
	 *
83
	 *  @return 	void
84
	 */
85
	public static function set_hooks() {
86
		//actions
87
		add_action( 'AHEE__EE_Payment_Processor__update_txn_based_on_payment', array( 'EED_Messages', 'payment' ), 10, 2 );
88
		add_action( 'AHEE__EE_Registration_Processor__trigger_registration_update_notifications', array( 'EED_Messages', 'maybe_registration' ), 10, 2 );
89
		//filters
90
		add_filter( 'FHEE__EE_Registration__receipt_url__receipt_url', array( 'EED_Messages', 'registration_message_trigger_url' ), 10, 4 );
91
		add_filter( 'FHEE__EE_Registration__invoice_url__invoice_url', array( 'EED_Messages', 'registration_message_trigger_url' ), 10, 4 );
92
		//register routes
93
		self::_register_routes();
94
	}
95
96
	/**
97
	 * 	set_hooks_admin - for hooking into EE Admin Core, other modules, etc
98
	 *
99
	 *  @access 	public
100
	 *  @return 	void
101
	 */
102
	public static function set_hooks_admin() {
103
		//actions
104
		add_action( 'AHEE__EE_Payment_Processor__update_txn_based_on_payment', array( 'EED_Messages', 'payment' ), 10, 2 );
105
		add_action( 'AHEE__Transactions_Admin_Page___send_payment_reminder__process_admin_payment_reminder', array( 'EED_Messages', 'payment_reminder' ), 10 );
106
		add_action( 'AHEE__EE_Registration_Processor__trigger_registration_update_notifications', array( 'EED_Messages', 'maybe_registration' ), 10, 3 );
107
		add_action( 'AHEE__Extend_Registrations_Admin_Page___newsletter_selected_send__with_registrations', array( 'EED_Messages', 'send_newsletter_message' ), 10, 2 );
108
		add_action( 'AHEE__EES_Espresso_Cancelled__process_shortcode__transaction', array( 'EED_Messages', 'cancelled_registration' ), 10 );
109
		add_action( 'AHEE__EE_Admin_Page___process_admin_payment_notification', array( 'EED_Messages', 'process_admin_payment' ), 10, 1 );
110
		//filters
111
		add_filter( 'FHEE__EE_Admin_Page___process_resend_registration__success', array( 'EED_Messages', 'process_resend' ), 10, 2 );
112
		add_filter( 'FHEE__EE_Registration__receipt_url__receipt_url', array( 'EED_Messages', 'registration_message_trigger_url' ), 10, 4 );
113
		add_filter( 'FHEE__EE_Registration__invoice_url__invoice_url', array( 'EED_Messages', 'registration_message_trigger_url' ), 10, 4 );
114
	}
115
116
117
118
119
	/**
120
	 * All the message triggers done by route go in here.
121
	 *
122
	 * @since 4.5.0
123
	 *
124
	 * @return void
125
	 */
126
	protected static function _register_routes() {
127
		EE_Config::register_route( 'msg_url_trigger', 'Messages', 'run' );
128
		EE_Config::register_route( 'msg_cron_trigger', 'Messages', 'run_cron' );
129
		EE_Config::register_route( 'msg_browser_trigger', 'Messages', 'browser_trigger' );
130
		EE_Config::register_route( 'msg_browser_error_trigger', 'Messages', 'browser_error_trigger' );
131
		do_action( 'AHEE__EED_Messages___register_routes' );
132
	}
133
134
135
136
	/**
137
	 * This is called when a browser display trigger is executed.
138
	 * The browser display trigger is typically used when a already generated message is displayed directly in the browser.
139
	 * @since 4.9.0
140
	 * @param WP $WP
141
	 */
142
	public function browser_trigger( $WP ) {
0 ignored issues
show
Unused Code introduced by
The parameter $WP is not used and could be removed.

This check looks from parameters that have been defined for a function or method, but which are not used in the method body.

Loading history...
143
		//ensure controller is loaded
144
		self::_load_controller();
145
		$token = EE_Registry::instance()->REQ->get( 'token' );
146
		try {
147
			$mtg = new EE_Message_Generated_From_Token( $token, 'html', self::$_message_resource_manager );
148
			self::$_MSG_PROCESSOR->generate_and_send_now( $mtg );
149
		} catch( EE_Error $e ) {
150
			$error_msg = __( 'Please note that a system message failed to send due to a technical issue.', 'event_espresso' );
151
			// add specific message for developers if WP_DEBUG in on
152
			$error_msg .= '||' . $e->getMessage();
153
			EE_Error::add_error( $error_msg, __FILE__, __FUNCTION__, __LINE__ );
154
		}
155
	}
156
157
158
159
160
161
	/**
162
	 * This is called when a browser error trigger is executed.
163
	 * When triggered this will grab the EE_Message matching the token in the request and use that to get the error message
164
	 * and display it.
165
	 *
166
	 * @since 4.9.0
167
	 * @param $WP
168
	 */
169
	public function browser_error_trigger( $WP ) {
0 ignored issues
show
Unused Code introduced by
The parameter $WP is not used and could be removed.

This check looks from parameters that have been defined for a function or method, but which are not used in the method body.

Loading history...
170
		$token = EE_Registry::instance()->REQ->get( 'token' );
171
		if ( $token ) {
172
			$message = EEM_Message::instance()->get_one_by_token( $token );
173
			if ( $message instanceof EE_Message ) {
174
				header( 'HTTP/1.1 200 OK' );
175
				$error_msg = nl2br( $message->error_message() );
176
				?>
177
				<!DOCTYPE html>
178
				<html>
179
					<head></head>
180
					<body>
181
						<?php echo empty( $error_msg )
182
						? esc_html__( 'Unfortunately, we were unable to capture the error message for this message.', 'event_espresso' )
183
						: wp_kses(
184
							$error_msg,
185
							array(
186
								'a' => array(
187
									'href' => array(),
188
									'title' => array()
189
								),
190
								'span' => array(),
191
								'div' => array(),
192
								'p' => array(),
193
								'strong' => array(),
194
								'em' => array(),
195
								'br' => array()
196
							)
197
						); ?>
198
					</body>
199
				</html>
200
				<?php
201
				exit;
202
			}
203
		}
204
		return;
205
	}
206
207
208
209
	/**
210
	 *  This runs when the msg_url_trigger route has initiated.
211
	 *
212
	 * @since 4.5.0
213
	 * @param WP $WP
214
	 * @throws EE_Error
215
	 * @return    void
216
	 */
217
	public function run( $WP ) {
218
		//ensure controller is loaded
219
		self::_load_controller();
220
		// attempt to process message
221
		try {
222
			/** @type EE_Message_To_Generate_From_Request $message_to_generate */
223
			$message_to_generate = EE_Registry::instance()->load_lib( 'Message_To_Generate_From_Request' );
224
			self::$_MSG_PROCESSOR->generate_and_send_now( $message_to_generate );
225
		} catch ( EE_Error $e ) {
226
			$error_msg = __( 'Please note that a system message failed to send due to a technical issue.', 'event_espresso' );
227
			// add specific message for developers if WP_DEBUG in on
228
			$error_msg .= '||' . $e->getMessage();
229
			EE_Error::add_error( $error_msg, __FILE__, __FUNCTION__, __LINE__ );
230
		}
231
	}
232
233
234
	/**
235
	 * This is triggered by the 'msg_cron_trigger' route.
236
	 * @param WP $WP
237
	 */
238
	public function run_cron( $WP ) {
0 ignored issues
show
Unused Code introduced by
The parameter $WP is not used and could be removed.

This check looks from parameters that have been defined for a function or method, but which are not used in the method body.

Loading history...
239
		self::_load_controller();
240
		//get required vars
241
		$cron_type = EE_Registry::instance()->REQ->get( 'type' );
242
		$transient_key = EE_Registry::instance()->REQ->get( 'key' );
243
		header( 'HTTP/1.1 200 OK' );
244
245
		//now let's verify transient, if not valid exit immediately
246
		if ( ! get_transient( $transient_key ) ) {
247
			/**
248
			 * trigger error so this gets in the error logs.  This is important because it happens on a non-user request.
249
			 */
250
			trigger_error( esc_attr__( 'Invalid Request (Transient does not exist)', 'event_espresso' ) );
251
		}
252
253
		//if made it here, lets' delete the transient to keep the db clean
254
		delete_transient( $transient_key );
255
256
		$method = 'batch_' . $cron_type . '_from_queue';
257
		if ( method_exists( self::$_MSG_PROCESSOR, $method ) ) {
258
			self::$_MSG_PROCESSOR->$method();
259
		} else {
260
			//no matching task
261
			/**
262
			 * trigger error so this gets in the error logs.  This is important because it happens on a non user request.
263
			 */
264
			trigger_error( esc_attr( sprintf( __( 'There is no task corresponding to this route %s', 'event_espresso' ), $cron_type ) ) );
265
		}
266
		exit();
267
	}
268
269
270
271
272
	/**
273
	 * This is used to retrieve the template pack for the given name.
274
	 * Retrieved packs are cached on the static $_TMP_PACKS array.  If there is no class matching the given name then the default template pack is returned.
275
	 *
276
	 * @deprecated 4.9.0  @see EEH_MSG_Template::get_template_pack()
277
	 *
278
	 * @param string $template_pack_name This should correspond to the dbref of the template pack (which is also used in generating the Pack class name).
279
	 *
280
	 * @return EE_Messages_Template_Pack
281
	 */
282
	public static function get_template_pack( $template_pack_name ) {
283
		EE_Registry::instance()->load_helper( 'MSG_Template' );
284
		return EEH_MSG_Template::get_template_pack( $template_pack_name );
285
	}
286
287
288
289
290
	/**
291
	 * Retrieves an array of all template packs.
292
	 * Array is in the format array( 'dbref' => EE_Messages_Template_Pack )
293
	 * @deprecated 4.9.0  @see EEH_MSG_Template_Pack::get_template_pack_collection
294
	 *
295
	 * @return EE_Messages_Template_Pack[]
296
	 */
297
	public static function get_template_packs() {
298
		EE_Registry::instance()->load_helper( 'MSG_Template' );
299
300
		//for backward compat, let's make sure this returns in the same format as originally.
301
		$template_pack_collection = EEH_MSG_Template::get_template_pack_collection();
302
		$template_pack_collection->rewind();
303
		$template_packs = array();
304
		while ( $template_pack_collection->valid() ) {
305
			$template_packs[ $template_pack_collection->current()->dbref ] = $template_pack_collection->current();
306
			$template_pack_collection->next();
307
		}
308
		return $template_packs;
309
	}
310
311
312
313
	/**
314
	 * This simply makes sure the autoloaders are registered for the EE_messages system.
315
	 *
316
	 * @since 4.5.0
317
	 *
318
	 * @return void
319
	 */
320
	public static function set_autoloaders() {
321
		if ( empty( self::$_MSG_PATHS ) ) {
322
			self::_set_messages_paths();
323
			foreach ( self::$_MSG_PATHS as $path ) {
324
				EEH_Autoloader::register_autoloaders_for_each_file_in_folder( $path );
325
			}
326
			// add aliases
327
			EEH_Autoloader::add_alias( 'EE_messages', 'EE_messages' );
328
			EEH_Autoloader::add_alias( 'EE_messenger', 'EE_messenger' );
329
		}
330
	}
331
332
333
334
335
	/**
336
	 * Take care of adding all the paths for the messages components to the $_MSG_PATHS property
337
	 * for use by the Messages Autoloaders
338
	 *
339
	 * @since 4.5.0
340
	 *
341
	 * @return void.
0 ignored issues
show
Documentation introduced by
The doc-type void. could not be parsed: Unknown type name "void." at position 0. (view supported doc-types)

This check marks PHPDoc comments that could not be parsed by our parser. To see which comment annotations we can parse, please refer to our documentation on supported doc-types.

Loading history...
342
	 */
343
	protected static function _set_messages_paths() {
344
		$dir_ref = array(
345
			'messages/message_type',
346
			'messages/messenger',
347
			'messages/defaults',
348
			'messages/defaults/email',
349
			'messages/data_class',
350
			'messages/validators',
351
			'messages/validators/email',
352
			'messages/validators/html',
353
			'shortcodes',
354
			);
355
		$paths = array();
356
		foreach ( $dir_ref as $index => $dir ) {
357
			$paths[ $index ] = EE_LIBRARIES . $dir;
358
		}
359
		self::$_MSG_PATHS = apply_filters( 'FHEE__EED_Messages___set_messages_paths___MSG_PATHS', $paths );
360
	}
361
362
363
	/**
364
	 * Takes care of loading dependencies
365
	 *
366
	 * @since 4.5.0
367
	 * @return void
368
	 */
369
	protected static function _load_controller() {
370
		if ( ! self::$_MSG_PROCESSOR instanceof EE_Messages_Processor ) {
371
			EE_Registry::instance()->load_core( 'Request_Handler' );
372
			self::set_autoloaders();
373
			self::$_EEMSG = EE_Registry::instance()->load_lib( 'messages' );
0 ignored issues
show
Documentation Bug introduced by
It seems like \EE_Registry::instance()->load_lib('messages') can also be of type boolean. However, the property $_EEMSG is declared as type object<EE_messages>. Maybe add an additional type check?

Our type inference engine has found a suspicous assignment of a value to a property. This check raises an issue when a value that can be of a mixed type is assigned to a property that is type hinted more strictly.

For example, imagine you have a variable $accountId that can either hold an Id object or false (if there is no account id yet). Your code now assigns that value to the id property of an instance of the Account class. This class holds a proper account, so the id value must no longer be false.

Either this assignment is in error or a type check should be added for that assignment.

class Id
{
    public $id;

    public function __construct($id)
    {
        $this->id = $id;
    }

}

class Account
{
    /** @var  Id $id */
    public $id;
}

$account_id = false;

if (starsAreRight()) {
    $account_id = new Id(42);
}

$account = new Account();
if ($account instanceof Id)
{
    $account->id = $account_id;
}
Loading history...
Deprecated Code introduced by
The property EED_Messages::$_EEMSG has been deprecated with message: 4.9.0

This property has been deprecated. The supplier of the class has supplied an explanatory message.

The explanatory message should give you some clue as to whether and when the property will be removed from the class and what other property to use instead.

Loading history...
374
			self::$_MSG_PROCESSOR = EE_Registry::instance()->load_lib( 'Messages_Processor' );
0 ignored issues
show
Documentation Bug introduced by
It seems like \EE_Registry::instance()...b('Messages_Processor') can also be of type boolean. However, the property $_MSG_PROCESSOR is declared as type object<EE_Messages_Processor>. Maybe add an additional type check?

Our type inference engine has found a suspicous assignment of a value to a property. This check raises an issue when a value that can be of a mixed type is assigned to a property that is type hinted more strictly.

For example, imagine you have a variable $accountId that can either hold an Id object or false (if there is no account id yet). Your code now assigns that value to the id property of an instance of the Account class. This class holds a proper account, so the id value must no longer be false.

Either this assignment is in error or a type check should be added for that assignment.

class Id
{
    public $id;

    public function __construct($id)
    {
        $this->id = $id;
    }

}

class Account
{
    /** @var  Id $id */
    public $id;
}

$account_id = false;

if (starsAreRight()) {
    $account_id = new Id(42);
}

$account = new Account();
if ($account instanceof Id)
{
    $account->id = $account_id;
}
Loading history...
375
			self::$_message_resource_manager = EE_Registry::instance()->load_lib( 'Message_Resource_Manager' );
0 ignored issues
show
Documentation Bug introduced by
It seems like \EE_Registry::instance()...sage_Resource_Manager') can also be of type boolean. However, the property $_message_resource_manager is declared as type object<EE_Message_Resource_Manager>. Maybe add an additional type check?

Our type inference engine has found a suspicous assignment of a value to a property. This check raises an issue when a value that can be of a mixed type is assigned to a property that is type hinted more strictly.

For example, imagine you have a variable $accountId that can either hold an Id object or false (if there is no account id yet). Your code now assigns that value to the id property of an instance of the Account class. This class holds a proper account, so the id value must no longer be false.

Either this assignment is in error or a type check should be added for that assignment.

class Id
{
    public $id;

    public function __construct($id)
    {
        $this->id = $id;
    }

}

class Account
{
    /** @var  Id $id */
    public $id;
}

$account_id = false;

if (starsAreRight()) {
    $account_id = new Id(42);
}

$account = new Account();
if ($account instanceof Id)
{
    $account->id = $account_id;
}
Loading history...
376
		}
377
	}
378
379
380
381
	/**
382
	 * @param EE_Transaction $transaction
383
	 */
384
	public static function payment_reminder( EE_Transaction $transaction ) {
385
		self::_load_controller();
386
		$data = array( $transaction, null );
387
		self::$_MSG_PROCESSOR->generate_for_all_active_messengers( 'payment_reminder', $data );
388
	}
389
390
391
392
	/**
393
	 * Any messages triggers for after successful gateway payments should go in here.
394
	 * @param  EE_Transaction object
395
	 * @param  EE_Payment object
396
	 * @return void
397
	 */
398
	public static function payment( EE_Transaction $transaction, EE_Payment $payment ) {
399
		self::_load_controller();
400
		$data = array( $transaction, $payment );
401
		EE_Registry::instance()->load_helper( 'MSG_Template' );
402
		$message_type = EEH_MSG_Template::convert_payment_status_to_message_type( $payment->STS_ID() );
403
		//if payment amount is less than 0 then switch to payment_refund message type.
404
		$message_type = $payment->amount() < 0 ? 'payment_refund' : $message_type;
405
		self::$_MSG_PROCESSOR->generate_for_all_active_messengers( $message_type, $data );
406
	}
407
408
409
410
	/**
411
	 * @param EE_Transaction $transaction
412
	 */
413
	public static function cancelled_registration( EE_Transaction $transaction ) {
414
		self::_load_controller();
415
		$data = array( $transaction, null );
416
		self::$_MSG_PROCESSOR->generate_for_all_active_messengers( 'cancelled_registration', $data );
417
	}
418
419
420
421
	/**
422
	 * Trigger for Registration messages
423
	 * Note that what registration message type is sent depends on what the reg status is for the registrations on the incoming transaction.
424
	 *
425
	 * @param EE_Registration $registration
426
	 * @param array $extra_details
427
	 * @return void
428
	 */
429
	public static function maybe_registration( EE_Registration $registration, $extra_details = array() ) {
430
431
		if ( ! self::_verify_registration_notification_send( $registration, $extra_details ) ) {
432
			//no messages please
433
			return;
434
		}
435
436
437
		//get all registrations so we make sure we send messages for the right status.
438
		$all_registrations = $registration->transaction()->registrations();
439
440
		//cached array of statuses so we only trigger messages once per status.
441
		$statuses_sent = array();
442
		self::_load_controller();
443
		$mtgs = array();
444
445
		//loop through registrations and trigger messages once per status.
446
		foreach ( $all_registrations as $reg ) {
447
448
			//already triggered?
449
			if ( in_array( $reg->status_ID(), $statuses_sent ) ) {
0 ignored issues
show
Documentation Bug introduced by
The method status_ID does not exist on object<EE_Base_Class>? Since you implemented __call, maybe consider adding a @method annotation.

If you implement __call and you know which methods are available, you can improve IDE auto-completion and static analysis by adding a @method annotation to the class.

This is often the case, when __call is implemented by a parent class and only the child class knows which methods exist:

class ParentClass {
    private $data = array();

    public function __call($method, array $args) {
        if (0 === strpos($method, 'get')) {
            return $this->data[strtolower(substr($method, 3))];
        }

        throw new \LogicException(sprintf('Unsupported method: %s', $method));
    }
}

/**
 * If this class knows which fields exist, you can specify the methods here:
 *
 * @method string getName()
 */
class SomeClass extends ParentClass { }
Loading history...
450
				continue;
451
			}
452
453
			$message_type = EEH_MSG_Template::convert_reg_status_to_message_type( $reg->status_ID() );
0 ignored issues
show
Documentation Bug introduced by
The method status_ID does not exist on object<EE_Base_Class>? Since you implemented __call, maybe consider adding a @method annotation.

If you implement __call and you know which methods are available, you can improve IDE auto-completion and static analysis by adding a @method annotation to the class.

This is often the case, when __call is implemented by a parent class and only the child class knows which methods exist:

class ParentClass {
    private $data = array();

    public function __call($method, array $args) {
        if (0 === strpos($method, 'get')) {
            return $this->data[strtolower(substr($method, 3))];
        }

        throw new \LogicException(sprintf('Unsupported method: %s', $method));
    }
}

/**
 * If this class knows which fields exist, you can specify the methods here:
 *
 * @method string getName()
 */
class SomeClass extends ParentClass { }
Loading history...
454
			$mtgs = $mtgs + self::$_MSG_PROCESSOR->setup_mtgs_for_all_active_messengers( $message_type, array( $registration->transaction(), null, $reg->status_ID() ) );
0 ignored issues
show
Documentation Bug introduced by
The method status_ID does not exist on object<EE_Base_Class>? Since you implemented __call, maybe consider adding a @method annotation.

If you implement __call and you know which methods are available, you can improve IDE auto-completion and static analysis by adding a @method annotation to the class.

This is often the case, when __call is implemented by a parent class and only the child class knows which methods exist:

class ParentClass {
    private $data = array();

    public function __call($method, array $args) {
        if (0 === strpos($method, 'get')) {
            return $this->data[strtolower(substr($method, 3))];
        }

        throw new \LogicException(sprintf('Unsupported method: %s', $method));
    }
}

/**
 * If this class knows which fields exist, you can specify the methods here:
 *
 * @method string getName()
 */
class SomeClass extends ParentClass { }
Loading history...
455
			$statuses_sent[] = $reg->status_ID();
0 ignored issues
show
Documentation Bug introduced by
The method status_ID does not exist on object<EE_Base_Class>? Since you implemented __call, maybe consider adding a @method annotation.

If you implement __call and you know which methods are available, you can improve IDE auto-completion and static analysis by adding a @method annotation to the class.

This is often the case, when __call is implemented by a parent class and only the child class knows which methods exist:

class ParentClass {
    private $data = array();

    public function __call($method, array $args) {
        if (0 === strpos($method, 'get')) {
            return $this->data[strtolower(substr($method, 3))];
        }

        throw new \LogicException(sprintf('Unsupported method: %s', $method));
    }
}

/**
 * If this class knows which fields exist, you can specify the methods here:
 *
 * @method string getName()
 */
class SomeClass extends ParentClass { }
Loading history...
456
		}
457
458
		$mtgs = $mtgs + self::$_MSG_PROCESSOR->setup_mtgs_for_all_active_messengers( 'registration_summary', array( $registration->transaction(), null ) );
459
460
		//batch queue and initiate request
461
		self::$_MSG_PROCESSOR->batch_queue_for_generation_and_persist( $mtgs );
462
		self::$_MSG_PROCESSOR->get_queue()->initiate_request_by_priority();
463
	}
464
465
466
467
	/**
468
	 * This is a helper method used to very whether a registration notification should be sent or
469
	 * not.  Prevents duplicate notifications going out for registration context notifications.
470
	 *
471
	 * @param EE_Registration $registration  [description]
472
	 * @param array           $extra_details [description]
473
	 *
474
	 * @return bool          true = send away, false = nope halt the presses.
475
	 */
476
	protected static function _verify_registration_notification_send( EE_Registration $registration, $extra_details = array() ) {
477
		 //self::log(
478
		 //	__CLASS__, __FUNCTION__, __LINE__,
479
		 //	$registration->transaction(),
480
		 //	array( '$extra_details' => $extra_details )
481
		 //);
482
		// currently only using this to send messages for the primary registrant
483
		if ( ! $registration->is_primary_registrant() ) {
484
			return false;
485
		}
486
		// first we check if we're in admin and not doing front ajax
487
		if ( is_admin() && ! EE_FRONT_AJAX ) {
488
			//make sure appropriate admin params are set for sending messages
489
			if ( empty( $_REQUEST['txn_reg_status_change']['send_notifications'] ) || ! absint( $_REQUEST['txn_reg_status_change']['send_notifications'] ) ) {
490
				//no messages sent please.
491
				return false;
492
			}
493
		} else {
494
			// frontend request (either regular or via AJAX)
495
			// TXN is NOT finalized ?
496
			if ( ! isset( $extra_details['finalized'] ) || $extra_details['finalized'] === false ) {
497
				return false;
498
			}
499
			// return visit but nothing changed ???
500
			if (
501
				isset( $extra_details['revisit'], $extra_details['status_updates'] ) &&
502
				$extra_details['revisit'] && ! $extra_details['status_updates']
503
			) {
504
				return false;
505
			}
506
			// NOT sending messages && reg status is something other than "Not-Approved"
507
			if (
508
				! apply_filters( 'FHEE__EED_Messages___maybe_registration__deliver_notifications', false ) &&
509
				$registration->status_ID() !== EEM_Registration::status_id_not_approved
510
			) {
511
				return false;
512
			}
513
		}
514
		// release the kraken
515
		return true;
516
	}
517
518
519
520
	/**
521
	 * Simply returns an array indexed by Registration Status ID and the related message_type name associated with that status id.
522
	 *
523
	 * @deprecated 4.9.0  Use EEH_MSG_Template::reg_status_to_message_type_array()
524
	 *                    or EEH_MSG_Template::convert_reg_status_to_message_type
525
	 *
526
	 * @param string $reg_status
527
	 *
528
	 * @return array
529
	 */
530
	protected static function _get_reg_status_array( $reg_status = '' ) {
531
		EE_Registry::instance()->load_helper( 'MSG_Template' );
532
		return EEH_MSG_Template::convert_reg_status_to_message_type( $reg_status )
533
			? EEH_MSG_Template::convert_reg_status_to_message_type( $reg_status )
534
			: EEH_MSG_Template::reg_status_to_message_type_array();
535
	}
536
537
538
539
	/**
540
	 * Simply returns the payment message type for the given payment status.
541
	 *
542
	 * @deprecated 4.9.0 Use EEH_MSG_Template::payment_status_to_message_type_array
543
	 *                   or EEH_MSG_Template::convert_payment_status_to_message_type
544
	 *
545
	 * @param string  $payment_status The payment status being matched.
546
	 *
547
	 * @return string|bool The payment message type slug matching the status or false if no match.
548
	 */
549
	protected static function _get_payment_message_type( $payment_status ) {
550
		EE_Registry::instance()->load_helper( 'MSG_Template' );
551
		return EEH_MSG_Template::convert_payment_status_to_message_type( $payment_status )
552
			? EEH_MSG_Template::convert_payment_status_to_message_type( $payment_status )
553
			: false;
554
	}
555
556
557
558
559
	/**
560
	 * Message triggers for a resending already sent message(s) (via EE_Message list table)
561
	 *
562
	 * @access public
563
	 * @param array $req_data This is the $_POST & $_GET data sent from EE_Admin Pages
564
	 * @return bool          success/fail
565
	 */
566
	public static function process_resend( $req_data ) {
567
		self::_load_controller();
568
569
		//if $msgID in this request then skip to the new resend_message
570
		if ( EE_Registry::instance()->REQ->get( 'MSG_ID' ) ) {
571
			return self::resend_message();
572
		}
573
574
		//make sure any incoming request data is set on the REQ so that it gets picked up later.
575
		$req_data = (array) $req_data;
576
		foreach( $req_data as $request_key => $request_value ) {
577
			EE_Registry::instance()->REQ->set( $request_key, $request_value );
578
		}
579
580
		if ( ! $messages_to_send = self::$_MSG_PROCESSOR->setup_messages_to_generate_from_registration_ids_in_request() ) {
581
			return false;
582
		}
583
584
		try {
585
			self::$_MSG_PROCESSOR->batch_queue_for_generation_and_persist( $messages_to_send );
586
			self::$_MSG_PROCESSOR->get_queue()->initiate_request_by_priority();
587
		} catch( EE_Error $e ) {
588
			EE_Error::add_error( $e->getMessage(), __FILE__, __FUNCTION__, __LINE__ );
589
			return false;
590
		}
591
		EE_Error::add_success(
592
			__( 'Messages have been successfully queued for generation and sending.', 'event_espresso' )
593
		);
594
		return true; //everything got queued.
595
	}
596
597
598
	/**
599
	 * Message triggers for a resending already sent message(s) (via EE_Message list table)
600
	 * @return bool
601
	 */
602
	public static function resend_message() {
603
		self::_load_controller();
604
605
		$msgID = EE_Registry::instance()->REQ->get( 'MSG_ID' );
606
		if ( ! $msgID ) {
607
			EE_Error::add_error( __( 'Something went wrong because there is no "MSG_ID" value in the request', 'event_espresso' ), __FILE__, __FUNCTION__, __LINE__ );
608
			return false;
609
		}
610
611
		self::$_MSG_PROCESSOR->setup_messages_from_ids_and_send( (array) $msgID );
612
613
		//setup success message.
614
		$count_ready_for_resend = self::$_MSG_PROCESSOR->get_queue()->count_STS_in_queue( EEM_Message::status_resend );
615
		EE_Error::add_success( sprintf(
616
			_n(
617
				'There was %d message queued for resending.',
618
				'There were %d messages queued for resending.',
619
				$count_ready_for_resend,
620
				'event_espresso'
621
			),
622
			$count_ready_for_resend
623
		) );
624
		return true;
625
	}
626
627
628
629
630
631
	/**
632
	 * Message triggers for manual payment applied by admin
633
	 * @param  EE_Payment $payment EE_payment object
634
	 * @return bool              success/fail
635
	 */
636
	public static function process_admin_payment( EE_Payment $payment ) {
637
		EE_Registry::instance()->load_helper( 'MSG_Template' );
638
		//we need to get the transaction object
639
		$transaction = $payment->transaction();
640
		if ( $transaction instanceof EE_Transaction ) {
641
			$data = array( $transaction, $payment );
642
			$message_type = EEH_MSG_Template::convert_payment_status_to_message_type( $payment->STS_ID() );
643
644
			//if payment amount is less than 0 then switch to payment_refund message type.
645
			$message_type = $payment->amount() < 0 ? 'payment_refund' : $message_type;
646
647
			//if payment_refund is selected, but the status is NOT accepted.  Then change message type to false so NO message notification goes out.
648
			$message_type = $message_type == 'payment_refund' && $payment->STS_ID() != EEM_Payment::status_id_approved ? false : $message_type;
649
650
			self::_load_controller();
651
652
			self::$_MSG_PROCESSOR->generate_for_all_active_messengers( $message_type, $data );
653
654
			//get count of queued for generation
655
			$count_to_generate = self::$_MSG_PROCESSOR->get_queue()->count_STS_in_queue( EEM_Message::status_incomplete );
656
657
			if ( $count_to_generate > 0 ) {
658
				add_filter( 'FHEE__EE_Admin_Page___process_admin_payment_notification__success', '__return_true' );
659
				return true;
660
			} else {
661
				$count_failed = self::$_MSG_PROCESSOR->get_queue()->count_STS_in_queue( EEM_Message::instance()->stati_indicating_failed_sending() );
662
				EE_Error::add_error( sprintf(
663
					_n(
664
						'The payment notification generation failed.',
665
						'%d payment notifications failed being sent.',
666
						$count_failed,
667
						'event_espresso'
668
					),
669
					$count_failed
670
				), __FILE__, __FUNCTION__, __LINE__ );
671
				return false;
672
			}
673
		} else {
674
			EE_Error::add_error(
675
				'Unable to generate the payment notification because the given value for the transaction is invalid.',
676
				'event_espresso'
677
			);
678
			return false;
679
		}
680
	}
681
682
683
684
	/**
685
	 * Callback for AHEE__Extend_Registrations_Admin_Page___newsletter_selected_send_with_registrations trigger
686
	 *
687
	 * @since   4.3.0
688
	 *
689
	 * @param  EE_Registration[]  $registrations   an array of EE_Registration objects
690
	 * @param  int      	      $grp_id     a specific message template group id.
691
	 * @return void
692
	 */
693
	public static function send_newsletter_message( $registrations, $grp_id ) {
694
		//make sure mtp is id and set it in the EE_Request Handler later messages setup.
695
		EE_Registry::instance()->REQ->set( 'GRP_ID', (int) $grp_id );
696
		self::_load_controller();
697
		self::$_MSG_PROCESSOR->generate_for_all_active_messengers( 'newsletter', $registrations );
698
	}
699
700
701
	/**
702
	 * Callback for FHEE__EE_Registration__invoice_url__invoice_url or FHEE__EE_Registration__receipt_url__receipt_url
703
	 *
704
	 * @since   4.3.0
705
	 *
706
	 * @param 	string 	$registration_message_trigger_url
707
	 * @param 	EE_Registration $registration
708
	 * @param string 	$messenger
709
	 * @param string 	$message_type
710
	 * @return 	string
711
	 */
712
	public static function registration_message_trigger_url( $registration_message_trigger_url, EE_Registration $registration, $messenger = 'html', $message_type = 'invoice' ) {
713
		// whitelist $messenger
714
		switch ( $messenger ) {
715
			case 'pdf' :
716
				$sending_messenger = 'pdf';
717
				$generating_messenger = 'html';
718
				break;
719
			case 'html' :
720
			default :
721
				$sending_messenger = 'html';
722
				$generating_messenger = 'html';
723
				break;
724
		}
725
		// whitelist $message_type
726
		switch ( $message_type ) {
727
			case 'receipt' :
728
				$message_type = 'receipt';
729
				break;
730
			case 'invoice' :
731
			default :
732
				$message_type = 'invoice';
733
				break;
734
		}
735
		// verify that both the messenger AND the message type are active
736
		if ( EEH_MSG_Template::is_messenger_active( $sending_messenger ) && EEH_MSG_Template::is_mt_active( $message_type ) ) {
737
			//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?)
738
			$template_query_params = array(
739
				'MTP_is_active' => true,
740
				'MTP_messenger' => $generating_messenger,
741
				'MTP_message_type' => $message_type,
742
				'Event.EVT_ID' => $registration->event_ID()
743
			);
744
			//get the message template group.
745
			$msg_template_group = EEM_Message_Template_Group::instance()->get_one( array( $template_query_params ) );
746
			//if we don't have an EE_Message_Template_Group then return
747
			if ( ! $msg_template_group instanceof EE_Message_Template_Group ) {
748
				// remove EVT_ID from query params so that global templates get picked up
749
				unset( $template_query_params['Event.EVT_ID'] );
750
				//get global template as the fallback
751
				$msg_template_group = EEM_Message_Template_Group::instance()->get_one( array( $template_query_params ) );
752
			}
753
			//if we don't have an EE_Message_Template_Group then return
754
			if ( ! $msg_template_group instanceof EE_Message_Template_Group ) {
755
				return '';
756
			}
757
			// generate the URL
758
			$registration_message_trigger_url = EEH_MSG_Template::generate_url_trigger(
759
				$sending_messenger,
760
				$generating_messenger,
761
				'purchaser',
762
				$message_type,
763
				$registration,
764
				$msg_template_group->ID(),
765
				$registration->transaction_ID()
766
			);
767
768
		}
769
		return $registration_message_trigger_url;
770
	}
771
772
773
774
775
	/**
776
	 * Use to generate and return a message preview!
777
	 * @param  string $type    This should correspond with a valid message type
778
	 * @param  string $context This should correspond with a valid context for the message type
779
	 * @param  string $messenger This should correspond with a valid messenger.
780
	 * @param bool 	  $send true we will do a test send using the messenger delivery, false we just do a regular preview
781
	 * @return string          The body of the message.
782
	 */
783
	public static function preview_message( $type, $context, $messenger, $send = false ) {
0 ignored issues
show
Unused Code introduced by
The parameter $send is not used and could be removed.

This check looks from parameters that have been defined for a function or method, but which are not used in the method body.

Loading history...
784
		self::_load_controller();
785
		$mtg = new EE_Message_To_Generate(
786
			$messenger,
787
			$type,
788
			array(),
789
			$context,
790
			true
791
		);
792
		$generated_preview_queue = self::$_MSG_PROCESSOR->generate_for_preview( $mtg );
793
		if ( $generated_preview_queue instanceof EE_Messages_Queue ) {
794
			return $generated_preview_queue->get_queue()->current()->content();
795
		} else {
796
			return $generated_preview_queue;
797
		}
798
	}
799
800
801
802
803
	/**
804
	 * This is a method that allows for sending a message using a messenger matching the string given and the provided
805
	 * EE_Message_Queue object.  The EE_Message_Queue object is used to create a single aggregate EE_Message via the content
806
	 * found in the EE_Message objects in the queue.
807
	 *
808
	 * @since 4.9.0
809
	 *
810
	 * @param string               $messenger a string matching a valid active messenger in the system
811
	 * @param string $message_type Although it seems contrary to the name of the method, a message type name is
812
	 *                             still required to send along the message type to the messenger because this is used
813
	 *                             for determining what specific variations might be loaded for the generated message.
814
	 * @param EE_Messages_Queue     $queue
815
	 * @param string                $custom_subject   Can be used to set what the custom subject string will be on the aggregate
816
	 *                                                EE_Message object.
817
	 *
818
	 * @return bool          success or fail.
819
	 */
820
	public static function send_message_with_messenger_only( $messenger, $message_type, EE_Messages_Queue $queue, $custom_subject = '' ) {
821
		self::_load_controller();
822
		/** @type EE_Message_To_Generate_From_Queue $message_to_generate */
823
		$message_to_generate = EE_Registry::instance()->load_lib(
824
			'Message_To_Generate_From_Queue',
825
			array(
826
				$messenger,
827
				$message_type,
828
				$queue,
829
				$custom_subject,
830
			)
831
		);
832
		return self::$_MSG_PROCESSOR->queue_for_sending( $message_to_generate );
833
	}
834
835
836
837
838
	/**
839
	 * Generates Messages immediately for EE_Message IDs (but only for the correct status for generation)
840
	 *
841
	 * @since 4.9.0
842
	 * @param array     $message_ids An array of message ids
843
	 * @return bool | EE_Messages_Queue     false if nothing was generated, EE_Messages_Queue containing generated messages.
844
	 */
845
	public static function generate_now( $message_ids ) {
846
		self::_load_controller();
847
		$messages = EEM_Message::instance()->get_all(
848
			array(
849
				0 => array(
850
					'MSG_ID' => array( 'IN', $message_ids ),
851
					'STS_ID' => EEM_Message::status_incomplete,
852
				)
853
			)
854
		);
855
856
		$generated_queue = self::$_MSG_PROCESSOR->batch_generate_from_queue( $messages );
0 ignored issues
show
Documentation introduced by
$messages is of type array<integer,object<EE_Base_Class>>, but the function expects a array<integer,object<EE_Message>>.

It seems like the type of the argument is not accepted by the function/method which you are calling.

In some cases, in particular if PHP’s automatic type-juggling kicks in this might be fine. In other cases, however this might be a bug.

We suggest to add an explicit type cast like in the following example:

function acceptsInteger($int) { }

$x = '123'; // string "123"

// Instead of
acceptsInteger($x);

// we recommend to use
acceptsInteger((integer) $x);
Loading history...
857
858
		if ( ! $generated_queue instanceof EE_Messages_Queue ) {
859
			EE_Error::add_error(
860
				__( 'The messages were not generated.  This is usually because there is already a batch being generated on a separate request.  You can wait a minute or two and try again.', 'event_espresso' ),
861
				__FILE__, __FUNCTION__, __LINE__
862
			);
863
		}
864
		return $generated_queue;
865
	}
866
867
868
869
870
	/**
871
	 * Sends messages immediately for the incoming message_ids that have the status of EEM_Message::status_resend or,
872
	 * EEM_Message::status_idle
873
	 *
874
	 * @since 4.9.0
875
	 * @param $message_ids
876
	 *
877
	 * @return bool | EE_Messages_Queue  false if no messages sent.
878
	 */
879
	public static function send_now( $message_ids ) {
880
		self::_load_controller();
881
		$messages = EEM_Message::instance()->get_all(
882
			array(
883
				0 => array(
884
					'MSG_ID' => array( 'IN', $message_ids ),
885
					'STS_ID' => array( 'IN', array( EEM_Message::status_idle, EEM_Message::status_resend, EEM_Message::status_retry ) )
886
				)
887
			)
888
		);
889
890
		$sent_queue = self::$_MSG_PROCESSOR->batch_send_from_queue( $messages );
0 ignored issues
show
Documentation introduced by
$messages is of type array<integer,object<EE_Base_Class>>, but the function expects a array<integer,object<EE_Message>>.

It seems like the type of the argument is not accepted by the function/method which you are calling.

In some cases, in particular if PHP’s automatic type-juggling kicks in this might be fine. In other cases, however this might be a bug.

We suggest to add an explicit type cast like in the following example:

function acceptsInteger($int) { }

$x = '123'; // string "123"

// Instead of
acceptsInteger($x);

// we recommend to use
acceptsInteger((integer) $x);
Loading history...
891
892
		if ( ! $sent_queue instanceof EE_Messages_Queue ) {
893
			EE_Error::add_error(
894
				__( 'The messages were not sent.  This is usually because there is already a batch being sent on a separate request.  You can wait a minute or two and try again.', 'event_espresso' ),
895
				__FILE__, __FUNCTION__, __LINE__
896
			);
897
		} else {
898
			//can count how many sent by using the messages in the queue
899
			$sent_count = $sent_queue->count_STS_in_queue( EEM_Message::instance()->stati_indicating_sent() );
900 View Code Duplication
			if ( $sent_count > 0 ) {
901
				EE_Error::add_success(
902
					sprintf(
903
						_n(
904
							'There was %d message successfully sent.',
905
							'There were %d messages successfully sent.',
906
							$sent_count,
907
							'event_espresso'
908
						),
909
						$sent_count
910
					)
911
				);
912
			} else {
913
				EE_Error::overwrite_errors();
914
				EE_Error::add_error(
915
					__( '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.
916
					If there was an error, you can look at the messages in the message activity list table for any error messages.', 'event_espresso' ),
917
					__FILE__, __FUNCTION__, __LINE__
918
				);
919
			}
920
		}
921
		return $sent_queue;
922
	}
923
924
925
926
927
928
	/**
929
	 * This will queue the incoming message ids for resending.
930
	 * Note, only message_ids corresponding to messages with the status of EEM_Message::sent will be queued.
931
	 *
932
	 * @since 4.9.0
933
	 * @param array $message_ids  An array of EE_Message IDs
934
	 *
935
	 * @return bool  true means messages were successfully queued for resending, false means none were queued for resending.
936
	 */
937
	public static function queue_for_resending( $message_ids ) {
938
		self::_load_controller();
939
		self::$_MSG_PROCESSOR->setup_messages_from_ids_and_send( $message_ids );
940
941
		//get queue and count
942
		$queue_count = self::$_MSG_PROCESSOR->get_queue()->count_STS_in_queue( EEM_Message::status_resend );
943 View Code Duplication
		if ( $queue_count > 0 ) {
944
			EE_Error::add_success(
945
				sprintf(
946
					_n(
947
						'%d message successfully queued for resending.',
948
				        '%d messages successfully queued for resending.',
949
				        $queue_count,
950
				        'event_espresso'
951
				    ),
952
				    $queue_count
953
				)
954
			);
955
		} else {
956
			EE_Error::add_error(
957
				__( '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.', 'event_espresso' ),
958
				__FILE__, __FUNCTION__, __LINE__
959
			);
960
		}
961
		return (bool) $queue_count;
962
	}
963
964
965
966
967
968
969
	/**
970
	 * debug
971
	 *
972
	 * @param string $class
973
	 * @param string $func
974
	 * @param string $line
975
	 * @param \EE_Transaction $transaction
976
	 * @param array $info
977
	 * @param bool $display_request
978
	 */
979 View Code Duplication
	protected static function log( $class = '', $func = '', $line = '', EE_Transaction $transaction, $info = array(), $display_request = false ) {
0 ignored issues
show
Duplication introduced by
This method seems to be duplicated in your project.

Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation.

You can also find more detailed suggestions in the “Code” section of your repository.

Loading history...
980
		if ( WP_DEBUG && false ) {
981
			if ( $transaction instanceof EE_Transaction ) {
982
				// don't serialize objects
983
				$info = EEH_Debug_Tools::strip_objects( $info );
984
				$info['TXN_status'] = $transaction->status_ID();
985
				$info['TXN_reg_steps'] = $transaction->reg_steps();
986
				if ( $transaction->ID() ) {
987
					$index = 'EE_Transaction: ' . $transaction->ID();
988
					EEH_Debug_Tools::log( $class, $func, $line, $info, $display_request, $index );
989
				}
990
			}
991
		}
992
993
	}
994
995
}
996
// End of file EED_Messages.module.php
997
// Location: /modules/messages/EED_Messages.module.php
998