From 1296a893aaba74b35ba9258ef655aa32882b8425 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C5=82=20Pysiak?= Date: Thu, 9 Mar 2023 09:28:06 +0100 Subject: [PATCH] OP-52: Fix error trying to filter svg image with LiipImagineBundle --- .../Product/ImageTransformerSpec.php | 20 +++++++++++++++++-- src/Transformer/Product/ImageTransformer.php | 16 +++++++++++++-- 2 files changed, 32 insertions(+), 4 deletions(-) diff --git a/spec/Transformer/Product/ImageTransformerSpec.php b/spec/Transformer/Product/ImageTransformerSpec.php index fc33093..01ea40f 100644 --- a/spec/Transformer/Product/ImageTransformerSpec.php +++ b/spec/Transformer/Product/ImageTransformerSpec.php @@ -35,13 +35,29 @@ final class ImageTransformerSpec extends ObjectBehavior FilterService $filterService ): void { $product->getImagesByType('main')->willReturn(new ArrayCollection([$productImage->getWrappedObject()])); - $productImage->getPath()->willReturn('/path-to-image'); + $productImage->getPath()->willReturn('/path-to-image.png'); $filterService - ->getUrlOfFilteredImage('/path-to-image', 'sylius_shop_product_thumbnail') + ->getUrlOfFilteredImage('/path-to-image.png', 'sylius_shop_product_thumbnail') ->shouldBeCalled() ; $this->transform($product); } + + function it_does_not_transforms_svg_product_images_into_product_thumbnail( + ProductInterface $product, + ImageInterface $productImage, + FilterService $filterService + ): void { + $product->getImagesByType('main')->willReturn(new ArrayCollection([$productImage->getWrappedObject()])); + $productImage->getPath()->willReturn('/path-to-image.svg'); + + $filterService + ->getUrlOfFilteredImage('/path-to-image.svg', 'sylius_shop_product_thumbnail') + ->shouldNotBeCalled() + ; + + $this->transform($product); + } } diff --git a/src/Transformer/Product/ImageTransformer.php b/src/Transformer/Product/ImageTransformer.php index 06177b5..160602c 100644 --- a/src/Transformer/Product/ImageTransformer.php +++ b/src/Transformer/Product/ImageTransformer.php @@ -24,9 +24,12 @@ final class ImageTransformer implements TransformerInterface private FilterService $imagineFilter; - public function __construct(FilterService $imagineFilter) + private string $imagesPath; + + public function __construct(FilterService $imagineFilter, string $imagesPath = '/media/image/') { $this->imagineFilter = $imagineFilter; + $this->imagesPath = $imagesPath; } public function transform(ProductInterface $product): ?string @@ -40,6 +43,15 @@ final class ImageTransformer implements TransformerInterface /** @var ImageInterface $productImage */ $productImage = $productThumbnails->first(); - return $this->imagineFilter->getUrlOfFilteredImage($productImage->getPath(), self::SYLIUS_THUMBNAIL_FILTER); + if ($this->canImageBeFiltered($productImage->getPath())) { + return $this->imagineFilter->getUrlOfFilteredImage($productImage->getPath(), self::SYLIUS_THUMBNAIL_FILTER); + } + + return $this->imagesPath . $productImage->getPath(); + } + + private function canImageBeFiltered(string $imagePath): bool + { + return !str_ends_with($imagePath, 'svg'); } }