src/Controller/DefaultController.php line 539

Open in your IDE?
  1. <?php
  2. namespace App\Controller;
  3. use App\Entity\AAALog;
  4. use App\Entity\Catalogue3en1;
  5. use Doctrine\ORM\EntityManagerInterface;
  6. use EasyCorp\Bundle\EasyAdminBundle\Config\Assets;
  7. use EasyCorp\Bundle\EasyAdminBundle\Config\Crud;
  8. use EasyCorp\Bundle\EasyAdminBundle\Config\MenuItem;
  9. use EasyCorp\Bundle\EasyAdminBundle\Config\UserMenu;
  10. use EasyCorp\Bundle\EasyAdminBundle\Router\AdminUrlGenerator;
  11. use App\Controller\AdminVehicleController;
  12. use EasyCorp\Bundle\EasyAdminBundle\Config\Dashboard;
  13. use App\Entity\Seats;
  14. use EasyCorp\Bundle\EasyAdminBundle\Security\Permission;
  15. use Symfony\Component\HttpFoundation\Response;
  16. use Symfony\Component\HttpFoundation\Request;
  17. use Symfony\Component\Form\Extension\Core\Type\SubmitType;
  18. use Symfony\Component\HttpKernel\KernelInterface;
  19. use Symfony\Component\Routing\Annotation\Route;
  20. use Doctrine\ORM\EntityManager;
  21. use App\Repository\VehicleRepository;
  22. use App\Repository\OTCDataRepository;
  23. use App\Repository\JRNLogRepository;
  24. use App\Repository\IssueRepository;
  25. use App\Form\Type\PrintersChoiceType;
  26. use App\Event\IssueEvent;
  27. use App\Entity\Vehicle;
  28. use App\Entity\User;
  29. use App\Entity\Bus;
  30. use App\Entity\COCData;
  31. use App\Entity\Printer;
  32. use App\Entity\Client;
  33. use App\Entity\CO2Criteria;
  34. use App\Entity\JRNLog;
  35. use App\Entity\FDPGamma;
  36. use App\Entity\OTCData;
  37. use App\Entity\Issue;
  38. use App\Entity\JobLog;
  39. use Symfony\Component\Security\Core\User\UserInterface;
  40. use Symfony\Component\Security\Http\Authentication\AuthenticationUtils;
  41. use EasyCorp\Bundle\EasyAdminBundle\Controller\AbstractDashboardController;
  42. use EasyCorp\Bundle\EasyAdminBundle\Contracts\Controller\DashboardControllerInterface;
  43. use Symfony\Component\Messenger\MessageBusInterface;
  44. use Symfony\Contracts\Translation\TranslatorInterface;
  45. class DefaultController extends AbstractDashboardController implements DashboardControllerInterface
  46. {
  47.     /** @var JRNLogRepository $repoJRNLog */
  48.     private $repoJRNLog;
  49.     /** @var VehicleRepository $repoVehicle */
  50.     private $repoVehicle;
  51.     /** @var MessageLogRepository $repoJob */
  52.     private $repoJob;
  53.     /** @var OTCDataRepository $repoOTC */
  54.     private $repoOTC;
  55.     /** @var IssueRepository $repoOTC */
  56.     private $repoIssue;
  57.     private $authenticationUtils;
  58.     private $kernel;
  59.     private $translator;
  60.     private $adminUrlGenerator;
  61.     private $messageBus;
  62.     /**
  63.      * @param EntityManager $em
  64.      */
  65.     public function __construct(
  66.         private EntityManagerInterface $em,
  67.         AuthenticationUtils $authenticationUtils,
  68.         KernelInterface $kernel,
  69.         TranslatorInterface $translator,
  70.         AdminUrlGenerator $adminUrlGenerator,
  71.         MessageBusInterface $bus
  72.     ) {
  73.         $this->authenticationUtils $authenticationUtils;
  74.         $this->repoJRNLog   $em->getRepository(JRNLog::class);
  75.         $this->repoVehicle  $em->getRepository(Vehicle::class);
  76.         $this->repoOTC      $em->getRepository(OTCData::class);
  77.         $this->repoIssue    $em->getRepository(Issue::class);
  78.         $this->repoJob      $em->getRepository(JobLog::class);
  79.         $this->adminUrlGenerator $adminUrlGenerator;
  80.         $this->kernel $kernel;
  81.         $this->translator $translator;
  82.         $this->messageBus $bus;
  83.     }
  84.     public function configureDashboard(): Dashboard
  85.     {
  86.         return Dashboard::new()
  87.             ->disableUrlSignatures();
  88.     }
  89.     public function configureCrud(): Crud
  90.     {
  91.         return Crud::new()
  92.             ->overrideTemplates([
  93.                 'layout' => 'base.html.twig',
  94.                 'crud/index' => 'index.html.twig',
  95.             ]);
  96.     }
  97.     public function configureAssets(): Assets
  98.     {
  99.         return Assets::new()
  100.             ->addWebpackEncoreEntry('app');
  101.     }
  102.     public function configureMenuItems(): iterable
  103.     {
  104.         if($this->isGranted("ROLE_USERS")){
  105.             yield MenuItem::linkToDashboard('Dashboard''fa fa-home')->setPermission("ROLE_USERS");
  106.             yield MenuItem::subMenu('issue-list''fa fa-exclamation')->setSubItems([
  107.                 MenuItem::linkToCrud('Alert''fa fa-warning'Issue::class)
  108.                     ->setAction('index')
  109.                     ->setController(AdminIssueController::class),                    
  110.                 MenuItem::linkToCrud('Info''fa fa-info'Issue::class)
  111.                     ->setController(AdminWarningController::class)                    
  112.             ]);
  113.             $flowSubMenu = [];
  114.             if($this->isGranted("ROLE_HOMOLOGATION") || $this->isGranted("ROLE_LOGISTIC_BUS")){
  115.                 $flowSubMenu[] = MenuItem::linkToRoute('import-export''fa fa-cloud-download''import_export');
  116.             }
  117.             $flowSubMenu[] = MenuItem::linkToCrud('Log''fa fa-file-text'JobLog::class)->setAction('index')
  118.                                 ->setPermission("ROLE_USERS");
  119.             if($this->isGranted("ROLE_MARKETING") || $this->isGranted("ROLE_LOGISTIC_BUS") || $this->isGranted("ROLE_LOGISTIC")){
  120.                 $flowSubMenu[] = MenuItem::linkToCrud('JRNLog''fa fa-file-text'JRNLog::class)->setAction('index');
  121.             }
  122.             $flowSubMenu[] =  MenuItem::linkToCrud('acvdifflog''fa fa-file-text'AAALog::class)->setAction('index')
  123.                                 ->setController(AdminACVDiffController::class)
  124.                                 ->setPermission("ROLE_SUPERADMIN");
  125.             $flowSubMenu[] =  MenuItem::linkToCrud('avinvarlog''fa fa-file-text'AAALog::class)->setAction('index')
  126.                                 ->setController(AdminAAALogController::class)
  127.                                 ->setPermission("ROLE_SUPERADMIN");
  128.             yield MenuItem::subMenu('flow''fa fa-tasks')->setSubItems($flowSubMenu);
  129.         }
  130.         if($this->isGranted("ROLE_MARKETING") || $this->isGranted("ROLE_HOMOLOGATION") || $this->isGranted("ROLE_LOGISTIC") || $this->isGranted("ROLE_LOGISTIC_BUS")){
  131.             $vehicleSubMenu = [];
  132.             if($this->isGranted("ROLE_MARKETING") || $this->isGranted("ROLE_HOMOLOGATION") || $this->isGranted("ROLE_LOGISTIC") ){
  133.                 $vehicleSubMenu[] = MenuItem::linkToCrud('Truck''fa fa-truck'Vehicle::class)
  134.                                         ->setController(AdminVehicleController::class)
  135.                                         ->setAction('index');
  136.             }
  137.             if($this->isGranted("ROLE_MARKETING") || $this->isGranted("ROLE_LOGISTIC_BUS")){
  138.                 $vehicleSubMenu[] = MenuItem::linkToCrud('Bus''fa fa-bus'Bus::class)
  139.                                         ->setAction('index');
  140.             }
  141.             yield MenuItem::subMenu('vehicles''fa fa-car')->setSubItems($vehicleSubMenu);
  142.         }
  143.       
  144.         if($this->isGranted("ROLE_MARKETING") || $this->isGranted("ROLE_HOMOLOGATION") || $this->isGranted("ROLE_LOGISTIC")){
  145.             yield MenuItem::linkToCrud('customers''fa fa-user'Client::class)
  146.                 ->setAction('index');
  147.         }
  148.         
  149.         yield MenuItem::subMenu('admin''fa fa-key')->setSubItems([
  150.             MenuItem::linkToCrud('users''fa fa-user'User::class),
  151.             MenuItem::linkToCrud('printers''fa fa-print'Printer::class)
  152.         ])->setPermission("ROLE_ADMIN");
  153.         
  154.         if($this->isGranted("ROLE_MARKETING") || $this->isGranted("ROLE_HOMOLOGATION")){
  155.             yield MenuItem::subMenu('parametrization''fa fa-cog')->setSubItems([
  156.                 MenuItem::linkToCrud('Catalogue3en1''fa fa-cogs'Catalogue3en1::class)
  157.                     ->setAction('index')
  158.                     ->setPermission('ROLE_SUPERADMIN'),
  159.                 MenuItem::linkToCrud('Seats''fa fa-street-view'Seats::class)
  160.                     ->setAction('index')
  161.                     ->setPermission("ROLE_HOMOLOGATION"),
  162.                 MenuItem::linkToCrud('FDPGamma''fa fa-cogs'FDPGamma::class)
  163.                     ->setAction('index')
  164.                     ->setPermission("ROLE_MARKETING"),
  165.                 MenuItem::linkToCrud('CO2Criteria''fa fa-leaf'CO2Criteria::class)
  166.                     ->setAction('index')
  167.                     ->setPermission("ROLE_HOMOLOGATION"),
  168.             ]);
  169.         }
  170.         if($this->isGranted("ROLE_HOMOLOGATION")){
  171.             yield MenuItem::subMenu('homologation''fa fa-sitemap')->setSubItems([
  172.                 MenuItem::linkToCrud('otc''fa fa-cogs'OTCData::class)->setAction('index'),
  173.                 MenuItem::linkToCrud('coc''fa fa-cogs'COCData::class)->setAction('index'),
  174.             ]);
  175.         }
  176.     }
  177.     
  178.     public function configureUserMenu(UserInterface $user): UserMenu
  179.     {
  180.         $userMenuItems = [MenuItem::section(), MenuItem::linkToLogout('__ea__user.sign_out''fa-sign-out')];
  181.         $userMenuItems[] = MenuItem::linkToRoute('settings.label''settings''settings');
  182.         if ($this->isGranted(Permission::EA_EXIT_IMPERSONATION)) {
  183.             $userMenuItems[] = MenuItem::linkToExitImpersonation('__ea__user.exit_impersonation''fa-user-lock');
  184.         }
  185.         $userName '';
  186.         
  187.         if (method_exists($user'getUsername')) {
  188.             $userName $user->getUsername();
  189.         } elseif (method_exists($user'getUserIdentifier')) {
  190.             $userName $user->getUserIdentifier();
  191.         } elseif (method_exists($user'__toString')) {
  192.             $userName = (string) $user;
  193.         }
  194.         return UserMenu::new()
  195.             ->displayUserName()
  196.             ->displayUserAvatar()
  197.             ->setName($userName)
  198.             ->setAvatarUrl(null)
  199.             ->setMenuItems($userMenuItems);
  200.     }
  201.     /** @Route("/", name="homepage") */
  202.     public function homepage(): Response
  203.     {
  204.         return $this->redirectToRoute('easyadmin');
  205.     }
  206.     /** @Route("/admin", name="easyadmin") */
  207.     public function index(): Response
  208.     {
  209.         return $this->indexAction();
  210.     }
  211.     public function indexAction()
  212.     {
  213.         ini_set('max_execution_time''300');
  214.         $panels = [
  215.             $this->isGranted("ROLE_MARKETING") || $this->isGranted("ROLE_LOGISTIC_BUS")
  216.                 ? $this->createJRNPanel() : false,
  217.             $this->isGranted("ROLE_LOGISTIC")
  218.                 ? $this->createCDFSPanel() : false,
  219.             $this->isGranted("ROLE_HOMOLOGATION") || $this->isGranted("ROLE_MARKETING") || $this->isGranted("ROLE_LOGISTIC")
  220.                 ? $this->createSAPPanel() : false,
  221.             $this->isGranted("ROLE_HOMOLOGATION")
  222.                 ? $this->createOTCPanel() : false,
  223.             $this->isGranted("ROLE_HOMOLOGATION") || $this->isGranted("ROLE_LOGISTIC")
  224.                 ? $this->create3en1Panel() : false,
  225.             $this->isGranted("ROLE_SUPERADMIN")
  226.                 ? $this->createErrorsPanel() : false,
  227.             $this->isGranted("ROLE_HOMOLOGATION") || $this->isGranted("ROLE_SUPERADMIN")
  228.                 ? $this->createECOCPanel() : false,
  229.         ];
  230.         $panels $this->removeUnusedPanels($panels);
  231.         $panels $this->setConstantPanelRowCount($panels);
  232.         return $this->render('Default/index.html.twig', ["panels" => $panels]);
  233.     }
  234.     private function removeUnusedPanels($panels)
  235.     {
  236.         $panels array_filter($panels);
  237.         foreach ($panels as &$panel) {
  238.             $panel["values"] = array_filter($panel["values"]);
  239.             $panel["alerts"] = array_filter(isset($panel["alerts"]) ? $panel["alerts"] : []);
  240.         }
  241.         return $panels;
  242.     }
  243.     private static function setConstantPanelRowCount($panels)
  244.     {
  245.         if (!count($panels)) return [];
  246.         $maxLines max(array_map(function ($p) {
  247.             return count($p["values"]) + count($p["alerts"]);
  248.         }, $panels));
  249.         // Note: the line filler goes above the alert panels if these are present
  250.         foreach ($panels as &$panel)
  251.             $panel["values"] += array_fill(0$maxLines count($panel["alerts"]), []);
  252.         return $panels;
  253.     }
  254.     //region Top Level Panel Creators
  255.     private function createJRNPanel()
  256.     {
  257.         return [
  258.             "title" => [
  259.                 "raw" => "JRN",
  260.                 "link" => $this->adminUrlGenerator->setController(AdminJRNLogController::class)->generateUrl()
  261.             ],
  262.             "values" => [
  263.                 $this->getCountSinceLastUpdateForBrandSubPanel(JRNLog::IVECO"IVECO"),
  264.                 $this->getCountSinceLastUpdateForBrandSubPanel(JRNLog::IVECO_BUS"IVECO BUS"),
  265.                 $this->getCountSinceLastUpdateForBrandSubPanel(JRNLog::IRISBUS"IRIS BUS"),
  266.                 $this->getInfoLinkSubPanelIfOlderThan(IssueEvent::JRN$this->repoJob->findLastCreatedAtImport("jrn")),
  267.             ]
  268.         ];
  269.     }
  270.     private function createCDFSPanel()
  271.     {
  272.         $lastCreatedAtImport $this->repoJob->findLastCreatedAtImport("cdfs");
  273.         $formattedDate $this->formatDate($lastCreatedAtImport);
  274.         $runNumber $this->repoVehicle->findFirstRunNumberAfter($lastCreatedAtImport);
  275.         return [
  276.             "title" => ["raw" => "<span class=\"title-span\">CDFS:</span> {$formattedDate}{$runNumber}"],
  277.             "values" => [
  278.                 [
  279.                     "value" => $this->repoVehicle->countCDFSImportAfter($lastCreatedAtImport),
  280.                     "label" => "treated vehicles",
  281.                 ],
  282.                 $this->getInfoLinkSubPanelIfOlderThan(IssueEvent::CDFS$lastCreatedAtImport),
  283.             ],
  284.             "alerts" => [$this->getNewIssueAlert(IssueEvent::CDFS$lastCreatedAtImport)]
  285.         ];
  286.     }
  287.     private function createSAPPanel()
  288.     {
  289.         $lastCreateDateSAPImport $this->repoJob->findLastCreatedAtImport("sap");
  290.         $formattedDate $this->formatDate($lastCreateDateSAPImport);
  291.         return [
  292.             "title" => ["raw" => "<span class=\"title-span\">SAP:</span> {$formattedDate}"],
  293.             "values" => [
  294.                 [
  295.                     "value" => $this->repoVehicle->countSAPImportAfter($lastCreateDateSAPImport),
  296.                     "label" => "treated vehicles",
  297.                 ],
  298.                 $this->getInfoLinkSubPanelIfOlderThan(IssueEvent::SAP$lastCreateDateSAPImport),
  299.             ],
  300.             "alerts" => [
  301.                 $this->isGranted("ROLE_HOMOLOGATION") ? $this->getNewSapPersonAlert(IssueEvent::SAP_CLIENT"Alert! New client")  : false,
  302.                 $this->isGranted("ROLE_MARKETING")    ? $this->getNewSapPersonAlert(IssueEvent::SAP,        "Alert! New FDP")     : false,
  303.             ]
  304.         ];
  305.     }
  306.     private function createOTCPanel()
  307.     {
  308.         $lastCreateDateOTCImport $this->repoJob->findLastCreatedAtImport("otc");
  309.         $formattedDate $this->formatDate($lastCreateDateOTCImport);
  310.         $lastOTCNumReception $this->repoOTC->findLastNumReception();
  311.         return [
  312.             "title" => ["raw" => "<span class=\"title-span\">OTC:</span> {$formattedDate}{$lastOTCNumReception}"],
  313.             "values" => [
  314.                 [
  315.                     "value" => $this->repoVehicle->countOTCByNumReception($lastOTCNumReception),
  316.                     "label" => "concerned vehicles",
  317.                     "link" => $this->generateUrl_SearchByLastOTCNumber($lastOTCNumReception)
  318.                 ],
  319.                 $this->getInfoLinkSubPanelIfOlderThan(IssueEvent::OTC$lastCreateDateOTCImport),
  320.             ]
  321.         ];
  322.     }
  323.     private function create3en1Panel()
  324.     {
  325.         return [
  326.             "title" => ["raw" => "3en1"],
  327.             "values" => [[
  328.                 "value" => $this->repoVehicle->countPrintableGrand(true),
  329.                 "label" => "3en1 to print_KA",
  330.                 "link" => $this->generateUrl_SearchByPrintableGrand(true)
  331.             ], [
  332.                 "value" => $this->repoVehicle->countPrintableGrand(false),
  333.                 "label" => "3en1 to print_DEALERS",
  334.                 "link" => $this->generateUrl_SearchByPrintableGrand(false)
  335.             ]]
  336.         ];
  337.     }
  338.     private function createErrorsPanel()
  339.     {
  340.         return [
  341.             "title" => ["label" => "Errors AAA"],
  342.             "values" => [
  343.                 $this->getErrorSubPanelForError(IssueEvent::AAA_DEPOT"Errors in sending"),
  344.                 $this->getErrorSubPanelForError(IssueEvent::AAA_RETRAIT_REJE"Errors REJE"),
  345.                 $this->getErrorSubPanelForError(IssueEvent::AAA_RETRAIT_REJG"Errors REJG"),
  346.                 $this->getInfoLinkSubPanelIfOlderThan(IssueEvent::AAA, new \DateTime()),
  347.             ]
  348.         ];
  349.     }
  350.     private function createECOCPanel()
  351.     {
  352.         $job $this->repoJob->findByLastEcocImport();
  353.         $lastECOCImportJob = !$job "" $job->getCreatedAt();
  354.         $formattedDate $this->formatDate($lastECOCImportJob);
  355.         return [
  356.             "title" => ["raw" => "<span class=\"title-span\">eCOC:</span> {$formattedDate}"],
  357.             "values" => [
  358.                 [
  359.                     "value" => $this->repoVehicle->countECOCImportAfter($lastECOCImportJob),
  360.                     "label" => "treated vehicles",
  361.                 ],
  362.                 $this->getInfoLinkSubPanelIfOlderThan(IssueEvent::ECOC_IMPORT$lastECOCImportJob),
  363.             ],
  364.             "alerts" => [$this->getNewIssueAlert(IssueEvent::ECOC_IMPORT$lastECOCImportJob)]
  365.         ];
  366.     }
  367.     //endregion
  368.     //region Generate Search URLs
  369.     private function generateUrl_SearchByLastOTCNumber($lastOTCNumReception)
  370.     {
  371.         return $this->adminUrlGenerator
  372.                     ->setController(AdminVehicleController::class)
  373.                     ->setAction('index')
  374.                     ->set("filters[otc--numReception][value]"$lastOTCNumReception)
  375.                     ->set("filters[otc--numReception][comparison]""=");
  376.     }
  377.     private function generateUrl_SearchByPrintableGrand($isGrandCompte)
  378.     {
  379.         $adminUrlGenerator $this->container->get(AdminUrlGenerator::class);
  380.         return $adminUrlGenerator
  381.             ->setController(AdminVehicleController::class)
  382.             ->setAction('index')
  383.             ->set('filters[positioned]'"1")
  384.             ->set('filters[clientInvoice--isGrandCompte]'$isGrandCompte "1" "0")
  385.             ->set('filters[printableStatus][comparison]''=')
  386.             ->set('filters[printableStatus][value]''printable');
  387.     }
  388.     private function generateUrl_ShowWarningList($queryType)
  389.     {
  390.         $adminUrlGenerator $this->container->get(AdminUrlGenerator::class);
  391.         return $adminUrlGenerator
  392.                     ->setController(AdminWarningController::class)
  393.                     ->setAction('index')
  394.                     ->set('filters[type][value]'$queryType)
  395.                     ->set('filters[type][comparison]''=');
  396.     }
  397.     private function generateUrl_GenericSearchQuery($query)
  398.     {
  399.         $adminUrlGenerator $this->container->get(AdminUrlGenerator::class);
  400.         $adminUrlGenerator
  401.             ->setController(AdminIssueController::class)
  402.             ->setAction('index');
  403.         foreach($query as $key => $value){
  404.             $adminUrlGenerator
  405.                 ->set("filters[$key][comparison])","=")
  406.                 ->set("filters[$key][value])",$value);
  407.         }
  408.         return $adminUrlGenerator->generateUrl();
  409.     }
  410.     //endregion
  411.     //region Sub Panels Creators
  412.     private function getErrorSubPanelForError($type$label)
  413.     {
  414.         return ($value $this->repoIssue->countBy(["status" => Issue::STATUS_NEW"type" => $type"priority" => Issue::$PRIORITY_ERROR])) ? [
  415.             "value" => $value,
  416.             "label" => $label,
  417.             "alert" => true,
  418.             "link" => $this->generateUrl_GenericSearchQuery(["status" => Issue::STATUS_NEW"type" => $type"priority" => Issue::$PRIORITY_ERROR]),
  419.         ] : false;
  420.     }
  421.     private function getInfoLinkSubPanelIfOlderThan($type$createdAt)
  422.     {
  423.         return $this->repoIssue->countBy(["priority" => Issue::$PRIORITY_INFO"type" => $type"createdAt>=" => $createdAt]) ? [
  424.             "label" => "show.action",
  425.             "link" => $this->generateUrl_ShowWarningList($type),
  426.         ] : false;
  427.     }
  428.     private function getCountSinceLastUpdateForBrandSubPanel($type$label)
  429.     {
  430.         $lastImport $this->repoJRNLog->findLastRegistrationDateByBrand($type);
  431.         return [
  432.             "value" => $this->repoJRNLog->countByBrandFromDate($type$lastImport),
  433.             "label" => $label,
  434.             "date" => $lastImport
  435.         ];
  436.     }
  437.     private function getNewSapPersonAlert($personType$label)
  438.     {
  439.         return $this->repoIssue->countBy(["type" => $personType"status" => Issue::STATUS_NEW"priority" => Issue::$PRIORITY_ERROR]) ? [
  440.             "label" => $label,
  441.             "link" => $this->generateUrl_GenericSearchQuery(["type" => $personType]),
  442.             "alert" => true,
  443.         ] : false;
  444.     }
  445.     private function getNewIssueAlert($type$lastCreateDateImport)
  446.     {
  447.         return $this->repoIssue->countBy(["type" => $type"status" => Issue::STATUS_NEW"priority" => Issue::$PRIORITY_ERROR"createdAt>=" => $lastCreateDateImport]) ? [
  448.             "label" => "Alert!",
  449.             "link" => $this->generateUrl_GenericSearchQuery(["type" => $type"status" => Issue::STATUS_NEW])
  450.         ] : false;
  451.     }
  452.     //endregion
  453.     private function formatDate($date)
  454.     {
  455.         return $date $date->format("d/m/Y H:i:s") : '';
  456.     }
  457.     /** @Route("/testsecure", name="testsecure") */
  458.     public function testAction()
  459.     {
  460.         return new Response('
  461.             <<!DOCTYPE html>
  462.             <html>
  463.             <head>
  464.                 <title>IRIS</title>
  465.             </head>
  466.             <body>
  467.                 <h1>This resource is secured</h1>
  468.                 <p>You are: </p>' print_r($this->getUser(), true) . '
  469.             </body>
  470.             </html>
  471.             ');
  472.     }
  473.     /**
  474.      * @Route("/login", name="login")
  475.      */
  476.     public function loginAction(Request $request)
  477.     {
  478.         // KEEP LOGIN BACKDOOR
  479.         // if (($this->getParameter('kernel.environment') == 'qua' ||
  480.         //         $this->getParameter('kernel.environment') == 'prod' ||
  481.         //         $this->getUser() instanceof User) &&
  482.         //     strpos($request->getUri(), 'coolinternal.it') === false
  483.         // ) {
  484.         //     return $this->redirectToRoute('homepage');
  485.         // }
  486.         $error $this->authenticationUtils->getLastAuthenticationError();
  487.         $lastUsername $this->authenticationUtils->getLastUsername();
  488.         return $this->render('login.html.twig', ['last_username' => $lastUsername'error' => $error]);
  489.     }
  490.     /**
  491.      * @Route("/logout", name="logout")
  492.      */
  493.     public function logoutAction()
  494.     {
  495.         return;
  496.     }
  497.     /**
  498.      * @Route("/settings", name="settings")
  499.      * @param Request $request
  500.      * @return Response
  501.      */
  502.     public function settingsAction(Request $request)
  503.     {
  504.         $user $this->getUser();
  505.         $form $this->createPrinterForm($user);
  506.         $form->handleRequest($request);
  507.         if ($form->isSubmitted() && $form->isValid()) {
  508.             $this->get('session')->getFlashBag()->set('success'$this->translator->trans('batch.success'));
  509.             $em $this->em;
  510.             $em->flush();
  511.         }
  512.         return $this->render('Default/settings.html.twig', [
  513.             'base_dir' => realpath($this->kernel->getProjectDir() . '/..'),
  514.             'form' => $form->createView()
  515.         ]);
  516.     }
  517.     private function createPrinterForm($user)
  518.     {
  519.         return $this->createFormBuilder($user)
  520.             ->add('printer'PrintersChoiceType::class, ['expanded' => true'label' => 'printer.label'])
  521.             ->add('send'SubmitType::class, ['label' => 'printer.save'])
  522.             ->getForm();
  523.     }
  524. }