<?php
namespace App\Controller;
use Psr\Log\LoggerInterface;
use App\Entity\EquipmentGeneric;
use App\Entity\EquipmentSpecific;
use App\Entity\InterfaceGeneric;
use App\Entity\InterfaceSpecific;
use App\Entity\Port;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Request;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Security;
use Pagerfanta\Pagerfanta;
// use Pagerfanta\Adapter\DoctrineORMAdapter;
use Symfony\Contracts\Translation\TranslatorInterface;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\IsGranted;
class EquipmentGenericController extends AbstractController
{
/**
* @Route("/equipment/generic/create", name="equipment_generic_create")
*/
public function createAction(Request $request, TranslatorInterface $translator)
{
$user = $this->getUser();
// process form
if ($request->request->has('title') && ($user->hasRole("ROLE_SUPER_ADMIN") || $user->hasRole("ROLE_ADMIN"))) {
$em = $this->getDoctrine()->getManager();
$eq = new EquipmentGeneric();
$eq->setTitle($request->request->get('title'));
$eq->setNumberOfUnits($request->request->get('numberOfUnits'));
$eq->setNumberOfInterfaces($request->request->get('numberOfInterfaces'));
$eq->setType($this->getDoctrine()->getRepository('App\Entity\TypeEquipment')->findOneById($request->request->get('typeEquipment')));
$upload_dir = $_SERVER['DOCUMENT_ROOT'] . '/uploads/';
if (is_uploaded_file($_FILES['frontImage']['tmp_name'])) {
// NEW FRONT IMAGE
$uploadedImage = $_FILES['frontImage'];
$file = $uploadedImage['tmp_name'];
$path_parts = pathinfo($uploadedImage['name']);
$extension = $path_parts['extension'];
$fileNameImg = md5(uniqid()) . '.' . $extension;
$fullPathImage = $upload_dir . $fileNameImg;
move_uploaded_file($file, $fullPathImage);
$eq->setFrontImage($fileNameImg);
}
if (is_uploaded_file($_FILES['rearImage']['tmp_name'])) {
// NEW REAR IMAGE
$uploadedImage = $_FILES['rearImage'];
$file = $uploadedImage['tmp_name'];
$path_parts = pathinfo($uploadedImage['name']);
$extension = $path_parts['extension'];
$fileNameImg = md5(uniqid()) . '.' . $extension;
$fullPathImage = $upload_dir . $fileNameImg;
move_uploaded_file($file, $fullPathImage);
$eq->setRearImage($fileNameImg);
}
$em->persist($eq);
$em->flush();
// store interfaces
$inter_num = $eq->getNumberOfInterfaces();
for ($i = 0; $i < $inter_num; $i++) {
$if = new InterfaceGeneric();
$if->setEquipmentGeneric($eq);
$if->setInterfaceNumber($_POST['interfaceNumber'][$i]);
$if->setNumberOfPorts($_POST['numberOfPorts'][$i]);
$if->setTypeLink($this->getDoctrine()->getRepository('App\Entity\TypeLink')->findOneById($_POST['typeLink'][$i]));
if ($_POST['typeConnector'][$i]) {
$if->setTypeConnector($this->getDoctrine()->getRepository('App\Entity\TypeConnector')->findOneById($_POST['typeConnector'][$i]));
}
$if->setTypeInterconnection($this->getDoctrine()->getRepository('App\Entity\TypeInterconnection')->findOneById($_POST['typeInterconnection'][$i]));
$if->setAlias($this->buildAlias($i));
$em->persist($if);
$em->flush();
}
return $this->redirectToRoute('equipment_generic_list');
// show form
} else {
$typeLink = $this->getDoctrine()->getRepository('App\Entity\TypeLink')->findAll();
$typeConnector = $this->getDoctrine()->getRepository('App\Entity\TypeConnector')->findAll();
$typeInterconnection = $this->getDoctrine()->getRepository('App\Entity\TypeInterconnection')->findAll();
$typeEquipments = $this->getDoctrine()->getRepository('App\Entity\TypeEquipment')->findAll();
return $this->render('equipment/generic_create.html.twig', [
'action' => 'insert',
'page_title' => $translator->trans('Generic Equipment'),
'box_title' => '<i class="fa fa-plus-circle fa-fw"></i>' . $translator->trans('Add new'),
'typeLink' => $typeLink,
'typeConnector' => $typeConnector,
'typeEquipments' => $typeEquipments,
'typeInterconnection' => $typeInterconnection
]);
}
}
private function buildAlias(int $i):?string{
$alias = [];
$result = null;
if (isset($_POST["port"][$i + 1])) {
for ($j = 1; $j <= count($_POST["port"][$i + 1]); $j++) {
if (isset($_POST["port"][$i + 1][$j - 1])) {
$alias[$j] = $_POST["port"][$i + 1][$j - 1];
} else {
$alias[$j] = "";
}
}
}
if (!empty($alias)) {
$result = json_encode($alias);
} else {
if ($_POST['typeLink'][$i] == "3") {
for ($j = 1; $j <= $_POST['numberOfPorts'][$i]; $j++) {
$alias[$j] = "";
}
$result = json_encode($alias);
}
}
return $result;
}
/**
* @Route("/equipment/generic/list", name="equipment_generic_list")
*/
public function listAction(Request $request, TranslatorInterface $translator)
{
//modified to exclude chassis module
$list = $this->getDoctrine()->getRepository(EquipmentGeneric::class)->findBy(["isModule" => false, "isModulaire" => false, "isChassisModule"=> false]);
// $em = $this->getDoctrine()->getManager();
// $queryBuilder = $em->createQueryBuilder()
// ->select('eqg')
// ->from('App\Entity\EquipmentGeneric', 'eqg')
// ->where("eqg.isModule = :isModule")
// ->andWhere("eqg.isModulaire = :isModulaire")
// ->setParameter("isModule", false)
// ->setParameter("isModulaire", false)
// ->orderBy("eqg.title", "ASC");
// $adapter = new DoctrineORMAdapter($queryBuilder);
// $pagerfanta = new Pagerfanta($adapter);
// $pageLength = $request->query->get("pageLength", $this->getParameter("eqg.maxPerPage"));
// if ($pageLength == "Tout") {
// $qb = $em->createQueryBuilder()
// ->select('COUNT(eqg.id)')
// ->from('App\Entity\EquipmentGeneric', 'eqg')
// ->where("eqg.isModule = :isModule")
// ->andWhere("eqg.isModulaire = :isModulaire")
// ->setParameter("isModule", false)
// ->setParameter("isModulaire", false)
// ->orderBy("eqg.title", "ASC");
//
// $count = $qb->getQuery()->getSingleScalarResult();
// $pagerfanta->setMaxPerPage($count); // 10 by default
// }
// else {
// $pagerfanta->setMaxPerPage($pageLength); // 10 by default
// }
// $page = $request->query->get("page", 1);
// $pagerfanta->setCurrentPage($page);
return $this->render('equipment/generic_list.html.twig', [
'action' => 'list',
'page_title' => $translator->trans('Generic Equipment'),
'path_default' => 'equipment_generic_create',
'path_update' => 'equipment_generic_update',
'path_delete' => 'equipment_generic_delete',
'list' => $list,
// 'my_pager' => $pagerfanta,
// 'pageLength' => $pageLength,
]);
}
/**
* @Route("/equipment/generic/edit/{id}", name="equipment_generic_update")
*/
public function updateAction(Request $request, $id, TranslatorInterface $translator)
{
$user = $this->getUser();
$em = $this->getDoctrine()->getManager();
$eq = $em->getRepository(EquipmentGeneric::class)->find($id);
$specific = $em->getRepository(EquipmentSpecific::class)->findByEquipmentGeneric($eq);
if ($specific) {
$inUse = 1;
} else {
$inUse = 0;
}
$current_no_interfaces = $eq->getNumberOfInterfaces();
$new_no_interfaces = $request->request->get('numberOfInterfaces');
// process form
if ($request->request->has('title') && ($user->hasRole("ROLE_SUPER_ADMIN") || $user->hasRole("ROLE_ADMIN"))) {
$upload_dir = $_SERVER['DOCUMENT_ROOT'] . '/uploads/';
if (is_uploaded_file($_FILES['frontImage']['tmp_name'])) {
// DELETE OLD FRONT IMAGE
$currentFrontImg = $eq->getFrontImage();
if ($currentFrontImg) {
unlink($upload_dir . $currentFrontImg);
}
// NEW FRONT IMAGE
$uploadedImage = $_FILES['frontImage'];
$file = $uploadedImage['tmp_name'];
$path_parts = pathinfo($uploadedImage['name']);
$extension = $path_parts['extension'];
$fileNameImg = md5(uniqid()) . '.' . $extension;
$fullPathImage = $upload_dir . $fileNameImg;
move_uploaded_file($file, $fullPathImage);
$eq->setFrontImage($fileNameImg);
}
if (is_uploaded_file($_FILES['rearImage']['tmp_name'])) {
// DELETE OLD FRONT IMAGE
$currentRearImg = $eq->getRearImage();
if ($currentRearImg) {
unlink($upload_dir . $currentRearImg);
}
// NEW REAR IMAGE
$uploadedImage = $_FILES['rearImage'];
$file = $uploadedImage['tmp_name'];
$path_parts = pathinfo($uploadedImage['name']);
$extension = $path_parts['extension'];
$fileNameImg = md5(uniqid()) . '.' . $extension;
$fullPathImage = $upload_dir . $fileNameImg;
move_uploaded_file($file, $fullPathImage);
$eq->setRearImage($fileNameImg);
}
$redirect = $request->request->get('redirect');
if ($specific) {
$eq->setTitle($request->request->get('title'));
$eq->setType($this->getDoctrine()->getRepository('App\Entity\TypeEquipment')->findOneById($request->request->get('typeEquipment')));
if ($new_no_interfaces >= $current_no_interfaces) {
$eq->setNumberOfInterfaces($request->request->get('numberOfInterfaces'));
}
$em->persist($eq);
$em->flush();
// $error = array('error' => 'title');
if ($redirect == 0) {
return $this->redirectToRoute('equipment_generic_list');
// return $this->redirectToRoute('equipment_generic_list', $error);
} else {
return $this->redirectToRoute('equipment_generic_interfaces_update', array('id' => $eq->getId()));
}
} else {
$eq->setTitle($request->request->get('title'));
$eq->setNumberOfUnits($request->request->get('numberOfUnits'));
$eq->setNumberOfInterfaces($request->request->get('numberOfInterfaces'));
$eq->setType($this->getDoctrine()->getRepository('App\Entity\TypeEquipment')->findOneById($request->request->get('typeEquipment')));
// delete generic interfaces
if ($new_no_interfaces < $current_no_interfaces) {
$i = 1;
$interfaces = $eq->getInterfaceGeneric();
foreach ($interfaces as $interface) {
if ($i > $new_no_interfaces) {
$em->remove($interface);
$em->flush();
}
$i++;
}
}
$em->persist($eq);
$em->flush();
if ($redirect == 0) {
return $this->redirectToRoute('equipment_generic_list');
} else {
return $this->redirectToRoute('equipment_generic_interfaces_update', array('id' => $eq->getId()));
}
}
} else {
$em = $this->getDoctrine()->getManager();
$eq = $em->getRepository(EquipmentGeneric::class)->find($id);
$typeLink = $this->getDoctrine()->getRepository('App\Entity\TypeLink')->findAll();
$typeConnector = $this->getDoctrine()->getRepository('App\Entity\TypeConnector')->findAll();
$typeInterconnection = $this->getDoctrine()->getRepository('App\Entity\TypeInterconnection')->findAll();
$typeEquipments = $this->getDoctrine()->getRepository('App\Entity\TypeEquipment')->findAll();
return $this->render('equipment/generic_edit.html.twig', [
'action' => 'process',
'page_title' => $translator->trans('Generic Equipment'),
'box_title' => '<i class="fa fa-edit fa-fw"></i> ' . $translator->trans('Edit'),
'path_process' => 'equipment_generic_update_process',
'typeLink' => $typeLink,
'typeConnector' => $typeConnector,
'typeEquipments' => $typeEquipments,
'typeInterconnection' => $typeInterconnection,
'eq' => $eq,
'inUse' => $inUse
]);
}
}
/**
* @Route("/equipment/generic/interfaces/edit/{id}", name="equipment_generic_interfaces_update")
*/
public function updateInterfacesAction(Request $request, LoggerInterface $logger, $id, TranslatorInterface $translator)
{
$user = $this->getUser();
$em = $this->getDoctrine()->getManager();
$eq = $em->getRepository(EquipmentGeneric::class)->find($id);
$specific = $em->getRepository(EquipmentSpecific::class)->findByEquipmentGeneric($eq);
$inUse = 0;
if ($specific) {
$inUse = 1;
} else {
$inUse = 0;
}
// process form
if ($request->request->has('title') && ($user->hasRole("ROLE_SUPER_ADMIN") || $user->hasRole("ROLE_ADMIN"))) {
$em = $this->getDoctrine()->getManager();
$eq = $em->getRepository(EquipmentGeneric::class)->find($request->request->get('id'));
// find specific in usage
// $specific = $em->getRepository(EquipmentSpecific::class)->findByEquipmentGeneric($eq);
// if ($specific){
//
// $interfaces = $this->getDoctrine()->getRepository('App\Entity\InterfaceGeneric')->findByEquipmentGeneric($eq);
// $nbIntTemp = count($interfaces);
// //$current_interface_no = count($interfaces);
// if (isset($_POST['interfaceNumber'])) {
// $new_interface_no = count($_POST['interfaceNumber']);
//
//
// if ($new_interface_no > 0){ // 1
//
// for ($i = 0; $i < $new_interface_no; $i++){
//
//
// $if = new InterfaceGeneric();
//
// $if->setEquipmentGeneric($eq);
// $if->setInterfaceNumber($_POST['interfaceNumber'][$i]);
// $if->setNumberOfPorts($_POST['numberOfPorts'][$i]);
// $if->setTypeLink($this->getDoctrine()->getRepository('App\Entity\TypeLink')->findOneById($_POST['typeLink'][$i]));
// if (isset($_POST['typeConnector']) && isset($_POST['typeConnector'][$i])) {
// $if->setTypeConnector($this->getDoctrine()->getRepository('App\Entity\TypeConnector')->findOneById($_POST['typeConnector'][$i]));
// }
// $if->setTypeInterconnection($this->getDoctrine()->getRepository('App\Entity\TypeInterconnection')->findOneById($_POST['typeInterconnection'][$i]));
//
// // if ($_POST['typeLink'][$i] == "3") {
// $alias = [];
// if (isset($_POST["port"][$nbIntTemp+1])) {
// for ($j = 1; $j<=count($_POST["port"][$nbIntTemp+1]); $j++){
// if (isset($_POST["port"][$nbIntTemp+1][$j-1])) {
// $alias[$j] = $_POST["port"][$nbIntTemp+1][$j-1];
// }
// }
// }
//
//
// if (!empty($alias)) {
// $alias = json_encode($alias);
// $alias = (string)$alias;
// } else {
// $alias = null;
// }
//
// $if->setAlias($alias);
// // }
// $em->persist($if);
// $em->flush();
//
// foreach ($specific as $eq_specific){
//
// $interfaceSpecific = new InterfaceSpecific();
// $interfaceSpecific->setEquipmentSpecific($eq_specific);
// $interfaceSpecific->setInterfaceGeneric($if);
// $alias = json_decode($if->getAlias(), true);
// $em->persist($interfaceSpecific);
// $em->flush();
//
// // create ports
// $numberOfPorts = $if->getNumberOfPorts();
// for ($k=1; $k<=$numberOfPorts; $k++){
//
// $port = new Port();
// $port->setInterfaceSpecific($interfaceSpecific);
// $port->setOrderNo($k);
// if ($alias) {
// $port->setAlias($alias[$k]);
// }
// $em->persist($port);
// $em->flush();
//
// }
//
// }
//
// }
//
//
// }
// else {
// $error = array('error' => 'title');
// }
// }
// if (strpos($request->query->get('ref'), "module") === 0 ) {
//
// return $this->redirectToRoute('equipment_generic_module_list', $error);
// }
// else {
// return $this->redirectToRoute('equipment_generic_list', $error);
// }
// }
//MODIFIED on 11 mars 2019
// $interfaceTemp = $this->getDoctrine()->getRepository('App\Entity\InterfaceGeneric')->findByEquipmentGeneric($eq);
// $nbIntTemp = count($interfaceTemp);
for ($i = 0; $i < count($_POST['interfaceNumber']); $i++) {
// var_dump($_POST['interfaceId']);
// $logger->info($_POST['interfaceId'][$i]);
if (isset($_POST['interfaceId']) && $_POST['interfaceId'][$i]) {
$if = $this->getDoctrine()->getRepository('App\Entity\InterfaceGeneric')->find($_POST['interfaceId'][$i]);
// var_dump($if->getId());
// $if->setEquipmentGeneric($eq);
$if->setInterfaceNumber($_POST['interfaceNumber'][$i]);
$if->setNumberOfPorts($_POST['numberOfPorts'][$i]);
$if->setTypeLink($this->getDoctrine()->getRepository('App\Entity\TypeLink')->findOneById($_POST['typeLink'][$i]));
if (isset($_POST['typeConnector']) && isset($_POST['typeConnector'][$i])) {
$if->setTypeConnector($this->getDoctrine()->getRepository('App\Entity\TypeConnector')->findOneById($_POST['typeConnector'][$i]));
}
$if->setTypeInterconnection($this->getDoctrine()->getRepository('App\Entity\TypeInterconnection')->findOneById($_POST['typeInterconnection'][$i]));
$if->setAlias($this->buildAlias($i));
$em->persist($if);
$em->flush();
foreach ($specific as $eq_specific) {
foreach ($eq_specific->getInterfaceSpecific() as $value) {
if ($value->getInterfaceGeneric()->getId() == $if->getId()) {
$alias = json_decode($if->getAlias(), true);
$k = 1;
//ADDED on 11 avril 2019
$portsSpecific = $value->getPort();
$nbPortsGeneric = $value->getInterfaceGeneric()->getNumberOfPorts();
$nbPortsToAdd = $nbPortsGeneric - count($portsSpecific);
$portOrderNoInit = count($portsSpecific) + 1;
for ($m = 0; $m < $nbPortsToAdd; $m++) {
$port = new Port();
$port->setInterfaceSpecific($value);
$port->setOrderNo($portOrderNoInit);
$port->setAlias($alias[$portOrderNoInit++]);
$em->persist($port);
$em->flush();
}
//END ADDED on 11 avril 2019
foreach ($value->getPort() as $p) {
$p->setAlias($alias[$k]);
$k++;
$em->persist($p);
$em->flush();
}
}
}
}
} else {
$if = new InterfaceGeneric();
$if->setEquipmentGeneric($eq);
$if->setInterfaceNumber($_POST['interfaceNumber'][$i]);
$if->setNumberOfPorts($_POST['numberOfPorts'][$i]);
$if->setTypeLink($this->getDoctrine()->getRepository('App\Entity\TypeLink')->findOneById($_POST['typeLink'][$i]));
if (isset($_POST['typeConnector']) && isset($_POST['typeConnector'][$i])) {
$if->setTypeConnector($this->getDoctrine()->getRepository('App\Entity\TypeConnector')->findOneById($_POST['typeConnector'][$i]));
}
$if->setTypeInterconnection($this->getDoctrine()->getRepository('App\Entity\TypeInterconnection')->findOneById($_POST['typeInterconnection'][$i]));
$if->setAlias($this->buildAlias($i));
$em->persist($if);
$em->flush();
foreach ($specific as $eq_specific) {
$interfaceSpecific = new InterfaceSpecific();
$interfaceSpecific->setEquipmentSpecific($eq_specific);
$interfaceSpecific->setInterfaceGeneric($if);
$alias = json_decode($if->getAlias(), true);
$em->persist($interfaceSpecific);
$em->flush();
// create ports
$numberOfPorts = $if->getNumberOfPorts();
for ($k = 1; $k <= $numberOfPorts; $k++) {
$port = new Port();
$port->setInterfaceSpecific($interfaceSpecific);
$port->setOrderNo($k);
if ($alias) {
$port->setAlias($alias[$k]);
}
$em->persist($port);
$em->flush();
}
}
}
}
if (strpos($request->query->get('ref'), "module") === 0) {
if (strpos($request->query->get('ref'), "moduleChassis") === 0) {
return $this->redirectToRoute('equipment_generic_modulaire_update', array('id' => $eq->getChassisParent()->getId()));
} else {
return $this->redirectToRoute('equipment_generic_module_list');
}
} else {
return $this->redirectToRoute('equipment_generic_list');
}
// if (!$specific){
//
// // remove existing interfaces
// $interfaces = $this->getDoctrine()->getRepository('App\Entity\InterfaceGeneric')->findByEquipmentGeneric($eq);
//
// foreach ($interfaces as $interface){
//
// $em->remove($interface);
// $em->flush();
//
// }
//
// // store interfaces
// $inter_num = $eq->getNumberOfInterfaces();
// for ($i = 0; $i < $inter_num; $i++){
//
// $if = new InterfaceGeneric();
//
// $if->setEquipmentGeneric($eq);
// $if->setInterfaceNumber($_POST['interfaceNumber'][$i]);
// $if->setNumberOfPorts($_POST['numberOfPorts'][$i]);
// $if->setTypeLink($this->getDoctrine()->getRepository('App\Entity\TypeLink')->findOneById($_POST['typeLink'][$i]));
// if (isset($_POST['typeConnector']) && isset($_POST['typeConnector'][$i])) {
// $if->setTypeConnector($this->getDoctrine()->getRepository('App\Entity\TypeConnector')->findOneById($_POST['typeConnector'][$i]));
// }
// $if->setTypeInterconnection($this->getDoctrine()->getRepository('App\Entity\TypeInterconnection')->findOneById($_POST['typeInterconnection'][$i]));
// // if ($_POST['typeLink'][$i] == "3") {
// $alias = [];
//
// for ($j = 1; $j<=count($_POST["port"][$i+1]); $j++){
// $alias[$j] = $_POST["port"][$i+1][$j-1] ? $_POST["port"][$i+1][$j-1] : "";
// }
// //var_dump($alias);
// if (!empty($alias)) {
// $alias = json_encode($alias);
// $alias = (string)$alias;
// } else {
// $alias = null;
// }
//
// $if->setAlias($alias);
// // }
// $em->persist($if);
// $em->flush();
//
// }
// if (strpos($request->query->get('ref'), "module") === 0 ) {
//
// return $this->redirectToRoute('equipment_generic_module_list');
// }
// else {
// return $this->redirectToRoute('equipment_generic_list');
// }
//
// }
} else {
// $em = $this->getDoctrine()->getManager();
// $eq = $em->getRepository(EquipmentGeneric::class)->find($id);
$typeLink = $this->getDoctrine()->getRepository('App\Entity\TypeLink')->findAll();
$typeConnector = $this->getDoctrine()->getRepository('App\Entity\TypeConnector')->findAll();
$typeInterconnection = $this->getDoctrine()->getRepository('App\Entity\TypeInterconnection')->findAll();
return $this->render('equipment/generic_edit_interfaces.html.twig', [
'action' => 'process',
'page_title' => $translator->trans('Generic Equipment Interfaces'),
'box_title' => '<i class="fa fa-edit fa-fw"></i> ' . $translator->trans('Edit'),
'path_process' => 'equipment_generic_update_process',
'typeLink' => $typeLink,
'typeConnector' => $typeConnector,
'typeInterconnection' => $typeInterconnection,
'eq' => $eq,
'inUse' => $inUse,
'ref' => $request->query->get('ref')
]);
}
}
/**
* @Route("/equipment/generic/interfaces/setNports/{id}", name="equipment_generic_interfaces_setNports")
*/
public function updateInterfacesSetNportsAction(Request $request, $id, TranslatorInterface $translator)
{
$user = $this->getUser();
$em = $this->getDoctrine()->getManager();
$eq = $em->getRepository(EquipmentGeneric::class)->find($id);
$interfaces = $this->getDoctrine()->getRepository('App\Entity\InterfaceGeneric')->findByEquipmentGeneric($eq);
// process form
if ($request->request->has('title') && ($user->hasRole("ROLE_SUPER_ADMIN") || $user->hasRole("ROLE_ADMIN"))) {
foreach ($interfaces as $interface) {
$intId = $interface->getId();
$noOfPorts = $interface->getNumberOfPorts();
$nPorts = [];
for ($i = 1; $i <= $noOfPorts; $i++) {
if (isset($_POST[$intId . '_' . $i])) {
$nPorts[] = $i;
}
}
if (!empty($nPorts)) {
$nPorts = json_encode($nPorts);
$nPorts = (string)$nPorts;
} else {
$nPorts = null;
}
$interface->setNPorts($nPorts);
$em->persist($interface);
$em->flush();
}
$error = [];
if (strpos($request->query->get('ref'), "module") === 0) {
if (strpos($request->query->get('ref'), "moduleChassis") === 0) {
return $this->redirectToRoute('equipment_generic_modulaire_update', array('id' => $eq->getChassisParent()->getId()));
} else {
return $this->redirectToRoute('equipment_generic_module_list', $error);
}
} else {
return $this->redirectToRoute('equipment_generic_list', $error);
}
} else {
foreach ($interfaces as $interface) {
$nPorts = $interface->getNPorts();
if ($nPorts) {
$nPorts = json_decode($interface->getNPorts());
} else {
$nPorts = null;
}
$interface->setNPorts($nPorts);
}
$typeLink = $this->getDoctrine()->getRepository('App\Entity\TypeLink')->findAll();
$typeConnector = $this->getDoctrine()->getRepository('App\Entity\TypeConnector')->findAll();
$typeInterconnection = $this->getDoctrine()->getRepository('App\Entity\TypeInterconnection')->findAll();
return $this->render('equipment/generic_edit_interfaces_setNports.html.twig', [
'action' => 'process',
'page_title' => $translator->trans('Generic Equipment Interfaces'),
'box_title' => '<i class="fa fa-edit fa-fw"></i> ' . $translator->trans('Edit'),
'path_process' => 'equipment_generic_update_process',
'typeLink' => $typeLink,
'typeConnector' => $typeConnector,
'typeInterconnection' => $typeInterconnection,
'eq' => $eq,
'interfaces' => $interfaces,
'ref' => $request->query->get('ref')
]);
}
}
/**
* @Route("/equipment/generic/interfaces/delete/{id}", name="equipment_generic_interfaces_delete")
*/
public function deleteInterfacesAction(Request $request, LoggerInterface $logger, $id, TranslatorInterface $translator)
{
//return $this->json('processing...');
$user = $this->getUser();
$em = $this->getDoctrine()->getManager();
$eq = $em->getRepository(EquipmentGeneric::class)->find($id);
// process form
if ($request->request->has('action') && ($user->hasRole("ROLE_SUPER_ADMIN") || $user->hasRole("ROLE_ADMIN"))) {
$em = $this->getDoctrine()->getManager();
$eq = $em->getRepository(EquipmentGeneric::class)->find($request->request->get('id'));
$numberOfInterfaces = $eq->getNumberOfInterfaces();
$interfacesGeneric = $eq->getInterfaceGeneric();
foreach ($interfacesGeneric as $interfaceGeneric) {
$id = $interfaceGeneric->getId();
if (isset($_POST['interface_' . $id])) {
$eq->removeInterfaceGeneric($interfaceGeneric);
$numberOfInterfaces--;
}
}
$eq->setNumberOfInterfaces($numberOfInterfaces);
$em->persist($eq);
$em->flush();
if (strpos($request->query->get('ref'), "module") === 0) {
return $this->redirectToRoute('equipment_generic_module_list');
} else {
return $this->redirectToRoute('equipment_generic_list');
}
} else {
$em = $this->getDoctrine()->getManager();
$eq = $em->getRepository(EquipmentGeneric::class)->find($id);
if($eq != null) {
$interfacesGeneric = $eq->getInterfaceGeneric();
foreach ($interfacesGeneric as $interfaceGeneric) {
$interfaceGeneric->inUse = 0;
$interfacesSpecific = $interfaceGeneric->getInterfaceSpecific();
foreach ($interfacesSpecific as $interfaceSpecific) {
if ($interfaceGeneric->inUse == 1) {
break;
}
$ports = $interfaceSpecific->getPort();
foreach ($ports as $port) {
$logger->info($port->getId());
$inUse = $this->isPortInUse($port);
if ($inUse) {
$logger->info("inuse=1");
$interfaceGeneric->inUse = 1;
break;
}
//port externe
else {
if ($port->getInterfaceSpecificPortExterne() != null) {
$ports = $port->getInterfaceSpecificPortExterne()->getPort();
foreach ($ports as $port) {
$logger->info("Port externe :");
$logger->info($port->getId());
$inUse = $this->isPortInUse($port);
if ($inUse) {
$logger->info("inuse=1");
$interfaceGeneric->inUse = 1;
break;
}
}
}
if ($port->getPortMpo() != null && $port->getPortMpo()->getInterfaceSpecificPortExterne() != null) {
$ports = $port->getPortMpo()->getInterfaceSpecificPortExterne()->getPort();
foreach ($ports as $port) {
$logger->info("Port MPO :");
$logger->info($port->getId());
$inUse = $this->isPortInUse($port);
if ($inUse) {
$logger->info("inuse=1");
$interfaceGeneric->inUse = 1;
break;
}
}
}
}
}
}
}
}
// foreach ($interfacesGeneric as $interfaceGeneric){
// $interfaceGeneric->inUse = 0;
// $interfacesSpecific = $interfaceGeneric->getInterfaceSpecific();
// foreach ($interfacesSpecific as $interfaceSpecific) {
// $ports = $interfaceSpecific->getPort();
// foreach ($ports as $port){
// $usedAtrunk = $this->getDoctrine()->getRepository('App\Entity\TrunkCableFiber')->findOneByPortA($port);
// $usedBtrunk = $this->getDoctrine()->getRepository('App\Entity\TrunkCableFiber')->findOneByPortB($port);
// $usedExt = $this->getDoctrine()->getRepository('App\Entity\TrunkExtension')->findOneByPortB($port);
// $usedALink = $this->getDoctrine()->getRepository('App\Entity\LinkExtension')->findOneByPortA($port);
// $usedBLink = $this->getDoctrine()->getRepository('App\Entity\LinkExtension')->findOneByPortB($port);
// if ($usedAtrunk || $usedBtrunk || $usedExt || $usedALink || $usedBLink){
// $interfaceGeneric->inUse = 1;
// }
// }
// }
// }
return $this->render('equipment/generic_delete_interfaces.html.twig', [
'page_title' => $translator->trans('Generic Equipment Interfaces'),
'box_title' => '<i class="fa fa-trash fa-fw"></i> Delete',
'eq' => $eq,
'ref' => $request->query->get('ref')
]);
}
}
private function isPortInUse($port)
{
$usedAtrunk = $this->getDoctrine()->getRepository('App\Entity\TrunkCableFiber')->findOneByPortA($port);
$usedBtrunk = $this->getDoctrine()->getRepository('App\Entity\TrunkCableFiber')->findOneByPortB($port);
$usedExt = $this->getDoctrine()->getRepository('App\Entity\TrunkExtension')->findOneByPortB($port);
$usedInLink = $this->getDoctrine()->getRepository('App\Entity\ExtensionOrder')->findOneByPort($port);
// $usedALink = $this->getDoctrine()->getRepository('App\Entity\LinkExtension')->findOneByPortA($port);
// if ($usedALink) {
// $logger->info("usedALink :" . $usedALink->getId());
// }
// $usedBLink = $this->getDoctrine()->getRepository('App\Entity\LinkExtension')->findOneByPortB($port);
// if ($usedBLink) {
// $logger->info("usedBLink :" . $usedBLink->getId());
// }
if ($usedAtrunk || $usedBtrunk || $usedExt || $usedInLink) {
return true;
}
return false;
}
/**
* @IsGranted("ROLE_CRUD")
* @Route("/equipment/generic/delete/{id}", name="equipment_generic_delete")
*/
public function deleteAction(Request $request, $id, TranslatorInterface $translator)
{
$em = $this->getDoctrine()->getManager();
$equipmentGen = $em->getRepository(EquipmentGeneric::class)->find($id);
// find in usage
$specific = $em->getRepository(EquipmentSpecific::class)->findByEquipmentGeneric($equipmentGen);
if (!$specific) {
$conn = $em->getConnection();
$sql = "update equipment_generic set chassis_module_id=null where id = " . $equipmentGen->getId();
// $extIds = [$temp[0]->getExtremityA()->getId(), $temp[0]->getExtremityB()->getId()];
$stmt = $conn->prepare($sql);
$stmt->execute();
$sql = "delete from equipment_modulaire where module_id=" . $equipmentGen->getId() . " or parent_id=" . $equipmentGen->getId();
$stmt = $conn->prepare($sql);
$stmt->execute();
$em->remove($equipmentGen);
$em->flush();
$error = [];
} else {
$error = array('error' => 'usage');
}
if (strpos($request->headers->get('referer'), "module") == true) {
return $this->redirectToRoute('equipment_generic_module_list', $error);
} elseif (strpos($request->headers->get('referer'), "modulaire") == true) {
return $this->redirectToRoute('equipment_generic_modulaire_list', $error);
} else {
return $this->redirectToRoute('equipment_generic_list', $error);
}
}
/**
* @Route("/equipment/generic/module/create", name="equipment_generic_module_create")
*/
public function createModuleAction(Request $request, TranslatorInterface $translator)
{
$user = $this->getUser();
// process form
if ($request->request->has('title') && ($user->hasRole("ROLE_SUPER_ADMIN") || $user->hasRole("ROLE_ADMIN"))) {
// var_dump($request->request->all());
$em = $this->getDoctrine()->getManager();
$eq = new EquipmentGeneric();
$eq->setTitle($request->request->get('title'));
$eq->setNumberOfUnits($request->request->get('numberOfUnits'));
$eq->setNumberOfInterfaces($request->request->get('numberOfInterfaces'));
$eq->setIsModule(true);
$eq->setType($this->getDoctrine()->getRepository('App\Entity\TypeEquipment')->findOneById($request->request->get('typeEquipment')));
foreach ($request->request->get('parent') as $key => $value) {
// var_dump($value);
$eq->addParent($this->getDoctrine()->getRepository('App\Entity\EquipmentGeneric')->find($value));
}
// var_dump($request->request->get('parent'));
$upload_dir = $_SERVER['DOCUMENT_ROOT'] . '/uploads/';
if (is_uploaded_file($_FILES['frontImage']['tmp_name'])) {
// NEW FRONT IMAGE
$uploadedImage = $_FILES['frontImage'];
$file = $uploadedImage['tmp_name'];
$path_parts = pathinfo($uploadedImage['name']);
$extension = $path_parts['extension'];
$fileNameImg = md5(uniqid()) . '.' . $extension;
$fullPathImage = $upload_dir . $fileNameImg;
move_uploaded_file($file, $fullPathImage);
$eq->setFrontImage($fileNameImg);
}
if (is_uploaded_file($_FILES['rearImage']['tmp_name'])) {
// NEW REAR IMAGE
$uploadedImage = $_FILES['rearImage'];
$file = $uploadedImage['tmp_name'];
$path_parts = pathinfo($uploadedImage['name']);
$extension = $path_parts['extension'];
$fileNameImg = md5(uniqid()) . '.' . $extension;
$fullPathImage = $upload_dir . $fileNameImg;
move_uploaded_file($file, $fullPathImage);
$eq->setRearImage($fileNameImg);
}
$em->persist($eq);
$em->flush();
// store interfaces
$inter_num = $eq->getNumberOfInterfaces();
for ($i = 0; $i < $inter_num; $i++) {
$if = new InterfaceGeneric();
$if->setEquipmentGeneric($eq);
$if->setInterfaceNumber($_POST['interfaceNumber'][$i]);
$if->setNumberOfPorts($_POST['numberOfPorts'][$i]);
$if->setTypeLink($this->getDoctrine()->getRepository('App\Entity\TypeLink')->findOneById($_POST['typeLink'][$i]));
// $if->setTypeConnector($this->getDoctrine()->getRepository('App\Entity\TypeConnector')->findOneById($_POST['typeConnector'][$i]));
// $if->setTypeInterconnection($this->getDoctrine()->getRepository('App\Entity\TypeInterconnection')->findOneById($_POST['typeInterconnection'][$i]));
if ($_POST['typeConnector'][$i]) {
$if->setTypeConnector($this->getDoctrine()->getRepository('App\Entity\TypeConnector')->findOneById($_POST['typeConnector'][$i]));
}
if ($_POST['typeInterconnection'][$i]) {
$if->setTypeInterconnection($this->getDoctrine()->getRepository('App\Entity\TypeInterconnection')->findOneById($_POST['typeInterconnection'][$i]));
} else {
$if->setTypeInterconnection($this->getDoctrine()->getRepository('App\Entity\TypeInterconnection')->findOneById(1));
}
$if->setAlias($this->buildAlias($i));
$em->persist($if);
$em->flush();
}
return $this->redirectToRoute('equipment_generic_module_list');
// show form
} else {
$typeLink = $this->getDoctrine()->getRepository('App\Entity\TypeLink')->findAll();
$typeConnector = $this->getDoctrine()->getRepository('App\Entity\TypeConnector')->findAll();
$typeInterconnection = $this->getDoctrine()->getRepository('App\Entity\TypeInterconnection')->findAll();
$eqGenericModulaire = $this->getDoctrine()->getRepository(EquipmentGeneric::class)->findBy(["isModulaire" => true], ['title' => 'ASC']);
$typeEquipments = $this->getDoctrine()->getRepository('App\Entity\TypeEquipment')->findAll();
return $this->render('equipment/module_create.html.twig', [
'action' => 'insert',
'page_title' => $translator->trans('Generic Equipment'),
'box_title' => '<i class="fa fa-plus-circle fa-fw"></i>' . $translator->trans('Add new'),
'typeLink' => $typeLink,
'typeConnector' => $typeConnector,
'typeEquipments' => $typeEquipments,
'typeInterconnection' => $typeInterconnection,
'eqGenericModulaireList' => $eqGenericModulaire
]);
}
}
/**
* @Route("/equipment/generic/module/list", name="equipment_generic_module_list")
*/
public function listModuleAction(Request $request, TranslatorInterface $translator)
{
$list = $this->getDoctrine()->getRepository(EquipmentGeneric::class)->findBy(["isModule" => true]);
// $em = $this->getDoctrine()->getManager();
// $queryBuilder = $em->createQueryBuilder()
// ->select('eqg')
// ->from('App\Entity\EquipmentGeneric', 'eqg')
// ->where("eqg.isModule = :isModule")
// ->setParameter("isModule", true)
// ->orderBy("eqg.title", "ASC");
// $adapter = new DoctrineORMAdapter($queryBuilder);
// $pagerfanta = new Pagerfanta($adapter);
// $pageLength = $request->query->get("pageLength", $this->getParameter("eqg.maxPerPage"));
// if ($pageLength == "Tout") {
// $qb = $em->createQueryBuilder()
// ->select('COUNT(eqg.id)')
// ->from('App\Entity\EquipmentGeneric', 'eqg')
// ->where("eqg.isModule = :isModule")
// ->setParameter("isModule", true)
// ->orderBy("eqg.title", "ASC");
//
// $count = $qb->getQuery()->getSingleScalarResult();
// $pagerfanta->setMaxPerPage($count); // 10 by default
// }
// else {
// $pagerfanta->setMaxPerPage($pageLength); // 10 by default
// }
// $page = $request->query->get("page", 1);
// $pagerfanta->setCurrentPage($page);
return $this->render('equipment/module_list.html.twig', [
'action' => 'list',
'page_title' => $translator->trans('Equipement Générique Module'),
'path_default' => 'equipment_generic_module_create',
'path_show_equipement' => 'module_show_equipement_specifique',
'path_update' => 'equipment_generic_module_update',
'path_delete' => 'equipment_generic_delete',
'list' => $list,
// 'my_pager' => $pagerfanta,
// 'pageLength' => $pageLength,
]);
}
/**
* @Route("/equipment/generic/module/list/equipement/{id}", name="module_show_equipement_specifique")
*/
public function listEquipementModuleAction(Request $request, $id, TranslatorInterface $translator)
{
$eqGenerics = $this->getDoctrine()->getRepository('App\Entity\EquipmentGeneric')->findBy(["isModule" => false, "isModulaire" => false]);
$tempRack = $this->getDoctrine()->getRepository('App\Entity\Rack')->findOneByTitle("Temp");
$eqModulaires = $this->getDoctrine()->getRepository('App\Entity\EquipmentSpecific')->findBy(["rack" => $tempRack, "isModulaire" => true]);
$racks = $this->getDoctrine()->getRepository('App\Entity\Rack')->findAll();
$rackFaces = $this->getDoctrine()->getRepository('App\Entity\RackFace')->findAll();
// $list = $this->getDoctrine()->getRepository(EquipmentSpecific::class)->findByEquipmentGeneric($id);
$list = $this->getDoctrine()->getRepository(EquipmentSpecific::class)->findEquipmentsModulaireByEquipmentGeneric($id);
$listEqs = array();
foreach ($list as $eq) {
$listEqs[] = $this->getDoctrine()->getRepository('App\Entity\EquipmentSpecific')->find($eq['id']);
}
return $this->render('equipment/specific_modulaire_list.html.twig', [
'action' => 'list',
'page_title' => $translator->trans('Liste des équipements spécifique'),
'path_show_equipement' => 'module_show_equipement_specifique',
'path_default' => 'equipment_specific_create',
'path_update' => 'equipment_specific_update',
'path_delete' => 'equipment_specific_delete',
'eqGenerics' => $eqGenerics,
'eqModulaires' => $eqModulaires,
'list' => $listEqs,
'racks'=> $racks,
'rackFaces'=> $rackFaces
]);
}
/**
* @Route("/equipment/generic/module/edit/{id}", name="equipment_generic_module_update")
*/
public function updateModuleAction(Request $request, $id, TranslatorInterface $translator)
{
$user = $this->getUser();
$error = array();
$em = $this->getDoctrine()->getManager();
$eq = $em->getRepository(EquipmentGeneric::class)->find($id);
$specific = $em->getRepository(EquipmentSpecific::class)->findByEquipmentGeneric($eq);
if ($specific) {
$inUse = 1;
} else {
$inUse = 0;
}
$current_no_interfaces = $eq->getNumberOfInterfaces();
$new_no_interfaces = $request->request->get('numberOfInterfaces');
// process form
if ($request->request->has('title') && ($user->hasRole("ROLE_SUPER_ADMIN") || $user->hasRole("ROLE_ADMIN"))) {
$upload_dir = $_SERVER['DOCUMENT_ROOT'] . '/uploads/';
if (is_uploaded_file($_FILES['frontImage']['tmp_name'])) {
// DELETE OLD FRONT IMAGE
$currentFrontImg = $eq->getFrontImage();
if ($currentFrontImg) {
unlink($upload_dir . $currentFrontImg);
}
// NEW FRONT IMAGE
$uploadedImage = $_FILES['frontImage'];
$file = $uploadedImage['tmp_name'];
$path_parts = pathinfo($uploadedImage['name']);
$extension = $path_parts['extension'];
$fileNameImg = md5(uniqid()) . '.' . $extension;
$fullPathImage = $upload_dir . $fileNameImg;
move_uploaded_file($file, $fullPathImage);
$eq->setFrontImage($fileNameImg);
}
if (is_uploaded_file($_FILES['rearImage']['tmp_name'])) {
// DELETE OLD FRONT IMAGE
$currentRearImg = $eq->getRearImage();
if ($currentRearImg) {
unlink($upload_dir . $currentRearImg);
}
// NEW REAR IMAGE
$uploadedImage = $_FILES['rearImage'];
$file = $uploadedImage['tmp_name'];
$path_parts = pathinfo($uploadedImage['name']);
$extension = $path_parts['extension'];
$fileNameImg = md5(uniqid()) . '.' . $extension;
$fullPathImage = $upload_dir . $fileNameImg;
move_uploaded_file($file, $fullPathImage);
$eq->setRearImage($fileNameImg);
}
$redirect = $request->request->get('redirect');
if ($specific) {
$eq->setTitle($request->request->get('title'));
$eq->setType($this->getDoctrine()->getRepository('App\Entity\TypeEquipment')->findOneById($request->request->get('typeEquipment')));
if ($new_no_interfaces >= $current_no_interfaces) {
$eq->setNumberOfInterfaces($request->request->get('numberOfInterfaces'));
}
$parIds = array();
foreach ($eq->getParents() as $parent) {
$parIds[] = $parent->getId();
}
$newParIds = array();
foreach ($request->request->get('parent') as $key => $value) {
// var_dump($value);
$newParIds[] = $value;
$eq->addParent($this->getDoctrine()->getRepository('App\Entity\EquipmentGeneric')->find($value));
}
$parToDelete = array_diff($parIds, $newParIds);
foreach ($parToDelete as $par) {
$tmpError = array();
$tempSpe = $em->getRepository(EquipmentSpecific::class)->findByEquipmentGeneric($par);
foreach ($tempSpe as $tmp) {
foreach ($tmp->getModules() as $tmpMod) {
if ($tmpMod->getEquipmentGeneric()->getId() == $id) {
$tmpError = array('error' => 'title');
break;
}
}
if (count($tmpError) > 0) {
break;
}
}
if (count($tmpError) == 0) {
$conn = $em->getConnection();
$sql = "delete from equipment_modulaire where parent_id=" . $par . " and module_id=" . $id;
$stmt = $conn->prepare($sql);
$stmt->execute();
} else {
$error = array('error' => 'title');
}
}
$em->persist($eq);
$em->flush();
// $error = array('error' => 'title');
if ($redirect == 0) {
return $this->redirectToRoute('equipment_generic_module_list', $error);
} else {
return $this->redirectToRoute('equipment_generic_interfaces_update', array('id' => $eq->getId(), 'ref' => 'module'));
}
} else {
$eq->setTitle($request->request->get('title'));
$eq->setNumberOfUnits($request->request->get('numberOfUnits'));
$eq->setNumberOfInterfaces($request->request->get('numberOfInterfaces'));
$eq->setType($this->getDoctrine()->getRepository('App\Entity\TypeEquipment')->findOneById($request->request->get('typeEquipment')));
//delete all the Parents
$conn = $em->getConnection();
$sql = "delete from equipment_modulaire where module_id=" . $id;
$stmt = $conn->prepare($sql);
$stmt->execute();
foreach ($request->request->get('parent') as $key => $value) {
// var_dump($value);
$eq->addParent($this->getDoctrine()->getRepository('App\Entity\EquipmentGeneric')->find($value));
}
// delete generic interfaces
if ($new_no_interfaces < $current_no_interfaces) {
$i = 1;
$interfaces = $eq->getInterfaceGeneric();
foreach ($interfaces as $interface) {
if ($i > $new_no_interfaces) {
$em->remove($interface);
$em->flush();
}
$i++;
}
}
$em->persist($eq);
$em->flush();
if ($redirect == 0) {
return $this->redirectToRoute('equipment_generic_module_list');
} else {
return $this->redirectToRoute('equipment_generic_interfaces_update', array('id' => $eq->getId(), 'ref' => 'module'));
}
}
} else {
$em = $this->getDoctrine()->getManager();
$eq = $em->getRepository(EquipmentGeneric::class)->find($id);
$typeEquipments = $this->getDoctrine()->getRepository('App\Entity\TypeEquipment')->findAll();
$typeLink = $this->getDoctrine()->getRepository('App\Entity\TypeLink')->findAll();
$typeConnector = $this->getDoctrine()->getRepository('App\Entity\TypeConnector')->findAll();
$typeInterconnection = $this->getDoctrine()->getRepository('App\Entity\TypeInterconnection')->findAll();
$eqCurrentParents = $eq->getParents();
$eqGenericModulaireTemp = $this->getDoctrine()->getRepository(EquipmentGeneric::class)->findBy(["isModulaire" => true], ['title' => 'ASC']);
$eqGenericModulaire = array_filter($eqGenericModulaireTemp, function ($eq) use ($eqCurrentParents) {
foreach ($eqCurrentParents as $parent) {
if ($eq->getId() == $parent->getId()) {
return false;
}
}
return true;
});
return $this->render('equipment/generic_module_edit.html.twig', [
'action' => 'process',
'page_title' => $translator->trans('Generic Equipment'),
'box_title' => '<i class="fa fa-edit fa-fw"></i> ' . $translator->trans('Edit'),
'path_process' => 'equipment_generic_module_update',
'typeLink' => $typeLink,
'typeConnector' => $typeConnector,
'typeEquipments' => $typeEquipments,
'typeInterconnection' => $typeInterconnection,
'eq' => $eq,
'inUse' => $inUse,
'eqGenericModulaireList' => $eqGenericModulaire,
"eqCurrentParents" => $eqCurrentParents
]);
}
}
/**
* @Route("/equipment/generic/modulaire/create", name="equipment_generic_modulaire_create")
*/
public function createModulaireAction(Request $request, TranslatorInterface $translator)
{
$user = $this->getUser();
// process form
if ($request->request->has('title') && ($user->hasRole("ROLE_SUPER_ADMIN") || $user->hasRole("ROLE_ADMIN"))) {
$em = $this->getDoctrine()->getManager();
$eq = new EquipmentGeneric();
$eq->setTitle($request->request->get('title'));
$eq->setNumberOfUnits($request->request->get('numberOfUnits'));
$eq->setNumberOfSlots($request->request->get('numberOfSlots'));
$eq->setIsModulaire(true);
$eq->setType($this->getDoctrine()->getRepository('App\Entity\TypeEquipment')->findOneById($request->request->get('typeEquipment')));
$upload_dir = $_SERVER['DOCUMENT_ROOT'] . '/uploads/';
if (is_uploaded_file($_FILES['frontImage']['tmp_name'])) {
// NEW FRONT IMAGE
$uploadedImage = $_FILES['frontImage'];
$file = $uploadedImage['tmp_name'];
$path_parts = pathinfo($uploadedImage['name']);
$extension = $path_parts['extension'];
$fileNameImg = md5(uniqid()) . '.' . $extension;
$fullPathImage = $upload_dir . $fileNameImg;
move_uploaded_file($file, $fullPathImage);
$eq->setFrontImage($fileNameImg);
}
if (is_uploaded_file($_FILES['rearImage']['tmp_name'])) {
// NEW REAR IMAGE
$uploadedImage = $_FILES['rearImage'];
$file = $uploadedImage['tmp_name'];
$path_parts = pathinfo($uploadedImage['name']);
$extension = $path_parts['extension'];
$fileNameImg = md5(uniqid()) . '.' . $extension;
$fullPathImage = $upload_dir . $fileNameImg;
move_uploaded_file($file, $fullPathImage);
$eq->setRearImage($fileNameImg);
}
if ($request->request->get('moduleChassis')) {
$chassisModule = new EquipmentGeneric();
$chassisModule->setTitle($request->request->get('moduleTitle'));
$chassisModule->setNumberOfUnits(1);
$chassisModule->setNumberOfInterfaces($request->request->get('moduleNumberOfInterfaces'));
$chassisModule->setIsChassisModule(true);
$eq->setChassisModule($chassisModule);
$em->persist($eq);
// store interfaces
$inter_num = $chassisModule->getNumberOfInterfaces();
for ($i = 0; $i < $inter_num; $i++) {
$if = new InterfaceGeneric();
$if->setEquipmentGeneric($chassisModule);
$if->setInterfaceNumber($_POST['interfaceNumber'][$i]);
$if->setNumberOfPorts($_POST['numberOfPorts'][$i]);
$if->setTypeLink($this->getDoctrine()->getRepository('App\Entity\TypeLink')->findOneById($_POST['typeLink'][$i]));
// $if->setTypeConnector($this->getDoctrine()->getRepository('App\Entity\TypeConnector')->findOneById($_POST['typeConnector'][$i]));
// $if->setTypeInterconnection($this->getDoctrine()->getRepository('App\Entity\TypeInterconnection')->findOneById($_POST['typeInterconnection'][$i]));
if ($_POST['typeConnector'][$i]) {
$if->setTypeConnector($this->getDoctrine()->getRepository('App\Entity\TypeConnector')->findOneById($_POST['typeConnector'][$i]));
}
if ($_POST['typeInterconnection'][$i]) {
$if->setTypeInterconnection($this->getDoctrine()->getRepository('App\Entity\TypeInterconnection')->findOneById($_POST['typeInterconnection'][$i]));
} else {
$if->setTypeInterconnection($this->getDoctrine()->getRepository('App\Entity\TypeInterconnection')->findOneById(1));
}
$if->setAlias($this->buildAlias($i));
$em->persist($if);
$em->flush();
}
}
else{
$em->persist($eq);
}
$em->flush();
return $this->redirectToRoute('equipment_generic_modulaire_list');
// show form
} else {
$typeEquipments = $this->getDoctrine()->getRepository('App\Entity\TypeEquipment')->findAll();
$typeLink = $this->getDoctrine()->getRepository('App\Entity\TypeLink')->findAll();
$typeConnector = $this->getDoctrine()->getRepository('App\Entity\TypeConnector')->findAll();
$typeInterconnection = $this->getDoctrine()->getRepository('App\Entity\TypeInterconnection')->findAll();
return $this->render('equipment/modulaire_create.html.twig', [
'action' => 'insert',
'page_title' => $translator->trans('Equipement Générique Modulaire'),
'box_title' => '<i class="fa fa-plus-circle fa-fw"></i>' . $translator->trans('Add new'),
'typeLink' => $typeLink,
'typeConnector' => $typeConnector,
'typeEquipments' => $typeEquipments,
'typeInterconnection' => $typeInterconnection,
]);
}
}
/**
* @Route("/equipment/generic/modulaire/list", name="equipment_generic_modulaire_list")
*/
public function listModulaireAction(Request $request, TranslatorInterface $translator)
{
$list = $this->getDoctrine()->getRepository(EquipmentGeneric::class)->findBy(["isModulaire" => true]);
// $em = $this->getDoctrine()->getManager();
// $queryBuilder = $em->createQueryBuilder()
// ->select('eqg')
// ->from('App\Entity\EquipmentGeneric', 'eqg')
// ->where("eqg.isModulaire = :isModulaire")
// ->setParameter("isModulaire", true)
// ->orderBy("eqg.title", "ASC");
// $adapter = new DoctrineORMAdapter($queryBuilder);
// $pagerfanta = new Pagerfanta($adapter);
// $pageLength = $request->query->get("pageLength", $this->getParameter("eqg.maxPerPage"));
// if ($pageLength == "Tout") {
// $qb = $em->createQueryBuilder()
// ->select('COUNT(eqg.id)')
// ->from('App\Entity\EquipmentGeneric', 'eqg')
// ->where("eqg.isModulaire = :isModulaire")
// ->setParameter("isModulaire", true)
// ->orderBy("eqg.title", "ASC");
//
// $count = $qb->getQuery()->getSingleScalarResult();
// $pagerfanta->setMaxPerPage($count); // 10 by default
// }
// else {
// $pagerfanta->setMaxPerPage($pageLength); // 10 by default
// }
// $page = $request->query->get("page", 1);
// $pagerfanta->setCurrentPage($page);
return $this->render('equipment/modulaire_list.html.twig', [
'action' => 'list',
'page_title' => $translator->trans('Equipement Générique Modulaire'),
'path_default' => 'equipment_generic_modulaire_create',
'path_update' => 'equipment_generic_modulaire_update',
'path_delete' => 'equipment_generic_delete',
'list' => $list,
// 'my_pager' => $pagerfanta,
// 'pageLength' => $pageLength,
]);
}
/**
* @Route("/equipment/generic/modulaire/edit/{id}", name="equipment_generic_modulaire_update")
*/
public function updateModulaireAction(Request $request, $id, TranslatorInterface $translator)
{
$user = $this->getUser();
$em = $this->getDoctrine()->getManager();
$eq = $em->getRepository(EquipmentGeneric::class)->find($id);
$specific = $em->getRepository(EquipmentSpecific::class)->findByEquipmentGeneric($eq);
if ($specific) {
$inUse = 1;
} else {
$inUse = 0;
}
$current_no_slots = $eq->getNumberOfSlots();
$new_no_slots = $request->request->get('numberOfSlots');
// process form
if ($request->request->has('title') && ($user->hasRole("ROLE_SUPER_ADMIN") || $user->hasRole("ROLE_ADMIN"))) {
$upload_dir = $_SERVER['DOCUMENT_ROOT'] . '/uploads/';
if (is_uploaded_file($_FILES['frontImage']['tmp_name'])) {
// DELETE OLD FRONT IMAGE
$currentFrontImg = $eq->getFrontImage();
if ($currentFrontImg) {
unlink($upload_dir . $currentFrontImg);
}
// NEW FRONT IMAGE
$uploadedImage = $_FILES['frontImage'];
$file = $uploadedImage['tmp_name'];
$path_parts = pathinfo($uploadedImage['name']);
$extension = $path_parts['extension'];
$fileNameImg = md5(uniqid()) . '.' . $extension;
$fullPathImage = $upload_dir . $fileNameImg;
move_uploaded_file($file, $fullPathImage);
$eq->setFrontImage($fileNameImg);
}
if (is_uploaded_file($_FILES['rearImage']['tmp_name'])) {
// DELETE OLD FRONT IMAGE
$currentRearImg = $eq->getRearImage();
if ($currentRearImg) {
unlink($upload_dir . $currentRearImg);
}
// NEW REAR IMAGE
$uploadedImage = $_FILES['rearImage'];
$file = $uploadedImage['tmp_name'];
$path_parts = pathinfo($uploadedImage['name']);
$extension = $path_parts['extension'];
$fileNameImg = md5(uniqid()) . '.' . $extension;
$fullPathImage = $upload_dir . $fileNameImg;
move_uploaded_file($file, $fullPathImage);
$eq->setRearImage($fileNameImg);
}
$redirect = $request->request->get('redirect');
if ($specific) {
$eq->setTitle($request->request->get('title'));
$eq->setType($this->getDoctrine()->getRepository('App\Entity\TypeEquipment')->findOneById($request->request->get('typeEquipment')));
if ($new_no_slots >= $current_no_slots) {
$eq->setNumberOfSlots($request->request->get('numberOfSlots'));
}
$em->persist($eq);
$em->flush();
$error = array('error' => 'title');
if ($redirect == 0) {
return $this->redirectToRoute('equipment_generic_modulaire_list', $error);
}
// return $this->redirectToRoute('equipment_generic_modulaire_list');
} else {
$eq->setTitle($request->request->get('title'));
$eq->setNumberOfUnits($request->request->get('numberOfUnits'));
$eq->setNumberOfSlots($request->request->get('numberOfSlots'));
$eq->setType($this->getDoctrine()->getRepository('App\Entity\TypeEquipment')->findOneById($request->request->get('typeEquipment')));
$em->persist($eq);
$em->flush();
if ($redirect == 0) {
return $this->redirectToRoute('equipment_generic_modulaire_list');
}
}
} else {
$em = $this->getDoctrine()->getManager();
$eq = $em->getRepository(EquipmentGeneric::class)->find($id);
$typeEquipments = $this->getDoctrine()->getRepository('App\Entity\TypeEquipment')->findAll();
return $this->render('equipment/generic_modulaire_edit.html.twig', [
'action' => 'process',
'page_title' => $translator->trans('Equipement générique modulaire'),
'box_title' => '<i class="fa fa-edit fa-fw"></i> ' . $translator->trans('Edit'),
'path_process' => 'equipment_generic_modulaire_update',
'path_update_chassis_module' => 'chassis_module_update',
'path_delete_chassis_module' => 'chassis_module_delete',
'eq' => $eq,
'typeEquipments' => $typeEquipments,
'inUse' => $inUse
]);
}
}
/**
* @Route("/equipment/generic/chassis/module/edit/{id}", name="chassis_module_update")
*/
public function updateChassisModuleAction(Request $request, $id, TranslatorInterface $translator)
{
$user = $this->getUser();
$error = array();
$em = $this->getDoctrine()->getManager();
$eq = $em->getRepository(EquipmentGeneric::class)->find($id);
$specific = $em->getRepository(EquipmentSpecific::class)->findByEquipmentGeneric($eq);
if ($specific) {
$inUse = 1;
} else {
$inUse = 0;
}
$current_no_interfaces = $eq->getNumberOfInterfaces();
$new_no_interfaces = $request->request->get('numberOfInterfaces');
// process form
if ($request->request->has('title') && ($user->hasRole("ROLE_SUPER_ADMIN") || $user->hasRole("ROLE_ADMIN"))) {
$redirect = $request->request->get('redirect');
if ($specific) {
$eq->setTitle($request->request->get('title'));
if ($new_no_interfaces >= $current_no_interfaces) {
$eq->setNumberOfInterfaces($request->request->get('numberOfInterfaces'));
}
$em->persist($eq);
$em->flush();
// $error = array('error' => 'title');
if ($redirect == 0) {
return $this->redirectToRoute('equipment_generic_modulaire_update', array('id' => $eq->getChassisParent()->getId()));
} else {
return $this->redirectToRoute('equipment_generic_interfaces_update', array('id' => $eq->getId(), 'ref' => 'moduleChassis'));
}
} else {
$eq->setTitle($request->request->get('title'));
$eq->setNumberOfInterfaces($request->request->get('numberOfInterfaces'));
// delete generic interfaces
if ($new_no_interfaces < $current_no_interfaces) {
$i = 1;
$interfaces = $eq->getInterfaceGeneric();
foreach ($interfaces as $interface) {
if ($i > $new_no_interfaces) {
$em->remove($interface);
$em->flush();
}
$i++;
}
}
$em->persist($eq);
$em->flush();
if ($redirect == 0) {
return $this->redirectToRoute('equipment_generic_modulaire_update', array('id' => $eq->getChassisParent()->getId()));
} else {
return $this->redirectToRoute('equipment_generic_interfaces_update', array('id' => $eq->getId(), 'ref' => 'moduleChassis'));
}
}
} else {
$em = $this->getDoctrine()->getManager();
$eq = $em->getRepository(EquipmentGeneric::class)->find($id);
$typeLink = $this->getDoctrine()->getRepository('App\Entity\TypeLink')->findAll();
$typeConnector = $this->getDoctrine()->getRepository('App\Entity\TypeConnector')->findAll();
$typeInterconnection = $this->getDoctrine()->getRepository('App\Entity\TypeInterconnection')->findAll();
return $this->render('equipment/chassis_module_edit.html.twig', [
'action' => 'process',
'page_title' => $translator->trans('Chassis Module'),
'box_title' => '<i class="fa fa-edit fa-fw"></i> ' . $translator->trans('Edit'),
'path_process' => 'chassis_module_update',
'typeLink' => $typeLink,
'typeConnector' => $typeConnector,
'typeInterconnection' => $typeInterconnection,
'eq' => $eq,
'inUse' => $inUse
]);
}
}
/**
* @IsGranted("ROLE_CRUD")
* @Route("/equipment/generic/chassis/module/delete/{id}", name="chassis_module_delete")
*/
public function deleteChassisModuleAction(Request $request, $id, TranslatorInterface $translator)
{
$em = $this->getDoctrine()->getManager();
$equipmentGen = $em->getRepository(EquipmentGeneric::class)->find($id);
$chassisId = $equipmentGen->getChassisParent()->getId();
// find in usage
$error = ['id' => $chassisId];
$specific = $em->getRepository(EquipmentSpecific::class)->findByEquipmentGeneric($equipmentGen);
if (!$specific) {
$em->remove($equipmentGen);
$em->flush();
} else {
$error = array('id' => $chassisId, 'error' => 'usage');
}
return $this->redirectToRoute('equipment_generic_modulaire_update', $error);
}
/**
* @Route("/equipment/generic/findTitleDuplicate", name="ajax_find_generic_title")
*/
public function findTitleDuplicate()
{
$eq = $this->getDoctrine()->getRepository('App\Entity\EquipmentGeneric')->findOneByTitle($_POST['title']);
if ($eq) {
$response = 1;
} else {
$response = 0;
}
return $this->json($response);
}
/**
* @Route("/equipment/generic/findTitleDuplicateOther", name="ajax_find_generic_title_other")
*/
public function findTitleDuplicateOther()
{
$response = $this->getDoctrine()->getRepository('App\Entity\EquipmentGeneric')->findTitleDuplicateOther($_POST['title'], $_POST['id']);
return $this->json($response);
}
}