Skip to content

Commit 713d1f7

Browse files
authored
Merge pull request #4544 from woocommerce/dev/PCP-6677-relocate-shared-order-ajax-plumbing-into-a-neutral-module-move-dont-improve
Relocate shared order/AJAX plumbing into a neutral module (6677)
2 parents c8c7631 + edfd6be commit 713d1f7

71 files changed

Lines changed: 414 additions & 280 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

modules.php

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
( require "$modules_dir/ppcp-admin-notices/module.php" )(),
2222
( require "$modules_dir/ppcp-api-client/module.php" )(),
2323
( require "$modules_dir/ppcp-compat/module.php" )(),
24+
( require "$modules_dir/ppcp-order-endpoints/module.php" )(),
2425
( require "$modules_dir/ppcp-button/module.php" )(),
2526
( require "$modules_dir/ppcp-session/module.php" )(),
2627
( require "$modules_dir/ppcp-status-report/module.php" )(),

modules/ppcp-admin-notices/src/Endpoint/MuteMessageEndpoint.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99

1010
namespace WooCommerce\PayPalCommerce\AdminNotices\Endpoint;
1111

12-
use WooCommerce\PayPalCommerce\Button\Endpoint\RequestData;
12+
use WooCommerce\PayPalCommerce\OrderEndpoints\Endpoint\RequestData;
1313
use WooCommerce\PayPalCommerce\Button\Exception\NonceValidationException;
1414
use WooCommerce\PayPalCommerce\Button\Exception\RuntimeException;
1515
use WooCommerce\PayPalCommerce\AdminNotices\Entity\PersistentMessage;

modules/ppcp-applepay/src/Assets/ApplePayButton.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@
1515
use WooCommerce\PayPalCommerce\Applepay\ApplePayGateway;
1616
use WooCommerce\PayPalCommerce\Assets\AssetGetter;
1717
use WooCommerce\PayPalCommerce\Button\Assets\ButtonInterface;
18-
use WooCommerce\PayPalCommerce\Button\Helper\CartProductsHelper;
18+
use WooCommerce\PayPalCommerce\OrderEndpoints\Helper\CartProductsHelper;
1919
use WooCommerce\PayPalCommerce\Button\Helper\Context;
2020
use WooCommerce\PayPalCommerce\Settings\Data\PaymentSettings;
2121
use WooCommerce\PayPalCommerce\Settings\Data\SettingsProvider;

modules/ppcp-axo/src/Endpoint/AxoScriptAttributes.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
use WooCommerce\PayPalCommerce\ApiClient\Authentication\SdkClientToken;
77
use WooCommerce\PayPalCommerce\ApiClient\Exception\PayPalApiException;
88
use WooCommerce\PayPalCommerce\Button\Endpoint\EndpointInterface;
9-
use WooCommerce\PayPalCommerce\Button\Endpoint\RequestData;
9+
use WooCommerce\PayPalCommerce\OrderEndpoints\Endpoint\RequestData;
1010
use WooCommerce\PayPalCommerce\Button\Exception\NonceValidationException;
1111
use WooCommerce\PayPalCommerce\Button\Helper\Context;
1212

modules/ppcp-axo/src/Endpoint/FrontendLogger.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212
use Exception;
1313
use Psr\Log\LoggerInterface;
1414
use WooCommerce\PayPalCommerce\Button\Endpoint\EndpointInterface;
15-
use WooCommerce\PayPalCommerce\Button\Endpoint\RequestData;
15+
use WooCommerce\PayPalCommerce\OrderEndpoints\Endpoint\RequestData;
1616
use WooCommerce\PayPalCommerce\Button\Exception\NonceValidationException;
1717

