point-tools/old/src/PointToolsBundle/EventListener/UsersUpdatedSubscriber.php

80 lines
2.1 KiB
PHP
Raw Normal View History

2016-03-29 00:12:52 +00:00
<?php
namespace src\PointToolsBundle\EventListener;
2016-03-29 00:12:52 +00:00
use Doctrine\Common\EventSubscriber;
// For new doctrine: https://symfony.com/doc/current/cookbook/doctrine/event_listeners_subscribers.html#creating-the-subscriber-class
//use Doctrine\Common\Persistence\Event\LifecycleEventArgs;
//use Doctrine\Common\Persistence\Event\PreUpdateEventArgs;
use Doctrine\ORM\Event\PostFlushEventArgs;
use Doctrine\ORM\Event\PreUpdateEventArgs;
use src\PointToolsBundle\Entity\User;
use src\PointToolsBundle\Entity\UserRenameEvent;
use src\PointToolsBundle\Event\UsersRenamedEvent;
use Symfony\Component\EventDispatcher\EventDispatcherInterface;
2016-03-29 00:12:52 +00:00
class UsersUpdatedSubscriber implements EventSubscriber
2016-03-29 00:12:52 +00:00
{
/**
* @var UserRenameEvent[]
*/
private $renames = [];
2016-03-29 00:12:52 +00:00
/**
* @var EventDispatcherInterface
*/
private $eventDispatcher;
/**
* UserRenameSubscriber constructor.
*
* @param EventDispatcherInterface $eventDispatcher
*/
public function __construct(EventDispatcherInterface $eventDispatcher)
{
$this->eventDispatcher = $eventDispatcher;
}
public function getSubscribedEvents(): array
2016-03-29 00:12:52 +00:00
{
return [
'preUpdate',
'postFlush',
];
}
public function preUpdate(PreUpdateEventArgs $event): void
2016-03-29 00:12:52 +00:00
{
/** @var User $entity */
$entity = $event->getObject();
if (!$entity instanceof User) {
return;
}
if ($event->hasChangedField('login')) {
$this->renames[] = new UserRenameEvent($entity, $event->getOldValue('login'));
2016-03-29 00:12:52 +00:00
}
}
public function postFlush(PostFlushEventArgs $event): void
2016-03-29 00:12:52 +00:00
{
if (0 !== count($this->renames)) {
// Creating event for dispatch
$usersRenamedEvent = new UsersRenamedEvent($this->renames);
2016-03-29 00:12:52 +00:00
$em = $event->getEntityManager();
foreach ($this->renames as $item) {
2016-03-29 00:12:52 +00:00
$em->persist($item);
}
$this->renames = [];
2016-03-29 00:12:52 +00:00
$em->flush();
$this->eventDispatcher->dispatch(UsersRenamedEvent::NAME, $usersRenamedEvent);
2016-03-29 00:12:52 +00:00
}
}
}