<?php
namespace App\Controller;
use App\Entity\EventCustomDate;
use App\Entity\EventFormEntity;
use App\Entity\MobileAppEvent;
use App\Helper\ColorHelper;
use Exception;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Contracts\Translation\TranslatorInterface;
use Symfony\Component\HttpFoundation\Request;
class CreateFormsController extends AbstractController
{
private $translator;
public function __construct(TranslatorInterface $translator) {
$this->translator = $translator;
}
/**
* Vista del formulario para que la gente se registre.
*
* @Route("/register/form/{key}", name="create_forms_register")
*/
public function registerAction($key, Request $request)
{
$entityManager = $this->getDoctrine()->getManager();
$event = null;
$eventForm = null;
try {
// Buscar evento por keyword
$event = $entityManager->getRepository(MobileAppEvent::class)->findOneByKeyword($key);
if (!$event) {
throw new \Exception($this->translator->trans('Error, event not found'), 404);
}
// Convertir color HEX a RGB si existe
if ($event->getRegisterBgColor()) {
$event->setRegisterBgColor(ColorHelper::hexToRgb($event->getRegisterBgColor()));
}
// Buscar el último formulario vinculado al evento
$eventForms = $entityManager->getRepository(EventFormEntity::class)->findBy(
['event' => $event], // Relación correcta (no por ID)
['id' => 'DESC'], // Ordenar descendente
1 // Solo el más reciente
);
if (!$eventForms) {
throw new \Exception($this->translator->trans('Error, form not found'), 404);
}
$eventForm = $eventForms[count($eventForms) - 1];
} catch (\Exception $e) {
$this->addFlash('mensajeerror', $e->getMessage());
}
// Lógica de fecha personalizada
$customDate = null;
if ($event) {
$hoy = new \DateTimeImmutable('today');
$customDates = $entityManager->getRepository(EventCustomDate::class)->findBy(
['eid' => $event->getId()],
['date' => 'ASC']
);
foreach ($customDates as $dateObj) {
$eventDate = $dateObj->getDate();
// Fecha exacta de hoy
if ($eventDate->format('Y-m-d') === $hoy->format('Y-m-d')) {
$customDate = $eventDate;
break;
}
// Próxima fecha futura (si no hay coincidencia exacta)
if ($eventDate > $hoy && $customDate === null) {
$customDate = $eventDate;
}
}
}
// Token desde query string (opcional)
$token = $request->query->get('token');
// Detectar HTTP/HTTPS correctamente
$isHttps = (!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] !== 'off') || $_SERVER['SERVER_PORT'] == 443;
$httpHost = ($isHttps ? 'https://' : 'http://') . $_SERVER['HTTP_HOST'] . '/';
$bgStyle = 'background: linear-gradient(180deg, grey, white)';
if ($event && $event->getImageBackground()) {
$bgStyle = sprintf(
"background: url('%s%s') center / cover no-repeat fixed",
$httpHost,
$event->getImageBackground()
);
}
//dd($eventForm);
return $this->render('create-forms/register.html.twig', [
'bgStyle' => $bgStyle,
'event' => $event,
'eventForm' => $eventForm,
'httpHost' => $httpHost,
'customDate' => $customDate,
'token' => $token,
]);
}
/**
* @Route("/create-forms/{eid}", name="create_forms")
*/
public function createAction($eid)
{
return $this->render('create-forms/pruebaDragAndDrops.html.twig',[
'eid' => $eid,
'url' => '/api/create-forms/save/metadata',
]);
}
/**
* @Route("/create-forms/edit/{id}", name="create_forms_edit")
*/
public function editAction($id)
{
$entityManager = $this->getDoctrine()->getManager();
$eventForm = $entityManager->getRepository(EventFormEntity::class)->findOneById($id);
return $this->render('create-forms/pruebaDragAndDrops.html.twig',[
'eid' => $eventForm->getEid()->getId(),
'data' => json_encode($eventForm->getDataForm()),
'url' => '/api/create-forms/save/metadata',
]);
}
}