<?php
namespace App\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\Routing\Annotation\Route;
use App\Entity\PortExterne;
use App\Entity\Port;
use App\Entity\TypeConnector;
use App\Entity\TypeLink;
use App\Entity\InterfaceGeneric;
use App\Entity\EquipmentGeneric;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Security;
use Symfony\Component\HttpFoundation\Request;
use Pagerfanta\Pagerfanta;
// use Pagerfanta\Adapter\DoctrineORMAdapter;
use Symfony\Contracts\Translation\TranslatorInterface;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\IsGranted;
class PortExterneController extends AbstractController
{
/**
* @Route("/settings/settings/port-externe/create", name="port_externe_create")
*/
public function createAction(Request $request, TranslatorInterface $translator)
{
$user = $this->getUser();
// process form
if ($request->request->has('reference') && ($user->hasRole("ROLE_SUPER_ADMIN") || $user->hasRole("ROLE_ADMIN"))){
$em = $this->getDoctrine()->getManager();
$pe = new PortExterne();
$pe->setReference($request->request->get('reference'));
if ($request->request->get('application')) {
$pe->setApplication($request->request->get('application'));
}
if ($request->request->get('formFactor')) {
$pe->setFormFactor($request->request->get('formFactor'));
}
if ($request->request->get('distanceMax')) {
$pe->setDistanceMax($request->request->get('distanceMax'));
}
if ($request->request->get('debitMax')) {
$pe->setDebitMax($request->request->get('debitMax'));
}
if ($request->request->get('longeurOnde')) {
$pe->setLongeurOnde($request->request->get('longeurOnde'));
}
if ($request->request->get('marque')) {
$pe->setMarque($request->request->get('marque'));
}
$pe->setTypeConnector($this->getDoctrine()->getRepository('App\Entity\TypeConnector')->findOneById($request->request->get('typeConnector')));
$pe->setTypeLink($this->getDoctrine()->getRepository('App\Entity\TypeLink')->findOneById($request->request->get('typeLink')));
if ($request->request->get('sfpMpo')) {
$if = new InterfaceGeneric();
$this->createInterfaceGeneric($em, $if);
$pe->setInterfaceGeneric($if);
}
// $pe->setInterfaceGeneric($if);
$em->persist($pe);
$em->flush();
return $this->redirectToRoute('port_externe_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();
return $this->render('port_externe/create.html.twig', [
'action' => 'insert',
'page_title' => $translator->trans('Port Externe'),
'box_title' => '<i class="fa fa-plus-circle fa-fw"></i>'.$translator->trans('Add new'),
'typeLink' => $typeLink,
'typeConnector' => $typeConnector,
'typeInterconnection' => $typeInterconnection
]);
}
}
private function createInterfaceGeneric($entityManager, &$interfaceGeneric){
$interfaceGeneric->setEquipmentGeneric(null);
$interfaceGeneric->setInterfaceNumber($_POST['interfaceNumber']);
$interfaceGeneric->setNumberOfPorts($_POST['interfaceNumberOfPorts']);
$interfaceGeneric->setTypeLink($this->getDoctrine()->getRepository('App\Entity\TypeLink')->findOneById($_POST['interfaceTypeLink']));
if ($_POST['interfaceTypeConnector']) {
$interfaceGeneric->setTypeConnector($this->getDoctrine()->getRepository('App\Entity\TypeConnector')->findOneById($_POST['interfaceTypeConnector']));
}
$interfaceGeneric->setTypeInterconnection($this->getDoctrine()->getRepository('App\Entity\TypeInterconnection')->findOneById($_POST['interfaceTypeInterconnection']));
$alias = [];
for ($j = 1; $j<=count($_POST["port"]); $j++){
if (isset($_POST["port"][$j-1])) {
$alias[$j] = $_POST["port"][$j-1];
}
else {
$alias[$j] = "";
}
}
if (!empty($alias)) {
$alias = json_encode($alias);
$alias = (string)$alias;
} else {
$alias = null;
}
$interfaceGeneric->setAlias($alias);
$entityManager->persist($interfaceGeneric);
// $entityManager->flush();
// return $interfaceGeneric;
}
/**
* @Route("/settings/port-externe/list", name="port_externe_list")
*/
public function listAction(Request $request, TranslatorInterface $translator)
{
$em = $this->getDoctrine()->getManager();
$list = $this->getDoctrine()->getRepository(PortExterne::class)->findAll();
// $queryBuilder = $em->createQueryBuilder()
// ->select('pe')
// ->from('App\Entity\PortExterne', 'pe')
// ->orderBy("pe.reference", "ASC");
// $adapter = new DoctrineORMAdapter($queryBuilder);
// $pagerfanta = new Pagerfanta($adapter);
$pageLength = $request->query->get("pageLength", $this->getParameter("portExterne.maxPerPage"));
// if ($pageLength == "Tout") {
// $qb = $em->createQueryBuilder()
// ->select('COUNT(pe.id)')
// ->from('App\Entity\PortExterne', 'pe');
//
// $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('port_externe/list.html.twig', [
'action' => 'list',
'page_title' => $translator->trans('Port Externe'),
'path_default' => 'port_externe_create',
'path_update' => 'port_externe_update',
'path_delete' => 'port_externe_delete',
'path_show_module' => 'port_externe_show_module',
'path_show_equipement' => 'port_externe_show_equipement',
'list' => $list,
// 'my_pager' => $pagerfanta,
'pageLength' => $pageLength,
]);
}
/**
* @Route("/settings/port-externe/edit/{id}", name="port_externe_update")
*/
public function updateAction(Request $request, $id, TranslatorInterface $translator)
{
$user = $this->getUser();
$pe = $this->getDoctrine()->getRepository('App\Entity\PortExterne')->findOneById($id);
$interfaceGen = $pe->getInterfaceGeneric();
$isMPO = isset($interfaceGen) ? 1 : 0;
$inUse = 0;
if ($isMPO) {
$specific = $interfaceGen->getInterfaceSpecific();
if (count($specific) > 0){
$inUse = 1;
}
}
if ($request->request->has('reference') && ($user->hasRole("ROLE_SUPER_ADMIN") || $user->hasRole("ROLE_ADMIN"))){
$em = $this->getDoctrine()->getManager();
$pe->setReference($request->request->get('reference'));
if ($request->request->get('application')) {
$pe->setApplication($request->request->get('application'));
}
if ($request->request->get('formFactor')) {
$pe->setFormFactor($request->request->get('formFactor'));
}
if ($request->request->get('distanceMax')) {
$pe->setDistanceMax($request->request->get('distanceMax'));
}
if ($request->request->get('debitMax')) {
$pe->setDebitMax($request->request->get('debitMax'));
}
if ($request->request->get('longeurOnde')) {
$pe->setLongeurOnde($request->request->get('longeurOnde'));
}
if ($request->request->get('marque')) {
$pe->setMarque($request->request->get('marque'));
}
$pe->setTypeConnector($this->getDoctrine()->getRepository('App\Entity\TypeConnector')->findOneById($request->request->get('typeConnector')));
$pe->setTypeLink($this->getDoctrine()->getRepository('App\Entity\TypeLink')->findOneById($request->request->get('typeLink')));
if ($request->request->get('sfpMpo')) {
$if = $pe->getInterfaceGeneric();
$this->createInterfaceGeneric($em, $if);
$pe->setInterfaceGeneric($if);
}
$em->persist($pe);
$em->flush();
return $this->redirectToRoute('port_externe_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();
return $this->render('port_externe/edit.html.twig', [
'action' => 'insert',
'page_title' => $translator->trans('Port Externe'),
'box_title' => '<i class="fa fa-plus-circle fa-fw"></i>'.$translator->trans('Add new'),
'typeLink' => $typeLink,
'typeConnector' => $typeConnector,
"pe" => $pe,
'typeInterconnection' => $typeInterconnection,
'isMPO'=>$isMPO,
'inUse'=>$inUse
]);
}
}
/**
* @IsGranted("ROLE_SUPER_ADMIN")
* @Route("/settings/port-externe/delete/{id}", name="port_externe_delete")
*/
public function deleteAction($id, TranslatorInterface $translator)
{
$em = $this->getDoctrine()->getManager();
$portExterne = $em->getRepository(PortExterne::class)->find($id);
$msgError = null;
// find rooms in usage
$ports = $em->getRepository(Port::class)->findByPortExterne($portExterne);
if (!$ports){
$em->remove($portExterne);
$em->flush();
}
else {
$msgError = $translator->trans('deleteError');
$this->addFlash(
'error',
$msgError
);
}
return $this->redirectToRoute('port_externe_list');
}
/**
* @Route("/settings/port-externe/show_module/{id}", name="port_externe_show_module")
*/
public function showModuleAction($id, TranslatorInterface $translator)
{
$em = $this->getDoctrine()->getManager();
$eqIds = $em->getRepository(PortExterne::class)->findModulesGenerique($id);
$list = array();
for ($i=0; $i < count($eqIds); $i++) {
$list[] = $em->getRepository(EquipmentGeneric::class)->find($eqIds[$i]['id']);
}
return $this->render('types/module_list.html.twig', [
'page_title' => $translator->trans('Liste des modules génériques'),
'box_title' => $translator->trans('Liste des modules génériques'),
'path_retour' => 'port_externe_list',
'path_update' => 'equipment_generic_module_update',
'path_delete' => 'equipment_generic_delete',
'path_show_equipement' => 'module_show_equipement_specifique',
'list' => $list
]);
}
/**
* @Route("/settings/port-externe/show_equipement/{id}", name="port_externe_show_equipement")
*/
public function showEquipementAction($id, TranslatorInterface $translator)
{
$em = $this->getDoctrine()->getManager();
$eqIds = $em->getRepository(PortExterne::class)->findEquipementsGenerique($id);
$list = array();
for ($i=0; $i < count($eqIds); $i++) {
$list[] = $em->getRepository(EquipmentGeneric::class)->find($eqIds[$i]['id']);
}
return $this->render('types/equipement_list.html.twig', [
'page_title' => $translator->trans('Liste des équipements génériques'),
'box_title' => $translator->trans('Liste des équipements génériques'),
'path_retour' => 'port_externe_list',
'path_update' => 'equipment_generic_update',
'path_delete' => 'equipment_generic_delete',
'list' => $list
]);
}
}