Files
krolewskie-miody.pl/wp-content/plugins/woocommerce-payments/includes/migrations/class-migrate-express-checkout-locations.php
2026-04-28 15:13:50 +02:00

100 lines
3.0 KiB
PHP

<?php
/**
* Class Migrate_Express_Checkout_Locations
*
* @package WooCommerce\Payments
*/
namespace WCPay\Migrations;
defined( 'ABSPATH' ) || exit;
/**
* Class Migrate_Express_Checkout_Locations
*
* Migrates express checkout button location settings from method-centric to location-centric storage.
*
* Before: Each payment method stored its own list of enabled locations.
* - `payment_request_button_locations` = ['product', 'cart', 'checkout'] (Apple Pay/Google Pay)
* - `platform_checkout_button_locations` = ['product', 'cart'] (WooPay)
*
* After: Each location stores which payment methods are enabled there.
* - `express_checkout_product_methods` = ['payment_request', 'woopay']
* - `express_checkout_cart_methods` = ['payment_request', 'woopay']
* - `express_checkout_checkout_methods` = ['payment_request']
*
* @since 10.4.0
*/
class Migrate_Express_Checkout_Locations {
/**
* Version in which this migration was introduced.
*
* @var string
*/
const VERSION_SINCE = '10.4.0';
/**
* The locations where express checkout buttons can be displayed.
*
* @var array
*/
const LOCATIONS = [ 'product', 'cart', 'checkout' ];
/**
* Execute the migration if upgrading from a version before the migration version
* and the old settings exist.
*/
public function maybe_migrate() {
$previous_version = get_option( 'woocommerce_woocommerce_payments_version' );
if ( version_compare( self::VERSION_SINCE, $previous_version, '<=' ) ) {
return;
}
$card_settings = get_option( 'woocommerce_woocommerce_payments_settings', [] );
// Check if migration is needed - if old settings exist and new ones don't.
$has_old_settings = isset( $card_settings['payment_request_button_locations'] )
|| isset( $card_settings['platform_checkout_button_locations'] );
$has_new_settings = isset( $card_settings['express_checkout_product_methods'] );
if ( ! $has_old_settings || $has_new_settings ) {
return;
}
$this->migrate( $card_settings );
}
/**
* Does the actual migration as described in the class docblock.
*
* @param array $card_settings The card gateway settings.
*/
private function migrate( $card_settings ) {
// Get old settings with defaults.
$payment_request_locations = $card_settings['payment_request_button_locations'] ?? self::LOCATIONS;
$woopay_locations = $card_settings['platform_checkout_button_locations'] ?? self::LOCATIONS;
// Build new location-centric settings.
foreach ( self::LOCATIONS as $location ) {
$methods = [];
if ( in_array( $location, $payment_request_locations, true ) ) {
$methods[] = 'payment_request';
}
if ( in_array( $location, $woopay_locations, true ) ) {
$methods[] = 'woopay';
}
$card_settings[ "express_checkout_{$location}_methods" ] = $methods;
}
// Remove old settings.
unset( $card_settings['payment_request_button_locations'] );
unset( $card_settings['platform_checkout_button_locations'] );
update_option( 'woocommerce_woocommerce_payments_settings', $card_settings );
}
}