| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129 |
- <?php
- namespace Action_Scheduler\Migration;
- /**
- * Class Scheduler
- *
- * @package Action_Scheduler\WP_CLI
- *
- * @since 3.0.0
- *
- * @codeCoverageIgnore
- */
- class Scheduler {
- /** Migration action hook. */
- const HOOK = 'action_scheduler/migration_hook';
- /** Migration action group. */
- const GROUP = 'action-scheduler-migration';
- /**
- * Set up the callback for the scheduled job.
- */
- public function hook() {
- add_action( self::HOOK, array( $this, 'run_migration' ), 10, 0 );
- }
- /**
- * Remove the callback for the scheduled job.
- */
- public function unhook() {
- remove_action( self::HOOK, array( $this, 'run_migration' ), 10 );
- }
- /**
- * The migration callback.
- */
- public function run_migration() {
- $migration_runner = $this->get_migration_runner();
- $count = $migration_runner->run( $this->get_batch_size() );
- if ( $count === 0 ) {
- $this->mark_complete();
- } else {
- $this->schedule_migration( time() + $this->get_schedule_interval() );
- }
- }
- /**
- * Mark the migration complete.
- */
- public function mark_complete() {
- $this->unschedule_migration();
- \ActionScheduler_DataController::mark_migration_complete();
- do_action( 'action_scheduler/migration_complete' );
- }
- /**
- * Get a flag indicating whether the migration is scheduled.
- *
- * @return bool Whether there is a pending action in the store to handle the migration
- */
- public function is_migration_scheduled() {
- $next = as_next_scheduled_action( self::HOOK );
- return ! empty( $next );
- }
- /**
- * Schedule the migration.
- *
- * @param int $when Optional timestamp to run the next migration batch. Defaults to now.
- *
- * @return string The action ID
- */
- public function schedule_migration( $when = 0 ) {
- $next = as_next_scheduled_action( self::HOOK );
- if ( ! empty( $next ) ) {
- return $next;
- }
- if ( empty( $when ) ) {
- $when = time() + MINUTE_IN_SECONDS;
- }
- return as_schedule_single_action( $when, self::HOOK, array(), self::GROUP );
- }
- /**
- * Remove the scheduled migration action.
- */
- public function unschedule_migration() {
- as_unschedule_action( self::HOOK, null, self::GROUP );
- }
- /**
- * Get migration batch schedule interval.
- *
- * @return int Seconds between migration runs. Defaults to 0 seconds to allow chaining migration via Async Runners.
- */
- private function get_schedule_interval() {
- return (int) apply_filters( 'action_scheduler/migration_interval', 0 );
- }
- /**
- * Get migration batch size.
- *
- * @return int Number of actions to migrate in each batch. Defaults to 250.
- */
- private function get_batch_size() {
- return (int) apply_filters( 'action_scheduler/migration_batch_size', 250 );
- }
- /**
- * Get migration runner object.
- *
- * @return Runner
- */
- private function get_migration_runner() {
- $config = Controller::instance()->get_migration_config_object();
- return new Runner( $config );
- }
- }
|