src/Controller/RegistrationController.php line 40

Open in your IDE?
  1. <?php
  2. namespace App\Controller;
  3. use App\Env;
  4. use App\Func;
  5. use App\DTO\AppDTO;
  6. use App\Entity\User;
  7. use App\Service\Auth\Auth;
  8. use App\Service\Mail\Mail;
  9. use App\Form\RegistrationFormType;
  10. use App\Repository\UserRepository;
  11. use Doctrine\ORM\EntityManagerInterface;
  12. use Symfony\Component\HttpFoundation\Request;
  13. use Symfony\Component\HttpFoundation\Response;
  14. use Symfony\Component\Routing\Annotation\Route;
  15. use Symfony\Component\HttpFoundation\JsonResponse;
  16. use Symfony\Component\HttpFoundation\RequestStack;
  17. use Symfony\Component\PasswordHasher\Hasher\UserPasswordHasherInterface;
  18. class RegistrationController extends AbstractASController
  19. {
  20.     private EntityManagerInterface $em;
  21.     private AppDTO $app;
  22.     //Repositories
  23.     private UserRepository $Users;
  24.     public function __construct(EntityManagerInterface $emAppDTO $appRequestStack $requestStack)
  25.     {
  26.         $this->requestStack $requestStack;
  27.         $this->em $em;
  28.         $this->app $app;
  29.         $this->Users $em->getRepository(User::class);
  30.     }
  31.     
  32.     #[Route(path'/register'name'register_no_locale'priority100defaults: ['_locale' => '%app.default_lang%'])]
  33.     #[Route(path'/{_locale}/register'name'register'priority100requirements: ['_locale' => '%app.langs%'])]
  34.     public function register(Request $requestUserPasswordHasherInterface $userPasswordHasherEntityManagerInterface $emAuth $AuthMail $Mail): Response
  35.     {
  36.         $errors = [];
  37.         $user = new User();        
  38.         $form $this->createForm(RegistrationFormType::class, $user);
  39.         $form->handleRequest($request);
  40.         
  41.         if ($request->isXmlHttpRequest() || !empty($request->query->all())) {
  42.             $email $request->get('email''');
  43.             $pass $request->get('password''');
  44.             $pass2 $request->get('password2''');
  45.             $name $request->get('name''');
  46.             $surname $request->get('surname''');
  47.             $phone $request->get('phone''');
  48.             /** @var \App\Entity\User user */
  49.             $user $this->em->getRepository(User::class)->findOneBy(['email' => $email]);    
  50.             
  51.             // Пустые поля
  52.             if (empty($email) || empty($name) || empty($surname) || empty($phone)) {
  53.                 if (empty($email)) $errors["email"] = $this->app->labels->get("field_is_empty");
  54.                 if (empty($name)) $errors["name"] = $this->app->labels->get("field_is_empty");
  55.                 if (empty($surname)) $errors["surname"] = $this->app->labels->get("field_is_empty");
  56.                 if (empty($phone)) $errors["phone"] = $this->app->labels->get("field_is_empty");
  57.             }
  58.             // Пользователь есть в базе
  59.             if ($user) {
  60.                 $errors["email"] = $this->app->labels->get("email_exists");
  61.             }
  62.             // Длина пароля
  63.             if (strlen($pass) < || strlen($pass) > 60) {
  64.                 $errors["password"] = $this->app->labels->get("password_length_error");
  65.             }
  66.             // Пароли не совпадают
  67.             if ($pass != $pass2) {
  68.                 $errors["password2"] = $this->app->labels->get("passwords_are_not_equal");
  69.             }
  70.             // Email неверный
  71.             if (!preg_match("/^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,})$/i"$email)) {
  72.                 $errors["email"] = $this->app->labels->get("email_unavailable");
  73.             }
  74.             //TODO!!! Выборка из базы опт
  75.             $useropt false;
  76.             if ($useropt) {
  77.                 $errors["email"] = $this->app->labels->get("email_opt_exists");
  78.             }
  79.             
  80.             if (empty($errors)) {
  81.                 $user = new User();
  82.                 $user->setType('client');
  83.                 $user->setPassword($pass);
  84.                 $user->setEmail($email);
  85.                 $user->setExternalId(md5($user->getEmail()));
  86.                 $user->setName($name);
  87.                 $user->setSurname($surname);
  88.                 $user->setPhone($phone);
  89.                 $user->setIp($request->getClientIp());
  90.                 $user->setCreated(time());
  91.                 $user->setOpt($Auth->isOpt());
  92.                 $user->setAds($request->get('ads')=='on' 0);
  93.                 
  94.                 $em->persist($user);
  95.                 $em->flush();
  96.     
  97.                 $userid $user->getId();
  98.                 $errors = [
  99.                     "noerrors" => true,
  100.                     "uesrid" => $userid,
  101.                 ];
  102.                 $params = array(
  103.                     "pass" => $pass,
  104.                     "email" => $email,
  105.                     "name" => $name,
  106.                     "surname" => $surname,
  107.                     "phone" => $phone,
  108.                 );
  109.                 $Mail->send($this->app->sett->get('sitename'), Env::mail_from(), $email$this->app->labels->get("register_message_theme"), Func::mess_from_tmp($this->app->templates->get("register_message_template"), $params));
  110.                 return new JsonResponse($errors);
  111.             } else {
  112.                 return new JsonResponse($errors);
  113.             }
  114.     
  115.             $data = array(
  116.                 'email' => $values['email'],
  117.                 'bd' => 1,
  118.             );
  119.             // Auth::login($user);
  120.     
  121.             // Esputnik::addContact($user);
  122.             $params = array(
  123.                 "type" => $url->p['type'],
  124.                 "login" => $url->p['login'],
  125.                 "gender" => $url->p['gender'],
  126.                 "pass" => $url->p['pass'],
  127.                 "email" => $url->p['email'],
  128.                 "name" => $url->p['name'],
  129.                 "patr" => $url->p['patr'],
  130.                 "surname" => $url->p['surname'],
  131.                 "phone" => $url->p['phone'],
  132.                 "city" => $url->p['city'],
  133.                 "address" => $url->p['address'],
  134.             );
  135.     
  136.             $Mail->send($this->app->sett->get('sitename'), Env::mail_from(), $email$this->app->labels->get("register_message_theme"), Func::mess_from_tmp($this->app->templates->get("register_message_template"), $params));
  137.             // @Func::mailhtml($sett['sitename'], Env::mail_from(), $url->p['email'], $labels["register_message_theme"], Func::mess_from_tmp($templates["register_message_template"], $params));
  138.             // @Func::mailhtml($sett['sitename'], Env::mail_from(), $sett['admin_email'], $labels["register_message_theme"], Func::mess_from_tmp($templates["register_message_template"], $params));
  139.                 
  140.             $errors = [];
  141.             return $this->json($errors);
  142.         }
  143.         return $this->render('registration/register.html.twig', [
  144.             'registrationForm' => $form->createView(),
  145.         ]);
  146.     }
  147. }