eventos_action.php 17 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290
  1. <?php
  2. session_start();
  3. require_once '../include/bd_pdo.php';
  4. require_once '../classes/Archivos.php';
  5. require_once '../classes/EventoInsignia.php';
  6. require_once '../classes/Fechas.php';
  7. if(!isset($_POST['tipo'])){
  8. $return['error'] = 'Error! No se recibieron los datos.';
  9. } else{
  10. date_default_timezone_set('America/Mexico_City');
  11. switch($_POST['tipo']){
  12. case 1: //SELECT ALL
  13. $_POST['year'] = intval(filter_var($_POST['year'], FILTER_SANITIZE_NUMBER_INT));
  14. $_POST['month'] = intval(filter_var($_POST['month'], FILTER_SANITIZE_NUMBER_INT));
  15. //if (($_POST['year'] . '-' . Fechas::dosDigitos($_POST['month'])) < '2023-04'){
  16. if (($_POST['year'] . '-' . Fechas::dosDigitos($_POST['month'])) < date('Y-m')){
  17. $eventos = array();
  18. $fechaIni = $_POST['year'] . '-' . Fechas::dosDigitos($_POST['month']) . '-01';
  19. $fechaFin = $_POST['year'] . '-' . Fechas::dosDigitos($_POST['month']) . '-' .cal_days_in_month(CAL_GREGORIAN, Fechas::dosDigitos($_POST['month']), $_POST['year']);
  20. $registros = EventoInsignia::getRegistroEvento($pdo, $_SESSION['usuario_id'], null, $fechaIni, $fechaFin);
  21. if (count($registros) > 0){
  22. $insignias = array_column($registros, 'insignia_id');
  23. $eventos = EventoInsignia::getDatosEventos($pdo, $_POST['month'], $_POST['year']);
  24. $eventos = depuraEventosAnteriores($eventos, $insignias);
  25. }
  26. if (count($eventos) == 0) {
  27. $return['html'] = '<div class="msgBox d-flex flex-row justify-content-center align-items-center mt-5">
  28. <img src="img/triangulos.svg" class="imgBoxIzq" />
  29. <img src="img/triangulos.svg" class="imgBoxDer" />
  30. <hr class="hrArriba">
  31. <hr class="hrAbajo">
  32. <div class="d-flex flex-column justify-content-center align-items-center display-5 text-center p-4">
  33. <div><span class="text-azul1 mx-1">NO</span>participaste en ningún evento de éste mes</div>
  34. </div>
  35. </div>';
  36. } else {
  37. $html = '';
  38. if (count($eventos) > 1) {
  39. reset($eventos);
  40. while ($evento = current($eventos)) {
  41. $index = key($eventos);
  42. $fechas = EventoInsignia::getFechasRomanizadas($evento['fechas'], $evento['periodicidad'], $_POST['year'] . '-' . Fechas::dosDigitos($_POST['month']), true);
  43. $eventos[$index]['texto'] = $fechas['texto'];
  44. $eventos[$index]['horario'] = $fechas['horario'];
  45. $eventos[$index]['horarioTemp'] = $fechas['horarioTemp'];
  46. next($eventos);
  47. }
  48. usort($eventos, function($a, $b) {
  49. $retval = $a['dia'] <=> $b['dia'];
  50. if ($retval == 0) {
  51. $retval = $a['horarioTemp'] <=> $b['horarioTemp'];
  52. }
  53. return $retval;
  54. });
  55. } else {
  56. $fechas = EventoInsignia::getFechasRomanizadas($eventos[0]['fechas'], $eventos[0]['periodicidad'], $_POST['year'] . '-' . Fechas::dosDigitos($_POST['month']), true);
  57. $eventos[0]['texto'] = $fechas['texto'];
  58. $eventos[0]['horario'] = $fechas['horario'];
  59. $eventos[0]['horarioTemp'] = $fechas['horarioTemp'];
  60. }
  61. foreach($eventos as $evento){
  62. $insignia = EventoInsignia::getDatosInsignia($pdo, $evento['evento_id']);
  63. $registro = EventoInsignia::getRegistroEvento($pdo, $_SESSION['usuario_id'], $evento['insignia_id']);
  64. if (count($registro) == 1) {
  65. $registro = $registro[0];
  66. $botones = getEstatus($registro);
  67. $html .= generaEvento($evento['insignia_id'], $evento['titulo'], $insignia['InsigniaTipo_desc'], $insignia['InsigniaTipo_color'], $evento['texto'], $evento['dia'], $fechas['horario'], $botones);
  68. }
  69. }
  70. if (!empty($html))
  71. $return['html'] = '<div class="mt-4">' . $html . '</div>';
  72. else
  73. $return['error'] = 'No fue posible generar los eventos';
  74. }
  75. } else {
  76. $eventos = EventoInsignia::getDatosEventos($pdo, $_POST['month'], $_POST['year']);
  77. if (count($eventos) == 0){
  78. $return['html'] = '<div class="msgBox d-flex flex-row justify-content-center align-items-center mt-5">
  79. <img src="img/triangulos.svg" class="imgBoxIzq" />
  80. <img src="img/triangulos.svg" class="imgBoxDer" />
  81. <hr class="hrArriba">
  82. <hr class="hrAbajo">
  83. <div class="d-flex flex-column justify-content-center align-items-center display-5 text-center p-4">
  84. <div>Aún<span class="text-azul1 mx-1">NO</span>hay eventos programados</div>
  85. </div>
  86. </div>';
  87. } else {
  88. $html = '';
  89. if (count($eventos) > 1) {
  90. while ($evento = current($eventos)) {
  91. $index = key($eventos);
  92. $fechas = EventoInsignia::getFechasRomanizadas($evento['fechas'], $evento['periodicidad'], $_POST['year'] . '-' . Fechas::dosDigitos($_POST['month']), true);
  93. $eventos[$index]['texto'] = $fechas['texto'];
  94. $eventos[$index]['horario'] = $fechas['horario'];
  95. $eventos[$index]['horarioTemp'] = $fechas['horarioTemp'];
  96. next($eventos);
  97. }
  98. usort($eventos, function($a, $b) {
  99. $retval = $a['dia'] <=> $b['dia'];
  100. if ($retval == 0) {
  101. $retval = $a['horarioTemp'] <=> $b['horarioTemp'];
  102. }
  103. return $retval;
  104. });
  105. } else {
  106. $fechas = EventoInsignia::getFechasRomanizadas($eventos[0]['fechas'], $eventos[0]['periodicidad'], $_POST['year'] . '-' . Fechas::dosDigitos($_POST['month']), true);
  107. $eventos[0]['texto'] = $fechas['texto'];
  108. $eventos[0]['horario'] = $fechas['horario'];
  109. $eventos[0]['horarioTemp'] = $fechas['horarioTemp'];
  110. }
  111. foreach($eventos as $evento){
  112. $insignia = EventoInsignia::getDatosInsignia($pdo, $evento['evento_id']);
  113. $registro = EventoInsignia::getRegistroEvento($pdo, $_SESSION['usuario_id'], $evento['insignia_id']);
  114. if (count($registro) == 1)
  115. $registro = $registro[0];
  116. $botones = getBotones($insignia, $evento, $registro);
  117. $html .= generaEvento($evento['insignia_id'], $evento['titulo'], $insignia['InsigniaTipo_desc'], $insignia['InsigniaTipo_color'], $evento['texto'], $evento['dia'], $evento['horario'], $botones, $evento['detalle']);
  118. }
  119. if (!empty($html))
  120. $return['html'] = '<div class="mt-4">' . $html . '</div>';
  121. else
  122. $return['error'] = 'No fue posible generar los eventos';
  123. }
  124. }
  125. break;
  126. case 2://Inscripcion a evento
  127. $_POST['insignia'] = filter_var($_POST['insignia'], FILTER_SANITIZE_NUMBER_INT);
  128. $stmt = $pdo->prepare('SELECT * FROM alu_fi_inscripcionevento(:Insignia, :Usuario)');
  129. $stmt->bindParam(':Insignia', $_POST['insignia']);
  130. $stmt->bindParam(':Usuario',$_SESSION['usuario_id']);
  131. if(!$stmt->execute()){
  132. $return['error'] = 'No fue posible inscribirte al evento ';
  133. print_r($stmt->errorInfo());
  134. }else{
  135. $return['msg'] = '¡Felicidades!';
  136. $return['ok'] = 'Te has inscrio a ';
  137. }
  138. $stmt->closeCursor();
  139. $stmt = null;
  140. break;
  141. case 3://Desinscripcion de evento
  142. $_POST['insignia'] = filter_var($_POST['insignia'], FILTER_SANITIZE_NUMBER_INT);
  143. $registro = EventoInsignia::getRegistroEvento($pdo, $_SESSION['usuario_id'], $_POST['insignia']);
  144. if(isset($registro[0]['evidencia']) && !is_null($registro[0]['evidencia']))
  145. $ejecuta = Archivos::eliminaArchivo('archivos/eventos/' . $_POST['shortname'] . '/' . $_POST['insignia'], $registro[0]['evidencia']);
  146. else
  147. $ejecuta = true;
  148. if ($ejecuta){
  149. $stmt = $pdo->prepare('SELECT * FROM alu_fd_inscripcionevento(:Insignia, :Usuario)');
  150. $stmt->bindParam(':Insignia', $_POST['insignia']);
  151. $stmt->bindParam(':Usuario', $_SESSION['usuario_id']);
  152. if(!$stmt->execute()){
  153. $return['error'] = 'No fue posible desinscribirte del evento ';
  154. print_r($stmt->errorInfo());
  155. }else{
  156. $evidencia = $stmt->fetch();
  157. $return['msg'] = '¡Que triste!';
  158. $return['ok'] = 'Te has desinscrio de ';
  159. }
  160. $stmt->closeCursor();
  161. $stmt = null;
  162. } else
  163. $return['error'] = 'No fue posible eliminar tu evidencia para desinscribirte del evento ';
  164. break;
  165. case 4://subir archivos
  166. $ruta = 'archivos/eventos/'.$_POST['shortname'];
  167. $carpeta = Archivos::existeCapeta($ruta);
  168. if(!$carpeta)//busca carpeta y la crea si no existe
  169. $carpeta = Archivos::creaCarpeta($ruta);
  170. if($carpeta) {
  171. $ruta .= '/'.$_POST['insignia'];
  172. $carpeta = Archivos::existeCapeta($ruta);//busca carpeta y la crea si no existe
  173. if(!$carpeta) //busca carpeta y la crea si no existe
  174. $carpeta = Archivos::creaCarpeta($ruta);
  175. if($carpeta) {//si existe o se creo la carpeta
  176. $nombre = "evidencia_" . $_SESSION['usuario_id'] . "_" . uniqid() . substr($_FILES['archivo']['name'][0], strrpos($_FILES['archivo']['name'][0], '.'));
  177. if(Archivos::agregaArchivo($_FILES['archivo']['tmp_name'][0], $ruta, $nombre)) {
  178. $stmt = $pdo->prepare('SELECT * FROM alu_fu_insigniaevidencia(:Insignia, :Usuario, :Evidencia)');
  179. $stmt->bindParam(':Insignia', $_POST['insignia']);
  180. $stmt->bindParam(':Usuario', $_SESSION['usuario_id']);
  181. $stmt->bindParam(':Evidencia', $nombre);
  182. if(!$stmt->execute()){
  183. $return['error'] = 'No fue posible subir el archivo';
  184. print_r($stmt->errorInfo());
  185. Archivos::eliminaArchivo($ruta, $nombre);
  186. }else{
  187. $return['ok'] = 'El archivo se subió correctamente';
  188. }
  189. $stmt->closeCursor();
  190. $stmt = null;
  191. } else
  192. $return['error'] = 'No fue posible cargar el archivo';
  193. } else
  194. $return['error'] = 'No fue posible acceder a la carpeta del evento';
  195. } else
  196. $return['error'] = 'No fue posible acceder a la carpeta principal';
  197. break;
  198. }
  199. }
  200. $return['json'] = json_encode($return);
  201. echo json_encode($return);
  202. function depuraEventosAnteriores($eventos, $insignias){
  203. //$eliminar = array();
  204. while ($evento = current($eventos)) {
  205. if (!in_array($evento['insignia_id'],$insignias)) {
  206. $index = key($eventos);
  207. unset($eventos[$index]);
  208. }
  209. next($eventos);
  210. }
  211. return $eventos;
  212. }
  213. function generaEvento($insignia_id, $titulo, $tipo, $color, $fechas, $dia, $horario, $botones, $detalle = null){
  214. $html = '<div>
  215. <div class="d-flex flex-row justify-content-start align-items-stretch evento">
  216. <div class="calendario d-flex flex-column justify-content-between align-items-center" style="border-top-color:' . $color . ';">
  217. <h1>' . $dia . '</h1>
  218. <span>' . $horario . '</span>
  219. </div>
  220. <div id="evento_' . $insignia_id . '" class="ml-0 ml-sm-4 flex-grow-1 d-flex flex-column justify-content-start align-items-start">
  221. <div class="tituloEvento"><span class="mr-1 indivisa-text-bold">' . $tipo . ':</span><span>' . $titulo . '<span>';
  222. if (!is_null($detalle))
  223. $html .= '<span class="fa-solid fa-circle-info ml-1" data-toggle="collapse" data-target="#detalle_' . $insignia_id . '" aria-expanded="true" aria-controls="detalle_' . $insignia_id . '"></span>';
  224. $html .= '</div>
  225. <div class="indivisa-text-italic">' . $fechas. '</div>
  226. </div>
  227. <div class="botones d-flex flex-column justify-content-around align-items-center">' . $botones . '</div>
  228. </div>';
  229. if (!is_null($detalle))
  230. $html .= '<div class="collapse" id="detalle_' . $insignia_id . '" data-parent="#eventos"><div class="p-3"><h6>Detalles del Evento</h6>' . $detalle . '</div></div>';
  231. $html .= '</div>';
  232. return $html;
  233. }
  234. function getEstatus($registro){
  235. $html = '';
  236. switch (strtoupper($registro['estado'])){
  237. case 'INSCRITO': $html .= '<div class="text-azul2 btn p-1"><i class="fa-regular fa-pen-to-square mr-1"></i>Inscrito al evento</div>'; break;
  238. case 'RECHAZADO': $html .= '<div class="text-danger btn p-1"><i class="ing-cancelar mr-1"></i>Insignia/Inscripción Rechazada</div>'; break;
  239. case 'AUTORIZADO': $html .= '<div class="text-success btn p-1"><i class="ing-aceptar mr-1"></i>Insignia/Inscripción Autorizada</div>'; break;
  240. case 'COMPLETADO': $html .= '<div class="text-azul1 btn p-1"><i class="ing-insignia4 mr-1"></i>Insignia Asignada</div>'; break;
  241. }
  242. if (!is_null($registro['comentario']))
  243. $html .= '<div class="text-secondary">' . $registro['comentarios'] . '</div>';
  244. return $html;
  245. }
  246. function getBotones($insignia, $evento, $registro){
  247. $html = '';
  248. $hoy = strtotime(date('Y-m-d h:i:s'));
  249. if(!isset($registro['estado'])) {//si el alumno no esta inscrito
  250. if (!is_null($insignia['InsigniaGeneral_inscripciones_inicial'])){
  251. if ($hoy >= strtotime($insignia['InsigniaGeneral_inscripciones_inicial']) && $hoy <= strtotime($insignia['InsigniaGeneral_inscripciones_final'])){
  252. $html .= '<button class="btn btn-verde btn-inscribir p-1" data-insignia="' . $insignia['Insignia_id'] . '" data-tipo="1" data-toggle="modal" data-target="#modalConfirmar">
  253. <span class="ing-reporte-resultados mr-1"></span>Inscribirme
  254. </button>';
  255. } else {
  256. if ($hoy < strtotime($insignia['InsigniaGeneral_inscripciones_inicial'])) {
  257. $html .= '<label class="txtLabel text-azul1 btn p-1"><span class="fa-regular fa-face-grin-beam-sweat text-azul1 mr-1"></span><span>El período de registro aún no se ha abierto</span></label>';
  258. } else {
  259. $html .= '<label class="txtLabel btn p-1"><span class="fa-regular fa-face-frown text-danger mr-1"></span><span>El período de registro ha terminado</span></label></div>';
  260. }
  261. }
  262. } else {
  263. $html .= '<label class="txtLabel btn p-1"><span class="ing-importante text-warning mr-1"></span><span class="text-primary">Ver detalle para registro</span></label>';
  264. }
  265. } else {//si esta inscrito
  266. $html .= '<button class="btn btn-rojo btn-desinscribir p-1" data-insignia="' . $insignia['Insignia_id'] . '" data-shortname="'. $evento['shortname'] .'" data-tipo="2" data-toggle="modal" data-target="#modalConfirmar">
  267. <span class="ing-cancelar mr-1"></span>Desinscribirme
  268. </button>';
  269. }
  270. if(isset($registro['estado']) && $insignia['Insignia_hasEvidencia']) {
  271. if (!$registro['evidencia']) {//si el evento necesita evidencia y no se ha subido
  272. if (is_null($insignia['Insignia_evidencia_desc']))
  273. $insignia['Insignia_evidencia_desc'] = '';
  274. $html .= '<button class="btn btn-azul1 addEvidencia p-1" data-insignia="' . $insignia['Insignia_id'] . '" data-shortname="' . $evento['shortname'] .'" data-toggle="modal" data-target="#modalSubirArchivo">
  275. <input type="hidden" value="' . $insignia['Insignia_evidencia_desc'] . '">
  276. <span class="ing-carga-archivo"></span> Subir Evidencia
  277. </button>';
  278. } else {
  279. $html .= '<a class="btn btn-azul2 p-1" href="./archivos/eventos/'. $evento['shortname']. '/' .$evento['insignia_id']. '/' . $registro['evidencia'] .'" target="_blank">
  280. <span class="ing-ver"></span> Ver Evidencia Cargada
  281. </a>';
  282. }
  283. }
  284. return $html;
  285. }