diff --git a/src/UnicaenAuth/Authentication/Adapter/AbstractFactory.php b/src/UnicaenAuth/Authentication/Adapter/AbstractFactory.php index 0b351631db0af4fef25bde31e1ace47770b654a4..d0c8b05d125301d97d0bedf9af4020a83f3e5a2e 100644 --- a/src/UnicaenAuth/Authentication/Adapter/AbstractFactory.php +++ b/src/UnicaenAuth/Authentication/Adapter/AbstractFactory.php @@ -54,10 +54,10 @@ class AbstractFactory implements AbstractFactoryInterface } if ($adapter instanceof \Zend\EventManager\EventManagerAwareInterface) { - $userService = $serviceLocator->get('unicaen-auth_user_service'); $eventManager = $serviceLocator->get('event_manager'); - $eventManager->attach('userAuthenticated', array($userService, 'userAuthenticated'), 1); $adapter->setEventManager($eventManager); + $userService = $serviceLocator->get('unicaen-auth_user_service'); /* @var $userService \UnicaenAuth\Service\User */ + $eventManager->attach('userAuthenticated', array($userService, 'userAuthenticated'), 100); } return $adapter; diff --git a/src/UnicaenAuth/Service/User.php b/src/UnicaenAuth/Service/User.php index d882be1d2d3303aff5ec375de5da6a55343a2833..c182bcc6a8eb380c5a70e4c383bae06d2695ef7c 100644 --- a/src/UnicaenAuth/Service/User.php +++ b/src/UnicaenAuth/Service/User.php @@ -7,6 +7,8 @@ use UnicaenApp\Mapper\Ldap\People as LdapPeopleMapper; use UnicaenAuth\Options\ModuleOptions; use Zend\ServiceManager\ServiceManager; use Zend\ServiceManager\ServiceManagerAwareInterface; +use Zend\EventManager\EventManagerAwareInterface; +use Zend\EventManager\EventManagerInterface; use ZfcUser\Authentication\Adapter\AdapterChainEvent as AuthEvent; use ZfcUser\Options\AuthenticationOptionsInterface; use ZfcUser\Options\ModuleOptions as ZfcUserModuleOptions; @@ -21,13 +23,20 @@ use ZfcUser\Options\ModuleOptions as ZfcUserModuleOptions; * @see \UnicaenAuth\Authentication\Adapter\AbstractFactory * @author Bertrand GAUTHIER <bertrand.gauthier at unicaen.fr> */ -class User implements ServiceManagerAwareInterface +class User implements ServiceManagerAwareInterface, EventManagerAwareInterface { + const EVENT_USER_AUTHENTICATED_PRE_PERSIST = 'userAuthenticated.prePersist'; + /** * @var ServiceManager */ protected $serviceManager; + /** + * @var EventManagerInterface + */ + protected $eventManager; + /** * @var ModuleOptions */ @@ -89,6 +98,14 @@ class User implements ServiceManagerAwareInterface $entity->setDisplayName($ldapPeople->getDisplayName()); $entity->setPassword('ldap'); $entity->setState(in_array('deactivated', ldap_explode_dn($ldapPeople->getDn(), 1)) ? 0 : 1); + + // trigger pre-persist event + $event = new \Zend\EventManager\Event(self::EVENT_USER_AUTHENTICATED_PRE_PERSIST); + $event->setTarget($this) + ->setParams(array('entity' => $entity, 'ldapPeople' => $ldapPeople)); + $this->getEventManager()->trigger($event); + + // persist $mapper->$method($entity); } catch (PDOException $pdoe) { @@ -118,6 +135,34 @@ class User implements ServiceManagerAwareInterface $this->serviceManager = $serviceManager; return $this; } + + /** + * 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 void + */ + public function setEventManager(EventManagerInterface $eventManager) + { + $eventManager->setIdentifiers(array( + __CLASS__, + get_called_class(), + )); + $this->eventManager = $eventManager; + return $this; + } /** * get ldap people mapper