Merge pull request #2235 from woocommerce/PCP-3091-requirement-user-must-have-seen-a-pay-pal-button-before-using-fastlane

AXO: Force the Paypal button display in Cart before using Fastlane (3091)
This commit is contained in:
Emili Castells 2024-05-23 16:14:48 +02:00 committed by GitHub
commit 7f71e3af26
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
5 changed files with 98 additions and 5 deletions

View file

@ -13,7 +13,10 @@ use WooCommerce\PayPalCommerce\Axo\Assets\AxoManager;
use WooCommerce\PayPalCommerce\Axo\Gateway\AxoGateway; use WooCommerce\PayPalCommerce\Axo\Gateway\AxoGateway;
use WooCommerce\PayPalCommerce\Axo\Helper\ApmApplies; use WooCommerce\PayPalCommerce\Axo\Helper\ApmApplies;
use WooCommerce\PayPalCommerce\Vendor\Psr\Container\ContainerInterface; use WooCommerce\PayPalCommerce\Vendor\Psr\Container\ContainerInterface;
use WooCommerce\PayPalCommerce\WcGateway\Gateway\CreditCardGateway;
use WooCommerce\PayPalCommerce\WcGateway\Gateway\PayPalGateway;
use WooCommerce\PayPalCommerce\WcGateway\Helper\CartCheckoutDetector; use WooCommerce\PayPalCommerce\WcGateway\Helper\CartCheckoutDetector;
use WooCommerce\PayPalCommerce\WcGateway\Settings\Settings;
return array( return array(
@ -191,6 +194,34 @@ return array(
return ''; return '';
} }
return '<div class="ppcp-notice ppcp-notice-error"><p>' . $notice_content . '</p></div>';
},
'axo.smart-button-location-notice' => static function ( ContainerInterface $container ) : string {
$settings = $container->get( 'wcgateway.settings' );
assert( $settings instanceof Settings );
if ( $settings->has( 'axo_enabled' ) && $settings->get( 'axo_enabled' ) ) {
$fastlane_settings_url = admin_url(
sprintf(
'admin.php?page=wc-settings&tab=checkout&section=%1$s&ppcp-tab=%2$s#field-axo_heading',
PayPalGateway::ID,
CreditCardGateway::ID
)
);
$notice_content = sprintf(
/* translators: %1$s: URL to the Checkout edit page. */
__(
'<span class="highlight">Important:</span> The <code>Cart</code> & <code>Classic Cart</code> <strong>Smart Button Locations</strong> cannot be disabled while <a href="%1$s">Fastlane</a> is active.',
'woocommerce-paypal-payments'
),
esc_url( $fastlane_settings_url )
);
} else {
return '';
}
return '<div class="ppcp-notice ppcp-notice-warning"><p>' . $notice_content . '</p></div>'; return '<div class="ppcp-notice ppcp-notice-warning"><p>' . $notice_content . '</p></div>';
}, },
); );

View file

@ -24,6 +24,7 @@ use WooCommerce\PayPalCommerce\Vendor\Psr\Container\ContainerInterface;
use WooCommerce\PayPalCommerce\WcGateway\Gateway\CreditCardGateway; use WooCommerce\PayPalCommerce\WcGateway\Gateway\CreditCardGateway;
use WooCommerce\PayPalCommerce\WcGateway\Settings\Settings; use WooCommerce\PayPalCommerce\WcGateway\Settings\Settings;
use WooCommerce\PayPalCommerce\WcGateway\Helper\CartCheckoutDetector; use WooCommerce\PayPalCommerce\WcGateway\Helper\CartCheckoutDetector;
use WooCommerce\PayPalCommerce\WcGateway\Settings\SettingsListener;
/** /**
* Class AxoModule * Class AxoModule
@ -108,6 +109,27 @@ class AxoModule implements ModuleInterface {
} }
); );
// Force 'cart-block' and 'cart' Smart Button locations in the settings.
add_action(
'admin_init',
static function () use ( $c ) {
$listener = $c->get( 'wcgateway.settings.listener' );
assert( $listener instanceof SettingsListener );
$settings = $c->get( 'wcgateway.settings' );
assert( $settings instanceof Settings );
$listener->filter_settings(
$settings->has( 'axo_enabled' ) && $settings->get( 'axo_enabled' ),
'smart_button_locations',
function( array $existing_setting_value ) {
$axo_forced_locations = array( 'cart-block', 'cart' );
return array_unique( array_merge( $existing_setting_value, $axo_forced_locations ) );
}
);
}
);
add_action( add_action(
'init', 'init',
function () use ( $c, $module ) { function () use ( $c, $module ) {

View file

@ -61,17 +61,33 @@ $background-ident-color: #fbfbfb;
border: 1px solid #c3c4c7; border: 1px solid #c3c4c7;
border-left-width: 4px; border-left-width: 4px;
box-shadow: 0 1px 1px rgba(0, 0, 0, 0.04); box-shadow: 0 1px 1px rgba(0, 0, 0, 0.04);
margin: 5px 0px 2px; margin: 5px 15px 2px 0;
padding: 0px 12px 4px 12px; padding: 1px 12px;
p, .form-table td & p {
margin-top: 4px;
margin-bottom: 4px;
}
.highlight {
background: transparent;
font-weight: 600;
}
} }
.ppcp-notice-warning { .ppcp-notice-warning {
border-left-color: #dba617; border-left-color: #dba617;
.highlight { .highlight {
background: transparent;
color: #dba617; color: #dba617;
font-weight: 600; }
}
.ppcp-notice-error {
border-left-color: #d63638;
.highlight {
color: #d63638;
} }
} }

View file

@ -65,7 +65,7 @@ return function ( ContainerInterface $container, array $fields ): array {
'type' => 'ppcp-multiselect', 'type' => 'ppcp-multiselect',
'input_class' => array( 'wc-enhanced-select' ), 'input_class' => array( 'wc-enhanced-select' ),
'default' => $container->get( 'wcgateway.button.default-locations' ), 'default' => $container->get( 'wcgateway.button.default-locations' ),
'description' => __( 'Select where the PayPal smart buttons should be displayed.', 'woocommerce-paypal-payments' ), 'description' => __( 'Select where the PayPal smart buttons should be displayed.', 'woocommerce-paypal-payments' ) . $container->get( 'axo.smart-button-location-notice' ),
'options' => $container->get( 'wcgateway.button.locations' ), 'options' => $container->get( 'wcgateway.button.locations' ),
'screens' => array( State::STATE_START, State::STATE_ONBOARDED ), 'screens' => array( State::STATE_START, State::STATE_ONBOARDED ),
'requirements' => array(), 'requirements' => array(),

View file

@ -745,4 +745,28 @@ class SettingsListener {
} }
} }
/**
* Filter settings based on a condition.
*
* @param bool $condition The condition.
* @param string $setting_slug The setting slug.
* @param callable $filter_function The filter function.
* @param bool $persist Whether to persist the settings.
*/
public function filter_settings( bool $condition, string $setting_slug, callable $filter_function, bool $persist = true ): void {
if ( ! $this->is_valid_site_request() || State::STATE_ONBOARDED !== $this->state->current_state() ) {
return;
}
$existing_setting_value = $this->settings->has( $setting_slug ) ? $this->settings->get( $setting_slug ) : null;
if ( $condition ) {
$new_setting_value = $filter_function( $existing_setting_value );
$this->settings->set( $setting_slug, $new_setting_value );
if ( $persist ) {
$this->settings->persist();
}
}
}
} }