diff --git a/bundle/Core/Imagine/VariationPathGenerator/WebpFormatVariationPathGenerator.php b/bundle/Core/Imagine/VariationPathGenerator/WebpFormatVariationPathGenerator.php new file mode 100644 index 00000000..c56e8451 --- /dev/null +++ b/bundle/Core/Imagine/VariationPathGenerator/WebpFormatVariationPathGenerator.php @@ -0,0 +1,48 @@ +innerVariationPathGenerator = $innerVariationPathGenerator; + $this->filterConfiguration = $filterConfiguration; + } + + public function getVariationPath($originalPath, $filter): string + { + $variationPath = $this->innerVariationPathGenerator->getVariationPath($originalPath, $filter); + $filterConfig = $this->filterConfiguration->get($filter); + + if (!isset($filterConfig['format']) || $filterConfig['format'] !== 'webp') { + return $variationPath; + } + + $info = pathinfo($originalPath); + + if (!array_key_exists('extension', $info) || $info['extension'] === '') { + return $variationPath . '.webp'; + } + + return preg_replace("/\\.{$info['extension']}$/", '.webp', $variationPath) ?? $variationPath; + } +} diff --git a/bundle/DependencyInjection/Compiler/WebpFormatVariationPathGeneratorDecoratorPass.php b/bundle/DependencyInjection/Compiler/WebpFormatVariationPathGeneratorDecoratorPass.php new file mode 100644 index 00000000..2588c14f --- /dev/null +++ b/bundle/DependencyInjection/Compiler/WebpFormatVariationPathGeneratorDecoratorPass.php @@ -0,0 +1,42 @@ +hasParameter('kernel.bundles') || !is_array($container->getParameter('kernel.bundles'))) { + return; + } + + $activatedBundles = array_keys($container->getParameter('kernel.bundles')); + + if (!in_array('NetgenAdminUIBundle', $activatedBundles, true)) { + return; + } + + if (!$container->has(BaseWebpFormatVariationPathGenerator::class)) { + return; + } + + $container + ->findDefinition(BaseWebpFormatVariationPathGenerator::class) + ->setClass(WebpFormatVariationPathGenerator::class); + } +} diff --git a/bundle/NetgenSiteBundle.php b/bundle/NetgenSiteBundle.php index 14b1a38c..c8b1a86d 100644 --- a/bundle/NetgenSiteBundle.php +++ b/bundle/NetgenSiteBundle.php @@ -20,5 +20,6 @@ public function build(ContainerBuilder $container): void $container->addCompilerPass(new Compiler\IoStorageAllowListPass()); $container->addCompilerPass(new Compiler\PHPStormPass(), PassConfig::TYPE_OPTIMIZE); $container->addCompilerPass(new Compiler\DirectDownloadPass()); + $container->addCompilerPass(new Compiler\WebpFormatVariationPathGeneratorDecoratorPass()); } }