diff --git a/src/Resources/config/services.xml b/src/Resources/config/services.xml index f0638fa31..95f170034 100644 --- a/src/Resources/config/services.xml +++ b/src/Resources/config/services.xml @@ -187,6 +187,7 @@ + diff --git a/src/Service/TrackingInfoStructFactory.php b/src/Service/TrackingInfoStructFactory.php index b0a5b5a6a..507f29938 100644 --- a/src/Service/TrackingInfoStructFactory.php +++ b/src/Service/TrackingInfoStructFactory.php @@ -6,6 +6,7 @@ use Kiener\MolliePayments\Components\ShipmentManager\Exceptions\NoDeliveriesFoundException; use Kiener\MolliePayments\Struct\MollieApi\ShipmentTrackingInfoStruct; use Kiener\MolliePayments\Traits\StringTrait; +use Psr\Log\LoggerInterface; use Shopware\Core\Checkout\Order\Aggregate\OrderDelivery\OrderDeliveryCollection; use Shopware\Core\Checkout\Order\OrderEntity; @@ -18,9 +19,17 @@ class TrackingInfoStructFactory */ private $urlParsingService; - public function __construct(UrlParsingService $urlParsingService) - { + /** + * @var LoggerInterface + */ + private $logger; + + public function __construct( + UrlParsingService $urlParsingService, + LoggerInterface $logger + ) { $this->urlParsingService = $urlParsingService; + $this->logger = $logger; } @@ -63,6 +72,8 @@ public function trackingFromOrder(OrderEntity $order): ?ShipmentTrackingInfoStru return null; } + $this->logger->info(sprintf('Creating tracking information for shipment with shipping method %s. Order: "%s"', $shippingMethod->getName(), $order->getOrderNumber())); + return $this->createInfoStruct( (string)$shippingMethod->getName(), $trackingCodes[0], @@ -90,6 +101,7 @@ public function create(string $trackingCarrier, string $trackingCode, string $tr private function createInfoStruct(string $trackingCarrier, string $trackingCode, string $trackingUrl): ?ShipmentTrackingInfoStruct { if (empty($trackingCarrier) && empty($trackingCode)) { + $this->logger->info('No tracking information provided for shipment.'); return null; } @@ -101,22 +113,42 @@ private function createInfoStruct(string $trackingCarrier, string $trackingCode, throw new \InvalidArgumentException('Missing Argument for Tracking Code!'); } + $this->logger->info('Creating tracking information for shipment.', [ + 'trackingCarrier' => $trackingCarrier, + 'trackingCode' => $trackingCode, + 'trackingUrl' => $trackingUrl + ]); + // determine if the provided tracking code is actually a tracking URL if (empty($trackingUrl) === true || $this->urlParsingService->isUrl($trackingCode)) { + $this->logger->info('Tracking code is a URL, parsing tracking code from URL.', [ + 'trackingCode' => $trackingCode, + 'trackingUrl' => $trackingUrl + ]); + [$trackingCode, $trackingUrl] = $this->urlParsingService->parseTrackingCodeFromUrl($trackingCode); + + $this->logger->info('Parsed tracking code from URL.', [ + 'trackingCode' => $trackingCode, + 'trackingUrl' => $trackingUrl + ]); } # we just have to completely remove those codes, so that no tracking happens, but a shipping works. # still, if we find multiple codes (because separators exist), then we use the first one only if (mb_strlen($trackingCode) > self::MAX_TRACKING_CODE_LENGTH) { + $this->logger->info('Tracking code is too long, truncating.', ['trackingCode' => $trackingCode]); if (strpos($trackingCode, ',') !== false) { $trackingCode = trim(explode(',', $trackingCode)[0]); } elseif (strpos($trackingCode, ';') !== false) { $trackingCode = trim(explode(';', $trackingCode)[0]); } + $this->logger->info('Truncated tracking code.', ['trackingCode' => $trackingCode]); + # if we are still too long, then simply remove the code if (mb_strlen($trackingCode) > self::MAX_TRACKING_CODE_LENGTH) { + $this->logger->info('Tracking code is still too long, removing.', ['trackingCode' => $trackingCode]); return new ShipmentTrackingInfoStruct($trackingCarrier, '', ''); } } diff --git a/tests/PHPUnit/Components/ShipmentManager/ShipmentManagerTest.php b/tests/PHPUnit/Components/ShipmentManager/ShipmentManagerTest.php index 952af4d0e..62c7aefbc 100644 --- a/tests/PHPUnit/Components/ShipmentManager/ShipmentManagerTest.php +++ b/tests/PHPUnit/Components/ShipmentManager/ShipmentManagerTest.php @@ -66,7 +66,7 @@ public function setUp(): void $orderService, $deliveryExtractor, new OrderItemsExtractor(), - new TrackingInfoStructFactory(new UrlParsingService()) + new TrackingInfoStructFactory(new UrlParsingService(), new NullLogger()) ); $this->context = $this->getMockBuilder(Context::class)->disableOriginalConstructor()->getMock(); diff --git a/tests/PHPUnit/Service/TrackingInfoStructFactoryTest.php b/tests/PHPUnit/Service/TrackingInfoStructFactoryTest.php index df5e64643..dff7a0940 100644 --- a/tests/PHPUnit/Service/TrackingInfoStructFactoryTest.php +++ b/tests/PHPUnit/Service/TrackingInfoStructFactoryTest.php @@ -7,6 +7,7 @@ use Kiener\MolliePayments\Service\TrackingInfoStructFactory; use Kiener\MolliePayments\Service\UrlParsingService; use PHPUnit\Framework\TestCase; +use Psr\Log\NullLogger; use Shopware\Core\Checkout\Order\Aggregate\OrderDelivery\OrderDeliveryCollection; use Shopware\Core\Checkout\Order\Aggregate\OrderDelivery\OrderDeliveryEntity; use Shopware\Core\Checkout\Order\OrderEntity; @@ -24,7 +25,7 @@ class TrackingInfoStructFactoryTest extends TestCase public function setUp(): void { - $this->factory = new TrackingInfoStructFactory(new UrlParsingService()); + $this->factory = new TrackingInfoStructFactory(new UrlParsingService(), new NullLogger()); }