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

Changement des services de recherche

parent b24c1b0c
Loading
Loading
Loading
Loading
+4 −7
Original line number Diff line number Diff line
@@ -70,13 +70,11 @@ class UtilisateurController extends AbstractActionController
                switch ($source) {
                    case 'app' :
                        return $this->redirect()->toRoute('unicaen-utilisateur', [], ["query" => ["id" => $id]], true);

                    default :
                        if (isset($this->searchServices[$source])) {
                            $sourceUser = $this->searchServices[$source]->findById($id);
                        $sourceUser = $this->getUserService()->fetchSourceRechercheIndividu($source, $id);
                        if ($sourceUser !== null) {
                            $newUser = $this->userService->importFromRechercheIndividuResultatInterface($sourceUser, $source);
                            $user = $this->userService->findByUsername($newUser->getUsername($this->usernamefield));

                            $user = $this->userService->findByUsername($newUser->getUsername());
                            if (!$user) {
                                $user = $this->userService->create($newUser);
                            } else {
@@ -84,12 +82,11 @@ class UtilisateurController extends AbstractActionController
                                    sprintf("L'utilisateur <strong>%s (%s)</strong> existe déjà dans l'application.", $user->getDisplayName(), $user->getUsername($this->usernamefield))
                                );
                            }

                            $this->flashMessenger()->addSuccessMessage(sprintf("Utilisateur <strong>%s</strong> créé avec succès.", $user->getDisplayName()));
                            return $this->redirect()->toRoute('utilisateur', [], ["query" => ["id" => $user->getId()]], true);
                        }
                        else {
                            $this->flashMessenger()->addErrorMessage("La source \"$source\" n'est pas déclarée dans la configuration.");
                            $this->flashMessenger()->addErrorMessage("Aucun utilisateur de trouver dans la source");
                            return $this->redirect()->toRoute('utilisateur', [], [], true);
                        }
                }
+39 −3
Original line number Diff line number Diff line
@@ -30,6 +30,11 @@ class UserService extends CommonService implements RechercheIndividuServiceInter
     */
    protected $userRolePerimetreEntityClass;

    /**
     * @var RechercheIndividuServiceInterface[]
     */
    public $searchServices;
    
    /**
     * @var AuthenticationService
     */
@@ -168,12 +173,43 @@ class UserService extends CommonService implements RechercheIndividuServiceInter
        return $utilisateurs;
    }

    /**
     * @param string $texte
     * @param string $roleId
     * @return UserInterface[]
     */
    public function findByTermAndRole(string $texte, string $roleId)
    {
        $texte = strtolower($texte);
        $qb = $this->getRepo()->createQueryBuilder("u")
            ->andWhere("LOWER(u.displayName) LIKE :critere")
            ->setParameter("critere", '%'.strtolower($texte).'%')
            ->addSelect('r')->join('u.roles', 'r')
            ->andWhere('r.roleId = :role')
            ->setParameter("role", $roleId)
            ->orderBy("u.displayName");

        $utilisateurs = $qb->getQuery()->getResult();

        return $utilisateurs;
    }

    public function fetchSourceRechercheIndividu($source, $individu) : ?RechercheIndividuResultatInterface
    {
        $this->searchServices['app'] = $this;
        if (isset($this->searchServices[$source])) {
            $sourceUser = $this->searchServices[$source]->findById($individu);
            return $sourceUser;
        };
        return null;
    }
    
    /**
     * @param RechercheIndividuResultatInterface $individu
     * @param string $source
     * @param string $typePassword
     * @return UserInterface
     */
    public function importFromRechercheIndividuResultatInterface(RechercheIndividuResultatInterface $individu, $source)
    public function importFromRechercheIndividuResultatInterface(RechercheIndividuResultatInterface $individu, string $typePassword = 'ldap')
    {
        $attribut = $this->getAuthentificationConfig()['local']['ldap']['username'];

@@ -181,7 +217,7 @@ class UserService extends CommonService implements RechercheIndividuServiceInter
        $utilisateur->setDisplayName($individu->getDisplayname());
        $utilisateur->setUsername($individu->getUsername($attribut));
        $utilisateur->setEmail($individu->getEmail());
        $utilisateur->setPassword($source);
        $utilisateur->setPassword($typePassword);
        $utilisateur->setState(1);

        return $utilisateur;
+15 −5
Original line number Diff line number Diff line
@@ -10,6 +10,7 @@ use Psr\Container\NotFoundExceptionInterface;
use UnicaenAuthentification\Service\UserContext;
use UnicaenMail\Service\Mail\MailService;
use UnicaenUtilisateur\Entity\Db\User;
use UnicaenUtilisateur\Service\RechercheIndividu\RechercheIndividuServiceInterface;
use UnicaenUtilisateur\Service\Role\RoleService;
use Laminas\Authentication\AuthenticationService;

@@ -36,6 +37,7 @@ class UserServiceFactory
        $userContext = $container->get(UserContext::class);
        $allConfig = $container->get('Config');
        $authenticationService = $container->get('Laminas\Authentication\AuthenticationService');
        $moduleConfig = $allConfig['unicaen-utilisateur'];
        
        $service = new UserService();
        $service->setEntityManager($entityManager);
@@ -52,9 +54,17 @@ class UserServiceFactory
        $renderer = $container->get('ViewRenderer');
        $service->setRenderer($renderer);

        $config = $container->get('Config');
        $appname = $config['unicaen-app']['app_infos']['nom'];
        $service->setAppname($appname);
        // services de recherche d'un individu : application, ldap, octopus,...
        $service->searchServices = [];
        if(isset($moduleConfig['recherche-individu']) && !empty($moduleConfig['recherche-individu'])) {
            foreach ($moduleConfig['recherche-individu'] as $key => $siri) {
                $texte = $key . " => " . $siri;
                if ($key !== "app" ) $siri = $container->get($siri);
                if($siri instanceof RechercheIndividuServiceInterface) {
                    $service->searchServices[$key] = $siri;
                }
            }
        }

        return $service;
    }