src/EventSubscriber/ImageUpoadGlobalSubscriber.php line 98

Open in your IDE?
  1. <?php
  2. namespace App\EventSubscriber;
  3. use Doctrine\ORM\EntityManagerInterface;
  4. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  5. use Symfony\Component\HttpKernel\Event\ControllerEvent;
  6. use Symfony\Component\HttpKernel\KernelEvents;
  7. use Vich\UploaderBundle\Event\Event;
  8. use Vich\UploaderBundle\Event\Events;
  9. use Vich\UploaderBundle\Templating\Helper\UploaderHelper;
  10. use App\Service\ImageOptimizer;
  11. use App\Service\DocumentScanner;
  12. use Symfony\Component\DependencyInjection\ParameterBag\ParameterBagInterface;
  13. use Symfony\Component\HttpFoundation\File\File;
  14. use Symfony\Component\HttpFoundation\File\UploadedFile;
  15. class ImageUpoadGlobalSubscriber implements EventSubscriberInterface {
  16.     /**
  17.      * @var App\Service\ImageOptimizer
  18.      */
  19.     private $imageOptimizer;
  20.     /**
  21.      * @var DocumentScanner
  22.      */
  23.     private $documentScanner;
  24.     private $tmpFile;
  25.     public function __constructImageOptimizer $imageOptimizerUploaderHelper $uploaderHelperParameterBagInterface $parameterBagDocumentScanner $documentScanner ) {
  26.         $this->imageOptimizer    $imageOptimizer;
  27.         $this->uploaderHelper    $uploaderHelper;
  28.         $this->parameterBag $parameterBag;
  29.         $this->documentScanner $documentScanner;
  30.         $this->tmpFile "";
  31.     }
  32.     public static function getSubscribedEvents(): array
  33.     {
  34.         return [
  35.             Events::PRE_UPLOAD => 'onPreUpload',
  36.             Events::POST_UPLOAD => 'onPostUpload',
  37.         ];
  38.     }
  39.     public function onPreUpload(Event $event) {
  40.         $object $event->getObject();
  41.         $tmpFolder $this->parameterBag->get('kernel.project_dir') . DIRECTORY_SEPARATOR "tmp";
  42.         switch (get_class($object)) {
  43.             case 'App\Entity\MessageAttachement':
  44.                 $getter 'getAttachementFile';
  45.                 $setter 'setAttachementFile';
  46.                 break;
  47.             case 'App\Entity\Service':
  48.                 $getter 'getPictureFile';
  49.                 $setter 'setPictureFile';
  50.                 break;
  51.             case 'App\Entity\Company':
  52.                 $getter 'getLogoFile';
  53.                 $setter 'setLogoFile';
  54.                 break;
  55.             case 'App\Entity\MeasurementReportRoomPhoto':
  56.                 $getter 'getPhotoFile';
  57.                 $setter 'setPhotoFile';
  58.                 break;
  59.             default:
  60.                 $getter 'getDocumentFile';
  61.                 $setter 'setDocumentFile';
  62.                 break;
  63.         }
  64.         
  65.         $name $object->{$getter}()->getClientOriginalName();
  66.         $mime $object->{$getter}()->getClientMimeType();
  67.         $this->tmpFile $tmpFolder.DIRECTORY_SEPARATOR.$name;
  68.         $object->{$getter}()->move($tmpFolder$name);
  69.         $this->imageOptimizer->resize($this->tmpFile);
  70.         $file =  new UploadedFile$this->tmpFile$name$mime);
  71.         $object->{$setter}($file);
  72.         // Send the (already-local) image to ScanKit and store the optimized
  73.         // derivative. Sets optimizedName on $object; persisted via Vich's
  74.         // recomputeChangeSet (update) or the insert (new). Degrades gracefully.
  75.         $this->documentScanner->scanFromLocalFile($object$this->tmpFile);
  76.     }
  77.     public function onPostUpload(Event $event): void
  78.     {
  79.         unlink(($this->tmpFile));
  80.     }
  81. }