<?php
namespace App\EventSubscriber;
use App\Entity\ClassementPpf;
use App\Entity\User;
use EasyCorp\Bundle\EasyAdminBundle\Event\AfterEntityDeletedEvent;
use EasyCorp\Bundle\EasyAdminBundle\Event\AfterEntityPersistedEvent;
use EasyCorp\Bundle\EasyAdminBundle\Event\AfterEntityUpdatedEvent;
use EasyCorp\Bundle\EasyAdminBundle\Event\BeforeEntityPersistedEvent;
use EasyCorp\Bundle\EasyAdminBundle\Event\BeforeEntityUpdatedEvent;
use Symfony\Component\Cache\Adapter\FilesystemAdapter;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Symfony\Component\HttpFoundation\Session\SessionInterface;
use Symfony\Component\PasswordHasher\Hasher\UserPasswordHasherInterface;
use Symfony\Component\Translation\TranslatableMessage;
class EasyAdminSubscriber implements EventSubscriberInterface
{
private $passwordHasher;
public function __construct(UserPasswordHasherInterface $passwordHasher, SessionInterface $session)
{
$this->passwordHasher = $passwordHasher;
$this->session = $session;
}
public static function getSubscribedEvents()
{
return [
BeforeEntityPersistedEvent::class => [['setUser'], ['setPoints']],
BeforeEntityUpdatedEvent::class => [['updatePoints']],
AfterEntityPersistedEvent::class => ['flashMessageAfterPersist'],
AfterEntityUpdatedEvent::class => ['flashMessageAfterUpdate'],
AfterEntityDeletedEvent::class => ['flashMessageAfterDelete'],
];
}
public function setUser(BeforeEntityPersistedEvent $event)
{
$entity = $event->getEntityInstance();
if (!($entity instanceof User)) {
return;
}
$passwordEncoded = $this->passwordHasher->hashPassword($entity, $entity->getPassword());
$entity->setPassword($passwordEncoded);
}
public function setPoints(BeforeEntityPersistedEvent $event)
{
$entity = $event->getEntityInstance();
$this->processPoints($entity);
}
public function updatePoints(BeforeEntityUpdatedEvent $event)
{
$entity = $event->getEntityInstance();
$this->processPoints($entity);
}
public function flashMessageAfterPersist(AfterEntityPersistedEvent $event): void
{
$this->session->getFlashBag()->add('success', new TranslatableMessage('content_admin.flash_message.create', [
'%name%' => (string)$event->getEntityInstance(),
], 'admin'));
}
public function flashMessageAfterUpdate(AfterEntityUpdatedEvent $event): void
{
$this->session->getFlashBag()->add('success', new TranslatableMessage('content_admin.flash_message.update', [
'%name%' => (string)$event->getEntityInstance(),
], 'admin'));
}
public function flashMessageAfterDelete(AfterEntityDeletedEvent $event): void
{
$this->session->getFlashBag()->add('success', new TranslatableMessage('content_admin.flash_message.delete', [
'%name%' => (string)$event->getEntityInstance(),
], 'admin'));
}
private function processPoints($entity)
{
if (!($entity instanceof ClassementPpf)) {
return;
}
$entity->setPoints($entity->getPositionClassement()->getPoints());
$cachePool = new FilesystemAdapter('', 1800, "cache");
if ($cachePool->hasItem('classement_homme')) {
$cachePool->delete('classement_homme');
}
if ($cachePool->hasItem('classement_femme')) {
$cachePool->delete('classement_femme');
}
}
}