woocommerce-paypal-payments/modules/ppcp-order-tracking/services.php

104 lines
6.7 KiB
PHP

<?php
/**
* The order tracking module services.
*
* @package WooCommerce\PayPalCommerce\OrderTracking
*/
declare (strict_types=1);
namespace WooCommerce\PayPalCommerce\OrderTracking;
use WooCommerce\PayPalCommerce\Assets\AssetGetter;
use WooCommerce\PayPalCommerce\Assets\AssetGetterFactory;
use WooCommerce\PayPalCommerce\OrderTracking\Integration\DhlShipmentIntegration;
use WooCommerce\PayPalCommerce\OrderTracking\Integration\ShiptasticIntegration;
use WooCommerce\PayPalCommerce\OrderTracking\Integration\ShipmentTrackingIntegration;
use WooCommerce\PayPalCommerce\OrderTracking\Integration\ShipStationIntegration;
use WooCommerce\PayPalCommerce\OrderTracking\Integration\WcShippingTaxIntegration;
use WooCommerce\PayPalCommerce\OrderTracking\Integration\YithShipmentIntegration;
use WooCommerce\PayPalCommerce\OrderTracking\Shipment\ShipmentFactoryInterface;
use WooCommerce\PayPalCommerce\OrderTracking\Shipment\ShipmentFactory;
use WooCommerce\PayPalCommerce\Vendor\Psr\Container\ContainerInterface;
use WooCommerce\PayPalCommerce\OrderTracking\Assets\OrderEditPageAssets;
use WooCommerce\PayPalCommerce\OrderTracking\Endpoint\OrderTrackingEndpoint;
return array(
'order-tracking.assets' => function (ContainerInterface $container): OrderEditPageAssets {
return new OrderEditPageAssets($container->get('order-tracking.asset_getter'), $container->get('ppcp.asset-version'));
},
'order-tracking.shipment.factory' => static function (ContainerInterface $container): ShipmentFactoryInterface {
return new ShipmentFactory();
},
'order-tracking.endpoint.controller' => static function (ContainerInterface $container): OrderTrackingEndpoint {
return new OrderTrackingEndpoint($container->get('api.host'), $container->get('api.bearer'), $container->get('woocommerce.logger.woocommerce'), $container->get('button.request-data'), $container->get('order-tracking.shipment.factory'), $container->get('order-tracking.allowed-shipping-statuses'), $container->get('order-tracking.should-use-second-version-of-api'), $container->get('api.endpoint.order.cached'));
},
'order-tracking.asset_getter' => static function (ContainerInterface $container): AssetGetter {
$factory = $container->get('assets.asset_getter_factory');
assert($factory instanceof AssetGetterFactory);
return $factory->for_module('ppcp-order-tracking');
},
'order-tracking.meta-box.renderer' => static function (ContainerInterface $container): \WooCommerce\PayPalCommerce\OrderTracking\MetaBoxRenderer {
return new \WooCommerce\PayPalCommerce\OrderTracking\MetaBoxRenderer($container->get('order-tracking.allowed-shipping-statuses'), $container->get('order-tracking.available-carriers'), $container->get('order-tracking.endpoint.controller'), $container->get('order-tracking.should-use-second-version-of-api'), $container->get('woocommerce.logger.woocommerce'));
},
'order-tracking.allowed-shipping-statuses' => static function (ContainerInterface $container): array {
return (array) apply_filters('woocommerce_paypal_payments_tracking_statuses', array('SHIPPED' => 'Shipped', 'ON_HOLD' => 'On Hold', 'DELIVERED' => 'Delivered', 'CANCELLED' => 'Cancelled'));
},
'order-tracking.allowed-carriers' => static function (ContainerInterface $container): array {
return require __DIR__ . '/carriers.php';
},
'order-tracking.available-carriers' => static function (ContainerInterface $container): array {
$api_shop_country = $container->get('api.shop.country');
$allowed_carriers = $container->get('order-tracking.allowed-carriers');
$selected_country_carriers = $allowed_carriers[$api_shop_country] ?? array();
return array(
$api_shop_country => $selected_country_carriers ?? array(),
// @phpstan-ignore nullCoalesce.variable
'global' => $allowed_carriers['global'] ?? array(),
'other' => array('name' => 'Other', 'items' => array('OTHER' => _x('Other', 'Name of carrier', 'woocommerce-paypal-payments'))),
);
},
/**
* The list of country codes, for which the 2nd version of PayPal tracking API is supported.
*/
'order-tracking.second-version-api-supported-countries' => static function (): array {
/**
* Returns codes of countries, for which the 2nd version of PayPal tracking API is supported.
*/
return apply_filters('woocommerce_paypal_payments_supported_country_codes_for_second_version_of_tracking_api', array('US', 'AU', 'CA', 'FR', 'DE', 'IT', 'ES', 'GB'));
},
'order-tracking.should-use-second-version-of-api' => static function (ContainerInterface $container): bool {
$supported_county_codes = $container->get('order-tracking.second-version-api-supported-countries');
$selected_country_code = $container->get('api.shop.country');
return in_array($selected_country_code, $supported_county_codes, \true);
},
'order-tracking.integrations' => static function (ContainerInterface $container): array {
$shipment_factory = $container->get('order-tracking.shipment.factory');
$logger = $container->get('woocommerce.logger.woocommerce');
$endpoint = $container->get('order-tracking.endpoint.controller');
$is_shiptastic_active = $container->get('compat.shiptastic.is_supported_plugin_version_active');
$is_wc_shipment_active = $container->get('compat.wc_shipment_tracking.is_supported_plugin_version_active');
$is_yith_ywot_active = $container->get('compat.ywot.is_supported_plugin_version_active');
$is_dhl_de_active = $container->get('compat.dhl.is_supported_plugin_version_active');
$is_ship_station_active = $container->get('compat.shipstation.is_supported_plugin_version_active');
$is_wc_shipping_tax_active = $container->get('compat.wc_shipping_tax.is_supported_plugin_version_active');
$integrations = array();
if ($is_shiptastic_active) {
$integrations[] = new ShiptasticIntegration($shipment_factory, $logger, $endpoint);
}
if ($is_wc_shipment_active) {
$integrations[] = new ShipmentTrackingIntegration($shipment_factory, $logger, $endpoint);
}
if ($is_yith_ywot_active) {
$integrations[] = new YithShipmentIntegration($shipment_factory, $logger, $endpoint);
}
if ($is_dhl_de_active) {
$integrations[] = new DhlShipmentIntegration($shipment_factory, $logger, $endpoint);
}
if ($is_ship_station_active) {
$integrations[] = new ShipStationIntegration($shipment_factory, $logger, $endpoint);
}
if ($is_wc_shipping_tax_active) {
$integrations[] = new WcShippingTaxIntegration($shipment_factory, $logger, $endpoint);
}
return $integrations;
},
);