<?php
namespace App\Application\Controller;
use App\Admin\Document\AbstractLegalEntity;
use App\Admin\Document\ChatUser;
use App\Admin\Document\Client;
use App\Admin\Document\Driver;
use App\Admin\Document\Person;
use AvenueAdminBundle\Util\FileUtil;
use Symfony\Component\HttpFoundation\JsonResponse;
use Symfony\Component\HttpFoundation\Request;
use \Symfony\Component\Routing\Annotation\Route;
class AuthController extends AbstractController
{
/**
* @Route("/login/", name="login")
*/
public function login(Request $request)
{
if ($this->hasIdentity()) {
return $this->redirectToRoute('home');
}
$errorMessage = '';
if ($request->isMethod('POST')) {
$email = $request->request->get('email');
$password = $request->request->get('password');
if ($this->authenticate($email, $password)) {
if ($request->get('redirect')) {
return $this->redirect($request->get('redirect'));
}
return $this->redirectToRoute('home');
} else {
$errorMessage = 'Неверные идентификационные данные';
}
}
return $this->render('application/auth/login.html.twig', [
'message' => $errorMessage,
]);
}
/**
* @Route("/register/", name="register")
*/
public function register(Request $request)
{
if ($this->hasIdentity()) {
return $this->redirectToRoute('home');
}
$message = '';
if ($request->isMethod('POST')) {
$email = strtolower(trim($request->request->get('email')));
$phone = $this->trimPhone($request->request->get('phone'));
if (!$this->getDocumentRepository(ChatUser::class)->findOneBy(['email' => $email])) {
if (!$this->getDocumentRepository(ChatUser::class)->findOneBy(['phone' => $phone])) {
$class = 'App\\Admin\\Document\\' . $request->request->get('type');
/**
* @var Person $user
*/
$user = new $class();
$user->setPhone($phone);
$user->setEmail($email);
$user->setName(trim($request->request->get('name')));
$user->setSurname(trim($request->request->get('surname')));
$user->setPatronymic(trim($request->request->get('patronymic')));
$file = FileUtil::uploadFile($request, 'image');
if ($file) {
if ($user->getImage()) {
FileUtil::deleteFile('/' . $user->getImage());
}
$user->setImage($file);
}
$user->updateChatUser();
if ($user instanceof AbstractLegalEntity) {
$user->setContactName(trim($request->request->get('contactName')));
$user->setContactJob(trim($request->request->get('contactJob')));
$user->setInn(trim($request->request->get('inn')));
}
$newPassword = $this->generatePassword();
$passwordAsHash = $this->getPasswordHash($newPassword);
$user->getChatUser()->setPassword($passwordAsHash);
$user->setActive(true);
$this->getDocumentManager()->persist($user);
$this->getDocumentManager()->flush();
if ($user instanceof AbstractLegalEntity) {
try {
$this->getMail()->send($email, 'Ваша заявка на платформе RDC получена', $this->renderView(
'application/auth/mail/register-legal-entity.html.twig', [
'user' => $user,
'newPassword' => $newPassword
]
));
$message = 'Вы зарегистрированы, письмо с паролем отправлено на почту ' . $email;
} catch (\Exception $e) {
$message = 'Вы зарегистрированы, но мы не смогли отправить письмо с паролем<!--' . (string)$e . '-->';
}
try {
$this->getMail()->sendToManager('Новая заявка на платформе RDC', $this->renderView(
'application/auth/mail/register.html.twig', [
'user' => $user,
]
));
} catch (\Exception $e) {
}
} else {
try {
$this->getMail()->send($email, 'Вы зарегистрированы на платформе RDC', $this->renderView(
'application/auth/mail/register-driver.html.twig', [
'user' => $user,
'newPassword' => $newPassword
]
));
$message = 'Вы зарегистрированы, письмо с паролем отправлено на почту ' . $email;
} catch (\Exception $e) {
$message = 'Вы зарегистрированы, но мы не смогли отправить письмо с паролем<!--' . (string)$e . '-->';
}
}
} else {
$message = 'Этот телефон уже занят';
}
} else {
$message = 'Эта почта уже занята';
}
}
return $this->render('application/auth/register.html.twig', [
'message' => $message,
]);
}
/**
* @Route("/reset/", name="reset")
*/
public function reset(Request $request)
{
if ($this->hasIdentity()) {
return $this->redirectToRoute('home');
}
return $this->render('application/auth/reset.html.twig', $this->resetPassword($request));
}
/**
* @Route("/reset-ajax/", name="reset-ajax")
*/
public function resetAjax(Request $request)
{
return new JsonResponse($this->resetPassword($request));
}
private function resetPassword(Request $request)
{
$email = null;
$errorMessage = null;
if ($request->isMethod('POST')) {
$email = $request->request->get('email');
/**
* @var ChatUser $client
*/
$client = $this->findIdentity($email);
if ($client && $client->getActive()) {
$newPassword = $this->generatePassword();
$passwordAsHash = $this->getPasswordHash($newPassword);
$client->setPassword($passwordAsHash);
$this->getDocumentManager()->flush();
try {
$this->getMail()->send($email, 'Восстановление пароля на платформе RDC', $this->renderView(
'application/auth/mail/reset.html.twig', [
'user' => $client,
'newPassword' => $newPassword
]
));
$errorMessage = 'Новый пароль отправлен на почту ' . $email;
} catch (\Exception $e) {
$errorMessage = 'Мы не смогли отправить письмо с паролем<!--' . (string)$e . '-->';
}
} else {
$errorMessage = 'Такой пользователь не найден';
}
}
return [
'message' => $errorMessage,
'email' => $email
];
}
/**
* @Route("/logout/", name="logout")
* @param Request $request
* @return \Symfony\Component\HttpFoundation\Response
*/
public function logout(Request $request)
{
$this->clearIdentity();
return $this->redirectToRoute('home');
}
}