Completed
Branch BUG/improve-drs-option-help (8b9ba3)
by
unknown
18:20 queued 09:29
created
templates/reg_admin_details_side_meta_box_registrant.template.php 2 patches
Indentation   +12 added lines, -12 removed lines patch added patch discarded remove patch
@@ -35,13 +35,13 @@  discard block
 block discarded – undo
35 35
 
36 36
 <div class="contact-details-buttons">
37 37
     <?php
38
-    if ($att_check instanceof EE_Attendee
39
-        && EE_Registry::instance()->CAP->current_user_can(
40
-            'ee_edit_contact',
41
-            'view_or_edit_contact_button',
42
-            $att_check->ID()
43
-        )) :
44
-    ?>
38
+	if ($att_check instanceof EE_Attendee
39
+		&& EE_Registry::instance()->CAP->current_user_can(
40
+			'ee_edit_contact',
41
+			'view_or_edit_contact_button',
42
+			$att_check->ID()
43
+		)) :
44
+	?>
45 45
     <a class="button button-small" href="<?php echo $att_edit_link; ?>"
46 46
        title="<?php echo esc_attr($att_edit_label); ?>">
47 47
         <span class="ee-icon ee-icon-user-edit"></span><?php echo $att_edit_label; ?>
@@ -49,15 +49,15 @@  discard block
 block discarded – undo
49 49
     <?php if (! empty($create_link)) : ?>
50 50
         <a class="button button-small" href="<?php echo $create_link; ?>"
51 51
            title="<?php
52
-                   esc_attr_e(
53
-                       'This registration shares the contact details for the primary registration in this group.  If you\'d like this registration to have its own details, you can do so by clicking this button',
54
-                       'event_espresso'
55
-                   ); ?>">
52
+				   esc_attr_e(
53
+					   'This registration shares the contact details for the primary registration in this group.  If you\'d like this registration to have its own details, you can do so by clicking this button',
54
+					   'event_espresso'
55
+				   ); ?>">
56 56
             <span class="ee-icon ee-icon-user-add-new"></span><?php echo $create_label; ?>
57 57
         </a>
58 58
     <?php endif; ?>
59 59
 <div style="clear:both"></div>
60 60
 <?php
61
-    endif;
61
+	endif;
62 62
 ?>
63 63
 </div>
Please login to merge, or discard this patch.
Spacing   +3 added lines, -3 removed lines patch added patch discarded remove patch
@@ -2,7 +2,7 @@  discard block
 block discarded – undo
2 2
     <div class="clearfix">
3 3
         <span class="admin-side-mbox-label-spn lt-grey-txt float-left">
4 4
             <?php esc_html_e('Name', 'event_espresso'); ?>
5
-        </span><?php echo $fname . ' ' . $lname; ?>
5
+        </span><?php echo $fname.' '.$lname; ?>
6 6
     </div>
7 7
     <div class="clearfix">
8 8
         <span class="admin-side-mbox-label-spn lt-grey-txt float-left">
@@ -16,7 +16,7 @@  discard block
 block discarded – undo
16 16
         <span class="admin-side-mbox-label-spn lt-grey-txt float-left">
17 17
             <?php esc_html_e('Phone #', 'event_espresso'); ?>
18 18
         </span>
19
-        <?php if (! empty($phone)) : ?>
19
+        <?php if ( ! empty($phone)) : ?>
20 20
             <a href="tel:<?php echo $phone; ?>">
21 21
                 <?php echo $phone; ?>
22 22
             </a>
@@ -46,7 +46,7 @@  discard block
 block discarded – undo
46 46
        title="<?php echo esc_attr($att_edit_label); ?>">
47 47
         <span class="ee-icon ee-icon-user-edit"></span><?php echo $att_edit_label; ?>
48 48
     </a>
49
-    <?php if (! empty($create_link)) : ?>
49
+    <?php if ( ! empty($create_link)) : ?>
50 50
         <a class="button button-small" href="<?php echo $create_link; ?>"
51 51
            title="<?php
