diff --git a/bundle/Core/Imagine/VariationPathGenerator/WebpFormatVariationPathGenerator.php b/bundle/Core/Imagine/VariationPathGenerator/WebpFormatVariationPathGenerator.php new file mode 100644 index 00000000..bb720760 --- /dev/null +++ b/bundle/Core/Imagine/VariationPathGenerator/WebpFormatVariationPathGenerator.php @@ -0,0 +1,47 @@ +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 (!is_string($info['extension']) || strlen($info['extension']) === 0) { + return $variationPath . '.webp'; + } + + return preg_replace("/\.{$info['extension']}$/", '.webp', $variationPath); + } +} diff --git a/bundle/DependencyInjection/Compiler/WebpFormatVariationPathGeneratorDecoratorPass.php b/bundle/DependencyInjection/Compiler/WebpFormatVariationPathGeneratorDecoratorPass.php new file mode 100644 index 00000000..793312e5 --- /dev/null +++ b/bundle/DependencyInjection/Compiler/WebpFormatVariationPathGeneratorDecoratorPass.php @@ -0,0 +1,31 @@ +has('ezpublish.image_alias.variation_path_generator')) { + return; + } + + $container->register( + 'ezpublish.image_alias.webp_variation_path_generator_decorator', + WebpFormatVariationPathGenerator::class, + ) + ->setDecoratedService('ezpublish.image_alias.variation_path_generator') + ->addArgument(new Reference('ezpublish.image_alias.webp_variation_path_generator_decorator.inner')) + ->addArgument(new Reference('liip_imagine.filter.configuration')); + } +} diff --git a/bundle/NetgenSiteBundle.php b/bundle/NetgenSiteBundle.php index c0e4415b..87b50185 100644 --- a/bundle/NetgenSiteBundle.php +++ b/bundle/NetgenSiteBundle.php @@ -20,5 +20,6 @@ public function build(ContainerBuilder $container): void $container->addCompilerPass(new Compiler\LocationFactoryPass()); $container->addCompilerPass(new Compiler\AsseticPass()); $container->addCompilerPass(new Compiler\IoStorageAllowListPass()); + $container->addCompilerPass(new Compiler\WebpFormatVariationPathGeneratorDecoratorPass()); } }