<?php
namespace App\EventListener;
use App\Enum\DocumentTypeOrganizationEnum;
use App\Enum\DocumentTypeUserEnum;
use Doctrine\ORM\EntityManagerInterface;
use Evo\Infrastructure\MappingORM\Document;
use Symfony\Contracts\Translation\TranslatorInterface;
use Vich\UploaderBundle\Event\Event;
class DocumentUploadListener
{
private array $documentList = [];
private EntityManagerInterface $em;
private TranslatorInterface $translator;
public function __construct(EntityManagerInterface $em, TranslatorInterface $translator)
{
$this->em = $em;
$this->translator = $translator;
}
public function onVichUploaderPreUpload(Event $event)
{
$object = $event->getObject();
if ($object instanceof Document) {
if (null !== $object->getId()) {
$this->documentList[$object->getId()] = $object->getPath();
}
if (DocumentTypeUserEnum::isValueExist($object->getType())) {
$trans = DocumentTypeUserEnum::getReadableValue($object->getType());
} else {
$trans = DocumentTypeOrganizationEnum::getReadableValue($object->getType());
}
$object->setName($this->translator->trans($trans));
}
}
public function onVichUploaderPostUpload(Event $event)
{
$object = $event->getObject();
if ($object instanceof Document && null !== $object->getId() && array_key_exists($object->getId(), $this->documentList)) {
$document = clone $object;
$document->resetId()
->setBypassSubscriber(true)
->setPath($this->documentList[$object->getId()]);
$this->em->persist($document);
$this->em->flush();
}
}
}