src/Controller/DefaultController.php line 74

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