|
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__ ); |
|
|
|
|
|
|
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 ) { |
|
|
|
|
|
|
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 ) { |
|
|
|
|
|
|
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 ) { |
|
|
|
|
|
|
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. |
|
|
|
|
|
|
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' ); |
|
|
|
|
|
|
374
|
|
|
self::$_MSG_PROCESSOR = EE_Registry::instance()->load_lib( 'Messages_Processor' ); |
|
|
|
|
|
|
375
|
|
|
self::$_message_resource_manager = EE_Registry::instance()->load_lib( 'Message_Resource_Manager' ); |
|
|
|
|
|
|
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 ) ) { |
|
|
|
|
|
|
450
|
|
|
continue; |
|
451
|
|
|
} |
|
452
|
|
|
|
|
453
|
|
|
$message_type = EEH_MSG_Template::convert_reg_status_to_message_type( $reg->status_ID() ); |
|
|
|
|
|
|
454
|
|
|
$mtgs = $mtgs + self::$_MSG_PROCESSOR->setup_mtgs_for_all_active_messengers( $message_type, array( $registration->transaction(), null, $reg->status_ID() ) ); |
|
|
|
|
|
|
455
|
|
|
$statuses_sent[] = $reg->status_ID(); |
|
|
|
|
|
|
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 ) { |
|
|
|
|
|
|
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 ); |
|
|
|
|
|
|
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 ); |
|
|
|
|
|
|
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 ) { |
|
|
|
|
|
|
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
|
|
|
|
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:
The
getFirstName()method in theSoncalls the wrong method in the parent class.