<?php
namespace App\Controller;
use App\Utils\Utils;
use App\Utils\Paramsutils;
use App\Utils\Dbutils;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Component\DependencyInjection\ParameterBag\ParameterBagInterface;
use Doctrine\DBAL\Connection;
use Symfony\Component\Mailer\MailerInterface;
// Controller para gestionar las vistas de admin y manage y sus respectivas funciones
class LandingController extends AbstractController {
/* * *************************************************** Paginas de Admin **************************************************** */
/**
* @Route("/admin", name="app_admin")
*/
public function admin(ParameterBagInterface $parameters, Connection $connection): Response {
$paramsutils = new Paramsutils;
$dbutils = new Dbutils;
$data = $paramsutils->leerParametros();
$params = $parameters->get("PARAMSCONF");
$dbconf = $parameters->get("DBCONF");
if (null !== $this->getUser()->getUsername() && $this->getUser()->getUsername() !== "Ko") {
$renderParamsArray = array();
$renderParamsArray["parametros"] = $params;
$renderParamsArray["user_session"] = $this->getUser()->getUsername();
$renderParamsArray["numcontacts"] = $dbutils->contarPeticiones($dbconf, $connection);
$renderParamsArray["numcontactsrecent"] = $dbutils->contarPeticiones($dbconf, $connection, date("Y/m/d H:i:s", strtotime("-1 month")), date("Y/m/d H:i:s", time()));
$renderParamsArray["default_service"] = $data["default_service"];
$renderParamsArray["emailenviopeticiones"] = $data["emailenviopeticiones"];
$renderParamsArray["ciudades"] = $data["ciudades"];
$renderParamsArray["servicios"] = $data["servicios"];
$renderParamsArray["blockedspam"] = $data["blockedspam"];
$renderParamsArray["data"]=$data;
return $this->render("/admin/admin.html.twig",
$renderParamsArray,
);
} else {
return $this->redirectToRoute("app_login");
}
}
// Exportar CSV (Post)
/**
* @Route("/admin/exportar-csv", name="app_exportar-csv")
*/
public function exportarcsv(ParameterBagInterface $parameters, Request $request, Connection $connection): Response {
$dbutils = new Dbutils;
$dbconf = $parameters->get("DBCONF");
if (null !== $this->getUser()->getUsername() && $this->getUser()->getUsername() !== "Ko") {
$request = $request->request;
$fechaInicial = ($request->has("fechaInicial")) ? $request->get("fechaInicial") : null;
$fechaFinal = ($request->has("fechaFinal")) ? $request->get("fechaFinal") : null;
$output = "";
$headers_printed = false;
$rows = $dbutils->exportarPeticiones($dbconf, $connection, "fecha", $fechaInicial, $fechaFinal);
foreach ($rows as $row) {
// print out column names as the first row
if (!$headers_printed) {
$output .= join(";", array_keys($row)) . "\n";
$headers_printed = true;
}
// remove newlines from all the fields and
// surround them with quote marks
foreach ($row as &$value) {
$value = str_replace("\r\n", "", $value);
$value = "\"" . $value . "\"";
}
$output .= join(";", $row) . "\n";
}
// set the headers
$size_in_bytes = strlen($output);
header("Content-type: application/vnd.ms-excel; charset=utf-8");
header("Content-disposition: attachment; filename=peticiones.csv; size=$size_in_bytes");
// send output
print mb_convert_encoding($output, "utf-8", "utf-8");
die();
} else {
return $this->redirectToRoute("app_login");
}
}
/***************************************************** Paginas de Manage **************************************************** */
// Vista Superadmin
/**
* @Route("/manage", name="app_manage")
*/
public function manage(ParameterBagInterface $parameters): Response{
$paramsutils = new Paramsutils;
$data = $paramsutils->leerParametros();
$paramsconf = $parameters->get("PARAMSCONF");
if (null !== $this->getUser()->getUsername() && $this->getUser()->getUsername() == "idento") {
$renderParamsArray = array();
foreach ($data as $key => $param) {
$renderParamsArray[$key] = $param;
}
$renderParamsArray["parametros"] = $paramsconf;
return $this->render("/admin/manage.html.twig",
$renderParamsArray,
);
} else {
return $this->redirectToRoute("app_login");
}
}
/**
* @Route("/manage/guardarGeneral", name="app_guardarGeneral")
*/
public function guardarGeneral(ParameterBagInterface $parameters, Request $request): Response {
$paramsutils = new Paramsutils;
$data = $paramsutils->leerParametros();
$paramsconf = $parameters->get("PARAMSCONF");
if (null !== $this->getUser()->getUsername() && $this->getUser()->getUsername() === "idento") {
$request = $request->request;
$result = $paramsutils->guardarParametros(paramsutils::GUARDARGENERAL, $paramsconf, $data, $request);
if ($result) {
return $this->redirectToRoute("app_manage");
}
} else {
return $this->redirectToRoute("app_login");
}
}
// - Editar Servicio (Post)
/**
* @Route("/manage/editarServicio", name="app_editarServicio")
*/
public function editarServicio(ParameterBagInterface $parameters, Request $request): Response {
$paramsutils = new Paramsutils;
$data = $paramsutils->leerParametros();
$paramsconf = $parameters->get("PARAMSCONF");
if (null !== $this->getUser()->getUsername() && $this->getUser()->getUsername() === "idento") {
$request = $request->request;
$servicio = ($request->get("servicio") ? $request->get("servicio") : FALSE);
$renderParamsArray = array();
$renderParamsArray["parametros"] = $paramsconf;
$renderParamsArray["ciudades"] = $data["ciudades"];
if ($servicio) {
$renderParamsArray["servicio"] = $data["servicios"][$servicio];
$renderParamsArray["servicio"]["nombreServicio"] = $servicio;
} else{
$renderParamsArray["servicio"] = array();
$renderParamsArray["servicio"]["name"] = "";
$renderParamsArray["servicio"]["route"] = "";
$renderParamsArray["servicio"]["default_city"] = "";
$renderParamsArray["servicio"]["nombreServicio"] = "";
}
}
return $this->render("/admin/editarServicio.html.twig",
$renderParamsArray,
);
}
/**
* @Route("/manage/guardarServicio", name="app_guardarServicio")
*/
public function guardarServicio(ParameterBagInterface $parameters, Request $request): Response {
$paramsutils = new Paramsutils;
$data = $paramsutils->leerParametros();
$paramsconf = $parameters->get("PARAMSCONF");
if (null !== $this->getUser()->getUsername() && $this->getUser()->getUsername() === "idento") {
$request = $request->request;
$paramsutils->guardarParametros(paramsutils::GUARDARSERVICIO, $paramsconf, $data, $request);
return $this->redirectToRoute("app_manage");
} else {
return $this->redirectToRoute("app_login");
}
}
/**
* @Route("/manage/borrarServicio", name="app_borrarServicio")
*/
public function borrarServicio(Request $request): Response {
$paramsutils = new Paramsutils;
$data = $paramsutils->leerParametros();
if (null !== $this->getUser()->getUsername() && $this->getUser()->getUsername() === "idento") {
$request = $request->request;
$servicio = $request->get("servicio");
unset($data["servicios"][$servicio]);
unset($data["configuration"][$servicio]);
$paramsutils->escribirParametros($data);
return $this->redirectToRoute("app_manage");
} else {
return $this->redirectToRoute("app_login");;
}
}
/**
* @Route("/manage/editarCiudad", name="app_editarCiudad")
*/
public function editarCiudad(ParameterBagInterface $parameters, Request $request): Response {
$paramsutils = new Paramsutils;
$data = $paramsutils->leerParametros();
$paramsconf = $parameters->get("PARAMSCONF");
if (null !== $this->getUser()->getUsername() && $this->getUser()->getUsername() === "idento") {
$request = $request->request;
$ciudad = ($request->get("ciudad") ? $request->get("ciudad") : FALSE);
$renderParamsArray = array();
$renderParamsArray["parametros"] = $paramsconf;
if ($ciudad) {
$renderParamsArray["ciudad"] = $data["ciudades"][$ciudad];
$renderParamsArray["ciudad"]["nombreCiudad"] = $ciudad;
} else{
$renderParamsArray["ciudad"] = array();
$renderParamsArray["ciudad"]["name"] = "";
$renderParamsArray["ciudad"]["route"] = "";
$renderParamsArray["ciudad"]["nombreCiudad"] = "";
}
}
return $this->render("/admin/editarCiudad.html.twig", $renderParamsArray);
}
/**
* @Route("/manage/guardarCiudad", name="app_guardarCiudad")
*/
public function guardarCiudad(ParameterBagInterface $parameters, Request $request): Response {
$paramsutils = new Paramsutils;
$data = $paramsutils->leerParametros();
$paramsconf = $parameters->get("PARAMSCONF");
if (null !== $this->getUser()->getUsername() && $this->getUser()->getUsername() === "idento") {
$request = $request->request;
$paramsutils->guardarParametros(paramsutils::GUARDARCIUDAD, $paramsconf, $data, $request);
return $this->redirectToRoute("app_manage");
} else {
return $this->redirectToRoute("app_login");
}
}
/**
* @Route("/manage/borrarCiudad", name="app_borrarCiudad")
*/
public function borrarCiudad(Request $request): Response {
$paramsutils = new Paramsutils;
$data = $paramsutils->leerParametros();
if (null !== $this->getUser()->getUsername() && $this->getUser()->getUsername() === "idento") {
$request = $request->request;
$ciudad = $request->get("ciudad");
unset($data["ciudades"][$ciudad]);
foreach ($data["configuration"] as $servicio => $value) {
unset($data["configuration"][$servicio][$ciudad]);
}
foreach ($data["servicios"] as $servicio => $value) {
if ($data["servicios"][$servicio]["default_city"] == $ciudad) {
if (!empty($data["ciudades"])) {
$data["servicios"][$servicio]["default_city"] = array_keys($data["ciudades"])[0];
}
}
}
$paramsutils->escribirParametros($data);
return $this->redirectToRoute("app_manage");
} else {
return $this->redirectToRoute("app_login");
}
}
/**
* @Route("/manage/editarConfiguracion", name="app_editarConfiguracion")
*/
public function editarConfiguracion(ParameterBagInterface $parameters, Request $request): Response {
$paramsutils = new Paramsutils;
$data = $paramsutils->leerParametros();
$paramsconf = $parameters->get("PARAMSCONF");
if (null !== $this->getUser()->getUsername() && $this->getUser()->getUsername() === "idento") {
$request = $request->request;
$servicio = ($request->get("servicio") ? $request->get("servicio") : FALSE);
$ciudad = ($request->get("ciudad") ? $request->get("ciudad") : FALSE);
$renderParamsArray = array();
$renderParamsArray["parametros"] = $paramsconf;
if ($servicio && $ciudad) {
$renderParamsArray["servicio"] = $data["servicios"][$servicio];
$renderParamsArray["servicio"]["nombreServicio"] = $servicio;
$renderParamsArray["ciudad"] = $data["ciudades"][$ciudad];
$renderParamsArray["ciudad"]["nombreCiudad"] = $ciudad;
if (!isset($data["configuration"][$servicio][$ciudad])) {
foreach ($renderParamsArray["parametros"]["conf"] as $conf => $valor) {
$data["configuration"][$servicio][$ciudad][$valor]= "";
}
}
$renderParamsArray["configuration"] = $data["configuration"][$servicio][$ciudad];
}
}
return $this->render("/admin/editarConfiguracion.html.twig", $renderParamsArray);
}
/**
* @Route("/manage/guardarConfiguracion", name="app_guardarConfiguracion")
*/
public function guardarConfiguracion(ParameterBagInterface $parameters, Request $request): Response {
$paramsutils = new Paramsutils;
$data = $paramsutils->leerParametros();
$paramsconf = $parameters->get("PARAMSCONF");
if (null !== $this->getUser()->getUsername() && $this->getUser()->getUsername() === "idento") {
$request = $request->request;
$paramsutils->guardarParametros(paramsutils::GUARDARDATOS, $paramsconf, $data, $request);
return $this->redirectToRoute("app_manage");
} else {
return $this->redirectToRoute("app_login");
}
}
/**
* @Route("/manage/borrarConfiguracion", name="app_borrarConfiguracion")
*/
public function borrarConfiguracion(Request $request): Response {
$paramsutils = new Paramsutils;
$data = $paramsutils->leerParametros();
if (null !== $this->getUser()->getUsername() && $this->getUser()->getUsername() === "idento") {
$request = $request->request;
$servicio = ($request->get("servicio") ? $request->get("servicio") : FALSE);
$ciudad = ($request->get("ciudad") ? $request->get("ciudad") : FALSE);
if (isset($data["configuration"][$servicio][$ciudad])) {
unset($data["configuration"][$servicio][$ciudad]);
}
$paramsutils->escribirParametros($data);
return $this->redirectToRoute("app_manage");
} else {
return $this->redirectToRoute("app_login");
}
}
// - Importar Campos (Post)
/**
* @Route("/importar-campos", name="app_importarcampos")
*/
public function importarCampos(ParameterBagInterface $parameters, Request $request, Connection $connection): Response {
$paramsutils = new Paramsutils;
$data = $paramsutils->leerParametros();
$paramsconf = $parameters->get("PARAMSCONF");
$dbconf = $parameters->get("DBCONF");
if (null !== $this->getUser()->getUsername() && $this->getUser()->getUsername() !== "Ko") {
$paramsutils->importarCampos($dbconf, $connection, $paramsconf, $data);
return $this->redirectToRoute("app_manage");
} else {
return $this->redirectToRoute("app_login");
}
}
/* * ************************************************* Vista Frontview ************************************************** */
// - Página Aviso legal
/**
* @Route("/aviso-legal", name="app_avisolegal")
*/
public function avisolegal(): Response {
$paramsutils = new Paramsutils;
$data = $paramsutils->leerParametros();
return $this->render("/index/aviso-legal.html", $data);
}
// - Página Política cookies
/**
* @Route("/politica-cookies", name="app_politicacookies")
*/
public function politicacookies(): Response {
$paramsutils = new Paramsutils;
$data = $paramsutils->leerParametros();
return $this->render("/index/politica-cookies.html", $data);
}
// - Página Política privacidad
/**
* @Route("/politica-privacidad", name="app_politicaprivacidad")
*/
public function politicaprivacidad(): Response {
$paramsutils = new paramsutils;
$data = $paramsutils->leerParametros();
return $this->render("/index/politica-privacidad.html", $data);
}
// - Página Política privacidad contacto
/**
* @Route("/politica-privacidad-contacto", name="app_politicaprivacidadcontacto")
*/
public function politicaprivacidadcontacto(): Response {
$paramsutils = new Paramsutils;
$data = $paramsutils->leerParametros();
return $this->render("/index/politica-privacidad-contacto.html", $data);
}
// // - Página Términos y condiciones
// #[Route("/terminos", name: "app_terminos")]
// public function terminos(): Response{
// $utils = new Utils;
// $data = $utils->leerParametros();
// return $this->render("/terminos.html",$data);
// }
/* * ************************************************* Vista Estandar ************************************************** */
// - Contacto · Action del formulario (Post)
/**
* @Route("/contacto", name="app_contacto")
*/
public function contacto(ParameterBagInterface $parameters, MailerInterface $mailer, Request $request, Connection $connection): Response {
$paramsutils = new Paramsutils;
$utils = new Utils;
$data = $paramsutils->leerParametros();
$paramsconf = $parameters->get("PARAMSCONF");
$dbconf = $parameters->get("DBCONF");
$service = $data["default_service"];
$city = $data["servicios"][$service]["default_city"];
// Si la petición incluye el nombre del formulario se toma ese, si no, se usa formulario1.
if ($request->get("formulario")) {
$formularioUsado = $dbconf[$request->get("formulario")];
$form = array();
foreach($formularioUsado as $itemKey => $itemValor) {
$form[$itemKey] = $request->get($itemKey);
}
} else
$form = $dbconf["formulario1"];
$result = $utils->manageContact($mailer, $parameters, $request, $data, $connection, $paramsconf, $dbconf, $service, $city, $form);
/* $result es true si el contacto no es spam (sólo si está activado el recaptcha se valida esto), si se insertó la petición en BBDD,
* se envió el email al administrador y el email al cliente confirmando su petición. Es false en cualquier otro caso.
*/
if ($request->isXmlHttpRequest()) { //Si cargamos el formulario por Ajax
if($result){
return $this->render("index/index.html.twig", $data);
} else {
return $this->render("admin/bundles/TwigBundle/Exception/error404.html", $data);
}
} else { //Redirección a la página correspondiente de gracias o error.
$route = $utils->getContactRoute($result, $paramsconf);
if ($paramsconf["level"] == 1) {
return $this->redirectToRoute($route, ["form"=> $form["formulario"],"city" => $city] );
} else if ($paramsconf["level"] == 2) {
return $this->redirectToRoute($route, ["form"=> $form["formulario"], "service" => $service, "city" => $city]);
}else{
return $this->redirectToRoute($route, ["form"=> $form["formulario"]]);
}
}
}
// - Contacto Enviado Nivel 0 · Recarga la página tras enviar el contacto con su confirmación
/**
* @Route("/contacto-enviado/{form}", name="app_contacto-enviado")
*/
public function contactoenviado(ParameterBagInterface $parameters, $form): Response {
$paramsutils = new Paramsutils;
$utils = new Utils;
$data = $paramsutils->leerParametros();
$paramsconf = $parameters->get("PARAMSCONF");
$service = $data["default_service"];
$city = $data["servicios"][$service]["default_city"];
$renderParamsArray = $utils->renderParamsArray($data, $paramsconf, $service, $city, $form, true);
if ($renderParamsArray != null) {
return $this->render("index/index.html.twig",
$renderParamsArray
);
} else
return $this->redirectToRoute("error404.html", $data);
}
// - Contacto no enviado Nivel 0 · Recarga la página tras enviar el contacto con el mensaje de error
/**
* @Route("/error-al-enviar-contacto/{form}", name="app_error-al-enviar-contacto")
*/
public function errorcontacto(ParameterBagInterface $parameters, $form): Response {
$paramsutils = new Paramsutils;
$utils = new Utils;
$data = $paramsutils->leerParametros();
$paramsconf = $parameters->get("PARAMSCONF");
$service = $data["default_service"];
$city = $data["servicios"][$service]["default_city"];
$renderParamsArray = $utils->renderParamsArray($data, $paramsconf, $service, $city, $form, false);
if ($renderParamsArray != null) {
return $this->render("index/index.html.twig", $renderParamsArray);
} else {
return $this->redirectToRoute("error404.html", $data);
}
}
// - Nivel 1 · Incluye redirecciones en caso de otros niveles
/**
* @Route("/{param1}", name="app_nivel1")
*/
public function nivel1(ParameterBagInterface $parameters, Request $request, $param1): Response {
$paramsutils = new Paramsutils;
$utils = new Utils;
$data = $paramsutils->leerParametros();
$paramsconf = $parameters->get("PARAMSCONF");
$session = $request->getSession();
$session->set("route", "/" . $param1);
if ($paramsconf["level"] == 0) {
// Si es nivel 0 redirigimos a la raíz.
return $this->redirectToRoute("app_index");
} else if ($paramsconf["level"] == 1) {
// Si es Nivel 1, renderizamos la landing de nivel 1 tomando el parámetro como la ciudad.
$service = strtolower($data["default_service"]);
$city = strtolower($param1);
$renderParamsArray = $utils->renderParamsArray($data, $paramsconf, $service, $city);
} else if ($paramsconf["level"] == 2) {
// Si es Nivel 2, entendemos que el parámetro es el servicio y redirigimos.
if (array_key_exists($param1, $data["servicios"])){
$service = strtolower($param1);
$city = reset($data["ciudades"]);
$city = strtolower($city["name"]);
} elseif (array_key_exists($param1, $data["ciudades"])){
$city = strtolower($param1);
$service = reset($data["servicios"]);
$service = strtolower($service["name"]);
}else{
$city = reset($data["ciudades"]);
$city = strtolower($city["name"]);
$service = reset($data["servicios"]);
$service = strtolower($service["name"]);
}
return $this->redirectToRoute( "app_nivel2", ["service" => $service, "city" => $city]);
}
if ($renderParamsArray != null) {
return $this->render("index/index.html.twig", $renderParamsArray);
} else {
return $this->render("bundles\TwigBundle\Exception\error404.html.twig");
}
}
// - Contacto Enviado Nivel 1
/**
* @Route("/{city}/contacto-enviado/{form}", name="app_contacto-enviado1")
*/
public function contactoenviado1(ParameterBagInterface $parameters, $city, $form): Response {
$utils = new Utils;
$paramsutils = new Paramsutils;
$data = $paramsutils->leerParametros();
$paramsconf = $parameters->get("PARAMSCONF");
$service = $data["default_service"];
$renderParamsArray = $utils->renderParamsArray($data, $paramsconf, $service, $city, $form, true);
if ($renderParamsArray != null) {
return $this->render("index/index.html.twig",
$renderParamsArray
);
} else {
return $this->render("bundles\TwigBundle\Exception\error404.html.twig");
}
}
// - Contacto No Enviado Nivel 1
/**
* @Route("/{city}/error-al-enviar-contacto/{form}", name="app_error-al-enviar-contacto1")
*/
public function errorcontacto1(ParameterBagInterface $parameters, $city, $form): Response {
$utils = new Utils;
$paramsutils = new Paramsutils;
$data = $paramsutils->leerParametros();
$paramsconf = $parameters->get("PARAMSCONF");
$service = $data["default_service"];
$renderParamsArray = $utils->renderParamsArray($data, $paramsconf, $service, $city, $form, true);
if ($renderParamsArray != null) {
return $this->render("index/index.html.twig",
$renderParamsArray
);
} else {
return $this->render("bundles\TwigBundle\Exception\error404.html.twig");
}
}
// - Nivel 2 · Incluye redirecciones en caso de otros niveles
/**
* @Route("/{service}/{city}", name="app_nivel2")
*/
public function nivel2(ParameterBagInterface $parameters, $service, $city): Response {
$utils = new Utils;
$paramsutils = new Paramsutils;
$data = $paramsutils->leerParametros();
$paramsconf = $parameters->get("PARAMSCONF");
if ($paramsconf["level"] == 0) {
// Nivel 0 - Redirigimos a la raíz
return $this->redirectToRoute("app_index");
} else if ($paramsconf["level"] == 1) {
// Nivel 1 - Redirigimos a la ciudad entendiendo que es el segundo parámetro
return $this->redirectToRoute("app_nivel1", ["param1" => $city] );
} else if ($paramsconf["level"] == 2) {
// Nivel 2 - Renderizamos una landing de nivel 2
$renderParamsArray = $utils->renderParamsArray($data, $paramsconf, $service, $city);
}
if ($renderParamsArray != null) {
return $this->render("index/index.html.twig",
$renderParamsArray
);
} else {
return $this->render("bundles\TwigBundle\Exception\error404.html.twig");
}
}
// - Contacto Enviado Nivel 2
/**
* @Route("/{service}/{city}/contacto-enviado/{form}", name="app_contacto-enviado2")
*/
public function contactoenviado2(ParameterBagInterface $parameters, $city, $form, $service): Response {
$utils = new Utils;
$paramsutils = new Paramsutils;
$data = $paramsutils->leerParametros();
$paramsconf = $parameters->get("PARAMSCONF");
$renderParamsArray = $utils->renderParamsArray($data, $paramsconf, $service, $city, $form, true);
if ($renderParamsArray != null) {
return $this->render("index/index.html.twig",
$renderParamsArray
);
} else {
return $this->render("bundles\TwigBundle\Exception\error404.html.twig");
}
}
// - Contacto No Enviado Nivel 2
/**
* @Route("/{service}/{city}/error-al-enviar-contacto/{form}", name="app_error-al-enviar-contacto2")
*/
public function errorcontacto2(ParameterBagInterface $parameters, $city, $form, $service): Response {
$utils = new Utils;
$paramsutils = new Paramsutils;
$data = $paramsutils->leerParametros();
$paramsconf = $parameters->get("PARAMSCONF");
$renderParamsArray = $utils->renderParamsArray($data, $paramsconf, $service, $city, $form, false);
if ($renderParamsArray != null) {
return $this->render("index/index.html.twig",
$renderParamsArray
);
} else {
return $this->render("bundles\TwigBundle\Exception\error404.html.twig");
}
}
}