X-Git-Url: https://git.rapsys.eu/userbundle/blobdiff_plain/a484f030bfbf1d7c87b4e2cac2473a9f4e5beac0..4bee264432b21f4798ab6f660abc99287890261a:/Controller/DefaultController.php diff --git a/Controller/DefaultController.php b/Controller/DefaultController.php index 9f2e2b5..9e4c117 100644 --- a/Controller/DefaultController.php +++ b/Controller/DefaultController.php @@ -10,7 +10,7 @@ use Symfony\Component\Form\FormError; use Symfony\Component\HttpFoundation\Request; use Symfony\Component\Mailer\Exception\TransportExceptionInterface; use Symfony\Component\Mailer\MailerInterface; -use Symfony\Component\Mime\NamedAddress; +use Symfony\Component\Mime\Address; use Symfony\Component\Routing\Generator\UrlGeneratorInterface; use Symfony\Component\Routing\RouterInterface; use Symfony\Component\Security\Core\Encoder\UserPasswordEncoderInterface; @@ -68,24 +68,44 @@ class DefaultController extends AbstractController { public function login(Request $request, AuthenticationUtils $authenticationUtils) { //Create the LoginType form and give the proper parameters - $form = $this->createForm($this->config['login']['view']['form'], null, [ + $login = $this->createForm($this->config['login']['view']['form'], null, [ //Set action to login route name and context 'action' => $this->generateUrl($this->config['route']['login']['name'], $this->config['route']['login']['context']), 'method' => 'POST' ]); + //Init context + $context = []; + + //Last username entered by the user + if ($lastUsername = $authenticationUtils->getLastUsername()) { + $login->get('mail')->setData($lastUsername); + } + //Get the login error if there is one if ($error = $authenticationUtils->getLastAuthenticationError()) { //Get translated error $error = $this->translator->trans($error->getMessageKey()); //Add error message to mail field - $form->get('mail')->addError(new FormError($error)); - } - - //Last username entered by the user - if ($lastUsername = $authenticationUtils->getLastUsername()) { - $form->get('mail')->setData($lastUsername); + $login->get('mail')->addError(new FormError($error)); + + //Create the RecoverType form and give the proper parameters + $recover = $this->createForm($this->config['recover']['view']['form'], null, [ + //Set action to recover route name and context + 'action' => $this->generateUrl($this->config['route']['recover']['name'], $this->config['route']['recover']['context']), + 'method' => 'POST' + ]); + + //Get recover mail entity + $recover->get('mail') + //Set mail from login form + ->setData($login->get('mail')->getData()) + //Add recover error + ->addError(new FormError($this->translator->trans('Use this form to recover your account'))); + + //Add recover form to context + $context['recover'] = $recover->createView(); } //Render view @@ -93,7 +113,7 @@ class DefaultController extends AbstractController { //Template $this->config['login']['view']['name'], //Context - ['form' => $form->createView(), 'error' => $error]+$this->config['login']['view']['context'] + ['login' => $login->createView()]+$context+$this->config['login']['view']['context'] ); } @@ -164,10 +184,10 @@ class DefaultController extends AbstractController { //Create message $message = (new TemplatedEmail()) //Set sender - ->from(new NamedAddress($this->config['contact']['mail'], $this->config['contact']['name'])) + ->from(new Address($this->config['contact']['mail'], $this->config['contact']['name'])) //Set recipient //XXX: remove the debug set in vendor/symfony/mime/Address.php +46 - ->to(new NamedAddress($mail['context']['recipient_mail'], $mail['context']['recipient_name'])) + ->to(new Address($mail['context']['recipient_mail'], $mail['context']['recipient_name'])) //Set subject ->subject($mail['subject']) @@ -220,14 +240,11 @@ class DefaultController extends AbstractController { //Get doctrine $doctrine = $this->getDoctrine(); - //Init not found - $notfound = 1; + //Init found + $found = false; //Retrieve user - if (($user = $doctrine->getRepository($this->config['class']['user'])->findOneByMail($slugger->unshort($recipient))) && $hash == $slugger->hash($user->getPassword())) { - //User was found - $notfound = 0; - + if (($user = $doctrine->getRepository($this->config['class']['user'])->findOneByMail($slugger->unshort($recipient))) && $found = ($hash == $slugger->hash($user->getPassword()))) { if ($request->isMethod('POST')) { //Refill the fields in case the form is not valid. $form->handleRequest($request); @@ -299,10 +316,10 @@ class DefaultController extends AbstractController { //Create message $message = (new TemplatedEmail()) //Set sender - ->from(new NamedAddress($this->config['contact']['mail'], $this->config['contact']['name'])) + ->from(new Address($this->config['contact']['mail'], $this->config['contact']['name'])) //Set recipient //XXX: remove the debug set in vendor/symfony/mime/Address.php +46 - ->to(new NamedAddress($mail['context']['recipient_mail'], $mail['context']['recipient_name'])) + ->to(new Address($mail['context']['recipient_mail'], $mail['context']['recipient_name'])) //Set subject ->subject($mail['subject']) @@ -324,14 +341,14 @@ class DefaultController extends AbstractController { //Catch obvious transport exception } catch(TransportExceptionInterface $e) { //Add error message mail unreachable - $form->get('mail')->addError(new FormError($this->translator->trans('Account password updated but unable to contact: %mail%', array('%mail%' => $mail['context']['recipient_mail'])))); + $form->get('password')->get('first')->addError(new FormError($this->translator->trans('Account password updated but unable to contact: %mail%', array('%mail%' => $mail['context']['recipient_mail'])))); } } } //Accout not found } else { //Add error message to mail field - $form->get('mail')->addError(new FormError($this->translator->trans('Unable to find account: %mail%', ['%mail%' => $slugger->unshort($recipient)]))); + $form->addError(new FormError($this->translator->trans('Unable to find account: %mail%', ['%mail%' => $slugger->unshort($recipient)]))); } //Render view @@ -339,14 +356,18 @@ class DefaultController extends AbstractController { //Template $this->config['recover_mail']['view']['name'], //Context - ['form' => $form->createView(), 'sent' => $request->query->get('sent', 0), 'notfound' => $notfound]+$this->config['recover_mail']['view']['context'] + ['form' => $form->createView(), 'sent' => $request->query->get('sent', 0), 'found' => $found]+$this->config['recover_mail']['view']['context'] ); } public function register(Request $request, UserPasswordEncoderInterface $encoder, MailerInterface $mailer) { + //Get doctrine + $doctrine = $this->getDoctrine(); + //Create the RegisterType form and give the proper parameters $form = $this->createForm($this->config['register']['view']['form'], null, array( 'class_title' => $this->config['class']['title'], + 'title' => $doctrine->getRepository($this->config['class']['title'])->findOneByTitle($this->config['default']['title']), //Set action to register route name and context 'action' => $this->generateUrl($this->config['route']['register']['name'], $this->config['route']['register']['context']), 'method' => 'POST' @@ -395,10 +416,10 @@ class DefaultController extends AbstractController { //Create message $message = (new TemplatedEmail()) //Set sender - ->from(new NamedAddress($this->config['contact']['mail'], $this->config['contact']['name'])) + ->from(new Address($this->config['contact']['mail'], $this->config['contact']['name'])) //Set recipient //XXX: remove the debug set in vendor/symfony/mime/Address.php +46 - ->to(new NamedAddress($mail['context']['recipient_mail'], $mail['context']['recipient_name'])) + ->to(new Address($mail['context']['recipient_mail'], $mail['context']['recipient_name'])) //Set subject ->subject($mail['subject']) @@ -409,9 +430,6 @@ class DefaultController extends AbstractController { //Set context ->context(['subject' => $mail['subject']]+$mail['context']+$this->config['register']['view']['context']); - //Get doctrine - $doctrine = $this->getDoctrine(); - //Get manager $manager = $doctrine->getManager(); @@ -430,10 +448,20 @@ class DefaultController extends AbstractController { $user->setActive(true); $user->setTitle($data['title']); - //XXX: For now there is no point in setting a role at subscription - //TODO: see if we can't modify group constructor to set role directly from args - //XXX: see vendor/symfony/symfony/src/Symfony/Component/Security/Core/Role/Role.php - #$user->addGroup($doctrine->getRepository($this->config['class']['group'])->findOneByRole('ROLE_USER')); + //Iterate on default group + foreach($this->config['default']['group'] as $i => $groupTitle) { + //Fetch group + if (($group = $doctrine->getRepository($this->config['class']['group'])->findOneByTitle($groupTitle))) { + //Set default group + //XXX: see vendor/symfony/security-core/Role/Role.php + $user->addGroup($group); + //Group not found + } else { + //Throw exception + //XXX: consider missing group as fatal + throw new \Exception(sprintf('Group from rapsys_user.default.group[%d] not found by title: %s', $i, $groupTitle)); + } + } $user->setCreated(new \DateTime('now')); $user->setUpdated(new \DateTime('now'));