src/Service/CustomerFile/CustomerFileDownloadManager.php line 91

Open in your IDE?
  1. <?php
  2. namespace App\Service\CustomerFile;
  3. use App\Model\CustomerFile\CustomerFile;
  4. use App\Service\ApiWebService;
  5. use App\Service\Provider\ApiGedProvider;
  6. use App\Service\User\UserManager;
  7. use Symfony\Component\HttpKernel\Exception\UnauthorizedHttpException;
  8. use Symfony\Contracts\HttpClient\Exception\TransportExceptionInterface;
  9. /**
  10.  * Class CustomerFileDownloadManager.
  11.  */
  12. final class CustomerFileDownloadManager
  13. {
  14.     /**
  15.      * @var ApiGedProvider
  16.      */
  17.     private $apiGedProvider;
  18.     /**
  19.      * @var ApiWebService
  20.      */
  21.     private $apiWebService;
  22.     /**
  23.      * @var UserManager
  24.      */
  25.     private $userManager;
  26.     /**
  27.      * CustomerFileDownloadManager constructor.
  28.      *
  29.      * @param ApiGedProvider $apiGedProvider
  30.      * @param ApiWebService  $apiWebService
  31.      * @param UserManager    $userManager
  32.      */
  33.     public function __construct(ApiGedProvider $apiGedProviderApiWebService $apiWebServiceUserManager $userManager)
  34.     {
  35.         $this->apiGedProvider $apiGedProvider;
  36.         $this->apiWebService $apiWebService;
  37.         $this->userManager $userManager;
  38.     }
  39.     /**
  40.      * @param CustomerFile $customerFile
  41.      *
  42.      * @return bool|false|string
  43.      *
  44.      * @throws TransportExceptionInterface
  45.      */
  46.     public function getFile(CustomerFile $customerFile): string
  47.     {
  48.         if ($this->userManager->getCurrentLoggedUser()->getCustomerId() === $customerFile->getCustomerId()) {
  49.             return $this->getFileFromApi($customerFile);
  50.         }
  51.         throw new UnauthorizedHttpException('''Forbidden.');
  52.     }
  53.     /**
  54.      * @param string $customerFileId
  55.      *
  56.      * @return string
  57.      *
  58.      * @throws TransportExceptionInterface
  59.      */
  60.     public function getLogoWithId(string $customerFileId): string
  61.     {
  62.         return $this->getFileFromApi(null$customerFileId);
  63.     }
  64.     /**
  65.      * @param CustomerFile|null $customerFile
  66.      * @param string|null       $customerFileId
  67.      *
  68.      * @return bool|string
  69.      *
  70.      * @throws TransportExceptionInterface
  71.      */
  72.     private function getFileFromApi(CustomerFile $customerFile nullstring $customerFileId null)
  73.     {
  74.         $response $this->apiWebService->send(
  75.             $this->apiGedProvider,
  76.             'GET',
  77.             null === $customerFileId $customerFile->getContentUrl() : '/api/logo/'.$customerFileId,
  78.             null
  79.         );
  80.         $fileName tempnam(sys_get_temp_dir(), null === $customerFile 'logo' $customerFile->getCustomerId());
  81.         $file fopen($fileName'a+');
  82.         foreach ($this->apiWebService->getStreamFromResponse($response) as $chunk) {
  83.             fwrite($file$chunk->getContent());
  84.         }
  85.         fclose($file);
  86.         return $fileName;
  87.     }
  88. }