custom/plugins/FroshPlatformThumbnailProcessor/src/EventListener/ThumbnailSizesChangedListener.php line 38

Open in your IDE?
  1. <?php declare(strict_types=1);
  2. namespace Frosh\ThumbnailProcessor\EventListener;
  3. use Shopware\Core\Content\Media\Aggregate\MediaFolder\MediaFolderEntity;
  4. use Shopware\Core\Content\Media\Aggregate\MediaFolderConfigurationMediaThumbnailSize\MediaFolderConfigurationMediaThumbnailSizeDefinition;
  5. use Shopware\Core\Content\Media\Commands\GenerateThumbnailsCommand;
  6. use Shopware\Core\Framework\DataAbstractionLayer\EntityRepositoryInterface;
  7. use Shopware\Core\Framework\DataAbstractionLayer\Event\EntityWrittenEvent;
  8. use Shopware\Core\Framework\DataAbstractionLayer\Search\Criteria;
  9. use Shopware\Core\Framework\DataAbstractionLayer\Search\Filter\EqualsAnyFilter;
  10. use Symfony\Component\Console\Input\ArrayInput;
  11. use Symfony\Component\Console\Output\NullOutput;
  12. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  13. class ThumbnailSizesChangedListener implements EventSubscriberInterface
  14. {
  15.     private GenerateThumbnailsCommand $generateThumbnailsCommand;
  16.     private EntityRepositoryInterface $mediaFolderRepository;
  17.     public function __construct(
  18.         GenerateThumbnailsCommand $generateThumbnailsCommand,
  19.         EntityRepositoryInterface $mediaFolderRepository
  20.     ) {
  21.         $this->mediaFolderRepository $mediaFolderRepository;
  22.         $this->generateThumbnailsCommand $generateThumbnailsCommand;
  23.     }
  24.     public static function getSubscribedEvents(): array
  25.     {
  26.         return [
  27.             MediaFolderConfigurationMediaThumbnailSizeDefinition::ENTITY_NAME '.written' => 'onThumbnailSizeChanged',
  28.             MediaFolderConfigurationMediaThumbnailSizeDefinition::ENTITY_NAME '.deleted' => 'onThumbnailSizeChanged',
  29.         ];
  30.     }
  31.     public function onThumbnailSizeChanged(EntityWrittenEvent $event): void
  32.     {
  33.         $updatedMediaFolderConfigurationIds = [];
  34.         foreach ($event->getWriteResults() as $writeResult) {
  35.             $mediaFolderConfigurationId $writeResult->getPayload()['mediaFolderConfigurationId'] ?? null;
  36.             if (!empty($mediaFolderConfigurationId) && \is_string($mediaFolderConfigurationId)) {
  37.                 $updatedMediaFolderConfigurationIds[] = $mediaFolderConfigurationId;
  38.             }
  39.         }
  40.         $updatedMediaFolderConfigurationIds \array_unique($updatedMediaFolderConfigurationIds);
  41.         if (empty($updatedMediaFolderConfigurationIds)) {
  42.             return;
  43.         }
  44.         $criteria = new Criteria();
  45.         $criteria->addFilter(new EqualsAnyFilter('configurationId'$updatedMediaFolderConfigurationIds));
  46.         $result $this->mediaFolderRepository->search($criteria$event->getContext());
  47.         /** @var MediaFolderEntity $entity */
  48.         foreach ($result->getEntities() as $entity) {
  49.             $parameters = [];
  50.             $parameters['--async'] = null;
  51.             $parameters['--folder-name'] = $entity->getName();
  52.             $this->generateThumbnailsCommand->run(new ArrayInput($parameters$this->generateThumbnailsCommand->getDefinition()), new NullOutput());
  53.         }
  54.     }
  55. }