src/Controller/EquipmentGenericController.php line 1458

Open in your IDE?
  1. <?php
  2. namespace App\Controller;
  3. use Psr\Log\LoggerInterface;
  4. use App\Entity\EquipmentGeneric;
  5. use App\Entity\EquipmentSpecific;
  6. use App\Entity\InterfaceGeneric;
  7. use App\Entity\InterfaceSpecific;
  8. use App\Entity\Port;
  9. use Symfony\Component\Routing\Annotation\Route;
  10. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  11. use Symfony\Component\HttpFoundation\Request;
  12. use Sensio\Bundle\FrameworkExtraBundle\Configuration\Security;
  13. use Pagerfanta\Pagerfanta;
  14. // use Pagerfanta\Adapter\DoctrineORMAdapter;
  15. use Symfony\Contracts\Translation\TranslatorInterface;
  16. use Sensio\Bundle\FrameworkExtraBundle\Configuration\IsGranted;
  17. class EquipmentGenericController  extends AbstractController
  18. {
  19.     /**
  20.      * @Route("/equipment/generic/create", name="equipment_generic_create")
  21.      */
  22.     public function createAction(Request $requestTranslatorInterface $translator)
  23.     {
  24.         $user $this->getUser();
  25.         // process form
  26.         if ($request->request->has('title') && ($user->hasRole("ROLE_SUPER_ADMIN") || $user->hasRole("ROLE_ADMIN"))) {
  27.             $em $this->getDoctrine()->getManager();
  28.             $eq = new EquipmentGeneric();
  29.             $eq->setTitle($request->request->get('title'));
  30.             $eq->setNumberOfUnits($request->request->get('numberOfUnits'));
  31.             $eq->setNumberOfInterfaces($request->request->get('numberOfInterfaces'));
  32.             $eq->setType($this->getDoctrine()->getRepository('App\Entity\TypeEquipment')->findOneById($request->request->get('typeEquipment')));
  33.             $upload_dir $_SERVER['DOCUMENT_ROOT'] . '/uploads/';
  34.             if (is_uploaded_file($_FILES['frontImage']['tmp_name'])) {
  35.                 // NEW FRONT IMAGE
  36.                 $uploadedImage $_FILES['frontImage'];
  37.                 $file $uploadedImage['tmp_name'];
  38.                 $path_parts pathinfo($uploadedImage['name']);
  39.                 $extension $path_parts['extension'];
  40.                 $fileNameImg md5(uniqid()) . '.' $extension;
  41.                 $fullPathImage $upload_dir $fileNameImg;
  42.                 move_uploaded_file($file$fullPathImage);
  43.                 $eq->setFrontImage($fileNameImg);
  44.             }
  45.             if (is_uploaded_file($_FILES['rearImage']['tmp_name'])) {
  46.                 // NEW REAR IMAGE
  47.                 $uploadedImage $_FILES['rearImage'];
  48.                 $file $uploadedImage['tmp_name'];
  49.                 $path_parts pathinfo($uploadedImage['name']);
  50.                 $extension $path_parts['extension'];
  51.                 $fileNameImg md5(uniqid()) . '.' $extension;
  52.                 $fullPathImage $upload_dir $fileNameImg;
  53.                 move_uploaded_file($file$fullPathImage);
  54.                 $eq->setRearImage($fileNameImg);
  55.             }
  56.             $em->persist($eq);
  57.             $em->flush();
  58.             // store interfaces
  59.             $inter_num $eq->getNumberOfInterfaces();
  60.             for ($i 0$i $inter_num$i++) {
  61.                 $if = new InterfaceGeneric();
  62.                 $if->setEquipmentGeneric($eq);
  63.                 $if->setInterfaceNumber($_POST['interfaceNumber'][$i]);
  64.                 $if->setNumberOfPorts($_POST['numberOfPorts'][$i]);
  65.                 $if->setTypeLink($this->getDoctrine()->getRepository('App\Entity\TypeLink')->findOneById($_POST['typeLink'][$i]));
  66.                 if ($_POST['typeConnector'][$i]) {
  67.                     $if->setTypeConnector($this->getDoctrine()->getRepository('App\Entity\TypeConnector')->findOneById($_POST['typeConnector'][$i]));
  68.                 }
  69.                 $if->setTypeInterconnection($this->getDoctrine()->getRepository('App\Entity\TypeInterconnection')->findOneById($_POST['typeInterconnection'][$i]));
  70.                 $if->setAlias($this->buildAlias($i));
  71.                 $em->persist($if);
  72.                 $em->flush();
  73.             }
  74.             return $this->redirectToRoute('equipment_generic_list');
  75.             // show form
  76.         } else {
  77.             $typeLink $this->getDoctrine()->getRepository('App\Entity\TypeLink')->findAll();
  78.             $typeConnector $this->getDoctrine()->getRepository('App\Entity\TypeConnector')->findAll();
  79.             $typeInterconnection $this->getDoctrine()->getRepository('App\Entity\TypeInterconnection')->findAll();
  80.             $typeEquipments $this->getDoctrine()->getRepository('App\Entity\TypeEquipment')->findAll();
  81.             return $this->render('equipment/generic_create.html.twig', [
  82.                 'action' => 'insert',
  83.                 'page_title' => $translator->trans('Generic Equipment'),
  84.                 'box_title' => '<i class="fa fa-plus-circle fa-fw"></i>' $translator->trans('Add new'),
  85.                 'typeLink' => $typeLink,
  86.                 'typeConnector' => $typeConnector,
  87.                 'typeEquipments' => $typeEquipments,
  88.                 'typeInterconnection' => $typeInterconnection
  89.             ]);
  90.         }
  91.     }
  92.     private function buildAlias(int $i):?string{
  93.         $alias = [];
  94.         $result null;
  95.         if (isset($_POST["port"][$i 1])) {
  96.             for ($j 1$j <= count($_POST["port"][$i 1]); $j++) {
  97.                 if (isset($_POST["port"][$i 1][$j 1])) {
  98.                     $alias[$j] = $_POST["port"][$i 1][$j 1];
  99.                 } else {
  100.                     $alias[$j] = "";
  101.                 }
  102.             }
  103.         }
  104.         if (!empty($alias)) {
  105.             $result json_encode($alias);
  106.         } else {
  107.             if ($_POST['typeLink'][$i] == "3") {
  108.                 for ($j 1$j <= $_POST['numberOfPorts'][$i]; $j++) {                                
  109.                     $alias[$j] = "";
  110.                 }
  111.                 $result json_encode($alias);
  112.             }  
  113.         }
  114.         return $result;
  115.     }
  116.     /**
  117.      * @Route("/equipment/generic/list", name="equipment_generic_list")
  118.      */
  119.     public function listAction(Request $requestTranslatorInterface $translator)
  120.     {
  121.         //modified to exclude chassis module
  122.         $list $this->getDoctrine()->getRepository(EquipmentGeneric::class)->findBy(["isModule" => false"isModulaire" => false"isChassisModule"=> false]);
  123.         // $em = $this->getDoctrine()->getManager();
  124.         // $queryBuilder = $em->createQueryBuilder()
  125.         // ->select('eqg')
  126.         // ->from('App\Entity\EquipmentGeneric', 'eqg')
  127.         // ->where("eqg.isModule = :isModule")
  128.         // ->andWhere("eqg.isModulaire = :isModulaire")
  129.         // ->setParameter("isModule", false)
  130.         // ->setParameter("isModulaire", false)
  131.         // ->orderBy("eqg.title", "ASC");
  132.         // $adapter = new DoctrineORMAdapter($queryBuilder);
  133.         // $pagerfanta = new Pagerfanta($adapter);
  134.         // $pageLength = $request->query->get("pageLength", $this->getParameter("eqg.maxPerPage"));
  135.         // if ($pageLength == "Tout") {
  136.         //   $qb = $em->createQueryBuilder()
  137.         //   ->select('COUNT(eqg.id)')
  138.         //   ->from('App\Entity\EquipmentGeneric', 'eqg')
  139.         //   ->where("eqg.isModule = :isModule")
  140.         //   ->andWhere("eqg.isModulaire = :isModulaire")
  141.         //   ->setParameter("isModule", false)
  142.         //   ->setParameter("isModulaire", false)
  143.         //   ->orderBy("eqg.title", "ASC");
  144.         //
  145.         //   $count = $qb->getQuery()->getSingleScalarResult();
  146.         //   $pagerfanta->setMaxPerPage($count); // 10 by default
  147.         // }
  148.         // else {
  149.         //   $pagerfanta->setMaxPerPage($pageLength); // 10 by default
  150.         // }
  151.         // $page = $request->query->get("page", 1);
  152.         // $pagerfanta->setCurrentPage($page);
  153.         return $this->render('equipment/generic_list.html.twig', [
  154.             'action' => 'list',
  155.             'page_title' => $translator->trans('Generic Equipment'),
  156.             'path_default' => 'equipment_generic_create',
  157.             'path_update' => 'equipment_generic_update',
  158.             'path_delete' => 'equipment_generic_delete',
  159.             'list' => $list,
  160.             // 'my_pager' => $pagerfanta,
  161.             // 'pageLength' => $pageLength,
  162.         ]);
  163.     }
  164.     /**
  165.      * @Route("/equipment/generic/edit/{id}", name="equipment_generic_update")
  166.      */
  167.     public function updateAction(Request $request$idTranslatorInterface $translator)
  168.     {
  169.         $user $this->getUser();
  170.         $em $this->getDoctrine()->getManager();
  171.         $eq $em->getRepository(EquipmentGeneric::class)->find($id);
  172.         $specific $em->getRepository(EquipmentSpecific::class)->findByEquipmentGeneric($eq);
  173.         if ($specific) {
  174.             $inUse 1;
  175.         } else {
  176.             $inUse 0;
  177.         }
  178.         $current_no_interfaces $eq->getNumberOfInterfaces();
  179.         $new_no_interfaces $request->request->get('numberOfInterfaces');
  180.         // process form
  181.         if ($request->request->has('title') && ($user->hasRole("ROLE_SUPER_ADMIN") || $user->hasRole("ROLE_ADMIN"))) {
  182.             $upload_dir $_SERVER['DOCUMENT_ROOT'] . '/uploads/';
  183.             if (is_uploaded_file($_FILES['frontImage']['tmp_name'])) {
  184.                 // DELETE OLD FRONT IMAGE
  185.                 $currentFrontImg $eq->getFrontImage();
  186.                 if ($currentFrontImg) {
  187.                     unlink($upload_dir $currentFrontImg);
  188.                 }
  189.                 // NEW FRONT IMAGE
  190.                 $uploadedImage $_FILES['frontImage'];
  191.                 $file $uploadedImage['tmp_name'];
  192.                 $path_parts pathinfo($uploadedImage['name']);
  193.                 $extension $path_parts['extension'];
  194.                 $fileNameImg md5(uniqid()) . '.' $extension;
  195.                 $fullPathImage $upload_dir $fileNameImg;
  196.                 move_uploaded_file($file$fullPathImage);
  197.                 $eq->setFrontImage($fileNameImg);
  198.             }
  199.             if (is_uploaded_file($_FILES['rearImage']['tmp_name'])) {
  200.                 // DELETE OLD FRONT IMAGE
  201.                 $currentRearImg $eq->getRearImage();
  202.                 if ($currentRearImg) {
  203.                     unlink($upload_dir $currentRearImg);
  204.                 }
  205.                 // NEW REAR IMAGE
  206.                 $uploadedImage $_FILES['rearImage'];
  207.                 $file $uploadedImage['tmp_name'];
  208.                 $path_parts pathinfo($uploadedImage['name']);
  209.                 $extension $path_parts['extension'];
  210.                 $fileNameImg md5(uniqid()) . '.' $extension;
  211.                 $fullPathImage $upload_dir $fileNameImg;
  212.                 move_uploaded_file($file$fullPathImage);
  213.                 $eq->setRearImage($fileNameImg);
  214.             }
  215.             $redirect $request->request->get('redirect');
  216.             if ($specific) {
  217.                 $eq->setTitle($request->request->get('title'));
  218.                 $eq->setType($this->getDoctrine()->getRepository('App\Entity\TypeEquipment')->findOneById($request->request->get('typeEquipment')));
  219.                 if ($new_no_interfaces >= $current_no_interfaces) {
  220.                     $eq->setNumberOfInterfaces($request->request->get('numberOfInterfaces'));
  221.                 }
  222.                 $em->persist($eq);
  223.                 $em->flush();
  224.                 // $error = array('error' => 'title');
  225.                 if ($redirect == 0) {
  226.                     return $this->redirectToRoute('equipment_generic_list');
  227.                     // return $this->redirectToRoute('equipment_generic_list', $error);
  228.                 } else {
  229.                     return $this->redirectToRoute('equipment_generic_interfaces_update', array('id' => $eq->getId()));
  230.                 }
  231.             } else {
  232.                 $eq->setTitle($request->request->get('title'));
  233.                 $eq->setNumberOfUnits($request->request->get('numberOfUnits'));
  234.                 $eq->setNumberOfInterfaces($request->request->get('numberOfInterfaces'));
  235.                 $eq->setType($this->getDoctrine()->getRepository('App\Entity\TypeEquipment')->findOneById($request->request->get('typeEquipment')));
  236.                 // delete generic interfaces
  237.                 if ($new_no_interfaces $current_no_interfaces) {
  238.                     $i 1;
  239.                     $interfaces $eq->getInterfaceGeneric();
  240.                     foreach ($interfaces as $interface) {
  241.                         if ($i $new_no_interfaces) {
  242.                             $em->remove($interface);
  243.                             $em->flush();
  244.                         }
  245.                         $i++;
  246.                     }
  247.                 }
  248.                 $em->persist($eq);
  249.                 $em->flush();
  250.                 if ($redirect == 0) {
  251.                     return $this->redirectToRoute('equipment_generic_list');
  252.                 } else {
  253.                     return $this->redirectToRoute('equipment_generic_interfaces_update', array('id' => $eq->getId()));
  254.                 }
  255.             }
  256.         } else {
  257.             $em $this->getDoctrine()->getManager();
  258.             $eq $em->getRepository(EquipmentGeneric::class)->find($id);
  259.             $typeLink $this->getDoctrine()->getRepository('App\Entity\TypeLink')->findAll();
  260.             $typeConnector $this->getDoctrine()->getRepository('App\Entity\TypeConnector')->findAll();
  261.             $typeInterconnection $this->getDoctrine()->getRepository('App\Entity\TypeInterconnection')->findAll();
  262.             $typeEquipments $this->getDoctrine()->getRepository('App\Entity\TypeEquipment')->findAll();
  263.             return $this->render('equipment/generic_edit.html.twig', [
  264.                 'action' => 'process',
  265.                 'page_title' => $translator->trans('Generic Equipment'),
  266.                 'box_title' => '<i class="fa fa-edit fa-fw"></i> ' $translator->trans('Edit'),
  267.                 'path_process' => 'equipment_generic_update_process',
  268.                 'typeLink' => $typeLink,
  269.                 'typeConnector' => $typeConnector,
  270.                 'typeEquipments' => $typeEquipments,
  271.                 'typeInterconnection' => $typeInterconnection,
  272.                 'eq' => $eq,
  273.                 'inUse' => $inUse
  274.             ]);
  275.         }
  276.     }
  277.     /**
  278.      * @Route("/equipment/generic/interfaces/edit/{id}", name="equipment_generic_interfaces_update")
  279.      */
  280.     public function updateInterfacesAction(Request $requestLoggerInterface $logger$idTranslatorInterface $translator)
  281.     {
  282.         $user $this->getUser();
  283.         $em $this->getDoctrine()->getManager();
  284.         $eq $em->getRepository(EquipmentGeneric::class)->find($id);
  285.         $specific $em->getRepository(EquipmentSpecific::class)->findByEquipmentGeneric($eq);
  286.         $inUse 0;
  287.         if ($specific) {
  288.             $inUse 1;
  289.         } else {
  290.             $inUse 0;
  291.         }
  292.         // process form
  293.         if ($request->request->has('title') && ($user->hasRole("ROLE_SUPER_ADMIN") || $user->hasRole("ROLE_ADMIN"))) {
  294.             $em $this->getDoctrine()->getManager();
  295.             $eq $em->getRepository(EquipmentGeneric::class)->find($request->request->get('id'));
  296.             // find specific in usage
  297.             // $specific = $em->getRepository(EquipmentSpecific::class)->findByEquipmentGeneric($eq);
  298.             // if ($specific){
  299.             //
  300.             //     $interfaces = $this->getDoctrine()->getRepository('App\Entity\InterfaceGeneric')->findByEquipmentGeneric($eq);
  301.             //     $nbIntTemp = count($interfaces);
  302.             //     //$current_interface_no = count($interfaces);
  303.             //     if (isset($_POST['interfaceNumber'])) {
  304.             //       $new_interface_no = count($_POST['interfaceNumber']);
  305.             //
  306.             //
  307.             //       if ($new_interface_no > 0){ // 1
  308.             //
  309.             //           for ($i = 0; $i < $new_interface_no; $i++){
  310.             //
  311.             //
  312.             //               $if = new InterfaceGeneric();
  313.             //
  314.             //               $if->setEquipmentGeneric($eq);
  315.             //               $if->setInterfaceNumber($_POST['interfaceNumber'][$i]);
  316.             //               $if->setNumberOfPorts($_POST['numberOfPorts'][$i]);
  317.             //               $if->setTypeLink($this->getDoctrine()->getRepository('App\Entity\TypeLink')->findOneById($_POST['typeLink'][$i]));
  318.             //               if (isset($_POST['typeConnector']) && isset($_POST['typeConnector'][$i])) {
  319.             //                 $if->setTypeConnector($this->getDoctrine()->getRepository('App\Entity\TypeConnector')->findOneById($_POST['typeConnector'][$i]));
  320.             //               }
  321.             //               $if->setTypeInterconnection($this->getDoctrine()->getRepository('App\Entity\TypeInterconnection')->findOneById($_POST['typeInterconnection'][$i]));
  322.             //
  323.             //               // if ($_POST['typeLink'][$i] == "3") {
  324.             //                 $alias = [];
  325.             //                 if (isset($_POST["port"][$nbIntTemp+1])) {
  326.             //                   for ($j = 1; $j<=count($_POST["port"][$nbIntTemp+1]); $j++){
  327.             //                     if (isset($_POST["port"][$nbIntTemp+1][$j-1])) {
  328.             //                       $alias[$j] = $_POST["port"][$nbIntTemp+1][$j-1];
  329.             //                     }
  330.             //                   }
  331.             //                 }
  332.             //
  333.             //
  334.             //                 if (!empty($alias)) {
  335.             //                     $alias = json_encode($alias);
  336.             //                     $alias = (string)$alias;
  337.             //                 } else {
  338.             //                     $alias = null;
  339.             //                 }
  340.             //
  341.             //                 $if->setAlias($alias);
  342.             //               // }
  343.             //               $em->persist($if);
  344.             //               $em->flush();
  345.             //
  346.             //               foreach ($specific as $eq_specific){
  347.             //
  348.             //                   $interfaceSpecific = new InterfaceSpecific();
  349.             //                   $interfaceSpecific->setEquipmentSpecific($eq_specific);
  350.             //                   $interfaceSpecific->setInterfaceGeneric($if);
  351.             //                   $alias = json_decode($if->getAlias(), true);
  352.             //                   $em->persist($interfaceSpecific);
  353.             //                   $em->flush();
  354.             //
  355.             //                   // create ports
  356.             //                   $numberOfPorts = $if->getNumberOfPorts();
  357.             //                   for ($k=1; $k<=$numberOfPorts; $k++){
  358.             //
  359.             //                       $port = new Port();
  360.             //                       $port->setInterfaceSpecific($interfaceSpecific);
  361.             //                       $port->setOrderNo($k);
  362.             //                       if ($alias) {
  363.             //                         $port->setAlias($alias[$k]);
  364.             //                       }
  365.             //                       $em->persist($port);
  366.             //                       $em->flush();
  367.             //
  368.             //                   }
  369.             //
  370.             //               }
  371.             //
  372.             //           }
  373.             //
  374.             //
  375.             //       }
  376.             //       else {
  377.             //         $error = array('error' => 'title');
  378.             //       }
  379.             //     }
  380.             //     if (strpos($request->query->get('ref'), "module") === 0 ) {
  381.             //
  382.             //       return $this->redirectToRoute('equipment_generic_module_list', $error);
  383.             //     }
  384.             //     else {
  385.             //       return $this->redirectToRoute('equipment_generic_list', $error);
  386.             //     }
  387.             //   }
  388.             //MODIFIED on 11 mars 2019
  389.             // $interfaceTemp = $this->getDoctrine()->getRepository('App\Entity\InterfaceGeneric')->findByEquipmentGeneric($eq);
  390.             // $nbIntTemp = count($interfaceTemp);
  391.             for ($i 0$i count($_POST['interfaceNumber']); $i++) {
  392.                 // var_dump($_POST['interfaceId']);
  393.                 // $logger->info($_POST['interfaceId'][$i]);
  394.                 if (isset($_POST['interfaceId']) && $_POST['interfaceId'][$i]) {
  395.                     $if $this->getDoctrine()->getRepository('App\Entity\InterfaceGeneric')->find($_POST['interfaceId'][$i]);
  396.                     // var_dump($if->getId());
  397.                     // $if->setEquipmentGeneric($eq);
  398.                     $if->setInterfaceNumber($_POST['interfaceNumber'][$i]);
  399.                     $if->setNumberOfPorts($_POST['numberOfPorts'][$i]);
  400.                     $if->setTypeLink($this->getDoctrine()->getRepository('App\Entity\TypeLink')->findOneById($_POST['typeLink'][$i]));
  401.                     if (isset($_POST['typeConnector']) && isset($_POST['typeConnector'][$i])) {
  402.                         $if->setTypeConnector($this->getDoctrine()->getRepository('App\Entity\TypeConnector')->findOneById($_POST['typeConnector'][$i]));
  403.                     }
  404.                     $if->setTypeInterconnection($this->getDoctrine()->getRepository('App\Entity\TypeInterconnection')->findOneById($_POST['typeInterconnection'][$i]));
  405.                     $if->setAlias($this->buildAlias($i));
  406.                     $em->persist($if);
  407.                     $em->flush();
  408.                     foreach ($specific as $eq_specific) {
  409.                         foreach ($eq_specific->getInterfaceSpecific() as $value) {
  410.                             if ($value->getInterfaceGeneric()->getId() == $if->getId()) {
  411.                                 $alias json_decode($if->getAlias(), true);
  412.                                 $k 1;
  413.                                 //ADDED on 11 avril 2019
  414.                                 $portsSpecific $value->getPort();
  415.                                 $nbPortsGeneric $value->getInterfaceGeneric()->getNumberOfPorts();
  416.                                 $nbPortsToAdd $nbPortsGeneric count($portsSpecific);
  417.                                 $portOrderNoInit count($portsSpecific) + 1;
  418.                                 for ($m 0$m $nbPortsToAdd$m++) {
  419.                                     $port = new Port();
  420.                                     $port->setInterfaceSpecific($value);
  421.                                     $port->setOrderNo($portOrderNoInit);
  422.                                     $port->setAlias($alias[$portOrderNoInit++]);
  423.                                     $em->persist($port);
  424.                                     $em->flush();
  425.                                 }
  426.                                 //END ADDED on 11 avril 2019
  427.                                 foreach ($value->getPort() as $p) {
  428.                                     $p->setAlias($alias[$k]);
  429.                                     $k++;
  430.                                     $em->persist($p);
  431.                                     $em->flush();
  432.                                 }
  433.                             }
  434.                         }
  435.                     }
  436.                 } else {
  437.                     $if = new InterfaceGeneric();
  438.                     $if->setEquipmentGeneric($eq);
  439.                     $if->setInterfaceNumber($_POST['interfaceNumber'][$i]);
  440.                     $if->setNumberOfPorts($_POST['numberOfPorts'][$i]);
  441.                     $if->setTypeLink($this->getDoctrine()->getRepository('App\Entity\TypeLink')->findOneById($_POST['typeLink'][$i]));
  442.                     if (isset($_POST['typeConnector']) && isset($_POST['typeConnector'][$i])) {
  443.                         $if->setTypeConnector($this->getDoctrine()->getRepository('App\Entity\TypeConnector')->findOneById($_POST['typeConnector'][$i]));
  444.                     }
  445.                     $if->setTypeInterconnection($this->getDoctrine()->getRepository('App\Entity\TypeInterconnection')->findOneById($_POST['typeInterconnection'][$i]));
  446.                     $if->setAlias($this->buildAlias($i));
  447.                     $em->persist($if);
  448.                     $em->flush();
  449.                     foreach ($specific as $eq_specific) {
  450.                         $interfaceSpecific = new InterfaceSpecific();
  451.                         $interfaceSpecific->setEquipmentSpecific($eq_specific);
  452.                         $interfaceSpecific->setInterfaceGeneric($if);
  453.                         $alias json_decode($if->getAlias(), true);
  454.                         $em->persist($interfaceSpecific);
  455.                         $em->flush();
  456.                         // create ports
  457.                         $numberOfPorts $if->getNumberOfPorts();
  458.                         for ($k 1$k <= $numberOfPorts$k++) {
  459.                             $port = new Port();
  460.                             $port->setInterfaceSpecific($interfaceSpecific);
  461.                             $port->setOrderNo($k);
  462.                             if ($alias) {
  463.                                 $port->setAlias($alias[$k]);
  464.                             }
  465.                             $em->persist($port);
  466.                             $em->flush();
  467.                         }
  468.                     }
  469.                 }
  470.             }
  471.             if (strpos($request->query->get('ref'), "module") === 0) {
  472.                 if (strpos($request->query->get('ref'), "moduleChassis") === 0) {
  473.                     return $this->redirectToRoute('equipment_generic_modulaire_update', array('id' => $eq->getChassisParent()->getId()));
  474.                 } else {
  475.                     return $this->redirectToRoute('equipment_generic_module_list');
  476.                 }
  477.             } else {
  478.                 return $this->redirectToRoute('equipment_generic_list');
  479.             }
  480.             // if (!$specific){
  481.             //
  482.             //     // remove existing interfaces
  483.             //     $interfaces = $this->getDoctrine()->getRepository('App\Entity\InterfaceGeneric')->findByEquipmentGeneric($eq);
  484.             //
  485.             //     foreach ($interfaces as $interface){
  486.             //
  487.             //         $em->remove($interface);
  488.             //         $em->flush();
  489.             //
  490.             //     }
  491.             //
  492.             //     // store interfaces
  493.             //     $inter_num = $eq->getNumberOfInterfaces();
  494.             //     for ($i = 0; $i < $inter_num; $i++){
  495.             //
  496.             //         $if = new InterfaceGeneric();
  497.             //
  498.             //         $if->setEquipmentGeneric($eq);
  499.             //         $if->setInterfaceNumber($_POST['interfaceNumber'][$i]);
  500.             //         $if->setNumberOfPorts($_POST['numberOfPorts'][$i]);
  501.             //         $if->setTypeLink($this->getDoctrine()->getRepository('App\Entity\TypeLink')->findOneById($_POST['typeLink'][$i]));
  502.             //         if (isset($_POST['typeConnector']) && isset($_POST['typeConnector'][$i])) {
  503.             //           $if->setTypeConnector($this->getDoctrine()->getRepository('App\Entity\TypeConnector')->findOneById($_POST['typeConnector'][$i]));
  504.             //         }
  505.             //         $if->setTypeInterconnection($this->getDoctrine()->getRepository('App\Entity\TypeInterconnection')->findOneById($_POST['typeInterconnection'][$i]));
  506.             //         // if ($_POST['typeLink'][$i] == "3") {
  507.             //           $alias = [];
  508.             //
  509.             //           for ($j = 1; $j<=count($_POST["port"][$i+1]); $j++){
  510.             //               $alias[$j] = $_POST["port"][$i+1][$j-1] ? $_POST["port"][$i+1][$j-1] : "";
  511.             //           }
  512.             //           //var_dump($alias);
  513.             //           if (!empty($alias)) {
  514.             //               $alias = json_encode($alias);
  515.             //               $alias = (string)$alias;
  516.             //           } else {
  517.             //               $alias = null;
  518.             //           }
  519.             //
  520.             //           $if->setAlias($alias);
  521.             //         // }
  522.             //         $em->persist($if);
  523.             //         $em->flush();
  524.             //
  525.             //     }
  526.             //     if (strpos($request->query->get('ref'), "module") === 0 ) {
  527.             //
  528.             //       return $this->redirectToRoute('equipment_generic_module_list');
  529.             //     }
  530.             //     else {
  531.             //       return $this->redirectToRoute('equipment_generic_list');
  532.             //     }
  533.             //
  534.             // }
  535.         } else {
  536.             // $em = $this->getDoctrine()->getManager();
  537.             // $eq = $em->getRepository(EquipmentGeneric::class)->find($id);
  538.             $typeLink $this->getDoctrine()->getRepository('App\Entity\TypeLink')->findAll();
  539.             $typeConnector $this->getDoctrine()->getRepository('App\Entity\TypeConnector')->findAll();
  540.             $typeInterconnection $this->getDoctrine()->getRepository('App\Entity\TypeInterconnection')->findAll();
  541.             return $this->render('equipment/generic_edit_interfaces.html.twig', [
  542.                 'action' => 'process',
  543.                 'page_title' => $translator->trans('Generic Equipment Interfaces'),
  544.                 'box_title' => '<i class="fa fa-edit fa-fw"></i> ' $translator->trans('Edit'),
  545.                 'path_process' => 'equipment_generic_update_process',
  546.                 'typeLink' => $typeLink,
  547.                 'typeConnector' => $typeConnector,
  548.                 'typeInterconnection' => $typeInterconnection,
  549.                 'eq' => $eq,
  550.                 'inUse' => $inUse,
  551.                 'ref' => $request->query->get('ref')
  552.             ]);
  553.         }
  554.     }
  555.     /**
  556.      * @Route("/equipment/generic/interfaces/setNports/{id}", name="equipment_generic_interfaces_setNports")
  557.      */
  558.     public function updateInterfacesSetNportsAction(Request $request$idTranslatorInterface $translator)
  559.     {
  560.         $user $this->getUser();
  561.         $em $this->getDoctrine()->getManager();
  562.         $eq $em->getRepository(EquipmentGeneric::class)->find($id);
  563.         $interfaces $this->getDoctrine()->getRepository('App\Entity\InterfaceGeneric')->findByEquipmentGeneric($eq);
  564.         // process form
  565.         if ($request->request->has('title') && ($user->hasRole("ROLE_SUPER_ADMIN") || $user->hasRole("ROLE_ADMIN"))) {
  566.             foreach ($interfaces as $interface) {
  567.                 $intId $interface->getId();
  568.                 $noOfPorts $interface->getNumberOfPorts();
  569.                 $nPorts = [];
  570.                 for ($i 1$i <= $noOfPorts$i++) {
  571.                     if (isset($_POST[$intId '_' $i])) {
  572.                         $nPorts[] = $i;
  573.                     }
  574.                 }
  575.                 if (!empty($nPorts)) {
  576.                     $nPorts json_encode($nPorts);
  577.                     $nPorts = (string)$nPorts;
  578.                 } else {
  579.                     $nPorts null;
  580.                 }
  581.                 $interface->setNPorts($nPorts);
  582.                 $em->persist($interface);
  583.                 $em->flush();
  584.             }
  585.             $error = [];
  586.             if (strpos($request->query->get('ref'), "module") === 0) {
  587.                 if (strpos($request->query->get('ref'), "moduleChassis") === 0) {
  588.                     return $this->redirectToRoute('equipment_generic_modulaire_update', array('id' => $eq->getChassisParent()->getId()));
  589.                 } else {
  590.                     return $this->redirectToRoute('equipment_generic_module_list'$error);
  591.                 }
  592.             } else {
  593.                 return $this->redirectToRoute('equipment_generic_list'$error);
  594.             }
  595.         } else {
  596.             foreach ($interfaces as $interface) {
  597.                 $nPorts $interface->getNPorts();
  598.                 if ($nPorts) {
  599.                     $nPorts json_decode($interface->getNPorts());
  600.                 } else {
  601.                     $nPorts null;
  602.                 }
  603.                 $interface->setNPorts($nPorts);
  604.             }
  605.             $typeLink $this->getDoctrine()->getRepository('App\Entity\TypeLink')->findAll();
  606.             $typeConnector $this->getDoctrine()->getRepository('App\Entity\TypeConnector')->findAll();
  607.             $typeInterconnection $this->getDoctrine()->getRepository('App\Entity\TypeInterconnection')->findAll();
  608.             return $this->render('equipment/generic_edit_interfaces_setNports.html.twig', [
  609.                 'action' => 'process',
  610.                 'page_title' => $translator->trans('Generic Equipment Interfaces'),
  611.                 'box_title' => '<i class="fa fa-edit fa-fw"></i> ' $translator->trans('Edit'),
  612.                 'path_process' => 'equipment_generic_update_process',
  613.                 'typeLink' => $typeLink,
  614.                 'typeConnector' => $typeConnector,
  615.                 'typeInterconnection' => $typeInterconnection,
  616.                 'eq' => $eq,
  617.                 'interfaces' => $interfaces,
  618.                 'ref' => $request->query->get('ref')
  619.             ]);
  620.         }
  621.     }
  622.     /**
  623.      * @Route("/equipment/generic/interfaces/delete/{id}", name="equipment_generic_interfaces_delete")
  624.      */
  625.     public function deleteInterfacesAction(Request $requestLoggerInterface $logger$idTranslatorInterface $translator)
  626.     {
  627.         //return $this->json('processing...');
  628.         $user $this->getUser();
  629.         $em $this->getDoctrine()->getManager();
  630.         $eq $em->getRepository(EquipmentGeneric::class)->find($id);
  631.         // process form
  632.         if ($request->request->has('action') && ($user->hasRole("ROLE_SUPER_ADMIN") || $user->hasRole("ROLE_ADMIN"))) {
  633.             $em $this->getDoctrine()->getManager();
  634.             $eq $em->getRepository(EquipmentGeneric::class)->find($request->request->get('id'));
  635.             $numberOfInterfaces $eq->getNumberOfInterfaces();
  636.             $interfacesGeneric $eq->getInterfaceGeneric();
  637.             foreach ($interfacesGeneric as $interfaceGeneric) {
  638.                 $id $interfaceGeneric->getId();
  639.                 if (isset($_POST['interface_' $id])) {
  640.                     $eq->removeInterfaceGeneric($interfaceGeneric);
  641.                     $numberOfInterfaces--;
  642.                 }
  643.             }
  644.             $eq->setNumberOfInterfaces($numberOfInterfaces);
  645.             $em->persist($eq);
  646.             $em->flush();
  647.             if (strpos($request->query->get('ref'), "module") === 0) {
  648.                 return $this->redirectToRoute('equipment_generic_module_list');
  649.             } else {
  650.                 return $this->redirectToRoute('equipment_generic_list');
  651.             }
  652.         } else {
  653.             $em $this->getDoctrine()->getManager();
  654.             $eq $em->getRepository(EquipmentGeneric::class)->find($id);
  655.             if($eq != null) {
  656.                 $interfacesGeneric $eq->getInterfaceGeneric();
  657.                 foreach ($interfacesGeneric as $interfaceGeneric) {
  658.     
  659.                     $interfaceGeneric->inUse 0;
  660.     
  661.                     $interfacesSpecific $interfaceGeneric->getInterfaceSpecific();
  662.                     foreach ($interfacesSpecific as $interfaceSpecific) {
  663.                         if ($interfaceGeneric->inUse == 1) {
  664.                             break;
  665.                         }
  666.                         $ports $interfaceSpecific->getPort();
  667.     
  668.                         foreach ($ports as $port) {
  669.                             $logger->info($port->getId());
  670.                             $inUse $this->isPortInUse($port);
  671.                             if ($inUse) {
  672.                                 $logger->info("inuse=1");
  673.                                 $interfaceGeneric->inUse 1;
  674.                                 break;
  675.                             }
  676.                             //port externe
  677.                             else {
  678.                                 if ($port->getInterfaceSpecificPortExterne() != null) {
  679.                                     $ports $port->getInterfaceSpecificPortExterne()->getPort();
  680.     
  681.                                     foreach ($ports as $port) {
  682.                                         $logger->info("Port externe :");
  683.                                         $logger->info($port->getId());
  684.                                         $inUse $this->isPortInUse($port);
  685.                                         if ($inUse) {
  686.                                             $logger->info("inuse=1");
  687.                                             $interfaceGeneric->inUse 1;
  688.                                             break;
  689.                                         }
  690.                                     }
  691.                                 }
  692.                                 if ($port->getPortMpo() != null && $port->getPortMpo()->getInterfaceSpecificPortExterne() != null) {
  693.                                     $ports $port->getPortMpo()->getInterfaceSpecificPortExterne()->getPort();
  694.     
  695.                                     foreach ($ports as $port) {
  696.                                         $logger->info("Port MPO :");
  697.                                         $logger->info($port->getId());
  698.                                         $inUse $this->isPortInUse($port);
  699.                                         if ($inUse) {
  700.                                             $logger->info("inuse=1");
  701.                                             $interfaceGeneric->inUse 1;
  702.                                             break;
  703.                                         }
  704.                                     }
  705.                                 }
  706.                             }
  707.                         }
  708.                     }
  709.                 }
  710.             }
  711.             
  712.             // foreach ($interfacesGeneric as $interfaceGeneric){
  713.             //     $interfaceGeneric->inUse = 0;
  714.             //     $interfacesSpecific = $interfaceGeneric->getInterfaceSpecific();
  715.             //     foreach ($interfacesSpecific as $interfaceSpecific) {
  716.             //         $ports = $interfaceSpecific->getPort();
  717.             //         foreach ($ports as $port){
  718.             //             $usedAtrunk = $this->getDoctrine()->getRepository('App\Entity\TrunkCableFiber')->findOneByPortA($port);
  719.             //             $usedBtrunk = $this->getDoctrine()->getRepository('App\Entity\TrunkCableFiber')->findOneByPortB($port);
  720.             //             $usedExt = $this->getDoctrine()->getRepository('App\Entity\TrunkExtension')->findOneByPortB($port);
  721.             //             $usedALink = $this->getDoctrine()->getRepository('App\Entity\LinkExtension')->findOneByPortA($port);
  722.             //             $usedBLink = $this->getDoctrine()->getRepository('App\Entity\LinkExtension')->findOneByPortB($port);
  723.             //             if ($usedAtrunk || $usedBtrunk || $usedExt || $usedALink || $usedBLink){
  724.             //                 $interfaceGeneric->inUse = 1;
  725.             //             }
  726.             //         }
  727.             //     }
  728.             // }
  729.             return $this->render('equipment/generic_delete_interfaces.html.twig', [
  730.                 'page_title' => $translator->trans('Generic Equipment Interfaces'),
  731.                 'box_title' => '<i class="fa fa-trash fa-fw"></i> Delete',
  732.                 'eq' => $eq,
  733.                 'ref' => $request->query->get('ref')
  734.             ]);
  735.         }
  736.     }
  737.     private function isPortInUse($port)
  738.     {
  739.         $usedAtrunk $this->getDoctrine()->getRepository('App\Entity\TrunkCableFiber')->findOneByPortA($port);
  740.         $usedBtrunk $this->getDoctrine()->getRepository('App\Entity\TrunkCableFiber')->findOneByPortB($port);
  741.         $usedExt $this->getDoctrine()->getRepository('App\Entity\TrunkExtension')->findOneByPortB($port);
  742.         $usedInLink $this->getDoctrine()->getRepository('App\Entity\ExtensionOrder')->findOneByPort($port);
  743.         // $usedALink = $this->getDoctrine()->getRepository('App\Entity\LinkExtension')->findOneByPortA($port);
  744.         // if ($usedALink) {
  745.         //     $logger->info("usedALink :" . $usedALink->getId());
  746.         // }
  747.         // $usedBLink = $this->getDoctrine()->getRepository('App\Entity\LinkExtension')->findOneByPortB($port);
  748.         // if ($usedBLink) {
  749.         //     $logger->info("usedBLink :" . $usedBLink->getId());
  750.         // }
  751.         if ($usedAtrunk || $usedBtrunk || $usedExt || $usedInLink) {
  752.             return true;
  753.         }
  754.         return false;
  755.     }
  756.     /**
  757.      * @IsGranted("ROLE_CRUD")
  758.      * @Route("/equipment/generic/delete/{id}", name="equipment_generic_delete")
  759.      */
  760.     public function deleteAction(Request $request$idTranslatorInterface $translator)
  761.     {
  762.         $em $this->getDoctrine()->getManager();
  763.         $equipmentGen $em->getRepository(EquipmentGeneric::class)->find($id);
  764.         // find in usage
  765.         $specific $em->getRepository(EquipmentSpecific::class)->findByEquipmentGeneric($equipmentGen);
  766.         if (!$specific) {
  767.             $conn $em->getConnection();
  768.             $sql "update equipment_generic set chassis_module_id=null where id = " $equipmentGen->getId();
  769.             // $extIds = [$temp[0]->getExtremityA()->getId(), $temp[0]->getExtremityB()->getId()];
  770.             $stmt $conn->prepare($sql);
  771.             $stmt->execute();
  772.             $sql "delete from equipment_modulaire where module_id=" $equipmentGen->getId() . " or parent_id=" $equipmentGen->getId();
  773.             $stmt $conn->prepare($sql);
  774.             $stmt->execute();
  775.             $em->remove($equipmentGen);
  776.             $em->flush();
  777.             $error = [];
  778.         } else {
  779.             $error = array('error' => 'usage');
  780.         }
  781.         if (strpos($request->headers->get('referer'), "module") == true) {
  782.             return $this->redirectToRoute('equipment_generic_module_list'$error);
  783.         } elseif (strpos($request->headers->get('referer'), "modulaire") == true) {
  784.             return $this->redirectToRoute('equipment_generic_modulaire_list'$error);
  785.         } else {
  786.             return $this->redirectToRoute('equipment_generic_list'$error);
  787.         }
  788.     }
  789.     /**
  790.      * @Route("/equipment/generic/module/create", name="equipment_generic_module_create")
  791.      */
  792.     public function createModuleAction(Request $requestTranslatorInterface $translator)
  793.     {
  794.         $user $this->getUser();
  795.         // process form
  796.         if ($request->request->has('title') && ($user->hasRole("ROLE_SUPER_ADMIN") || $user->hasRole("ROLE_ADMIN"))) {
  797.             // var_dump($request->request->all());
  798.             $em $this->getDoctrine()->getManager();
  799.             $eq = new EquipmentGeneric();
  800.             $eq->setTitle($request->request->get('title'));
  801.             $eq->setNumberOfUnits($request->request->get('numberOfUnits'));
  802.             $eq->setNumberOfInterfaces($request->request->get('numberOfInterfaces'));
  803.             $eq->setIsModule(true);
  804.             $eq->setType($this->getDoctrine()->getRepository('App\Entity\TypeEquipment')->findOneById($request->request->get('typeEquipment')));
  805.             foreach ($request->request->get('parent') as $key => $value) {
  806.                 // var_dump($value);
  807.                 $eq->addParent($this->getDoctrine()->getRepository('App\Entity\EquipmentGeneric')->find($value));
  808.             }
  809.             // var_dump($request->request->get('parent'));
  810.             $upload_dir $_SERVER['DOCUMENT_ROOT'] . '/uploads/';
  811.             if (is_uploaded_file($_FILES['frontImage']['tmp_name'])) {
  812.                 // NEW FRONT IMAGE
  813.                 $uploadedImage $_FILES['frontImage'];
  814.                 $file $uploadedImage['tmp_name'];
  815.                 $path_parts pathinfo($uploadedImage['name']);
  816.                 $extension $path_parts['extension'];
  817.                 $fileNameImg md5(uniqid()) . '.' $extension;
  818.                 $fullPathImage $upload_dir $fileNameImg;
  819.                 move_uploaded_file($file$fullPathImage);
  820.                 $eq->setFrontImage($fileNameImg);
  821.             }
  822.             if (is_uploaded_file($_FILES['rearImage']['tmp_name'])) {
  823.                 // NEW REAR IMAGE
  824.                 $uploadedImage $_FILES['rearImage'];
  825.                 $file $uploadedImage['tmp_name'];
  826.                 $path_parts pathinfo($uploadedImage['name']);
  827.                 $extension $path_parts['extension'];
  828.                 $fileNameImg md5(uniqid()) . '.' $extension;
  829.                 $fullPathImage $upload_dir $fileNameImg;
  830.                 move_uploaded_file($file$fullPathImage);
  831.                 $eq->setRearImage($fileNameImg);
  832.             }
  833.             $em->persist($eq);
  834.             $em->flush();
  835.             // store interfaces
  836.             $inter_num $eq->getNumberOfInterfaces();
  837.             for ($i 0$i $inter_num$i++) {
  838.                 $if = new InterfaceGeneric();
  839.                 $if->setEquipmentGeneric($eq);
  840.                 $if->setInterfaceNumber($_POST['interfaceNumber'][$i]);
  841.                 $if->setNumberOfPorts($_POST['numberOfPorts'][$i]);
  842.                 $if->setTypeLink($this->getDoctrine()->getRepository('App\Entity\TypeLink')->findOneById($_POST['typeLink'][$i]));
  843.                 // $if->setTypeConnector($this->getDoctrine()->getRepository('App\Entity\TypeConnector')->findOneById($_POST['typeConnector'][$i]));
  844.                 // $if->setTypeInterconnection($this->getDoctrine()->getRepository('App\Entity\TypeInterconnection')->findOneById($_POST['typeInterconnection'][$i]));
  845.                 if ($_POST['typeConnector'][$i]) {
  846.                     $if->setTypeConnector($this->getDoctrine()->getRepository('App\Entity\TypeConnector')->findOneById($_POST['typeConnector'][$i]));
  847.                 }
  848.                 if ($_POST['typeInterconnection'][$i]) {
  849.                     $if->setTypeInterconnection($this->getDoctrine()->getRepository('App\Entity\TypeInterconnection')->findOneById($_POST['typeInterconnection'][$i]));
  850.                 } else {
  851.                     $if->setTypeInterconnection($this->getDoctrine()->getRepository('App\Entity\TypeInterconnection')->findOneById(1));
  852.                 }
  853.                 $if->setAlias($this->buildAlias($i));
  854.                 $em->persist($if);
  855.                 $em->flush();
  856.             }
  857.             return $this->redirectToRoute('equipment_generic_module_list');
  858.             // show form
  859.         } else {
  860.             $typeLink $this->getDoctrine()->getRepository('App\Entity\TypeLink')->findAll();
  861.             $typeConnector $this->getDoctrine()->getRepository('App\Entity\TypeConnector')->findAll();
  862.             $typeInterconnection $this->getDoctrine()->getRepository('App\Entity\TypeInterconnection')->findAll();
  863.             $eqGenericModulaire $this->getDoctrine()->getRepository(EquipmentGeneric::class)->findBy(["isModulaire" => true], ['title' => 'ASC']);
  864.             $typeEquipments $this->getDoctrine()->getRepository('App\Entity\TypeEquipment')->findAll();
  865.             return $this->render('equipment/module_create.html.twig', [
  866.                 'action' => 'insert',
  867.                 'page_title' => $translator->trans('Generic Equipment'),
  868.                 'box_title' => '<i class="fa fa-plus-circle fa-fw"></i>' $translator->trans('Add new'),
  869.                 'typeLink' => $typeLink,
  870.                 'typeConnector' => $typeConnector,
  871.                 'typeEquipments' => $typeEquipments,
  872.                 'typeInterconnection' => $typeInterconnection,
  873.                 'eqGenericModulaireList' => $eqGenericModulaire
  874.             ]);
  875.         }
  876.     }
  877.     /**
  878.      * @Route("/equipment/generic/module/list", name="equipment_generic_module_list")
  879.      */
  880.     public function listModuleAction(Request $requestTranslatorInterface $translator)
  881.     {
  882.         $list $this->getDoctrine()->getRepository(EquipmentGeneric::class)->findBy(["isModule" => true]);
  883.         // $em = $this->getDoctrine()->getManager();
  884.         // $queryBuilder = $em->createQueryBuilder()
  885.         // ->select('eqg')
  886.         // ->from('App\Entity\EquipmentGeneric', 'eqg')
  887.         // ->where("eqg.isModule = :isModule")
  888.         // ->setParameter("isModule", true)
  889.         // ->orderBy("eqg.title", "ASC");
  890.         // $adapter = new DoctrineORMAdapter($queryBuilder);
  891.         // $pagerfanta = new Pagerfanta($adapter);
  892.         // $pageLength = $request->query->get("pageLength", $this->getParameter("eqg.maxPerPage"));
  893.         // if ($pageLength == "Tout") {
  894.         //   $qb = $em->createQueryBuilder()
  895.         //   ->select('COUNT(eqg.id)')
  896.         //   ->from('App\Entity\EquipmentGeneric', 'eqg')
  897.         //   ->where("eqg.isModule = :isModule")
  898.         //   ->setParameter("isModule", true)
  899.         //   ->orderBy("eqg.title", "ASC");
  900.         //
  901.         //   $count = $qb->getQuery()->getSingleScalarResult();
  902.         //   $pagerfanta->setMaxPerPage($count); // 10 by default
  903.         // }
  904.         // else {
  905.         //   $pagerfanta->setMaxPerPage($pageLength); // 10 by default
  906.         // }
  907.         // $page = $request->query->get("page", 1);
  908.         // $pagerfanta->setCurrentPage($page);
  909.         return $this->render('equipment/module_list.html.twig', [
  910.             'action' => 'list',
  911.             'page_title' => $translator->trans('Equipement Générique Module'),
  912.             'path_default' => 'equipment_generic_module_create',
  913.             'path_show_equipement' => 'module_show_equipement_specifique',
  914.             'path_update' => 'equipment_generic_module_update',
  915.             'path_delete' => 'equipment_generic_delete',
  916.             'list' => $list,
  917.             // 'my_pager' => $pagerfanta,
  918.             // 'pageLength' => $pageLength,
  919.         ]);
  920.     }
  921.     /**
  922.      * @Route("/equipment/generic/module/list/equipement/{id}", name="module_show_equipement_specifique")
  923.      */
  924.     public function listEquipementModuleAction(Request $request$idTranslatorInterface $translator)
  925.     {
  926.         $eqGenerics $this->getDoctrine()->getRepository('App\Entity\EquipmentGeneric')->findBy(["isModule" => false"isModulaire" => false]);
  927.         $tempRack $this->getDoctrine()->getRepository('App\Entity\Rack')->findOneByTitle("Temp");
  928.         $eqModulaires $this->getDoctrine()->getRepository('App\Entity\EquipmentSpecific')->findBy(["rack" => $tempRack"isModulaire" => true]);
  929.         $racks $this->getDoctrine()->getRepository('App\Entity\Rack')->findAll();
  930.         $rackFaces $this->getDoctrine()->getRepository('App\Entity\RackFace')->findAll();
  931.         // $list = $this->getDoctrine()->getRepository(EquipmentSpecific::class)->findByEquipmentGeneric($id);
  932.         $list $this->getDoctrine()->getRepository(EquipmentSpecific::class)->findEquipmentsModulaireByEquipmentGeneric($id);
  933.         $listEqs = array();
  934.         foreach ($list as $eq) {
  935.             $listEqs[] = $this->getDoctrine()->getRepository('App\Entity\EquipmentSpecific')->find($eq['id']);
  936.         }
  937.         return $this->render('equipment/specific_modulaire_list.html.twig', [
  938.             'action' => 'list',
  939.             'page_title' => $translator->trans('Liste des équipements spécifique'),
  940.             'path_show_equipement' => 'module_show_equipement_specifique',
  941.             'path_default' => 'equipment_specific_create',
  942.             'path_update' => 'equipment_specific_update',
  943.             'path_delete' => 'equipment_specific_delete',
  944.             'eqGenerics' => $eqGenerics,
  945.             'eqModulaires' => $eqModulaires,
  946.             'list' => $listEqs,
  947.             'racks'=> $racks,
  948.             'rackFaces'=> $rackFaces
  949.         ]);
  950.     }
  951.     /**
  952.      * @Route("/equipment/generic/module/edit/{id}", name="equipment_generic_module_update")
  953.      */
  954.     public function updateModuleAction(Request $request$idTranslatorInterface $translator)
  955.     {
  956.         $user $this->getUser();
  957.         $error = array();
  958.         $em $this->getDoctrine()->getManager();
  959.         $eq $em->getRepository(EquipmentGeneric::class)->find($id);
  960.         $specific $em->getRepository(EquipmentSpecific::class)->findByEquipmentGeneric($eq);
  961.         if ($specific) {
  962.             $inUse 1;
  963.         } else {
  964.             $inUse 0;
  965.         }
  966.         $current_no_interfaces $eq->getNumberOfInterfaces();
  967.         $new_no_interfaces $request->request->get('numberOfInterfaces');
  968.         // process form
  969.         if ($request->request->has('title') && ($user->hasRole("ROLE_SUPER_ADMIN") || $user->hasRole("ROLE_ADMIN"))) {
  970.             $upload_dir $_SERVER['DOCUMENT_ROOT'] . '/uploads/';
  971.             if (is_uploaded_file($_FILES['frontImage']['tmp_name'])) {
  972.                 // DELETE OLD FRONT IMAGE
  973.                 $currentFrontImg $eq->getFrontImage();
  974.                 if ($currentFrontImg) {
  975.                     unlink($upload_dir $currentFrontImg);
  976.                 }
  977.                 // NEW FRONT IMAGE
  978.                 $uploadedImage $_FILES['frontImage'];
  979.                 $file $uploadedImage['tmp_name'];
  980.                 $path_parts pathinfo($uploadedImage['name']);
  981.                 $extension $path_parts['extension'];
  982.                 $fileNameImg md5(uniqid()) . '.' $extension;
  983.                 $fullPathImage $upload_dir $fileNameImg;
  984.                 move_uploaded_file($file$fullPathImage);
  985.                 $eq->setFrontImage($fileNameImg);
  986.             }
  987.             if (is_uploaded_file($_FILES['rearImage']['tmp_name'])) {
  988.                 // DELETE OLD FRONT IMAGE
  989.                 $currentRearImg $eq->getRearImage();
  990.                 if ($currentRearImg) {
  991.                     unlink($upload_dir $currentRearImg);
  992.                 }
  993.                 // NEW REAR IMAGE
  994.                 $uploadedImage $_FILES['rearImage'];
  995.                 $file $uploadedImage['tmp_name'];
  996.                 $path_parts pathinfo($uploadedImage['name']);
  997.                 $extension $path_parts['extension'];
  998.                 $fileNameImg md5(uniqid()) . '.' $extension;
  999.                 $fullPathImage $upload_dir $fileNameImg;
  1000.                 move_uploaded_file($file$fullPathImage);
  1001.                 $eq->setRearImage($fileNameImg);
  1002.             }
  1003.             $redirect $request->request->get('redirect');
  1004.             if ($specific) {
  1005.                 $eq->setTitle($request->request->get('title'));
  1006.                 $eq->setType($this->getDoctrine()->getRepository('App\Entity\TypeEquipment')->findOneById($request->request->get('typeEquipment')));
  1007.                 if ($new_no_interfaces >= $current_no_interfaces) {
  1008.                     $eq->setNumberOfInterfaces($request->request->get('numberOfInterfaces'));
  1009.                 }
  1010.                 $parIds = array();
  1011.                 foreach ($eq->getParents() as $parent) {
  1012.                     $parIds[] = $parent->getId();
  1013.                 }
  1014.                 $newParIds = array();
  1015.                 foreach ($request->request->get('parent') as $key => $value) {
  1016.                     // var_dump($value);
  1017.                     $newParIds[] = $value;
  1018.                     $eq->addParent($this->getDoctrine()->getRepository('App\Entity\EquipmentGeneric')->find($value));
  1019.                 }
  1020.                 $parToDelete array_diff($parIds$newParIds);
  1021.                 foreach ($parToDelete as $par) {
  1022.                     $tmpError = array();
  1023.                     $tempSpe $em->getRepository(EquipmentSpecific::class)->findByEquipmentGeneric($par);
  1024.                     foreach ($tempSpe as $tmp) {
  1025.                         foreach ($tmp->getModules() as $tmpMod) {
  1026.                             if ($tmpMod->getEquipmentGeneric()->getId() == $id) {
  1027.                                 $tmpError = array('error' => 'title');
  1028.                                 break;
  1029.                             }
  1030.                         }
  1031.                         if (count($tmpError) > 0) {
  1032.                             break;
  1033.                         }
  1034.                     }
  1035.                     if (count($tmpError) == 0) {
  1036.                         $conn $em->getConnection();
  1037.                         $sql "delete from equipment_modulaire where parent_id=" $par " and module_id=" $id;
  1038.                         $stmt $conn->prepare($sql);
  1039.                         $stmt->execute();
  1040.                     } else {
  1041.                         $error = array('error' => 'title');
  1042.                     }
  1043.                 }
  1044.                 $em->persist($eq);
  1045.                 $em->flush();
  1046.                 // $error = array('error' => 'title');
  1047.                 if ($redirect == 0) {
  1048.                     return $this->redirectToRoute('equipment_generic_module_list'$error);
  1049.                 } else {
  1050.                     return $this->redirectToRoute('equipment_generic_interfaces_update', array('id' => $eq->getId(), 'ref' => 'module'));
  1051.                 }
  1052.             } else {
  1053.                 $eq->setTitle($request->request->get('title'));
  1054.                 $eq->setNumberOfUnits($request->request->get('numberOfUnits'));
  1055.                 $eq->setNumberOfInterfaces($request->request->get('numberOfInterfaces'));
  1056.                 $eq->setType($this->getDoctrine()->getRepository('App\Entity\TypeEquipment')->findOneById($request->request->get('typeEquipment')));
  1057.                 //delete all the Parents
  1058.                 $conn $em->getConnection();
  1059.                 $sql "delete from equipment_modulaire where module_id=" $id;
  1060.                 $stmt $conn->prepare($sql);
  1061.                 $stmt->execute();
  1062.                 foreach ($request->request->get('parent') as $key => $value) {
  1063.                     // var_dump($value);
  1064.                     $eq->addParent($this->getDoctrine()->getRepository('App\Entity\EquipmentGeneric')->find($value));
  1065.                 }
  1066.                 // delete generic interfaces
  1067.                 if ($new_no_interfaces $current_no_interfaces) {
  1068.                     $i 1;
  1069.                     $interfaces $eq->getInterfaceGeneric();
  1070.                     foreach ($interfaces as $interface) {
  1071.                         if ($i $new_no_interfaces) {
  1072.                             $em->remove($interface);
  1073.                             $em->flush();
  1074.                         }
  1075.                         $i++;
  1076.                     }
  1077.                 }
  1078.                 $em->persist($eq);
  1079.                 $em->flush();
  1080.                 if ($redirect == 0) {
  1081.                     return $this->redirectToRoute('equipment_generic_module_list');
  1082.                 } else {
  1083.                     return $this->redirectToRoute('equipment_generic_interfaces_update', array('id' => $eq->getId(), 'ref' => 'module'));
  1084.                 }
  1085.             }
  1086.         } else {
  1087.             $em $this->getDoctrine()->getManager();
  1088.             $eq $em->getRepository(EquipmentGeneric::class)->find($id);
  1089.             $typeEquipments $this->getDoctrine()->getRepository('App\Entity\TypeEquipment')->findAll();
  1090.             $typeLink $this->getDoctrine()->getRepository('App\Entity\TypeLink')->findAll();
  1091.             $typeConnector $this->getDoctrine()->getRepository('App\Entity\TypeConnector')->findAll();
  1092.             $typeInterconnection $this->getDoctrine()->getRepository('App\Entity\TypeInterconnection')->findAll();
  1093.             $eqCurrentParents $eq->getParents();
  1094.             $eqGenericModulaireTemp $this->getDoctrine()->getRepository(EquipmentGeneric::class)->findBy(["isModulaire" => true], ['title' => 'ASC']);
  1095.             $eqGenericModulaire array_filter($eqGenericModulaireTemp, function ($eq) use ($eqCurrentParents) {
  1096.                 foreach ($eqCurrentParents as $parent) {
  1097.                     if ($eq->getId() == $parent->getId()) {
  1098.                         return false;
  1099.                     }
  1100.                 }
  1101.                 return true;
  1102.             });
  1103.             return $this->render('equipment/generic_module_edit.html.twig', [
  1104.                 'action' => 'process',
  1105.                 'page_title' => $translator->trans('Generic Equipment'),
  1106.                 'box_title' => '<i class="fa fa-edit fa-fw"></i> ' $translator->trans('Edit'),
  1107.                 'path_process' => 'equipment_generic_module_update',
  1108.                 'typeLink' => $typeLink,
  1109.                 'typeConnector' => $typeConnector,
  1110.                 'typeEquipments' => $typeEquipments,
  1111.                 'typeInterconnection' => $typeInterconnection,
  1112.                 'eq' => $eq,
  1113.                 'inUse' => $inUse,
  1114.                 'eqGenericModulaireList' => $eqGenericModulaire,
  1115.                 "eqCurrentParents" => $eqCurrentParents
  1116.             ]);
  1117.         }
  1118.     }
  1119.     /**
  1120.      * @Route("/equipment/generic/modulaire/create", name="equipment_generic_modulaire_create")
  1121.      */
  1122.     public function createModulaireAction(Request $requestTranslatorInterface $translator)
  1123.     {
  1124.         $user $this->getUser();
  1125.         // process form
  1126.         if ($request->request->has('title') && ($user->hasRole("ROLE_SUPER_ADMIN") || $user->hasRole("ROLE_ADMIN"))) {
  1127.             $em $this->getDoctrine()->getManager();
  1128.             $eq = new EquipmentGeneric();
  1129.             $eq->setTitle($request->request->get('title'));
  1130.             $eq->setNumberOfUnits($request->request->get('numberOfUnits'));
  1131.             $eq->setNumberOfSlots($request->request->get('numberOfSlots'));
  1132.             $eq->setIsModulaire(true);
  1133.             $eq->setType($this->getDoctrine()->getRepository('App\Entity\TypeEquipment')->findOneById($request->request->get('typeEquipment')));
  1134.             $upload_dir $_SERVER['DOCUMENT_ROOT'] . '/uploads/';
  1135.             if (is_uploaded_file($_FILES['frontImage']['tmp_name'])) {
  1136.                 // NEW FRONT IMAGE
  1137.                 $uploadedImage $_FILES['frontImage'];
  1138.                 $file $uploadedImage['tmp_name'];
  1139.                 $path_parts pathinfo($uploadedImage['name']);
  1140.                 $extension $path_parts['extension'];
  1141.                 $fileNameImg md5(uniqid()) . '.' $extension;
  1142.                 $fullPathImage $upload_dir $fileNameImg;
  1143.                 move_uploaded_file($file$fullPathImage);
  1144.                 $eq->setFrontImage($fileNameImg);
  1145.             }
  1146.             if (is_uploaded_file($_FILES['rearImage']['tmp_name'])) {
  1147.                 // NEW REAR IMAGE
  1148.                 $uploadedImage $_FILES['rearImage'];
  1149.                 $file $uploadedImage['tmp_name'];
  1150.                 $path_parts pathinfo($uploadedImage['name']);
  1151.                 $extension $path_parts['extension'];
  1152.                 $fileNameImg md5(uniqid()) . '.' $extension;
  1153.                 $fullPathImage $upload_dir $fileNameImg;
  1154.                 move_uploaded_file($file$fullPathImage);
  1155.                 $eq->setRearImage($fileNameImg);
  1156.             }
  1157.             if ($request->request->get('moduleChassis')) {
  1158.                 $chassisModule = new EquipmentGeneric();
  1159.                 $chassisModule->setTitle($request->request->get('moduleTitle'));
  1160.                 $chassisModule->setNumberOfUnits(1);
  1161.                 $chassisModule->setNumberOfInterfaces($request->request->get('moduleNumberOfInterfaces'));
  1162.                 $chassisModule->setIsChassisModule(true);
  1163.                 $eq->setChassisModule($chassisModule);
  1164.                 $em->persist($eq);
  1165.                 // store interfaces
  1166.                 $inter_num $chassisModule->getNumberOfInterfaces();
  1167.                 for ($i 0$i $inter_num$i++) {
  1168.                     $if = new InterfaceGeneric();
  1169.                     $if->setEquipmentGeneric($chassisModule);
  1170.                     $if->setInterfaceNumber($_POST['interfaceNumber'][$i]);
  1171.                     $if->setNumberOfPorts($_POST['numberOfPorts'][$i]);
  1172.                     $if->setTypeLink($this->getDoctrine()->getRepository('App\Entity\TypeLink')->findOneById($_POST['typeLink'][$i]));
  1173.                     // $if->setTypeConnector($this->getDoctrine()->getRepository('App\Entity\TypeConnector')->findOneById($_POST['typeConnector'][$i]));
  1174.                     // $if->setTypeInterconnection($this->getDoctrine()->getRepository('App\Entity\TypeInterconnection')->findOneById($_POST['typeInterconnection'][$i]));
  1175.                     if ($_POST['typeConnector'][$i]) {
  1176.                         $if->setTypeConnector($this->getDoctrine()->getRepository('App\Entity\TypeConnector')->findOneById($_POST['typeConnector'][$i]));
  1177.                     }
  1178.                     if ($_POST['typeInterconnection'][$i]) {
  1179.                         $if->setTypeInterconnection($this->getDoctrine()->getRepository('App\Entity\TypeInterconnection')->findOneById($_POST['typeInterconnection'][$i]));
  1180.                     } else {
  1181.                         $if->setTypeInterconnection($this->getDoctrine()->getRepository('App\Entity\TypeInterconnection')->findOneById(1));
  1182.                     }
  1183.                     $if->setAlias($this->buildAlias($i));
  1184.                     $em->persist($if);
  1185.                     $em->flush();
  1186.                 }
  1187.             }
  1188.             else{
  1189.                 $em->persist($eq);
  1190.             }
  1191.             $em->flush();
  1192.             return $this->redirectToRoute('equipment_generic_modulaire_list');
  1193.             // show form
  1194.         } else {
  1195.             $typeEquipments $this->getDoctrine()->getRepository('App\Entity\TypeEquipment')->findAll();
  1196.             $typeLink $this->getDoctrine()->getRepository('App\Entity\TypeLink')->findAll();
  1197.             $typeConnector $this->getDoctrine()->getRepository('App\Entity\TypeConnector')->findAll();
  1198.             $typeInterconnection $this->getDoctrine()->getRepository('App\Entity\TypeInterconnection')->findAll();
  1199.             return $this->render('equipment/modulaire_create.html.twig', [
  1200.                 'action' => 'insert',
  1201.                 'page_title' => $translator->trans('Equipement Générique Modulaire'),
  1202.                 'box_title' => '<i class="fa fa-plus-circle fa-fw"></i>' $translator->trans('Add new'),
  1203.                 'typeLink' => $typeLink,
  1204.                 'typeConnector' => $typeConnector,
  1205.                 'typeEquipments' => $typeEquipments,
  1206.                 'typeInterconnection' => $typeInterconnection,
  1207.             ]);
  1208.         }
  1209.     }
  1210.     /**
  1211.      * @Route("/equipment/generic/modulaire/list", name="equipment_generic_modulaire_list")
  1212.      */
  1213.     public function listModulaireAction(Request $requestTranslatorInterface $translator)
  1214.     {
  1215.         $list $this->getDoctrine()->getRepository(EquipmentGeneric::class)->findBy(["isModulaire" => true]);
  1216.         // $em = $this->getDoctrine()->getManager();
  1217.         // $queryBuilder = $em->createQueryBuilder()
  1218.         // ->select('eqg')
  1219.         // ->from('App\Entity\EquipmentGeneric', 'eqg')
  1220.         // ->where("eqg.isModulaire = :isModulaire")
  1221.         // ->setParameter("isModulaire", true)
  1222.         // ->orderBy("eqg.title", "ASC");
  1223.         // $adapter = new DoctrineORMAdapter($queryBuilder);
  1224.         // $pagerfanta = new Pagerfanta($adapter);
  1225.         // $pageLength = $request->query->get("pageLength", $this->getParameter("eqg.maxPerPage"));
  1226.         // if ($pageLength == "Tout") {
  1227.         //   $qb = $em->createQueryBuilder()
  1228.         //   ->select('COUNT(eqg.id)')
  1229.         //   ->from('App\Entity\EquipmentGeneric', 'eqg')
  1230.         //   ->where("eqg.isModulaire = :isModulaire")
  1231.         //   ->setParameter("isModulaire", true)
  1232.         //   ->orderBy("eqg.title", "ASC");
  1233.         //
  1234.         //   $count = $qb->getQuery()->getSingleScalarResult();
  1235.         //   $pagerfanta->setMaxPerPage($count); // 10 by default
  1236.         // }
  1237.         // else {
  1238.         //   $pagerfanta->setMaxPerPage($pageLength); // 10 by default
  1239.         // }
  1240.         // $page = $request->query->get("page", 1);
  1241.         // $pagerfanta->setCurrentPage($page);
  1242.         return $this->render('equipment/modulaire_list.html.twig', [
  1243.             'action' => 'list',
  1244.             'page_title' => $translator->trans('Equipement Générique Modulaire'),
  1245.             'path_default' => 'equipment_generic_modulaire_create',
  1246.             'path_update' => 'equipment_generic_modulaire_update',
  1247.             'path_delete' => 'equipment_generic_delete',
  1248.             'list' => $list,
  1249.             // 'my_pager' => $pagerfanta,
  1250.             // 'pageLength' => $pageLength,
  1251.         ]);
  1252.     }
  1253.     /**
  1254.      * @Route("/equipment/generic/modulaire/edit/{id}", name="equipment_generic_modulaire_update")
  1255.      */
  1256.     public function updateModulaireAction(Request $request$idTranslatorInterface $translator)
  1257.     {
  1258.         $user $this->getUser();
  1259.         $em $this->getDoctrine()->getManager();
  1260.         $eq $em->getRepository(EquipmentGeneric::class)->find($id);
  1261.         $specific $em->getRepository(EquipmentSpecific::class)->findByEquipmentGeneric($eq);
  1262.         if ($specific) {
  1263.             $inUse 1;
  1264.         } else {
  1265.             $inUse 0;
  1266.         }
  1267.         $current_no_slots $eq->getNumberOfSlots();
  1268.         $new_no_slots $request->request->get('numberOfSlots');
  1269.         // process form
  1270.         if ($request->request->has('title') && ($user->hasRole("ROLE_SUPER_ADMIN") || $user->hasRole("ROLE_ADMIN"))) {
  1271.             $upload_dir $_SERVER['DOCUMENT_ROOT'] . '/uploads/';
  1272.             if (is_uploaded_file($_FILES['frontImage']['tmp_name'])) {
  1273.                 // DELETE OLD FRONT IMAGE
  1274.                 $currentFrontImg $eq->getFrontImage();
  1275.                 if ($currentFrontImg) {
  1276.                     unlink($upload_dir $currentFrontImg);
  1277.                 }
  1278.                 // NEW FRONT IMAGE
  1279.                 $uploadedImage $_FILES['frontImage'];
  1280.                 $file $uploadedImage['tmp_name'];
  1281.                 $path_parts pathinfo($uploadedImage['name']);
  1282.                 $extension $path_parts['extension'];
  1283.                 $fileNameImg md5(uniqid()) . '.' $extension;
  1284.                 $fullPathImage $upload_dir $fileNameImg;
  1285.                 move_uploaded_file($file$fullPathImage);
  1286.                 $eq->setFrontImage($fileNameImg);
  1287.             }
  1288.             if (is_uploaded_file($_FILES['rearImage']['tmp_name'])) {
  1289.                 // DELETE OLD FRONT IMAGE
  1290.                 $currentRearImg $eq->getRearImage();
  1291.                 if ($currentRearImg) {
  1292.                     unlink($upload_dir $currentRearImg);
  1293.                 }
  1294.                 // NEW REAR IMAGE
  1295.                 $uploadedImage $_FILES['rearImage'];
  1296.                 $file $uploadedImage['tmp_name'];
  1297.                 $path_parts pathinfo($uploadedImage['name']);
  1298.                 $extension $path_parts['extension'];
  1299.                 $fileNameImg md5(uniqid()) . '.' $extension;
  1300.                 $fullPathImage $upload_dir $fileNameImg;
  1301.                 move_uploaded_file($file$fullPathImage);
  1302.                 $eq->setRearImage($fileNameImg);
  1303.             }
  1304.             $redirect $request->request->get('redirect');
  1305.             if ($specific) {
  1306.                 $eq->setTitle($request->request->get('title'));
  1307.                 $eq->setType($this->getDoctrine()->getRepository('App\Entity\TypeEquipment')->findOneById($request->request->get('typeEquipment')));
  1308.                 if ($new_no_slots >= $current_no_slots) {
  1309.                     $eq->setNumberOfSlots($request->request->get('numberOfSlots'));
  1310.                 }
  1311.                 $em->persist($eq);
  1312.                 $em->flush();
  1313.                 $error = array('error' => 'title');
  1314.                 if ($redirect == 0) {
  1315.                     return $this->redirectToRoute('equipment_generic_modulaire_list'$error);
  1316.                 }
  1317.                 // return $this->redirectToRoute('equipment_generic_modulaire_list');
  1318.             } else {
  1319.                 $eq->setTitle($request->request->get('title'));
  1320.                 $eq->setNumberOfUnits($request->request->get('numberOfUnits'));
  1321.                 $eq->setNumberOfSlots($request->request->get('numberOfSlots'));
  1322.                 $eq->setType($this->getDoctrine()->getRepository('App\Entity\TypeEquipment')->findOneById($request->request->get('typeEquipment')));
  1323.                 $em->persist($eq);
  1324.                 $em->flush();
  1325.                 if ($redirect == 0) {
  1326.                     return $this->redirectToRoute('equipment_generic_modulaire_list');
  1327.                 }
  1328.             }
  1329.         } else {
  1330.             $em $this->getDoctrine()->getManager();
  1331.             $eq $em->getRepository(EquipmentGeneric::class)->find($id);
  1332.             $typeEquipments $this->getDoctrine()->getRepository('App\Entity\TypeEquipment')->findAll();
  1333.             return $this->render('equipment/generic_modulaire_edit.html.twig', [
  1334.                 'action' => 'process',
  1335.                 'page_title' => $translator->trans('Equipement générique modulaire'),
  1336.                 'box_title' => '<i class="fa fa-edit fa-fw"></i> ' $translator->trans('Edit'),
  1337.                 'path_process' => 'equipment_generic_modulaire_update',
  1338.                 'path_update_chassis_module' => 'chassis_module_update',
  1339.                 'path_delete_chassis_module' => 'chassis_module_delete',
  1340.                 'eq' => $eq,
  1341.                 'typeEquipments' => $typeEquipments,
  1342.                 'inUse' => $inUse
  1343.             ]);
  1344.         }
  1345.     }
  1346.     /**
  1347.      * @Route("/equipment/generic/chassis/module/edit/{id}", name="chassis_module_update")
  1348.      */
  1349.     public function updateChassisModuleAction(Request $request$idTranslatorInterface $translator)
  1350.     {
  1351.         $user $this->getUser();
  1352.         $error = array();
  1353.         $em $this->getDoctrine()->getManager();
  1354.         $eq $em->getRepository(EquipmentGeneric::class)->find($id);
  1355.         $specific $em->getRepository(EquipmentSpecific::class)->findByEquipmentGeneric($eq);
  1356.         if ($specific) {
  1357.             $inUse 1;
  1358.         } else {
  1359.             $inUse 0;
  1360.         }
  1361.         $current_no_interfaces $eq->getNumberOfInterfaces();
  1362.         $new_no_interfaces $request->request->get('numberOfInterfaces');
  1363.         // process form
  1364.         if ($request->request->has('title') && ($user->hasRole("ROLE_SUPER_ADMIN") || $user->hasRole("ROLE_ADMIN"))) {
  1365.             $redirect $request->request->get('redirect');
  1366.             if ($specific) {
  1367.                 $eq->setTitle($request->request->get('title'));
  1368.                 if ($new_no_interfaces >= $current_no_interfaces) {
  1369.                     $eq->setNumberOfInterfaces($request->request->get('numberOfInterfaces'));
  1370.                 }
  1371.                 $em->persist($eq);
  1372.                 $em->flush();
  1373.                 // $error = array('error' => 'title');
  1374.                 if ($redirect == 0) {
  1375.                     return $this->redirectToRoute('equipment_generic_modulaire_update', array('id' => $eq->getChassisParent()->getId()));
  1376.                 } else {
  1377.                     return $this->redirectToRoute('equipment_generic_interfaces_update', array('id' => $eq->getId(), 'ref' => 'moduleChassis'));
  1378.                 }
  1379.             } else {
  1380.                 $eq->setTitle($request->request->get('title'));
  1381.                 $eq->setNumberOfInterfaces($request->request->get('numberOfInterfaces'));
  1382.                 // delete generic interfaces
  1383.                 if ($new_no_interfaces $current_no_interfaces) {
  1384.                     $i 1;
  1385.                     $interfaces $eq->getInterfaceGeneric();
  1386.                     foreach ($interfaces as $interface) {
  1387.                         if ($i $new_no_interfaces) {
  1388.                             $em->remove($interface);
  1389.                             $em->flush();
  1390.                         }
  1391.                         $i++;
  1392.                     }
  1393.                 }
  1394.                 $em->persist($eq);
  1395.                 $em->flush();
  1396.                 if ($redirect == 0) {
  1397.                     return $this->redirectToRoute('equipment_generic_modulaire_update', array('id' => $eq->getChassisParent()->getId()));
  1398.                 } else {
  1399.                     return $this->redirectToRoute('equipment_generic_interfaces_update', array('id' => $eq->getId(), 'ref' => 'moduleChassis'));
  1400.                 }
  1401.             }
  1402.         } else {
  1403.             $em $this->getDoctrine()->getManager();
  1404.             $eq $em->getRepository(EquipmentGeneric::class)->find($id);
  1405.             $typeLink $this->getDoctrine()->getRepository('App\Entity\TypeLink')->findAll();
  1406.             $typeConnector $this->getDoctrine()->getRepository('App\Entity\TypeConnector')->findAll();
  1407.             $typeInterconnection $this->getDoctrine()->getRepository('App\Entity\TypeInterconnection')->findAll();
  1408.             return $this->render('equipment/chassis_module_edit.html.twig', [
  1409.                 'action' => 'process',
  1410.                 'page_title' => $translator->trans('Chassis Module'),
  1411.                 'box_title' => '<i class="fa fa-edit fa-fw"></i> ' $translator->trans('Edit'),
  1412.                 'path_process' => 'chassis_module_update',
  1413.                 'typeLink' => $typeLink,
  1414.                 'typeConnector' => $typeConnector,
  1415.                 'typeInterconnection' => $typeInterconnection,
  1416.                 'eq' => $eq,
  1417.                 'inUse' => $inUse
  1418.             ]);
  1419.         }
  1420.     }
  1421.     /**
  1422.      * @IsGranted("ROLE_CRUD")
  1423.      * @Route("/equipment/generic/chassis/module/delete/{id}", name="chassis_module_delete")
  1424.      */
  1425.     public function deleteChassisModuleAction(Request $request$idTranslatorInterface $translator)
  1426.     {
  1427.         $em $this->getDoctrine()->getManager();
  1428.         $equipmentGen $em->getRepository(EquipmentGeneric::class)->find($id);
  1429.         $chassisId $equipmentGen->getChassisParent()->getId();
  1430.         // find in usage
  1431.         $error = ['id' => $chassisId];
  1432.         $specific $em->getRepository(EquipmentSpecific::class)->findByEquipmentGeneric($equipmentGen);
  1433.         if (!$specific) {
  1434.             $em->remove($equipmentGen);
  1435.             $em->flush();
  1436.         } else {
  1437.             $error = array('id' => $chassisId'error' => 'usage');
  1438.         }
  1439.         return $this->redirectToRoute('equipment_generic_modulaire_update'$error);
  1440.     }
  1441.     /**
  1442.      * @Route("/equipment/generic/findTitleDuplicate", name="ajax_find_generic_title")
  1443.      */
  1444.     public function findTitleDuplicate()
  1445.     {
  1446.         $eq $this->getDoctrine()->getRepository('App\Entity\EquipmentGeneric')->findOneByTitle($_POST['title']);
  1447.         if ($eq) {
  1448.             $response 1;
  1449.         } else {
  1450.             $response 0;
  1451.         }
  1452.         return $this->json($response);
  1453.     }
  1454.     /**
  1455.      * @Route("/equipment/generic/findTitleDuplicateOther", name="ajax_find_generic_title_other")
  1456.      */
  1457.     public function findTitleDuplicateOther()
  1458.     {
  1459.         $response $this->getDoctrine()->getRepository('App\Entity\EquipmentGeneric')->findTitleDuplicateOther($_POST['title'], $_POST['id']);
  1460.         return $this->json($response);
  1461.     }
  1462. }