EDD_Order.php
5 months ago
Fluent_Cart_Order.php
5 months ago
PMPro_Order.php
5 months ago
SureCart_Event_Sync_Job.php
1 year ago
SureCart_Order.php
5 months ago
SureCart_Store.php
1 year ago
WooCommerce_Order.php
5 months ago
WooCommerce_Status_Manager.php
1 year ago
SureCart_Event_Sync_Job.php
59 lines
| 1 | <?php |
| 2 | |
| 3 | namespace IAWP\Ecommerce; |
| 4 | |
| 5 | use IAWP\Cron_Job; |
| 6 | use IAWPSCOPED\Illuminate\Support\Collection; |
| 7 | /** @internal */ |
| 8 | class SureCart_Event_Sync_Job extends Cron_Job |
| 9 | { |
| 10 | protected $name = 'iawp_surecart_event_syncing'; |
| 11 | protected $interval = 'five_minutes'; |
| 12 | public function should_execute_handler() : bool |
| 13 | { |
| 14 | return \IAWPSCOPED\iawp()->is_surecart_support_enabled(); |
| 15 | } |
| 16 | public function handle() : void |
| 17 | { |
| 18 | $one_day_ago = \time() - 86400; |
| 19 | $last_seen_event_at = \get_option('iawp_last_seen_surecart_event_at', $one_day_ago); |
| 20 | $events = new Collection(); |
| 21 | $page = 1; |
| 22 | while (\true) { |
| 23 | // If an event is older than the last one we've seen, then we have all the events we need |
| 24 | if ($events->isNotEmpty() && $events->last()->created_at < $last_seen_event_at) { |
| 25 | break; |
| 26 | } |
| 27 | if (!\class_exists('\\SureCart\\Models\\Event')) { |
| 28 | break; |
| 29 | } |
| 30 | $page_of_events = \SureCart\Models\Event::where(['type' => ['refund.succeeded', 'purchase.created'], 'limit' => 100, 'page' => $page])->get(); |
| 31 | if (\is_wp_error($page_of_events) || \count($page_of_events) === 0) { |
| 32 | break; |
| 33 | } |
| 34 | $events = $events->concat($page_of_events); |
| 35 | $page = $page + 1; |
| 36 | } |
| 37 | if ($events->isNotEmpty()) { |
| 38 | \update_option('iawp_last_seen_surecart_event_at', $events->first()->created_at); |
| 39 | } |
| 40 | $events = $events->filter(function ($event) use($last_seen_event_at) { |
| 41 | return $event->created_at > $last_seen_event_at; |
| 42 | }); |
| 43 | $events->filter(function ($event) { |
| 44 | return $event->type === 'refund.succeeded'; |
| 45 | })->map(function ($event) { |
| 46 | return $event->data->object->charge; |
| 47 | })->unique()->each(function ($charge_id) { |
| 48 | \IAWP\Ecommerce\SureCart_Order::update_order_using_charge_id($charge_id); |
| 49 | }); |
| 50 | $events->filter(function ($event) { |
| 51 | return $event->type === 'purchase.created'; |
| 52 | })->map(function ($event) { |
| 53 | return $event->data->object->initial_order; |
| 54 | })->unique()->each(function ($order_id) { |
| 55 | \IAWP\Ecommerce\SureCart_Order::update_order_using_order_id($order_id); |
| 56 | }); |
| 57 | } |
| 58 | } |
| 59 |