<?php
namespace App\EventSubscriber;
use App\Entity\Article;
use App\Entity\ArticleCategorie;
use App\Entity\ArticleContenu;
use App\Entity\ArticleCritere;
use App\Entity\ArticleCritereValeur;
use App\Entity\ArticleType;
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;
use Symfony\Component\Security\Core\Authentication\Token\Storage\TokenStorageInterface;
class ArticleSubscriber implements EventSubscriberInterface
{
private $entityManager;
private ManagerRegistry $manager;
public function __construct(
ManagerRegistry $manager,
EntityManagerInterface $entityManager,
LoggerInterface $logger,
TokenStorageInterface $tokenStorage
) {
$this->manager = $manager;
$this->entityManager = $entityManager;
$this->logger = $logger;
$this->tokenStorage = $tokenStorage;
}
public static function getSubscribedEvents()
{
return [
AfterEntityPersistedEvent::class => ['afterAdd'],
AfterEntityUpdatedEvent::class => ['afterUpdate']
];
}
public function afterAdd(AfterEntityPersistedEvent $event)
{
$entity = $event->getEntityInstance();
if ($entity instanceof ArticleType) {
$articles = $entity->getArticles();
$nbr = 0;
foreach ($articles as $article) {
$nbr += count($article->getPage());
}
$entity->setNbrLiaison($nbr);
if ($entity->getIdImport() == null || $entity->getIdImport() == '') {
$entity->setIdImport(date('Y-m-d-H-i-s') . '-article-type-' . $entity->getId() . "-" . $entity->getProjet()->getId());
}
if ($entity->getPermalink() == null || $entity->getPermalink() == '') {
$time = new \DateTime();
$year = $time->format('y');
$month = $time->format('m');
$day = $time->format('d');
$hour = $time->format('H');
$min = $time->format('i');
$sec = $time->format('s');
$entity->setPermalink($year . $month . $day . $hour . $min . $sec . $entity->getId());
}
$articleTypes = $entity->getProjet()->getArticleTypes();
$count = 0;
foreach ($articleTypes as $key => $articleType) {
if (strtolower($articleType->getType()) == strtolower($entity->getType())) {
$count++;
}
}
if ($count > 1) {
$this->entityManager->remove($entity);
}
$this->entityManager->flush();
} else if ($entity instanceof Article) {
$type = $this->manager->getRepository(ArticleType::class)->findOneBy(['type' => $entity->getType()->getType()]);
$nbr = 0;
$nbr += count($entity->getPage());
$type->setNbrLiaison($nbr);
if ($entity->getIdImport() == null || $entity->getIdImport() == '') {
$entity->setIdImport(date('Y-m-d-H-i-s') . '-article-' . $entity->getId() . "-" . $entity->getType() . "-" . $entity->getType()->getProjet()->getId());
}
if ($entity->getPermalink() == null || $entity->getPermalink() == '') {
$time = new \DateTime();
$year = $time->format('y');
$month = $time->format('m');
$day = $time->format('d');
$hour = $time->format('H');
$min = $time->format('i');
$sec = $time->format('s');
$entity->setPermalink($year . $month . $day . $hour . $min . $sec . $entity->getId());
}
$entity->setNomRedacteur($this->tokenStorage->getToken()->getUser());
$entity->setIdImportType($entity->getType()->getIdImport());
if ($entity->getCategorie() != null) {
$entity->setIdImportCategorie($entity->getCategorie()->getIdImport());
}
$this->entityManager->flush();
} else if ($entity instanceof ArticleContenu) {
if ($entity->getIdImport() == null || $entity->getIdImport() == '') {
$entity->setIdImport(date('Y-m-d-H-i-s') . '-article-contenu-' . $entity->getId() . "-" . $entity->getArticle()->getId() . $entity->getArticle()->getType()->getId() . $entity->getArticle()->getType()->getProjet()->getId());
}
$entity->setIdImportArticle($entity->getArticle()->getIdImport());
$this->entityManager->flush();
} else if ($entity instanceof ArticleCategorie) {
if ($entity->getIdImport() == null || $entity->getIdImport() == '') {
$entity->setIdImport(date('Y-m-d-H-i-s') . '-article-categorie-' . $entity->getId() . "-" . $entity->getType() . "-" . $entity->getType()->getProjet()->getId());
}
$entity->setIdImportType($entity->getType()->getIdImport());
if ($entity->getPermalink() == null || $entity->getPermalink() == '') {
$time = new \DateTime();
$year = $time->format('y');
$month = $time->format('m');
$day = $time->format('d');
$hour = $time->format('H');
$min = $time->format('i');
$sec = $time->format('s');
$entity->setPermalink($year . $month . $day . $hour . $min . $sec . $entity->getId());
}
$articleCategories = $entity->getType()->getArticleCategories();
$count = 0;
foreach ($articleCategories as $key => $articleCategorie) {
if (strtolower($articleCategorie->getLabel()) == strtolower($entity->getLabel())) {
$count++;
}
}
if ($count > 1) {
$this->entityManager->remove($entity);
}
$this->entityManager->flush();
} else if ($entity instanceof ArticleCritere) {
if ($entity->getIdImport() == null || $entity->getIdImport() == '') {
$entity->setIdImport(date('Y-m-d-H-i-s') . '-article-critere-' . $entity->getId() . "-" . $entity->getType() . "-" . $entity->getType()->getProjet()->getId());
}
$entity->setIdImportType($entity->getType()->getIdImport());
$articleCriteres = $entity->getType()->getArticleCriteres();
$count = 0;
foreach ($articleCriteres as $key => $articleCritere) {
if (strtolower($articleCritere->getLabel()) == strtolower($entity->getLabel())) {
$count++;
}
}
if ($count > 1) {
$this->entityManager->remove($entity);
}
$this->entityManager->flush();
} else if ($entity instanceof ArticleCritereValeur) {
if ($entity->getArticle() != null) {
$entity->setIdImportArticle($entity->getArticle()->getIdImport());
}
$entity->setIdImportCritere($entity->getCritere()->getIdImport());
$this->entityManager->flush();
} else {
return;
}
}
public function afterUpdate(AfterEntityUpdatedEvent $event)
{
$entity = $event->getEntityInstance();
if ($entity instanceof ArticleType) {
$articles = $entity->getArticles();
$nbr = 0;
foreach ($articles as $article) {
$nbr += count($article->getPage());
}
$entity->setNbrLiaison($nbr);
if ($entity->getIdImport() == null || $entity->getIdImport() == '') {
$entity->setIdImport(date('Y-m-d-H-i-s') . '-article-type-' . $entity->getId() . "-" . $entity->getProjet()->getId());
}
if ($entity->getPermalink() == null || $entity->getPermalink() == '') {
$time = new \DateTime();
$year = $time->format('y');
$month = $time->format('m');
$day = $time->format('d');
$hour = $time->format('H');
$min = $time->format('i');
$sec = $time->format('s');
$entity->setPermalink($year . $month . $day . $hour . $min . $sec . $entity->getId());
}
$this->entityManager->flush();
} else if ($entity instanceof Article) {
$type = $this->manager->getRepository(ArticleType::class)->findOneBy(['type' => $entity->getType()->getType()]);
$nbr = 0;
$nbr += count($entity->getPage());
$type->setNbrLiaison($nbr);
if ($entity->getIdImport() == null || $entity->getIdImport() == '') {
$entity->setIdImport(date('Y-m-d-H-i-s') . '-article-' . $entity->getId() . "-" . $entity->getType() . "-" . $entity->getType()->getProjet()->getId());
}
if ($entity->getPermalink() == null || $entity->getPermalink() == '') {
$time = new \DateTime();
$year = $time->format('y');
$month = $time->format('m');
$day = $time->format('d');
$hour = $time->format('H');
$min = $time->format('i');
$sec = $time->format('s');
$entity->setPermalink($year . $month . $day . $hour . $min . $sec . $entity->getId());
}
$entity->setIdImportType($entity->getType()->getIdImport());
if ($entity->getCategorie() != null) {
$entity->setIdImportCategorie($entity->getCategorie()->getIdImport());
}
$this->entityManager->flush();
} else if ($entity instanceof ArticleContenu) {
if ($entity->getIdImport() == null || $entity->getIdImport() == '') {
$entity->setIdImport(date('Y-m-d-H-i-s') . '-article-contenu-' . $entity->getId() . "-" . $entity->getArticle()->getId() . $entity->getArticle()->getType()->getId() . $entity->getArticle()->getType()->getProjet()->getId());
}
$entity->setIdImportArticle($entity->getArticle()->getIdImport());
$this->entityManager->flush();
} else if ($entity instanceof ArticleCategorie) {
if ($entity->getIdImport() == null || $entity->getIdImport() == '') {
$entity->setIdImport(date('Y-m-d-H-i-s') . '-article-categorie-' . $entity->getId() . "-" . $entity->getType() . "-" . $entity->getType()->getProjet()->getId());
}
$entity->setIdImportType($entity->getType()->getIdImport());
if ($entity->getPermalink() == null || $entity->getPermalink() == '') {
$time = new \DateTime();
$year = $time->format('y');
$month = $time->format('m');
$day = $time->format('d');
$hour = $time->format('H');
$min = $time->format('i');
$sec = $time->format('s');
$entity->setPermalink($year . $month . $day . $hour . $min . $sec . $entity->getId());
}
$this->entityManager->flush();
} else if ($entity instanceof ArticleCritere) {
if ($entity->getIdImport() == null || $entity->getIdImport() == '') {
$entity->setIdImport(date('Y-m-d-H-i-s') . '-article-critere-' . $entity->getId() . "-" . $entity->getType() . "-" . $entity->getType()->getProjet()->getId());
}
$entity->setIdImportType($entity->getType()->getIdImport());
$this->entityManager->flush();
} else if ($entity instanceof ArticleCritereValeur) {
if ($entity->getArticle() != null) {
$entity->setIdImportArticle($entity->getArticle()->getIdImport());
}
$entity->setIdImportCritere($entity->getCritere()->getIdImport());
$this->entityManager->flush();
} else {
return;
}
}
}