src/Controller/Frontend/EmployeeFrontendController.php line 55

Open in your IDE?
  1. <?php
  2. namespace App\Controller\Frontend;
  3. use App\Entity\AttendanceTypes;
  4. use App\Entity\Employee;
  5. use App\Form\Frontend\AttendanceType;
  6. use App\Form\Frontend\PwdChangeType;
  7. use App\Service\FormService;
  8. use App\Service\UserService;
  9. use Doctrine\Persistence\ManagerRegistry;
  10. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  11. use Symfony\Component\Form\Extension\Core\Type\SubmitType;
  12. use Symfony\Component\HttpFoundation\JsonResponse;
  13. use Symfony\Component\HttpFoundation\Request;
  14. use Symfony\Component\HttpFoundation\Response;
  15. use Symfony\Component\HttpFoundation\Session\Session;
  16. use Symfony\Component\Routing\Annotation\Route;
  17. use Sensio\Bundle\FrameworkExtraBundle\Configuration\Method;
  18. use Symfony\Component\Security\Core\Encoder\UserPasswordEncoderInterface;
  19. use Symfony\Component\Security\Http\Authentication\AuthenticationUtils;
  20. class EmployeeFrontendController extends AbstractController
  21. {
  22.     /**
  23.      * @var \App\Service\FormService $formService
  24.      */
  25.     private FormService $formService;
  26.     /**
  27.      * @var ManagerRegistry
  28.      */
  29.     private ManagerRegistry $doctrine;
  30.     /**
  31.      * @var \App\Service\UserService $userService
  32.      */
  33.     private UserService $userService;
  34.     /**
  35.      * @param FormService $formService
  36.      * @param ManagerRegistry $doctrine
  37.      * @param UserService $userService
  38.      */
  39.     public function __construct(FormService $formServiceManagerRegistry $doctrineUserService $userService) {
  40.         $this->formService $formService;
  41.         $this->doctrine $doctrine;
  42.         $this->userService $userService;
  43.     }
  44.     /**
  45.      * @return \Symfony\Component\HttpFoundation\RedirectResponse|Response
  46.      *
  47.      * @Route ("employee", name="employee")
  48.      */
  49.     public function indexAction(Request $request)
  50.     {
  51.         //$this->denyAccessUnlessGranted('IS_AUTHENTICATED_FULLY');
  52.         /** @var \App\Entity\Employee $user */
  53.         $user $this->getUser();
  54.         if (!$user) {
  55.             return $this->redirectToRoute('employee_login');
  56.         }
  57.         $session $request->getSession();
  58.         if($session->has("invalid_logins")){
  59.             $session->remove("invalid_logins");
  60.         };
  61.         if($session->has("invalid_accounts")){
  62.             $session->remove("invalid_accounts");
  63.         };
  64.         /** @var \App\Entity\Locations $location */
  65.         $location $this->userService->getLocation($user);
  66.         $repository $this->doctrine->getRepository(AttendanceTypes::class);
  67.         $legend $repository->findAll();
  68.         $form $this->createForm(AttendanceType::class, null);
  69.         $form->add("save"SubmitType::class, [
  70.             "label" => "Save",
  71.             "attr" => ["class" => "btn btn-primary btn-block"]
  72.         ]);
  73.         return $this->render('frontend/employee/dashboard.html.twig', [
  74.             'userName' => $user->getFirstname(),
  75.             'user' => $user,
  76.             'form' => $form->createView(),
  77.             'legend' => $legend,
  78.             'locationMaxDays' => json_encode($location->getHasHomeOfficeRequest() ? $location->getHoDaysPerWeek() : 0),
  79.             'homeOfficeAvailable' => $location->getHasHomeOfficeRequest(),
  80.         ]);
  81.     }
  82.     /**
  83.      * @param Request $request
  84.      * @param \Swift_Mailer $mailer
  85.      * @param UserPasswordEncoderInterface $encoder
  86.      * @return Response
  87.      * @throws \Exception
  88.      *
  89.      * @Route ("employee/confirm", name="employee_confirm")
  90.      */
  91.     public function confirmAction(Request $request\Swift_Mailer $mailerUserPasswordEncoderInterface $encoder)
  92.     {
  93.         $id $request->get("id");
  94.         $hash $request->get("hash");
  95.         /**
  96.          * @var App\Repository\EmployeeRepository $repository
  97.          */
  98.         $repository $this->doctrine->getRepository(Employee::class);
  99.         $employee null;
  100.         if(!empty($hash)) {
  101.             $employee $repository->findOneBy(['hash' => $hash]);
  102.         }
  103.         if(!$employee instanceof Employee || $employee->getId() !== intval($id))
  104.         {
  105.             return $this->render("frontend/employee/confirm.html.twig", [
  106.                 "success" => false,
  107.                 "employee" => null
  108.             ]);
  109.         }
  110.         $entityManager $this->doctrine->getManager();
  111.         $random sha1(random_bytes(10));
  112.         $passwordPlain substr($random012);
  113.         $password $encoder->encodePassword($employee$passwordPlain);
  114.         $employee->setPassword($password);
  115.         $employee->setHash(null);
  116.         $employee->setStatus(1);
  117.         $entityManager->flush();
  118.         $message = (new \Swift_Message('Your login informations'))
  119.             ->setFrom('info@op-buce.com')
  120.             ->setTo($employee->getEmail())
  121.             ->setBody(
  122.                 $this->renderView(
  123.                     'email/employee/login-info.html.twig',
  124.                     array('employee' => $employee'pwd' => $passwordPlain)
  125.                 ),
  126.                 'text/html'
  127.             )
  128.             ->addPart(
  129.                 $this->renderView(
  130.                     'email/employee/login-info.txt.twig',
  131.                     array('employee' => $employee'pwd' => $passwordPlain)
  132.                 ),
  133.                 'text/plain'
  134.             );
  135.         $mailer->send($message);
  136.         return $this->render("frontend/employee/confirm.html.twig", [
  137.             "success" => true,
  138.             "employee" => $employee
  139.         ]);
  140.     }
  141.     /**
  142.      * @param Request $request
  143.      * @param AuthenticationUtils $authenticationUtils
  144.      * @return Response
  145.      *
  146.      * @Route ("employee/login", name="employee_login")
  147.      */
  148.     public function loginAction(Request $requestAuthenticationUtils $authenticationUtils): Response
  149.     {
  150.         $session $request->getSession();
  151.         $invalidLogins $session->has("invalid_logins") ? $session->get("invalid_logins") : 0;
  152.         // get the login error if there is one
  153.         $error $authenticationUtils->getLastAuthenticationError();
  154.         // last username entered by the user
  155.         $lastUsername $authenticationUtils->getLastUsername();
  156.         return $this->render("frontend/employee/login.html.twig", [
  157.             'last_username' => $lastUsername,
  158.             'error'         => $error,
  159.             'invalid_logins' => $invalidLogins
  160.         ]);
  161.     }
  162.     /**
  163.      * @Route("employee/login/redirect", name="_login_employee_redirect")
  164.      */
  165.     public function loginRedirectAction(){
  166.         if($this->get('security.authorization_checker')->isGranted('ROLE_EMPLOYEE') || $this->get('security.authorization_checker')->isGranted('IS_AUTHENTICATED_REMEMBERED')) {
  167.             return $this->redirectToRoute('employee');
  168.         } else {
  169.             return $this->redirectToRoute('employee_login');
  170.         }
  171.     }
  172.     /**
  173.      * @param Request $request
  174.      * @param AuthenticationUtils $authenticationUtils
  175.      *
  176.      * @Route("employee/logout", name="employee_logout")
  177.      */
  178.     public function logoutAction(Request $requestAuthenticationUtils $authenticationUtils){
  179.     }
  180.     /**
  181.      * @return Response
  182.      *
  183.      * @Route("employee/legal-disclaimer", name="employee_legaldisclaimer")
  184.      */
  185.     public function legalDisclaimerAction(){
  186.         $user $this->getUser();
  187.         return $this->render("frontend/employee/legal-disclaimer.html.twig", [
  188.             'user' => $user,
  189.             'data' => !$user null $user->getFirstName()
  190.         ]);
  191.     }
  192.     /**
  193.      * @param Request $request
  194.      * @return JsonResponse
  195.      * @throws \Exception
  196.      *
  197.      * @Route("employee/legal-discalimer/accepted", name="employee_legaldisclaimer_accepted", methods={"POST"})
  198.      */
  199.     public function acceptDisclaimerAction(Request $request){
  200.         $user $this->getUser();
  201.         if($request->isXmlHttpRequest()) {
  202.             $accepted $request->request->get('accepted');
  203.             $em $this->doctrine->getManager();
  204.             $repo $this->doctrine->getRepository(Employee::class);
  205.             $employee $repo->find($user->getId());
  206.             if ($accepted == "false") {
  207.                 $employee->setDisclaimerAcceptedDate(null);
  208.                 $employee->setDisclaimerAccepted(false);
  209.             } else if ($accepted == "true") {
  210.                 $now = new \DateTime();
  211.                 $employee->setDisclaimerAcceptedDate($now);
  212.                 $employee->setDisclaimerAccepted(true);
  213.             }
  214.             try {
  215.                 $em->flush();
  216.                 return new JsonResponse(['success' => true]);
  217.             } catch (\Exception $e) {
  218.                 return new JsonResponse(['success' => false]);
  219.             }
  220.         }
  221.         return new JsonResponse(['success' => false]);
  222.     }
  223.     /**
  224.      * @param Request $request
  225.      * @param \Swift_Mailer $mailer
  226.      * @param UserPasswordEncoderInterface $encoder
  227.      * @return JsonResponse
  228.      * @throws \Exception
  229.      *
  230.      * @Route("employee/reset-pwd", name="employee_resetpwd", methods={"POST"})
  231.      */
  232.     public function generateNewPwd(Request $request\Swift_Mailer $mailerUserPasswordEncoderInterface $encoder){
  233.         $username $request->request->get('username');
  234.         $email $request->request->get('email');
  235.         $repo $this->doctrine->getRepository(Employee::class);
  236.         $employee $repo->findOneBy(['username' => $username'email' => $email'status' => 1'hash' => null]);
  237.         if(empty($employee) || is_null($employee)){
  238.             return new JsonResponse(['success' => false'data' => 'User not found or not confirmed.']);
  239.         }
  240.         $entityManager $this->doctrine->getManager();
  241.         $random sha1(random_bytes(10));
  242.         $passwordPlain substr($random012);
  243.         $password $encoder->encodePassword($employee$passwordPlain);
  244.         $employee->setPassword($password);
  245.         $entityManager->flush();
  246.         $message = (new \Swift_Message('Reset password'))
  247.             ->setFrom('info@op-buce.com')
  248.             ->setTo($employee->getEmail())
  249.             ->setBody(
  250.                 $this->renderView(
  251.                     'email/employee/reset-pwd.html.twig',
  252.                     array('employee' => $employee'pwd' => $passwordPlain)
  253.                 ),
  254.                 'text/html'
  255.             )
  256.             ->addPart(
  257.                 $this->renderView(
  258.                     'email/employee/reset-pwd.txt.twig',
  259.                     array('employee' => $employee'pwd' => $passwordPlain)
  260.                 ),
  261.                 'text/plain'
  262.             );
  263.         $mailer->send($message);
  264.         return new JsonResponse(['success' => true]);
  265.     }
  266.     /**
  267.      * @param Request $request
  268.      * @return JsonResponse
  269.      *
  270.      * @Route("employee/get-pwd-change-form", name="employee_pwd-change-form")
  271.      */
  272.     public function getPwdChangeForm(Request $request)
  273.     {
  274.         $user $this->getUser();
  275.         if(!$user instanceof Employee) {
  276.             return new JsonResponse(['success' => false], 403);
  277.         }
  278.         $form $this->createForm(PwdChangeType::class, $user, [
  279.         ]);
  280.         $template $this->renderView('frontend/employee/password-change-form.html.twig', [
  281.             'form' => $form->createView()
  282.         ]);
  283.         return new JsonResponse(['success' => true'data' => ['template' => $template]]);
  284.     }
  285.     /**
  286.      * @param Request $request
  287.      * @param UserPasswordEncoderInterface $encoder
  288.      * @return JsonResponse
  289.      *
  290.      * @Route("employee/pwd-change", name="employee_pwd-change")
  291.      */
  292.     public function setNewPwd(Request $requestUserPasswordEncoderInterface $encoder)
  293.     {
  294.         $user $this->getUser();
  295.         if(!$user instanceof Employee) {
  296.             return new JsonResponse(['success' => false], 403);
  297.         }
  298.         $form $this->createForm(PwdChangeType::class, $user);
  299.         $form->handleRequest($request);
  300.         if($form->isSubmitted()) {
  301.             if(!$form->isValid()) {
  302.                 $errors $this->formService->getErrorMessages($form);
  303.                 return new JsonResponse(['success' => false'error' => $errors]);
  304.             }
  305.             if($encoder->isPasswordValid($user$user->getPlainPassword())){
  306.                 return new JsonResponse(['success' => false'error' => ['Your new password must not the same as your old password.']]);
  307.             }
  308.             $password $encoder->encodePassword($user$user->getPlainPassword());
  309.             $user->setPassword($password);
  310.             $date = new \DateTime('now');
  311.             $user->setPasswordChanged($date);
  312.             try {
  313.                 $em $this->doctrine->getManager();
  314.                 $em->flush();
  315.             } catch (\Exception $exception) {
  316.                 return new JsonResponse(['success' => false'error' => ['Saving faild. Please try again later']], 500);
  317.             }
  318.             return new JsonResponse(['success' => true]);
  319.         }
  320.         return new JsonResponse(['success' => false], 400);
  321.     }
  322. }