custom/plugins/AppflixStudygood/src/Storefront/Subscriber/MediaLoadedSubscriber.php line 35

Open in your IDE?
  1. <?php
  2. namespace Appflix\Studygood\Storefront\Subscriber;
  3. use Shopware\Core\Content\Media\MediaEntity;
  4. use Shopware\Core\Content\Media\MediaEvents;
  5. use Shopware\Core\Content\Media\Pathname\UrlGeneratorInterface;
  6. use Shopware\Core\Framework\DataAbstractionLayer\Event\EntityLoadedEvent;
  7. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  8. use League\Flysystem\FilesystemInterface;
  9. class MediaLoadedSubscriber implements EventSubscriberInterface
  10. {
  11.     private FilesystemInterface $filesystemPublic;
  12.     private FilesystemInterface $filesystemPrivate;
  13.     private UrlGeneratorInterface $urlGenerator;
  14.     public function __construct(
  15.         FilesystemInterface $fileSystemPublic,
  16.         FilesystemInterface $fileSystemPrivate,
  17.         UrlGeneratorInterface $urlGenerator
  18.     ) {
  19.         $this->filesystemPublic $fileSystemPublic;
  20.         $this->filesystemPrivate $fileSystemPrivate;
  21.         $this->urlGenerator $urlGenerator;
  22.     }
  23.     public static function getSubscribedEvents(): array
  24.     {
  25.         return [
  26.             MediaEvents::MEDIA_LOADED_EVENT => 'transformSvgMedia',
  27.         ];
  28.     }
  29.     public function transformSvgMedia(EntityLoadedEvent $event): void
  30.     {
  31.         //return;
  32.         /** @var MediaEntity $media */
  33.         foreach ($event->getEntities() as $media) {
  34.             if (!$media->hasFile() || $media->isPrivate()) {
  35.                 continue;
  36.             }
  37.             if (strpos($media->getMimeType(), 'image/svg') !== false) {
  38.                 $this->enrichSvgContents($media);
  39.             }
  40.         }
  41.     }
  42.     private function enrichSvgContents(MediaEntity $media): void
  43.     {
  44.         $filePath $this->urlGenerator->getRelativeMediaUrl($media);
  45.         try {
  46.             /** @var string $file */
  47.             $file $this->getFileSystem($media)->read($filePath);
  48.             $media->assign(['svg' => $file]);
  49.         } catch (\Exception $exception) {
  50.         }
  51.     }
  52.     private function getFileSystem(MediaEntity $media): FilesystemInterface
  53.     {
  54.         if ($media->isPrivate()) {
  55.             return $this->filesystemPrivate;
  56.         }
  57.         return $this->filesystemPublic;
  58.     }
  59. }