woocommerce-subscriptions/includes/payment-retry/class-wcs-retry-background-migrator.php
fei-source 432ebde60c Update to v8.5.0
Source: GrootMade/Festinger Vault
2026-03-15 08:31:12 +08:00

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();
}
}