Skip to content

Commit 17a7f07

Browse files
committed
Merged branch '4.3'
2 parents 222bcb1 + 9738dfd commit 17a7f07

File tree

3 files changed

+125
-0
lines changed

3 files changed

+125
-0
lines changed
Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
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 Ibexa\Contracts\Core\Variation\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+
private VariationPathGenerator $innerVariationPathGenerator;
20+
21+
private FilterConfiguration $filterConfiguration;
22+
23+
public function __construct(
24+
VariationPathGenerator $innerVariationPathGenerator,
25+
FilterConfiguration $filterConfiguration
26+
) {
27+
$this->innerVariationPathGenerator = $innerVariationPathGenerator;
28+
$this->filterConfiguration = $filterConfiguration;
29+
}
30+
31+
public function getVariationPath($originalPath, $filter): string
32+
{
33+
$variationPath = $this->innerVariationPathGenerator->getVariationPath($originalPath, $filter);
34+
$filterConfig = $this->filterConfiguration->get($filter);
35+
36+
if (!isset($filterConfig['format']) || $filterConfig['format'] !== 'webp') {
37+
return $variationPath;
38+
}
39+
40+
return $variationPath . '.webp';
41+
}
42+
}

src/bundle/Core/Resources/config/image.yml

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -299,6 +299,12 @@ services:
299299
tags:
300300
- { name: 'ibexa.media.images.variation.handler', identifier: 'alias' }
301301

302+
Ibexa\Bundle\Core\Imagine\VariationPathGenerator\WebpFormatVariationPathGenerator:
303+
decorates: ibexa.image_alias.variation_path_generator
304+
arguments:
305+
$innerVariationPathGenerator: '@.inner'
306+
$filterConfiguration: '@liip_imagine.filter.configuration'
307+
302308
# SPI Aliases
303309
Ibexa\Contracts\Core\Variation\VariationHandler: '@Ibexa\Bundle\Core\Variation\VariationHandlerResolver'
304310

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 Ibexa\Bundle\Core\Imagine\Filter\FilterConfiguration;
12+
use Ibexa\Bundle\Core\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 \Ibexa\Bundle\Core\Imagine\VariationPathGenerator|\PHPUnit\Framework\MockObject\MockObject */
19+
private VariationPathGenerator $innerVariationPathGenerator;
20+
21+
/** @var \Ibexa\Bundle\Core\Imagine\Filter\FilterConfiguration|\PHPUnit\Framework\MockObject\MockObject */
22+
private FilterConfiguration $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)