From af0d9ccd25586c7e1480f0a06be302bd40febf2c Mon Sep 17 00:00:00 2001 From: Markines16 <80280295+Markines16@users.noreply.github.com> Date: Sun, 30 May 2021 23:42:30 +0200 Subject: [PATCH] =?UTF-8?q?Peque=C3=B1os=20pasos=20con=20fullcalendar?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- panel_manager/eventos.php | 139 +++++++++++++++++++++++++++++++ panel_manager/index.php | 19 ++++- panel_manager/panel_manager.php | 11 ++- panel_manager/sessioncalendar.js | 107 ++++++++++++++++++++++++ 4 files changed, 274 insertions(+), 2 deletions(-) create mode 100644 panel_manager/eventos.php create mode 100644 panel_manager/sessioncalendar.js diff --git a/panel_manager/eventos.php b/panel_manager/eventos.php new file mode 100644 index 0000000..74fcfaa --- /dev/null +++ b/panel_manager/eventos.php @@ -0,0 +1,139 @@ + eventos.php?idEvento=XXXXX + $idEvento = filter_input(INPUT_GET, 'idEvento', FILTER_VALIDATE_INT); + if ($idEvento) { + $result = []; + $result[] = Evento::buscaPorId((int)$idEvento); + } 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); + } else { + // Comprobamos si es una lista de eventos completa + $result = Evento::buscaTodosEventos(1); // 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); + error_log("hmmm"); + // 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': + // 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; + + +} diff --git a/panel_manager/index.php b/panel_manager/index.php index 7d5f2dd..047c8b3 100644 --- a/panel_manager/index.php +++ b/panel_manager/index.php @@ -1,5 +1,8 @@ - + +
+ '.$panel.'
'; @@ -176,3 +185,11 @@ //General page content: require RAIZ_APP.'/HTMLtemplate.php'; ?> + + + + + + + + diff --git a/panel_manager/panel_manager.php b/panel_manager/panel_manager.php index 86c8e07..f851ca2 100644 --- a/panel_manager/panel_manager.php +++ b/panel_manager/panel_manager.php @@ -30,6 +30,8 @@

Dirección: '.$c_dir.'

Telefono: '.$c_tel.'


Espero que estes pasando un buen dia

+ + calendario '; return $panel; @@ -72,7 +74,14 @@ return $panel; } - + static function calendar(){ + $panel = ' +
+
+
'; + + return $panel; + } static function success(){ $panel = '

Operacion completada.

diff --git a/panel_manager/sessioncalendar.js b/panel_manager/sessioncalendar.js new file mode 100644 index 0000000..6b36044 --- /dev/null +++ b/panel_manager/sessioncalendar.js @@ -0,0 +1,107 @@ + + $(document).ready(function() { + var calendar = $('#calendar').fullCalendar({ + editable:true, + header:{ + left:'prev,next today', + center:'title', + right:'' + }, + events: 'eventos.php', + selectable:true, + selectHelper:true, + select: function(start, end, allDay) + { + var title = confirm("¿Estas son las fechas correctas?"); + if(title) + { + + var e = { + "start" : $.fullCalendar.formatDate(start, "Y-MM-DD HH:mm:ss"), + "end" : $.fullCalendar.formatDate(end, "Y-MM-DD HH:mm:ss"), + }; + $.ajax({ + url:"eventos.php", + type:"POST", + contentType: 'application/json; charset=utf-8', + dataType: "json", + data:JSON.stringify(e), + success:function() + { + calendar.fullCalendar('refetchEvents'); + alert("Added Successfully"); + } + }) + } + }, + editable:true, + eventResize:function(event) + { + var e = { + "id" : event.id, + "userId": event.userId, + "start" : $.fullCalendar.formatDate(event.start, "Y-MM-DD HH:mm:ss"), + "end" : $.fullCalendar.formatDate(event.end, "Y-MM-DD HH:mm:ss"), + "title" : event.title + }; + + $.ajax({ + url:"eventos.php?idEvento="+event.id, + type:"PUT", + contentType: 'application/json; charset=utf-8', + dataType:"json", + data:JSON.stringify(e), + success:function(){ + calendar.fullCalendar('refetchEvents'); + alert('Event Update'); + } + }) + }, + + eventDrop:function(event) + { + var e = { + "id" : event.id, + "userId": event.userId, + "start" : $.fullCalendar.formatDate(event.start, "Y-MM-DD HH:mm:ss"), + "end" : $.fullCalendar.formatDate(event.end, "Y-MM-DD HH:mm:ss"), + "title" : event.title + }; + $.ajax({ + url:"eventos.php?idEvento="+event.id, + contentType: 'application/json; charset=utf-8', + dataType: "json", + type:"PUT", + data:JSON.stringify(e), + success:function() + { + calendar.fullCalendar('refetchEvents'); + alert("Event Updated"); + } + }); + }, + + eventClick:function(event) + { + if(confirm("Are you sure you want to remove it?")) + { + var id = event.id; + $.ajax({ + url:"eventos.php?idEvento="+id, + contentType: 'application/json; charset=utf-8', + dataType: "json", + type:"DELETE", + success:function() + { + calendar.fullCalendar('refetchEvents'); + alert("Event Removed"); + }, + error: function(XMLHttpRequest, textStatus, errorThrown) { + alert("Status: " + textStatus); alert("Error: " + errorThrown); + } + }) + } + }, + + }); + }); \ No newline at end of file