woocommerce-paypal-payments/modules.local/ppcp-wc-gateway/src/WcGatewayModule.php

231 lines
8.2 KiB
PHP
Raw Normal View History

2020-04-02 08:38:00 +03:00
<?php
2020-04-13 22:30:57 +03:00
2020-04-02 08:38:00 +03:00
declare(strict_types=1);
namespace Inpsyde\PayPalCommerce\WcGateway;
use Dhii\Container\ServiceProvider;
use Dhii\Modular\Module\ModuleInterface;
2020-04-28 11:42:23 +03:00
use Inpsyde\PayPalCommerce\AdminNotices\Repository\Repository;
use Inpsyde\PayPalCommerce\ApiClient\Helper\DccApplies;
use Inpsyde\PayPalCommerce\WcGateway\Admin\OrderDetail;
2020-04-23 11:19:09 +03:00
use Inpsyde\PayPalCommerce\WcGateway\Admin\OrderTablePaymentStatusColumn;
use Inpsyde\PayPalCommerce\WcGateway\Admin\PaymentStatusOrderDetail;
use Inpsyde\PayPalCommerce\WcGateway\Checkout\CheckoutPayPalAddressPreset;
2020-04-02 08:38:00 +03:00
use Inpsyde\PayPalCommerce\WcGateway\Checkout\DisableGateways;
2020-08-18 08:46:18 +03:00
use Inpsyde\PayPalCommerce\WcGateway\Gateway\PayPalGateway;
use Inpsyde\PayPalCommerce\WcGateway\Notice\ConnectAdminNotice;
2020-07-10 08:39:58 +03:00
use Inpsyde\PayPalCommerce\WcGateway\Settings\Settings;
use Inpsyde\PayPalCommerce\WcGateway\Settings\SettingsRenderer;
2020-04-02 08:38:00 +03:00
use Interop\Container\ServiceProviderInterface;
use Psr\Container\ContainerInterface;
class WcGatewayModule implements ModuleInterface
{
public function setup(): ServiceProviderInterface
{
return new ServiceProvider(
2020-04-13 22:30:57 +03:00
require __DIR__ . '/../services.php',
require __DIR__ . '/../extensions.php'
2020-04-02 08:38:00 +03:00
);
}
2020-04-06 11:16:18 +03:00
public function run(ContainerInterface $container)
2020-04-02 08:38:00 +03:00
{
2020-07-02 12:48:40 +03:00
$this->registerPaymentGateway($container);
$this->registerOrderFunctionality($container);
$this->registerColumns($container);
$this->registerCheckoutAddressPreset($container);
2020-07-02 12:48:40 +03:00
add_filter(
Repository::NOTICES_FILTER,
static function ($notices) use ($container): array {
$notice = $container->get('wcgateway.notice.connect');
/**
* @var ConnectAdminNotice $notice
*/
$connectMessage = $notice->connectMessage();
if ($connectMessage) {
$notices[] = $connectMessage;
}
$authorizeOrderAction = $container->get('wcgateway.notice.authorize-order-action');
$authorizedMessage = $authorizeOrderAction->message();
if ($authorizedMessage) {
$notices[] = $authorizedMessage;
}
return $notices;
}
);
2020-07-10 08:39:58 +03:00
add_action(
'wp_ajax_woocommerce_toggle_gateway_enabled',
2020-07-10 12:34:29 +03:00
static function () use ($container) {
2020-07-10 08:39:58 +03:00
if (
2020-07-10 12:34:29 +03:00
! current_user_can('manage_woocommerce')
2020-07-10 08:39:58 +03:00
|| ! check_ajax_referer(
'woocommerce-toggle-payment-gateway-enabled',
'security'
)
2020-07-10 12:34:29 +03:00
|| ! isset($_POST['gateway_id'])
2020-07-10 08:39:58 +03:00
) {
return;
}
/**
* @var Settings $settings
*/
$settings = $container->get('wcgateway.settings');
$enabled = $settings->has('enabled') ? $settings->get('enabled') : false;
if (! $enabled) {
return;
}
$settings->set('enabled', false);
$settings->persist();
},
9
);
add_action(
'woocommerce-paypal-commerce-gateway.deactivate',
2020-07-10 12:34:29 +03:00
static function () use ($container) {
delete_option(Settings::KEY);
}
);
2020-07-02 12:48:40 +03:00
}
private function registerPaymentGateWay(ContainerInterface $container)
{
2020-04-02 08:38:00 +03:00
add_filter(
'woocommerce_payment_gateways',
2020-04-28 12:31:12 +03:00
static function ($methods) use ($container): array {
2020-08-18 08:46:18 +03:00
$methods[] = $container->get('wcgateway.paypal-gateway');
$dccApplies = $container->get('api.helpers.dccapplies');
/**
* @var DccApplies $dccApplies
*/
if ($dccApplies->forCountryCurrency()) {
$methods[] = $container->get('wcgateway.credit-card-gateway');
}
2020-04-13 22:30:57 +03:00
return (array)$methods;
2020-04-02 08:38:00 +03:00
}
);
add_action(
'woocommerce_settings_save_checkout',
static function () use ($container) {
$listener = $container->get('wcgateway.settings.listener');
$listener->listen();
}
);
add_filter(
'woocommerce_form_field',
static function ($field, $key, $args, $value) use ($container) {
$renderer = $container->get('wcgateway.settings.render');
/**
* @var SettingsRenderer $renderer
*/
2020-08-14 10:06:05 +03:00
$field = $renderer->renderMultiSelect($field, $key, $args, $value);
$field = $renderer->renderPassword($field, $key, $args, $value);
2020-08-14 10:09:11 +03:00
$field = $renderer->renderTextInput($field, $key, $args, $value);
$field = $renderer->renderHeading($field, $key, $args, $value);
2020-08-14 10:06:05 +03:00
return $field;
},
10,
4
);
2020-04-02 08:38:00 +03:00
add_filter(
'woocommerce_available_payment_gateways',
2020-04-28 12:31:12 +03:00
static function ($methods) use ($container): array {
2020-04-06 11:16:18 +03:00
$disabler = $container->get('wcgateway.disabler');
2020-04-02 08:38:00 +03:00
/**
* @var DisableGateways $disabler
*/
2020-04-13 22:30:57 +03:00
return $disabler->handler((array)$methods);
2020-04-02 08:38:00 +03:00
}
);
2020-07-02 12:48:40 +03:00
}
2020-04-13 12:39:34 +03:00
2020-07-02 12:48:40 +03:00
private function registerOrderFunctionality(ContainerInterface $container)
{
2020-04-13 12:39:34 +03:00
add_filter(
'woocommerce_order_actions',
2020-04-28 12:31:12 +03:00
static function ($orderActions): array {
2020-04-13 12:39:34 +03:00
$orderActions['ppcp_authorize_order'] = __(
2020-04-22 16:05:59 +03:00
'Capture authorized PayPal payment',
2020-07-10 08:51:02 +03:00
'woocommerce-paypal-commerce-gateway'
2020-04-13 12:39:34 +03:00
);
return $orderActions;
}
);
add_action(
'woocommerce_order_action_ppcp_authorize_order',
2020-04-28 12:31:12 +03:00
static function (\WC_Order $wcOrder) use ($container) {
2020-04-13 12:39:34 +03:00
/**
2020-08-18 08:46:18 +03:00
* @var PayPalGateway $gateway
2020-04-13 12:39:34 +03:00
*/
2020-08-18 08:46:18 +03:00
$gateway = $container->get('wcgateway.paypal-gateway');
2020-04-14 19:19:29 +03:00
$gateway->captureAuthorizedPayment($wcOrder);
2020-04-13 12:39:34 +03:00
}
);
2020-07-02 12:48:40 +03:00
}
2020-04-13 22:30:57 +03:00
2020-07-02 12:48:40 +03:00
private function registerColumns(ContainerInterface $container)
{
add_action(
'woocommerce_order_actions_start',
2020-04-28 12:31:12 +03:00
static function ($wcOrderId) use ($container) {
/**
2020-04-23 11:19:09 +03:00
* @var PaymentStatusOrderDetail $class
*/
2020-04-23 11:19:09 +03:00
$class = $container->get('wcgateway.admin.order-payment-status');
$class->render(intval($wcOrderId));
}
);
add_filter(
'manage_edit-shop_order_columns',
2020-04-28 12:31:12 +03:00
static function ($columns) use ($container) {
/**
2020-04-23 11:19:09 +03:00
* @var OrderTablePaymentStatusColumn $paymentStatusColumn
*/
2020-04-23 11:19:09 +03:00
$paymentStatusColumn = $container->get('wcgateway.admin.orders-payment-status-column');
return $paymentStatusColumn->register($columns);
}
);
add_action(
'manage_shop_order_posts_custom_column',
2020-04-28 12:31:12 +03:00
static function ($column, $wcOrderId) use ($container) {
/**
2020-04-23 11:19:09 +03:00
* @var OrderTablePaymentStatusColumn $paymentStatusColumn
*/
2020-04-23 11:19:09 +03:00
$paymentStatusColumn = $container->get('wcgateway.admin.orders-payment-status-column');
$paymentStatusColumn->render($column, intval($wcOrderId));
},
10,
2
);
2020-04-02 08:38:00 +03:00
}
private function registerCheckoutAddressPreset(ContainerInterface $container): void
{
add_filter(
'woocommerce_checkout_get_value',
static function (...$args) use ($container) {
// It's important to not instantiate the service to early
// as it depends on SessionHandler and WooCommerce Session
/* @var CheckoutPayPalAddressPreset $service */
$service = $container->get('wcgateway.checkout.address-preset');
return $service->filterCheckoutFiled(...$args);
},
10,
2
);
}
2020-04-06 11:16:18 +03:00
}