1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
|
<?php
namespace AutomateWoo\Async_Events;
use AutomateWoo\Clean;
defined( 'ABSPATH' ) || exit;
/** * Class Order_Pending * * @since 4.8.0 * @package AutomateWoo */ class Order_Pending extends Abstract_Async_Event {
/** * Order pending uses the order created async event. * * @var array */ protected $event_dependencies = [ 'order_created' ];
/** * Init order pending async event. */ public function init() { add_action( 'automatewoo/async/order_created', [ $this, 'schedule_pending_check' ] ); add_action( $this->get_hook_name(), [ $this, 'do_pending_check' ] ); add_action( 'woocommerce_order_status_changed', [ $this, 'maybe_clear_scheduled_check' ], 10, 2 ); }
/** * Get the async event hook name. * * @since 5.2.0 * * @return string */ public function get_hook_name(): string { return 'automatewoo_check_for_pending_order'; }
/** * Schedule order pending event in 5 mins. * * @param int $order_id */ public function schedule_pending_check( $order_id ) { $delay = apply_filters( 'automatewoo_order_pending_check_delay', 5 ) * 60; $this->action_scheduler->schedule_single( gmdate( 'U' ) + $delay, $this->get_hook_name(), [ (int) $order_id ] ); }
/** * Clear scheduled event if order is no longer pending. * * @param int $order_id * @param string $old_status */ public function maybe_clear_scheduled_check( $order_id, $old_status ) { if ( $old_status === 'pending' ) { $this->action_scheduler->cancel( 'automatewoo_check_for_pending_order', [ (int) $order_id ] ); } }
/** * Maybe do order pending action. * * @param int $order_id */ public function do_pending_check( $order_id ) { $order = wc_get_order( Clean::id( $order_id ) );
if ( $order && $order->has_status( 'pending' ) ) { do_action( 'automatewoo_order_pending', $order_id ); } } }
|