public function createPasswordAction(Request $request) { if (!$this->getUser() instanceof ExternalUser) { return $this->redirect($this->generateUrl('acts_camdram_homepage')); } $user = new User(); $external_user = $this->getUser(); $user->setName($external_user->getName()); $user->setEmail($external_user->getEmail()); $user->setPerson($external_user->getPerson()); $user->setIsEmailVerified(true); //Raven accounts don't give us a name but the others do, //so need to decide whether to include a 'name' field in the form or not $type = new CreatePasswordType(!(bool) $user->getName()); $form = $this->createForm($type, $user); if ($request->getMethod() == 'POST') { $form->submit($request); if ($form->isValid()) { /** @var \Acts\CamdramSecurityBundle\Entity\User $user */ $user = $form->getData(); $factory = $this->get('security.encoder_factory'); $encoder = $factory->getEncoder($user); $password = $encoder->encodePassword($user->getPassword(), $user->getSalt()); $user->setPassword($password); $user->addExternalUser($external_user); $external_user->setUser($user); $em = $this->getDoctrine()->getManager(); $em->persist($user); $em->flush(); $token = new UsernamePasswordToken($user, $user->getPassword(), 'public', $user->getRoles()); $this->get('event_dispatcher')->dispatch(CamdramSecurityEvents::REGISTRATION_COMPLETE, new UserEvent($user)); $this->get('security.context')->setToken($token); $this->get('camdram.security.authentication_success_handler')->onAuthenticationSuccess($request, $token); return $this->redirect($this->generateUrl('acts_camdram_security_create_account_complete')); } } return $this->render('ActsCamdramSecurityBundle:Default:create_password.html.twig', array('form' => $form->createView())); }