getOptions()->getSaveLdapUserInDatabase()) { return false; } switch (true) { case $userData instanceof People: $username = $userData->getSupannAliasLogin(); $email = $userData->getMail(); $password = 'ldap'; $state = in_array('deactivated', ldap_explode_dn($userData->getDn(), 1)) ? 0 : 1; break; case $userData instanceof ShibUser: $username = $userData->getUsername(); $email = $userData->getEmail(); $password = 'shib'; $state = 1; break; default: throw new RuntimeException("A implémenter!!"); break; } if (!$username) { return false; } if (is_int($username)) { // c'est un id : cela signifie que l'utilisateur existe déjà dans la bdd (et pas dans le LDAP), rien à faire return true; } if (!is_string($username)) { throw new RuntimeException("Identité rencontrée inattendue."); } // update/insert de l'utilisateur dans la table de l'appli $mapper = $this->getServiceLocator()->get('zfcuser_user_mapper'); /* @var $mapper \ZfcUserDoctrineORM\Mapper\User */ try { /** @var UserInterface $entity */ $entity = $mapper->findByUsername($username); if (!$entity) { $entityClass = $this->getZfcUserOptions()->getUserEntityClass(); $entity = new $entityClass; $entity->setUsername($username); $method = 'insert'; } else { $method = 'update'; } $entity->setEmail($email); $entity->setDisplayName($userData->getDisplayName()); $entity->setPassword($password); $entity->setState($state); // pre-persist $this->triggerUserAuthenticatedEvent($entity, $userData); // persist $mapper->$method($entity); } catch (PDOException $pdoe) { throw new RuntimeException("Impossible d'enregistrer l'utilisateur authentifié dans la base de données.", null, $pdoe); } return true; } /** * Déclenche l'événement donnant aux applications clientes l'opportunité de modifier l'entité * utilisateur avant qu'elle ne soit persistée. * * @param mixed $entity * @param People|ShibUser $userData */ private function triggerUserAuthenticatedEvent($entity, $userData) { $event = new UserAuthenticatedEvent(UserAuthenticatedEvent::PRE_PERSIST); $event->setTarget($this); $event->setDbUser($entity); if ($userData instanceof People) { $event->setLdapUser($userData); } elseif ($userData instanceof ShibUser) { $event->setShibUser($userData); } $this->getEventManager()->trigger($event); } /** * Retrieve the event manager * * Lazy-loads an EventManager instance if none registered. * * @return EventManagerInterface */ public function getEventManager() { return $this->eventManager; } /** * Inject an EventManager instance * * @param EventManagerInterface $eventManager * @return self */ public function setEventManager(EventManagerInterface $eventManager) { $eventManager->setIdentifiers([ __CLASS__, get_called_class(), ]); $this->eventManager = $eventManager; return $this; } /** * @param ModuleOptions $options * @return self */ public function setOptions(ModuleOptions $options) { $this->options = $options; return $this; } /** * @return ModuleOptions */ public function getOptions() { if (!$this->options instanceof ModuleOptions) { $this->setOptions($this->getServiceLocator()->get('unicaen-auth_module_options')); } return $this->options; } /** * @param ZfcUserModuleOptions $options * @return self */ public function setZfcUserOptions(ZfcUserModuleOptions $options) { $this->zfcUserOptions = $options; return $this; } /** * @return ZfcUserModuleOptions */ public function getZfcUserOptions() { if (!$this->zfcUserOptions instanceof ZfcUserModuleOptions) { $this->setZfcUserOptions($this->getServiceLocator()->get('zfcuser_module_options')); } return $this->zfcUserOptions; } }