<?php
namespace App\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\{JsonResponse, Request, Response};
use Symfony\Component\Routing\Annotation\Route;
use App\Utils\Ticketing;
use App\Utils\Functions;
use Symfony\Component\Routing\Generator\UrlGeneratorInterface;
/**
* @Route("/{_locale}", requirements={"_locale": "en|es"})
*/
class EventController extends AbstractController
{
private $ticketing;
private $functions;
public function __construct(Ticketing $ticketing, Functions $functions)
{
$this->ticketing = $ticketing;
$this->functions = $functions;
}
/**
* @Route("/events", name="events")
*/
public function events(Request $request): Response
{
// General function to set discount ref/affId
$this->functions->setDiscount($request);
$events = $this->ticketing->curl("events?dateNext=true&orderBy=eventDate&order=DESC&limit=24", "normal", [], "GET");
if(empty($events)){
$this->addFlash(
'notice',
'No se han encontrado eventos!'
);
return $this->redirectToRoute('home');
}
$userId = $this->functions->getUserLogged();
return $this->render('events/events.html.twig', [
"events" => $events["events"],
"userId" => $userId
]);
}
/**
* @Route("/events/search", name="events_search")
*/
public function eventsSearch(Request $request): Response
{
// General function to set discount ref/affId
$this->functions->setDiscount($request);
$search = urlencode($request->get('text'));
$events = $this->ticketing->curl("events?orderBy=eventDate&order=ASC&limit=24&name=".$search, "normal", [], "GET");
if(!$events || $events["code"]!="200"){
$this->addFlash(
'notice',
'No se han encontrado eventos!'
);
return $this->redirectToRoute('home');
}
return $this->render('events/events-search.html.twig', [
"events" => $events["events"]
]);
}
/**
* @Route("/event/check-code", name="event_check_code")
*/
public function checkEventCode(Request $request): Response
{
$eventId = $request->get('event');
$code = $request->get('code');
$accessKeysCode = $this->ticketing->curl("access-keys/code?event=" . $eventId ."&code=" . $code, "normal", [], "GET");
if ($accessKeysCode['code'] == 200) {
$session = $request->getSession();
$session->set('eventAccessCode', $accessKeysCode['name']);
}
$url = $this->generateUrl('event-tickets', ["event" => $eventId]);
return new JsonResponse([
'status' => true,
'data' => $accessKeysCode,
'url' => $url
], $accessKeysCode['code']);
}
/**
* @Route("/event-tickets", name="event-tickets")
*/
public function eventTickets(Request $request): Response
{
// General function to set discount ref/affId
$this->functions->setDiscount($request);
$filters = array_filter($request->query->all());
$session = $request->getSession();
$eventId = $request->get("event");
$event = $this->ticketing->curl("events/" . $eventId, "normal", [], "GET");
if (!$event || $event["code"] != "200" || !$event["enabled"]) {
if (!empty($event['attributes']['sale_date'])) {
// Popup event disabled personalization
$sale_date = strip_tags($event['attributes']['sale_date']);
$this->addFlash(
'notice',
$sale_date
);
} else {
$this->addFlash(
'notice',
'No se puede acceder al evento'
);
}
return $this->redirectToRoute('home');
}
$params = [
'filters' => $filters,
'format' => 1,
'event' => $event,
'anonymousPurchase' => $event['anonymousPurchase'],
'ticketsTypes' => null
];
// return $this->render('partials/popup/tickets-no-yet-availables.html.twig');
$userType = $session->get('userType');
if (empty($userType)) {
if ($session->has('eventAccessCode')) {
$accessKeys = $this->ticketing->curl("access-keys/code?event=" . $eventId . "&code=" . $session->get('eventAccessCode'), "normal", [], "GET");
if ($accessKeys['code'] != 200) {
$session->remove('eventAccessCode');
} else {
$params['ticketsTypes'] = $accessKeys['ticketsTypes'];
}
} else {
$accessKeys = $this->ticketing->curl("access-keys?count=true&event=" . $eventId, "normal", [], "GET");
if ($accessKeys["code"] == 200 && $accessKeys['quantity'] > 0) {
return $this->render('partials/popup/tickets-availables-with-code.html.twig', [
'event' => $eventId
]);
}
}
}
// Check if event has packs
$packs = $this->ticketing->curl("packs?onSale=true&orderBy=price&groupBy=price&event=" . $event['id'], "normal", [], "GET");
$hasPack = false;
if (!empty($packs['packs']))
$hasPack = true;
$params['hasPack'] = $hasPack;
return $this->render('events/event-tickets.html.twig', $params);
}
/**
* @Route("/event-tickets-seats", name="event-tickets-seats")
*/
public function eventTicketSeats(Request $request): Response
{
$userId = $this->functions->getUserLogged();
if (!$userId) {
$this->addFlash(
'notice',
'Debe iniciar sesión como usuario'
);
return $this->redirectToRoute('home');
}
// General function to set discount ref/affId
$this->functions->setDiscount($request);
$filters = array_filter($request->query->all());
if (!$request->get("event")) {
if (!empty($event['attributes']['sale_date'])) {
// Popup event disabled personalization
$sale_date = strip_tags($event['attributes']['sale_date']);
$this->addFlash(
'notice',
$sale_date
);
} else {
$this->addFlash(
'notice',
'No se puede acceder al evento'
);
}
return $this->redirectToRoute('home');
}
$eventId = $request->get("event");
// Max 6 tickets per event
$tickets = $this->ticketing->curl("users/count-event-tickets?userId=".$userId."&eventId=".$eventId, "normal", [], "GET");
$sents = $this->ticketing->curl("tickets/activity?origin=" . $userId . "&limit=1&enabled=true&type=transfer&event=" . $eventId, "normal", [], "GET");
$sales = $this->ticketing->curl("tickets/activity?origin=" . $userId . "&limit=1&enabled=true&type=sale&event=" . $eventId, "normal", [], "GET");
$total_user_tickets = $tickets['total'] + $sents['total'] + $sales['total'];
$tickets_total = $total_user_tickets + $request->get('quantity');
if ($tickets_total > 6) {
$this->addFlash(
'notice',
'Se puede comprar un máximo de 6 tickets por evento'
);
return $this->redirectToRoute('home');
}
$event = $this->ticketing->curl("events/get-one?eventId=" . $eventId, "normal", array(), "GET");
if (!$event || $event["code"] != "200" || !$event["enabled"]) {
if (!empty($event['attributes']['sale_date'])) {
// Popup event disabled personalization
$sale_date = strip_tags($event['attributes']['sale_date']);
$this->addFlash(
'notice',
$sale_date
);
} else {
$this->addFlash(
'notice',
'No se puede acceder al evento'
);
}
return $this->redirectToRoute('home');
}
if ($request->get("format")) {
$format = $request->get("format");
} else {
$format = 1;
};
if (!$request->get("order") || $request->get("order") == 1) {
if (!$request->get("format") || $request->get("format") == "1") {
$limit = 4;
} else {
$limit = 100;
}
} else {
$limit = 100;
}
$configs = array("limit" => $limit, "small" => 1, "group" => 1, "type" => 2);
foreach ($configs as $key => $config) {
$request->request->set($key, $config);
$filters[$key] = $config;
}
return $this->render('events/event-tickets-seats.html.twig', [
'filters' => $filters,
'format' => $format,
'event' => $event
]);
}
}