Skip to content

Commit 61b1928

Browse files
committed
NGSTACK-901 replace original webp image variation path generator with our implementation which generates legacy-compliant paths for ngadminui
1 parent 71ee8b3 commit 61b1928

3 files changed

Lines changed: 83 additions & 0 deletions

File tree

Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
<?php
2+
3+
declare(strict_types=1);
4+
5+
namespace Netgen\Bundle\SiteBundle\Core\Imagine\VariationPathGenerator;
6+
7+
use Ibexa\Contracts\Core\Variation\VariationPathGenerator;
8+
use Liip\ImagineBundle\Imagine\Filter\FilterConfiguration;
9+
10+
use function pathinfo;
11+
use function preg_replace;
12+
13+
/**
14+
* Decorates VariationPathGenerator with .webp extension if image variation is configured for this format.
15+
*/
16+
final class WebpFormatVariationPathGenerator implements VariationPathGenerator
17+
{
18+
private VariationPathGenerator $innerVariationPathGenerator;
19+
20+
private FilterConfiguration $filterConfiguration;
21+
22+
public function __construct(
23+
VariationPathGenerator $innerVariationPathGenerator,
24+
FilterConfiguration $filterConfiguration
25+
) {
26+
$this->innerVariationPathGenerator = $innerVariationPathGenerator;
27+
$this->filterConfiguration = $filterConfiguration;
28+
}
29+
30+
public function getVariationPath($originalPath, $filter): string
31+
{
32+
$variationPath = $this->innerVariationPathGenerator->getVariationPath($originalPath, $filter);
33+
$filterConfig = $this->filterConfiguration->get($filter);
34+
35+
if (!isset($filterConfig['format']) || $filterConfig['format'] !== 'webp') {
36+
return $variationPath;
37+
}
38+
39+
$info = pathinfo($originalPath);
40+
41+
if (!is_string($info['extension']) || strlen($info['extension']) === 0) {
42+
return $variationPath . '.webp';
43+
}
44+
45+
return preg_replace("/\.{$info['extension']}$/", '.webp', $variationPath);
46+
}
47+
}
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
<?php
2+
3+
declare(strict_types=1);
4+
5+
namespace Netgen\Bundle\SiteBundle\DependencyInjection\Compiler;
6+
7+
use Netgen\Bundle\SiteBundle\Core\Imagine\VariationPathGenerator\WebpFormatVariationPathGenerator;
8+
use Ibexa\Bundle\Core\Imagine\VariationPathGenerator\WebpFormatVariationPathGenerator as BaseWebpFormatVariationPathGenerator;
9+
use Symfony\Component\DependencyInjection\Compiler\CompilerPassInterface;
10+
use Symfony\Component\DependencyInjection\ContainerBuilder;
11+
use Symfony\Component\DependencyInjection\Reference;
12+
13+
class WebpFormatVariationPathGeneratorDecoratorPass implements CompilerPassInterface
14+
{
15+
/**
16+
* Overrides default Webp image alias variation path generator decorator to comply with legacy variation URL pattern
17+
* We do this only if we have Netgen AdminUI installed (legacy-based administration)
18+
*/
19+
public function process(ContainerBuilder $container): void
20+
{
21+
$activatedBundles = array_keys($container->getParameter('kernel.bundles'));
22+
23+
if (!in_array('NetgenAdminUIBundle', $activatedBundles, true)) {
24+
return;
25+
}
26+
27+
if (!$container->has(BaseWebpFormatVariationPathGenerator::class)) {
28+
return;
29+
}
30+
31+
$container
32+
->findDefinition(BaseWebpFormatVariationPathGenerator::class)
33+
->setClass(WebpFormatVariationPathGenerator::class);
34+
}
35+
}

bundle/NetgenSiteBundle.php

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,5 +20,6 @@ public function build(ContainerBuilder $container): void
2020
$container->addCompilerPass(new Compiler\IoStorageAllowListPass());
2121
$container->addCompilerPass(new Compiler\PHPStormPass(), PassConfig::TYPE_OPTIMIZE);
2222
$container->addCompilerPass(new Compiler\DirectDownloadPass());
23+
$container->addCompilerPass(new Compiler\WebpFormatVariationPathGeneratorDecoratorPass());
2324
}
2425
}

0 commit comments

Comments
 (0)