File "OnboardingAssets.php"

Full Path: /home/siazco/grocery.siazco.se/wp-content/plugins/woocommerce-paypal-payments/modules/ppcp-onboarding/src/Assets/OnboardingAssets.php
File size: 5.13 KB
MIME-type: text/x-php
Charset: utf-8

<?php
/**
 * Registers and enqueues the assets for the Onboarding process.
 *
 * @package WooCommerce\PayPalCommerce\Onboarding\Assets
 */

declare(strict_types=1);

namespace WooCommerce\PayPalCommerce\Onboarding\Assets;

use WooCommerce\PayPalCommerce\Onboarding\Endpoint\LoginSellerEndpoint;
use WooCommerce\PayPalCommerce\Onboarding\Endpoint\UpdateSignupLinksEndpoint;
use WooCommerce\PayPalCommerce\Onboarding\Environment;
use WooCommerce\PayPalCommerce\Onboarding\State;
use WooCommerce\PayPalCommerce\WcGateway\Settings\Settings;

/**
 * Class OnboardingAssets
 */
class OnboardingAssets {

	/**
	 * The URL to the module.
	 *
	 * @var string
	 */
	private $module_url;

	/**
	 * The assets version.
	 *
	 * @var string
	 */
	private $version;

	/**
	 * The State.
	 *
	 * @var State
	 */
	private $state;

	/**
	 * The Environment.
	 *
	 * @var Environment
	 */
	private $environment;

	/**
	 * The LoginSeller Endpoint.
	 *
	 * @var LoginSellerEndpoint
	 */
	private $login_seller_endpoint;

	/**
	 * ID of the current PPCP gateway settings page, or empty if it is not such page.
	 *
	 * @var string
	 */
	protected $page_id;

	/**
	 * OnboardingAssets constructor.
	 *
	 * @param string              $module_url                         The URL to the module.
	 * @param string              $version                            The assets version.
	 * @param State               $state                               The State object.
	 * @param Environment         $environment  The Environment.
	 * @param LoginSellerEndpoint $login_seller_endpoint The LoginSeller endpoint.
	 * @param string              $page_id ID of the current PPCP gateway settings page, or empty if it is not such page.
	 */
	public function __construct(
		string $module_url,
		string $version,
		State $state,
		Environment $environment,
		LoginSellerEndpoint $login_seller_endpoint,
		string $page_id
	) {

		$this->module_url            = untrailingslashit( $module_url );
		$this->version               = $version;
		$this->state                 = $state;
		$this->environment           = $environment;
		$this->login_seller_endpoint = $login_seller_endpoint;
		$this->page_id               = $page_id;
	}

	/**
	 * Registers the scripts.
	 *
	 * @return bool
	 */
	public function register(): bool {

		wp_register_style(
			'ppcp-onboarding',
			$this->module_url . '/assets/css/onboarding.css',
			array(),
			$this->version
		);

		wp_register_script(
			'ppcp-settings',
			$this->module_url . '/assets/js/settings.js',
			array(),
			$this->version,
			true
		);

		wp_localize_script(
			'ppcp-settings',
			'PayPalCommerceSettings',
			array(
				'empty_smart_button_location_message' => sprintf(
					'<p class="description ppcp-empty-smart-button-location">%1$s</p>',
					__( 'Note: PayPal buttons and advanced payment features (Alternative Payment Methods, Subscriptions, etc.) are unavailable if no Smart Button Location is configured.', 'woocommerce-paypal-payments' )
				),
			)
		);

		wp_register_script(
			'ppcp-onboarding',
			$this->module_url . '/assets/js/onboarding.js',
			array( 'jquery' ),
			$this->version,
			true
		);

		wp_localize_script(
			'ppcp-onboarding',
			'PayPalCommerceGatewayOnboarding',
			$this->get_script_data()
		);

		return true;
	}

	/**
	 * Returns the data associated to the onboarding script.
	 *
	 * @return array
	 */
	public function get_script_data() {
		return array(
			'endpoint'                     => \WC_AJAX::get_endpoint( LoginSellerEndpoint::ENDPOINT ),
			'nonce'                        => wp_create_nonce( $this->login_seller_endpoint::nonce() ),
			'paypal_js_url'                => 'https://www.paypal.com/webapps/merchantboarding/js/lib/lightbox/partner.js',
			'sandbox_state'                => State::get_state_name( $this->state->sandbox_state() ),
			'production_state'             => State::get_state_name( $this->state->production_state() ),
			'current_state'                => State::get_state_name( $this->state->current_state() ),
			'current_env'                  => $this->environment->current_environment(),
			'error_messages'               => array(
				'no_credentials' => __( 'API credentials must be entered to save the settings.', 'woocommerce-paypal-payments' ),
			),
			'update_signup_links_endpoint' => \WC_AJAX::get_endpoint( UpdateSignupLinksEndpoint::ENDPOINT ),
			'update_signup_links_nonce'    => wp_create_nonce( UpdateSignupLinksEndpoint::ENDPOINT ),
		);
	}

	/**
	 * Enqueues the necessary scripts.
	 *
	 * @return void
	 */
	public function enqueue(): void {
		// Do not enqueue anything when we are not on a PayPal Payments settings tab.
		if ( ! $this->page_id ) {
			return;
		}

		// Enqueue general assets for the plugin's settings page.
		wp_enqueue_script( 'ppcp-settings' );
		wp_enqueue_style( 'ppcp-onboarding' ); // File also contains general settings styles.

		// Conditionally enqueue the onboarding script, when needed.
		if ( $this->should_render_onboarding_script() ) {
			wp_enqueue_script( 'ppcp-onboarding' );
		}
	}

	/**
	 * Whether the onboarding script should be rendered or not.
	 *
	 * @return bool
	 */
	private function should_render_onboarding_script(): bool {
		return Settings::CONNECTION_TAB_ID === $this->page_id;
	}
}