diff --git a/lib/Alchemy/Phrasea/Controller/Root/Login.php b/lib/Alchemy/Phrasea/Controller/Root/Login.php index 4b5db4829a..1f9de6b4d8 100644 --- a/lib/Alchemy/Phrasea/Controller/Root/Login.php +++ b/lib/Alchemy/Phrasea/Controller/Root/Login.php @@ -24,6 +24,7 @@ use Alchemy\Phrasea\Notification\Mail\MailSuccessEmailConfirmationRegistered; use Alchemy\Phrasea\Notification\Mail\MailSuccessEmailConfirmationUnregistered; use Alchemy\Phrasea\Authentication\Exception\RequireCaptchaException; use Alchemy\Phrasea\Authentication\Exception\AccountLockedException; +use Alchemy\Phrasea\Form\Login\PhraseaAuthenticationForm; use Silex\Application; use Silex\ControllerProviderInterface; use Symfony\Component\HttpFoundation\Cookie; @@ -31,6 +32,7 @@ use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\RedirectResponse; use Symfony\Component\HttpFoundation\Response; use Symfony\Component\HttpKernel\Exception\NotFoundHttpException; +use Symfony\Component\Validator\Constraints as Assert; /** * @@ -58,6 +60,10 @@ class Login implements ControllerProviderInterface } }); + $controllers->before(function() use ($app) { + $app['twig.form.templates'] = array('login/common/form_div_layout.html.twig'); + }); + /** * Login * @@ -275,21 +281,21 @@ class Login implements ControllerProviderInterface /** * @todo This a route test to display cgus */ - $controllers->get('/cgus', function(Application $app, Request $request) { + $controllers->get('/cgus', function(PhraseaApplication $app, Request $request) { return $app['twig']->render('login/cgus.html.twig'); })->bind('login_cgus'); /** * Register classic form */ - $controllers->get('/register-classic', function(Application $app, Request $request) { + $controllers->get('/register-classic', function(PhraseaApplication $app, Request $request) { return $app['twig']->render('login/register-classic.html.twig'); })->bind('login_register_classic'); /** * Register throught providers */ - $controllers->get('/register-provider', function(Application $app, Request $request) { + $controllers->get('/register-provider', function(PhraseaApplication $app, Request $request) { return $app['twig']->render('login/register-provider.html.twig'); })->bind('login_register_provider'); @@ -303,7 +309,7 @@ class Login implements ControllerProviderInterface * @param Request $request The current request * @return RedirectResponse */ - public function sendConfirmMail(Application $app, Request $request) + public function sendConfirmMail(PhraseaApplication $app, Request $request) { if (null === $usrId = $request->query->get('usr_id')) { $app->abort(400, sprintf(_('Request to send you the confirmation mail failed, please retry'))); @@ -344,7 +350,7 @@ class Login implements ControllerProviderInterface * @param Request $request The current request * @return RedirectResponse */ - public function registerConfirm(Application $app, Request $request) + public function registerConfirm(PhraseaApplication $app, Request $request) { if (null === $code = $request->query->get('code')) { return $app->redirect('/login/?redirect=prod&error=code-not-found'); @@ -397,7 +403,7 @@ class Login implements ControllerProviderInterface * @param Request $request The current request * @return RedirectResponse */ - public function renewPassword(Application $app, Request $request) + public function renewPassword(PhraseaApplication $app, Request $request) { if (null !== $mail = $request->request->get('mail')) { try { @@ -459,7 +465,7 @@ class Login implements ControllerProviderInterface * @param Request $request The current request * @return Response */ - public function displayForgotPasswordForm(Application $app, Request $request) + public function displayForgotPasswordForm(PhraseaApplication $app, Request $request) { $tokenize = false; $errorMsg = $request->query->get('error'); @@ -515,7 +521,21 @@ class Login implements ControllerProviderInterface } } + $form = $app['form.factory']->createNamedBuilder('loginForm', 'form') + ->add('email', 'email', array( + 'label' => _('E-mail'), + 'required' => true, + 'disabled' => $app['phraseanet.registry']->get('GV_maintenance'), + 'constraints' => array( + new Assert\NotBlank(), + new Assert\Email(), + ), + )) + ->getForm(); + return $app['twig']->render('login/forgot-password.html.twig', array( + 'login' => new \login(), + 'form' => $form->createView(), 'tokenize' => $tokenize, 'passwordMsg' => $passwordMsg, 'errorMsg' => $errorMsg, @@ -530,7 +550,7 @@ class Login implements ControllerProviderInterface * @param Request $request The current request * @return Response */ - public function displayRegisterForm(Application $app, Request $request) + public function displayRegisterForm(PhraseaApplication $app, Request $request) { $captchaSys = ''; @@ -610,7 +630,7 @@ class Login implements ControllerProviderInterface * @param Request $request The current request * @return RedirectResponse */ - public function register(Application $app, Request $request) + public function register(PhraseaApplication $app, Request $request) { $captchaOK = true; @@ -798,12 +818,13 @@ class Login implements ControllerProviderInterface public function logout(PhraseaApplication $app, Request $request) { $app['dispatcher']->dispatch(PhraseaEvents::LOGOUT, new LogoutEvent($app)); - $app['authentication']->closeAccount(); - $appRedirect = $request->query->get("app"); + $app->addFlash('notice', 'Vous etes maintenant deconnecte. A bientot.'); - $response = new RedirectResponse("/login/?logged_out=user" . ($appRedirect ? sprintf("&redirect=%s", ltrim($appRedirect, '/')) : "")); + $response = new RedirectResponse($app->path('root', array( + 'redirect' => $request->query->get("redirect") + ))); $response->headers->removeCookie('persistent'); $response->headers->removeCookie('last_act'); @@ -819,107 +840,101 @@ class Login implements ControllerProviderInterface * @param Request $request The current request * @return Response */ - public function login(Application $app, Request $request) + public function login(PhraseaApplication $app, Request $request) { require_once($app['phraseanet.registry']->get('GV_RootPath') . 'lib/classes/deprecated/inscript.api.php'); - $warning = $request->query->get('error', ''); +// $warning = $request->query->get('error', ''); try { $app['phraseanet.appbox']->get_connection(); } catch (\Exception $e) { - $warning = 'no-connection'; + $app->addFlash('error', _('login::erreur: No available connection - Please contact sys-admin')); } + if ($app['phraseanet.registry']->get('GV_maintenance')) { - $warning = 'maintenance'; + $app->addFlash('notice', _('login::erreur: maintenance en cours, merci de nous excuser pour la gene occasionee')); } - switch ($warning) { - - case 'maintenance': - $warning = _('login::erreur: maintenance en cours, merci de nous excuser pour la gene occasionee'); - break; - case 'no-connection': - $warning = _('login::erreur: No available connection - Please contact sys-admin'); - break; - case 'auth': - $warning = _('login::erreur: Erreur d\'authentification'); - break; - case 'captcha': - $warning = _('login::erreur: Erreur de captcha'); - break; - case 'account-locked' : - $warning = _('login::erreur: Vous n\'avez pas confirme votre email'); - break; - case 'no-base' : - $warning = _('login::erreur: Aucune base n\'est actuellment accessible'); - break; - case 'session' : - $warning = _('Error while authentication, please retry or contact an admin if problem persists'); - break; - case 'unexpected' : - $warning = _('An unexpected error occured during authentication process, please contact an admin'); - break; - } - - if (ctype_digit($request->query->get('usr'))) { - $warning .= '
'; - } - - switch ($notice = $request->query->get('notice', '')) { - case 'ok': - $notice = _('login::register: sujet email : confirmation de votre adresse email'); - break; - case 'already': - $notice = _('login::notification: cette email est deja confirmee'); - break; - case 'mail-sent': - $notice = _('login::notification: demande de confirmation par mail envoyee'); - break; - case 'register-ok': - $notice = _('login::notification: votre email est desormais confirme'); - break; - case 'register-ok-wait': - $notice = _('Your email is now confirmed. You will be informed as soon as your pending request will be managed'); - break; - case 'password-update-ok': - $notice = _('login::notification: Mise a jour du mot de passe avec succes'); - break; - case 'no-register-available': - $notice = _('User inscriptions are disabled'); - break; - } - - $captchaSys = ''; - if (!$app['phraseanet.registry']->get('GV_maintenance') - && $app['phraseanet.registry']->get('GV_captchas') - && trim($app['phraseanet.registry']->get('GV_captcha_private_key')) !== '' - && trim($app['phraseanet.registry']->get('GV_captcha_public_key')) !== '' - && $request->query->get('error') == 'captcha') { - $captchaSys = '