138 lines
5.7 KiB
PHP
138 lines
5.7 KiB
PHP
<?php
|
|
|
|
require_once('../assets/php/config.php');
|
|
require_once('./Evento.php');
|
|
|
|
// Procesamos la cabecera Content-Type
|
|
$contentType= $_SERVER['CONTENT_TYPE'] ?? 'application/json';
|
|
$contentType = strtolower(str_replace(' ', '', $contentType));
|
|
|
|
// Verificamos corresponde con uno de los tipos soportados
|
|
$acceptedContentTypes = array('application/json;charset=utf-8', 'application/json');
|
|
$found = false;
|
|
foreach ($acceptedContentTypes as $acceptedContentType) {
|
|
if (substr($contentType, 0, strlen($acceptedContentType)) === $acceptedContentType) {
|
|
$found=true;
|
|
break;
|
|
}
|
|
}
|
|
|
|
if (!$found) {
|
|
// throw new ContentTypeNoSoportadoException('Este servicio REST sólo soporta el content-type application/json');
|
|
}
|
|
|
|
$result = null;
|
|
|
|
/**
|
|
* Las API REST usan la semántica de los métoods HTTP para gestionar las diferentes peticiones:
|
|
* https://en.wikipedia.org/wiki/Hypertext_Transfer_Protocol#Request_methods
|
|
*/
|
|
switch($_SERVER['REQUEST_METHOD']) {
|
|
// Consulta de datos
|
|
case 'GET':
|
|
$hall = $_GET["hall"];
|
|
$cinema = $_SESSION["cinema"];
|
|
// Comprobamos si es una consulta de un evento concreto -> eventos.php?idEvento=XXXXX
|
|
$idEvento = filter_input(INPUT_GET, 'idEvento', FILTER_VALIDATE_INT);
|
|
if ($idEvento) {
|
|
|
|
$result = [];
|
|
$result[] = Evento::buscaPorId((int)$idEvento,$hall,$cinema);
|
|
} else {
|
|
// Comprobamos si es una lista de eventos entre dos fechas -> eventos.php?start=XXXXX&end=YYYYY
|
|
$start = filter_input(INPUT_GET, 'start', FILTER_VALIDATE_REGEXP, array("options" => array("regexp"=>"/\d{4}-((0[1-9])|(1[0-2]))-((0[1-9])|([1-2][0-9])|(3[0-1]))/")));
|
|
$end = filter_input(INPUT_GET, 'end', FILTER_VALIDATE_REGEXP, array("options" => array("default" => null, "regexp"=>"/\d{4}-((0[1-9])|(1[0-2]))-((0[1-9])|([1-2][0-9])|(3[0-1]))/")));
|
|
if ($start) {
|
|
|
|
$startDateTime = $start . ' 00:00:00';
|
|
$endDateTime = $end;
|
|
if ($end) {
|
|
$endDateTime = $end. ' 00:00:00';
|
|
}
|
|
$result = Evento::buscaEntreFechas(1, $startDateTime, $endDateTime, $hall,$cinema);
|
|
} else {
|
|
|
|
// Comprobamos si es una lista de eventos completa
|
|
$result = Evento::buscaTodosEventos(1, $hall,$cinema); // HACK: normalmente debería de ser App::getSingleton()->idUsuario();
|
|
}
|
|
}
|
|
// Generamos un array de eventos en formato JSON
|
|
$json = json_encode($result, JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES | JSON_NUMERIC_CHECK);
|
|
|
|
http_response_code(200); // 200 OK
|
|
header('Content-Type: application/json; charset=utf-8');
|
|
header('Content-Length: ' . mb_strlen($json));
|
|
|
|
echo $json;
|
|
break;
|
|
// Añadir un nuevo evento
|
|
case 'POST':
|
|
// 1. Leemos el contenido que nos envían
|
|
$entityBody = file_get_contents('php://input');
|
|
// 2. Verificamos que nos envían un objeto
|
|
$dictionary = json_decode($entityBody);
|
|
if (!is_object($dictionary)) {
|
|
//throw new ParametroNoValidoException('El cuerpo de la petición no es valido');
|
|
}
|
|
|
|
// 3. Reprocesamos el cuerpo de la petición como un array PHP
|
|
$dictionary = json_decode($entityBody, true);
|
|
$dictionary['userId'] = 1;// HACK: normalmente debería de ser App::getSingleton()->idUsuario();
|
|
|
|
$e = Evento::creaDesdeDicionario($dictionary);
|
|
|
|
// 4. Guardamos el evento en BD
|
|
$result = Evento::guardaOActualiza($e);
|
|
|
|
// 5. Generamos un objecto como salida.
|
|
$json = json_encode($result, JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES | JSON_NUMERIC_CHECK);
|
|
|
|
http_response_code(201); // 201 Created
|
|
header('Content-Type: application/json; charset=utf-8');
|
|
header('Content-Length: ' . mb_strlen($json));
|
|
|
|
echo $json;
|
|
|
|
break;
|
|
case 'PUT':
|
|
error_log("PUT");
|
|
// 1. Comprobamos si es una consulta de un evento concreto -> eventos.php?idEvento=XXXXX
|
|
$idEvento = filter_input(INPUT_GET, 'idEvento', FILTER_VALIDATE_INT);
|
|
// 2. Leemos el contenido que nos envían
|
|
$entityBody = file_get_contents('php://input');
|
|
// 3. Verificamos que nos envían un objeto
|
|
$dictionary = json_decode($entityBody);
|
|
if (!is_object($dictionary)) {
|
|
//throw new ParametroNoValidoException('El cuerpo de la petición no es valido');
|
|
}
|
|
|
|
|
|
// 4. Reprocesamos el cuerpo de la petición como un array PHP
|
|
$dictionary = json_decode($entityBody, true);
|
|
$e = Evento::buscaPorId($idEvento);
|
|
$e->actualizaDesdeDiccionario($dictionary, ['id', 'userId']);
|
|
$result = Evento::guardaOActualiza($e);
|
|
|
|
// 5. Generamos un objecto como salida.
|
|
$json = json_encode($result, JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES | JSON_NUMERIC_CHECK);
|
|
|
|
http_response_code(200); // 200 OK
|
|
header('Content-Type: application/json; charset=utf-8');
|
|
header('Content-Length: ' . mb_strlen($json));
|
|
|
|
echo $json;
|
|
break;
|
|
case 'DELETE':
|
|
// 1. Comprobamos si es una consulta de un evento concreto -> eventos.php?idEvento=XXXXX
|
|
$idEvento = filter_input(INPUT_GET, 'idEvento', FILTER_VALIDATE_INT);
|
|
// 2. Borramos el evento
|
|
Evento::borraPorId($idEvento);
|
|
|
|
http_response_code(204); // 204 No content (como resultado)
|
|
header('Content-Type: application/json; charset=utf-8');
|
|
header('Content-Length: 0');
|
|
break;
|
|
default:
|
|
//throw new MetodoNoSoportadoException($_SERVER['REQUEST_METHOD']. ' no está soportado');
|
|
break;
|
|
} |