public function registerAction(Request $request) { $allowanceSetting = $this->getDoctrine()->getRepository('OjsAdminBundle:SystemSetting')->findOneBy(['name' => 'user_registration']); if ($allowanceSetting) { if (!$allowanceSetting->getValue()) { return $this->render('OjsSiteBundle:Site:not_available.html.twig', ['title' => 'title.register', 'message' => 'message.registration_not_available']); } } /** @var $formFactory \FOS\UserBundle\Form\Factory\FactoryInterface */ $formFactory = $this->get('fos_user.registration.form.factory'); /** @var $userManager \FOS\UserBundle\Model\UserManagerInterface */ $userManager = $this->get('ojs_user.manager'); /** @var $dispatcher \Symfony\Component\EventDispatcher\EventDispatcherInterface */ $dispatcher = $this->get('event_dispatcher'); /** @var User $user */ $user = $userManager->createUser(); $user->setEnabled(true); //Add default data for oauth login $session = $this->get('session'); $oauth_login = $session->get('oauth_login', false); if ($oauth_login) { $name = explode(' ', $oauth_login['full_name']); $firstName = $name[0]; unset($name[0]); $lastName = implode(' ', $name); $user->setFirstName($firstName)->setLastName($lastName)->setUsername(StringHelper::slugify($oauth_login['full_name'])); } $event = new GetResponseUserEvent($user, $request); $dispatcher->dispatch(FOSUserEvents::REGISTRATION_INITIALIZE, $event); if (null !== $event->getResponse()) { return $event->getResponse(); } $form = $formFactory->createForm(); $form->setData($user); $form->handleRequest($request); if ($form->isValid()) { $event = new FormEvent($form, $request); $dispatcher->dispatch(FOSUserEvents::REGISTRATION_SUCCESS, $event); $user->generateApiKey(); $userManager->updateUser($user); $tokenGenerator = new TokenGenerator(); $user->setConfirmationToken($tokenGenerator->generateToken()); if (null === ($response = $event->getResponse())) { $url = $this->generateUrl('login'); $response = new RedirectResponse($url); } $dispatcher->dispatch(FOSUserEvents::REGISTRATION_COMPLETED, new FilterUserResponseEvent($user, $request, $response)); if ($oauth_login) { $em = $this->getDoctrine()->getManager(); $oauth = new UserOauthAccount(); $oauth->setProvider($oauth_login['provider'])->setProviderAccessToken($oauth_login['access_token'])->setProviderRefreshToken($oauth_login['refresh_token'])->setProviderUserId($oauth_login['user_id'])->setUser($user); $em->persist($oauth); $user->addOauthAccount($oauth); $em->persist($user); } $session->getFlashBag()->add('success', 'registration.activation'); $session->remove('oauth_login'); $session->save(); $event = new UserEvent($user); $dispatcher = $this->get('event_dispatcher'); $dispatcher->dispatch('user.register.complete', $event); return $response; } return $this->render('OjsUserBundle:Registration:register.html.twig', array('form' => $form->createView())); }