src/Hitso/Bundle/CommonBundle/Media/UrlGenerator.php line 120

Open in your IDE?
  1. <?php
  2. declare(strict_types=1);
  3. namespace Hitso\Bundle\CommonBundle\Media;
  4. use Exception;
  5. use Hitso\Bundle\CommonBundle\Repository\ChangeLogRepository;
  6. use Hitso\Bundle\CommonBundle\Twig\AppExtension;
  7. use Hitso\Bundle\FileManagerBundle\Entity\File;
  8. use Hitso\Bundle\FileManagerBundle\Manager\FileManager;
  9. use Hitso\Bundle\FileManagerBundle\Repository\FileRepository;
  10. use Hitso\Bundle\FileManagerBundle\Service\LoggableReverter\FileLoggableReverter;
  11. use Hitso\Bundle\FileManagerBundle\Twig\FileManagerExtension;
  12. /**
  13.  * Class UrlGenerator
  14.  * @package Hitso\Bundle\CommonBundle\Media
  15.  */
  16. class UrlGenerator implements MediaUrlProviderInterface
  17. {
  18.     /**
  19.      * @var MediaUrlProviderInterface[]
  20.      */
  21.     protected $urlProviders = [];
  22.     /**
  23.      * @var FileLoggableReverter
  24.      */
  25.     protected $loggableReverter;
  26.     /**
  27.      * @var ChangeLogRepository
  28.      */
  29.     protected $changeLogRepository;
  30.     /**
  31.      * @var FileRepository
  32.      */
  33.     protected $fileRepository;
  34.     /**
  35.      * @var AppExtension
  36.      */
  37.     protected $appExtension;
  38.     /**
  39.      * @var FileManagerExtension
  40.      */
  41.     protected $fileManagerExtension;
  42.     /**
  43.      * UrlGenerator constructor.
  44.      * @param FileLoggableReverter $loggableReverter
  45.      * @param ChangeLogRepository $changeLogRepository
  46.      * @param AppExtension $appExtension
  47.      * @param FileManagerExtension $fileManagerExtension
  48.      * @param FileRepository $fileRepository
  49.      */
  50.     public function __construct(
  51.         FileLoggableReverter $loggableReverter,
  52.         ChangeLogRepository $changeLogRepository,
  53.         AppExtension $appExtension,
  54.         FileManagerExtension $fileManagerExtension,
  55.         FileRepository $fileRepository
  56.     )
  57.     {
  58.         $this->loggableReverter $loggableReverter;
  59.         $this->changeLogRepository $changeLogRepository;
  60.         $this->appExtension $appExtension;
  61.         $this->fileManagerExtension $fileManagerExtension;
  62.         $this->fileRepository $fileRepository;
  63.     }
  64.     /**
  65.      * @param MediaUrlProviderInterface $provider
  66.      */
  67.     public function addProvider(MediaUrlProviderInterface $provider): void
  68.     {
  69.         $this->urlProviders[] = $provider;
  70.     }
  71.     public function fileUrl($file): ?string
  72.     {
  73.         $provider $this->getProviderForFile($file);
  74.         if ($provider instanceof MediaUrlProviderInterface) {
  75.             return $provider->fileUrl($file);
  76.         }
  77.         return null;
  78.     }
  79.     public function fileOrgUrl($file): ?string
  80.     {
  81.         $provider $this->getProviderForFile($file);
  82.         if ($provider instanceof MediaUrlProviderInterface) {
  83.             $idsArray explode('/'$file->getId());
  84.             if (count($idsArray)) {
  85.                 $fileOrg $this->fileRepository->find($idsArray[0]);
  86.                 if ($fileOrg) {
  87.                     try {
  88.                         return $this->fileUrl($fileOrg);
  89.                     } catch (Exception $e) {
  90.                         return $e->getMessage();
  91.                     }
  92.                 }
  93.             }
  94.             return $provider->fileUrl($file);
  95.         }
  96.         return null;
  97.     }
  98.     public function imageUrl(File $filestring $imagineFilterName, array $runtimeConfig = [], int $version null): ?string
  99.     {
  100.         $provider $this->getProviderForFile($file);
  101.         if ($provider instanceof MediaUrlProviderInterface) {
  102.             if (!$version) {
  103.                 $version $this->loggableReverter->getCurrentVersion($file);
  104.             }
  105.             return $provider->imageUrl($file$imagineFilterName$runtimeConfig$version);
  106.         }
  107.         return null;
  108.     }
  109.     public function imgSrc(File $filestring $imagineFilterName 'content_cover_large', array $runtimeConfig = [], int $version null): ?string
  110.     {
  111.         if (in_array($file->getExtension(), FileManager::IMAGE_EXTENSIONS)) {
  112.             return $this->imageUrl($file$imagineFilterName$runtimeConfig = [], $version null);
  113.         } elseif ($file->getExtension() === 'svg') {
  114.             return $this->appExtension->getFmSvgAsString($this->fileManagerExtension->fmPath($file$version));
  115.         }
  116.         return null;
  117.     }
  118.     public function supports($file): bool
  119.     {
  120.         return false;
  121.     }
  122.     public function validUrl($file): bool
  123.     {
  124.         $provider $this->getProviderForFile($file);
  125.         if ($provider instanceof MediaUrlProviderInterface) {
  126.             return $provider->validUrl($file);
  127.         }
  128.         return false;
  129.     }
  130.     protected function getProviderForFile($file): ?MediaUrlProviderInterface
  131.     {
  132.         foreach ($this->urlProviders as $provider) {
  133.             if ($provider->supports($file)) {
  134.                 return $provider;
  135.             }
  136.         }
  137.         return null;
  138.     }
  139. }