<?php
namespace App\Controller;
use Doctrine\ORM\EntityManagerInterface;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\DependencyInjection\ParameterBag\ParameterBagInterface;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\String\Slugger\SluggerInterface;
use Symfony\Component\Routing\Annotation\Route;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\IsGranted;
use App\Entity\Contacto;
use App\Entity\PreguntasFrecuentes;
use App\Entity\User;
use DateTime;
class ContactoController extends AbstractController
{
private $entityManager;
//Repositorios
private $preguntasFrecuentesRepository;
private $contactoRepository;
private $userRepository;
public function __construct(EntityManagerInterface $entityManager, ParameterBagInterface $parameterBag)
{
//Doctrine
$this->entityManager = $entityManager;
$this->preguntasFrecuentesRepository = $this->entityManager->getRepository(PreguntasFrecuentes::class);
$this->contactoRepository = $this->entityManager->getRepository(Contacto::class);
$this->userRepository = $this->entityManager->getRepository(User::class);
}
/**
* @Route("/contacto", name="app_contacto")
*/
public function index(): Response
{
//Obtengo las preguntas frecuentes
$preguntasFrecuentes = $this->preguntasFrecuentesRepository->findByPreguntasFrecuentesActivas();
//Retorno a la vista
return $this->render(
'Contacto/index.html.twig',
[
'preguntasFrecuentes' => $preguntasFrecuentes,
]
);
}
/**
* Require ROLE_ADMIN for only this controller method.
*
* @Route("/app/contacto/listar/", name="app_contacto_listar")
*
* @IsGranted("ROLE_ADMIN")
*/
public function listarContactos(): Response
{
//Obtengo las preguntas frecuentes
$contactos = $this->contactoRepository->findAll();
//Retorno a la vista
return $this->render(
'Contacto/listadoContactos.html.twig',
[
'contactos' => $contactos,
]
);
}
/**
* Require ROLE_ADMIN for only this controller method.
*
* @Route("/contacto/ver/{idContacto}", name="app_contacto_ver")
*
* @IsGranted("ROLE_ADMIN")
*/
public function verContacto($idContacto): Response
{
//Obtengo las preguntas frecuentes
$contacto = $this->contactoRepository->find($idContacto);
//Retorno a la vista
return $this->render(
'Contacto/verContacto.html.twig',
[
'contacto' => $contacto,
]
);
}
/**
* Require ROLE_ADMIN for only this controller method.
*
* @Route("/contacto/marcarLeido/{idContacto}", name="app_contacto_marcarLeido")
*
* @IsGranted("ROLE_ADMIN")
*/
public function marcarComoLeido($idContacto): Response
{
//Obtengo las preguntas frecuentes
$contacto = $this->contactoRepository->find($idContacto);
//Si esta como leido lo marco, sino al reves
if ($contacto->isLeido()) {
$contacto->setLeido(false);
} else {
$contacto->setLeido(true);
}
//Le doy persistencia
$this->entityManager->persist($contacto);
//Asiento los cambios en la base de datos
$this->entityManager->flush();
//Redirecciono
return $this->redirectToRoute('app_contacto_listar');
}
/**
* Require ROLE_ADMIN for only this controller method.
*
* @Route("/contacto/marcarDestacado/{idContacto}", name="app_contacto_marcarDestacado")
*
* @IsGranted("ROLE_ADMIN")
*/
public function marcarComoDestacado($idContacto): Response
{
//Obtengo las preguntas frecuentes
$contacto = $this->contactoRepository->find($idContacto);
//Si esta como leido lo marco, sino al reves
if ($contacto->isFlagDestacado()) {
$contacto->setFlagDestacado(false);
} else {
$contacto->setFlagDestacado(true);
}
//Le doy persistencia
$this->entityManager->persist($contacto);
//Asiento los cambios en la base de datos
$this->entityManager->flush();
//Redirecciono
return $this->redirectToRoute('app_contacto_listar');
}
/**
* @Route("/api/contacto", name="app_contacto_nuevo")
*/
public function contactoNuevo(Request $request, SluggerInterface $slugger)
{
//Capturo los parametros
$nombre = $request->get("nombre");
$email = $request->get("email");
$mensaje = $request->get("mensaje");
$usuarioId = $request->get("usuario");
//Chequeo que existan los parametros y no sean vacios
if ($nombre != "" and $email != "" and $mensaje != "") {
//Creo
$contacto = new Contacto();
$contacto->setFlagDestacado(false);
$contacto->setNombre($nombre);
$contacto->setEmail($email);
$contacto->setMensaje($mensaje);
$contacto->setLeido(false);
$contacto->setTipo("Mensaje Directo");
$contacto->setFecha(new DateTime());
//Si no es un ID por defecto , fue comentario de usuario logueado..
if ($usuarioId != "0") {
//Recupero el Usuario
$usuario = $this->userRepository->find($usuarioId);
//Seteo
$contacto->setUsuarioLogueado($usuario);
} else {
//Seteo
$contacto->setUsuarioLogueado(null);
}
//Le doy persistencia a
$this->entityManager->persist($contacto);
//Asiento los cambios en la base de datos
$this->entityManager->flush();
//Retorno el response
return $this->json(['status' => 'OK']);
}
//Retorno el response
return $this->json(['status' => 'Error no estan completo los parametros']);
}
}