<?php
namespace App\Controller\Notificacion;
use App\Entity\Notificacion\AdjuntoNotificacion;
use App\Entity\Notificacion\NotificacionUsuario;
use App\Entity\Notificacion\Notificacion;
use App\Repository\Notificacion\NotificacionUsuarioRepository;
use App\Security\Voter\NotificacionUsuarioVoter;
use Doctrine\ORM\EntityManagerInterface;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Component\Workflow\Registry;
use App\Form\NotificacionUsuario\NotificacionUsuarioFiltroType;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\IsGranted;
#[Route('/notificacion/notificacion/usuario')]
class NotificacionUsuarioController extends AbstractController
{
public const FORM_CONSULTA_NOTIFICACION_USUARIO = 'consulta_notificacion_usuario_form';
public const FORM_CONSULTA_NOTIFICACION_USUARIO_STAR = 'consulta_notificacion_usuario_form_start';
public const FORM_CONSULTA_PERSONA_NOTIFICADA = 'consulta_persona_notificada_form';
#[Route('/', name: 'portal_aspirante_notificaciones', methods: ['GET'])]
public function index(NotificacionUsuarioRepository $notificacionUsuarioRepository): Response
{
$notificacionesUsuario = $notificacionUsuarioRepository->findByUser(
$this->getUser()
);
return $this->render('portal_aspirante/notificacion/index.html.twig', [
'notificacion_usuarios' => $notificacionesUsuario,
]);
}
#[Route('/{idView}/listado/{reset}', name: 'notificaciones_usuario_listado', methods: ['GET', 'POST'])]
public function listadoNotificacionesUsuario(
NotificacionUsuarioRepository $notificacionUsuarioRepository,
Notificacion $notificacion,
Request $request,
EntityManagerInterface $entityManager,
int $reset = null
): Response
{
// Reinicio el formulario si reset = 1
if ($reset == 1) {
$request->getSession()->remove(self::FORM_CONSULTA_NOTIFICACION_USUARIO);
}
// Inicializo el formulario con lo seteado previamente en la sesión
$data = ($request->getSession()->has(self::FORM_CONSULTA_NOTIFICACION_USUARIO))
? $request->getSession()->get(self::FORM_CONSULTA_NOTIFICACION_USUARIO)
: null;
$form = $this->createForm(NotificacionUsuarioFiltroType::class, $data);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
$request->getSession()->set(self::FORM_CONSULTA_NOTIFICACION_USUARIO, $form->getData());
$request->getSession()->remove(self::FORM_CONSULTA_NOTIFICACION_USUARIO_STAR);
}
$arrayMensaje = explode("\n",
preg_replace("/[\r\n|\r]+/", "\n",
strip_tags(html_entity_decode($notificacion->getMensaje()))
)
);
return $this->renderForm('notificacion_usuario/index.html.twig', [
'form' => $form,
'notificacionesUsuario' => $notificacionUsuarioRepository->findPorNotificacion($notificacion),
'notificacion' => $notificacion,
// 'sinHtml' => strip_tags(html_entity_decode($notificacion->getMensaje())),
'arrayMensaje' => $arrayMensaje
]);
}
#[Route('/notificacion_usuario_datos/{notificacion}', name: 'notificaciones_usuarios_datos', methods: ['GET', 'POST'])]
public function notificacionesUsuarioDatos(
Request $request,
Notificacion $notificacion,
NotificacionUsuarioRepository $notificacionUsuarioRepository
): Response
{
$idNotificacion = $notificacion->getId();
// Proceso si hay filtro de datos
if ($request->getSession()->has(self::FORM_CONSULTA_NOTIFICACION_USUARIO)) {
$params['formulario'] = array_filter($request->getSession()->get(self::FORM_CONSULTA_NOTIFICACION_USUARIO));
}
$start = $request->request->get('start');
$request->getSession()->set(self::FORM_CONSULTA_NOTIFICACION_USUARIO_STAR, $start);
/* $params['user'] = $this->getUser()->getUserIdentifier();*/
$params['draw'] = intval($request->request->get('draw'));
$params['start'] = $start;
$params['length'] = $request->request->get('length');
$params['search'] = $request->request->get('search');
$params['orders'] = $request->request->get('order');
$params['columns'] = $request->request->get('columns');
$params['idNotificacion'] = $idNotificacion;
$notificacionesUsuario = $notificacionUsuarioRepository->loadNotificacionesUsuarioData($params);
$params['start'] = 0;
$params['length'] = count($notificacionUsuarioRepository->findPorNotificacion($notificacion));
$notificacionesUsuarioSinPaginar = $notificacionUsuarioRepository->loadNotificacionesUsuarioData($params);
$respuesta['draw'] = $params['draw'];
$respuesta['recordsTotal'] = $params['length'];
$respuesta['recordsFiltered'] = count($notificacionesUsuarioSinPaginar);
$respuesta['data'] = $notificacionesUsuario;
return $this->json($respuesta);
}
#[Route('/{idView}', name: 'portal_aspirante_notificaciones_show', methods: ['GET'])]
public function show(
Request $request,
NotificacionUsuario $notificacionUsuario,
Registry $workflows,
EntityManagerInterface $entityManager
): Response
{
do {
$this->denyAccessUnlessGranted(NotificacionUsuarioVoter::ACCESS, $notificacionUsuario);
$workflow = $workflows->get($notificacionUsuario, 'notificacion_usuario');
if ($workflow->can($notificacionUsuario, 'leido'))
{
$workflow->apply($notificacionUsuario, 'leido',[
'sso_user' => $this->getUser(),
]);
$entityManager->flush();
}
} while (false);
return $this->render('portal_aspirante/notificacion/show.html.twig', [
'notificacion_usuario' => $notificacionUsuario,
]);
}
#[Route('/{idView}/descargar', name: 'portal_aspirante_notificacion_adjunto_notificacion_descargar')]
public function descargar(Request $request, AdjuntoNotificacion $adjuntoNotificacion): Response
{
$extensionArray = explode('.',$adjuntoNotificacion->getUrlAdjunto());
$extensionArray = array_splice($extensionArray, 1, count($extensionArray));
$extensionFinal = "";
foreach($extensionArray as $extension)
{
$extensionFinal = $extensionFinal.'.'.$extension;
}
$rutaCarpeta = $_ENV["APP_FILES_NOTIFICACIONES"];
$fecha = $adjuntoNotificacion->getNotificacion()->getFechaHoraAlta()->format('Y-m-d');
$rutaArchivo = $rutaCarpeta.'/'.$fecha.'/'.$adjuntoNotificacion->getNotificacion()->getId().'/';
return $this->file(
$rutaArchivo.$adjuntoNotificacion->getUrlAdjunto(),
$adjuntoNotificacion->getDescripcion().$extensionFinal);
}
}