vendor/terminal42/contao-fineuploader/src/EventListener/FileUploadListener.php line 34

Open in your IDE?
  1. <?php
  2. declare(strict_types=1);
  3. namespace Terminal42\FineUploaderBundle\EventListener;
  4. use Contao\Config;
  5. use Contao\File;
  6. use Contao\FilesModel;
  7. use Contao\Validator;
  8. use Symfony\Component\HttpFoundation\JsonResponse;
  9. use Terminal42\FineUploaderBundle\Event\FileUploadEvent;
  10. use Terminal42\FineUploaderBundle\Uploader;
  11. use Terminal42\FineUploaderBundle\Widget\FrontendWidget;
  12. class FileUploadListener
  13. {
  14.     /**
  15.      * @var Uploader
  16.      */
  17.     private $uploader;
  18.     /**
  19.      * FileUploadListener constructor.
  20.      */
  21.     public function __construct(Uploader $uploader)
  22.     {
  23.         $this->uploader $uploader;
  24.     }
  25.     /**
  26.      * On file upload.
  27.      */
  28.     public function onFileUpload(FileUploadEvent $event): void
  29.     {
  30.         $widget $event->getWidget();
  31.         $filePath $this->uploader->upload($event->getRequest(), $widget);
  32.         if (null === $filePath) {
  33.             $event->setResponse(new JsonResponse([
  34.                 'success' => false,
  35.                 'error' => $GLOBALS['TL_LANG']['ERR']['general'],
  36.                 'preventRetry' => true,
  37.             ]));
  38.             return;
  39.         }
  40.         if (Validator::isUuid($filePath)) {
  41.             $fileModel FilesModel::findByUuid($filePath);
  42.             if (null === $fileModel) {
  43.                 $event->setResponse(new JsonResponse([
  44.                     'success' => false,
  45.                     'error' => $GLOBALS['TL_LANG']['ERR']['general'],
  46.                     'preventRetry' => true,
  47.                 ]));
  48.                 return;
  49.             }
  50.             $filePath $fileModel->path;
  51.         }
  52.         // Validate the image dimensions for the frontend widget
  53.         if ($widget instanceof FrontendWidget) {
  54.             $this->validateImageDimensions($widget$filePath);
  55.         }
  56.         if ($widget->hasErrors()) {
  57.             $response = [
  58.                 'success' => false,
  59.                 'error' => $widget->getErrorAsString(),
  60.                 'preventRetry' => true,
  61.             ];
  62.         } else {
  63.             $response = ['success' => true'file' => $filePath];
  64.         }
  65.         $event->setResponse(new JsonResponse($response));
  66.     }
  67.     /**
  68.      * Validate the image dimensions.
  69.      *
  70.      * @param string $filePath
  71.      */
  72.     private function validateImageDimensions(FrontendWidget $widget$filePath): void
  73.     {
  74.         $file = new File($filePath);
  75.         if ($file->isImage) {
  76.             $config $widget->getUploaderConfig();
  77.             $maxWidth $config->getMaxImageWidth() ?: Config::get('imageWidth');
  78.             $maxHeight $config->getMaxImageHeight() ?: Config::get('imageHeight');
  79.             // Image exceeds maximum image width
  80.             if ($maxWidth && $file->width $maxWidth) {
  81.                 $widget->addError(sprintf($GLOBALS['TL_LANG']['ERR']['filewidth'], ''$maxWidth));
  82.             }
  83.             // Image exceeds maximum image height
  84.             if ($maxHeight && $file->height $maxHeight) {
  85.                 $widget->addError(sprintf($GLOBALS['TL_LANG']['ERR']['fileheight'], ''$maxHeight));
  86.             }
  87.         }
  88.     }
  89. }