src/Application/Controller/AuthController.php line 149

Open in your IDE?
  1. <?php
  2. namespace App\Application\Controller;
  3. use App\Admin\Document\AbstractLegalEntity;
  4. use App\Admin\Document\ChatUser;
  5. use App\Admin\Document\Client;
  6. use App\Admin\Document\Driver;
  7. use App\Admin\Document\Person;
  8. use AvenueAdminBundle\Util\FileUtil;
  9. use Symfony\Component\HttpFoundation\JsonResponse;
  10. use Symfony\Component\HttpFoundation\Request;
  11. use \Symfony\Component\Routing\Annotation\Route;
  12. class AuthController extends AbstractController
  13. {
  14.     /**
  15.      * @Route("/login/", name="login")
  16.      */
  17.     public function login(Request $request)
  18.     {
  19.         if ($this->hasIdentity()) {
  20.             return $this->redirectToRoute('home');
  21.         }
  22.         $errorMessage '';
  23.         if ($request->isMethod('POST')) {
  24.             $email $request->request->get('email');
  25.             $password $request->request->get('password');
  26.             if ($this->authenticate($email$password)) {
  27.                 if ($request->get('redirect')) {
  28.                     return $this->redirect($request->get('redirect'));
  29.                 }
  30.                 return $this->redirectToRoute('home');
  31.             } else {
  32.                 $errorMessage 'Неверные идентификационные данные';
  33.             }
  34.         }
  35.         return $this->render('application/auth/login.html.twig', [
  36.             'message' => $errorMessage,
  37.         ]);
  38.     }
  39.     /**
  40.      * @Route("/register/", name="register")
  41.      */
  42.     public function register(Request $request)
  43.     {
  44.         if ($this->hasIdentity()) {
  45.             return $this->redirectToRoute('home');
  46.         }
  47.         $message '';
  48.         if ($request->isMethod('POST')) {
  49.             $email strtolower(trim($request->request->get('email')));
  50.             $phone $this->trimPhone($request->request->get('phone'));
  51.             if (!$this->getDocumentRepository(ChatUser::class)->findOneBy(['email' => $email])) {
  52.                 if (!$this->getDocumentRepository(ChatUser::class)->findOneBy(['phone' => $phone])) {
  53.                     $class 'App\\Admin\\Document\\' $request->request->get('type');
  54.                     /**
  55.                      * @var Person $user
  56.                      */
  57.                     $user = new $class();
  58.                     $user->setPhone($phone);
  59.                     $user->setEmail($email);
  60.                     $user->setName(trim($request->request->get('name')));
  61.                     $user->setSurname(trim($request->request->get('surname')));
  62.                     $user->setPatronymic(trim($request->request->get('patronymic')));
  63.                     $file FileUtil::uploadFile($request'image');
  64.                     if ($file) {
  65.                         if ($user->getImage()) {
  66.                             FileUtil::deleteFile('/' $user->getImage());
  67.                         }
  68.                         $user->setImage($file);
  69.                     }
  70.                     $user->updateChatUser();
  71.                     if ($user instanceof AbstractLegalEntity) {
  72.                         $user->setContactName(trim($request->request->get('contactName')));
  73.                         $user->setContactJob(trim($request->request->get('contactJob')));
  74.                         $user->setInn(trim($request->request->get('inn')));
  75.                     }
  76.                     $newPassword $this->generatePassword();
  77.                     $passwordAsHash $this->getPasswordHash($newPassword);
  78.                     $user->getChatUser()->setPassword($passwordAsHash);
  79.                     $user->setActive(true);
  80.                     $this->getDocumentManager()->persist($user);
  81.                     $this->getDocumentManager()->flush();
  82.                     if ($user instanceof AbstractLegalEntity) {
  83.                         try {
  84.                             $this->getMail()->send($email'Ваша заявка на платформе RDC получена'$this->renderView(
  85.                                 'application/auth/mail/register-legal-entity.html.twig', [
  86.                                     'user' => $user,
  87.                                     'newPassword' => $newPassword
  88.                                 ]
  89.                             ));
  90.                             $message 'Вы зарегистрированы, письмо с паролем отправлено на почту ' $email;
  91.                         } catch (\Exception $e) {
  92.                             $message 'Вы зарегистрированы, но мы не смогли отправить письмо с паролем<!--' . (string)$e .  '-->';
  93.                         }
  94.                         try {
  95.                             $this->getMail()->sendToManager('Новая заявка на платформе RDC'$this->renderView(
  96.                                 'application/auth/mail/register.html.twig', [
  97.                                     'user' => $user,
  98.                                 ]
  99.                             ));
  100.                         } catch (\Exception $e) {
  101.                         }
  102.                     } else {
  103.                         try {
  104.                             $this->getMail()->send($email'Вы зарегистрированы на платформе RDC'$this->renderView(
  105.                                 'application/auth/mail/register-driver.html.twig', [
  106.                                     'user' => $user,
  107.                                     'newPassword' => $newPassword
  108.                                 ]
  109.                             ));
  110.                             $message 'Вы зарегистрированы, письмо с паролем отправлено на почту ' $email;
  111.                         } catch (\Exception $e) {
  112.                             $message 'Вы зарегистрированы, но мы не смогли отправить письмо с паролем<!--' . (string)$e .  '-->';
  113.                         }
  114.                     }
  115.                 } else {
  116.                     $message 'Этот телефон уже занят';
  117.                 }
  118.             } else {
  119.                 $message 'Эта почта уже занята';
  120.             }
  121.         }
  122.         return $this->render('application/auth/register.html.twig', [
  123.             'message' => $message,
  124.         ]);
  125.     }
  126.     /**
  127.      * @Route("/reset/", name="reset")
  128.      */
  129.     public function reset(Request $request)
  130.     {
  131.         if ($this->hasIdentity()) {
  132.             return $this->redirectToRoute('home');
  133.         }
  134.         return $this->render('application/auth/reset.html.twig'$this->resetPassword($request));
  135.     }
  136.     /**
  137.      * @Route("/reset-ajax/", name="reset-ajax")
  138.      */
  139.     public function resetAjax(Request $request)
  140.     {
  141.         return new JsonResponse($this->resetPassword($request));
  142.     }
  143.     private function resetPassword(Request $request)
  144.     {
  145.         $email null;
  146.         $errorMessage null;
  147.         if ($request->isMethod('POST')) {
  148.             $email $request->request->get('email');
  149.             /**
  150.              * @var ChatUser $client
  151.              */
  152.             $client $this->findIdentity($email);
  153.             if ($client && $client->getActive()) {
  154.                 $newPassword $this->generatePassword();
  155.                 $passwordAsHash $this->getPasswordHash($newPassword);
  156.                 $client->setPassword($passwordAsHash);
  157.                 $this->getDocumentManager()->flush();
  158.                 try {
  159.                     $this->getMail()->send($email'Восстановление пароля на платформе RDC'$this->renderView(
  160.                         'application/auth/mail/reset.html.twig', [
  161.                             'user' => $client,
  162.                             'newPassword' => $newPassword
  163.                         ]
  164.                     ));
  165.                     $errorMessage 'Новый пароль отправлен на почту ' $email;
  166.                 } catch (\Exception $e) {
  167.                     $errorMessage 'Мы не смогли отправить письмо с паролем<!--' . (string)$e .  '-->';
  168.                 }
  169.             } else {
  170.                 $errorMessage 'Такой пользователь не найден';
  171.             }
  172.         }
  173.         return [
  174.             'message' => $errorMessage,
  175.             'email' => $email
  176.         ];
  177.     }
  178.     /**
  179.      * @Route("/logout/", name="logout")
  180.      * @param Request $request
  181.      * @return \Symfony\Component\HttpFoundation\Response
  182.      */
  183.     public function logout(Request $request)
  184.     {
  185.         $this->clearIdentity();
  186.         return $this->redirectToRoute('home');
  187.     }
  188. }