Skip to content

Commit 0d4e86d

Browse files
authored
IBX-4647: Added WebpFormatVariationPathGenerator handling .webp images (#361)
1 parent b787ccb commit 0d4e86d

File tree

3 files changed

+127
-0
lines changed

3 files changed

+127
-0
lines changed

eZ/Bundle/EzPublishCoreBundle/Resources/config/image.yml

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -285,5 +285,11 @@ services:
285285
ezpublish.image_alias.variation_path_generator.alias_directory:
286286
class: eZ\Bundle\EzPublishCoreBundle\Imagine\VariationPathGenerator\AliasDirectoryVariationPathGenerator
287287

288+
Ibexa\Bundle\Core\Imagine\VariationPathGenerator\WebpFormatVariationPathGenerator:
289+
decorates: ezpublish.image_alias.variation_path_generator
290+
arguments:
291+
$innerVariationPathGenerator: '@.inner'
292+
$filterConfiguration: '@liip_imagine.filter.configuration'
293+
288294
# SPI Aliases
289295
eZ\Publish\SPI\Variation\VariationHandler: '@ezpublish.image_alias.imagine.variation.imagine_alias_generator'
Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
<?php
2+
3+
/**
4+
* @copyright Copyright (C) Ibexa AS. All rights reserved.
5+
* @license For full copyright and license information view LICENSE file distributed with this source code.
6+
*/
7+
declare(strict_types=1);
8+
9+
namespace Ibexa\Bundle\Core\Imagine\VariationPathGenerator;
10+
11+
use eZ\Bundle\EzPublishCoreBundle\Imagine\VariationPathGenerator;
12+
use Liip\ImagineBundle\Imagine\Filter\FilterConfiguration;
13+
14+
/**
15+
* Decorates VariationPathGenerator with .webp extension if image variation is configured for this format.
16+
*/
17+
final class WebpFormatVariationPathGenerator implements VariationPathGenerator
18+
{
19+
/** @var \eZ\Bundle\EzPublishCoreBundle\Imagine\VariationPathGenerator */
20+
private $innerVariationPathGenerator;
21+
22+
/** @var \Liip\ImagineBundle\Imagine\Filter\FilterConfiguration */
23+
private $filterConfiguration;
24+
25+
public function __construct(
26+
VariationPathGenerator $innerVariationPathGenerator,
27+
FilterConfiguration $filterConfiguration
28+
) {
29+
$this->innerVariationPathGenerator = $innerVariationPathGenerator;
30+
$this->filterConfiguration = $filterConfiguration;
31+
}
32+
33+
public function getVariationPath($originalPath, $filter): string
34+
{
35+
$variationPath = $this->innerVariationPathGenerator->getVariationPath($originalPath, $filter);
36+
$filterConfig = $this->filterConfiguration->get($filter);
37+
38+
if (!isset($filterConfig['format']) || $filterConfig['format'] !== 'webp') {
39+
return $variationPath;
40+
}
41+
42+
return $variationPath . '.webp';
43+
}
44+
}
Lines changed: 77 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,77 @@
1+
<?php
2+
3+
/**
4+
* @copyright Copyright (C) Ibexa AS. All rights reserved.
5+
* @license For full copyright and license information view LICENSE file distributed with this source code.
6+
*/
7+
declare(strict_types=1);
8+
9+
namespace Ibexa\Tests\Bundle\Core\Imagine\VariationPathGenerator;
10+
11+
use eZ\Bundle\EzPublishCoreBundle\Imagine\Filter\FilterConfiguration;
12+
use eZ\Bundle\EzPublishCoreBundle\Imagine\VariationPathGenerator;
13+
use Ibexa\Bundle\Core\Imagine\VariationPathGenerator\WebpFormatVariationPathGenerator;
14+
use PHPUnit\Framework\TestCase;
15+
16+
final class WebpFormatVariationPathGeneratorTest extends TestCase
17+
{
18+
/** @var \eZ\Bundle\EzPublishCoreBundle\Imagine\VariationPathGenerator|\PHPUnit\Framework\MockObject\MockObject */
19+
private $innerVariationPathGenerator;
20+
21+
/** @var \eZ\Bundle\EzPublishCoreBundle\Imagine\Filter\FilterConfiguration|\PHPUnit\Framework\MockObject\MockObject */
22+
private $filterConfiguration;
23+
24+
protected function setUp(): void
25+
{
26+
$this->innerVariationPathGenerator = $this->createMock(VariationPathGenerator::class);
27+
$this->filterConfiguration = $this->createMock(FilterConfiguration::class);
28+
}
29+
30+
public function testGetVariationPath(): void
31+
{
32+
$this->innerVariationPathGenerator
33+
->method('getVariationPath')
34+
->willReturn('tmp/variation/test.jpeg');
35+
36+
$this->filterConfiguration
37+
->method('get')
38+
->with('large')
39+
->willReturn([
40+
'format' => 'webp',
41+
]);
42+
43+
$generator = new WebpFormatVariationPathGenerator(
44+
$this->innerVariationPathGenerator,
45+
$this->filterConfiguration
46+
);
47+
48+
self::assertEquals(
49+
'tmp/variation/test.jpeg.webp',
50+
$generator->getVariationPath('tmp/original/test.jpeg', 'large')
51+
);
52+
}
53+
54+
public function testGetVariationNonWebpVariation(): void
55+
{
56+
$this->innerVariationPathGenerator
57+
->method('getVariationPath')
58+
->willReturn('tmp/variation/test.jpeg');
59+
60+
$this->filterConfiguration
61+
->method('get')
62+
->with('large')
63+
->willReturn([
64+
'format' => 'jpeg',
65+
]);
66+
67+
$generator = new WebpFormatVariationPathGenerator(
68+
$this->innerVariationPathGenerator,
69+
$this->filterConfiguration
70+
);
71+
72+
self::assertEquals(
73+
'tmp/variation/test.jpeg',
74+
$generator->getVariationPath('tmp/original/test.jpeg', 'large')
75+
);
76+
}
77+
}

0 commit comments

Comments
 (0)