<?php
namespace App\Controller\Seguridades;
use App\Entity\Seguridades\{Pagina, Secciones, PermisosGrupo, PermisosUsuario};
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Component\HttpFoundation\{Request};
use Doctrine\ORM\EntityManagerInterface;
use Exception;
use Symfony\Component\Security\Core\User\UserInterface;
class SeccionesController extends AbstractController {
private $em;
private $msgCreate;
private $msgUpdate;
private $msgDelete;
private $msgNotFound;
public function __construct(EntityManagerInterface $em) {
date_default_timezone_set('America/Guayaquil');
$this->em = $em;
$this->msgCreate = "Registro creado exitosamente.";
$this->msgUpdate = "Registro actualizado exitosamente.";
$this->msgDelete = "Registro eliminado exitosamente.";
$this->msgNotFound = "Registro no encontrado.";
}
// * READ FUNCTIONS
/**
* @Route("/readSecciones", name="secciones_list")
*/
public function readSecciones(Request $request) {
$filtro = $request->request->get('filtro');
$idPagina = $request->request->get('idPagina');
$secciones = ($filtro === 'todoSecciones')
? $this->em->getRepository(Secciones::class)->findAll()
: $this->em->getRepository(Secciones::class)->findBy(['idPagina' => $idPagina]);
$list = array_map(fn($seccion) => [
'id' => $seccion->getId(),
'modulo' => $seccion->getIdPagina()->getIdModulo()->getNombre(),
'pagina' => $seccion->getIdPagina()->getMenu(),
'nombre' => $seccion->getNombre(),
'descripcion' => $seccion->getDescripcion()
], $secciones);
return $this->json(['data' => $list], 200);
}
// * CREATE OR UPDATE FUNCTIONS
/**
* @Route("/createUpdateSeccion", name="seccion_create_update")
*/
public function add(Request $request, UserInterface $user) {
try {
$data = $request->request->get('sections', []);
$id = $data['id'] ?? null;
$seccion = $id ? $this->em->getRepository(Secciones::class)->find($id) : new Secciones;
$seccion = $this->setData($seccion, $data, $user);
$this->em->persist($seccion);
$this->em->flush();
return $this->json(['response' => true, 'message' => $id ? $this->msgUpdate : $this->msgCreate,], 200);
} catch (Exception $e) {
return $this->json([
'response' => false,
'message' => sprintf('<b>%s</b> error al realizar el registro dentro de la petición <i>seccion_create_update</i>', $e->getMessage())
]);
}
}
private function setData(Secciones $seccion, $data, UserInterface $user) {
$seccion
->setNombre($data['nombre'])
->setDescripcion($data['descripcion']);
$seccion = $this->setGenericData($user, $seccion);
if ($data['id'] == null) :
$seccion->setIdPagina($this->em->getRepository(Pagina::class)->find($data['idPagina']));
endif;
return $seccion;
}
private function setGenericData(?UserInterface $user, $entity) {
$entity
->setIdUsuarioModificacion($user ? $user->getId() : '1')
->setFechaModificacion(new \DateTime())
->setIpModificacion($_SERVER['REMOTE_ADDR'] ?? '127.0.0.1');
return $entity;
}
// * DELETE FUNCTIONS
/**
* @Route("/deleteSeccion", name="seccion_delete")
*/
public function deleteSeccion(Request $request, UserInterface $user) {
try {
$id = $request->request->get('idSec');
$repository = $this->em->getRepository(Secciones::class);
$section = $repository->find($id);
if (!$section) :
return $this->json(['response' => false, 'message' => $this->msgNotFound, 'exception' => false], 404);
endif;
$hasDependencies = $this->em->getRepository(PermisosUsuario::class)->findOneBy(['idSecciones' => $id]) ||
$this->em->getRepository(PermisosGrupo::class)->findOneBy(['idSecciones' => $id]);
if ($hasDependencies) :
return $this->json(['response' => false, 'exception' => false], 200);
endif;
$this->em->remove($section);
$this->em->flush();
return $this->json(['response' => true, 'message' => $this->msgDelete, 'exception' => false], 200);
} catch (Exception $e) {
return $this->json([
'response' => false,
'message' => sprintf('<b>%s</b> error al realizar el registro dentro de la petición <i>seccion_delete</i>', $e->getMessage())
]);
}
}
}