Commit 589ef1b2 authored by Bertrand Gauthier's avatar Bertrand Gauthier
Browse files

Amélioration du HistoriqueListener: utilisation du créateur spécifié à la main...

Amélioration du HistoriqueListener: utilisation du créateur spécifié à la main si aucun utilsateur connecté disponible
parent ca573a4e
<?php
namespace UnicaenApp\ORM\Event\Listeners;
use RuntimeException;
use UnicaenAuth\Entity\Db\AbstractUser;
use Zend\ServiceManager\ServiceLocatorAwareInterface;
use Zend\ServiceManager\ServiceLocatorAwareTrait;
use Doctrine\Common\EventSubscriber;
use Doctrine\ORM\Event\LifecycleEventArgs;
use Doctrine\ORM\Event\PreUpdateEventArgs;
use Doctrine\ORM\Events;
use Doctrine\Common\EventSubscriber;
use RuntimeException;
use UnicaenApp\Entity\HistoriqueAwareInterface;
use UnicaenAuth\Entity\Db\AbstractUser;
use Zend\ServiceManager\ServiceLocatorAwareInterface;
use Zend\ServiceManager\ServiceLocatorAwareTrait;
/**
* Listener Doctrine.
*
* Modifie automatiquement l'heure et l'auteur de la création/modification
* de tout enregistrement dont la classe implémente HistoriqueAwareInterface.
* Renseigne si besoin l'heure et l'auteur de la création/modification
* de toute entité dont la classe implémente HistoriqueAwareInterface.
*
* Déclenchement : avant que l'enregistrement ne soit persisté (création) ou mis à jour (update).
*
......@@ -32,11 +33,8 @@ class HistoriqueListener implements EventSubscriber, ServiceLocatorAwareInterfac
protected $identity;
/**
*
* @param LifecycleEventArgs $args
*
* @return void
* @throws RuntimeException Aucun utilisateur connecté disponible pour la gestion de l'historique
* @throws RuntimeException Aucun utilisateur disponible pour en faire l'auteur de la création/modification
*/
protected function updateHistorique(LifecycleEventArgs $args)
{
......@@ -47,45 +45,61 @@ class HistoriqueListener implements EventSubscriber, ServiceLocatorAwareInterfac
return;
}
// l'utilisateur connecté sera l'auteur de la création/modification
$user = null;
if (($identity = $this->getIdentity())) {
if (isset($identity['db']) && $identity['db'] instanceof AbstractUser) {
$user = $identity['db'];
/* @var $user AbstractUser */
}
}
if (null === $user) {
throw new RuntimeException("Aucun utilisateur connecté disponible pour la gestion de l'historique.");
}
$now = new \DateTime();
/**
* Historique
*/
if (null === $entity->getHistoCreation()) {
$entity->setHistoCreation($now);
}
// on tente d'abord d'obtenir l'utilisateur connecté pour en faire l'auteur de la création/modification.
$user = $this->getAuthenticatedUser();
// si aucun utilisateur connecté n'est disponible, on utilise l'éventuel auteur existant
if (null === $user) {
$user = $entity->getHistoCreateur();
}
// si nous ne disposons d'aucun utilisateur, basta!
if (null === $user) {
throw new RuntimeException("Aucun utilisateur disponible pour en faire l'auteur de la création/modification.");
}
if (null === $entity->getHistoCreateur()) {
$entity->setHistoCreateur($user);
}
$entity->setHistoModificateur($user);
$entity->setHistoModification($now);
/* ce bloc a été mis en commentaire car il est inutile: cf. 2 lignes précédentes !
if (null === $entity->getHistoDestruction() && null === $entity->getHistoDestructeur()) {
$entity->setHistoModification($now)
$entity
->setHistoModification($now)
->setHistoModificateur($user);
}
*/
if (null !== $entity->getHistoDestruction() && null === $entity->getHistoDestructeur()) {
$entity->setHistoDestructeur($user);
}
}
/**
* Recherche l'utilisateur connecté pour l'utiliser comme auteur de la création/modification.
*
* @return AbstractUser
*/
private function getAuthenticatedUser()
{
$user = null;
if (($identity = $this->getIdentity())) {
if (isset($identity['db']) && $identity['db'] instanceof AbstractUser) {
/* @var $user AbstractUser */
$user = $identity['db'];
}
}
return $user;
}
/**
* @param LifecycleEventArgs $args
*/
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment