Commit d73c1a3a authored by Jean-Philippe Metivier's avatar Jean-Philippe Metivier Committed by David Surville
Browse files

debut de bricolage autour du listener

parent b22bb3ce
Loading
Loading
Loading
Loading
+9 −15
Original line number Diff line number Diff line
@@ -8,13 +8,12 @@ use Doctrine\ORM\Event\LifecycleEventArgs;
use Doctrine\ORM\Event\PreUpdateEventArgs;
use Doctrine\ORM\Events;
use Exception;
use Laminas\Authentication\AuthenticationService;
use RuntimeException;
use UnicaenUtilisateur\Entity\HistoriqueAwareInterface;
use UnicaenApp\Service\EntityManagerAwareTrait;
use UnicaenUtilisateur\Entity\Db\AbstractUser;
use UnicaenUtilisateur\Entity\Db\User;
use UnicaenUtilisateur\Entity\Db\UserInterface;
use UnicaenUtilisateur\Service\User\UserServiceAwareTrait;
use Laminas\Authentication\AuthenticationService;
use UnicaenUtilisateur\Entity\HistoriqueAwareInterface;
use UnicaenUtilisateur\Service\User\UserService;

/**
 * Listener Doctrine.
@@ -31,10 +30,7 @@ use Laminas\Authentication\AuthenticationService;
 */
class HistoriqueListener implements EventSubscriber
{
    use UserServiceAwareTrait;
    
    private ?int $defaultUser = null;
    public function setDefaultUser(?int $user) { $this->defaultUser = $user; }
    use EntityManagerAwareTrait;

    /**
     * @var AuthenticationService
@@ -81,10 +77,8 @@ class HistoriqueListener implements EventSubscriber
        // 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) $user = $entity->getHistoCreateur();
//        if (null === $user) $user = $this->authenticationService->getEntityManager()->getRepository(UserService::class)->find(0);
        if (null === $user) {
            if ($this->defaultUser) {
                $user = new User(); $user->setId($this->defaultUser);
+2 −5
Original line number Diff line number Diff line
@@ -3,11 +3,9 @@
namespace UnicaenUtilisateur\ORM\Event\Listeners;

use Interop\Container\ContainerInterface;
use Laminas\Authentication\AuthenticationService;
use Laminas\ServiceManager\FactoryInterface;
use Laminas\ServiceManager\ServiceLocatorInterface;
use Laminas\Authentication\AuthenticationService;
use UnicaenUtilisateur\Entity\Db\User;
use UnicaenUtilisateur\Service\User\UserService;

/**
 * Description of MouchardServiceFactory
@@ -31,8 +29,7 @@ class HistoriqueListenerFactory implements FactoryInterface

        $listener = new HistoriqueListener();
        $listener->setAuthenticationService($authenticationService);
        $listener->setDefaultUser($userId);
//        $listener->setDefaultUser($user);
        //$listener->setEntityManager($entityManager);

        return $listener;
    }
+29 −21
Original line number Diff line number Diff line
@@ -35,6 +35,7 @@ class UserService extends CommonService implements RechercheIndividuServiceInter
     */
    private $authenticationService;

    private ?string $applicationUsername;

    /**
     * @param string $userEntityClass
@@ -85,7 +86,34 @@ class UserService extends CommonService implements RechercheIndividuServiceInter
    }

    /**
     * @return UserInterface[]
     * @return string|null
     */
    public function getApplicationUsername(): ?string
    {
        return $this->applicationUsername;
    }

    /**
     * @param string|null $applicationUsername
     * @return UserService
     */
    public function setApplicationUsername(?string $applicationUsername): UserService
    {
        $this->applicationUsername = $applicationUsername;
        return $this;
    }

    /**
     * @return EntityRepository
     */
    public function getRepo()
    {
        return $this->getEntityManager()->getRepository($this->userEntityClass);
    }

    /**
     * @param mixed $id
     * @return UserInterface|null
     */
    public function findAll(array $orderBy = ['displayName' => 'ASC'])
    {
@@ -364,26 +392,6 @@ class UserService extends CommonService implements RechercheIndividuServiceInter
        return $utilisateur;
    }

    /**
     * @return \Laminas\Permissions\Acl\Role\RoleInterface|null
     */
    public function getConnectedRole()
    {
        $userRole = $utilisateur->getFullRole($role);

        $repo = $this->getEntityManager()->getRepository($this->userRolePerimetreEntityClass);
        $entity = $repo->findOneBy(['userRole' => $userRole, 'perimetre' => $perimetre]);

        try {
            $this->getEntityManager()->remove($entity);
            $this->getEntityManager()->flush($entity);
        } catch (\Exception $e) {
            throw new RuntimeException("Un problème est survenu lors de la suppression du périmètre \"" . $perimetre->getLibelle() . "\" à l'utilisateur " . $utilisateur->getUsername() . ".", null, $e);
        }

        return $utilisateur;
    }

    /**
     * @param UserInterface $utilisateur
     */
+4 −0
Original line number Diff line number Diff line
@@ -39,6 +39,10 @@ class UserServiceFactory

        $service = new UserService();
        $service->setEntityManager($entityManager);
        $service->setRoleService($roleService);
        $service->setServiceUserContext($userContext);
        $service->setUserEntityClass($allConfig['zfcuser']['user_entity_class'] ?? User::class);
        $service->setApplicationUsername($allConfig['unicaen-utilisateur']['application-username']);
        $service->setAuthenticationService($authenticationService);
        $service->setEntityClass($userEntityClass);
        $service->setUserRoleEntityClass($userRoleEntityClass);