Commit 2b978da9 authored by Anthony Gautreau's avatar Anthony Gautreau
Browse files

Merge branch 'main' of git.unicaen.fr:lib/unicaen-modern/utilisateur

parents b64c0bfc 5af813c6
Loading
Loading
Loading
Loading
+1 −1
Changes for .version: 1 added line, 1 removed line.
Original line number Diff line number Diff line
0.2.2
0.3.1
+9 −4
Changes for config/services.yaml: 9 added lines, 4 removed lines.
Original line number Diff line number Diff line
parameters:
  unicaen.user_class: 'Unicaen\Utilisateur\Entity\User'
  unicaen.role_class: 'Unicaen\Utilisateur\Entity\Role'
  histo.histo_default_username:  '%env(trim:HISTO_DEFAULT_USERNAME)%'

services:
  _defaults:
    autowire: true
@@ -6,7 +11,7 @@ services:
  Unicaen\Utilisateur\:
    resource: '../src/*'

parameters:
  unicaen.user_class: 'Unicaen\Utilisateur\Entity\User'
  unicaen.role_class: 'Unicaen\Privilege\Entity\Role'
  unicaen.user_role: 'Unicaen\Privilege\Entity\UserRole'
 No newline at end of file
  'Unicaen\Utilisateur\Serializer\HistoContextBuilder':
    decorates: 'api_platform.serializer.context_builder'
    arguments: [ '@Unicaen\Utilisateur\Serializer\HistoContextBuilder.inner' ]
    autoconfigure: false
+1 −1
Changes for src/Entity/AbstractUser.php: 1 added line, 1 removed line.
Original line number Diff line number Diff line
@@ -45,7 +45,7 @@ abstract class AbstractUser implements UserInterface, PasswordAuthenticatedUserI
    #[ORM\Column(length: 180, unique: true)]
    protected string $email;

    #[Groups(['user:read', 'user:create', 'user:update'])]
    #[Groups(['user:read', 'user:create', 'user:update', 'histoUser:read'])]
    #[ORM\Column(length: 180, nullable: true)]
    protected ?string $displayName = null;

+56 −0
Changes for src/Event/HistoriqueListener.php: 56 added lines, 0 removed lines.
Original line number Diff line number Diff line
<?php

namespace Unicaen\Utilisateur\Event;

use DateTime;
use Doctrine\Bundle\DoctrineBundle\Attribute\AsDoctrineListener;
use Doctrine\ORM\EntityManagerInterface;
use Doctrine\ORM\Events;
use Doctrine\Persistence\Event\LifecycleEventArgs;
use Symfony\Bundle\SecurityBundle\Security;
use Symfony\Component\DependencyInjection\ParameterBag\ContainerBagInterface;
use Unicaen\Utilisateur\Model\HistoriqueAwareInterface;
use Unicaen\Utilisateur\Repository\HistoUserRepository;

#[AsDoctrineListener(event: Events::prePersist, connection: 'default')]
#[AsDoctrineListener(event: Events::preUpdate, connection: 'default')]
class HistoriqueListener
{
    protected HistoUserRepository $histoUserRepository;
    public function __construct
    (
        HistoUserRepository $histoUserRepository
    ) {
        $this->histoUserRepository = $histoUserRepository;
    }

    /**
     * @throws \Exception
     */
    public function prePersist(LifecycleEventArgs $args)
    {
        $entity = $args->getObject();
        if (! $entity instanceof HistoriqueAwareInterface) {
            return;
        }
        $now = new DateTime();
        $user = $this->histoUserRepository->getHistoUser();
        $entity->setHistoCreation($now);
        $entity->setHistoCreateur($user);
    }

    /**
     * @throws \Exception
     */
    public function preUpdate(LifecycleEventArgs $args)
    {
        $entity = $args->getObject();
        if (! $entity instanceof HistoriqueAwareInterface) {
            return;
        }
        $now = new DateTime();
        $user = $this->histoUserRepository->getHistoUser();
        $entity->setHistoModification($now);
        $entity->setHistoModificateur($user);
    }
}
 No newline at end of file
+18 −14
Changes for src/Repository/HistoUserRepository.php: 18 added lines, 14 removed lines.
Original line number Diff line number Diff line
<?php

namespace Unicaen\Utilisateur\State;
namespace Unicaen\Utilisateur\Repository;

use Doctrine\ORM\EntityManagerInterface;
use Error;
use Exception;
use Doctrine\Persistence\ManagerRegistry;
use Doctrine\Bundle\DoctrineBundle\Repository\ServiceEntityRepository;
use Symfony\Bundle\SecurityBundle\Security;
use Symfony\Component\DependencyInjection\ParameterBag\ContainerBagInterface;
use Symfony\Component\Security\Core\User\UserInterface;
use Unicaen\Utilisateur\Entity\User;
use Error;
use Exception;


/**
 * Trait qui retourne si possible l'utilisateur pour le process
 * Soit l'utilisateur connecté, soit celui dont le code est fournis par le parametre histo.histo_default_username
 * Repository de UnicaenUtilisateur mais qui permet de déterminer l'utiliser à utiliser dans les champs d'historisation
 * Choix fait de ne pas l'intégrer directement dans UtilisateurRepository pour ne pas obliger des application n'utilisant pas de champs d'historisation d'avoir cette méthode spécigique
 */

/**
 * @var ?Security $security,
 * @var ?EntityManagerInterface $em,
 * @var ?ContainerBagInterface $params,
 */
Trait HistoUserTrait
class HistoUserRepository extends UtilisateurRepository
{
    public function __construct(
        private ManagerRegistry $registry,
        private Security $security,
        private ContainerBagInterface $param)
    {
        parent::__construct($registry, User::class);
    }

    const HISTO_DEFAULT_USERNAME = 'histo.histo_default_username';
    protected function getHistoUser() : ?UserInterface
    public function getHistoUser() : ?UserInterface
    {
        try {
            if (isset($this->security)) {
@@ -41,7 +45,7 @@ Trait HistoUserTrait
                catch (Exception|Error $e){
                    throw new Exception("Le paramétre config d'histo_user n'est pas définie");
                }
                $user = $this->em->getRepository(User::class)->findOneBy(['username' => $defaultUsername]);
                $user = $this->findOneBy(['username' => $defaultUsername]);
                if(!isset($user)){
                    throw new Exception("Utilisateur par défaut non trouvée");
                }
Loading