src/EventSubscriber/ImportSubscriber.php line 63

Open in your IDE?
  1. <?php
  2. namespace App\EventSubscriber;
  3. use App\Entity\Import;
  4. use App\Entity\Upload;
  5. use App\Service\EsSocket;
  6. use App\Service\EsUpload;
  7. use App\Handler\UserHandler;
  8. use App\Service\EsSpreadsheet;
  9. use App\Event\ImportPreUpdateEvent;
  10. use App\Event\ImportPrePersistEvent;
  11. use App\Event\ImportPostPersistEvent;
  12. use Doctrine\ORM\EntityManagerInterface;
  13. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  14. use Symfony\Component\HttpKernel\Exception\BadRequestHttpException;
  15. class ImportSubscriber implements EventSubscriberInterface
  16. {
  17.     public function __construct(
  18.         private UserHandler $handler,
  19.         private EntityManagerInterface $_em,
  20.         private EsUpload $esUpload,
  21.         private EsSpreadsheet $esSpreadsheet,
  22.         private EsSocket $esSocket,
  23.         private $localStorageFullPath
  24.     ) {}
  25.     public static function getSubscribedEvents(): array
  26.     {
  27.         return [
  28.             ImportPrePersistEvent::NAME => 'onPreCreate',
  29.             ImportPostPersistEvent::NAME => 'onPostCreate',
  30.             //ImportPreUpdateEvent::NAME => 'onPreUpdate',
  31.         ];
  32.     }
  33.     public function onPreCreate(ImportPrePersistEvent $event)
  34.     {
  35.         $object $event->getObject();
  36.         $filename $object->getFileName();
  37.         if (empty($filename)) {
  38.             throw new BadRequestHttpException('validation.user.import:filenameNotFound');
  39.         }
  40.         $file $this->esUpload->resolvePath($filenameUpload::FILETYPE_IMPORT_FILE);
  41.         $file $this->esSpreadsheet->convertToCsv($file);
  42.         $content file_get_contents($file);
  43.         if (file_exists($file)) {
  44.             unlink($file);
  45.         }
  46.         if (empty($content)) {
  47.             throw new BadRequestHttpException('validation.user.import:emptyFileContent');
  48.         }
  49.         $object->setPayload($content);
  50.     }
  51.     public function onPostCreate(ImportPostPersistEvent $event)
  52.     {
  53.         $object $event->getObject();
  54.         $this->handler->import($object);
  55.     }
  56.     public function onPreUpdate(ImportPreUpdateEvent $event)
  57.     {
  58.         $object $event->getObject();
  59.         $originalEvent $event->getEvent();
  60.         $changeSet $originalEvent->getEntityChangeSet();
  61.         if (isset($changeSet['status'])) {
  62.             if ($changeSet['status'][0] !== $changeSet['status'][1]) {
  63.                 $this->esSocket->emit(
  64.                     'backend-command',
  65.                     [
  66.                         'type' => 'import_user_status',
  67.                         'payload' => [
  68.                             'containerId' => $object->getContainer->getId(),
  69.                             'importId' => $object->getId(),
  70.                             'status' => $changeSet['status'][1]
  71.                         ]
  72.                     ]
  73.                 );
  74.             }
  75.         }
  76.     }
  77. }