| @@ -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 | * |
| @@ -20,8 +21,9 @@ | ||
| 20 | 21 | public const CRON_LOG_AUTO_DELETION_HOOK = 'packetery_cron_log_auto_deletion_hook'; |
| 21 | 22 | public const CRON_CARRIERS_HOOK = 'packetery_cron_carriers_hook'; |
| 22 | 23 | public const CRON_PACKET_STATUS_SYNC_HOOK = 'packetery_cron_packet_status_sync_hook'; |
| 23 | 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'; | |
| 24 | 26 | |
| 25 | 27 | /** |
| 26 | 28 | * Log purger. |
| 27 | 29 | * |
| @@ -43,18 +45,32 @@ | ||
| 43 | 45 | */ |
| 44 | 46 | private $packetSynchronizer; |
| 45 | 47 | |
| 46 | 48 | /** |
| 49 | + * Transient purger. | |
| 50 | + * | |
| 51 | + * @var TransientPurger | |
| 52 | + */ | |
| 53 | + private $transientPurger; | |
| 54 | + | |
| 55 | + /** | |
| 47 | 56 | * Constructor. |
| 48 | 57 | * |
| 49 | - * @param Log\Purger $logPurger Log purger. | |
| 50 | - * @param Carrier\Downloader $carrierDownloader Carrier downloader. | |
| 58 | + * @param Log\Purger $logPurger Log purger. | |
| 59 | + * @param Carrier\Downloader $carrierDownloader Carrier downloader. | |
| 51 | 60 | * @param Order\PacketSynchronizer $packetSynchronizer Packet synchronizer. |
| 61 | + * @param TransientPurger $transientPurger Transient purger. | |
| 52 | 62 | */ |
| 53 | - 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 | + ) { | |
| 54 | 69 | $this->logPurger = $logPurger; |
| 55 | 70 | $this->carrierDownloader = $carrierDownloader; |
| 56 | 71 | $this->packetSynchronizer = $packetSynchronizer; |
| 72 | + $this->transientPurger = $transientPurger; | |
| 57 | 73 | } |
| 58 | 74 | |
| 59 | 75 | /** |
| 60 | 76 | * Registers service. |
| @@ -61,45 +77,41 @@ | ||
| 61 | 77 | * |
| 62 | 78 | * @return void |
| 63 | 79 | */ |
| 64 | 80 | public function register(): void { |
| 81 | + // Hooks have to be initialised before init. | |
| 82 | + add_action( self::CRON_LOG_AUTO_DELETION_HOOK, [ $this->logPurger, 'autoDeleteHook' ] ); | |
| 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' ] ); | |
| 87 | + | |
| 65 | 88 | add_action( |
| 66 | 89 | 'init', |
| 67 | 90 | function () { |
| 68 | - add_action( self::CRON_LOG_AUTO_DELETION_HOOK, [ $this->logPurger, 'autoDeleteHook' ] ); | |
| 69 | - if ( false === as_has_scheduled_action( self::CRON_LOG_AUTO_DELETION_HOOK ) ) { | |
| 91 | + if ( ! function_exists( 'as_has_scheduled_action' ) ) { | |
| 92 | + return; | |
| 93 | + } | |
| 94 | + | |
| 95 | + if ( as_has_scheduled_action( self::CRON_LOG_AUTO_DELETION_HOOK ) === false ) { | |
| 70 | 96 | as_schedule_recurring_action( ( new \DateTime( 'next day 02:00', wp_timezone() ) )->getTimestamp(), DAY_IN_SECONDS, self::CRON_LOG_AUTO_DELETION_HOOK ); |
| 71 | 97 | } |
| 72 | - } | |
| 73 | - ); | |
| 74 | - | |
| 75 | - add_action( | |
| 76 | - 'init', | |
| 77 | - function () { | |
| 78 | - add_action( self::CRON_CARRIERS_HOOK, [ $this->carrierDownloader, 'runAndRender' ] ); | |
| 79 | - if ( false === as_has_scheduled_action( self::CRON_CARRIERS_HOOK ) ) { | |
| 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 ) { | |
| 80 | 106 | as_schedule_recurring_action( ( new \DateTime( 'next day 09:10', wp_timezone() ) )->getTimestamp(), DAY_IN_SECONDS, self::CRON_CARRIERS_HOOK ); |
| 81 | 107 | } |
| 82 | - } | |
| 83 | - ); | |
| 84 | - | |
| 85 | - add_action( | |
| 86 | - 'init', | |
| 87 | - function () { | |
| 88 | - add_action( self::CRON_PACKET_STATUS_SYNC_HOOK, [ $this->packetSynchronizer, 'syncStatuses' ] ); | |
| 89 | - if ( false === as_has_scheduled_action( self::CRON_PACKET_STATUS_SYNC_HOOK ) ) { | |
| 108 | + if ( as_has_scheduled_action( self::CRON_PACKET_STATUS_SYNC_HOOK ) === false ) { | |
| 90 | 109 | // phpcs:ignore Squiz.PHP.CommentedOutCode.Found |
| 91 | 110 | // Monday to Friday at 02:10, 06:10, 10:10, 14:10, 18:10, 22:10. |
| 92 | 111 | as_schedule_cron_action( ( new \DateTime() )->getTimestamp(), '10 2,6,10,14,18,22 * * 1-5', self::CRON_PACKET_STATUS_SYNC_HOOK ); |
| 93 | 112 | } |
| 94 | - } | |
| 95 | - ); | |
| 96 | - | |
| 97 | - add_action( | |
| 98 | - 'init', | |
| 99 | - function () { | |
| 100 | - add_action( self::CRON_PACKET_STATUS_SYNC_HOOK_WEEKEND, [ $this->packetSynchronizer, 'syncStatuses' ] ); | |
| 101 | - if ( false === as_has_scheduled_action( self::CRON_PACKET_STATUS_SYNC_HOOK_WEEKEND ) ) { | |
| 113 | + if ( as_has_scheduled_action( self::CRON_PACKET_STATUS_SYNC_HOOK_WEEKEND ) === false ) { | |
| 102 | 114 | // Saturday, Sunday at 03:10. |
| 103 | 115 | as_schedule_cron_action( ( new \DateTime() )->getTimestamp(), '10 3 * * 6,0', self::CRON_PACKET_STATUS_SYNC_HOOK_WEEKEND ); |
| 104 | 116 | } |
| 105 | 117 | } |
| @@ -112,8 +124,9 @@ | ||
| 112 | 124 | * @return void |
| 113 | 125 | */ |
| 114 | 126 | public static function deactivate(): void { |
| 115 | 127 | as_unschedule_action( self::CRON_LOG_AUTO_DELETION_HOOK ); |
| 128 | + as_unschedule_action( self::CRON_PURGE_TRANSIENTS ); | |
| 116 | 129 | as_unschedule_action( self::CRON_CARRIERS_HOOK ); |
| 117 | 130 | as_unschedule_action( self::CRON_PACKET_STATUS_SYNC_HOOK ); |
| 118 | 131 | as_unschedule_action( self::CRON_PACKET_STATUS_SYNC_HOOK_WEEKEND ); |
| 119 | 132 | } |