116 lines
2.8 KiB
PHP
116 lines
2.8 KiB
PHP
<?php
|
|
/**
|
|
* Retry Background Updater.
|
|
*
|
|
* @author Prospress
|
|
* @category Class
|
|
* @package WooCommerce Subscriptions
|
|
* @subpackage WCS_Retry_Backgound_Migrator
|
|
* @since 2.4.0
|
|
*/
|
|
|
|
if ( ! defined( 'ABSPATH' ) ) {
|
|
exit; // Exit if accessed directly
|
|
}
|
|
|
|
/**
|
|
* Class WCS_Retry_Background_Migrator.
|
|
*
|
|
* Updates our retries on background.
|
|
* @since 2.4.0
|
|
*/
|
|
class WCS_Retry_Background_Migrator extends WCS_Background_Upgrader {
|
|
/**
|
|
* Where we're saving/migrating our data.
|
|
*
|
|
* @var WCS_Retry_Store
|
|
*/
|
|
private $destination_store;
|
|
|
|
/**
|
|
* Where the data comes from.
|
|
*
|
|
* @var WCS_Retry_Store
|
|
*/
|
|
private $source_store;
|
|
|
|
/**
|
|
* Our migration class.
|
|
*
|
|
* @var WCS_Retry_Migrator
|
|
*/
|
|
private $migrator;
|
|
|
|
/**
|
|
* construct.
|
|
*
|
|
* @param WC_Logger_Interface $logger The WC_Logger instance.
|
|
*
|
|
* @since 2.4.0
|
|
*/
|
|
public function __construct( WC_Logger_Interface $logger ) {
|
|
$this->scheduled_hook = 'wcs_retries_migration_hook';
|
|
$this->time_limit = 30;
|
|
|
|
$this->destination_store = WCS_Retry_Stores::get_database_store();
|
|
$this->source_store = WCS_Retry_Stores::get_post_store();
|
|
|
|
$migrator_class = apply_filters( 'wcs_retry_retry_migrator_class', 'WCS_Retry_Migrator' );
|
|
$this->migrator = new $migrator_class( $this->source_store, $this->destination_store, new WC_Logger() );
|
|
|
|
$this->log_handle = 'wcs-retries-background-migrator';
|
|
$this->logger = $logger;
|
|
}
|
|
|
|
/**
|
|
* Get the items to be updated, if any.
|
|
*
|
|
* @return array An array of items to update, or empty array if there are no items to update.
|
|
* @since 2.4.0
|
|
*/
|
|
protected function get_items_to_update() {
|
|
return $this->source_store->get_retries( array( 'limit' => 10 ) );
|
|
}
|
|
|
|
/**
|
|
* Run the update for a single item.
|
|
*
|
|
* @param WCS_Retry $retry The item to update.
|
|
*
|
|
* @return int|null
|
|
* @since 2.4.0
|
|
*/
|
|
protected function update_item( $retry ) {
|
|
try {
|
|
if ( ! is_a( $retry, 'WCS_Retry' ) ) {
|
|
throw new Exception( 'The $retry parameter must be a valid WCS_Retry instance.' );
|
|
}
|
|
|
|
$new_item_id = $this->migrator->migrate_entry( $retry->get_id() );
|
|
|
|
$this->log( sprintf( 'Payment retry ID: %d, has been migrated to custom table with new ID: %d.', $retry->get_id(), $new_item_id ) );
|
|
|
|
return $new_item_id;
|
|
} catch ( Exception $e ) {
|
|
if ( is_object( $retry ) ) {
|
|
$retry_description = get_class( $retry ) . '(id=' . wcs_get_objects_property( $retry, 'id' ) . ')';
|
|
} else {
|
|
$retry_description = wp_json_encode( $retry );
|
|
}
|
|
|
|
$this->log( sprintf( '--- Exception caught migrating Payment retry %s - exception message: %s ---', $retry_description, $e->getMessage() ) );
|
|
|
|
return null;
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Unscheduled the instance's hook in Action Scheduler
|
|
* @since 2.4.1
|
|
*/
|
|
protected function unschedule_background_updates() {
|
|
parent::unschedule_background_updates();
|
|
|
|
$this->migrator->set_needs_migration();
|
|
}
|
|
}
|