Skip to content

Commit 952ba56

Browse files
committed
Fix GeneratorCompilerPass for ThumbnailService
1 parent e8e97a3 commit 952ba56

File tree

6 files changed

+37
-17
lines changed

6 files changed

+37
-17
lines changed

.github/workflows/test.yml

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ jobs:
1515
matrix: ${{ steps.matrix.outputs.matrix }}
1616
steps:
1717
- name: Checkout repository
18-
uses: actions/checkout@v2
18+
uses: actions/checkout@v4
1919

2020
- name: Get Shopware Version
2121
id: shopware-constraint
@@ -55,7 +55,7 @@ jobs:
5555
composer -V
5656
5757
- name: Checkout
58-
uses: actions/checkout@v3
58+
uses: actions/checkout@v4
5959
with:
6060
path: ${{ github.workspace }}/custom/plugins/${{ env.PLUGIN_NAME }}
6161

@@ -65,7 +65,7 @@ jobs:
6565
composer create-placeholders
6666
php -d pcov.enabled=1 ${{ github.workspace }}/vendor/bin/phpunit --coverage-clover clover.xml --testsuite Unit
6767
68-
- uses: codecov/codecov-action@v3
68+
- uses: codecov/codecov-action@v5
6969
env:
7070
CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }}
7171
with:
@@ -102,7 +102,7 @@ jobs:
102102
composer -V
103103
104104
- name: Checkout
105-
uses: actions/checkout@v3
105+
uses: actions/checkout@v4
106106
with:
107107
path: ${{ github.workspace }}/custom/plugins/${{ env.PLUGIN_NAME }}
108108

@@ -112,7 +112,7 @@ jobs:
112112
composer create-placeholders
113113
php -d pcov.enabled=1 ${{ github.workspace }}/vendor/bin/phpunit --testsuite Integration
114114
115-
- uses: codecov/codecov-action@v3
115+
- uses: codecov/codecov-action@v5
116116
env:
117117
CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }}
118118
with:

src/Controller/Api/TestController.php

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,13 +19,18 @@
1919
use Symfony\Component\HttpFoundation\JsonResponse;
2020
use Symfony\Component\HttpFoundation\Request;
2121
use Symfony\Component\Routing\Attribute\Route;
22+
use Shopware\Core\Content\Media\Aggregate\MediaFolder\MediaFolderCollection;
2223

