src/Hitso/Bundle/FileManagerBundle/FileManager/MediaUrlProvider.php line 109

Open in your IDE?
  1. <?php
  2. declare(strict_types=1);
  3. namespace Hitso\Bundle\FileManagerBundle\FileManager;
  4. use Hitso\Bundle\CommonBundle\Doctrine\Service\LoggableReverter;
  5. use Hitso\Bundle\CommonBundle\Media\MediaUrlProviderInterface;
  6. use Hitso\Bundle\CommonBundle\Repository\ChangeLogRepository;
  7. use Hitso\Bundle\FileManagerBundle\Entity\File;
  8. use Hitso\Bundle\FileManagerBundle\Manager\FileManager;
  9. use Hitso\Bundle\FileManagerBundle\Service\LoggableReverter\FileLoggableReverter;
  10. use Liip\ImagineBundle\Imagine\Cache\CacheManager;
  11. use Symfony\Component\Routing\RouterInterface;
  12. use Webmozart\Assert\Assert;
  13. /**
  14.  * Class MediaUrlProvider
  15.  */
  16. class MediaUrlProvider implements MediaUrlProviderInterface
  17. {
  18.     /**
  19.      * @var FileManager
  20.      */
  21.     protected $fileManager;
  22.     /**
  23.      * @var CacheManager
  24.      */
  25.     protected $cacheManager;
  26.     /**
  27.      * @var RouterInterface
  28.      */
  29.     protected $router;
  30.     /**
  31.      * @var LoggableReverter
  32.      */
  33.     protected $loggableReverter;
  34.     /**
  35.      * @var ChangeLogRepository
  36.      */
  37.     protected $changeLogRepository;
  38.     /**
  39.      * MediaUrlProvider constructor.
  40.      *
  41.      * @param FileManager          $fileManager
  42.      * @param CacheManager         $cacheManager
  43.      * @param RouterInterface      $router
  44.      * @param FileLoggableReverter $loggableReverter
  45.      * @param ChangeLogRepository  $changeLogRepository
  46.      */
  47.     public function __construct(
  48.         FileManager $fileManager,
  49.         CacheManager $cacheManager,
  50.         RouterInterface $router,
  51.         FileLoggableReverter $loggableReverter,
  52.         ChangeLogRepository $changeLogRepository
  53.     ) {
  54.         $this->fileManager         $fileManager;
  55.         $this->cacheManager        $cacheManager;
  56.         $this->router              $router;
  57.         $this->loggableReverter    $loggableReverter;
  58.         $this->changeLogRepository $changeLogRepository;
  59.     }
  60.     /**
  61.      * @param $file
  62.      *
  63.      * @return bool
  64.      */
  65.     public function validUrl(File $file): bool
  66.     {
  67.         if (!$file instanceof File || $file->isPrivate()) {
  68.             return false;
  69.         }
  70.         $path $this->fileManager->getFs()->getFullPathname($file);
  71.         return file_exists($path);
  72.     }
  73.     /**
  74.      * @param $file
  75.      *
  76.      * @return null|string
  77.      */
  78.     public function fileUrl(File $file): ?string
  79.     {
  80.         if (!$this->validUrl($file)) {
  81.             return null;
  82.         }
  83.         return $this->router->generate('fm_file', ['id' => $file->getId()]);
  84.     }
  85.     /**
  86.      * @param File     $file
  87.      * @param string   $imagineFilterName
  88.      * @param array    $runtimeConfig
  89.      * @param int|null $version
  90.      *
  91.      * @return string|null
  92.      * @throws \Exception
  93.      */
  94.     public function imageUrl(File $filestring $imagineFilterName, array $runtimeConfig = [], int $version null): ?string
  95.     {
  96.         Assert::stringNotEmpty($imagineFilterName'Imagine filter name must be provided');
  97.         if (null === $version) {
  98.             $version $this->loggableReverter->getCurrentVersion($file);
  99.         }
  100.         $path $this->fileManager->getFs()->getPathname($file$version);
  101.         return $this->cacheManager->getBrowserPath($path$imagineFilterName$runtimeConfig);
  102.     }
  103.     /**
  104.      * @param $file
  105.      *
  106.      * @return bool
  107.      */
  108.     public function supports($file null): bool
  109.     {
  110.         if (!$file instanceof File) {
  111.             return false;
  112.         }
  113.         return $this->validUrl($file);
  114.     }
  115. }