<?php
namespace App\EventSubscriber;
use App\Entity\Formulaire;
use App\Entity\FormulaireChamp;
use App\Entity\FormulaireChampLiee;
use App\Entity\FormulaireEtape;
use App\Entity\FormulaireInput;
use App\Entity\FormulaireOption;
use App\Entity\FormulaireRecap;
use Doctrine\ORM\EntityManagerInterface;
use Doctrine\Persistence\ManagerRegistry;
use EasyCorp\Bundle\EasyAdminBundle\Event\AfterEntityPersistedEvent;
use EasyCorp\Bundle\EasyAdminBundle\Event\AfterEntityUpdatedEvent;
use Psr\Log\LoggerInterface;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
class FormulaireSubscriber implements EventSubscriberInterface
{
private $entityManager;
private ManagerRegistry $manager;
public function __construct(
ManagerRegistry $manager,
EntityManagerInterface $entityManager,
LoggerInterface $logger
) {
$this->manager = $manager;
$this->entityManager = $entityManager;
$this->logger = $logger;
}
public static function getSubscribedEvents()
{
return [
AfterEntityPersistedEvent::class => ['afterAdd'],
AfterEntityUpdatedEvent::class => ['afterUpdate']
];
}
public function afterAdd(AfterEntityPersistedEvent $event)
{
$entity = $event->getEntityInstance();
if ($entity instanceof Formulaire) {
if ($entity->getIdImport() == null || $entity->getIdImport() == '') {
$idSetImport = date('YmdHis') . microtime(true) . 'formulaire' . $entity->getId() . "" . $entity->getProjet()->getId();
$entity->setIdImport(str_replace(".", "", $idSetImport));
}
$formulaires = $entity->getProjet()->getFormulaires();
$count = 0;
foreach ($formulaires as $key => $formulaire) {
if (strtolower($formulaire->getNom()) == strtolower($entity->getNom())) {
$count++;
}
}
if ($count > 1) {
$this->entityManager->remove($entity);
}
$this->entityManager->flush();
} else if ($entity instanceof FormulaireEtape) {
if ($entity->getIdImport() == null || $entity->getIdImport() == '') {
$idSetImport = date('YmdHis') . microtime(true) . 'formulaireEtape' . $entity->getId() . "" . $entity->getFormulaire()->getId() . "" . $entity->getFormulaire()->getProjet()->getId();
$entity->setIdImport(str_replace(".", "", $idSetImport));
}
$entity->setIdImportFormulaire($entity->getFormulaire()->getIdImport());
if ($entity->getSecure() == 'Email') {
// TODO add champliee Email
$formChamp = $this->manager->getRepository(FormulaireChamp::class)->findOneBy(['nom' => 'contact_email_secure']);
if ($formChamp == null) {
$formChamp = new FormulaireChamp();
$formChamp->setNom('contact_email_secure');
$formChamp->setQuestion('Saisissez votre adresse e-mail pour recevoir le code confidentiel');
$formChamp->setActif(true);
$formInput = $this->manager->getRepository(FormulaireInput::class)->findOneBy(['type' => 'email']);
if ($formInput == null) {
$formInput = new FormulaireInput();
$formInput->setType('email');
$formInput->setActif(true);
$formInput->setProjet($entity->getFormulaire()->getProjet());
$this->entityManager->persist($formInput);
}
$formChamp->setFormulaireInput($formInput);
$this->entityManager->persist($formChamp);
}
$champLiee = new FormulaireChampLiee();
$champLiee->setFormulaireChamp($formChamp);
$champLiee->setFormulaireEtape($entity);
$champLiee->setObligatoire(true);
$this->entityManager->persist($champLiee);
} else if ($entity->getSecure() == 'SMS') {
// TODO add champliee SMS
$formChamp = $this->manager->getRepository(FormulaireChamp::class)->findOneBy(['nom' => 'contact_tel_secure']);
if ($formChamp == null) {
$formChamp = new FormulaireChamp();
$formChamp->setNom('contact_tel_secure');
$formChamp->setQuestion('Saisissez votre numéro du téléphone pour recevoir le code confidentiel ');
$formChamp->setActif(true);
$formInput = $this->manager->getRepository(FormulaireInput::class)->findOneBy(['type' => 'tel']);
if ($formInput == null) {
$formInput = new FormulaireInput();
$formInput->setType('tel');
$formInput->setActif(true);
$formInput->setProjet($entity->getFormulaire()->getProjet());
$this->entityManager->persist($formInput);
}
$formChamp->setFormulaireInput($formInput);
$this->entityManager->persist($formChamp);
}
$champLiee = new FormulaireChampLiee();
$champLiee->setFormulaireChamp($formChamp);
$champLiee->setFormulaireEtape($entity);
$champLiee->setObligatoire(true);
$this->entityManager->persist($champLiee);
}
$this->entityManager->flush();
} else if ($entity instanceof FormulaireChampLiee) {
if ($entity->getIdImport() == null || $entity->getIdImport() == '') {
$idSetImport = date('YmdHis') . microtime(true) . 'formulaireChampLiee' . $entity->getId() . "" . $entity->getFormulaireEtape()->getId() . "" . $entity->getFormulaireEtape()->getFormulaire()->getId() . "" . $entity->getFormulaireEtape()->getFormulaire()->getProjet()->getId();
$entity->setIdImport(str_replace(".", "", $idSetImport));
}
$entity->setIdImportChamp($entity->getFormulaireChamp()->getIdImport());
$entity->setIdImportEtape($entity->getFormulaireEtape()->getIdImport());
$this->entityManager->flush();
} else if ($entity instanceof FormulaireInput) {
if ($entity->getIdImport() == null || $entity->getIdImport() == '') {
$idSetImport = date('YmdHis') . microtime(true) . 'formulaireInput' . $entity->getId() . "" . $entity->getProjet()->getId();
$entity->setIdImport(str_replace(".", "", $idSetImport));
}
$formInputs = $entity->getProjet()->getFormulaireInputs();
$count = 0;
foreach ($formInputs as $key => $formInput) {
if (strtolower($formInput->getType()) == strtolower($entity->getType())) {
$count++;
}
}
if ($count > 1) {
$this->entityManager->remove($entity);
}
$this->entityManager->flush();
} else if ($entity instanceof FormulaireRecap) {
if ($entity->getIdImport() == null || $entity->getIdImport() == '') {
$idSetImport = date('YmdHis') . microtime(true) . 'formulaireRecap' . $entity->getId() . "" . $entity->getProjet()->getId();
$entity->setIdImport(str_replace(".", "", $idSetImport));
}
$formulaireRecaps = $entity->getProjet()->getFormulaireRecaps();
$count = 0;
foreach ($formulaireRecaps as $key => $formulaireRecap) {
if (strtolower($formulaireRecap->getRecap()) == strtolower($entity->getRecap())) {
$count++;
}
}
if ($count > 1) {
$this->entityManager->remove($entity);
}
$this->entityManager->flush();
} else if ($entity instanceof FormulaireChamp) {
if ($entity->getIdImport() == null || $entity->getIdImport() == '') {
$idSetImport = date('YmdHis') . microtime(true) . 'formulaireChamp' . $entity->getId() . "" . $entity->getFormulaireInput()->getProjet()->getId();
$entity->setIdImport(str_replace(".", "", $idSetImport));
}
$entity->setIdImportInput($entity->getFormulaireInput()->getIdImport());
if ($entity->getFormulaireRecap() != null) {
$entity->setIdImportRecap($entity->getFormulaireRecap()->getIdImport());
}
$entity->setNom($this->slugify($entity->getNom()));
$formChamps = $entity->getFormulaireInput()->getFormulaireChamps();
$count = 0;
foreach ($formChamps as $key => $formChamp) {
if (strtolower($formChamp->getNom()) == strtolower($entity->getNom())) {
$count++;
}
}
if ($count > 1) {
$this->entityManager->remove($entity);
}
$this->entityManager->flush();
} else if ($entity instanceof FormulaireOption) {
if ($entity->getIdImport() == null || $entity->getIdImport() == '') {
$idSetImport = date('YmdHis') . microtime(true) . 'formulaireOption' . $entity->getId() . "" . $entity->getFormulaireChamp()->getId();
$entity->setIdImport(str_replace(".", "", $idSetImport));
}
$entity->setIdImportChamp($entity->getFormulaireChamp()->getIdImport());
$this->entityManager->flush();
} else {
return;
}
}
public function afterUpdate(AfterEntityUpdatedEvent $event)
{
$entity = $event->getEntityInstance();
if ($entity instanceof Formulaire) {
if ($entity->getIdImport() == null || $entity->getIdImport() == '') {
$idSetImport = date('YmdHis') . microtime(true) . 'formulaire' . $entity->getId() . "" . $entity->getProjet()->getId();
$entity->setIdImport(str_replace(".", "", $idSetImport));
}
$this->entityManager->flush();
} else if ($entity instanceof FormulaireEtape) {
if ($entity->getIdImport() == null || $entity->getIdImport() == '') {
$idSetImport = date('YmdHis') . microtime(true) . 'formulaireEtape' . $entity->getId() . "" . $entity->getFormulaire()->getId() . "" . $entity->getFormulaire()->getProjet()->getId();
$entity->setIdImport(str_replace(".", "", $idSetImport));
}
if ($entity->getSecure() == 'Email') {
$formChampEmail = $this->manager->getRepository(FormulaireChamp::class)->findOneBy(['nom' => 'contact_email_secure']);
if ($formChampEmail != null) {
$champLieeEmail = $this->manager->getRepository(FormulaireChampLiee::class)->findOneBy(['formulaireChamp' => $formChampEmail, 'formulaireEtape' => $entity]);
if ($champLieeEmail != null) {
$this->entityManager->remove($champLieeEmail);
}
}
$formChampTel = $this->manager->getRepository(FormulaireChamp::class)->findOneBy(['nom' => 'contact_tel_secure']);
if ($formChampTel != null) {
$champLieeTel = $this->manager->getRepository(FormulaireChampLiee::class)->findOneBy(['formulaireChamp' => $formChampTel, 'formulaireEtape' => $entity]);
if ($champLieeTel != null) {
$this->entityManager->remove($champLieeTel);
}
}
// TODO add champliee Email
$formChamp = $this->manager->getRepository(FormulaireChamp::class)->findOneBy(['nom' => 'contact_email_secure']);
if ($formChamp == null) {
$formChamp = new FormulaireChamp();
$formChamp->setNom('contact_email_secure');
$formChamp->setQuestion('Saisissez votre adresse e-mail pour recevoir le code confidentiel');
$formChamp->setActif(true);
$formInput = $this->manager->getRepository(FormulaireInput::class)->findOneBy(['type' => 'email']);
if ($formInput == null) {
$formInput = new FormulaireInput();
$formInput->setType('email');
$formInput->setActif(true);
$formInput->setProjet($entity->getFormulaire()->getProjet());
$this->entityManager->persist($formInput);
}
$formChamp->setFormulaireInput($formInput);
$this->entityManager->persist($formChamp);
}
$champLiee = $this->manager->getRepository(FormulaireChampLiee::class)->findOneBy(['formulaireChamp' => $formChamp, 'formulaireEtape' => $entity]);
if ($champLiee == null) {
$champLiee = new FormulaireChampLiee();
$champLiee->setFormulaireChamp($formChamp);
$champLiee->setFormulaireEtape($entity);
}
$champLiee->setObligatoire(true);
$this->entityManager->persist($champLiee);
} else if ($entity->getSecure() == 'SMS') {
$formChampEmail = $this->manager->getRepository(FormulaireChamp::class)->findOneBy(['nom' => 'contact_email_secure']);
if ($formChampEmail != null) {
$champLieeEmail = $this->manager->getRepository(FormulaireChampLiee::class)->findOneBy(['formulaireChamp' => $formChampEmail, 'formulaireEtape' => $entity]);
if ($champLieeEmail != null) {
$this->entityManager->remove($champLieeEmail);
}
}
$formChampTel = $this->manager->getRepository(FormulaireChamp::class)->findOneBy(['nom' => 'contact_tel_secure']);
if ($formChampTel != null) {
$champLieeTel = $this->manager->getRepository(FormulaireChampLiee::class)->findOneBy(['formulaireChamp' => $formChampTel, 'formulaireEtape' => $entity]);
if ($champLieeTel != null) {
$this->entityManager->remove($champLieeTel);
}
}
// TODO add champliee SMS
$formChamp = $this->manager->getRepository(FormulaireChamp::class)->findOneBy(['nom' => 'contact_tel_secure']);
if ($formChamp == null) {
$formChamp = new FormulaireChamp();
$formChamp->setNom('contact_tel_secure');
$formChamp->setQuestion('Saisissez votre numéro du téléphone pour recevoir le code confidentiel ');
$formChamp->setActif(true);
$formInput = $this->manager->getRepository(FormulaireInput::class)->findOneBy(['type' => 'tel']);
if ($formInput == null) {
$formInput = new FormulaireInput();
$formInput->setType('tel');
$formInput->setActif(true);
$formInput->setProjet($entity->getFormulaire()->getProjet());
$this->entityManager->persist($formInput);
}
$formChamp->setFormulaireInput($formInput);
$this->entityManager->persist($formChamp);
}
$champLiee = $this->manager->getRepository(FormulaireChampLiee::class)->findOneBy(['formulaireChamp' => $formChamp, 'formulaireEtape' => $entity]);
if ($champLiee == null) {
$champLiee = new FormulaireChampLiee();
$champLiee->setFormulaireChamp($formChamp);
$champLiee->setFormulaireEtape($entity);
}
$champLiee->setObligatoire(true);
$this->entityManager->persist($champLiee);
} else {
$formChampEmail = $this->manager->getRepository(FormulaireChamp::class)->findOneBy(['nom' => 'contact_email_secure']);
if ($formChampEmail != null) {
$champLieeEmail = $this->manager->getRepository(FormulaireChampLiee::class)->findOneBy(['formulaireChamp' => $formChampEmail, 'formulaireEtape' => $entity]);
if ($champLieeEmail != null) {
$this->entityManager->remove($champLieeEmail);
}
}
$formChampTel = $this->manager->getRepository(FormulaireChamp::class)->findOneBy(['nom' => 'contact_tel_secure']);
if ($formChampTel != null) {
$champLieeTel = $this->manager->getRepository(FormulaireChampLiee::class)->findOneBy(['formulaireChamp' => $formChampTel, 'formulaireEtape' => $entity]);
if ($champLieeTel != null) {
$this->entityManager->remove($champLieeTel);
}
}
}
$entity->setIdImportFormulaire($entity->getFormulaire()->getIdImport());
$this->entityManager->flush();
} else if ($entity instanceof FormulaireChampLiee) {
if ($entity->getIdImport() == null || $entity->getIdImport() == '') {
$idSetImport = date('YmdHis') . microtime(true) . 'formulaireChampliee' . $entity->getId() . "" . $entity->getFormulaireEtape()->getId() . "" . $entity->getFormulaireEtape()->getFormulaire()->getId() . "" . $entity->getFormulaireEtape()->getFormulaire()->getProjet()->getId();
$entity->setIdImport(str_replace(".", "", $idSetImport));
}
$entity->setIdImportChamp($entity->getFormulaireChamp()->getIdImport());
$entity->setIdImportEtape($entity->getFormulaireEtape()->getIdImport());
$this->entityManager->flush();
} else if ($entity instanceof FormulaireInput) {
if ($entity->getIdImport() == null || $entity->getIdImport() == '') {
$idSetImport = date('YmdHis') . microtime(true) . 'formulaireInput' . $entity->getId() . "" . $entity->getProjet()->getId();
$entity->setIdImport(str_replace(".", "", $idSetImport));
}
$this->entityManager->flush();
} else if ($entity instanceof FormulaireRecap) {
if ($entity->getIdImport() == null || $entity->getIdImport() == '') {
$idSetImport = date('YmdHis') . microtime(true) . 'formulaireRecap' . $entity->getId() . "" . $entity->getProjet()->getId();
$entity->setIdImport(str_replace(".", "", $idSetImport));
}
$this->entityManager->flush();
} else if ($entity instanceof FormulaireChamp) {
$entity->setNom($this->slugify($entity->getNom()));
if ($entity->getIdImport() == null || $entity->getIdImport() == '') {
$idSetImport = date('YmdHis') . microtime(true) . 'formulaireChamp' . $entity->getId() . "" . $entity->getFormulaireInput()->getProjet()->getId();
$entity->setIdImport(str_replace(".", "", $idSetImport));
}
$entity->setIdImportInput($entity->getFormulaireInput()->getIdImport());
if ($entity->getFormulaireRecap() != null) {
$entity->setIdImportRecap($entity->getFormulaireRecap()->getIdImport());
}
$this->entityManager->flush();
} else if ($entity instanceof FormulaireOption) {
if ($entity->getIdImport() == null || $entity->getIdImport() == '') {
$idSetImport = date('YmdHis') . microtime(true) . 'formulaireOption' . $entity->getId() . "" . $entity->getFormulaireChamp()->getId();
$entity->setIdImport(str_replace(".", "", $idSetImport));
}
$entity->setIdImportChamp($entity->getFormulaireChamp()->getIdImport());
$this->entityManager->flush();
} else {
return;
}
}
public function slugify($string)
{
return strtolower(trim(preg_replace('~[^0-9a-z]+~i', '-', html_entity_decode(preg_replace('~&([a-z]{1,2})(?:acute|cedil|circ|grave|lig|orn|ring|slash|th|tilde|uml);~i', '$1', htmlentities($string, ENT_QUOTES, 'UTF-8')), ENT_QUOTES, 'UTF-8')), '-'));
}
}