1818
/**

modules/ppcp-blocks/extensions.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@
2828
return $locations;
2929
},
3030

31-
'button.pay-now-contexts' => function ( array $contexts, ContainerInterface $container ): array {
31+
'order-endpoints.pay-now-contexts' => function ( array $contexts, ContainerInterface $container ): array {
3232
if ( ! $container->get( 'blocks.settings.final_review_enabled' ) ) {
3333
$contexts[] = 'checkout-block';
3434
$contexts[] = 'cart-block';
@@ -37,7 +37,7 @@
3737
return $contexts;
3838
},
3939

40-
'button.handle-shipping-in-paypal' => function ( bool $previous, ContainerInterface $container ): bool {
40+
'order-endpoints.handle-shipping-in-paypal' => function ( bool $previous, ContainerInterface $container ): bool {
4141
return ! $container->get( 'blocks.settings.final_review_enabled' );
4242
},
4343
);

modules/ppcp-blocks/services.php

Lines changed: 2 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111

1212
use WooCommerce\PayPalCommerce\Assets\AssetGetter;
1313
use WooCommerce\PayPalCommerce\Assets\AssetGetterFactory;
14-
use WooCommerce\PayPalCommerce\Blocks\Endpoint\UpdateShippingEndpoint;
14+
use WooCommerce\PayPalCommerce\OrderEndpoints\Endpoint\UpdateShippingEndpoint;
1515
use WooCommerce\PayPalCommerce\Settings\Data\SettingsProvider;
1616
use WooCommerce\PayPalCommerce\Vendor\Psr\Container\ContainerInterface;
1717
use WooCommerce\PayPalCommerce\Button\Assets\SmartButtonInterface;
@@ -67,13 +67,7 @@ function () use ( $container ): SmartButtonInterface {
6767
},
6868

6969
'blocks.endpoint.update-shipping' => static function ( ContainerInterface $container ): UpdateShippingEndpoint {
70-
return new UpdateShippingEndpoint(
71-
$container->get( 'button.request-data' ),
72-
$container->get( 'api.endpoint.order' ),
73-
$container->get( 'api.factory.purchase-unit' ),
74-
$container->get( 'session.handler' ),
75-
$container->get( 'woocommerce.logger.woocommerce' )
76-
);
70+
return $container->get( 'order-endpoints.endpoint.update-shipping' );
7771
},
7872

7973
'blocks.add-place-order-method' => function ( ContainerInterface $container ): bool {

modules/ppcp-blocks/src/BlocksModule.php

Lines changed: 0 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,6 @@
1111

1212
use Automattic\WooCommerce\Blocks\Payments\PaymentMethodRegistry;
1313
use WooCommerce\PayPalCommerce\Assets\AssetGetter;
14-
use WooCommerce\PayPalCommerce\Blocks\Endpoint\UpdateShippingEndpoint;
1514
use WooCommerce\PayPalCommerce\Button\Assets\SmartButtonInterface;
1615
use WooCommerce\PayPalCommerce\Vendor\Inpsyde\Modularity\Module\ExecutableModule;
1716
use WooCommerce\PayPalCommerce\Vendor\Inpsyde\Modularity\Module\ExtendingModule;
@@ -88,16 +87,6 @@ function ( PaymentMethodRegistry $payment_method_registry ) use ( $c ): void {
8887
)
8988
);
9089

91-
add_action(
92-
'wc_ajax_' . UpdateShippingEndpoint::ENDPOINT,
93-
static function () use ( $c ) {
94-
$endpoint = $c->get( 'blocks.endpoint.update-shipping' );
95-
assert( $endpoint instanceof UpdateShippingEndpoint );
96-
97-
$endpoint->handle_request();
98-
}
99-
);
100-
10190
// Enqueue frontend scripts.
10291
add_action(
10392
'wp_enqueue_scripts',

modules/ppcp-blocks/src/PayPalPaymentMethod.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212
use Automattic\WooCommerce\Blocks\Payments\Integrations\AbstractPaymentMethodType;
1313
use WC_AJAX;
1414
use WooCommerce\PayPalCommerce\Assets\AssetGetter;
15-
use WooCommerce\PayPalCommerce\Blocks\Endpoint\UpdateShippingEndpoint;
15+
use WooCommerce\PayPalCommerce\OrderEndpoints\Endpoint\UpdateShippingEndpoint;
1616
use WooCommerce\PayPalCommerce\Button\Assets\SmartButtonInterface;
1717
use WooCommerce\PayPalCommerce\Session\Cancellation\CancelController;
1818
use WooCommerce\PayPalCommerce\Session\Cancellation\CancelView;

modules/ppcp-button/services.php

Lines changed: 20 additions & 117 deletions
Original file line numberDiff line numberDiff line change
@@ -14,27 +14,26 @@
1414
use WooCommerce\PayPalCommerce\Button\Assets\DisabledSmartButton;
1515
use WooCommerce\PayPalCommerce\Button\Assets\SmartButton;
1616
use WooCommerce\PayPalCommerce\Button\Assets\SmartButtonInterface;
17-
use WooCommerce\PayPalCommerce\Button\Endpoint\ApproveOrderEndpoint;
17+
use WooCommerce\PayPalCommerce\OrderEndpoints\Endpoint\ApproveOrderEndpoint;
1818
use WooCommerce\PayPalCommerce\Button\Endpoint\ApproveSubscriptionEndpoint;
1919
use WooCommerce\PayPalCommerce\Button\Endpoint\CartScriptParamsEndpoint;
20-
use WooCommerce\PayPalCommerce\Button\Endpoint\ChangeCartEndpoint;
21-
use WooCommerce\PayPalCommerce\Button\Endpoint\CreateOrderEndpoint;
20+
use WooCommerce\PayPalCommerce\OrderEndpoints\Endpoint\ChangeCartEndpoint;
21+
use WooCommerce\PayPalCommerce\OrderEndpoints\Endpoint\CreateOrderEndpoint;
2222
use WooCommerce\PayPalCommerce\Button\Endpoint\DataClientIdEndpoint;
2323
use WooCommerce\PayPalCommerce\Button\Endpoint\GetOrderEndpoint;
24-
use WooCommerce\PayPalCommerce\Button\Endpoint\RequestData;
24+
use WooCommerce\PayPalCommerce\OrderEndpoints\Endpoint\RequestData;
2525
use WooCommerce\PayPalCommerce\Button\Endpoint\SaveCheckoutFormEndpoint;
2626
use WooCommerce\PayPalCommerce\Button\Endpoint\SimulateCartEndpoint;
2727
use WooCommerce\PayPalCommerce\Button\Endpoint\ValidateCheckoutEndpoint;
28-
use WooCommerce\PayPalCommerce\Button\Exception\RuntimeException;
29-
use WooCommerce\PayPalCommerce\Button\Helper\CartProductsHelper;
28+
use WooCommerce\PayPalCommerce\OrderEndpoints\Helper\CartProductsHelper;
3029
use WooCommerce\PayPalCommerce\Button\Helper\CheckoutFormSaver;
3130
use WooCommerce\PayPalCommerce\Button\Helper\Context;
3231
use WooCommerce\PayPalCommerce\Button\Helper\DisabledFundingSources;
33-
use WooCommerce\PayPalCommerce\Button\Helper\EarlyOrderHandler;
32+
use WooCommerce\PayPalCommerce\OrderEndpoints\Helper\EarlyOrderHandler;
3433
use WooCommerce\PayPalCommerce\Button\Helper\IsolatedCartSimulator;
3534
use WooCommerce\PayPalCommerce\Button\Helper\MessagesApply;
3635
use WooCommerce\PayPalCommerce\Button\Helper\ThreeDSecure;
37-
use WooCommerce\PayPalCommerce\Button\Helper\WooCommerceOrderCreator;
36+
use WooCommerce\PayPalCommerce\OrderEndpoints\Helper\WooCommerceOrderCreator;
3837
use WooCommerce\PayPalCommerce\Button\Session\CartDataFactory;
3938
use WooCommerce\PayPalCommerce\Button\Session\CartDataTransientStorage;
4039
use WooCommerce\PayPalCommerce\Button\Validation\CheckoutFormValidator;
@@ -161,16 +160,10 @@
161160
return $factory->for_module( 'ppcp-button' );
162161
},
163162
'button.pay-now-contexts' => static function ( ContainerInterface $container ): array {
164-
$defaults = array( 'checkout', 'pay-now' );
165-
166-
if ( $container->get( 'button.handle-shipping-in-paypal' ) ) {
167-
return array_merge( $defaults, array( 'cart', 'product', 'mini-cart' ) );
168-
}
169-
170-
return $defaults;
163+
return $container->get( 'order-endpoints.pay-now-contexts' );
171164
},
172165
'button.request-data' => static function ( ContainerInterface $container ): RequestData {
173-
return new RequestData();
166+
return $container->get( 'order-endpoints.request-data' );
174167
},
175168
'button.endpoint.simulate-cart' => static function ( ContainerInterface $container ): SimulateCartEndpoint {
176169
return new SimulateCartEndpoint(
@@ -182,88 +175,16 @@
182175
);
183176
},
184177
'button.endpoint.change-cart' => static function ( ContainerInterface $container ): ChangeCartEndpoint {
185-
if ( ! \WC()->cart ) {
186-
throw new RuntimeException( 'cant initialize endpoint at this moment' );
187-
}
188-
$cart = WC()->cart;
189-
$shipping = WC()->shipping();
190-
$request_data = $container->get( 'button.request-data' );
191-
$purchase_unit_factory = $container->get( 'api.factory.purchase-unit' );
192-
$cart_products = $container->get( 'button.helper.cart-products' );
193-
$logger = $container->get( 'woocommerce.logger.woocommerce' );
194-
return new ChangeCartEndpoint( $cart, $shipping, $request_data, $purchase_unit_factory, $cart_products, $logger );
178+
return $container->get( 'order-endpoints.endpoint.change-cart' );
195179
},
196180
'button.endpoint.create-order' => static function ( ContainerInterface $container ): CreateOrderEndpoint {
197-
$request_data = $container->get( 'button.request-data' );
198-
$purchase_unit_factory = $container->get( 'api.factory.purchase-unit' );
199-
$order_endpoint = $container->get( 'api.endpoint.order' );
200-
$payer_factory = $container->get( 'api.factory.payer' );
201-
$session_handler = $container->get( 'session.handler' );
202-
$settings_provider = $container->get( 'settings.settings-provider' );
203-
$early_order_handler = $container->get( 'button.helper.early-order-handler' );
204-
$registration_needed = $container->get( 'button.current-user-must-register' );
205-
$logger = $container->get( 'woocommerce.logger.woocommerce' );
206-
return new CreateOrderEndpoint(
207-
$request_data,
208-
$purchase_unit_factory,
209-
$container->get( 'api.factory.shipping-preference' ),
210-
$container->get( 'api.factory.return-url' ),
211-
$container->get( 'api.factory.contact-preference' ),
212-
$container->get( 'wcgateway.builder.experience-context' ),
213-
$order_endpoint,
214-
$payer_factory,
215-
$session_handler,
216-
$settings_provider,
217-
$early_order_handler,
218-
$container->get( 'button.session.factory.card-data' ),
219-
$container->get( 'button.session.storage.card-data.transient' ),
220-
$registration_needed,
221-
$container->get( 'wcgateway.settings.card_billing_data_mode' ),
222-
$container->get( 'button.early-wc-checkout-validation-enabled' ),
223-
$container->get( 'button.pay-now-contexts' ),
224-
$container->get( 'button.handle-shipping-in-paypal' ),
225-
$container->get( 'wcgateway.server-side-shipping-callback-enabled' ),
226-
$container->get( 'wcgateway.funding-sources-without-redirect' ),
227-
$logger
228-
);
181+
return $container->get( 'order-endpoints.endpoint.create-order' );
229182
},
230183
'button.helper.early-order-handler' => static function ( ContainerInterface $container ): EarlyOrderHandler {
231-
return new EarlyOrderHandler(
232-
$container->get( 'settings.flag.is-connected' ),
233-
$container->get( 'wcgateway.order-processor' ),
234-
$container->get( 'session.handler' )
235-
);
184+
return $container->get( 'order-endpoints.helper.early-order-handler' );
236185
},
237186
'button.endpoint.approve-order' => static function ( ContainerInterface $container ): ApproveOrderEndpoint {
238-
$request_data = $container->get( 'button.request-data' );
239-
$order_endpoint = $container->get( 'api.endpoint.order' );
240-
$session_handler = $container->get( 'session.handler' );
241-
$three_d_secure = $container->get( 'button.helper.three-d-secure' );
242-
$settings_provider = $container->get( 'settings.settings-provider' );
243-
$settings_model = $container->get( 'settings.data.settings' );
244-
$dcc_applies = $container->get( 'api.helpers.dccapplies' );
245-
$order_helper = $container->get( 'api.order-helper' );
246-
$final_review_enabled = $container->get( 'blocks.settings.final_review_enabled' );
247-
$wc_order_creator = $container->get( 'button.helper.wc-order-creator' );
248-
$gateway = $container->get( 'wcgateway.paypal-gateway' );
249-
$logger = $container->get( 'woocommerce.logger.woocommerce' );
250-
$context = $container->get( 'button.helper.context' );
251-
252-
return new ApproveOrderEndpoint(
253-
$request_data,
254-
$order_endpoint,
255-
$session_handler,
256-
$three_d_secure,
257-
$settings_provider,
258-
$settings_model,
259-
$dcc_applies,
260-
$order_helper,
261-
$final_review_enabled,
262-
$gateway,
263-
$wc_order_creator,
264-
$logger,
265-
$context
266-
);
187+
return $container->get( 'order-endpoints.endpoint.approve-order' );
267188
},
268189
'button.endpoint.approve-subscription' => static function ( ContainerInterface $container ): ApproveSubscriptionEndpoint {
269190
return new ApproveSubscriptionEndpoint(
@@ -333,8 +254,7 @@
333254
);
334255
},
335256
'button.helper.cart-products' => static function ( ContainerInterface $container ): CartProductsHelper {
336-
$data_store = \WC_Data_Store::load( 'product' );
337-
return new CartProductsHelper( $data_store );
257+
return $container->get( 'order-endpoints.helper.cart-products' );
338258
},
339259
'button.helper.isolated-cart-simulator' => static function ( ContainerInterface $container ): IsolatedCartSimulator {
340260
return new IsolatedCartSimulator(
@@ -363,14 +283,13 @@
363283
);
364284
},
365285
'button.is-logged-in' => static function ( ContainerInterface $container ): bool {
366-
return is_user_logged_in();
286+
return $container->get( 'order-endpoints.is-logged-in' );
367287
},
368288
'button.registration-required' => static function ( ContainerInterface $container ): bool {
369-
return WC()->checkout()->is_registration_required();
289+
return $container->get( 'order-endpoints.registration-required' );
370290
},
371291
'button.current-user-must-register' => static function ( ContainerInterface $container ): bool {
372-
return ! $container->get( 'button.is-logged-in' ) &&
373-
$container->get( 'button.registration-required' );
292+
return $container->get( 'order-endpoints.current-user-must-register' );
374293
},
375294

376295
'button.basic-checkout-validation-enabled' => static function ( ContainerInterface $container ): bool {
@@ -381,12 +300,7 @@
381300
return (bool) apply_filters( 'woocommerce_paypal_payments_basic_checkout_validation_enabled', false );
382301
},
383302
'button.early-wc-checkout-validation-enabled' => static function ( ContainerInterface $container ): bool {
384-
/**
385-
* The filter allowing to disable the WC validation of the checkout form
386-
* when the PayPal button is clicked.
387-
* The validation is triggered in a non-standard way and may cause issues on some sites.
388-
*/
389-
return (bool) apply_filters( 'woocommerce_paypal_payments_early_wc_checkout_validation_enabled', true );
303+
return $container->get( 'order-endpoints.early-wc-checkout-validation-enabled' );
390304
},
391305
'button.validation.wc-checkout-validator' => static function ( ContainerInterface $container ): CheckoutFormValidator {
392306
return new CheckoutFormValidator();
@@ -415,23 +329,12 @@
415329
};
416330
},
417331

418-
/**
419-
* If true, the shipping methods are sent to PayPal allowing the customer to select it inside the popup.
420-
* May result in slower popup performance, additional loading.
421-
*/
422332
'button.handle-shipping-in-paypal' => static function ( ContainerInterface $container ): bool {
423-
return ! $container->get( 'blocks.settings.final_review_enabled' );
333+
return $container->get( 'order-endpoints.handle-shipping-in-paypal' );
424334
},
425335

426336
'button.helper.wc-order-creator' => static function ( ContainerInterface $container ): WooCommerceOrderCreator {
427-
return new WooCommerceOrderCreator(
428-
$container->get( 'wcgateway.funding-source.renderer' ),
429-
$container->get( 'session.handler' ),
430-
$container->get( 'wc-subscriptions.helper' ),
431-
$container->get( 'button.session.factory.card-data' ),
432-
$container->get( 'api.factory.shipping' ),
433-
$container->get( 'api.factory.payer' )
434-
);
337+
return $container->get( 'order-endpoints.helper.wc-order-creator' );
435338
},
436339

437340
'button.session.factory.card-data' => static function ( ContainerInterface $container ): CartDataFactory {

0 commit comments

Comments
 (0)