2324
#[Route(defaults: ['_routeScope' => ['api']])]
2425
class TestController
2526
{
2627
public const REQUEST_ATTRIBUTE_TEST_ACTIVE = 'FroshPlatformThumbnailProcessorTestActive';
2728
public const TEST_FILE_PATH = __DIR__ . '/../../Resources/data/froshthumbnailprocessortestimage.jpg';
2829

30+
/**
31+
* @param EntityRepository<MediaCollection> $mediaRepository
32+
* @param EntityRepository<MediaFolderCollection> $mediaFolderRepository
33+
*/
2934
public function __construct(
3035
private readonly AbstractMediaUrlGenerator $urlGenerator,
3136
private readonly EntityRepository $mediaRepository,
@@ -143,7 +148,6 @@ private function getMediaById(string $fileName, Context $context): ?MediaEntity
143148
// we use the fileName filter to add backward compatibility
144149
$criteria->addFilter(new EqualsFilter('fileName', $fileName));
145150

146-
/** @var MediaCollection $entities */
147151
$entities = $this->mediaRepository->search($criteria, $context)->getEntities();
148152

149153
return $entities->first();

src/DependencyInjection/GeneratorCompilerPass.php

Lines changed: 15 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -113,7 +113,19 @@ private function handleThumbnailService(NodeFinder $nodeFinder, array $ast): voi
113113
} catch (\RuntimeException $e) {
114114
if ($e->getMessage() === 'Method createThumbnailsForSizes in class Shopware\Core\Content\Media\Thumbnail\ThumbnailService is missing') {
115115
$generateAndSaveNode = $this->getClassMethod($nodeFinder, 'generateAndSave', $ast);
116-
$this->handleGenerateAndSaveNode($generateAndSaveNode);
116+
117+
// when the internal 'isSameDimension' method is no longer available, we need to add the 'mediaThumbnailSizeId' field
118+
$addMediaThumbnailSizeId = true;
119+
try {
120+
$this->getClassMethod($nodeFinder, 'isSameDimension', $ast);
121+
$addMediaThumbnailSizeId = false;
122+
} catch (\RuntimeException $e) {
123+
if ($e->getMessage() !== 'Method isSameDimension in class Shopware\Core\Content\Media\Thumbnail\ThumbnailService is missing') {
124+
throw $e;
125+
}
126+
}
127+
128+
$this->handleGenerateAndSaveNode($generateAndSaveNode, $addMediaThumbnailSizeId);
117129
} else {
118130
throw $e;
119131
}
@@ -269,7 +281,7 @@ private function handleCreateThumbnailsForSizes(ClassMethod $createThumbnailsFor
269281
return $savedThumbnails;');
270282
}
271283

272-
private function handleGenerateAndSaveNode(ClassMethod $generateAndSaveNode): void
284+
private function handleGenerateAndSaveNode(ClassMethod $generateAndSaveNode, bool $addMediaThumbnailSizeId): void
273285
{
274286
// we don't need to generate the files, so we just return the array
275287
$generateAndSaveNode->stmts = $this->getPhpParser()
@@ -284,15 +296,13 @@ private function handleGenerateAndSaveNode(ClassMethod $generateAndSaveNode): vo
284296
throw MediaException::mediaTypeNotLoaded($media->getId());
285297
}
286298
287-
$mapped = [];
288299
foreach ($sizes as $size) {
289300
$id = Uuid::randomHex();
290301
291-
$mapped[$size->getId()] = $id;
292-
293302
$records[] = [
294303
\'id\' => $id,
295304
\'mediaId\' => $media->getId(),
305+
' . ($addMediaThumbnailSizeId ? '\'mediaThumbnailSizeId\' => $size->getId(),' : '') . '
296306
\'width\' => $size->getWidth(),
297307
\'height\' => $size->getHeight(),
298308
];

src/EventListener/ThumbnailSizesChangedListener.php

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@
22

33
namespace Frosh\ThumbnailProcessor\EventListener;
44

5-
use Shopware\Core\Content\Media\Aggregate\MediaFolder\MediaFolderEntity;
65
use Shopware\Core\Content\Media\Aggregate\MediaFolderConfigurationMediaThumbnailSize\MediaFolderConfigurationMediaThumbnailSizeDefinition;
76
use Shopware\Core\Content\Media\Commands\GenerateThumbnailsCommand;
87
use Shopware\Core\Framework\DataAbstractionLayer\EntityRepository;
@@ -12,9 +11,13 @@
1211
use Symfony\Component\Console\Input\ArrayInput;
1312
use Symfony\Component\Console\Output\NullOutput;
1413
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
14+
use Shopware\Core\Content\Media\Aggregate\MediaFolder\MediaFolderCollection;
1515

1616
class ThumbnailSizesChangedListener implements EventSubscriberInterface
1717
{
18+
/**
19+
* @param EntityRepository<MediaFolderCollection> $mediaFolderRepository
20+
*/
1821
public function __construct(
1922
private readonly GenerateThumbnailsCommand $generateThumbnailsCommand,
2023
private readonly EntityRepository $mediaFolderRepository,
@@ -52,7 +55,6 @@ public function onThumbnailSizeChanged(EntityWrittenEvent $event): void
5255

5356
$result = $this->mediaFolderRepository->search($criteria, $event->getContext());
5457

55-
/** @var MediaFolderEntity $entity */
5658
foreach ($result->getEntities() as $entity) {
5759
$parameters = [];
5860

src/Service/SalesChannelIdDetector.php

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,9 +10,13 @@
1010
use Shopware\Core\PlatformRequest;
1111
use Symfony\Component\HttpFoundation\Request;
1212
use Symfony\Component\HttpFoundation\RequestStack;
13+
use Shopware\Core\Content\ProductExport\ProductExportCollection;
1314

1415
class SalesChannelIdDetector
1516
{
17+
/**
18+
* @param EntityRepository<ProductExportCollection> $productExportRepository
19+
*/
1620
public function __construct(
1721
private readonly RequestStack $requestStack,
1822
private readonly EntityRepository $productExportRepository

tests/integration/MediaUrlTest.php

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
use Shopware\Core\Content\Media\Aggregate\MediaThumbnail\MediaThumbnailCollection;
88
use Shopware\Core\Content\Media\Commands\GenerateThumbnailsCommand;
99
use Shopware\Core\Content\Media\Core\Application\AbstractMediaUrlGenerator;
10-
use Shopware\Core\Content\Media\MediaEntity;
10+
use Shopware\Core\Content\Media\MediaCollection;
1111
use Shopware\Core\Content\Test\Media\MediaFixtures;
1212
use Shopware\Core\Framework\Context;
1313
use Shopware\Core\Framework\DataAbstractionLayer\EntityRepository;
@@ -18,14 +18,16 @@
1818
use Shopware\Core\System\SystemConfig\SystemConfigService;
1919
use Symfony\Component\Console\Input\ArrayInput;
2020
use Symfony\Component\Console\Output\NullOutput;
21-
use Symfony\Component\DependencyInjection\ContainerInterface;
2221

2322
class MediaUrlTest extends TestCase
2423
{
2524
use IntegrationTestBehaviour;
2625
use MediaFixtures;
2726
use QueueTestBehaviour;
2827

28+
/**
29+
* @var EntityRepository<MediaCollection>
30+
*/
2931
private EntityRepository $mediaRepository;
3032

3133
private GenerateThumbnailsCommand $generateThumbnailsCommand;
@@ -90,7 +92,6 @@ public function testMediaUrlWithInactiveConfigResultsInOriginalMedia(): void
9092

9193
$mediaResult = $this->mediaRepository->search($searchCriteria, $this->context);
9294

93-
/** @var MediaEntity $updatedMedia */
9495
$updatedMedia = $mediaResult->getEntities()->first();
9596

9697
$thumbnails = $updatedMedia->getThumbnails();
@@ -150,7 +151,6 @@ public function testMediaUrlWithActiveConfig(): void
150151

151152
$mediaResult = $this->mediaRepository->search($searchCriteria, $this->context);
152153

153-
/** @var MediaEntity $updatedMedia */
154154
$updatedMedia = $mediaResult->getEntities()->first();
155155

156156
$thumbnails = $updatedMedia->getThumbnails();

0 commit comments

Comments
 (0)