class-wc-stripe-old-settings-upe-toggle-controller.php 2.22 KB
<?php

if ( ! defined( 'ABSPATH' ) ) {
	exit;
}

/**
 * Enqueues some JS to ensure that some needed UI elements for the old settings are available.
 *
 * @since 5.5.0
 */
class WC_Stripe_Old_Settings_UPE_Toggle_Controller {
	protected $was_upe_checkout_enabled = null;

	public function __construct() {
		add_filter( 'pre_update_option_woocommerce_stripe_settings', [ $this, 'pre_options_save' ] );
		add_action( 'update_option_woocommerce_stripe_settings', [ $this, 'maybe_enqueue_script' ] );
	}

	/**
	 * Stores whether UPE was enabled before saving the options.
	 *
	 * @param mixed $value
	 *
	 * @return mixed
	 */
	public function pre_options_save( $value ) {
		$this->was_upe_checkout_enabled = WC_Stripe_Feature_Flags::is_upe_checkout_enabled();

		return $value;
	}

	/**
	 * Determines what to do after the options have been saved.
	 */
	public function maybe_enqueue_script() {
		$is_upe_checkout_enabled = WC_Stripe_Feature_Flags::is_upe_checkout_enabled();

		if ( $this->was_upe_checkout_enabled !== $is_upe_checkout_enabled ) {
			add_action( 'admin_enqueue_scripts', [ $this, 'upe_toggle_script' ] );
		}
	}

	/**
	 * Enqueues the script to determine what to do once UPE has been toggled.
	 */
	public function upe_toggle_script() {
		// Webpack generates an assets file containing a dependencies array for our built JS file.
		$script_asset_path = WC_STRIPE_PLUGIN_PATH . '/build/old_settings_upe_toggle.asset.php';
		$script_asset      = file_exists( $script_asset_path )
			? require $script_asset_path
			: [
				'dependencies' => [],
				'version'      => WC_STRIPE_VERSION,
			];

		wp_register_script(
			'woocommerce_stripe_old_settings_upe_toggle',
			plugins_url( 'build/old_settings_upe_toggle.js', WC_STRIPE_MAIN_FILE ),
			$script_asset['dependencies'],
			$script_asset['version'],
			true
		);
		wp_localize_script(
			'woocommerce_stripe_old_settings_upe_toggle',
			'wc_stripe_old_settings_param',
			[
				'was_upe_enabled' => $this->was_upe_checkout_enabled,
				'is_upe_enabled'  => WC_Stripe_Feature_Flags::is_upe_checkout_enabled(),
			]
		);
		wp_set_script_translations(
			'woocommerce_stripe_old_settings_upe_toggle',
			'woocommerce-gateway-stripe'
		);
		wp_enqueue_script( 'woocommerce_stripe_old_settings_upe_toggle' );
	}
}