Loading module/Application/config/others/utilisateur.config.php +12 −2 Original line number Diff line number Diff line Loading @@ -10,6 +10,9 @@ use Application\Service\Individu\IndividuServiceFactory; use Application\Service\Utilisateur\UtilisateurService; use UnicaenAuth\Guard\PrivilegeController; use Zend\Mvc\Router\Http\Literal; use Application\Form\Validator\PasswordValidator; use Application\Form\Validator\NewEmailValidator; use Application\Form\Validator\Factory\NewEmailValidatorFactory; return [ 'bjyauthorize' => [ Loading Loading @@ -174,6 +177,13 @@ return [ 'factories' => [ CreationUtilisateurHydrator::class => CreationUtilisateurHydratorFactory::class, ] ] ], 'validators' => [ 'invokables' => [ PasswordValidator::class => PasswordValidator::class, ], 'factories' => [ NewEmailValidator::class => NewEmailValidatorFactory::class, ], ], ]; module/Application/src/Application/Controller/UtilisateurController.php +4 −8 Original line number Diff line number Diff line Loading @@ -315,10 +315,7 @@ class UtilisateurController extends \UnicaenAuth\Controller\UtilisateurControlle $form->setData($data); if ($form->isValid()) { if ($this->individuService->existIndividuUtilisateurByEmail($data['email'])) { $error = "Addresse électronique déjà renseignée dans SyGAL."; } else { if ($data['nomPatronymique'] === '') $data['nomPatronymique'] = $data['nomUsuel']; /** @var Individu $individu */ $individu = new Individu(); Loading @@ -331,10 +328,11 @@ class UtilisateurController extends \UnicaenAuth\Controller\UtilisateurControlle /** @var Utilisateur $utilisateur */ $utilisateur = new Utilisateur(); $utilisateur->setUsername($data['prenom'] . "." . $data['nomUsuel']); $utilisateur->setUsername($data['email']); $utilisateur->setPassword(password_hash($data['password'], PASSWORD_DEFAULT)); $utilisateur->setState(1); $utilisateur->setEmail($data['email']); $utilisateur->setDisplayName($data['nomUsuel']. " " .$data['prenom']); $this->individuService->createFromForm($individu, $utilisateur); Loading @@ -342,12 +340,10 @@ class UtilisateurController extends \UnicaenAuth\Controller\UtilisateurControlle $this->redirect()->toRoute('utilisateur'); } } } $form->prepare(); return new ViewModel([ 'form' => $form, 'error' => $error, ]); } } No newline at end of file module/Application/src/Application/Form/CreationUtilisateurForm.php +36 −10 Original line number Diff line number Diff line Loading @@ -2,26 +2,31 @@ namespace Application\Form; use Application\Form\Validator\NewEmailValidator; use Application\Form\Validator\PasswordValidator; use Zend\Form\Element\Hidden; use Zend\Form\Element\Password; use Zend\Form\Element\Submit; use Zend\Form\Element\Text; use Zend\Form\Element\Hidden; use Zend\Form\Element\Radio; use Zend\Form\Form; use Zend\InputFilter\Factory; use Zend\InputFilter\InputFilterProviderInterface; class CreationUtilisateurForm extends Form class CreationUtilisateurForm extends Form implements InputFilterProviderInterface { public function init() { //$this->setObject(new RdvBu()); $this->add( (new Hidden('id')) ); $this->add( (new Text('civilite')) (new Radio('civilite')) ->setLabel("Civilité :") ->setValueOptions([ 'M.' => 'M.', 'Mme' => 'Mme', ]) ); $this->add( (new Text('nomUsuel')) Loading Loading @@ -50,7 +55,18 @@ class CreationUtilisateurForm extends Form ->setAttribute('class', 'btn btn-primary') ); $this->setInputFilter((new Factory())->createInputFilter([ //$this->setInputFilter((new Factory())->createInputFilter()); } /** * Should return an array specification compatible with * {@link Zend\InputFilter\Factory::createInputFilter()}. * * @return array */ public function getInputFilterSpecification() { return [ 'civilite' => [ 'name' => 'civilite', 'required' => true, Loading @@ -61,7 +77,7 @@ class CreationUtilisateurForm extends Form ], 'nomPatronymique' => [ 'name' => 'nomPatronymique', 'required' => true, 'required' => false, ], 'prenom' => [ 'name' => 'prenom', Loading @@ -70,11 +86,21 @@ class CreationUtilisateurForm extends Form 'email' => [ 'name' => 'email', 'required' => true, 'validators' => [ [ 'name' => NewEmailValidator::class, ], ], ], 'password' => [ 'name' =>'password', 'required' => true, ] ])); 'validators' => [ [ 'name' => PasswordValidator::class, ], ], ], ]; } } No newline at end of file module/Application/src/Application/Form/Validator/Factory/NewEmailValidatorFactory.php 0 → 100644 +21 −0 Original line number Diff line number Diff line <?php namespace Application\Form\Validator\Factory; use Application\Form\Validator\NewEmailValidator; use Doctrine\ORM\EntityManager; use Zend\Validator\ValidatorPluginManager; class NewEmailValidatorFactory { public function __invoke(ValidatorPluginManager $validatorPluginManager) { /** @var EntityManager $entityManager */ $entityManager = $validatorPluginManager->getServiceLocator()->get('doctrine.entitymanager.orm_default'); $validator = new NewEmailValidator(); $validator->setEntityManager($entityManager); return $validator; } } No newline at end of file module/Application/src/Application/Form/Validator/NewEmailValidator.php 0 → 100644 +47 −0 Original line number Diff line number Diff line <?php namespace Application\Form\Validator; use Application\Entity\Db\Individu; use Application\Entity\Db\Utilisateur; use UnicaenApp\Service\EntityManagerAwareTrait; use Zend\Validator\AbstractValidator; class NewEmailValidator extends AbstractValidator { use EntityManagerAwareTrait; const NOT_YET = 'not-yet'; const NOT_EMAIL = 'not-email'; const USER = 'user'; const INDIVIDU = 'individu'; protected $messageTemplates = [ self::NOT_YET => "La méthode est pas implémentée", self::USER => "Email déjà enregistré (Utilisateur)", self::INDIVIDU => "Email déjà enregistré (Individu)", self::NOT_EMAIL => "Email mal formé", ]; public function isValid($value) { $nb_pb = 0; if (!filter_var($value, FILTER_VALIDATE_EMAIL)) { $this->error(self::NOT_EMAIL); $nb_pb++; } if ($this->getEntityManager()->getRepository(Individu::class)->findOneBy(['email' => $value]) !== null) { $this->error(self::INDIVIDU); $nb_pb++; } if ($this->getEntityManager()->getRepository(Utilisateur::class)->findOneBy(['email' => $value]) !== null) { $this->error(self::USER); $nb_pb++; } if ($nb_pb > 0) return false; return true; } } No newline at end of file Loading
module/Application/config/others/utilisateur.config.php +12 −2 Original line number Diff line number Diff line Loading @@ -10,6 +10,9 @@ use Application\Service\Individu\IndividuServiceFactory; use Application\Service\Utilisateur\UtilisateurService; use UnicaenAuth\Guard\PrivilegeController; use Zend\Mvc\Router\Http\Literal; use Application\Form\Validator\PasswordValidator; use Application\Form\Validator\NewEmailValidator; use Application\Form\Validator\Factory\NewEmailValidatorFactory; return [ 'bjyauthorize' => [ Loading Loading @@ -174,6 +177,13 @@ return [ 'factories' => [ CreationUtilisateurHydrator::class => CreationUtilisateurHydratorFactory::class, ] ] ], 'validators' => [ 'invokables' => [ PasswordValidator::class => PasswordValidator::class, ], 'factories' => [ NewEmailValidator::class => NewEmailValidatorFactory::class, ], ], ];
module/Application/src/Application/Controller/UtilisateurController.php +4 −8 Original line number Diff line number Diff line Loading @@ -315,10 +315,7 @@ class UtilisateurController extends \UnicaenAuth\Controller\UtilisateurControlle $form->setData($data); if ($form->isValid()) { if ($this->individuService->existIndividuUtilisateurByEmail($data['email'])) { $error = "Addresse électronique déjà renseignée dans SyGAL."; } else { if ($data['nomPatronymique'] === '') $data['nomPatronymique'] = $data['nomUsuel']; /** @var Individu $individu */ $individu = new Individu(); Loading @@ -331,10 +328,11 @@ class UtilisateurController extends \UnicaenAuth\Controller\UtilisateurControlle /** @var Utilisateur $utilisateur */ $utilisateur = new Utilisateur(); $utilisateur->setUsername($data['prenom'] . "." . $data['nomUsuel']); $utilisateur->setUsername($data['email']); $utilisateur->setPassword(password_hash($data['password'], PASSWORD_DEFAULT)); $utilisateur->setState(1); $utilisateur->setEmail($data['email']); $utilisateur->setDisplayName($data['nomUsuel']. " " .$data['prenom']); $this->individuService->createFromForm($individu, $utilisateur); Loading @@ -342,12 +340,10 @@ class UtilisateurController extends \UnicaenAuth\Controller\UtilisateurControlle $this->redirect()->toRoute('utilisateur'); } } } $form->prepare(); return new ViewModel([ 'form' => $form, 'error' => $error, ]); } } No newline at end of file
module/Application/src/Application/Form/CreationUtilisateurForm.php +36 −10 Original line number Diff line number Diff line Loading @@ -2,26 +2,31 @@ namespace Application\Form; use Application\Form\Validator\NewEmailValidator; use Application\Form\Validator\PasswordValidator; use Zend\Form\Element\Hidden; use Zend\Form\Element\Password; use Zend\Form\Element\Submit; use Zend\Form\Element\Text; use Zend\Form\Element\Hidden; use Zend\Form\Element\Radio; use Zend\Form\Form; use Zend\InputFilter\Factory; use Zend\InputFilter\InputFilterProviderInterface; class CreationUtilisateurForm extends Form class CreationUtilisateurForm extends Form implements InputFilterProviderInterface { public function init() { //$this->setObject(new RdvBu()); $this->add( (new Hidden('id')) ); $this->add( (new Text('civilite')) (new Radio('civilite')) ->setLabel("Civilité :") ->setValueOptions([ 'M.' => 'M.', 'Mme' => 'Mme', ]) ); $this->add( (new Text('nomUsuel')) Loading Loading @@ -50,7 +55,18 @@ class CreationUtilisateurForm extends Form ->setAttribute('class', 'btn btn-primary') ); $this->setInputFilter((new Factory())->createInputFilter([ //$this->setInputFilter((new Factory())->createInputFilter()); } /** * Should return an array specification compatible with * {@link Zend\InputFilter\Factory::createInputFilter()}. * * @return array */ public function getInputFilterSpecification() { return [ 'civilite' => [ 'name' => 'civilite', 'required' => true, Loading @@ -61,7 +77,7 @@ class CreationUtilisateurForm extends Form ], 'nomPatronymique' => [ 'name' => 'nomPatronymique', 'required' => true, 'required' => false, ], 'prenom' => [ 'name' => 'prenom', Loading @@ -70,11 +86,21 @@ class CreationUtilisateurForm extends Form 'email' => [ 'name' => 'email', 'required' => true, 'validators' => [ [ 'name' => NewEmailValidator::class, ], ], ], 'password' => [ 'name' =>'password', 'required' => true, ] ])); 'validators' => [ [ 'name' => PasswordValidator::class, ], ], ], ]; } } No newline at end of file
module/Application/src/Application/Form/Validator/Factory/NewEmailValidatorFactory.php 0 → 100644 +21 −0 Original line number Diff line number Diff line <?php namespace Application\Form\Validator\Factory; use Application\Form\Validator\NewEmailValidator; use Doctrine\ORM\EntityManager; use Zend\Validator\ValidatorPluginManager; class NewEmailValidatorFactory { public function __invoke(ValidatorPluginManager $validatorPluginManager) { /** @var EntityManager $entityManager */ $entityManager = $validatorPluginManager->getServiceLocator()->get('doctrine.entitymanager.orm_default'); $validator = new NewEmailValidator(); $validator->setEntityManager($entityManager); return $validator; } } No newline at end of file
module/Application/src/Application/Form/Validator/NewEmailValidator.php 0 → 100644 +47 −0 Original line number Diff line number Diff line <?php namespace Application\Form\Validator; use Application\Entity\Db\Individu; use Application\Entity\Db\Utilisateur; use UnicaenApp\Service\EntityManagerAwareTrait; use Zend\Validator\AbstractValidator; class NewEmailValidator extends AbstractValidator { use EntityManagerAwareTrait; const NOT_YET = 'not-yet'; const NOT_EMAIL = 'not-email'; const USER = 'user'; const INDIVIDU = 'individu'; protected $messageTemplates = [ self::NOT_YET => "La méthode est pas implémentée", self::USER => "Email déjà enregistré (Utilisateur)", self::INDIVIDU => "Email déjà enregistré (Individu)", self::NOT_EMAIL => "Email mal formé", ]; public function isValid($value) { $nb_pb = 0; if (!filter_var($value, FILTER_VALIDATE_EMAIL)) { $this->error(self::NOT_EMAIL); $nb_pb++; } if ($this->getEntityManager()->getRepository(Individu::class)->findOneBy(['email' => $value]) !== null) { $this->error(self::INDIVIDU); $nb_pb++; } if ($this->getEntityManager()->getRepository(Utilisateur::class)->findOneBy(['email' => $value]) !== null) { $this->error(self::USER); $nb_pb++; } if ($nb_pb > 0) return false; return true; } } No newline at end of file