PluginProbe
Packeta / 2.1
Packeta v2.1
2.3.2 2.3.1 trunk 1.2.2 1.2.3 1.2.4 1.2.5 1.2.6 1.3.0 1.3.1 1.3.2 1.4 1.4.1 1.4.2 1.4.3 1.5.0 1.5.1 1.5.2 1.5.3 1.5.4 1.6.0 1.6.1 1.6.2 1.6.3 1.6.4 All 56 releases
← All changes | src/Packetery/Module/CronService.php +59 -20 1.5.22.1 View file →
@@ -6,10 +6,11 @@
6 6 */
7 7
8 8 declare( strict_types=1 );
9 9
10 +namespace Packetery\Module;
10 11
11 -namespace Packetery\Module;
12 +use Packetery\Module\Options\TransientPurger;
12 13
13 14 /**
14 15 * Class CronService
15 16 *
@@ -16,11 +17,13 @@
16 17 * @package Packetery
17 18 */
18 19 class CronService {
19 20
20 - private const CRON_LOG_AUTO_DELETION_HOOK = 'packetery_cron_log_auto_deletion_hook';
21 - public const CRON_CARRIERS_HOOK = 'packetery_cron_carriers_hook';
22 - private const CRON_PACKET_STATUS_SYNC_HOOK = 'packetery_cron_packet_status_sync_hook';
21 + public const CRON_LOG_AUTO_DELETION_HOOK = 'packetery_cron_log_auto_deletion_hook';
22 + public const CRON_CARRIERS_HOOK = 'packetery_cron_carriers_hook';
23 + public const CRON_PACKET_STATUS_SYNC_HOOK = 'packetery_cron_packet_status_sync_hook';
24 + private const CRON_PACKET_STATUS_SYNC_HOOK_WEEKEND = 'packetery_cron_packet_status_sync_hook_weekend';
25 + private const CRON_PURGE_TRANSIENTS = 'packetery_cron_purge_transients';
23 26
24 27 /**
25 28 * Log purger.
26 29 *
@@ -42,18 +45,32 @@
42 45 */
43 46 private $packetSynchronizer;
44 47
45 48 /**
49 + * Transient purger.
50 + *
51 + * @var TransientPurger
52 + */
53 + private $transientPurger;
54 +
55 + /**
46 56 * Constructor.
47 57 *
48 - * @param Log\Purger $logPurger Log purger.
49 - * @param Carrier\Downloader $carrierDownloader Carrier downloader.
58 + * @param Log\Purger $logPurger Log purger.
59 + * @param Carrier\Downloader $carrierDownloader Carrier downloader.
50 60 * @param Order\PacketSynchronizer $packetSynchronizer Packet synchronizer.
61 + * @param TransientPurger $transientPurger Transient purger.
51 62 */
52 - public function __construct( Log\Purger $logPurger, Carrier\Downloader $carrierDownloader, Order\PacketSynchronizer $packetSynchronizer ) {
63 + public function __construct(
64 + Log\Purger $logPurger,
65 + Carrier\Downloader $carrierDownloader,
66 + Order\PacketSynchronizer $packetSynchronizer,
67 + TransientPurger $transientPurger
68 + ) {
53 69 $this->logPurger = $logPurger;
54 70 $this->carrierDownloader = $carrierDownloader;
55 71 $this->packetSynchronizer = $packetSynchronizer;
72 + $this->transientPurger = $transientPurger;
56 73 }
57 74
58 75 /**
59 76 * Registers service.
@@ -60,27 +77,46 @@
60 77 *
61 78 * @return void
62 79 */
63 80 public function register(): void {
81 + // Hooks have to be initialised before init.
64 82 add_action( self::CRON_LOG_AUTO_DELETION_HOOK, [ $this->logPurger, 'autoDeleteHook' ] );
65 - if ( ! wp_next_scheduled( self::CRON_LOG_AUTO_DELETION_HOOK ) ) {
66 - wp_schedule_event( ( new \DateTime( 'next day 02:00', wp_timezone() ) )->getTimestamp(), 'daily', self::CRON_LOG_AUTO_DELETION_HOOK );
67 - }
83 + add_action( self::CRON_PURGE_TRANSIENTS, [ $this->transientPurger, 'purge' ] );
84 + add_action( self::CRON_CARRIERS_HOOK, [ $this->carrierDownloader, 'runAndRender' ] );
85 + add_action( self::CRON_PACKET_STATUS_SYNC_HOOK, [ $this->packetSynchronizer, 'syncStatuses' ] );
86 + add_action( self::CRON_PACKET_STATUS_SYNC_HOOK_WEEKEND, [ $this->packetSynchronizer, 'syncStatuses' ] );
68 87
69 88 add_action(
70 89 'init',
71 90 function () {
72 - add_action( self::CRON_CARRIERS_HOOK, [ $this->carrierDownloader, 'runAndRender' ] );
73 - if ( false === as_has_scheduled_action( self::CRON_CARRIERS_HOOK ) ) {
74 - as_schedule_recurring_action( ( new \DateTime( 'next day 09:10', wp_timezone() ) )->getTimestamp(), 86400, self::CRON_CARRIERS_HOOK );
91 + if ( ! function_exists( 'as_has_scheduled_action' ) ) {
92 + return;
75 93 }
94 +
95 + if ( as_has_scheduled_action( self::CRON_LOG_AUTO_DELETION_HOOK ) === false ) {
96 + as_schedule_recurring_action( ( new \DateTime( 'next day 02:00', wp_timezone() ) )->getTimestamp(), DAY_IN_SECONDS, self::CRON_LOG_AUTO_DELETION_HOOK );
97 + }
98 + if ( as_has_scheduled_action( self::CRON_PURGE_TRANSIENTS ) === false ) {
99 + as_schedule_recurring_action(
100 + ( new \DateTime( 'next day 02:10', wp_timezone() ) )->getTimestamp(),
101 + DAY_IN_SECONDS,
102 + self::CRON_PURGE_TRANSIENTS
103 + );
104 + }
105 + if ( as_has_scheduled_action( self::CRON_CARRIERS_HOOK ) === false ) {
106 + as_schedule_recurring_action( ( new \DateTime( 'next day 09:10', wp_timezone() ) )->getTimestamp(), DAY_IN_SECONDS, self::CRON_CARRIERS_HOOK );
107 + }
108 + if ( as_has_scheduled_action( self::CRON_PACKET_STATUS_SYNC_HOOK ) === false ) {
109 + // phpcs:ignore Squiz.PHP.CommentedOutCode.Found
110 + // Monday to Friday at 02:10, 06:10, 10:10, 14:10, 18:10, 22:10.
111 + as_schedule_cron_action( ( new \DateTime() )->getTimestamp(), '10 2,6,10,14,18,22 * * 1-5', self::CRON_PACKET_STATUS_SYNC_HOOK );
112 + }
113 + if ( as_has_scheduled_action( self::CRON_PACKET_STATUS_SYNC_HOOK_WEEKEND ) === false ) {
114 + // Saturday, Sunday at 03:10.
115 + as_schedule_cron_action( ( new \DateTime() )->getTimestamp(), '10 3 * * 6,0', self::CRON_PACKET_STATUS_SYNC_HOOK_WEEKEND );
116 + }
76 117 }
77 118 );
78 -
79 - add_action( self::CRON_PACKET_STATUS_SYNC_HOOK, [ $this->packetSynchronizer, 'syncStatuses' ] );
80 - if ( ! wp_next_scheduled( self::CRON_PACKET_STATUS_SYNC_HOOK ) ) {
81 - wp_schedule_event( ( new \DateTime( 'next day 03:00:00', wp_timezone() ) )->getTimestamp(), 'daily', self::CRON_PACKET_STATUS_SYNC_HOOK );
82 - }
83 119 }
84 120
85 121 /**
86 122 * Unregisters purger and synchronizer.
@@ -87,8 +123,11 @@
87 123 *
88 124 * @return void
89 125 */
90 126 public static function deactivate(): void {
91 - wp_clear_scheduled_hook( self::CRON_LOG_AUTO_DELETION_HOOK );
92 - wp_clear_scheduled_hook( self::CRON_PACKET_STATUS_SYNC_HOOK );
127 + as_unschedule_action( self::CRON_LOG_AUTO_DELETION_HOOK );
128 + as_unschedule_action( self::CRON_PURGE_TRANSIENTS );
129 + as_unschedule_action( self::CRON_CARRIERS_HOOK );
130 + as_unschedule_action( self::CRON_PACKET_STATUS_SYNC_HOOK );
131 + as_unschedule_action( self::CRON_PACKET_STATUS_SYNC_HOOK_WEEKEND );
93 132 }
94 133 }