container->getParameter(($alias = $this->getAlias()).'.login.template'); //Get context $context = $this->container->getParameter($alias.'.login.context'); //Create the form according to the FormType created previously. //And give the proper parameters $form = $this->createForm('Rapsys\UserBundle\Form\LoginType', null, array( // To set the action use $this->generateUrl('route_identifier') 'action' => $this->generateUrl('rapsys_user_login'), 'method' => 'POST' )); //Get the login error if there is one if ($error = $authenticationUtils->getLastAuthenticationError()) { //Get translator $trans = $this->get('translator'); //Get translated error $error = $trans->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); } //Render view return $this->render($template, $context+array('form' => $form->createView(), 'error' => $error)); } public function registerAction(Request $request, UserPasswordEncoderInterface $encoder) { //Get mail template $mailTemplate = $this->container->getParameter(($alias = $this->getAlias()).'.register.mail_template'); //Get mail context $mailContext = $this->container->getParameter($alias.'.register.mail_context'); //Get template $template = $this->container->getParameter($alias.'.register.template'); //Get context $context = $this->container->getParameter($alias.'.register.context'); //Get home name $homeName = $this->container->getParameter($alias.'.contact.home_name'); //Get home args $homeArgs = $this->container->getParameter($alias.'.contact.home_args'); //Get contact name $contactName = $this->container->getParameter($alias.'.contact.name'); //Get contact mail $contactMail = $this->container->getParameter($alias.'.contact.mail'); //TODO: check if doctrine orm replacement is enough with default classes here //Get class user $classUser = $this->container->getParameter($alias.'.class.user'); //Get class group $classGroup = $this->container->getParameter($alias.'.class.group'); //Get class title $classTitle = $this->container->getParameter($alias.'.class.title'); //Create the form according to the FormType created previously. //And give the proper parameters $form = $this->createForm('Rapsys\UserBundle\Form\RegisterType', null, array( // To set the action use $this->generateUrl('route_identifier') 'class_title' => $classTitle, 'action' => $this->generateUrl('rapsys_user_register'), 'method' => 'POST' )); if ($request->isMethod('POST')) { // Refill the fields in case the form is not valid. $form->handleRequest($request); if ($form->isValid()) { //Get translator $trans = $this->get('translator'); //Set data $data = $form->getData(); //Translate title $mailContext['title'] = $trans->trans($mailContext['title']); //Translate title $mailContext['subtitle'] = $trans->trans($mailContext['subtitle'], array('%name%' => $data['forename'].' '.$data['surname'].' ('.$data['pseudonym'].')')); //Translate subject $mailContext['subject'] = $trans->trans($mailContext['subject'], array('%title%' => $mailContext['title'])); //Translate message $mailContext['message'] = $trans->trans($mailContext['message'], array('%title%' => $mailContext['title'])); //Create message $message = \Swift_Message::newInstance() ->setSubject($mailContext['subject']) ->setFrom(array($contactMail => $contactName)) ->setTo(array($data['mail'] => $data['forename'].' '.$data['surname'])) ->setBody($mailContext['message']) ->addPart( $this->renderView( $mailTemplate, $mailContext+array( 'home' => $this->get('router')->generate($homeName, $homeArgs, UrlGeneratorInterface::ABSOLUTE_URL) ) ), 'text/html' ); //Get doctrine $doctrine = $this->getDoctrine(); //Get manager $manager = $doctrine->getManager(); //Init reflection $reflection = new \ReflectionClass($classUser); //Create new user $user = $reflection->newInstance(); $user->setMail($data['mail']); $user->setPseudonym($data['pseudonym']); $user->setForename($data['forename']); $user->setSurname($data['surname']); $user->setPassword($encoder->encodePassword($user, $data['password'])); $user->setActive(true); $user->setTitle($data['title']); //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($classGroup)->findOneByRole('ROLE_USER')); $user->setCreated(new \DateTime('now')); $user->setUpdated(new \DateTime('now')); //Persist user $manager->persist($user); try { //Send to database $manager->flush(); //Send message if ($this->get('mailer')->send($message)) { //Redirect to cleanup the form return $this->redirectToRoute('rapsys_user_register', array('sent' => 1)); } } catch (\Doctrine\DBAL\Exception\UniqueConstraintViolationException $e) { //Add error message mail already exists $form->get('mail')->addError(new FormError($trans->trans('Account already exists: %mail%', array('%mail%' => $data['mail'])))); } } } //Render view return $this->render($template, $context+array('form' => $form->createView(), 'sent' => $request->query->get('sent', 0))); } public function recoverAction(Request $request, Slugger $slugger) { //Get mail template $mailTemplate = $this->container->getParameter(($alias = $this->getAlias()).'.recover.mail_template'); //Get mail context $mailContext = $this->container->getParameter($alias.'.recover.mail_context'); //Get template $template = $this->container->getParameter($alias.'.recover.template'); //Get context $context = $this->container->getParameter($alias.'.recover.context'); //Get url name $urlName = $this->container->getParameter($alias.'.recover.url_name'); //Get url args $urlArgs = $this->container->getParameter($alias.'.recover.url_args'); //Get home name $homeName = $this->container->getParameter($alias.'.contact.home_name'); //Get home args $homeArgs = $this->container->getParameter($alias.'.contact.home_args'); //Get contact name $contactName = $this->container->getParameter($alias.'.contact.name'); //Get contact mail $contactMail = $this->container->getParameter($alias.'.contact.mail'); //Get class user $classUser = $this->container->getParameter($alias.'.class.user'); //Create the form according to the FormType created previously. //And give the proper parameters $form = $this->createForm('Rapsys\UserBundle\Form\RecoverType', null, array( // To set the action use $this->generateUrl('route_identifier') 'action' => $this->generateUrl('rapsys_user_recover'), 'method' => 'POST' )); if ($request->isMethod('POST')) { // Refill the fields in case the form is not valid. $form->handleRequest($request); if ($form->isValid()) { //Get translator $trans = $this->get('translator'); //Get doctrine $doctrine = $this->getDoctrine(); //Set data $data = $form->getData(); //Translate title $mailContext['title'] = $trans->trans($mailContext['title']); //Try to find user if ($user = $doctrine->getRepository($classUser)->findOneByMail($data['mail'])) { //Translate title $mailContext['subtitle'] = $trans->trans($mailContext['subtitle'], array('%name%' => $user->getForename().' '.$user->getSurname().' ('.$user->getPseudonym().')')); //Translate subject $mailContext['subject'] = $trans->trans($mailContext['subject'], array('%title%' => $mailContext['title'])); //Translate message $mailContext['raw'] = $trans->trans($mailContext['raw'], array('%title%' => $mailContext['title'], '%url%' => $this->get('router')->generate($urlName, $urlArgs+array('mail' => $slugger->short($user->getMail()), 'hash' => $slugger->hash($user->getPassword())), UrlGeneratorInterface::ABSOLUTE_URL))); //Create message $message = \Swift_Message::newInstance() ->setSubject($mailContext['subject']) ->setFrom(array($contactMail => $contactName)) ->setTo(array($user->getMail() => $user->getForename().' '.$user->getSurname())) ->setBody(strip_tags($mailContext['raw'])) ->addPart( $this->renderView( $mailTemplate, $mailContext+array( 'home' => $this->get('router')->generate($homeName, $homeArgs, UrlGeneratorInterface::ABSOLUTE_URL) ) ), 'text/html' ); //Send message if ($this->get('mailer')->send($message)) { //Redirect to cleanup the form return $this->redirectToRoute('rapsys_user_recover', array('sent' => 1)); } //Accout not found } else { //Add error message to mail field $form->get('mail')->addError(new FormError($trans->trans('Unable to find account: %mail%', array('%mail%' => $data['mail'])))); } } } //Render view return $this->render($template, $context+array('form' => $form->createView(), 'sent' => $request->query->get('sent', 0))); } public function recoverMailAction(Request $request, UserPasswordEncoderInterface $encoder, Slugger $slugger, $mail, $hash) { //Get mail template $mailTemplate = $this->container->getParameter(($alias = $this->getAlias()).'.recover_mail.mail_template'); //Get mail context $mailContext = $this->container->getParameter($alias.'.recover_mail.mail_context'); //Get template $template = $this->container->getParameter($alias.'.recover_mail.template'); //Get context $context = $this->container->getParameter($alias.'.recover_mail.context'); //Get url name $urlName = $this->container->getParameter($alias.'.recover_mail.url_name'); //Get url args $urlArgs = $this->container->getParameter($alias.'.recover_mail.url_args'); //Get home name $homeName = $this->container->getParameter($alias.'.contact.home_name'); //Get home args $homeArgs = $this->container->getParameter($alias.'.contact.home_args'); //Get contact name $contactName = $this->container->getParameter($alias.'.contact.name'); //Get contact mail $contactMail = $this->container->getParameter($alias.'.contact.mail'); //Get class user $classUser = $this->container->getParameter($alias.'.class.user'); //Create the form according to the FormType created previously. //And give the proper parameters $form = $this->createForm('Rapsys\UserBundle\Form\RecoverMailType', null, array( // To set the action use $this->generateUrl('route_identifier') 'action' => $this->generateUrl('rapsys_user_recover_mail', array('mail' => $mail, 'hash' => $hash)), 'method' => 'POST' )); //Get doctrine $doctrine = $this->getDoctrine(); //Get translator $trans = $this->get('translator'); //Init not found $notfound = 1; //Retrieve user if (($user = $doctrine->getRepository($classUser)->findOneByMail($slugger->unshort($mail))) && $hash == $slugger->hash($user->getPassword())) { //User was found $notfound = 0; if ($request->isMethod('POST')) { // Refill the fields in case the form is not valid. $form->handleRequest($request); if ($form->isValid()) { //Set data $data = $form->getData(); //Translate title $mailContext['title'] = $trans->trans($mailContext['title']); //Translate title $mailContext['subtitle'] = $trans->trans($mailContext['subtitle'], array('%name%' => $user->getForename().' '.$user->getSurname().' ('.$user->getPseudonym().')')); //Translate subject $mailContext['subject'] = $trans->trans($mailContext['subject'], array('%title%' => $mailContext['title'])); //Set user password $user->setPassword($encoder->encodePassword($user, $data['password'])); //Translate message $mailContext['raw'] = $trans->trans($mailContext['raw'], array('%title%' => $mailContext['title'], '%url%' => $this->get('router')->generate($urlName, $urlArgs+array('mail' => $slugger->short($user->getMail()), 'hash' => $slugger->hash($user->getPassword())), UrlGeneratorInterface::ABSOLUTE_URL))); //Get manager $manager = $doctrine->getManager(); //Persist user $manager->persist($user); //Send to database $manager->flush(); //Create message $message = \Swift_Message::newInstance() ->setSubject($mailContext['subject']) ->setFrom(array($contactMail => $contactName)) ->setTo(array($user->getMail() => $user->getForename().' '.$user->getSurname())) ->setBody(strip_tags($mailContext['raw'])) ->addPart( $this->renderView( $mailTemplate, $mailContext+array( 'home' => $this->get('router')->generate($homeName, $homeArgs, UrlGeneratorInterface::ABSOLUTE_URL) ) ), 'text/html' ); //Send message if ($this->get('mailer')->send($message)) { //Redirect to cleanup the form return $this->redirectToRoute('rapsys_user_recover_mail', array('mail' => $mail, 'hash' => $hash, 'sent' => 1)); } } } } //Render view return $this->render($template, $context+array('form' => $form->createView(), 'sent' => $request->query->get('sent', 0), 'notfound' => $notfound)); } /** * {@inheritdoc} */ public function getAlias() { return 'rapsys_user'; } }