src/Controller/ProfileController.php line 67

Open in your IDE?
  1. <?php
  2. /**
  3.  * Copyright (c) 2019-2022, MND Next GmbH - www.mndnext.de
  4.  */
  5. namespace App\Controller;
  6. use App\Entity\Company;
  7. use App\Entity\Employee;
  8. use App\Entity\Machine;
  9. use App\Entity\User;
  10. use App\Entity\WinWOP\LicenseRequest;
  11. use App\Entity\WinWOP\ModulesRequest;
  12. use App\Entity\WinWOP\SmcRequest;
  13. use App\Form\EmployeeType;
  14. use App\Form\LicenseRequestType;
  15. use App\Form\ModulesRequestType;
  16. use App\Form\NewMachineType;
  17. use App\Form\SMCRequestType;
  18. use App\Services\MailService;
  19. use FOS\UserBundle\Model\UserManagerInterface;
  20. use FOS\UserBundle\Util\TokenGeneratorInterface;
  21. use Symfony\Component\Form\FormError;
  22. use Symfony\Component\HttpFoundation\RedirectResponse;
  23. use Symfony\Component\HttpFoundation\Request;
  24. use FOS\UserBundle\Model\UserInterface;
  25. use Symfony\Component\Routing\Generator\UrlGeneratorInterface;
  26. use Symfony\Component\Security\Core\Exception\AccessDeniedException;
  27. use Symfony\Component\Routing\Annotation\Route;
  28. use Doctrine\ORM\EntityNotFoundException;
  29. use Symfony\Contracts\Translation\TranslatorInterface;
  30. /**
  31.  * Listener responsible to change the redirection at the end of the password resetting
  32.  */
  33. class ProfileController extends ExtendedAbstractController
  34. {
  35.     /** @var UserManagerInterface */
  36.     private $userManager;
  37.     /** @var TokenGeneratorInterface */
  38.     private $tokenGenerator;
  39.     /** @var MailService */
  40.     private $mailer;
  41.     private $parent;
  42.     /** @var TranslatorInterface */
  43.     private $translator;
  44.     public function __construct(\FOS\UserBundle\Controller\ProfileController $controllerUserManagerInterface $userManagerMailService $mailerTokenGeneratorInterface $tokenGeneratorTranslatorInterface $translator)
  45.     {
  46.         $this->parent $controller;
  47.         $this->userManager $userManager;
  48.         $this->tokenGenerator $tokenGenerator;
  49.         $this->mailer $mailer;
  50.         $this->translator $translator;
  51.     }
  52.     /**
  53.      * @Route("/profile/", methods={"GET","POST"})
  54.      * @param Request $request
  55.      * @return \Symfony\Component\HttpFoundation\Response
  56.      */
  57.     public function showAction(Request $request)
  58.     {
  59.         $user $this->getUser();
  60.         if (!is_object($user) || !$user instanceof UserInterface) {
  61.             throw new AccessDeniedException('This user does not have access to this section.');
  62.         }
  63.         if ($user->hasRole('ROLE_ADMIN') || $user->hasRole('ROLE_NEW_ADMIN')) {
  64.             if (!$user->hasRole('ROLE_ADMIN')) {
  65.                 if (!$user->getConfirmationToken()) {
  66.                     $user->addRole('ROLE_ADMIN');
  67.                     $user->removeRole('ROLE_NEW_ADMIN');
  68.                     $this->userManager->updateUser($user);
  69.                 }
  70.             }
  71.             return new RedirectResponse('/admin');
  72.         }
  73.         $form null;
  74.         $employees null;
  75.         if ($this->isGranted('ROLE_CONTACT')) {
  76.             $employees $user->getCompany()->getEmployees();
  77.             $employee = new Employee();
  78.             $employee->setCompany($user->getCompany());
  79.             $employee->setRegisterState(USER::REGISTERED_SELF);
  80.             $form $this->createForm(EmployeeType::class, $employee, [
  81.                 //'action' => $this->generateUrl('license_request')
  82.             ]);
  83.             $form->handleRequest($request);
  84.             if ($form->isSubmitted() && $form->isValid()) {
  85.                 $employee->setRandomSalt();
  86.                 $employee->setPassword($this->tokenGenerator->generateToken());
  87.                 $employee->setPasswordRequestedAt(new \DateTime());
  88.                 $employee->setConfirmationToken($this->tokenGenerator->generateToken());
  89.                 $employee->addRole('ROLE_NEW_EMPLOYEE');
  90.                 $this->userManager->updateUser($employee);
  91.                 $em $this->getDoctrine()->getManager();
  92.                 $em->persist($employee);
  93.                 $em->flush();
  94.                 $formData $request->get('employee');
  95.                 $this->addFlash('success'$this->translator->trans('employees.msg.success', [], 'app'));
  96.                 if (array_key_exists('sendmail'$formData) && $formData['sendmail']) {
  97.                     $this->mailer->sendRegisterConfirmEmployee($employee);
  98.                     $this->addFlash('info'$this->translator->trans('employees.msg.mailsend', [], 'app'));
  99.                 }
  100.             }
  101.         }
  102.         return $this->render('@FOSUser/Profile/show.html.twig', array(
  103.             'user' => $user,
  104.             'employees' => $employees,
  105.             'employeeForm' => ($form?$form->createView():null),
  106.         ));
  107.     }
  108.     /**
  109.      * @Route("/profile/files")
  110.      */
  111.     public function companyFiles(Request $request)
  112.     {
  113.         $this->denyAccessUnlessGranted('ROLE_EMPLOYEE');
  114.         if ($this->isGranted('ROLE_CONTACT')) {
  115.             $files $this->getUser()->getCompany()->getContactFiles();
  116.         } else {
  117.             $files $this->getUser()->getCompany()->getEmployeeFiles();
  118.         }
  119.         return $this->render('profile/company_files.html.twig', ['files' => $files]);
  120.     }
  121.     /**
  122.      * @Route("/profile/licenserequest")
  123.      */
  124.     public function licenseRequest(Request $request)
  125.     {
  126.         $machineId $request->get('machineId');
  127.         if (!$machineId) {
  128.             $formData $request->get('license_request');
  129.             if ($formData && array_key_exists('machine'$formData)) {
  130.                 $machineId $formData['machine'];
  131.             }
  132.         }
  133.         if ($machineId) {
  134.             $this->denyAccessUnlessGranted(['ROLE_NEW_CONTACT''ROLE_EMPLOYEE']);
  135.             try {
  136.                 $machine $this->getDoctrine()->getRepository(Machine::class)->find($machineId);
  137.                 if ($machine->getCompany() != $this->getUser()->getCompany()) {
  138.                     return new RedirectResponse('/profile/licenserequest');
  139.                 }
  140.                 if ($machine->getLicenseRequest()) {
  141.                     return new RedirectResponse('/profile/machine/' $machine->getId() . '?error=license_request_processing');
  142.                 }
  143.             } catch (EntityNotFoundException $e) {
  144.                 return new RedirectResponse('fos_user_profile_show');
  145.             }
  146.         } else {
  147.             $machine null;
  148.         }
  149.         $machines = [];
  150.         /** @var $company Company */
  151.         if ($this->getUser()) {
  152.             $company $this->getUser()->getCompany();
  153.             if ($company) {
  154.                 $machines $company->getMachines();
  155.             }
  156.         }
  157.         $licenseRequest = new LicenseRequest();
  158.         $licenseRequest->setMachine($machine);
  159.         $requestForm $this->createForm(LicenseRequestType::class, $licenseRequest, ['machines' => $machines]);
  160.         $requestForm->handleRequest($request);
  161.         if ($requestForm->isSubmitted() && $requestForm->isValid()) {
  162.             if (!$machine) {
  163.                 $machine = new Machine();
  164.                 $machine->setName($licenseRequest->getName());
  165.                 $machine->setCompany($this->getUser()->getCompany());
  166.                 //$last = $this->getDoctrine()->getRepository(Machine::class)->findBy([], ['id' => 'DESC'], 1);
  167.                 //$machine->getCompany()->getName() . '-' . ($last[0]->getId() + 1)
  168.                 $machine->setSerial($licenseRequest->getSerial());
  169.                 $machine->setControl($licenseRequest->getControl());
  170.                 $machine->setManufacturerName($licenseRequest->getManufacturerName());
  171.                 $licenseRequest->setMachine($machine);
  172.             } else {
  173.                 $licenseRequest->setName($machine->getName());
  174.                 $licenseRequest->setSerial($machine->getSerial());
  175.                 $licenseRequest->setControl(($machine->getControl()?$machine->getControl():''));
  176.                 $licenseRequest->setManufacturerName(($machine->getManufacturerName()?$machine->getManufacturerName():''));
  177.             }
  178.             $em $this->getDoctrine()->getManager();
  179.             $em->persist($machine);
  180.             $em->persist($licenseRequest);
  181.             $em->flush();
  182.             $this->mailer->noticeLicenseRequest($licenseRequest$this->getUser());
  183.             $requestSaved true;
  184.         } else {
  185.             $requestSaved false;
  186.         }
  187.         return $this->render('profile/license_request.html.twig', [
  188.                 'machine' => $machine,
  189.                 'form' => $requestForm->createView(),
  190.                 'saved' => $requestSaved]
  191.         );
  192.     }
  193.     /**
  194.      * @Route("/profile/modulesrequest")
  195.      */
  196.     public function modulesRequest(Request $request)
  197.     {
  198.         $this->denyAccessUnlessGranted(['ROLE_NEW_CONTACT''ROLE_EMPLOYEE']);
  199.         $machineId $request->get('machineId');
  200.         if (!$machineId) {
  201.             $formData $request->get('licenserequest');
  202.             if ($formData && array_key_exists('machine'$formData)) {
  203.                 $machineId $formData['machine'];
  204.             }
  205.         }
  206.         if ($machineId) {
  207.             try {
  208.                 /** @var Machine $machine */
  209.                 $machine $this->getDoctrine()->getRepository(Machine::class)->find($machineId);
  210.                 if ($machine->getCompany() != $this->getUser()->getCompany()) {
  211.                     return new RedirectResponse('fos_user_profile_show');
  212.                 }
  213.                 if ($machine->getModulesRequest()) {
  214.                     return new RedirectResponse('/profile/machine/' $machine->getId() . '?error=modules_request_processing');
  215.                 }
  216.             } catch (EntityNotFoundException $e) {
  217.                 return new RedirectResponse('fos_user_profile_show');
  218.             }
  219.         } else {
  220.             return new RedirectResponse('fos_user_profile_show');
  221.         }
  222.         $modulesRequest = new ModulesRequest();
  223.         $modulesRequest->setMachine($machine);
  224.         $options = [];
  225.         if ($machine->getCurrentLicense()) {
  226.             $options = ['modules' => $machine->getCurrentLicensedModules()];
  227.         }
  228.         $requestForm $this->createForm(ModulesRequestType::class, $modulesRequest$options);
  229.         $requestForm->handleRequest($request);
  230.         if ($requestForm->isSubmitted() && $requestForm->isValid()) {
  231.             $em $this->getDoctrine()->getManager();
  232.             $em->persist($machine);
  233.             $em->persist($modulesRequest);
  234.             $em->flush();
  235.             $this->mailer->noticeModuleLicenseRequest($modulesRequest$this->getUser());
  236.             $requestSaved true;
  237.         } else {
  238.             $requestSaved false;
  239.         }
  240.         return $this->render('profile/modules_request.html.twig', [
  241.                 'machine' => $machine,
  242.                 'form' => $requestForm->createView(),
  243.                 'saved' => $requestSaved]
  244.         );
  245.     }
  246.     /**
  247.      * @Route("/profile/smcrequest")
  248.      */
  249.     public function smcRequest(Request $request)
  250.     {
  251.         $this->denyAccessUnlessGranted('ROLE_NEW_CONTACT');
  252.         $machineId $request->get('machineId');
  253.         if (!$machineId) {
  254.             $formData $request->get('licenserequest');
  255.             if ($formData && array_key_exists('machine'$formData)) {
  256.                 $machineId $formData['machine'];
  257.             }
  258.         }
  259.         if ($machineId) {
  260.             $this->denyAccessUnlessGranted('ROLE_NEW_CONTACT');
  261.             try {
  262.                 $machine $this->getDoctrine()->getRepository(Machine::class)->find($machineId);
  263.                 if ($machine->getCompany() != $this->getUser()->getCompany()) {
  264.                     return new RedirectResponse('fos_user_profile_show');
  265.                 }
  266.                 if ($machine->getSmcRequest()) {
  267.                     return new RedirectResponse('/profile/machine/' $machine->getId() . '?error=smc_request_processing');
  268.                 }
  269.             } catch (EntityNotFoundException $e) {
  270.                 return new RedirectResponse('fos_user_profile_show');
  271.             }
  272.         } else {
  273.             return new RedirectResponse('fos_user_profile_show');
  274.         }
  275.         $smcRequest = new SmcRequest();
  276.         $smcRequest->setMachine($machine);
  277.         $requestForm $this->createForm(SMCRequestType::class, $smcRequest);
  278.         $requestForm->handleRequest($request);
  279.         if ($requestForm->isSubmitted() && $requestForm->isValid()) {
  280.             $em $this->getDoctrine()->getManager();
  281.             $em->persist($machine);
  282.             $em->persist($smcRequest);
  283.             $em->flush();
  284.             $this->mailer->noticeSmcRequest($smcRequest$this->getUser());
  285.             $requestSaved true;
  286.         } else {
  287.             $requestSaved false;
  288.         }
  289.         return $this->render('profile/smc_request.html.twig', [
  290.                 'machine' => $machine,
  291.                 'form' => $requestForm->createView(),
  292.                 'saved' => $requestSaved]
  293.         );
  294.     }
  295.     /**
  296.      * @Route("/profile/newmachine")
  297.      */
  298.     public function newMachine(Request $request)
  299.     {
  300.         $this->denyAccessUnlessGranted(['ROLE_NEW_CONTACT''ROLE_EMPLOYEE']);
  301.         if (!$this->getUser()) {
  302.             return new RedirectResponse('/');
  303.         }
  304.         $machines = [];
  305.         /** @var $company Company */
  306.         $company $this->getUser()->getCompany();
  307.         if ($company) {
  308.             $machines $company->getMachines();
  309.         }
  310.         $machine = new Machine();
  311.         $form $this->createForm(NewMachineType::class, $machine);
  312.         $form->handleRequest($request);
  313.         $requestSaved false;
  314.         $duplicated false;
  315.         if ($form->isSubmitted() && $form->isValid()) {
  316.             foreach ($machines as $oldMachine) {
  317.                 if (mb_strtolower($oldMachine->getserial()) === mb_strtolower($machine->getSerial())) {
  318.                     $duplicated true;
  319.                     $form->get('serial')->addError(new FormError($this->translator->trans('request.msg.duplicated', [], 'app')));
  320.                 }
  321.             }
  322.             if (!$duplicated) {
  323.                 $machine->setCompany($company);
  324.                 $em $this->getDoctrine()->getManager();
  325.                 $em->persist($machine);
  326.                 $em->flush();
  327.                 //mail to admins
  328.                 $this->mailer->noticeNewMachine($machine$this->getUser());
  329.                 $requestSaved true;
  330.             }
  331.         }
  332.         return $this->render('profile/new_machine.html.twig', [
  333.                 'machine' => $machine,
  334.                 'form' => $form->createView(),
  335.                 'saved' => $requestSaved]
  336.         );
  337.     }
  338.     public function editAction(Request $request)
  339.     {
  340.         return $this->parent->editAction($request);
  341.     }
  342. }