Loading src/UnicaenUtilisateur/Controller/UtilisateurController.php +4 −7 Original line number Diff line number Diff line Loading @@ -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 { Loading @@ -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); } } Loading src/UnicaenUtilisateur/Service/User/UserService.php +39 −3 Original line number Diff line number Diff line Loading @@ -30,6 +30,11 @@ class UserService extends CommonService implements RechercheIndividuServiceInter */ protected $userRolePerimetreEntityClass; /** * @var RechercheIndividuServiceInterface[] */ public $searchServices; /** * @var AuthenticationService */ Loading Loading @@ -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']; Loading @@ -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; Loading src/UnicaenUtilisateur/Service/User/UserServiceFactory.php +15 −5 Original line number Diff line number Diff line Loading @@ -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; Loading @@ -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); Loading @@ -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; } Loading Loading
src/UnicaenUtilisateur/Controller/UtilisateurController.php +4 −7 Original line number Diff line number Diff line Loading @@ -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 { Loading @@ -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); } } Loading
src/UnicaenUtilisateur/Service/User/UserService.php +39 −3 Original line number Diff line number Diff line Loading @@ -30,6 +30,11 @@ class UserService extends CommonService implements RechercheIndividuServiceInter */ protected $userRolePerimetreEntityClass; /** * @var RechercheIndividuServiceInterface[] */ public $searchServices; /** * @var AuthenticationService */ Loading Loading @@ -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']; Loading @@ -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; Loading
src/UnicaenUtilisateur/Service/User/UserServiceFactory.php +15 −5 Original line number Diff line number Diff line Loading @@ -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; Loading @@ -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); Loading @@ -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; } Loading