src/Controller/App/SecurityController.php line 49

Open in your IDE?
  1. <?php
  2. /**
  3.  * This file is part of the CosaVostra, TrackPay, Symfony package.
  4.  *
  5.  * (c) Mohamed Radhi GUENNICHI <rg@mate.tn> <+216 50 711 816>
  6.  *
  7.  * For the full copyright and license information, please view the LICENSE
  8.  * file that was distributed with this source code.
  9.  */
  10. declare(strict_types=1);
  11. namespace App\Controller\App;
  12. use App\Entity\User;
  13. use App\Entity\SecurityQuestions;
  14. use App\Factory\OrganizationContactFactory;
  15. use App\Form\App\RegisterType;
  16. use App\Manager\UserManager;
  17. use App\Repository\WorkflowRepository;
  18. use App\Repository\SecurityQuestionsRepository;
  19. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  20. use Symfony\Component\HttpFoundation\Request;
  21. use Symfony\Component\HttpFoundation\Response;
  22. use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
  23. use Symfony\Component\Routing\Annotation\Route;
  24. use Symfony\Component\Security\Http\Authentication\AuthenticationUtils;
  25. use Symfony\Component\HttpFoundation\JsonResponse;
  26. use Doctrine\ORM\EntityManagerInterface;
  27. use Symfony\Contracts\Translation\TranslatorInterface;
  28. /**
  29.  * Class SecurityController
  30.  *
  31.  * @package App\Controller\App
  32.  *
  33.  * @Route(name="app_security_")
  34.  */
  35. class SecurityController extends AbstractController
  36. {
  37.     /**
  38.      * @param AuthenticationUtils $authenticationUtils
  39.      *
  40.      * @return Response
  41.      *
  42.      * @Route("/signin", name="signin")
  43.      */
  44.     public function signin(AuthenticationUtils $authenticationUtils): Response
  45.     {
  46.         if (null !== $this->getUser()) {
  47.             return $this->redirectToRoute('app_page_index');
  48.         }
  49.         // get the login error if there is one
  50.         $error $authenticationUtils->getLastAuthenticationError();
  51.         // last username entered by the user
  52.         $lastUsername $authenticationUtils->getLastUsername();
  53.         return $this->render('app/security/login.html.twig', [
  54.             'last_username' => $lastUsername,
  55.             'error'         => $error
  56.         ]);
  57.     }
  58.     /**
  59.      * @param Request                    $request
  60.      * @param UserManager                $userManager
  61.      * @param WorkflowRepository         $workflowRepository
  62.      * @param OrganizationContactFactory $organizationContactFactory
  63.      *
  64.      * @return Response
  65.      *
  66.      * @Route("/signup", name="signup")
  67.      */
  68.     public function signup(Request $requestUserManager $userManagerWorkflowRepository $workflowRepositoryOrganizationContactFactory $organizationContactFactory): Response
  69.     {
  70.         if (null !== $this->getUser()) {
  71.             return $this->redirectToRoute('app_page_index');
  72.         }
  73.         $form $this->createForm(RegisterType::class, $user $userManager->createNew(User::ROLE_APPfalse), [
  74.             'action' => $this->generateUrl('app_security_signup'$request->query->all())
  75.         ]);
  76.         $form->handleRequest($request);
  77.         if ($form->isSubmitted() && $form->isValid()) {
  78.             $user->setWorkflow(
  79.                 $workflowRepository->findDefault()
  80.             );
  81.             $user->setDepositWorkflow(
  82.                 $workflowRepository->findDefaultDeposit()
  83.             );
  84.             // Set locale for user organization
  85.             $user
  86.                 ->getOrganization()
  87.                 ->setLocale($user->getLocale());
  88.             $organizationContactFactory->createForUser($usertrue);
  89.             $userManager
  90.                 ->encode($user)
  91.                 ->save($user);
  92.             return $this->render('app/security/signup/final_step.html.twig', [
  93.                 'crm' => $request->query->get('crm')
  94.             ]);
  95.         }
  96.         return $this->render('app/security/signup/index.html.twig', [
  97.             'form' => $form->createView(),
  98.             'crm' => $request->query->get('crm')
  99.         ]);
  100.     }
  101.     /**
  102.      * @return Response
  103.      *
  104.      * @Route("/signup1", name="signup1")
  105.      */
  106.     public function signup1(): Response
  107.     {
  108.         return $this->render('app/security/static/signup1.html.twig');
  109.     }
  110.     /**
  111.      * @return Response
  112.      *
  113.      * @Route("/signup2", name="signup2")
  114.      */
  115.     public function signup2(): Response
  116.     {
  117.         return $this->render('app/security/static/signup2.html.twig');
  118.     }
  119.     /**
  120.      * @return Response
  121.      *
  122.      * @Route("/signup3", name="signup3")
  123.      */
  124.     public function signup3(): Response
  125.     {
  126.         return $this->render('app/security/static/signup3.html.twig');
  127.     }
  128.     /**
  129.      * @param Request                   $request
  130.      * @param EntityManagerInterface    $entityManager
  131.      *
  132.      * @return JsonResponse
  133.      *
  134.      * @Route("/ajax-get-user-questions", name="user_questions_list_ajax", methods={"GET"})
  135.      */
  136.     public function ajaxGetUserSecurityQuestions(Request $request,EntityManagerInterface $entityManagerTranslatorInterface $translate): JsonResponse
  137.     {
  138.         $email    $request->query->get('email');
  139.         $response = [];
  140.         $user $entityManager->getRepository(User::class)->findOneByUsername($email);
  141.         if (null === $user) {
  142.             $response['status'] = "0";
  143.             $response['error'] = $translate->trans('reset_password.error.mail_not_assosiated_with_any_user');
  144.         } else {
  145.             $response['status']   = "1";
  146.             $response['question'] = null;
  147.             foreach ($user->getSecurityQuestions() as $question) {
  148.                 $response['question']  = $question->getQuestion();
  149.             }
  150.             
  151.         }
  152.         return new JsonResponse($response);
  153.     }
  154.     /**
  155.      * @param Request                   $request
  156.      * @param EntityManagerInterface    $entityManager
  157.      *
  158.      * @return JsonResponse
  159.      *
  160.      * @Route("/add-user-questions", name="user_questions_add", methods={"POST"})
  161.      */
  162.     public function addUserSecurityQuestions(Request $request,EntityManagerInterface $entityManager ): JsonResponse
  163.     {
  164.         $question    $request->request->get('question');
  165.         $answer    $request->request->get('answer');
  166.         $response['statuts'] = 0;
  167.         if (!empty($question) && !empty($answer)) {
  168.             $user $this->getUser();
  169.             $userSecurityQuestion =  new SecurityQuestions();
  170.             $userSecurityQuestion->setQuestion($question);
  171.             $userSecurityQuestion->setAnswer($answer);
  172.             $entityManager->persist($userSecurityQuestion);
  173.             $user->addSecurityQuestion($userSecurityQuestion);
  174.             $entityManager->persist($user);
  175.             $entityManager->flush();
  176.             $response['statuts'] = 1;
  177.         }
  178.         
  179.         return new JsonResponse($response);
  180.     }
  181.      /**
  182.      * @param Request                   $request
  183.      * @param EntityManagerInterface    $entityManager
  184.      *
  185.      * @return JsonResponse
  186.      *
  187.      * @Route("/update-user-questions", name="user_questions_update", methods={"POST"})
  188.      */
  189.     public function updateUserSecurityQuestions(Request $request,EntityManagerInterface $entityManager,SecurityQuestionsRepository $securityQuestionsRepository): JsonResponse
  190.     {
  191.         $questionId           $request->request->get('questionId');
  192.         $question             $request->request->get('question');
  193.         $answer               $request->request->get('answer');
  194.         $response['statuts']  = 0;
  195.         $userSecurityQuestion $securityQuestionsRepository->find($questionId);
  196.         if (!empty($question) && null !== $userSecurityQuestion) {
  197.             (! empty($answer))?   $userSecurityQuestion->setAnswer($answer): "";
  198.             $userSecurityQuestion ->setQuestion($question);
  199.             $entityManager        ->persist($userSecurityQuestion);
  200.             $entityManager        ->flush();
  201.             $response['statuts']  = 1;
  202.         }
  203.         
  204.         return new JsonResponse($response);
  205.     }
  206. }