src/Controller/RackController.php line 392

Open in your IDE?
  1. <?php
  2. namespace App\Controller;
  3. use App\Entity\EquipmentSpecific;
  4. use App\Entity\InterfaceGeneric;
  5. use App\Entity\InterfaceSpecific;
  6. use App\Entity\Rack;
  7. use App\Entity\Room;
  8. use App\Entity\Trunk;
  9. use App\Entity\TrunkCableFiber;
  10. use App\Entity\TrunkExtension;
  11. use Symfony\Component\Routing\Annotation\Route;
  12. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  13. use Symfony\Component\HttpFoundation\Request;
  14. use Sensio\Bundle\FrameworkExtraBundle\Configuration\Security;
  15. use Pagerfanta\Pagerfanta;
  16. // use Pagerfanta\Adapter\DoctrineORMAdapter;
  17. use Symfony\Contracts\Translation\TranslatorInterface;
  18. use Sensio\Bundle\FrameworkExtraBundle\Configuration\IsGranted;
  19. use App\Form\RackForm;
  20. class RackController  extends AbstractController
  21. {
  22.     /**
  23.      * @Route("/settings/location/rack", name="rack")
  24.      */
  25.     public function indexAction(Request $requestTranslatorInterface $translator)
  26.   {
  27.         $user $this->getUser();
  28.         $rack = new Rack();
  29.         $errors = [];
  30.         $form $this->createForm(RackForm::class, $rack);
  31.         $form->handleRequest($request);
  32.         if ($form->isSubmitted() && $user->hasRole("ROLE_SUPER_ADMIN")) {
  33.             if($form->isValid()){
  34.                 $rack $form->getData();
  35.                 $em $this->getDoctrine()->getManager();
  36.                 $em->persist($rack);
  37.                 $em->flush();
  38.                 return $this->redirectToRoute('rack');
  39.             }
  40.             $validator $this->get('validator');
  41.             $errors $validator->validate($rack);
  42.         }
  43.         $list $this->getDoctrine()->getRepository(Rack::class)->findAll();
  44.         return $this->render('location/rack.html.twig', [
  45.             'action' => 'insert',
  46.             'page_title' => $translator->trans('Racks'),
  47.             'box_title' => '<i class="fa fa-plus-circle fa-fw"></i> '.$translator->trans('Add new'),
  48.             'path_default' => 'rack',
  49.             'path_update' => 'rack_update',
  50.             'path_delete' => 'rack_delete',
  51.             'form' => $form->createView(),
  52.             'list' => $list,
  53.             'errors' => $errors
  54.         ]);
  55.     }
  56.     /**
  57.      * @Route("/settings/location/rack/edit/{id}", name="rack_update")
  58.      */
  59.     public function updateAction(Request $requestRack $rackTranslatorInterface $translator)
  60.   {
  61.         $user $this->getUser();
  62.         $errors = [];
  63.         $form $this->createForm(RackForm::class, $rack);
  64.         $form->handleRequest($request);
  65.         if ($form->isSubmitted() && $user->hasRole("ROLE_SUPER_ADMIN")) {
  66.             if($form->isValid()){
  67.                 $this->getDoctrine()->getManager()->flush();
  68.                 return $this->redirectToRoute('rack');
  69.             }
  70.             $validator $this->get('validator');
  71.             $errors $validator->validate($rack);
  72.             $this->getDoctrine()->getManager()->detach($rack);
  73.         }
  74.         $equipmentSpecific $this->getDoctrine()->getRepository(EquipmentSpecific::class)->findBy(["rack"=>$rack"isModule"=>false]);
  75.         //MODIFIED ON 14/02/2020
  76.         $racks $this->getDoctrine()->getRepository(Rack::class)->findBy(["room"=>$rack->getRoom()], ["title"=>"ASC"]);
  77.         usort($racks, function ($a$b) {
  78.             if($a && $b){
  79.                 return strnatcmp($a->getTitle(), $b->getTitle());
  80.             }
  81.             else return 1;
  82.         });
  83.         return $this->render('location/rack_view.html.twig', [
  84.             'action' => 'update',
  85.             'page_title' => $translator->trans('Racks'),
  86.             'box_title' => '<i class="fa fa-edit fa-fw"></i> '.$translator->trans('Edit'),
  87.             'path_default' => 'rack',
  88.             'path_update' => 'rack_update',
  89.             'path_delete' => 'rack_delete',
  90.             'form' => $form->createView(),
  91.             'rack' => $rack,
  92.             'equipmentSpecific' => $equipmentSpecific,
  93.             "racks" => $racks,
  94.             'errors' => $errors
  95.         ]);
  96.     }
  97.     /**
  98.      * @IsGranted("ROLE_SUPER_ADMIN")
  99.      * @Route("/settings/location/rack/delete/{id}", name="rack_delete")
  100.      */
  101.     public function deleteAction($idTranslatorInterface $translator)
  102.   {
  103.         $em $this->getDoctrine()->getManager();
  104.         $rack $em->getRepository(Rack::class)->find($id);
  105.         $msgError null;
  106.         // find racks in usage
  107.         $eq $em->getRepository(EquipmentSpecific::class)->findByRack($rack);
  108.         if (!$eq){
  109.             $em->remove($rack);
  110.             $em->flush();
  111.         }
  112.         else {
  113.           $msgError $translator->trans('deleteError');
  114.           $this->addFlash(
  115.               'error',
  116.               $msgError
  117.           );
  118.        }
  119.         return $this->redirectToRoute('rack');
  120.     }
  121.     /**
  122.      * @Route("/rack/usage/item/{id}", name="rack_usage")
  123.      */
  124.     public function usageFiberRacksAction($idTranslatorInterface $translator)
  125.   {
  126.         $em $this->getDoctrine()->getManager();
  127.         $rack $em->getRepository(Rack::class)->find($id);
  128.         $equipmentSpecificList $this->getDoctrine()->getRepository(EquipmentSpecific::class)->findBy(["rack"=>$rack"isModule"=>false]);
  129.         // var_dump($equipmentSpecificList);
  130.         $eqList = [];
  131.         foreach ($equipmentSpecificList as $equipment){
  132.             $eq['equipmentSpecificName'] = $equipment->getEquipmentSpecificName();
  133.             $eq['equipmentGenericTitle'] = $equipment->getEquipmentGeneric()->getTitle();
  134.             $eq["modules"] = [];
  135.             $eq["slots"] = [];
  136.             if ($equipment->isModulaire()) {
  137.               foreach ($equipment->getSlotModulaire() as $slot) {
  138.                 $module $slot->getModule();
  139.                 if ($module) {
  140.                   $moduleTemp = array("equipmentSpecificName" => $module->getEquipmentSpecificName(),
  141.                                             "equipmentGenericTitle" => $module->getEquipmentGeneric()->getTitle()
  142.                                           );
  143.                   $moduleTemp["interfaces"] = [];
  144.                   $interfaces $module->getInterfaceSpecific();
  145.                   foreach ($interfaces as $interface){
  146.                       $trunks = [];
  147.                       $ports $interface->getPort();
  148.                       $nbPortLibreLink count($ports);
  149.                       $nbPortLibreTrunk count($ports);
  150.                       //$trunk = new Trunk();
  151.                       foreach ($ports as $port){
  152.                           if($port->getLink()){
  153.                               $nbPortLibreLink--;
  154.                           }
  155.                           $tcfA $this->getDoctrine()->getRepository(TrunkCableFiber::class)->findOneByPortA($port);
  156.                           $tcfB $this->getDoctrine()->getRepository(TrunkCableFiber::class)->findOneByPortB($port);
  157.                           $tExt $this->getDoctrine()->getRepository(TrunkExtension::class)->findOneByPortB($port);
  158.                           if ($tcfA){
  159.                               $nbPortLibreTrunk--;
  160.                               $trunk $tcfA->getTrunk();
  161.                               if (!in_array($trunk$trunks)){
  162.                                   $trunks[] = $trunk;
  163.                               }
  164.                           }
  165.                           if ($tcfB){
  166.                               $nbPortLibreTrunk--;
  167.                               $trunk $tcfB->getTrunk();
  168.                               if (!in_array($trunk$trunks)){
  169.                                   $trunks[] = $trunk;
  170.                               }
  171.                           }
  172.                           if ($tExt){
  173.                               $nbPortLibreTrunk--;
  174.                               $tcf $tExt->getTrunkCableFiber();
  175.                               $trunk $tcf->getTrunk();
  176.                               if (!in_array($trunk$trunks)){
  177.                                   $trunks[] = $trunk;
  178.                               }
  179.                           }
  180.                       }
  181.                       $moduleTemp["interfaces"][]= [
  182.                           'interfaceNumber' => $interface->getInterfaceGeneric()->getInterfaceNumber(),
  183.                           'trunks' => $trunks,
  184.                           'nbPortLibreLink'=> $nbPortLibreLink,
  185.                           'nbPortLibreTrunk'=> $nbPortLibreTrunk
  186.                       ];
  187.                   }
  188.                   $eq["slots"][] = ["slotNumber"=>$slot->getSlotNumber(), "module"=>$moduleTemp];
  189.                 }
  190.                 else {
  191.                   $eq["slots"][] = ["slotNumber"=>$slot->getSlotNumber(), "module"=>null];
  192.                 }
  193.               }
  194.               // foreach ($equipment->getModules() as $module) {
  195.               //   $moduleTemp = array("equipmentSpecificName" => $module->getEquipmentSpecificName(),
  196.               //                             "equipmentGenericTitle" => $module->getEquipmentGeneric()->getTitle()
  197.               //                           );
  198.               //   $moduleTemp["interfaces"] = [];
  199.               //   $interfaces = $module->getInterfaceSpecific();
  200.               //   foreach ($interfaces as $interface){
  201.               //
  202.               //
  203.               //       $trunks = [];
  204.               //
  205.               //       $ports = $interface->getPort();
  206.               //
  207.               //       //$trunk = new Trunk();
  208.               //
  209.               //       foreach ($ports as $port){
  210.               //
  211.               //           $tcfA = $this->getDoctrine()->getRepository(TrunkCableFiber::class)->findOneByPortA($port);
  212.               //           $tcfB = $this->getDoctrine()->getRepository(TrunkCableFiber::class)->findOneByPortB($port);
  213.               //           $tExt = $this->getDoctrine()->getRepository(TrunkExtension::class)->findOneByPortB($port);
  214.               //
  215.               //           if ($tcfA){
  216.               //               $trunk = $tcfA->getTrunk();
  217.               //               if (!in_array($trunk, $trunks)){
  218.               //                   $trunks[] = $trunk;
  219.               //               }
  220.               //           }
  221.               //
  222.               //           if ($tcfB){
  223.               //               $trunk = $tcfB->getTrunk();
  224.               //               if (!in_array($trunk, $trunks)){
  225.               //                   $trunks[] = $trunk;
  226.               //               }
  227.               //           }
  228.               //
  229.               //           if ($tExt){
  230.               //               $tcf = $tExt->getTrunkCableFiber();
  231.               //               $trunk = $tcf->getTrunk();
  232.               //               if (!in_array($trunk, $trunks)){
  233.               //                   $trunks[] = $trunk;
  234.               //               }
  235.               //           }
  236.               //
  237.               //       }
  238.               //       $moduleTemp["interfaces"][]= [
  239.               //           'interfaceNumber' => $interface->getInterfaceGeneric()->getInterfaceNumber(),
  240.               //           'trunks' => $trunks
  241.               //       ];
  242.               //   }
  243.               //   $eq["modules"][] = $moduleTemp;
  244.               //
  245.               // }
  246.             }
  247.             else {
  248.               $interfaces $equipment->getInterfaceSpecific();
  249.               $eq['interfaces'] = [];
  250.               foreach ($interfaces as $interface){
  251.                   $trunks = [];
  252.                   $ports $interface->getPort();
  253.                   $nbPortLibreLink count($ports);
  254.                   $nbPortLibreTrunk count($ports);
  255.                   //$trunk = new Trunk();
  256.                   foreach ($ports as $port){
  257.                       if($port->getLink()){
  258.                           $nbPortLibreLink--;
  259.                       }
  260.                       $tcfA $this->getDoctrine()->getRepository(TrunkCableFiber::class)->findOneByPortA($port);
  261.                       $tcfB $this->getDoctrine()->getRepository(TrunkCableFiber::class)->findOneByPortB($port);
  262.                       $tExt $this->getDoctrine()->getRepository(TrunkExtension::class)->findOneByPortB($port);
  263.                       if ($tcfA){
  264.                           $nbPortLibreTrunk--;
  265.                           $trunk $tcfA->getTrunk();
  266.                           if (!in_array($trunk$trunks)){
  267.                               $trunks[] = $trunk;
  268.                           }
  269.                       }
  270.                       if ($tcfB){
  271.                           $nbPortLibreTrunk--;
  272.                           $trunk $tcfB->getTrunk();
  273.                           if (!in_array($trunk$trunks)){
  274.                               $trunks[] = $trunk;
  275.                           }
  276.                       }
  277.                       if ($tExt){
  278.                           $nbPortLibreTrunk--;
  279.                           $tcf $tExt->getTrunkCableFiber();
  280.                           $trunk $tcf->getTrunk();
  281.                           if (!in_array($trunk$trunks)){
  282.                               $trunks[] = $trunk;
  283.                           }
  284.                       }
  285.                   }
  286.                   $eq['interfaces'][]=[
  287.                       'interfaceNumber' => $interface->getInterfaceGeneric()->getInterfaceNumber(),
  288.                       'trunks' => $trunks,
  289.                       'nbPortLibreLink'=> $nbPortLibreLink,
  290.                       'nbPortLibreTrunk'=> $nbPortLibreTrunk
  291.                   ];
  292.                   /*if (isset($trunk)){
  293.                       $eq['interfaces'][]=[
  294.                           'interfaceNumber' => $interface->getInterfaceGeneric()->getInterfaceNumber(),
  295.                           'trunkID' => $trunk->getTrunkID(),
  296.                           'trunk_id' => $trunk->getId()
  297.                       ];
  298.                   } else {
  299.                       $eq['interfaces'][]=[
  300.                           'interfaceNumber' => $interface->getInterfaceGeneric()->getInterfaceNumber(),
  301.                           'trunkID' => '',
  302.                           'trunk_id' => ''
  303.                       ];
  304.                   }*/
  305.               }
  306.             }
  307.             $eqList[] = $eq;
  308.         }
  309.         return $this->render('overview/rack_usage.html.twig', [
  310.             'action' => 'list',
  311.             'page_title' => $translator->trans('Rack Usage'),
  312.             'rack' => $rack,
  313.             'equipmentSpecific' => $eqList,
  314.         ]);
  315.     }
  316.     /**
  317.      * @Route("/rack/overview/list", name="rack_overview_list")
  318.      */
  319.     public function overviewRacksListAction(Request $requestTranslatorInterface $translator)
  320.   {
  321.         $list $this->getDoctrine()->getRepository(Rack::class)->findAll();
  322.         // $em = $this->getDoctrine()->getManager();
  323.         // $queryBuilder = $em->createQueryBuilder()
  324.         // ->select('eqs')
  325.         // ->from('App\Entity\Rack', 'eqs')
  326.         // ->orderBy("eqs.title", "ASC");
  327.         // $adapter = new DoctrineORMAdapter($queryBuilder);
  328.         // $pagerfanta = new Pagerfanta($adapter);
  329.         // $pageLength = $request->query->get("pageLength", $this->getParameter("rack.maxPerPage"));
  330.         // if ($pageLength == "Tout") {
  331.         //   $qb = $em->createQueryBuilder()
  332.         //   ->select('COUNT(eqs.id)')
  333.         //   ->from('App\Entity\Rack', 'eqs')
  334.         //   ->orderBy("eqs.title", "ASC");
  335.         //
  336.         //   $count = $qb->getQuery()->getSingleScalarResult();
  337.         //   $pagerfanta->setMaxPerPage($count); // 10 by default
  338.         // }
  339.         // else {
  340.         //   $pagerfanta->setMaxPerPage($pageLength); // 10 by default
  341.         // }
  342.         // $page = $request->query->get("page", 1);
  343.         // $pagerfanta->setCurrentPage($page);
  344.         // foreach ($list as $item){
  345.         //
  346.         //     $title = $item->getTitle();
  347.         //     if ( strtolower(substr($title, 0, 1)) == 'f' ){
  348.         //         $item->isFiber = 1;
  349.         //     } else {
  350.         //         $item->isFiber = 0;
  351.         //     }
  352.         //
  353.         // }
  354.         return $this->render('overview/rack_list.html.twig', [
  355.             'action' => 'insert',
  356.             'page_title' => $translator->trans('Rack Overview'),
  357.             'list' => $list
  358.             // 'my_pager' => $pagerfanta,
  359.             // 'pageLength' => $pageLength,
  360.         ]);
  361.     }
  362.     /**
  363.      * @Route("/rack/overview/item/{id}", name="rack_overview")
  364.      */
  365.     public function overviewRacksAction($idTranslatorInterface $translator)
  366.   {
  367.         $em $this->getDoctrine()->getManager();
  368.         $rack $em->getRepository(Rack::class)->find($id);
  369.         $equipmentSpecific $this->getDoctrine()->getRepository(EquipmentSpecific::class)->findBy(["rack"=>$rack"isModule"=>false]);
  370.         //MODIFIED ON 14/02/2020
  371.         $racks $this->getDoctrine()->getRepository(Rack::class)->findBy(["room"=>$rack->getRoom()], ["title"=>"ASC"]);
  372.         usort($racks, function ($a$b) {
  373.             if($a && $b){
  374.                 return strnatcmp($a->getTitle(), $b->getTitle());
  375.             }
  376.             else return 1;
  377.         });
  378.         return $this->render('overview/rack_view.html.twig', [
  379.             'action' => 'list',
  380.             'page_title' => $translator->trans('Rack View'),
  381.             'rack' => $rack,
  382.             'equipmentSpecific' => $equipmentSpecific,
  383.             "racks" => $racks
  384.         ]);
  385.     }
  386.     /**
  387.      * @return string
  388.      */
  389.     private function generateUniqueFileName()
  390.     {
  391.         // md5() reduces the similarity of the file names generated by
  392.         // uniqid(), which is based on timestamps
  393.         return md5(uniqid());
  394.     }
  395. }