52 52
                    esc_attr_e(
Please login to merge, or discard this patch.
core/EE_Cron_Tasks.core.php 1 patch
Indentation   +592 added lines, -592 removed lines patch added patch discarded remove patch
@@ -15,596 +15,596 @@
 block discarded – undo
15 15
 class EE_Cron_Tasks extends EE_Base
16 16
 {
17 17
 
18
-    /**
19
-     * WordPress doesn't allow duplicate crons within 10 minutes of the original,
20
-     * so we'll set our retry time for just over 10 minutes to avoid that
21
-     */
22
-    const reschedule_timeout = 605;
23
-
24
-
25
-    /**
26
-     * @var EE_Cron_Tasks
27
-     */
28
-    private static $_instance;
29
-
30
-
31
-    /**
32
-     * @return EE_Cron_Tasks
33
-     * @throws ReflectionException
34
-     * @throws EE_Error
35
-     * @throws InvalidArgumentException
36
-     * @throws InvalidInterfaceException
37
-     * @throws InvalidDataTypeException
38
-     */
39
-    public static function instance()
40
-    {
41
-        if (! self::$_instance instanceof EE_Cron_Tasks) {
42
-            self::$_instance = new self();
43
-        }
44
-        return self::$_instance;
45
-    }
46
-
47
-
48
-    /**
49
-     * @access private
50
-     * @throws InvalidDataTypeException
51
-     * @throws InvalidInterfaceException
52
-     * @throws InvalidArgumentException
53
-     * @throws EE_Error
54
-     * @throws ReflectionException
55
-     */
56
-    private function __construct()
57
-    {
58
-        do_action('AHEE_log', __CLASS__, __FUNCTION__);
59
-        // verify that WP Cron is enabled
60
-        if (defined('DISABLE_WP_CRON')
61
-            && DISABLE_WP_CRON
62
-            && is_admin()
63
-            && ! get_option('ee_disabled_wp_cron_check')
64
-        ) {
65
-            /**
66
-             * This needs to be delayed until after the config is loaded because EE_Cron_Tasks is constructed before
67
-             * config is loaded.
68
-             * This is intentionally using a anonymous function so that its not easily de-registered.  Client code
69
-             * wanting to not have this functionality can just register its own action at a priority after this one to
70
-             * reverse any changes.
71
-             */
72
-            add_action(
73
-                'AHEE__EE_System__load_core_configuration__complete',
74
-                function () {
75
-                    EE_Registry::instance()->NET_CFG->core->do_messages_on_same_request = true;
76
-                    EE_Registry::instance()->NET_CFG->update_config(true, false);
77
-                    add_option('ee_disabled_wp_cron_check', 1, '', false);
78
-                }
79
-            );
80
-        }
81
-        // UPDATE TRANSACTION WITH PAYMENT
82
-        add_action(
83
-            'AHEE__EE_Cron_Tasks__update_transaction_with_payment_2',
84
-            array('EE_Cron_Tasks', 'setup_update_for_transaction_with_payment'),
85
-            10,
86
-            2
87
-        );
88
-        // ABANDONED / EXPIRED TRANSACTION CHECK
89
-        add_action(
90
-            'AHEE__EE_Cron_Tasks__expired_transaction_check',
91
-            array('EE_Cron_Tasks', 'expired_transaction_check'),
92
-            10,
93
-            1
94
-        );
95
-        // CLEAN OUT JUNK TRANSACTIONS AND RELATED DATA
96
-        add_action(
97
-            'AHEE__EE_Cron_Tasks__clean_up_junk_transactions',
98
-            array('EE_Cron_Tasks', 'clean_out_junk_transactions')
99
-        );
100
-        // logging
101
-        add_action(
102
-            'AHEE__EE_System__load_core_configuration__complete',
103
-            array('EE_Cron_Tasks', 'log_scheduled_ee_crons')
104
-        );
105
-        EE_Registry::instance()->load_lib('Messages_Scheduler');
106
-        // clean out old gateway logs
107
-        add_action(
108
-            'AHEE_EE_Cron_Tasks__clean_out_old_gateway_logs',
109
-            array('EE_Cron_Tasks', 'clean_out_old_gateway_logs')
110
-        );
111
-    }
112
-
113
-
114
-    /**
115
-     * @access protected
116
-     * @return void
117
-     */
118
-    public static function log_scheduled_ee_crons()
119
-    {
120
-        $ee_crons = array(
121
-            'AHEE__EE_Cron_Tasks__update_transaction_with_payment',
122
-            'AHEE__EE_Cron_Tasks__finalize_abandoned_transactions',
123
-            'AHEE__EE_Cron_Tasks__clean_up_junk_transactions',
124
-        );
125
-        $crons = (array) get_option('cron');
126
-        if (! is_array($crons)) {
127
-            return;
128
-        }
129
-        foreach ($crons as $timestamp => $cron) {
130
-            /** @var array[] $cron */
131
-            foreach ($ee_crons as $ee_cron) {
132
-                if (isset($cron[ $ee_cron ]) && is_array($cron[ $ee_cron ])) {
133
-                    do_action('AHEE_log', __CLASS__, __FUNCTION__, $ee_cron, 'scheduled EE cron');
134
-                    foreach ($cron[ $ee_cron ] as $ee_cron_details) {
135
-                        if (! empty($ee_cron_details['args'])) {
136
-                            do_action(
137
-                                'AHEE_log',
138
-                                __CLASS__,
139
-                                __FUNCTION__,
140
-                                print_r($ee_cron_details['args'], true),
141
-                                "{$ee_cron} args"
142
-                            );
143
-                        }
144
-                    }
145
-                }
146
-            }
147
-        }
148
-    }
149
-
150
-
151
-    /**
152
-     * reschedule_cron_for_transactions_if_maintenance_mode
153
-     * if Maintenance Mode is active, this will reschedule a cron to run again in 10 minutes
154
-     *
155
-     * @param string $cron_task
156
-     * @param array  $TXN_IDs
157
-     * @return bool
158
-     * @throws DomainException
159
-     */
160
-    public static function reschedule_cron_for_transactions_if_maintenance_mode($cron_task, array $TXN_IDs)
161
-    {
162
-        if (! method_exists('EE_Cron_Tasks', $cron_task)) {
163
-            throw new DomainException(
164
-                sprintf(
165
-                    __('"%1$s" is not valid method on EE_Cron_Tasks.', 'event_espresso'),
166
-                    $cron_task
167
-                )
168
-            );
169
-        }
170
-        // reschedule the cron if we can't hit the db right now
171
-        if (! EE_Maintenance_Mode::instance()->models_can_query()) {
172
-            foreach ($TXN_IDs as $TXN_ID => $additional_vars) {
173
-                // ensure $additional_vars is an array
174
-                $additional_vars = is_array($additional_vars) ? $additional_vars : array($additional_vars);
175
-                // reset cron job for the TXN
176
-                call_user_func_array(
177
-                    array('EE_Cron_Tasks', $cron_task),
178
-                    array_merge(
179
-                        array(
180
-                            time() + (10 * MINUTE_IN_SECONDS),
181
-                            $TXN_ID,
182
-                        ),
183
-                        $additional_vars
184
-                    )
185
-                );
186
-            }
187
-            return true;
188
-        }
189
-        return false;
190
-    }
191
-
192
-
193
-
194
-
195
-    /****************  UPDATE TRANSACTION WITH PAYMENT ****************/
196
-
197
-
198
-    /**
199
-     * array of TXN IDs and the payment
200
-     *
201
-     * @var array
202
-     */
203
-    protected static $_update_transactions_with_payment = array();
204
-
205
-
206
-    /**
207
-     * schedule_update_transaction_with_payment
208
-     * sets a wp_schedule_single_event() for updating any TXNs that may
209
-     * require updating due to recently received payments
210
-     *
211
-     * @param int $timestamp
212
-     * @param int $TXN_ID
213
-     * @param int $PAY_ID
214
-     */
215
-    public static function schedule_update_transaction_with_payment(
216
-        $timestamp,
217
-        $TXN_ID,
218
-        $PAY_ID
219
-    ) {
220
-        do_action('AHEE_log', __CLASS__, __FUNCTION__);
221
-        // validate $TXN_ID and $timestamp
222
-        $TXN_ID = absint($TXN_ID);
223
-        $timestamp = absint($timestamp);
224
-        if ($TXN_ID && $timestamp) {
225
-            wp_schedule_single_event(
226
-                $timestamp,
227
-                'AHEE__EE_Cron_Tasks__update_transaction_with_payment_2',
228
-                array($TXN_ID, $PAY_ID)
229
-            );
230
-        }
231
-    }
232
-
233
-
234
-    /**
235
-     * setup_update_for_transaction_with_payment
236
-     * this is the callback for the action hook:
237
-     * 'AHEE__EE_Cron_Tasks__update_transaction_with_payment'
238
-     * which is setup by EE_Cron_Tasks::schedule_update_transaction_with_payment().
239
-     * The passed TXN_ID and associated payment gets added to an array, and then
240
-     * the EE_Cron_Tasks::update_transaction_with_payment() function is hooked into
241
-     * 'shutdown' which will actually handle the processing of any
242
-     * transactions requiring updating, because doing so now would be too early
243
-     * and the required resources may not be available
244
-     *
245
-     * @param int $TXN_ID
246
-     * @param int $PAY_ID
247
-     */
248
-    public static function setup_update_for_transaction_with_payment($TXN_ID = 0, $PAY_ID = 0)
249
-    {
250
-        do_action('AHEE_log', __CLASS__, __FUNCTION__, $TXN_ID, '$TXN_ID');
251
-        if (absint($TXN_ID)) {
252
-            self::$_update_transactions_with_payment[ $TXN_ID ] = $PAY_ID;
253
-            add_action(
254
-                'shutdown',
255
-                array('EE_Cron_Tasks', 'update_transaction_with_payment'),
256
-                5
257
-            );
258
-        }
259
-    }
260
-
261
-
262
-    /**
263
-     * update_transaction_with_payment
264
-     * loops through the self::$_abandoned_transactions array
265
-     * and attempts to finalize any TXNs that have not been completed
266
-     * but have had their sessions expired, most likely due to a user not
267
-     * returning from an off-site payment gateway
268
-     *
269
-     * @throws EE_Error
270
-     * @throws DomainException
271
-     * @throws InvalidDataTypeException
272
-     * @throws InvalidInterfaceException
273
-     * @throws InvalidArgumentException
274
-     * @throws ReflectionException
275
-     * @throws RuntimeException
276
-     */
277
-    public static function update_transaction_with_payment()
278
-    {
279
-        do_action('AHEE_log', __CLASS__, __FUNCTION__);
280
-        if (// are there any TXNs that need cleaning up ?
281
-            empty(self::$_update_transactions_with_payment)
282
-            // reschedule the cron if we can't hit the db right now
283
-            || EE_Cron_Tasks::reschedule_cron_for_transactions_if_maintenance_mode(
284
-                'schedule_update_transaction_with_payment',
285
-                self::$_update_transactions_with_payment
286
-            )
287
-        ) {
288
-            return;
289
-        }
290
-        /** @type EE_Payment_Processor $payment_processor */
291
-        $payment_processor = EE_Registry::instance()->load_core('Payment_Processor');
292
-        // set revisit flag for payment processor
293
-        $payment_processor->set_revisit();
294
-        // load EEM_Transaction
295
-        EE_Registry::instance()->load_model('Transaction');
296
-        foreach (self::$_update_transactions_with_payment as $TXN_ID => $PAY_ID) {
297
-            // reschedule the cron if we can't hit the db right now
298
-            if (! EE_Maintenance_Mode::instance()->models_can_query()) {
299
-                // reset cron job for updating the TXN
300
-                EE_Cron_Tasks::schedule_update_transaction_with_payment(
301
-                    time() + EE_Cron_Tasks::reschedule_timeout,
302
-                    $TXN_ID,
303
-                    $PAY_ID
304
-                );
305
-                continue;
306
-            }
307
-            $transaction = EEM_Transaction::instance()->get_one_by_ID($TXN_ID);
308
-            $payment = EEM_Payment::instance()->get_one_by_ID($PAY_ID);
309
-            // verify transaction
310
-            if ($transaction instanceof EE_Transaction && $payment instanceof EE_Payment) {
311
-                // now try to update the TXN with any payments
312
-                $payment_processor->update_txn_based_on_payment($transaction, $payment, true, true);
313
-            }
314
-            unset(self::$_update_transactions_with_payment[ $TXN_ID ]);
315
-        }
316
-    }
317
-
318
-
319
-
320
-    /************  END OF UPDATE TRANSACTION WITH PAYMENT  ************/
321
-
322
-
323
-    /*****************  EXPIRED TRANSACTION CHECK *****************/
324
-
325
-
326
-    /**
327
-     * array of TXN IDs
328
-     *
329
-     * @var array
330
-     */
331
-    protected static $_expired_transactions = array();
332
-
333
-
334
-    /**
335
-     * schedule_expired_transaction_check
336
-     * sets a wp_schedule_single_event() for following up on TXNs after their session has expired
337
-     *
338
-     * @param int $timestamp
339
-     * @param int $TXN_ID
340
-     */
341
-    public static function schedule_expired_transaction_check(
342
-        $timestamp,
343
-        $TXN_ID
344
-    ) {
345
-        // validate $TXN_ID and $timestamp
346
-        $TXN_ID = absint($TXN_ID);
347
-        $timestamp = absint($timestamp);
348
-        if ($TXN_ID && $timestamp) {
349
-            wp_schedule_single_event(
350
-                $timestamp,
351
-                'AHEE__EE_Cron_Tasks__expired_transaction_check',
352
-                array($TXN_ID)
353
-            );
354
-        }
355
-    }
356
-
357
-
358
-    /**
359
-     * expired_transaction_check
360
-     * this is the callback for the action hook:
361
-     * 'AHEE__EE_Cron_Tasks__transaction_session_expiration_check'
362
-     * which is utilized by wp_schedule_single_event()
363
-     * in \EED_Single_Page_Checkout::_initialize_transaction().
364
-     * The passed TXN_ID gets added to an array, and then the
365
-     * process_expired_transactions() function is hooked into
366
-     * 'AHEE__EE_System__core_loaded_and_ready' which will actually handle the
367
-     * processing of any failed transactions, because doing so now would be
368
-     * too early and the required resources may not be available
369
-     *
370
-     * @param int $TXN_ID
371
-     */
372
-    public static function expired_transaction_check($TXN_ID = 0)
373
-    {
374
-        if (absint($TXN_ID)) {
375
-            self::$_expired_transactions[ $TXN_ID ] = $TXN_ID;
376
-            add_action(
377
-                'shutdown',
378
-                array('EE_Cron_Tasks', 'process_expired_transactions'),
379
-                5
380
-            );
381
-        }
382
-    }
383
-
384
-
385
-    /**
386
-     * process_expired_transactions
387
-     * loops through the self::$_expired_transactions array and processes any failed TXNs
388
-     *
389
-     * @throws EE_Error
390
-     * @throws InvalidDataTypeException
391
-     * @throws InvalidInterfaceException
392
-     * @throws InvalidArgumentException
393
-     * @throws ReflectionException
394
-     * @throws DomainException
395
-     * @throws RuntimeException
396
-     */
397
-    public static function process_expired_transactions()
398
-    {
399
-        if (// are there any TXNs that need cleaning up ?
400
-            empty(self::$_expired_transactions)
401
-            // reschedule the cron if we can't hit the db right now
402
-            || EE_Cron_Tasks::reschedule_cron_for_transactions_if_maintenance_mode(
403
-                'schedule_expired_transaction_check',
404
-                self::$_expired_transactions
405
-            )
406
-        ) {
407
-            return;
408
-        }
409
-        /** @type EE_Transaction_Processor $transaction_processor */
410
-        $transaction_processor = EE_Registry::instance()->load_class('Transaction_Processor');
411
-        // set revisit flag for txn processor
412
-        $transaction_processor->set_revisit();
413
-        // load EEM_Transaction
414
-        EE_Registry::instance()->load_model('Transaction');
415
-        foreach (self::$_expired_transactions as $TXN_ID) {
416
-            $transaction = EEM_Transaction::instance()->get_one_by_ID($TXN_ID);
417
-            // verify transaction and whether it is failed or not
418
-            if ($transaction instanceof EE_Transaction) {
419
-                switch ($transaction->status_ID()) {
420
-                    // Completed TXNs
421
-                    case EEM_Transaction::complete_status_code:
422
-                        /** @type EE_Transaction_Processor $transaction_processor */
423
-                        $transaction_processor = EE_Registry::instance()->load_class('Transaction_Processor');
424
-                        $transaction_processor->update_transaction_and_registrations_after_checkout_or_payment(
425
-                            $transaction,
426
-                            $transaction->last_payment()
427
-                        );
428
-                        do_action(
429
-                            'AHEE__EE_Cron_Tasks__process_expired_transactions__completed_transaction',
430
-                            $transaction
431
-                        );
432
-                        break;
433
-                    // Overpaid TXNs
434
-                    case EEM_Transaction::overpaid_status_code:
435
-                        do_action(
436
-                            'AHEE__EE_Cron_Tasks__process_expired_transactions__overpaid_transaction',
437
-                            $transaction
438
-                        );
439
-                        break;
440
-                    // Incomplete TXNs
441
-                    case EEM_Transaction::incomplete_status_code:
442
-                        do_action(
443
-                            'AHEE__EE_Cron_Tasks__process_expired_transactions__incomplete_transaction',
444
-                            $transaction
445
-                        );
446
-                        // todo : move business logic into EE_Transaction_Processor for finalizing abandoned transactions
447
-                        break;
448
-                    // Abandoned TXNs
449
-                    case EEM_Transaction::abandoned_status_code:
450
-                        // run hook before updating transaction, primarily so
451
-                        // EED_Ticket_Sales_Monitor::process_abandoned_transactions() can release reserved tickets
452
-                        do_action(
453
-                            'AHEE__EE_Cron_Tasks__process_expired_transactions__abandoned_transaction',
454
-                            $transaction
455
-                        );
456
-                        // don't finalize the TXN if it has already been completed
457
-                        if ($transaction->all_reg_steps_completed() !== true) {
458
-                            /** @type EE_Payment_Processor $payment_processor */
459
-                            $payment_processor = EE_Registry::instance()->load_core('Payment_Processor');
460
-                            // let's simulate an IPN here which will trigger any notifications that need to go out
461
-                            $payment_processor->update_txn_based_on_payment(
462
-                                $transaction,
463
-                                $transaction->last_payment(),
464
-                                true,
465
-                                true
466
-                            );
467
-                        }
468
-                        break;
469
-                    // Failed TXNs
470
-                    case EEM_Transaction::failed_status_code:
471
-                        do_action(
472
-                            'AHEE__EE_Cron_Tasks__process_expired_transactions__failed_transaction',
473
-                            $transaction
474
-                        );
475
-                        // todo :
476
-                        // perform garbage collection here and remove clean_out_junk_transactions()
477
-                        // $registrations = $transaction->registrations();
478
-                        // if (! empty($registrations)) {
479
-                        //     foreach ($registrations as $registration) {
480
-                        //         if ($registration instanceof EE_Registration) {
481
-                        //             $delete_registration = true;
482
-                        //             if ($registration->attendee() instanceof EE_Attendee) {
483
-                        //                 $delete_registration = false;
484
-                        //             }
485
-                        //             if ($delete_registration) {
486
-                        //                 $registration->delete_permanently();
487
-                        //                 $registration->delete_related_permanently();
488
-                        //             }
489
-                        //         }
490
-                        //     }
491
-                        // }
492
-                        break;
493
-                }
494
-            }
495
-            unset(self::$_expired_transactions[ $TXN_ID ]);
496
-        }
497
-    }
498
-
499
-
500
-
501
-    /*************  END OF EXPIRED TRANSACTION CHECK  *************/
502
-
503
-
504
-    /************* START CLEAN UP BOT TRANSACTIONS **********************/
505
-
506
-
507
-    /**
508
-     * callback for 'AHEE__EE_Cron_Tasks__clean_up_junk_transactions'
509
-     * which is setup during activation to run on an hourly cron
510
-     *
511
-     * @throws EE_Error
512
-     * @throws InvalidArgumentException
513
-     * @throws InvalidDataTypeException
514
-     * @throws InvalidInterfaceException
515
-     * @throws DomainException
516
-     */
517
-    public static function clean_out_junk_transactions()
518
-    {
519
-        if (EE_Maintenance_Mode::instance()->models_can_query()) {
520
-            EED_Ticket_Sales_Monitor::reset_reservation_counts();
521
-            EEM_Transaction::instance('')->delete_junk_transactions();
522
-            EEM_Registration::instance('')->delete_registrations_with_no_transaction();
523
-            EEM_Line_Item::instance('')->delete_line_items_with_no_transaction();
524
-        }
525
-    }
526
-
527
-
528
-    /**
529
-     * Deletes old gateway logs. After about a week we usually don't need them for debugging. But folks can filter that.
530
-     *
531
-     * @throws EE_Error
532
-     * @throws InvalidDataTypeException
533
-     * @throws InvalidInterfaceException
534
-     * @throws InvalidArgumentException
535
-     */
536
-    public static function clean_out_old_gateway_logs()
537
-    {
538
-        if (EE_Maintenance_Mode::instance()->models_can_query()) {
539
-            $reg_config = LoaderFactory::getLoader()->load('EE_Registration_Config');
540
-            $time_diff_for_comparison = apply_filters(
541
-                'FHEE__EE_Cron_Tasks__clean_out_old_gateway_logs__time_diff_for_comparison',
542
-                '-' . $reg_config->gateway_log_lifespan
543
-            );
544
-            EEM_Change_Log::instance()->delete_gateway_logs_older_than(new DateTime($time_diff_for_comparison));
545
-        }
546
-    }
547
-
548
-
549
-    /*****************  FINALIZE ABANDONED TRANSACTIONS *****************/
550
-
551
-
552
-    /**
553
-     * @var array
554
-     */
555
-    protected static $_abandoned_transactions = array();
556
-
557
-
558
-    /**
559
-     * @deprecated
560
-     * @param int $timestamp
561
-     * @param int $TXN_ID
562
-     */
563
-    public static function schedule_finalize_abandoned_transactions_check($timestamp, $TXN_ID)
564
-    {
565
-        EE_Cron_Tasks::schedule_expired_transaction_check($timestamp, $TXN_ID);
566
-    }
567
-
568
-
569
-    /**
570
-     * @deprecated
571
-     * @param int $TXN_ID
572
-     */
573
-    public static function check_for_abandoned_transactions($TXN_ID = 0)
574
-    {
575
-        EE_Cron_Tasks::expired_transaction_check($TXN_ID);
576
-    }
577
-
578
-
579
-    /**
580
-     * @deprecated
581
-     * @throws EE_Error
582
-     * @throws DomainException
583
-     * @throws InvalidDataTypeException
584
-     * @throws InvalidInterfaceException
585
-     * @throws InvalidArgumentException
586
-     * @throws ReflectionException
587
-     * @throws RuntimeException
588
-     */
589
-    public static function finalize_abandoned_transactions()
590
-    {
591
-        do_action('AHEE_log', __CLASS__, __FUNCTION__);
592
-        if (// are there any TXNs that need cleaning up ?
593
-            empty(self::$_abandoned_transactions)
594
-            // reschedule the cron if we can't hit the db right now
595
-            || EE_Cron_Tasks::reschedule_cron_for_transactions_if_maintenance_mode(
596
-                'schedule_expired_transaction_check',
597
-                self::$_abandoned_transactions
598
-            )
599
-        ) {
600
-            return;
601
-        }
602
-        // combine our arrays of transaction IDs
603
-        self::$_expired_transactions = self::$_abandoned_transactions + self::$_expired_transactions;
604
-        // and deal with abandoned transactions here now...
605
-        EE_Cron_Tasks::process_expired_transactions();
606
-    }
607
-
608
-
609
-    /*************  END OF FINALIZE ABANDONED TRANSACTIONS  *************/
18
+	/**
19
+	 * WordPress doesn't allow duplicate crons within 10 minutes of the original,
20
+	 * so we'll set our retry time for just over 10 minutes to avoid that
21
+	 */
22
+	const reschedule_timeout = 605;
23
+
24
+
25
+	/**
26
+	 * @var EE_Cron_Tasks
27
+	 */
28
+	private static $_instance;
29
+
30
+
31
+	/**
32
+	 * @return EE_Cron_Tasks
33
+	 * @throws ReflectionException
34
+	 * @throws EE_Error
35
+	 * @throws InvalidArgumentException
36
+	 * @throws InvalidInterfaceException
37
+	 * @throws InvalidDataTypeException
38
+	 */
39
+	public static function instance()
40
+	{
41
+		if (! self::$_instance instanceof EE_Cron_Tasks) {
42
+			self::$_instance = new self();
43
+		}
44
+		return self::$_instance;
45
+	}
46
+
47
+
48
+	/**
49
+	 * @access private
50
+	 * @throws InvalidDataTypeException
51
+	 * @throws InvalidInterfaceException
52
+	 * @throws InvalidArgumentException
53
+	 * @throws EE_Error
54
+	 * @throws ReflectionException
55
+	 */
56
+	private function __construct()
57
+	{
58
+		do_action('AHEE_log', __CLASS__, __FUNCTION__);
59
+		// verify that WP Cron is enabled
60
+		if (defined('DISABLE_WP_CRON')
61
+			&& DISABLE_WP_CRON
62
+			&& is_admin()
63
+			&& ! get_option('ee_disabled_wp_cron_check')
64
+		) {
65
+			/**
66
+			 * This needs to be delayed until after the config is loaded because EE_Cron_Tasks is constructed before
67
+			 * config is loaded.
68
+			 * This is intentionally using a anonymous function so that its not easily de-registered.  Client code
69
+			 * wanting to not have this functionality can just register its own action at a priority after this one to
70
+			 * reverse any changes.
71
+			 */
72
+			add_action(
73
+				'AHEE__EE_System__load_core_configuration__complete',
74
+				function () {
75
+					EE_Registry::instance()->NET_CFG->core->do_messages_on_same_request = true;
76
+					EE_Registry::instance()->NET_CFG->update_config(true, false);
77
+					add_option('ee_disabled_wp_cron_check', 1, '', false);
78
+				}
79
+			);
80
+		}
81
+		// UPDATE TRANSACTION WITH PAYMENT
82
+		add_action(
83
+			'AHEE__EE_Cron_Tasks__update_transaction_with_payment_2',
84
+			array('EE_Cron_Tasks', 'setup_update_for_transaction_with_payment'),
85
+			10,
86
+			2
87
+		);
88
+		// ABANDONED / EXPIRED TRANSACTION CHECK
89
+		add_action(
90
+			'AHEE__EE_Cron_Tasks__expired_transaction_check',
91
+			array('EE_Cron_Tasks', 'expired_transaction_check'),
92
+			10,
93
+			1
94
+		);
95
+		// CLEAN OUT JUNK TRANSACTIONS AND RELATED DATA
96
+		add_action(
97
+			'AHEE__EE_Cron_Tasks__clean_up_junk_transactions',
98
+			array('EE_Cron_Tasks', 'clean_out_junk_transactions')
99
+		);
100
+		// logging
101
+		add_action(
102
+			'AHEE__EE_System__load_core_configuration__complete',
103
+			array('EE_Cron_Tasks', 'log_scheduled_ee_crons')
104
+		);
105
+		EE_Registry::instance()->load_lib('Messages_Scheduler');
106
+		// clean out old gateway logs
107
+		add_action(
108
+			'AHEE_EE_Cron_Tasks__clean_out_old_gateway_logs',
109
+			array('EE_Cron_Tasks', 'clean_out_old_gateway_logs')
110
+		);
111
+	}
112
+
113
+
114
+	/**
115
+	 * @access protected
116
+	 * @return void
117
+	 */
118
+	public static function log_scheduled_ee_crons()
119
+	{
120
+		$ee_crons = array(
121
+			'AHEE__EE_Cron_Tasks__update_transaction_with_payment',
122
+			'AHEE__EE_Cron_Tasks__finalize_abandoned_transactions',
123
+			'AHEE__EE_Cron_Tasks__clean_up_junk_transactions',
124
+		);
125
+		$crons = (array) get_option('cron');
126
+		if (! is_array($crons)) {
127
+			return;
128
+		}
129
+		foreach ($crons as $timestamp => $cron) {
130
+			/** @var array[] $cron */
131
+			foreach ($ee_crons as $ee_cron) {
132
+				if (isset($cron[ $ee_cron ]) && is_array($cron[ $ee_cron ])) {
133
+					do_action('AHEE_log', __CLASS__, __FUNCTION__, $ee_cron, 'scheduled EE cron');
134
+					foreach ($cron[ $ee_cron ] as $ee_cron_details) {
135
+						if (! empty($ee_cron_details['args'])) {
136
+							do_action(
137
+								'AHEE_log',
138
+								__CLASS__,
139
+								__FUNCTION__,
140
+								print_r($ee_cron_details['args'], true),
141
+								"{$ee_cron} args"
142
+							);
143
+						}
144
+					}
145
+				}
146
+			}
147
+		}
148
+	}
149
+
150
+
151
+	/**
152
+	 * reschedule_cron_for_transactions_if_maintenance_mode
153
+	 * if Maintenance Mode is active, this will reschedule a cron to run again in 10 minutes
154
+	 *
155
+	 * @param string $cron_task
156
+	 * @param array  $TXN_IDs
157
+	 * @return bool
158
+	 * @throws DomainException
159
+	 */
160
+	public static function reschedule_cron_for_transactions_if_maintenance_mode($cron_task, array $TXN_IDs)
161
+	{
162
+		if (! method_exists('EE_Cron_Tasks', $cron_task)) {
163
+			throw new DomainException(
164
+				sprintf(
165
+					__('"%1$s" is not valid method on EE_Cron_Tasks.', 'event_espresso'),
166
+					$cron_task
167
+				)
168
+			);
169
+		}
170
+		// reschedule the cron if we can't hit the db right now
171
+		if (! EE_Maintenance_Mode::instance()->models_can_query()) {
172
+			foreach ($TXN_IDs as $TXN_ID => $additional_vars) {
173
+				// ensure $additional_vars is an array
174
+				$additional_vars = is_array($additional_vars) ? $additional_vars : array($additional_vars);
175
+				// reset cron job for the TXN
176
+				call_user_func_array(
177
+					array('EE_Cron_Tasks', $cron_task),
178
+					array_merge(
179
+						array(
180
+							time() + (10 * MINUTE_IN_SECONDS),
181
+							$TXN_ID,
182
+						),
183
+						$additional_vars
184
+					)
185
+				);
186
+			}
187
+			return true;
188
+		}
189
+		return false;
190
+	}
191
+
192
+
193
+
194
+
195
+	/****************  UPDATE TRANSACTION WITH PAYMENT ****************/
196
+
197
+
198
+	/**
199
+	 * array of TXN IDs and the payment
200
+	 *
201
+	 * @var array
202
+	 */
203
+	protected static $_update_transactions_with_payment = array();
204
+
205
+
206
+	/**
207
+	 * schedule_update_transaction_with_payment
208
+	 * sets a wp_schedule_single_event() for updating any TXNs that may
209
+	 * require updating due to recently received payments
210
+	 *
211
+	 * @param int $timestamp
212
+	 * @param int $TXN_ID
213
+	 * @param int $PAY_ID
214
+	 */
215
+	public static function schedule_update_transaction_with_payment(
216
+		$timestamp,
217
+		$TXN_ID,
218
+		$PAY_ID
219
+	) {
220
+		do_action('AHEE_log', __CLASS__, __FUNCTION__);
221
+		// validate $TXN_ID and $timestamp
222
+		$TXN_ID = absint($TXN_ID);
223
+		$timestamp = absint($timestamp);
224
+		if ($TXN_ID && $timestamp) {
225
+			wp_schedule_single_event(
226
+				$timestamp,
227
+				'AHEE__EE_Cron_Tasks__update_transaction_with_payment_2',
228
+				array($TXN_ID, $PAY_ID)
229
+			);
230
+		}
231
+	}
232
+
233
+
234
+	/**
235
+	 * setup_update_for_transaction_with_payment
236
+	 * this is the callback for the action hook:
237
+	 * 'AHEE__EE_Cron_Tasks__update_transaction_with_payment'
238
+	 * which is setup by EE_Cron_Tasks::schedule_update_transaction_with_payment().
239
+	 * The passed TXN_ID and associated payment gets added to an array, and then
240
+	 * the EE_Cron_Tasks::update_transaction_with_payment() function is hooked into
241
+	 * 'shutdown' which will actually handle the processing of any
242
+	 * transactions requiring updating, because doing so now would be too early
243
+	 * and the required resources may not be available
244
+	 *
245
+	 * @param int $TXN_ID
246
+	 * @param int $PAY_ID
247
+	 */
248
+	public static function setup_update_for_transaction_with_payment($TXN_ID = 0, $PAY_ID = 0)
249
+	{
250
+		do_action('AHEE_log', __CLASS__, __FUNCTION__, $TXN_ID, '$TXN_ID');
251
+		if (absint($TXN_ID)) {
252
+			self::$_update_transactions_with_payment[ $TXN_ID ] = $PAY_ID;
253
+			add_action(
254
+				'shutdown',
255
+				array('EE_Cron_Tasks', 'update_transaction_with_payment'),
256
+				5
257
+			);
258
+		}
259
+	}
260
+
261
+
262
+	/**
263
+	 * update_transaction_with_payment
264
+	 * loops through the self::$_abandoned_transactions array
265
+	 * and attempts to finalize any TXNs that have not been completed
266
+	 * but have had their sessions expired, most likely due to a user not
267
+	 * returning from an off-site payment gateway
268
+	 *
269
+	 * @throws EE_Error
270
+	 * @throws DomainException
271
+	 * @throws InvalidDataTypeException
272
+	 * @throws InvalidInterfaceException
273
+	 * @throws InvalidArgumentException
274
+	 * @throws ReflectionException
275
+	 * @throws RuntimeException
276
+	 */
277
+	public static function update_transaction_with_payment()
278
+	{
279
+		do_action('AHEE_log', __CLASS__, __FUNCTION__);
280
+		if (// are there any TXNs that need cleaning up ?
281
+			empty(self::$_update_transactions_with_payment)
282
+			// reschedule the cron if we can't hit the db right now
283
+			|| EE_Cron_Tasks::reschedule_cron_for_transactions_if_maintenance_mode(
284
+				'schedule_update_transaction_with_payment',
285
+				self::$_update_transactions_with_payment
286
+			)
287
+		) {
288
+			return;
289
+		}
290
+		/** @type EE_Payment_Processor $payment_processor */
291
+		$payment_processor = EE_Registry::instance()->load_core('Payment_Processor');
292
+		// set revisit flag for payment processor
293
+		$payment_processor->set_revisit();
294
+		// load EEM_Transaction
295
+		EE_Registry::instance()->load_model('Transaction');
296
+		foreach (self::$_update_transactions_with_payment as $TXN_ID => $PAY_ID) {
297
+			// reschedule the cron if we can't hit the db right now
298
+			if (! EE_Maintenance_Mode::instance()->models_can_query()) {
299
+				// reset cron job for updating the TXN
300
+				EE_Cron_Tasks::schedule_update_transaction_with_payment(
301
+					time() + EE_Cron_Tasks::reschedule_timeout,
302
+					$TXN_ID,
303
+					$PAY_ID
304
+				);
305
+				continue;
306
+			}
307
+			$transaction = EEM_Transaction::instance()->get_one_by_ID($TXN_ID);
308
+			$payment = EEM_Payment::instance()->get_one_by_ID($PAY_ID);
309
+			// verify transaction
310
+			if ($transaction instanceof EE_Transaction && $payment instanceof EE_Payment) {
311
+				// now try to update the TXN with any payments
312
+				$payment_processor->update_txn_based_on_payment($transaction, $payment, true, true);
313
+			}
314
+			unset(self::$_update_transactions_with_payment[ $TXN_ID ]);
315
+		}
316
+	}
317
+
318
+
319
+
320
+	/************  END OF UPDATE TRANSACTION WITH PAYMENT  ************/
321
+
322
+
323
+	/*****************  EXPIRED TRANSACTION CHECK *****************/
324
+
325
+
326
+	/**
327
+	 * array of TXN IDs
328
+	 *
329
+	 * @var array
330
+	 */
331
+	protected static $_expired_transactions = array();
332
+
333
+
334
+	/**
335
+	 * schedule_expired_transaction_check
336
+	 * sets a wp_schedule_single_event() for following up on TXNs after their session has expired
337
+	 *
338
+	 * @param int $timestamp
339
+	 * @param int $TXN_ID
340
+	 */
341
+	public static function schedule_expired_transaction_check(
342
+		$timestamp,
343
+		$TXN_ID
344
+	) {
345
+		// validate $TXN_ID and $timestamp
346
+		$TXN_ID = absint($TXN_ID);
347
+		$timestamp = absint($timestamp);
348
+		if ($TXN_ID && $timestamp) {
349
+			wp_schedule_single_event(
350
+				$timestamp,
351
+				'AHEE__EE_Cron_Tasks__expired_transaction_check',
352
+				array($TXN_ID)
353
+			);
354
+		}
355
+	}
356
+
357
+
358
+	/**
359
+	 * expired_transaction_check
360
+	 * this is the callback for the action hook:
361
+	 * 'AHEE__EE_Cron_Tasks__transaction_session_expiration_check'
362
+	 * which is utilized by wp_schedule_single_event()
363
+	 * in \EED_Single_Page_Checkout::_initialize_transaction().
364
+	 * The passed TXN_ID gets added to an array, and then the
365
+	 * process_expired_transactions() function is hooked into
366
+	 * 'AHEE__EE_System__core_loaded_and_ready' which will actually handle the
367
+	 * processing of any failed transactions, because doing so now would be
368
+	 * too early and the required resources may not be available
369
+	 *
370
+	 * @param int $TXN_ID
371
+	 */
372
+	public static function expired_transaction_check($TXN_ID = 0)
373
+	{
374
+		if (absint($TXN_ID)) {
375
+			self::$_expired_transactions[ $TXN_ID ] = $TXN_ID;
376
+			add_action(
377
+				'shutdown',
378
+				array('EE_Cron_Tasks', 'process_expired_transactions'),
379
+				5
380
+			);
381
+		}
382
+	}
383
+
384
+
385
+	/**
386
+	 * process_expired_transactions
387
+	 * loops through the self::$_expired_transactions array and processes any failed TXNs
388
+	 *
389
+	 * @throws EE_Error
390
+	 * @throws InvalidDataTypeException
391
+	 * @throws InvalidInterfaceException
392
+	 * @throws InvalidArgumentException
393
+	 * @throws ReflectionException
394
+	 * @throws DomainException
395
+	 * @throws RuntimeException
396
+	 */
397
+	public static function process_expired_transactions()
398
+	{
399
+		if (// are there any TXNs that need cleaning up ?
400
+			empty(self::$_expired_transactions)
401
+			// reschedule the cron if we can't hit the db right now
402
+			|| EE_Cron_Tasks::reschedule_cron_for_transactions_if_maintenance_mode(
403
+				'schedule_expired_transaction_check',
404
+				self::$_expired_transactions
405
+			)
406
+		) {
407
+			return;
408
+		}
409
+		/** @type EE_Transaction_Processor $transaction_processor */
410
+		$transaction_processor = EE_Registry::instance()->load_class('Transaction_Processor');
411
+		// set revisit flag for txn processor
412
+		$transaction_processor->set_revisit();
413
+		// load EEM_Transaction
414
+		EE_Registry::instance()->load_model('Transaction');
415
+		foreach (self::$_expired_transactions as $TXN_ID) {
416
+			$transaction = EEM_Transaction::instance()->get_one_by_ID($TXN_ID);
417
+			// verify transaction and whether it is failed or not
418
+			if ($transaction instanceof EE_Transaction) {
419
+				switch ($transaction->status_ID()) {
420
+					// Completed TXNs
421
+					case EEM_Transaction::complete_status_code:
422
+						/** @type EE_Transaction_Processor $transaction_processor */
423
+						$transaction_processor = EE_Registry::instance()->load_class('Transaction_Processor');
424
+						$transaction_processor->update_transaction_and_registrations_after_checkout_or_payment(
425
+							$transaction,
426
+							$transaction->last_payment()
427
+						);
428
+						do_action(
429
+							'AHEE__EE_Cron_Tasks__process_expired_transactions__completed_transaction',
430
+							$transaction
431
+						);
432
+						break;
433
+					// Overpaid TXNs
434
+					case EEM_Transaction::overpaid_status_code:
435
+						do_action(
436
+							'AHEE__EE_Cron_Tasks__process_expired_transactions__overpaid_transaction',
437
+							$transaction
438
+						);
439
+						break;
440
+					// Incomplete TXNs
441
+					case EEM_Transaction::incomplete_status_code:
442
+						do_action(
443
+							'AHEE__EE_Cron_Tasks__process_expired_transactions__incomplete_transaction',
444
+							$transaction
445
+						);
446
+						// todo : move business logic into EE_Transaction_Processor for finalizing abandoned transactions
447
+						break;
448
+					// Abandoned TXNs
449
+					case EEM_Transaction::abandoned_status_code:
450
+						// run hook before updating transaction, primarily so
451
+						// EED_Ticket_Sales_Monitor::process_abandoned_transactions() can release reserved tickets
452
+						do_action(
453
+							'AHEE__EE_Cron_Tasks__process_expired_transactions__abandoned_transaction',
454
+							$transaction
455
+						);
456
+						// don't finalize the TXN if it has already been completed
457
+						if ($transaction->all_reg_steps_completed() !== true) {
458
+							/** @type EE_Payment_Processor $payment_processor */
459
+							$payment_processor = EE_Registry::instance()->load_core('Payment_Processor');
460
+							// let's simulate an IPN here which will trigger any notifications that need to go out
461
+							$payment_processor->update_txn_based_on_payment(
462
+								$transaction,
463
+								$transaction->last_payment(),
464
+								true,
465
+								true
466
+							);
467
+						}
468
+						break;
469
+					// Failed TXNs
470
+					case EEM_Transaction::failed_status_code:
471
+						do_action(
472
+							'AHEE__EE_Cron_Tasks__process_expired_transactions__failed_transaction',
473
+							$transaction
474
+						);
475
+						// todo :
476
+						// perform garbage collection here and remove clean_out_junk_transactions()
477
+						// $registrations = $transaction->registrations();
478
+						// if (! empty($registrations)) {
479
+						//     foreach ($registrations as $registration) {
480
+						//         if ($registration instanceof EE_Registration) {
481
+						//             $delete_registration = true;
482
+						//             if ($registration->attendee() instanceof EE_Attendee) {
483
+						//                 $delete_registration = false;
484
+						//             }
485
+						//             if ($delete_registration) {
486
+						//                 $registration->delete_permanently();
487
+						//                 $registration->delete_related_permanently();
488
+						//             }
489
+						//         }
490
+						//     }
491
+						// }
492
+						break;
493
+				}
494
+			}
495
+			unset(self::$_expired_transactions[ $TXN_ID ]);
496
+		}
497
+	}
498
+
499
+
500
+
501
+	/*************  END OF EXPIRED TRANSACTION CHECK  *************/
502
+
503
+
504
+	/************* START CLEAN UP BOT TRANSACTIONS **********************/
505
+
506
+
507
+	/**
508
+	 * callback for 'AHEE__EE_Cron_Tasks__clean_up_junk_transactions'
509
+	 * which is setup during activation to run on an hourly cron
510
+	 *
511
+	 * @throws EE_Error
512
+	 * @throws InvalidArgumentException
513
+	 * @throws InvalidDataTypeException
514
+	 * @throws InvalidInterfaceException
515
+	 * @throws DomainException
516
+	 */
517
+	public static function clean_out_junk_transactions()
518
+	{
519
+		if (EE_Maintenance_Mode::instance()->models_can_query()) {
520
+			EED_Ticket_Sales_Monitor::reset_reservation_counts();
521
+			EEM_Transaction::instance('')->delete_junk_transactions();
522
+			EEM_Registration::instance('')->delete_registrations_with_no_transaction();
523
+			EEM_Line_Item::instance('')->delete_line_items_with_no_transaction();
524
+		}
525
+	}
526
+
527
+
528
+	/**
529
+	 * Deletes old gateway logs. After about a week we usually don't need them for debugging. But folks can filter that.
530
+	 *
531
+	 * @throws EE_Error
532
+	 * @throws InvalidDataTypeException
533
+	 * @throws InvalidInterfaceException
534
+	 * @throws InvalidArgumentException
535
+	 */
536
+	public static function clean_out_old_gateway_logs()
537
+	{
538
+		if (EE_Maintenance_Mode::instance()->models_can_query()) {
539
+			$reg_config = LoaderFactory::getLoader()->load('EE_Registration_Config');
540
+			$time_diff_for_comparison = apply_filters(
541
+				'FHEE__EE_Cron_Tasks__clean_out_old_gateway_logs__time_diff_for_comparison',
542
+				'-' . $reg_config->gateway_log_lifespan
543
+			);
544
+			EEM_Change_Log::instance()->delete_gateway_logs_older_than(new DateTime($time_diff_for_comparison));
545
+		}
546
+	}
547
+
548
+
549
+	/*****************  FINALIZE ABANDONED TRANSACTIONS *****************/
550
+
551
+
552
+	/**
553
+	 * @var array
554
+	 */
555
+	protected static $_abandoned_transactions = array();
556
+
557
+
558
+	/**
559
+	 * @deprecated
560
+	 * @param int $timestamp
561
+	 * @param int $TXN_ID
562
+	 */
563
+	public static function schedule_finalize_abandoned_transactions_check($timestamp, $TXN_ID)
564
+	{
565
+		EE_Cron_Tasks::schedule_expired_transaction_check($timestamp, $TXN_ID);
566
+	}
567
+
568
+
569
+	/**
570
+	 * @deprecated
571
+	 * @param int $TXN_ID
572
+	 */
573
+	public static function check_for_abandoned_transactions($TXN_ID = 0)
574
+	{
575
+		EE_Cron_Tasks::expired_transaction_check($TXN_ID);
576
+	}
577
+
578
+
579
+	/**
580
+	 * @deprecated
581
+	 * @throws EE_Error
582
+	 * @throws DomainException
583
+	 * @throws InvalidDataTypeException
584
+	 * @throws InvalidInterfaceException
585
+	 * @throws InvalidArgumentException
586
+	 * @throws ReflectionException
587
+	 * @throws RuntimeException
588
+	 */
589
+	public static function finalize_abandoned_transactions()
590
+	{
591
+		do_action('AHEE_log', __CLASS__, __FUNCTION__);
592
+		if (// are there any TXNs that need cleaning up ?
593
+			empty(self::$_abandoned_transactions)
594
+			// reschedule the cron if we can't hit the db right now
595
+			|| EE_Cron_Tasks::reschedule_cron_for_transactions_if_maintenance_mode(
596
+				'schedule_expired_transaction_check',
597
+				self::$_abandoned_transactions
598
+			)
599
+		) {
600
+			return;
601
+		}
602
+		// combine our arrays of transaction IDs
603
+		self::$_expired_transactions = self::$_abandoned_transactions + self::$_expired_transactions;
604
+		// and deal with abandoned transactions here now...
605
+		EE_Cron_Tasks::process_expired_transactions();
606
+	}
607
+
608
+
609
+	/*************  END OF FINALIZE ABANDONED TRANSACTIONS  *************/
610 610
 }
Please login to merge, or discard this patch.
core/domain/services/admin/ajax/ThankYouPageIpnMonitor.php 2 patches
Indentation   +219 added lines, -219 removed lines patch added patch discarded remove patch
@@ -22,239 +22,239 @@
 block discarded – undo
22 22
 class ThankYouPageIpnMonitor
23 23
 {
24 24
 
25
-    /**
26
-     * @var string $heartbeat
27
-     */
28
-    private $heartbeat;
25
+	/**
26
+	 * @var string $heartbeat
27
+	 */
28
+	private $heartbeat;
29 29
 
30
-    /**
31
-     * @var EED_Thank_You_Page $thank_you_page
32
-     */
33
-    private $thank_you_page;
30
+	/**
31
+	 * @var EED_Thank_You_Page $thank_you_page
32
+	 */
33
+	private $thank_you_page;
34 34
 
35
-    /**
36
-     * @var EE_Transaction $transaction
37
-     */
38
-    private $transaction;
35
+	/**
36
+	 * @var EE_Transaction $transaction
37
+	 */
38
+	private $transaction;
39 39
 
40 40
 
41
-    /**
42
-     * EventEditorHeartbeat constructor.
43
-     */
44
-    public function __construct()
45
-    {
46
-        $this->heartbeat = WordpressHeartbeat::RESPONSE_KEY_THANK_YOU_PAGE;
47
-        add_filter('heartbeat_received', array($this, 'heartbeatResponse'), 10, 3);
48
-        add_filter('heartbeat_nopriv_received', array($this, 'heartbeatResponse'), 10, 3);
49
-    }
41
+	/**
42
+	 * EventEditorHeartbeat constructor.
43
+	 */
44
+	public function __construct()
45
+	{
46
+		$this->heartbeat = WordpressHeartbeat::RESPONSE_KEY_THANK_YOU_PAGE;
47
+		add_filter('heartbeat_received', array($this, 'heartbeatResponse'), 10, 3);
48
+		add_filter('heartbeat_nopriv_received', array($this, 'heartbeatResponse'), 10, 3);
49
+	}
50 50
 
51 51
 
52
-    /**
53
-     * thank_you_page_IPN_monitor
54
-     * this basically just pulls the TXN based on the reg_url_link sent from the server,
55
-     * then checks that the TXN status is not failed, and that no other errors have been generated.
56
-     * it also calculates the IPN wait time since the Thank You page was first loaded
57
-     *
58
-     * @param array $response
59
-     * @param array $data
60
-     * @return array
61
-     * @throws EE_Error
62
-     * @throws InvalidArgumentException
63
-     * @throws InvalidDataTypeException
64
-     * @throws InvalidInterfaceException
65
-     * @throws ReflectionException
66
-     */
67
-    public function heartbeatResponse($response = array(), $data = array())
68
-    {
69
-        // does this heartbeat contain our data ?
70
-        if (! isset($data[ $this->heartbeat ])) {
71
-            return $response;
72
-        }
73
-        // check for reg_url_link in the incoming heartbeat data
74
-        if (! isset($data[ $this->heartbeat ]['e_reg_url_link'])) {
75
-            $response[ $this->heartbeat ] = array(
76
-                'errors' => ! empty($notices['errors'])
77
-                    ? $notices['errors']
78
-                    : __(
79
-                        'No transaction information could be retrieved because the registration URL link is missing or invalid.',
80
-                        'event_espresso'
81
-                    ),
82
-            );
83
-            return $response;
84
-        }
85
-        // kk heartbeat has our data
86
-        $response = $this->initializeThankYouPageAndTransaction($response, $data);
87
-        // if something went wrong...
88
-        if (isset($response[ $this->heartbeat ]['errors'])) {
89
-            return $response;
90
-        }
91
-        // grab transient of Transaction's status
92
-        $txn_status = isset($data[ $this->heartbeat ]['txn_status'])
93
-            ? $data[ $this->heartbeat ]['txn_status']
94
-            : null;
95
-        $response = $this->getTransactionDetails($txn_status, $response, $data);
96
-        // no payment data yet?
97
-        if (isset($response[ $this->heartbeat ]['still_waiting'])) {
98
-            return $response;
99
-        }
100
-        // TXN is happening so let's get the payments now
101
-        // if we've already gotten payments then the heartbeat data will contain the timestamp of the last time we checked
102
-        $since = isset($data[ $this->heartbeat ]['get_payments_since'])
103
-            ? $data[ $this->heartbeat ]['get_payments_since']
104
-            : 0;
105
-        return $this->paymentDetails($response, $since);
106
-    }
52
+	/**
53
+	 * thank_you_page_IPN_monitor
54
+	 * this basically just pulls the TXN based on the reg_url_link sent from the server,
55
+	 * then checks that the TXN status is not failed, and that no other errors have been generated.
56
+	 * it also calculates the IPN wait time since the Thank You page was first loaded
57
+	 *
58
+	 * @param array $response
59
+	 * @param array $data
60
+	 * @return array
61
+	 * @throws EE_Error
62
+	 * @throws InvalidArgumentException
63
+	 * @throws InvalidDataTypeException
64
+	 * @throws InvalidInterfaceException
65
+	 * @throws ReflectionException
66
+	 */
67
+	public function heartbeatResponse($response = array(), $data = array())
68
+	{
69
+		// does this heartbeat contain our data ?
70
+		if (! isset($data[ $this->heartbeat ])) {
71
+			return $response;
72
+		}
73
+		// check for reg_url_link in the incoming heartbeat data
74
+		if (! isset($data[ $this->heartbeat ]['e_reg_url_link'])) {
75
+			$response[ $this->heartbeat ] = array(
76
+				'errors' => ! empty($notices['errors'])
77
+					? $notices['errors']
78
+					: __(
79
+						'No transaction information could be retrieved because the registration URL link is missing or invalid.',
80
+						'event_espresso'
81
+					),
82
+			);
83
+			return $response;
84
+		}
85
+		// kk heartbeat has our data
86
+		$response = $this->initializeThankYouPageAndTransaction($response, $data);
87
+		// if something went wrong...
88
+		if (isset($response[ $this->heartbeat ]['errors'])) {
89
+			return $response;
90
+		}
91
+		// grab transient of Transaction's status
92
+		$txn_status = isset($data[ $this->heartbeat ]['txn_status'])
93
+			? $data[ $this->heartbeat ]['txn_status']
94
+			: null;
95
+		$response = $this->getTransactionDetails($txn_status, $response, $data);
96
+		// no payment data yet?
97
+		if (isset($response[ $this->heartbeat ]['still_waiting'])) {
98
+			return $response;
99
+		}
100
+		// TXN is happening so let's get the payments now
101
+		// if we've already gotten payments then the heartbeat data will contain the timestamp of the last time we checked
102
+		$since = isset($data[ $this->heartbeat ]['get_payments_since'])
103
+			? $data[ $this->heartbeat ]['get_payments_since']
104
+			: 0;
105
+		return $this->paymentDetails($response, $since);
106
+	}
107 107
 
108 108
 
109
-    /**
110
-     * @param array $response
111
-     * @param array $data
112
-     * @return array
113
-     * @throws EE_Error
114
-     * @throws InvalidArgumentException
115
-     * @throws InvalidDataTypeException
116
-     * @throws InvalidInterfaceException
117
-     */
118
-    private function initializeThankYouPageAndTransaction($response, $data)
119
-    {
120
-        require_once EE_MODULES . 'thank_you_page/EED_Thank_You_Page.module.php';
121
-        // set_definitions, instantiate the thank you page class, and get the ball rolling
122
-        EED_Thank_You_Page::set_definitions();
123
-        $this->thank_you_page = EED_Thank_You_Page::instance();
124
-        $this->thank_you_page->set_reg_url_link($data[ $this->heartbeat ]['e_reg_url_link']);
125
-        $this->thank_you_page->init();
126
-        // get TXN
127
-        $transaction = $this->thank_you_page->get_txn();
128
-        // no TXN? then get out
129
-        if (! $transaction instanceof EE_Transaction) {
130
-            $notices = EE_Error::get_notices();
131
-            $response[ $this->heartbeat ] = array(
132
-                'errors' => ! empty($notices['errors'])
133
-                    ? $notices['errors']
134
-                    : sprintf(
135
-                        __(
136
-                            'The information for your transaction could not be retrieved from the server or the transaction data received was invalid because of a technical reason. (%s)',
137
-                            'event_espresso'
138
-                        ),
139
-                        __LINE__
140
-                    ),
141
-            );
142
-            return $response;
143
-        }
144
-        $this->transaction = $transaction;
145
-        return $response;
146
-    }
109
+	/**
110
+	 * @param array $response
111
+	 * @param array $data
112
+	 * @return array
113
+	 * @throws EE_Error
114
+	 * @throws InvalidArgumentException
115
+	 * @throws InvalidDataTypeException
116
+	 * @throws InvalidInterfaceException
117
+	 */
118
+	private function initializeThankYouPageAndTransaction($response, $data)
119
+	{
120
+		require_once EE_MODULES . 'thank_you_page/EED_Thank_You_Page.module.php';
121
+		// set_definitions, instantiate the thank you page class, and get the ball rolling
122
+		EED_Thank_You_Page::set_definitions();
123
+		$this->thank_you_page = EED_Thank_You_Page::instance();
124
+		$this->thank_you_page->set_reg_url_link($data[ $this->heartbeat ]['e_reg_url_link']);
125
+		$this->thank_you_page->init();
126
+		// get TXN
127
+		$transaction = $this->thank_you_page->get_txn();
128
+		// no TXN? then get out
129
+		if (! $transaction instanceof EE_Transaction) {
130
+			$notices = EE_Error::get_notices();
131
+			$response[ $this->heartbeat ] = array(
132
+				'errors' => ! empty($notices['errors'])
133
+					? $notices['errors']
134
+					: sprintf(
135
+						__(
136
+							'The information for your transaction could not be retrieved from the server or the transaction data received was invalid because of a technical reason. (%s)',
137
+							'event_espresso'
138
+						),
139
+						__LINE__
140
+					),
141
+			);
142
+			return $response;
143
+		}
144
+		$this->transaction = $transaction;
145
+		return $response;
146
+	}
147 147
 
148 148
 
149
-    /**
150
-     * @param string $txn_status
151
-     * @param array  $response
152
-     * @param array  $data
153
-     * @return array
154
-     * @throws EE_Error
155
-     * @throws InvalidArgumentException
156
-     * @throws InvalidDataTypeException
157
-     * @throws InvalidInterfaceException
158
-     * @throws ReflectionException
159
-     */
160
-    private function getTransactionDetails($txn_status, $response, $data)
161
-    {
162
-        // has the TXN status changed since we last checked (or empty because this is the first time running through this code)?
163
-        if ($txn_status !== $this->transaction->status_ID()) {
164
-            // switch between two possible basic outcomes
165
-            switch ($this->transaction->status_ID()) {
166
-                // TXN has been updated in some way
167
-                case EEM_Transaction::overpaid_status_code:
168
-                case EEM_Transaction::complete_status_code:
169
-                case EEM_Transaction::incomplete_status_code:
170
-                    // send updated TXN results back to client,
171
-                    return $this->setTransactionDetails($response);
172
-                // or we have a bad TXN, or really slow IPN, so calculate the wait time and send that back...
173
-                case EEM_Transaction::failed_status_code:
174
-                default:
175
-                    // keep on waiting...
176
-                    return $this->updateServerWaitTime($data[ $this->heartbeat ]);
177
-            }
178
-            // or is the TXN still failed (never been updated) ???
179
-        } elseif ($this->transaction->failed()) {
180
-            // keep on waiting...
181
-            return $this->updateServerWaitTime($data[ $this->heartbeat ]);
182
-        }
183
-        return $response;
184
-    }
149
+	/**
150
+	 * @param string $txn_status
151
+	 * @param array  $response
152
+	 * @param array  $data
153
+	 * @return array
154
+	 * @throws EE_Error
155
+	 * @throws InvalidArgumentException
156
+	 * @throws InvalidDataTypeException
157
+	 * @throws InvalidInterfaceException
158
+	 * @throws ReflectionException
159
+	 */
160
+	private function getTransactionDetails($txn_status, $response, $data)
161
+	{
162
+		// has the TXN status changed since we last checked (or empty because this is the first time running through this code)?
163
+		if ($txn_status !== $this->transaction->status_ID()) {
164
+			// switch between two possible basic outcomes
165
+			switch ($this->transaction->status_ID()) {
166
+				// TXN has been updated in some way
167
+				case EEM_Transaction::overpaid_status_code:
168
+				case EEM_Transaction::complete_status_code:
169
+				case EEM_Transaction::incomplete_status_code:
170
+					// send updated TXN results back to client,
171
+					return $this->setTransactionDetails($response);
172
+				// or we have a bad TXN, or really slow IPN, so calculate the wait time and send that back...
173
+				case EEM_Transaction::failed_status_code:
174
+				default:
175
+					// keep on waiting...
176
+					return $this->updateServerWaitTime($data[ $this->heartbeat ]);
177
+			}
178
+			// or is the TXN still failed (never been updated) ???
179
+		} elseif ($this->transaction->failed()) {
180
+			// keep on waiting...
181
+			return $this->updateServerWaitTime($data[ $this->heartbeat ]);
182
+		}
183
+		return $response;
184
+	}
185 185
 
186 186
 
187
-    /**
188
-     * @param array $response
189
-     * @param boolean $status_only
190
-     * @return array
191
-     * @throws EE_Error
192
-     * @throws InvalidArgumentException
193
-     * @throws InvalidDataTypeException
194
-     * @throws InvalidInterfaceException
195
-     * @throws ReflectionException
196
-     */
197
-    private function setTransactionDetails($response, $status_only = false)
198
-    {
199
-        if (! $status_only && ! isset($response[ $this->heartbeat ]['transaction_details'])) {
200
-            $response[ $this->heartbeat ]['transaction_details'] = $this->thank_you_page->get_transaction_details();
201
-        }
202
-        if (! isset($response[ $this->heartbeat ]['txn_status'])) {
203
-            $response[ $this->heartbeat ]['txn_status'] = $this->transaction->status_ID();
204
-        }
205
-        return $response;
206
-    }
187
+	/**
188
+	 * @param array $response
189
+	 * @param boolean $status_only
190
+	 * @return array
191
+	 * @throws EE_Error
192
+	 * @throws InvalidArgumentException
193
+	 * @throws InvalidDataTypeException
194
+	 * @throws InvalidInterfaceException
195
+	 * @throws ReflectionException
196
+	 */
197
+	private function setTransactionDetails($response, $status_only = false)
198
+	{
199
+		if (! $status_only && ! isset($response[ $this->heartbeat ]['transaction_details'])) {
200
+			$response[ $this->heartbeat ]['transaction_details'] = $this->thank_you_page->get_transaction_details();
201
+		}
202
+		if (! isset($response[ $this->heartbeat ]['txn_status'])) {
203
+			$response[ $this->heartbeat ]['txn_status'] = $this->transaction->status_ID();
204
+		}
205
+		return $response;
206
+	}
207 207
 
208 208
 
209
-    /**
210
-     * @param array $response
211
-     * @param int $since
212
-     * @return array
213
-     * @throws EE_Error
214
-     * @throws InvalidArgumentException
215
-     * @throws InvalidDataTypeException
216
-     * @throws InvalidInterfaceException
217
-     * @throws ReflectionException
218
-     */
219
-    private function paymentDetails($response, $since)
220
-    {
221
-        // then check for payments
222
-        $payments = $this->thank_you_page->get_txn_payments($since);
223
-        // has a payment been processed ?
224
-        if (! empty($payments) || $this->thank_you_page->isOfflinePaymentMethod()) {
225
-            if ($since) {
226
-                $response[ $this->heartbeat ]['new_payments'] = $this->thank_you_page->get_new_payments($payments);
227
-                $response = $this->setTransactionDetails($response);
228
-            } else {
229
-                $response[ $this->heartbeat ]['payment_details'] = $this->thank_you_page->get_payment_details(
230
-                    $payments
231
-                );
232
-            }
233
-            // reset time to check for payments
234
-            $response[ $this->heartbeat ]['get_payments_since'] = time();
235
-        } else {
236
-            $response[ $this->heartbeat ]['get_payments_since'] = $since;
237
-        }
238
-        return $response;
239
-    }
209
+	/**
210
+	 * @param array $response
211
+	 * @param int $since
212
+	 * @return array
213
+	 * @throws EE_Error
214
+	 * @throws InvalidArgumentException
215
+	 * @throws InvalidDataTypeException
216
+	 * @throws InvalidInterfaceException
217
+	 * @throws ReflectionException
218
+	 */
219
+	private function paymentDetails($response, $since)
220
+	{
221
+		// then check for payments
222
+		$payments = $this->thank_you_page->get_txn_payments($since);
223
+		// has a payment been processed ?
224
+		if (! empty($payments) || $this->thank_you_page->isOfflinePaymentMethod()) {
225
+			if ($since) {
226
+				$response[ $this->heartbeat ]['new_payments'] = $this->thank_you_page->get_new_payments($payments);
227
+				$response = $this->setTransactionDetails($response);
228
+			} else {
229
+				$response[ $this->heartbeat ]['payment_details'] = $this->thank_you_page->get_payment_details(
230
+					$payments
231
+				);
232
+			}
233
+			// reset time to check for payments
234
+			$response[ $this->heartbeat ]['get_payments_since'] = time();
235
+		} else {
236
+			$response[ $this->heartbeat ]['get_payments_since'] = $since;
237
+		}
238
+		return $response;
239
+	}
240 240
 
241 241
 
242
-    /**
243
-     * @param array $thank_you_page_data    thank you page portion of the incoming JSON array
244
-     *                                      from the WP heartbeat data
245
-     * @return array
246
-     * @throws EE_Error
247
-     * @throws InvalidArgumentException
248
-     * @throws InvalidDataTypeException
249
-     * @throws InvalidInterfaceException
250
-     * @throws ReflectionException
251
-     */
252
-    private function updateServerWaitTime($thank_you_page_data)
253
-    {
254
-        $response[ $this->heartbeat ]['still_waiting'] = isset($thank_you_page_data['initial_access'])
255
-            ? time() - $thank_you_page_data['initial_access']
256
-            : 0;
257
-        $response = $this->setTransactionDetails($response, true);
258
-        return $response;
259
-    }
242
+	/**
243
+	 * @param array $thank_you_page_data    thank you page portion of the incoming JSON array
244
+	 *                                      from the WP heartbeat data
245
+	 * @return array
246
+	 * @throws EE_Error
247
+	 * @throws InvalidArgumentException
248
+	 * @throws InvalidDataTypeException
249
+	 * @throws InvalidInterfaceException
250
+	 * @throws ReflectionException
251
+	 */
252
+	private function updateServerWaitTime($thank_you_page_data)
253
+	{
254
+		$response[ $this->heartbeat ]['still_waiting'] = isset($thank_you_page_data['initial_access'])
255
+			? time() - $thank_you_page_data['initial_access']
256
+			: 0;
257
+		$response = $this->setTransactionDetails($response, true);
258
+		return $response;
259
+	}
260 260
 }
Please login to merge, or discard this patch.
Spacing   +25 added lines, -25 removed lines patch added patch discarded remove patch
@@ -67,12 +67,12 @@  discard block
 block discarded – undo
67 67
     public function heartbeatResponse($response = array(), $data = array())
68 68
     {
69 69
         // does this heartbeat contain our data ?
70
-        if (! isset($data[ $this->heartbeat ])) {
70
+        if ( ! isset($data[$this->heartbeat])) {
71 71
             return $response;
72 72
         }
73 73
         // check for reg_url_link in the incoming heartbeat data
74
-        if (! isset($data[ $this->heartbeat ]['e_reg_url_link'])) {
75
-            $response[ $this->heartbeat ] = array(
74
+        if ( ! isset($data[$this->heartbeat]['e_reg_url_link'])) {
75
+            $response[$this->heartbeat] = array(
76 76
                 'errors' => ! empty($notices['errors'])
77 77
                     ? $notices['errors']
78 78
                     : __(
@@ -85,22 +85,22 @@  discard block
 block discarded – undo
85 85
         // kk heartbeat has our data
86 86
         $response = $this->initializeThankYouPageAndTransaction($response, $data);
87 87
         // if something went wrong...
88
-        if (isset($response[ $this->heartbeat ]['errors'])) {
88
+        if (isset($response[$this->heartbeat]['errors'])) {
89 89
             return $response;
90 90
         }
91 91
         // grab transient of Transaction's status
92
-        $txn_status = isset($data[ $this->heartbeat ]['txn_status'])
93
-            ? $data[ $this->heartbeat ]['txn_status']
92
+        $txn_status = isset($data[$this->heartbeat]['txn_status'])
93
+            ? $data[$this->heartbeat]['txn_status']
94 94
             : null;
95 95
         $response = $this->getTransactionDetails($txn_status, $response, $data);
96 96
         // no payment data yet?
97
-        if (isset($response[ $this->heartbeat ]['still_waiting'])) {
97
+        if (isset($response[$this->heartbeat]['still_waiting'])) {
98 98
             return $response;
99 99
         }
100 100
         // TXN is happening so let's get the payments now
101 101
         // if we've already gotten payments then the heartbeat data will contain the timestamp of the last time we checked
102
-        $since = isset($data[ $this->heartbeat ]['get_payments_since'])
103
-            ? $data[ $this->heartbeat ]['get_payments_since']
102
+        $since = isset($data[$this->heartbeat]['get_payments_since'])
103
+            ? $data[$this->heartbeat]['get_payments_since']
104 104
             : 0;
105 105
         return $this->paymentDetails($response, $since);
106 106
     }
@@ -117,18 +117,18 @@  discard block
 block discarded – undo
117 117
      */
118 118
     private function initializeThankYouPageAndTransaction($response, $data)
119 119
     {
120
-        require_once EE_MODULES . 'thank_you_page/EED_Thank_You_Page.module.php';
120
+        require_once EE_MODULES.'thank_you_page/EED_Thank_You_Page.module.php';
121 121
         // set_definitions, instantiate the thank you page class, and get the ball rolling
122 122
         EED_Thank_You_Page::set_definitions();
123 123
         $this->thank_you_page = EED_Thank_You_Page::instance();
124
-        $this->thank_you_page->set_reg_url_link($data[ $this->heartbeat ]['e_reg_url_link']);
124
+        $this->thank_you_page->set_reg_url_link($data[$this->heartbeat]['e_reg_url_link']);
125 125
         $this->thank_you_page->init();
126 126
         // get TXN
127 127
         $transaction = $this->thank_you_page->get_txn();
128 128
         // no TXN? then get out
129
-        if (! $transaction instanceof EE_Transaction) {
129
+        if ( ! $transaction instanceof EE_Transaction) {
130 130
             $notices = EE_Error::get_notices();
131
-            $response[ $this->heartbeat ] = array(
131
+            $response[$this->heartbeat] = array(
132 132
                 'errors' => ! empty($notices['errors'])
133 133
                     ? $notices['errors']
134 134
                     : sprintf(
@@ -173,12 +173,12 @@  discard block
 block discarded – undo
173 173
                 case EEM_Transaction::failed_status_code:
174 174
                 default:
175 175
                     // keep on waiting...
176
-                    return $this->updateServerWaitTime($data[ $this->heartbeat ]);
176
+                    return $this->updateServerWaitTime($data[$this->heartbeat]);
177 177
             }
178 178
             // or is the TXN still failed (never been updated) ???
179 179
         } elseif ($this->transaction->failed()) {
180 180
             // keep on waiting...
181
-            return $this->updateServerWaitTime($data[ $this->heartbeat ]);
181
+            return $this->updateServerWaitTime($data[$this->heartbeat]);
182 182
         }
183 183
         return $response;
184 184
     }
@@ -196,11 +196,11 @@  discard block
 block discarded – undo
196 196
      */
197 197
     private function setTransactionDetails($response, $status_only = false)
198 198
     {
199
-        if (! $status_only && ! isset($response[ $this->heartbeat ]['transaction_details'])) {
200
-            $response[ $this->heartbeat ]['transaction_details'] = $this->thank_you_page->get_transaction_details();
199
+        if ( ! $status_only && ! isset($response[$this->heartbeat]['transaction_details'])) {
200
+            $response[$this->heartbeat]['transaction_details'] = $this->thank_you_page->get_transaction_details();
201 201
         }
202
-        if (! isset($response[ $this->heartbeat ]['txn_status'])) {
203
-            $response[ $this->heartbeat ]['txn_status'] = $this->transaction->status_ID();
202
+        if ( ! isset($response[$this->heartbeat]['txn_status'])) {
203
+            $response[$this->heartbeat]['txn_status'] = $this->transaction->status_ID();
204 204
         }
205 205
         return $response;
206 206
     }
@@ -221,19 +221,19 @@  discard block
 block discarded – undo
221 221
         // then check for payments
222 222
         $payments = $this->thank_you_page->get_txn_payments($since);
223 223
         // has a payment been processed ?
224
-        if (! empty($payments) || $this->thank_you_page->isOfflinePaymentMethod()) {
224
+        if ( ! empty($payments) || $this->thank_you_page->isOfflinePaymentMethod()) {
225 225
             if ($since) {
226
-                $response[ $this->heartbeat ]['new_payments'] = $this->thank_you_page->get_new_payments($payments);
226
+                $response[$this->heartbeat]['new_payments'] = $this->thank_you_page->get_new_payments($payments);
227 227
                 $response = $this->setTransactionDetails($response);
228 228
             } else {
229
-                $response[ $this->heartbeat ]['payment_details'] = $this->thank_you_page->get_payment_details(
229
+                $response[$this->heartbeat]['payment_details'] = $this->thank_you_page->get_payment_details(
230 230
                     $payments
231 231
                 );
232 232
             }
233 233
             // reset time to check for payments
234
-            $response[ $this->heartbeat ]['get_payments_since'] = time();
234
+            $response[$this->heartbeat]['get_payments_since'] = time();
235 235
         } else {
236
-            $response[ $this->heartbeat ]['get_payments_since'] = $since;
236
+            $response[$this->heartbeat]['get_payments_since'] = $since;
237 237
         }
238 238
         return $response;
239 239
     }
@@ -251,7 +251,7 @@  discard block
 block discarded – undo
251 251
      */
252 252
     private function updateServerWaitTime($thank_you_page_data)
253 253
     {
254
-        $response[ $this->heartbeat ]['still_waiting'] = isset($thank_you_page_data['initial_access'])
254
+        $response[$this->heartbeat]['still_waiting'] = isset($thank_you_page_data['initial_access'])
255 255
             ? time() - $thank_you_page_data['initial_access']
256 256
             : 0;
257 257
         $response = $this->setTransactionDetails($response, true);
Please login to merge, or discard this patch.
core/domain/services/admin/ajax/WordpressHeartbeat.php 2 patches
Indentation   +42 added lines, -42 removed lines patch added patch discarded remove patch
@@ -17,52 +17,52 @@
 block discarded – undo
17 17
 class WordpressHeartbeat
18 18
 {
19 19
 
20
-    const RESPONSE_KEY_THANK_YOU_PAGE = 'espresso_thank_you_page';
20
+	const RESPONSE_KEY_THANK_YOU_PAGE = 'espresso_thank_you_page';
21 21
 
22
-    /**
23
-     * @var LoaderInterface $loader
24
-     */
25
-    protected $loader;
22
+	/**
23
+	 * @var LoaderInterface $loader
24
+	 */
25
+	protected $loader;
26 26
 
27
-    /**
28
-     * @var RequestInterface $request
29
-     */
30
-    protected $request;
27
+	/**
28
+	 * @var RequestInterface $request
29
+	 */
30
+	protected $request;
31 31
 
32 32
 
33
-    /**
34
-     * WordpressHeartbeat constructor.
35
-     *
36
-     * @param LoaderInterface  $loader
37
-     * @param RequestInterface $request
38
-     */
39
-    public function __construct(
40
-        LoaderInterface $loader,
41
-        RequestInterface $request
42
-    ) {
43
-        $this->loader = $loader;
44
-        $this->request = $request;
45
-        do_action('AHEE__EventEspresso_core_domain_services_admin_ajax_WordpressHeartbeat__constructor', $this);
46
-        add_action('AHEE__EE_System__core_loaded_and_ready', array($this, 'resolveRoutes'));
47
-    }
33
+	/**
34
+	 * WordpressHeartbeat constructor.
35
+	 *
36
+	 * @param LoaderInterface  $loader
37
+	 * @param RequestInterface $request
38
+	 */
39
+	public function __construct(
40
+		LoaderInterface $loader,
41
+		RequestInterface $request
42
+	) {
43
+		$this->loader = $loader;
44
+		$this->request = $request;
45
+		do_action('AHEE__EventEspresso_core_domain_services_admin_ajax_WordpressHeartbeat__constructor', $this);
46
+		add_action('AHEE__EE_System__core_loaded_and_ready', array($this, 'resolveRoutes'));
47
+	}
48 48
 
49 49
 
50
-    /**
51
-     * @since 4.9.76.p
52
-     * @throws InvalidClassException
53
-     */
54
-    public function resolveRoutes()
55
-    {
56
-        $screenID = $this->request->getRequestParam('screen_id');
57
-        $heartbeat_data = $this->request->getRequestParam('data', []);
58
-        if ($screenID === 'espresso_events') {
59
-            $this->loader->getShared(
60
-                'EventEspresso\core\domain\services\admin\ajax\EventEditorHeartbeat'
61
-            );
62
-        } elseif ($screenID === 'front' && ! empty($heartbeat_data[ self::RESPONSE_KEY_THANK_YOU_PAGE ])) {
63
-            $this->loader->getShared(
64
-                'EventEspresso\core\domain\services\admin\ajax\ThankYouPageIpnMonitor'
65
-            );
66
-        }
67
-    }
50
+	/**
51
+	 * @since 4.9.76.p
52
+	 * @throws InvalidClassException
53
+	 */
54
+	public function resolveRoutes()
55
+	{
56
+		$screenID = $this->request->getRequestParam('screen_id');
57
+		$heartbeat_data = $this->request->getRequestParam('data', []);
58
+		if ($screenID === 'espresso_events') {
59
+			$this->loader->getShared(
60
+				'EventEspresso\core\domain\services\admin\ajax\EventEditorHeartbeat'
61
+			);
62
+		} elseif ($screenID === 'front' && ! empty($heartbeat_data[ self::RESPONSE_KEY_THANK_YOU_PAGE ])) {
63
+			$this->loader->getShared(
64
+				'EventEspresso\core\domain\services\admin\ajax\ThankYouPageIpnMonitor'
65
+			);
66
+		}
67
+	}
68 68
 }
Please login to merge, or discard this patch.
Spacing   +1 added lines, -1 removed lines patch added patch discarded remove patch
@@ -59,7 +59,7 @@
 block discarded – undo
59 59
             $this->loader->getShared(
60 60
                 'EventEspresso\core\domain\services\admin\ajax\EventEditorHeartbeat'
61 61
             );
62
-        } elseif ($screenID === 'front' && ! empty($heartbeat_data[ self::RESPONSE_KEY_THANK_YOU_PAGE ])) {
62
+        } elseif ($screenID === 'front' && ! empty($heartbeat_data[self::RESPONSE_KEY_THANK_YOU_PAGE])) {
63 63
             $this->loader->getShared(
64 64
                 'EventEspresso\core\domain\services\admin\ajax\ThankYouPageIpnMonitor'
65 65
             );
Please login to merge, or discard this patch.
espresso.php 1 patch
Indentation   +80 added lines, -80 removed lines patch added patch discarded remove patch
@@ -38,103 +38,103 @@
 block discarded – undo
38 38
  * @since           4.0
39 39
  */
40 40
 if (function_exists('espresso_version')) {
41
-    if (! function_exists('espresso_duplicate_plugin_error')) {
42
-        /**
43
-         *    espresso_duplicate_plugin_error
44
-         *    displays if more than one version of EE is activated at the same time
45
-         */
46
-        function espresso_duplicate_plugin_error()
47
-        {
48
-            ?>
41
+	if (! function_exists('espresso_duplicate_plugin_error')) {
42
+		/**
43
+		 *    espresso_duplicate_plugin_error
44
+		 *    displays if more than one version of EE is activated at the same time
45
+		 */
46
+		function espresso_duplicate_plugin_error()
47
+		{
48
+			?>
49 49
             <div class="error">
50 50
                 <p>
51 51
                     <?php
52
-                    echo esc_html__(
53
-                        'Can not run multiple versions of Event Espresso! One version has been automatically deactivated. Please verify that you have the correct version you want still active.',
54
-                        'event_espresso'
55
-                    ); ?>
52
+					echo esc_html__(
53
+						'Can not run multiple versions of Event Espresso! One version has been automatically deactivated. Please verify that you have the correct version you want still active.',
54
+						'event_espresso'
55
+					); ?>
56 56
                 </p>
57 57
             </div>
58 58
             <?php
59
-            espresso_deactivate_plugin(plugin_basename(__FILE__));
60
-        }
61
-    }
62
-    add_action('admin_notices', 'espresso_duplicate_plugin_error', 1);
59
+			espresso_deactivate_plugin(plugin_basename(__FILE__));
60
+		}
61
+	}
62
+	add_action('admin_notices', 'espresso_duplicate_plugin_error', 1);
63 63
 } else {
64
-    define('EE_MIN_PHP_VER_REQUIRED', '5.4.0');
65
-    if (! version_compare(PHP_VERSION, EE_MIN_PHP_VER_REQUIRED, '>=')) {
66
-        /**
67
-         * espresso_minimum_php_version_error
68
-         *
69
-         * @return void
70
-         */
71
-        function espresso_minimum_php_version_error()
72
-        {
73
-            ?>
64
+	define('EE_MIN_PHP_VER_REQUIRED', '5.4.0');
65
+	if (! version_compare(PHP_VERSION, EE_MIN_PHP_VER_REQUIRED, '>=')) {
66
+		/**
67
+		 * espresso_minimum_php_version_error
68
+		 *
69
+		 * @return void
70
+		 */
71
+		function espresso_minimum_php_version_error()
72
+		{
73
+			?>
74 74
             <div class="error">
75 75
                 <p>
76 76
                     <?php
77
-                    printf(
78
-                        esc_html__(
79
-                            'We\'re sorry, but Event Espresso requires PHP version %1$s or greater in order to operate. You are currently running version %2$s.%3$sIn order to update your version of PHP, you will need to contact your current hosting provider.%3$sFor information on stable PHP versions, please go to %4$s.',
80
-                            'event_espresso'
81
-                        ),
82
-                        EE_MIN_PHP_VER_REQUIRED,
83
-                        PHP_VERSION,
84
-                        '<br/>',
85
-                        '<a href="http://php.net/downloads.php">http://php.net/downloads.php</a>'
86
-                    );
87
-                    ?>
77
+					printf(
78
+						esc_html__(
79
+							'We\'re sorry, but Event Espresso requires PHP version %1$s or greater in order to operate. You are currently running version %2$s.%3$sIn order to update your version of PHP, you will need to contact your current hosting provider.%3$sFor information on stable PHP versions, please go to %4$s.',
80
+							'event_espresso'
81
+						),
82
+						EE_MIN_PHP_VER_REQUIRED,
83
+						PHP_VERSION,
84
+						'<br/>',
85
+						'<a href="http://php.net/downloads.php">http://php.net/downloads.php</a>'
86
+					);
87
+					?>
88 88
                 </p>
89 89
             </div>
90 90
             <?php
91
-            espresso_deactivate_plugin(plugin_basename(__FILE__));
92
-        }
91
+			espresso_deactivate_plugin(plugin_basename(__FILE__));
92
+		}
93 93
 
94
-        add_action('admin_notices', 'espresso_minimum_php_version_error', 1);
95
-    } else {
96
-        define('EVENT_ESPRESSO_MAIN_FILE', __FILE__);
97
-        /**
98
-         * espresso_version
99
-         * Returns the plugin version
100
-         *
101
-         * @return string
102
-         */
103
-        function espresso_version()
104
-        {
105
-            return apply_filters('FHEE__espresso__espresso_version', '4.9.82.rc.004');
106
-        }
94
+		add_action('admin_notices', 'espresso_minimum_php_version_error', 1);
95
+	} else {
96
+		define('EVENT_ESPRESSO_MAIN_FILE', __FILE__);
97
+		/**
98
+		 * espresso_version
99
+		 * Returns the plugin version
100
+		 *
101
+		 * @return string
102
+		 */
103
+		function espresso_version()
104
+		{
105
+			return apply_filters('FHEE__espresso__espresso_version', '4.9.82.rc.004');
106
+		}
107 107
 
108
-        /**
109
-         * espresso_plugin_activation
110
-         * adds a wp-option to indicate that EE has been activated via the WP admin plugins page
111
-         */
112
-        function espresso_plugin_activation()
113
-        {
114
-            update_option('ee_espresso_activation', true);
115
-        }
108
+		/**
109
+		 * espresso_plugin_activation
110
+		 * adds a wp-option to indicate that EE has been activated via the WP admin plugins page
111
+		 */
112
+		function espresso_plugin_activation()
113
+		{
114
+			update_option('ee_espresso_activation', true);
115
+		}
116 116
 
117
-        register_activation_hook(EVENT_ESPRESSO_MAIN_FILE, 'espresso_plugin_activation');
117
+		register_activation_hook(EVENT_ESPRESSO_MAIN_FILE, 'espresso_plugin_activation');
118 118
 
119
-        require_once __DIR__ . '/core/bootstrap_espresso.php';
120
-        bootstrap_espresso();
121
-    }
119
+		require_once __DIR__ . '/core/bootstrap_espresso.php';
120
+		bootstrap_espresso();
121
+	}
122 122
 }
123 123
 if (! function_exists('espresso_deactivate_plugin')) {
124
-    /**
125
-     *    deactivate_plugin
126
-     * usage:  espresso_deactivate_plugin( plugin_basename( __FILE__ ));
127
-     *
128
-     * @access public
129
-     * @param string $plugin_basename - the results of plugin_basename( __FILE__ ) for the plugin's main file
130
-     * @return    void
131
-     */
132
-    function espresso_deactivate_plugin($plugin_basename = '')
133
-    {
134
-        if (! function_exists('deactivate_plugins')) {
135
-            require_once ABSPATH . 'wp-admin/includes/plugin.php';
136
-        }
137
-        unset($_GET['activate'], $_REQUEST['activate']);
138
-        deactivate_plugins($plugin_basename);
139
-    }
124
+	/**
125
+	 *    deactivate_plugin
126
+	 * usage:  espresso_deactivate_plugin( plugin_basename( __FILE__ ));
127
+	 *
128
+	 * @access public
129
+	 * @param string $plugin_basename - the results of plugin_basename( __FILE__ ) for the plugin's main file
130
+	 * @return    void
131
+	 */
132
+	function espresso_deactivate_plugin($plugin_basename = '')
133
+	{
134
+		if (! function_exists('deactivate_plugins')) {
135
+			require_once ABSPATH . 'wp-admin/includes/plugin.php';
136
+		}
137
+		unset($_GET['activate'], $_REQUEST['activate']);
138
+		deactivate_plugins($plugin_basename);
139
+	}
140 140
 }
Please login to merge, or discard this patch.